mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-02-23 13:21:43 +08:00
x86: %riz, %rip, and %eip don't require REX
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.
This commit is contained in:
parent
c68a6e5cad
commit
8bcda53caa
@ -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. */
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user