]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Handle Iop_ReinterpF32asI32, as needed for exp-ptrcheck.
authorJulian Seward <jseward@acm.org>
Tue, 29 Jul 2008 09:48:26 +0000 (09:48 +0000)
committerJulian Seward <jseward@acm.org>
Tue, 29 Jul 2008 09:48:26 +0000 (09:48 +0000)
git-svn-id: svn://svn.valgrind.org/vex/trunk@1859

VEX/priv/host-amd64/isel.c

index ef9dbc1dc9e2d86a93d0a50d2b988c240bb5b22b..26af4935bad97d0bfec105673615a1145d87495c 100644 (file)
@@ -1607,6 +1607,20 @@ static HReg iselIntExpr_R_wrk ( ISelEnv* env, IRExpr* e )
             return dst;
          }
 
+         /* ReinterpF32asI32(e) */
+         /* Given an IEEE754 single, produce an I64 with the same bit
+            pattern in the lower half. */
+         case Iop_ReinterpF32asI32: {
+            AMD64AMode* m8_rsp = AMD64AMode_IR(-8, hregAMD64_RSP());
+            HReg        dst    = newVRegI(env);
+            HReg        src    = iselFltExpr(env, e->Iex.Unop.arg);
+            /* paranoia */
+            set_SSE_rounding_default(env);
+            addInstr(env, AMD64Instr_SseLdSt(False/*store*/, 4, src, m8_rsp));
+            addInstr(env, AMD64Instr_LoadEX(4, False/*unsigned*/, m8_rsp, dst ));
+            return dst;
+         }
+
          case Iop_16to8:
          case Iop_32to8:
          case Iop_64to8: