From e83311c73d65149b554b1b6361926882b04c1573 Mon Sep 17 00:00:00 2001 From: "H. Peter Anvin" Date: Thu, 6 Apr 2017 18:50:28 -0700 Subject: [PATCH] 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 Signed-off-by: H. Peter Anvin --- asm/assemble.c | 2 +- test/br3392396.asm | 5 +++++ x86/insns.dat | 12 ++++++------ 3 files changed, 12 insertions(+), 7 deletions(-) create mode 100644 test/br3392396.asm 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