aboutsummaryrefslogtreecommitdiff
path: root/opcodes/i386-opc.h
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2023-09-14 08:43:45 +0200
committerJan Beulich <jbeulich@suse.com>2023-09-14 08:43:45 +0200
commit4fc85f37dc7ab02867c5f7ee69e65b2f5eba51d8 (patch)
treef55f309481456714ee115fcfea9d68d0549ac649 /opcodes/i386-opc.h
parent2548c261604611b5c72f5a28ae54b6d9a15617ac (diff)
downloadgdb-4fc85f37dc7ab02867c5f7ee69e65b2f5eba51d8.zip
gdb-4fc85f37dc7ab02867c5f7ee69e65b2f5eba51d8.tar.gz
gdb-4fc85f37dc7ab02867c5f7ee69e65b2f5eba51d8.tar.bz2
x86: support AVX10.1 vector size restrictions
Recognize "/<number>" suffixes on both -march=+avx10.1 and the corresponding .arch directive, setting an upper bound on the vector size that insns may use. Such a restriction can be reset by setting a new base architecture, by using a suffix-less form, by disabling AVX10, or by enabling any other VEX/EVEX-based vector extension. While for most insns we can suppress their use with too wide operands via registers becoming unavailable (or in Intel syntax memory operand size specifiers not being recognized), mask register insns have to have their minimum required vector size specified in a new attribute. (Of course this new attribute could also be used on other insns.) Note that .insn continues to be permitted to emit EVEX{512,256} (and VEX256 ones) encodings regardless of vector size restrictions in place. Of course these can't be expressed using zmm (or ymm) operands then, but need using the EVEX.512.* forms (broadcast forms may be usable right now, but this may go away so shouldn't be relied upon). This is why no assertions should be added to build_{e,}vex_prefix().
Diffstat (limited to 'opcodes/i386-opc.h')
-rw-r--r--opcodes/i386-opc.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/opcodes/i386-opc.h b/opcodes/i386-opc.h
index e351c1b..045277e 100644
--- a/opcodes/i386-opc.h
+++ b/opcodes/i386-opc.h
@@ -716,6 +716,16 @@ enum
#define DISP8_SHIFT_VL 7
Disp8MemShift,
+ /* insn has vector size restrictions, requiring a minimum of:
+ 0: 128 bits.
+ 1: 256 bits.
+ 2: 512 bits.
+ */
+#define VSZ128 0 /* Not to be used in templates. */
+#define VSZ256 1
+#define VSZ512 2
+ Vsz,
+
/* Support encoding optimization. */
Optimize,
@@ -776,6 +786,7 @@ typedef struct i386_opcode_modifier
unsigned int staticrounding:1;
unsigned int sae:1;
unsigned int disp8memshift:3;
+ unsigned int vsz:3;
unsigned int optimize:1;
unsigned int attmnemonic:1;
unsigned int attsyntax:1;