Add some more SSE insns.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1660 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/vg_to_ucode.c b/coregrind/vg_to_ucode.c
index ddafe03..58e06f8 100644
--- a/coregrind/vg_to_ucode.c
+++ b/coregrind/vg_to_ucode.c
@@ -3627,6 +3627,14 @@
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 @@
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 @@
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