From: Julian Seward Date: Sun, 1 Jun 2003 18:49:12 +0000 (+0000) Subject: Add some more SSE insns. X-Git-Tag: svn/VALGRIND_2_0_0~124 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a6ab35094702148e5e87cc5fac851e02447cb152;p=thirdparty%2Fvalgrind.git Add some more SSE insns. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1660 --- diff --git a/coregrind/vg_to_ucode.c b/coregrind/vg_to_ucode.c index ddafe03616..58e06f833d 100644 --- a/coregrind/vg_to_ucode.c +++ b/coregrind/vg_to_ucode.c @@ -3627,6 +3627,14 @@ static Addr disInstr ( UCodeBlock* cb, Addr eip, Bool* isEnd ) goto decode_success; } + /* CVTSS2SD -- convert one single float to double. */ + if (insn[0] == 0xF3 && insn[1] == 0x0F && insn[2] == 0x5A) { + vg_assert(sz == 4); + eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+3, 4, "cvtss2sd", + insn[0], insn[1], insn[2] ); + goto decode_success; + } + /* SHUFPS */ if (insn[0] == 0x0F && insn[1] == 0xC6) { vg_assert(sz == 4); @@ -3643,6 +3651,14 @@ static Addr disInstr ( UCodeBlock* cb, Addr eip, Bool* isEnd ) goto decode_success; } + /* MULSD */ + if (insn[0] == 0xF2 && insn[1] == 0x0F && insn[2] == 0x59) { + vg_assert(sz == 4); + eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+3, 8, "mulsd", + insn[0], insn[1], insn[2] ); + goto decode_success; + } + /* ADDPS */ if (insn[0] == 0x0F && insn[1] == 0x58) { vg_assert(sz == 4); @@ -3659,6 +3675,24 @@ static Addr disInstr ( UCodeBlock* cb, Addr eip, Bool* isEnd ) goto decode_success; } + /* PUNPCKLgg (src)xmmreg-or-mem, (dst)xmmreg */ + /* 60 is BW, 61 is WD, 62 is DQ */ + if (sz == 2 + && insn[0] == 0x0F && insn[1] == 0x62) { + eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+2, 16, "punpckldq", + 0x66, insn[0], insn[1] ); + goto decode_success; + } + + /* PADDgg (src)xmmreg-or-mem, (dst)xmmreg */ + /* FC is B, FD is W, FE is D */ + if (sz == 2 + && insn[0] == 0x0F && insn[1] == 0xFE) { + eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+2, 16, "paddd", + 0x66, insn[0], insn[1] ); + goto decode_success; + } + /* MOVSD -- move 8 bytes of XMM reg to/from XMM reg or mem. */ if (insn[0] == 0xF2 && insn[1] == 0x0F