summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/gallium/auxiliary/tgsi/exec/tgsi_sse2.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/gallium/auxiliary/tgsi/exec/tgsi_sse2.c b/src/gallium/auxiliary/tgsi/exec/tgsi_sse2.c
index 5e133a96634..06df3dbb05b 100755
--- a/src/gallium/auxiliary/tgsi/exec/tgsi_sse2.c
+++ b/src/gallium/auxiliary/tgsi/exec/tgsi_sse2.c
@@ -103,15 +103,9 @@ get_output_base( void )
static struct x86_reg
get_temp_base( void )
{
-#ifdef WIN32
return x86_make_reg(
file_REG32,
reg_BX );
-#else
- return x86_make_reg(
- file_REG32,
- reg_SI );
-#endif
}
static struct x86_reg
@@ -2177,12 +2171,16 @@ tgsi_emit_sse2(
tgsi_parse_init( &parse, tokens );
- /* Can't just use EDI without save/restoring it:
+ /* Can't just use EDI, EBX without save/restoring them:
*/
x86_push(
func,
get_immediate_base() );
+ x86_push(
+ func,
+ get_temp_base() );
+
/*
* Different function args for vertex/fragment shaders:
@@ -2309,10 +2307,14 @@ tgsi_emit_sse2(
soa_to_aos( func, 9, 2, 10, 11 );
}
- /* Can't just use EDI without save/restoring it:
+ /* Can't just use EBX, EDI without save/restoring them:
*/
x86_pop(
func,
+ get_temp_base() );
+
+ x86_pop(
+ func,
get_immediate_base() );
#ifdef WIN32