diff options
Diffstat (limited to 'gas/config/tc-i386.c')
-rw-r--r-- | gas/config/tc-i386.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 694618f06c0..4a469088ce6 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -2615,7 +2615,15 @@ process_suffix (void) if (i.suffix == QWORD_MNEM_SUFFIX && flag_code == CODE_64BIT && (i.tm.opcode_modifier & NoRex64) == 0) - i.rex |= REX_MODE64; + { + /* Special case for xchg %rax,%rax. It is NOP and doesn't + need rex64. */ + if (i.operands != 2 + || i.types [0] != (Acc | Reg64) + || i.types [1] != (Acc | Reg64) + || strcmp (i.tm.name, "xchg") != 0) + i.rex |= REX_MODE64; + } /* Size floating point instruction. */ if (i.suffix == LONG_MNEM_SUFFIX) |