diff options
author | Jan Beulich <jbeulich@suse.com> | 2024-06-28 08:24:45 +0200 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2024-06-28 08:24:45 +0200 |
commit | 2513312930b2b8a0b50fb681f2781372cce3c2f6 (patch) | |
tree | 3f7c66674e212d581fa147903114aa3cef58d30e /opcodes/i386-opc.tbl | |
parent | 7add9939175aa71faa37c40dcedcb9190e3b37d8 (diff) | |
download | fsf-binutils-gdb-2513312930b2b8a0b50fb681f2781372cce3c2f6.zip fsf-binutils-gdb-2513312930b2b8a0b50fb681f2781372cce3c2f6.tar.gz fsf-binutils-gdb-2513312930b2b8a0b50fb681f2781372cce3c2f6.tar.bz2 |
x86/APX: apply NDD-to-legacy transformation to further CMOVcc forms
With both sources being registers, these insns are almost commutative;
the only extra adjustment needed is inversion of the encoded condition.
Diffstat (limited to 'opcodes/i386-opc.tbl')
-rw-r--r-- | opcodes/i386-opc.tbl | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/opcodes/i386-opc.tbl b/opcodes/i386-opc.tbl index fa7e9b4..0373488 100644 --- a/opcodes/i386-opc.tbl +++ b/opcodes/i386-opc.tbl @@ -985,7 +985,10 @@ ud2b, 0xfb9, i186, Modrm|CheckOperandSize|No_bSuf|No_sSuf, { Reg16|Reg32|Reg64|U // 3rd official undefined instr (older CPUs don't take a ModR/M byte) ud0, 0xfff, i186, Modrm|CheckOperandSize|No_bSuf|No_sSuf, { Reg16|Reg32|Reg64|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmov<cc>, 0x4<cc:opc>, CMOV&APX_F, Modrm|CheckOperandSize|No_bSuf|No_sSuf|DstVVVV|EVexMap4, { Reg16|Reg32|Reg64|Unspecified|BaseIndex, Reg16|Reg32|Reg64, Reg16|Reg32|Reg64 } +// C (commutative) isn't quite correct here on its own; the condition also +// needs inverting when source operands are swapped in order to convert to +// legacy encoding. The assembler will take care of that. +cmov<cc>, 0x4<cc:opc>, CMOV&APX_F, C|Modrm|CheckOperandSize|No_bSuf|No_sSuf|DstVVVV|EVexMap4|Optimize, { Reg16|Reg32|Reg64|Unspecified|BaseIndex, Reg16|Reg32|Reg64, Reg16|Reg32|Reg64 } cmov<cc>, 0xf4<cc:opc>, CMOV, Modrm|CheckOperandSize|No_bSuf|No_sSuf, { Reg16|Reg32|Reg64|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } fcmovb, 0xda/0, i687, Modrm|NoSuf, { FloatReg, FloatAcc } |