|
From: <jhr...@t-...> - 2003-10-19 18:08:59
|
Hi Tom,
I wrote:
> > That's UNPCKLPD which seems to be present in CVS now, probably
> > from Julian's commit this morning.
>
> OK, I'll check that next.
Yes, Julian's commit fixed most problems already. Here's my diff -u -w
against CVS HEAD:
----------
--- vg_to_ucode.c.orig Sun Oct 19 17:53:48 2003
+++ vg_to_ucode.c Sun Oct 19 18:45:30 2003
@@ -4185,14 +4185,22 @@
goto decode_success;
}
- /* 0x14: UNPCKLPD (src)xmmreg-or-mem, (dst)xmmreg */
- /* 0x15: UNPCKHPD (src)xmmreg-or-mem, (dst)xmmreg */
- if (sz == 2
- && insn[0] == 0x0F
+ /* 0x0F 0x14: UNPCKLPS (src)xmmreg-or-mem, (dst)xmmreg */
+ /* 0x0F 0x15: UNPCKHPS (src)xmmreg-or-mem, (dst)xmmreg */
+ /* 0x66 0x0F 0x14: UNPCKLPD (src)xmmreg-or-mem, (dst)xmmreg */
+ /* 0x66 0x0F 0x15: UNPCKHPD (src)xmmreg-or-mem, (dst)xmmreg */
+ if (insn[0] == 0x0F
&& (insn[1] == 0x14 || insn[1] == 0x15)) {
+ vg_assert(sz == 4 || sz == 2);
+ if (sz == 4) {
+ eip = dis_SSE2_reg_or_mem ( cb, sorb, eip+2, 16,
+ "unpck{l,h}ps",
+ insn[0], insn[1] );
+ } else {
eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+2, 16,
"unpck{l,h}pd",
0x66, insn[0], insn[1] );
+ }
goto decode_success;
}
@@ -4603,6 +4611,15 @@
goto decode_success;
}
+ /* SQRTSS: square root of scalar float. */
+ if (insn[0] == 0xF3 && insn[1] == 0x0F && insn[2] == 0x51) {
+ vg_assert(sz == 4);
+ eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+3, 4,
+ "sqrtss",
+ insn[0], insn[1], insn[2] );
+ goto decode_success;
+ }
+
/* MOVLPS -- 8-byte load/store. How is this different from MOVLPS
? */
if (insn[0] == 0x0F
----------
Thanks,
Joerg
|