From: Julian Seward Date: Fri, 10 Dec 2004 18:56:29 +0000 (+0000) Subject: Stuff needed for Memcheck of SSE1 instructions. X-Git-Tag: svn/VALGRIND_3_0_1^2~688 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e02f9b6c7a1d80f53e62bcd40686f965a91779c8;p=thirdparty%2Fvalgrind.git Stuff needed for Memcheck of SSE1 instructions. git-svn-id: svn://svn.valgrind.org/vex/trunk@646 --- diff --git a/VEX/priv/host-x86/isel.c b/VEX/priv/host-x86/isel.c index 7d14df253a..574889c854 100644 --- a/VEX/priv/host-x86/isel.c +++ b/VEX/priv/host-x86/isel.c @@ -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: diff --git a/VEX/priv/ir/irdefs.c b/VEX/priv/ir/irdefs.c index 0f0306ca7e..3ab67ac5cf 100644 --- a/VEX/priv/ir/irdefs.c +++ b/VEX/priv/ir/irdefs.c @@ -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);