https://bugs.kde.org/show_bug.cgi?id=487439

--- Comment #10 from Mark Wielaard <m...@klomp.org> ---
(In reply to Paul Floyd from comment #9)
> 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?

It looks like binutils gas allows you to use rex.W as prefix, so:
rex.W psllq $12, %xmm1

The documentation is a little confusing though (I am not sure whether W should
be seen as X, Y and Z extension bit or not):
https://sourceware.org/binutils/docs/as/i386_002dPrefixes.html

The ‘rex’ family of prefixes is used by x86-64 to encode extensions to i386
instruction set. The ‘rex’ prefix has four bits — an operand size overwrite
(64) used to change operand size from 32-bit to 64-bit and X, Y and Z
extensions bits used to extend the register set.

You may write the ‘rex’ prefixes directly. The ‘rex64xyz’ instruction emits
‘rex’ prefix with all the bits set. By omitting the 64, x, y or z you may write
other prefixes as well. Normally, there is no need to write the prefixes
explicitly, since gas will automatically generate them based on the instruction
operands.

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to