]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Stuff needed for Memcheck of SSE1 instructions.
authorJulian Seward <jseward@acm.org>
Fri, 10 Dec 2004 18:56:29 +0000 (18:56 +0000)
committerJulian Seward <jseward@acm.org>
Fri, 10 Dec 2004 18:56:29 +0000 (18:56 +0000)
git-svn-id: svn://svn.valgrind.org/vex/trunk@646

VEX/priv/host-x86/isel.c
VEX/priv/ir/irdefs.c

index 7d14df253a914a7d62a8760190642f53867d5b92..574889c854fef2a50c935b3cfb43cc2548e4e387 100644 (file)
@@ -1130,6 +1130,17 @@ static HReg iselIntExpr_R_wrk ( ISelEnv* env, IRExpr* e )
             return dst;
          }
 
+         case Iop_128to32: {
+            HReg      dst  = newVRegI(env);
+            HReg      vec  = iselVecExpr(env, e->Iex.Unop.arg);
+            X86AMode* esp0 = X86AMode_IR(0, hregX86_ESP());
+            sub_from_esp(env, 16);
+            addInstr(env, X86Instr_SseLdSt(False/*store*/, vec, esp0));
+            addInstr(env, X86Instr_Alu32R( Xalu_MOV, X86RMI_Mem(esp0), dst ));
+            add_to_esp(env, 16);
+            return dst;
+         }
+
          case Iop_16to8:
          case Iop_32to8:
          case Iop_32to16:
index 0f0306ca7eea51ca4f65c613d566960122302280..3ab67ac5cf94a43c78cd0f4a337b0982255a6e75 100644 (file)
@@ -286,15 +286,17 @@ void ppIROp ( IROp op )
       case Iop_CmpLE64F0x2: vex_printf("CmpLE64F0x2"); return;
       case Iop_CmpUN64F0x2: vex_printf("CmpUN64F0x2"); return;
 
-      case Iop_64HLto128: vex_printf("64HLto128"); return;
       case Iop_128to64:   vex_printf("128to64");   return;
       case Iop_128HIto64: vex_printf("128HIto64"); return;
+      case Iop_64HLto128: vex_printf("64HLto128"); return;
 
-      case Iop_32Uto128:   vex_printf("32Uto128"); return;
       case Iop_64Uto128:   vex_printf("64Uto128"); return;
-      case Iop_Set128lo32: vex_printf("Set128lo32"); return;
       case Iop_Set128lo64: vex_printf("Set128lo64"); return;
 
+      case Iop_32Uto128:   vex_printf("32Uto128"); return;
+      case Iop_128to32:    vex_printf("128to32"); return;
+      case Iop_Set128lo32: vex_printf("Set128lo32"); return;
+
       case Iop_And128:     vex_printf("And128"); return;
       case Iop_Or128:      vex_printf("Or128");  return;
       case Iop_Xor128:     vex_printf("Xor128"); return;
@@ -1217,6 +1219,7 @@ void typeOfPrimop ( IROp op, IRType* t_dst, IRType* t_arg1, IRType* t_arg2 )
       case Iop_128to64: case Iop_128HIto64: 
          UNARY(Ity_I64, Ity_V128);
 
+      case Iop_128to32:    UNARY(Ity_I32, Ity_V128);
       case Iop_32Uto128:   UNARY(Ity_V128, Ity_I32);
       case Iop_64Uto128:   UNARY(Ity_V128, Ity_I64);
       case Iop_Set128lo32: BINARY(Ity_V128, Ity_V128,Ity_I32);