]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
x86: %riz, %rip, and %eip don't require REX
authorJan Beulich <jbeulich@suse.com>
Fri, 21 Jun 2024 06:35:23 +0000 (08:35 +0200)
committerJan Beulich <jbeulich@suse.com>
Fri, 21 Jun 2024 06:35:23 +0000 (08:35 +0200)
While these can't be used as register operands, they can be used for
memory operand addressing. Such uses do not prevent conversion: The
RegRex64 checks in check_Rex_required() for base and index registers
were simply wrong. They specifically also aren't needed for byte
registers, as those won't pass i386_index_check() anyway.

gas/config/tc-i386.c
gas/testsuite/gas/i386/x86-64-apx-ndd-optimize.d
gas/testsuite/gas/i386/x86-64-apx-ndd-optimize.s

index b8911c04436e1186577fb27e4f0fdcf427f45d7a..e94b93701552c7b59ccbdc80f10b33a0e6f9e414 100644 (file)
@@ -8683,8 +8683,8 @@ check_Rex_required (void)
        return true;
     }
 
-  if ((i.index_reg && (i.index_reg->reg_flags & (RegRex | RegRex64)))
-      || (i.base_reg && (i.base_reg->reg_flags & (RegRex | RegRex64))))
+  if ((i.index_reg && (i.index_reg->reg_flags & RegRex))
+      || (i.base_reg && (i.base_reg->reg_flags & RegRex)))
     return true;
 
   /* Check pseudo prefix {rex} are valid.  */
index 8069799f7fb2e831330e444011e4ab7016ccd89a..762d78be727335e103efd73d385f70aee2a2d71d 100644 (file)
@@ -127,10 +127,12 @@ Disassembly of section .text:
 \s*[a-f0-9]+:\s*62 74 3d 18 66 c0      adcx   %eax,%r8d,%r8d
 \s*[a-f0-9]+:\s*62 d4 7d 18 66 c7      adcx   %r15d,%eax,%eax
 \s*[a-f0-9]+:\s*67 66 0f 38 f6 04 0a   adcx   \(%edx,%ecx,1\),%eax
+\s*[a-f0-9]+:\s*66 0f 38 f6 04 22      adcx   \(%rdx,%riz,1\),%eax
 \s*[a-f0-9]+:\s*f3 0f 38 f6 c3         adox   %ebx,%eax
 \s*[a-f0-9]+:\s*f3 0f 38 f6 c3         adox   %ebx,%eax
 \s*[a-f0-9]+:\s*62 f4 fe 18 66 c3      adox   %rbx,%rax,%rax
 \s*[a-f0-9]+:\s*62 74 3e 18 66 c0      adox   %eax,%r8d,%r8d
 \s*[a-f0-9]+:\s*62 d4 7e 18 66 c7      adox   %r15d,%eax,%eax
 \s*[a-f0-9]+:\s*67 f3 0f 38 f6 04 0a   adox   \(%edx,%ecx,1\),%eax
+\s*[a-f0-9]+:\s*f3 0f 38 f6 05 00 00 00 00     adox   (0x)?0\(%rip\),%eax[     ]+# .*  sym.*
 #pass
index c83e1195d05c6d58a147ddce42ec966fe4911a3b..bf75e64622d43d16e9a272370f232474fc86b099 100644 (file)
@@ -1,5 +1,6 @@
 # Check 64bit APX NDD instructions with optimized encoding
 
+       .allow_index_reg
        .text
 _start:
 add    %r31,%r8,%r8
@@ -120,9 +121,11 @@ adcx   %rbx,%rax,%rax
 adcx   %eax,%r8d,%r8d
 adcx   %r15d,%eax,%eax
 adcx   (%edx,%ecx,1),%eax,%eax
+adcx   (%rdx,%riz,1),%eax,%eax
 adox   %ebx,%eax,%eax
 adox   %eax,%ebx,%eax
 adox   %rbx,%rax,%rax
 adox   %eax,%r8d,%r8d
 adox   %r15d,%eax,%eax
 adox   (%edx,%ecx,1),%eax,%eax
+adox   sym(%rip),%eax,%eax