summaryrefslogtreecommitdiff
path: root/opcodes/i386-opc.h
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2022-07-06 15:40:04 +0200
committerJan Beulich <jbeulich@suse.com>2022-07-06 15:40:04 +0200
commit8bd915b770e12eff67f6218f2d727069d04d5752 (patch)
tree33f15463f72a7894f528757b209b85aab3ffec5a /opcodes/i386-opc.h
parent3d0738af2a6dac3c729126f2ceb3af6529da7348 (diff)
downloadbinutils-gdb-8bd915b770e12eff67f6218f2d727069d04d5752.tar.gz
x86: make D attribute usable for XOP and FMA4 insns
This once again allows to reduce redundancy in (and size of) the opcode table. Don't go as far as also making D work on the two 5-operand XOP insns: This would significantly complicate the code, as there the first (immediate) operand would need special treatment in several places. Note that the .s suffix isn't being enabled to have any effect, for being deprecated. Whereas neither {load} nor {store} pseudo prefixes make sense here, as the respective operands are inputs (loads) only anyway, regardless of order. Hence there is (as before) no way for the programmer to request the alternative encoding to be used for register- only insns. Note further that it is always the first original template which is retained (and altered), to make sure the same encoding as before is used for register-only insns. This has the slightly odd (but pre- existing) effect of XOP register-only insns having XOP.W clear, but FMA4 ones having VEX.W set.
Diffstat (limited to 'opcodes/i386-opc.h')
-rw-r--r--opcodes/i386-opc.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/opcodes/i386-opc.h b/opcodes/i386-opc.h
index f3ef713a0ad..76d9dcb4316 100644
--- a/opcodes/i386-opc.h
+++ b/opcodes/i386-opc.h
@@ -925,6 +925,9 @@ typedef struct insn_template
#define Opcode_FloatD 0x400 /* Direction bit for float insns. */
#define Opcode_SIMD_FloatD 0x1 /* Direction bit for SIMD fp insns. */
#define Opcode_SIMD_IntD 0x10 /* Direction bit for SIMD int insns. */
+/* The next value is arbitrary, as long as it's non-zero and distinct
+ from all other values above. */
+#define Opcode_VexW 0xf /* Operand order controlled by VEX.W. */
/* (Fake) base opcode value for pseudo prefixes. */
#define PSEUDO_PREFIX 0