|
From: <sv...@va...> - 2008-07-29 09:48:19
|
Author: sewardj
Date: 2008-07-29 10:48:26 +0100 (Tue, 29 Jul 2008)
New Revision: 1859
Log:
Handle Iop_ReinterpF32asI32, as needed for exp-ptrcheck.
Modified:
trunk/priv/host-amd64/isel.c
Modified: trunk/priv/host-amd64/isel.c
===================================================================
--- trunk/priv/host-amd64/isel.c 2008-07-29 09:47:21 UTC (rev 1858)
+++ trunk/priv/host-amd64/isel.c 2008-07-29 09:48:26 UTC (rev 1859)
@@ -1607,6 +1607,20 @@
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:
|