https://bugs.kde.org/show_bug.cgi?id=487439
--- Comment #9 from Paul Floyd <pjfl...@wanadoo.fr> --- Bill Torpey, could you build Valgrind to test a fix? This change seems to fix your problem: diff --git a/VEX/priv/guest_amd64_toIR.c b/VEX/priv/guest_amd64_toIR.c index f0b1c5516..28c37f092 100644 --- a/VEX/priv/guest_amd64_toIR.c +++ b/VEX/priv/guest_amd64_toIR.c @@ -14138,7 +14138,7 @@ Long dis_ESC_0F__SSE2 ( Bool* decode_OK, goto decode_success; } /* 66 0F 73 /6 ib = PSLLQ by immediate */ - if (have66noF2noF3(pfx) && sz == 2 + if (have66noF2noF3(pfx) && (sz == 2 || /* ignore redundant REX.W */ sz == 8) && epartIsReg(getUChar(delta)) && gregLO3ofRM(getUChar(delta)) == 6) { delta = dis_SSE_shiftE_imm( pfx, delta, "psllq", Iop_ShlN64x2 ); Mark, do you know how to force using rex.W in assembler? This testcase also seems to work /* with redundant rex.W */ static void psllq_4(void) { reg128_t arg1 = { .uq = { 0x0123456789abcdefULL, 0x0123456789abcdefULL } }; reg128_t result0; char state[108]; if (sigsetjmp(catchpoint, 1) == 0) { asm( "ffree %%st(7)\n" "ffree %%st(6)\n" "ffree %%st(5)\n" "ffree %%st(4)\n" "movlps %2, %%xmm1\n" "movhps %3, %%xmm1\n" //".rex.W psllq $12, %%xmm1\n" ".byte 0x66,0x48,0x0f,0x73,0xf1,0x0c\n" "movlps %%xmm1, %0\n" "movhps %%xmm1, %1\n" "cld\n" : "=m" (result0.uq[0]), "=m" (result0.uq[1]) : "m" (arg1.uq[0]), "m" (arg1.uq[1]), "m" (state[0]) : "xmm1" ); if (result0.uq[0] == 0x3456789abcdef000ULL && result0.uq[1] == 0x3456789abcdef000ULL ) { printf("psllq_4 ... ok\n"); } else { printf("psllq_4 ... not ok\n"); printf(" result0.uq[0] = %llu (expected %llu)\n", result0.uq[0], 0x3456789abcdef000ULL); printf(" result0.uq[1] = %llu (expected %llu)\n", result0.uq[1], 0x3456789abcdef000ULL); } } else { printf("psllq_4 ... failed\n"); } return; } but it doesn't fit in with the gen_insn_test.pl script. -- You are receiving this mail because: You are watching all bug changes.