mirror of
https://github.com/netwide-assembler/nasm.git
synced 2024-11-27 08:10:07 +08:00
BR 3109604: Fix C4 vs C5 VEX form selection in calcsize()
calcsize() had the wrong criterion for when C5 prefixes are permitted (REX.R is permitted, REX.X is forbidden.) assemble() had the right test already. This caused symbol value errors.
This commit is contained in:
parent
4794de2f5b
commit
3cb0e8c052
@ -1152,7 +1152,7 @@ static int64_t calcsize(int32_t segment, int64_t offset, int bits,
|
||||
errfunc(ERR_NONFATAL, "invalid operands in non-64-bit mode");
|
||||
return -1;
|
||||
}
|
||||
if (ins->vex_cm != 1 || (ins->rex & (REX_W|REX_R|REX_B)))
|
||||
if (ins->vex_cm != 1 || (ins->rex & (REX_W|REX_X|REX_B)))
|
||||
length += 3;
|
||||
else
|
||||
length += 2;
|
||||
|
9
test/br3109604.asm
Normal file
9
test/br3109604.asm
Normal file
@ -0,0 +1,9 @@
|
||||
;Testname=unoptimized; Arguments=-O0 -fbin -obr3109604.bin; Files=stdout stderr br3109604.bin
|
||||
;Testname=optimized; Arguments=-Ox -fbin -obr3109604.bin; Files=stdout stderr br3109604.bin
|
||||
|
||||
bits 64
|
||||
b0: vmovd xmm2, [rdx+r9]
|
||||
e0:
|
||||
|
||||
section .data
|
||||
len: dd e0 - b0 ; Should be 6
|
Loading…
Reference in New Issue
Block a user