|
From: Julian S. <js...@ac...> - 2010-04-16 20:32:54
|
On Thursday 15 April 2010, Sebastien Cote wrote:
> Hi,
>
> It seems the instructions were already handled in VEX but not with the REX
> prefix. I tried changing the code to work around it like the following:
>
> /* 66 0F FC = PADDB */
> - if (have66noF2noF3(pfx) && sz == 2
> + if ((have66noF2noF3(pfx) || haveREX(pfx))
> + && (sz == 2 || /* ignore redundant REX.W */ sz == 8)
> && insn[0] == 0x0F && insn[1] == 0xFC) {
> delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
> "paddb", Iop_Add8x16, False );
>
>
> I may have broken something with this change but it got rid of the previous
> unhandled instructions. However, now I get an unhandled instruction on:
That's nearly right. In fact the "haveREX(pfx)" is redundant, so in fact
the only change is from
sz == 2
to
(sz == 2 || /* ignore redundant REX.W */ sz == 8)
> 66 48 0f d7 c0 pmovmskb %xmm0,%rax
>
> Now I really don't know how to work around this because the handling of the
> pmovmskb instruction is much more complex than the previous ones.
I'm surprised it failed there. It looks to me like the handler for pmovmskb
(xmm version), around line 11860 of guest_am64_toIR.c, can handle the
redundant rex prefix (0x48).
J
|