tgsi: use EBX everywhere, be sure to push/pop it
authorKeith Whitwell <keith@tungstengraphics.com>
Thu, 1 May 2008 14:27:53 +0000 (15:27 +0100)
committerKeith Whitwell <keith@tungstengraphics.com>
Thu, 1 May 2008 14:37:30 +0000 (15:37 +0100)
src/gallium/auxiliary/tgsi/exec/tgsi_sse2.c

index 5e133a9..06df3db 100755 (executable)
@@ -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