x86: embed register names in reg_entry
authorJan Beulich <jbeulich@suse.com>
Fri, 20 Jan 2023 09:17:53 +0000 (10:17 +0100)
committerJan Beulich <jbeulich@suse.com>
Fri, 20 Jan 2023 09:17:53 +0000 (10:17 +0100)
Register names are (including their nul terminators) on average almost 4
bytes long. Otoh no register name is longer than 7 bytes. Hence even for
32-bit builds using a pointer is only slightly more space efficient than
embedding the strings. A level of indirection can be also avoided by
embedding the names as an array of 8 characters directly in the struct,
and the number of base relocations in PIE builds of gas goes down as
well.

opcodes/i386-opc.h

index ebedb3e6f5f94620d9b699fd0c32471922596cd7..6739d494cc57fbeefaf963d1adccaf5903c41a10 100644 (file)
@@ -987,7 +987,7 @@ insn_template;
 /* these are for register name --> number & type hash lookup */
 typedef struct
 {
-  const char *reg_name;
+  char reg_name[8];
   i386_operand_type reg_type;
   unsigned char reg_flags;
 #define RegRex     0x1  /* Extended register.  */