diff options
author | H. Peter Anvin <hpa@zytor.com> | 2017-04-06 18:50:28 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2017-04-06 18:52:08 -0700 |
commit | e83311c73d65149b554b1b6361926882b04c1573 (patch) | |
tree | 91efab06afa54967307f544329e55f3d39317e5e | |
parent | dd26697412c42e645bef45afec4e8bec223b14a5 (diff) | |
download | nasm-e83311c73d65149b554b1b6361926882b04c1573.tar.gz |
BR 3392396: fix EVEX compressed displacements
The fvm: annotation to generate the correct EVEX compressed
displacements had inadvertently gotten dropped from a handful of
instructions in checkin c33d95fde9f8ae6252c8ecf4d66c543dfa914d83:
BR 3392370: {z} decorator allowed on MOVDQ* memory operands
Put them back, and verify they work.
Reported-by: Henrik <henrik@gramner.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
-rw-r--r-- | asm/assemble.c | 2 | ||||
-rw-r--r-- | test/br3392396.asm | 5 | ||||
-rw-r--r-- | x86/insns.dat | 12 |
3 files changed, 12 insertions, 7 deletions
diff --git a/asm/assemble.c b/asm/assemble.c index abdefd61..9c76b0ea 100644 --- a/asm/assemble.c +++ b/asm/assemble.c @@ -2503,7 +2503,7 @@ static enum ea_type process_ea(operand *input, ea *output, int bits, if (bits == 64 && !(IP_REL & ~input->type) && (eaflags & EAF_MIB)) { - *errmsg = "RIP-relative addressing is prohibited for MIB."; + *errmsg = "RIP-relative addressing is prohibited for MIB"; goto err; } diff --git a/test/br3392396.asm b/test/br3392396.asm new file mode 100644 index 00000000..beb71cf1 --- /dev/null +++ b/test/br3392396.asm @@ -0,0 +1,5 @@ + bits 64 + vmovdqa32 [rdi],zmm16 + vmovdqa32 [rdi+64],zmm17 + vmovdqa32 [rdi+128],zmm18 + vmovdqa32 [rdi+192],zmm19 diff --git a/x86/insns.dat b/x86/insns.dat index c91f13fb..3d9fcacd 100644 --- a/x86/insns.dat +++ b/x86/insns.dat @@ -4069,9 +4069,9 @@ VMOVDDUP zmmreg|mask|z,zmmrm512 [rm:dup: evex.512.f2.0f.w1 1 VMOVDQA32 xmmreg|mask|z,xmmrm128 [rm:fvm: evex.128.66.0f.w0 6f /r ] AVX512VL,AVX512,FUTURE VMOVDQA32 ymmreg|mask|z,ymmrm256 [rm:fvm: evex.256.66.0f.w0 6f /r ] AVX512VL,AVX512,FUTURE VMOVDQA32 zmmreg|mask|z,zmmrm512 [rm:fvm: evex.512.66.0f.w0 6f /r ] AVX512,FUTURE -VMOVDQA32 xmmrm128|mask|z,xmmreg [mr: evex.128.66.0f.w0 7f /r ] AVX512VL,AVX512,FUTURE -VMOVDQA32 ymmrm256|mask|z,ymmreg [mr: evex.256.66.0f.w0 7f /r ] AVX512VL,AVX512,FUTURE -VMOVDQA32 zmmrm512|mask|z,zmmreg [mr: evex.512.66.0f.w0 7f /r ] AVX512,FUTURE +VMOVDQA32 xmmrm128|mask|z,xmmreg [mr:fvm: evex.128.66.0f.w0 7f /r ] AVX512VL,AVX512,FUTURE +VMOVDQA32 ymmrm256|mask|z,ymmreg [mr:fvm: evex.256.66.0f.w0 7f /r ] AVX512VL,AVX512,FUTURE +VMOVDQA32 zmmrm512|mask|z,zmmreg [mr:fvm: evex.512.66.0f.w0 7f /r ] AVX512,FUTURE VMOVDQA64 xmmreg|mask|z,xmmrm128 [rm:fvm: evex.128.66.0f.w1 6f /r ] AVX512VL,AVX512,FUTURE VMOVDQA64 ymmreg|mask|z,ymmrm256 [rm:fvm: evex.256.66.0f.w1 6f /r ] AVX512VL,AVX512,FUTURE VMOVDQA64 zmmreg|mask|z,zmmrm512 [rm:fvm: evex.512.66.0f.w1 6f /r ] AVX512,FUTURE @@ -4081,9 +4081,9 @@ VMOVDQA64 zmmrm512|mask|z,zmmreg [mr:fvm: evex.512.66.0f.w1 7 VMOVDQU16 xmmreg|mask|z,xmmrm128 [rm:fvm: evex.128.f2.0f.w1 6f /r ] AVX512VL,AVX512BW,FUTURE VMOVDQU16 ymmreg|mask|z,ymmrm256 [rm:fvm: evex.256.f2.0f.w1 6f /r ] AVX512VL,AVX512BW,FUTURE VMOVDQU16 zmmreg|mask|z,zmmrm512 [rm:fvm: evex.512.f2.0f.w1 6f /r ] AVX512BW,FUTURE -VMOVDQU16 xmmrm128|mask|z,xmmreg [mr: evex.128.f2.0f.w1 7f /r ] AVX512VL,AVX512BW,FUTURE -VMOVDQU16 ymmrm256|mask|z,ymmreg [mr: evex.256.f2.0f.w1 7f /r ] AVX512VL,AVX512BW,FUTURE -VMOVDQU16 zmmrm512|mask|z,zmmreg [mr: evex.512.f2.0f.w1 7f /r ] AVX512BW,FUTURE +VMOVDQU16 xmmrm128|mask|z,xmmreg [mr:fvm: evex.128.f2.0f.w1 7f /r ] AVX512VL,AVX512BW,FUTURE +VMOVDQU16 ymmrm256|mask|z,ymmreg [mr:fvm: evex.256.f2.0f.w1 7f /r ] AVX512VL,AVX512BW,FUTURE +VMOVDQU16 zmmrm512|mask|z,zmmreg [mr:fvm: evex.512.f2.0f.w1 7f /r ] AVX512BW,FUTURE VMOVDQU32 xmmreg|mask|z,xmmrm128 [rm:fvm: evex.128.f3.0f.w0 6f /r ] AVX512VL,AVX512,FUTURE VMOVDQU32 ymmreg|mask|z,ymmrm256 [rm:fvm: evex.256.f3.0f.w0 6f /r ] AVX512VL,AVX512,FUTURE VMOVDQU32 zmmreg|mask|z,zmmrm512 [rm:fvm: evex.512.f3.0f.w0 6f /r ] AVX512,FUTURE |