[PATCH] x86: support SALC
Jan Beulich
jbeulich@suse.com
Fri Oct 31 09:32:18 GMT 2025
Now that the SDM (finally) at least mentions it (without giving it a
proper instruction page, though), let's (again: finally) also support it
in assembler and disassembler.
--- a/gas/testsuite/gas/i386/opcode.d
+++ b/gas/testsuite/gas/i386/opcode.d
@@ -587,7 +587,8 @@ Disassembly of section .text:
9f5: 85 c3 [ ]*test %eax,%ebx
9f7: 85 d8 [ ]*test %ebx,%eax
9f9: 85 18 [ ]*test %ebx,\(%eax\)
- 9fb: f1 [ ]*int1
+[ ]*[a-f0-9]+: f1[ ]*int1
+[ ]*[a-f0-9]+: d6[ ]*salc
[ ]*[a-f0-9]+: 0f 4a 90 90 90 90 90 cmovp -0x6f6f6f70\(%eax\),%edx
[ ]*[a-f0-9]+: 0f 4b 90 90 90 90 90 cmovnp -0x6f6f6f70\(%eax\),%edx
[ ]*[a-f0-9]+: 66 0f 4a 90 90 90 90 90 cmovp -0x6f6f6f70\(%eax\),%dx
--- a/gas/testsuite/gas/i386/opcode.s
+++ b/gas/testsuite/gas/i386/opcode.s
@@ -586,6 +586,7 @@ foo:
test (%eax),%ebx
int1
+ salc
cmovpe 0x90909090(%eax),%edx
cmovpo 0x90909090(%eax),%edx
--- a/gas/testsuite/gas/i386/opcode-intel.d
+++ b/gas/testsuite/gas/i386/opcode-intel.d
@@ -588,7 +588,8 @@ Disassembly of section .text:
*[0-9a-f]+: 85 c3 [ ]*test[ ]+ebx,eax
*[0-9a-f]+: 85 d8 [ ]*test[ ]+eax,ebx
*[0-9a-f]+: 85 18 [ ]*test[ ]+(DWORD PTR )?\[eax\],ebx
- *[0-9a-f]+: f1[ ]+int1
+[ ]*[a-f0-9]+: f1[ ]*int1
+[ ]*[a-f0-9]+: d6[ ]*salc
[ ]*[a-f0-9]+: 0f 4a 90 90 90 90 90 cmovp edx,DWORD PTR \[eax-0x6f6f6f70\]
[ ]*[a-f0-9]+: 0f 4b 90 90 90 90 90 cmovnp edx,DWORD PTR \[eax-0x6f6f6f70\]
[ ]*[a-f0-9]+: 66 0f 4a 90 90 90 90 90 cmovp dx,WORD PTR \[eax-0x6f6f6f70\]
--- a/gas/testsuite/gas/i386/opcode-suffix.d
+++ b/gas/testsuite/gas/i386/opcode-suffix.d
@@ -588,7 +588,8 @@ Disassembly of section .text:
*[0-9a-f]+: 85 c3 [ ]*testl[ ]+%eax,%ebx
*[0-9a-f]+: 85 d8 [ ]*testl[ ]+%ebx,%eax
*[0-9a-f]+: 85 18 [ ]*testl[ ]+%ebx,\(%eax\)
- *[0-9a-f]+: f1[ ]+int1
+[ ]*[a-f0-9]+: f1[ ]*int1
+[ ]*[a-f0-9]+: d6[ ]*salc
[ ]*[a-f0-9]+: 0f 4a 90 90 90 90 90 cmovpl -0x6f6f6f70\(%eax\),%edx
[ ]*[a-f0-9]+: 0f 4b 90 90 90 90 90 cmovnpl -0x6f6f6f70\(%eax\),%edx
[ ]*[a-f0-9]+: 66 0f 4a 90 90 90 90 90 cmovpw -0x6f6f6f70\(%eax\),%dx
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -4514,7 +4514,7 @@ static const struct dis386 x86_64_table[
/* X86_64_D6 */
{
- { Bad_Opcode },
+ { "salc", { XX }, 0 },
{ "udb", { XX }, 0 },
},
--- a/opcodes/i386-opc.tbl
+++ b/opcodes/i386-opc.tbl
@@ -566,6 +566,7 @@ setzu<cc>, 0xf24<cc:opc>/0, APX_F, Modrm
// As an extension, allow SETcc without the ZU infix, instead taking the full
// register as operand.
set<cc>, 0xf24<cc:opc>/0, APX_F, Modrm|No_bSuf|No_wSuf|No_sSuf|EVexMap4|ZU, { Reg32|Reg64 }
+salc, 0xd6, No64, No_wSuf|No_lSuf|No_sSuf|No_qSuf, {}
// String manipulation.
cmps, 0xa6, 0, W|No_sSuf|RepPrefixOk|IntelSuffix, {}
More information about the Binutils
mailing list