Skip to content

Commit 55357d8

Browse files
authored
[X86][MC] Add alias for {evex} cmp and {evex} test. (#99277)
Related gas patch: https://sourceware.org/pipermail/binutils/2024-June/134478.html
1 parent 533a229 commit 55357d8

File tree

5 files changed

+336
-3
lines changed

5 files changed

+336
-3
lines changed

llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3776,6 +3776,17 @@ bool X86AsmParser::processInstruction(MCInst &Inst, const OperandVector &Ops) {
37763776
if (X86::optimizeShiftRotateWithImmediateOne(Inst))
37773777
return true;
37783778

3779+
auto replaceWithCCMPCTEST = [&](unsigned Opcode) -> bool {
3780+
if (ForcedOpcodePrefix == OpcodePrefix_EVEX) {
3781+
Inst.setFlags(~(X86::IP_USE_EVEX)&Inst.getFlags());
3782+
Inst.setOpcode(Opcode);
3783+
Inst.addOperand(MCOperand::createImm(0));
3784+
Inst.addOperand(MCOperand::createImm(10));
3785+
return true;
3786+
}
3787+
return false;
3788+
};
3789+
37793790
switch (Inst.getOpcode()) {
37803791
default: return false;
37813792
case X86::JMP_1:
@@ -3807,6 +3818,61 @@ bool X86AsmParser::processInstruction(MCInst &Inst, const OperandVector &Ops) {
38073818
Inst.setOpcode(X86::INT3);
38083819
return true;
38093820
}
3821+
// `{evex} cmp <>, <>` is alias of `ccmpt {dfv=} <>, <>`, and
3822+
// `{evex} test <>, <>` is alias of `ctest {dfv=} <>, <>`
3823+
#define FROM_TO(FROM, TO) \
3824+
case X86::FROM: \
3825+
return replaceWithCCMPCTEST(X86::TO);
3826+
FROM_TO(CMP64rr, CCMP64rr)
3827+
FROM_TO(CMP64mi32, CCMP64mi32)
3828+
FROM_TO(CMP64mi8, CCMP64mi8)
3829+
FROM_TO(CMP64mr, CCMP64mr)
3830+
FROM_TO(CMP64ri32, CCMP64ri32)
3831+
FROM_TO(CMP64ri8, CCMP64ri8)
3832+
FROM_TO(CMP64rm, CCMP64rm)
3833+
3834+
FROM_TO(CMP32rr, CCMP32rr)
3835+
FROM_TO(CMP32mi, CCMP32mi)
3836+
FROM_TO(CMP32mi8, CCMP32mi8)
3837+
FROM_TO(CMP32mr, CCMP32mr)
3838+
FROM_TO(CMP32ri, CCMP32ri)
3839+
FROM_TO(CMP32ri8, CCMP32ri8)
3840+
FROM_TO(CMP32rm, CCMP32rm)
3841+
3842+
FROM_TO(CMP16rr, CCMP16rr)
3843+
FROM_TO(CMP16mi, CCMP16mi)
3844+
FROM_TO(CMP16mi8, CCMP16mi8)
3845+
FROM_TO(CMP16mr, CCMP16mr)
3846+
FROM_TO(CMP16ri, CCMP16ri)
3847+
FROM_TO(CMP16ri8, CCMP16ri8)
3848+
FROM_TO(CMP16rm, CCMP16rm)
3849+
3850+
FROM_TO(CMP8rr, CCMP8rr)
3851+
FROM_TO(CMP8mi, CCMP8mi)
3852+
FROM_TO(CMP8mr, CCMP8mr)
3853+
FROM_TO(CMP8ri, CCMP8ri)
3854+
FROM_TO(CMP8rm, CCMP8rm)
3855+
3856+
FROM_TO(TEST64rr, CTEST64rr)
3857+
FROM_TO(TEST64mi32, CTEST64mi32)
3858+
FROM_TO(TEST64mr, CTEST64mr)
3859+
FROM_TO(TEST64ri32, CTEST64ri32)
3860+
3861+
FROM_TO(TEST32rr, CTEST32rr)
3862+
FROM_TO(TEST32mi, CTEST32mi)
3863+
FROM_TO(TEST32mr, CTEST32mr)
3864+
FROM_TO(TEST32ri, CTEST32ri)
3865+
3866+
FROM_TO(TEST16rr, CTEST16rr)
3867+
FROM_TO(TEST16mi, CTEST16mi)
3868+
FROM_TO(TEST16mr, CTEST16mr)
3869+
FROM_TO(TEST16ri, CTEST16ri)
3870+
3871+
FROM_TO(TEST8rr, CTEST8rr)
3872+
FROM_TO(TEST8mi, CTEST8mi)
3873+
FROM_TO(TEST8mr, CTEST8mr)
3874+
FROM_TO(TEST8ri, CTEST8ri)
3875+
#undef FROM_TO
38103876
}
38113877
}
38123878

@@ -4158,7 +4224,10 @@ unsigned X86AsmParser::checkTargetMatchPredicate(MCInst &Inst) {
41584224
return Match_Unsupported;
41594225
break;
41604226
case OpcodePrefix_EVEX:
4161-
if ((TSFlags & X86II::EncodingMask) != X86II::EVEX)
4227+
if (is64BitMode() && (TSFlags & X86II::EncodingMask) != X86II::EVEX &&
4228+
!X86::isCMP(Opc) && !X86::isTEST(Opc))
4229+
return Match_Unsupported;
4230+
if (!is64BitMode() && (TSFlags & X86II::EncodingMask) != X86II::EVEX)
41624231
return Match_Unsupported;
41634232
break;
41644233
}

llvm/test/MC/X86/apx/ccmp-att.s

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# RUN: llvm-mc -triple x86_64 -show-encoding %s | FileCheck %s
22
# RUN: not llvm-mc -triple i386 -show-encoding %s 2>&1 | FileCheck %s --check-prefix=ERROR
33

4-
# ERROR-COUNT-402: error:
4+
# ERROR-COUNT-428: error:
55
# ERROR-NOT: error:
66
## Condition flags
77

@@ -1217,3 +1217,84 @@
12171217
# CHECK: ccmpoq {dfv=of,sf,zf,cf} %rax, %rbx
12181218
# CHECK: encoding: [0x62,0xf4,0xfc,0x00,0x39,0xc3]
12191219
ccmpoq {dFV=Cf,zF,SF,of} %rax, %rbx
1220+
1221+
## "{evex} cmp*" are alias for "ccmpt* {dfv=}"
1222+
1223+
# CHECK: ccmptb {dfv=} $123, 123(%r8,%rax,4)
1224+
# CHECK: encoding: [0x62,0xd4,0x04,0x0a,0x80,0x7c,0x80,0x7b,0x7b]
1225+
{evex} cmpb $123, 123(%r8,%rax,4)
1226+
# CHECK: ccmptw {dfv=} $123, 123(%r8,%rax,4)
1227+
# CHECK: encoding: [0x62,0xd4,0x05,0x0a,0x83,0x7c,0x80,0x7b,0x7b]
1228+
{evex} cmpw $123, 123(%r8,%rax,4)
1229+
# CHECK: ccmptw {dfv=} $1234, 123(%r8,%rax,4)
1230+
# CHECK: encoding: [0x62,0xd4,0x05,0x0a,0x81,0x7c,0x80,0x7b,0xd2,0x04]
1231+
{evex} cmpw $1234, 123(%r8,%rax,4)
1232+
# CHECK: ccmptl {dfv=} $123, 123(%r8,%rax,4)
1233+
# CHECK: encoding: [0x62,0xd4,0x04,0x0a,0x83,0x7c,0x80,0x7b,0x7b]
1234+
{evex} cmpl $123, 123(%r8,%rax,4)
1235+
# CHECK: ccmptl {dfv=} $123456, 123(%r8,%rax,4)
1236+
# CHECK: encoding: [0x62,0xd4,0x04,0x0a,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
1237+
{evex} cmpl $123456, 123(%r8,%rax,4)
1238+
# CHECK: ccmptq {dfv=} $123, 123(%r8,%rax,4)
1239+
# CHECK: encoding: [0x62,0xd4,0x84,0x0a,0x83,0x7c,0x80,0x7b,0x7b]
1240+
{evex} cmpq $123, 123(%r8,%rax,4)
1241+
# CHECK: ccmptq {dfv=} $123456, 123(%r8,%rax,4)
1242+
# CHECK: encoding: [0x62,0xd4,0x84,0x0a,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
1243+
{evex} cmpq $123456, 123(%r8,%rax,4)
1244+
# CHECK: ccmptb {dfv=} %bl, 123(%r8,%rax,4)
1245+
# CHECK: encoding: [0x62,0xd4,0x04,0x0a,0x38,0x5c,0x80,0x7b]
1246+
{evex} cmpb %bl, 123(%r8,%rax,4)
1247+
# CHECK: ccmptw {dfv=} %dx, 123(%r8,%rax,4)
1248+
# CHECK: encoding: [0x62,0xd4,0x05,0x0a,0x39,0x54,0x80,0x7b]
1249+
{evex} cmpw %dx, 123(%r8,%rax,4)
1250+
# CHECK: ccmptl {dfv=} %ecx, 123(%r8,%rax,4)
1251+
# CHECK: encoding: [0x62,0xd4,0x04,0x0a,0x39,0x4c,0x80,0x7b]
1252+
{evex} cmpl %ecx, 123(%r8,%rax,4)
1253+
# CHECK: ccmptq {dfv=} %r9, 123(%r8,%rax,4)
1254+
# CHECK: encoding: [0x62,0x54,0x84,0x0a,0x39,0x4c,0x80,0x7b]
1255+
{evex} cmpq %r9, 123(%r8,%rax,4)
1256+
# CHECK: ccmptb {dfv=} 123(%r8,%rax,4), %bl
1257+
# CHECK: encoding: [0x62,0xd4,0x04,0x0a,0x3a,0x5c,0x80,0x7b]
1258+
{evex} cmpb 123(%r8,%rax,4), %bl
1259+
# CHECK: ccmptw {dfv=} 123(%r8,%rax,4), %dx
1260+
# CHECK: encoding: [0x62,0xd4,0x05,0x0a,0x3b,0x54,0x80,0x7b]
1261+
{evex} cmpw 123(%r8,%rax,4), %dx
1262+
# CHECK: ccmptl {dfv=} 123(%r8,%rax,4), %ecx
1263+
# CHECK: encoding: [0x62,0xd4,0x04,0x0a,0x3b,0x4c,0x80,0x7b]
1264+
{evex} cmpl 123(%r8,%rax,4), %ecx
1265+
# CHECK: ccmptq {dfv=} 123(%r8,%rax,4), %r9
1266+
# CHECK: encoding: [0x62,0x54,0x84,0x0a,0x3b,0x4c,0x80,0x7b]
1267+
{evex} cmpq 123(%r8,%rax,4), %r9
1268+
# CHECK: ccmptb {dfv=} $123, %bl
1269+
# CHECK: encoding: [0x62,0xf4,0x04,0x0a,0x80,0xfb,0x7b]
1270+
{evex} cmpb $123, %bl
1271+
# CHECK: ccmptw {dfv=} $123, %dx
1272+
# CHECK: encoding: [0x62,0xf4,0x05,0x0a,0x83,0xfa,0x7b]
1273+
{evex} cmpw $123, %dx
1274+
# CHECK: ccmptl {dfv=} $123, %ecx
1275+
# CHECK: encoding: [0x62,0xf4,0x04,0x0a,0x83,0xf9,0x7b]
1276+
{evex} cmpl $123, %ecx
1277+
# CHECK: ccmptq {dfv=} $123, %r9
1278+
# CHECK: encoding: [0x62,0xd4,0x84,0x0a,0x83,0xf9,0x7b]
1279+
{evex} cmpq $123, %r9
1280+
# CHECK: ccmptw {dfv=} $1234, %dx
1281+
# CHECK: encoding: [0x62,0xf4,0x05,0x0a,0x81,0xfa,0xd2,0x04]
1282+
{evex} cmpw $1234, %dx
1283+
# CHECK: ccmptl {dfv=} $123456, %ecx
1284+
# CHECK: encoding: [0x62,0xf4,0x04,0x0a,0x81,0xf9,0x40,0xe2,0x01,0x00]
1285+
{evex} cmpl $123456, %ecx
1286+
# CHECK: ccmptq {dfv=} $123456, %r9
1287+
# CHECK: encoding: [0x62,0xd4,0x84,0x0a,0x81,0xf9,0x40,0xe2,0x01,0x00]
1288+
{evex} cmpq $123456, %r9
1289+
# CHECK: ccmptb {dfv=} %bl, %dl
1290+
# CHECK: encoding: [0x62,0xf4,0x04,0x0a,0x38,0xda]
1291+
{evex} cmpb %bl, %dl
1292+
# CHECK: ccmptw {dfv=} %dx, %ax
1293+
# CHECK: encoding: [0x62,0xf4,0x05,0x0a,0x39,0xd0]
1294+
{evex} cmpw %dx, %ax
1295+
# CHECK: ccmptl {dfv=} %ecx, %edx
1296+
# CHECK: encoding: [0x62,0xf4,0x04,0x0a,0x39,0xca]
1297+
{evex} cmpl %ecx, %edx
1298+
# CHECK: ccmptq {dfv=} %r9, %r15
1299+
# CHECK: encoding: [0x62,0x54,0x84,0x0a,0x39,0xcf]
1300+
{evex} cmpq %r9, %r15

llvm/test/MC/X86/apx/ccmp-intel.s

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1214,3 +1214,84 @@
12141214
# CHECK: ccmpo {dfv=of,sf,zf,cf} rbx, rax
12151215
# CHECK: encoding: [0x62,0xf4,0xfc,0x00,0x39,0xc3]
12161216
ccmpo {DFv=Cf,zF,SF,of} rbx, rax
1217+
1218+
## "{evex} cmp*" are alias for "ccmpt* {dfv=}"
1219+
1220+
# CHECK: ccmpt {dfv=} byte ptr [r8 + 4*rax + 123], 123
1221+
# CHECK: encoding: [0x62,0xd4,0x04,0x0a,0x80,0x7c,0x80,0x7b,0x7b]
1222+
{evex} cmp byte ptr [r8 + 4*rax + 123], 123
1223+
# CHECK: ccmpt {dfv=} word ptr [r8 + 4*rax + 123], 123
1224+
# CHECK: encoding: [0x62,0xd4,0x05,0x0a,0x83,0x7c,0x80,0x7b,0x7b]
1225+
{evex} cmp word ptr [r8 + 4*rax + 123], 123
1226+
# CHECK: ccmpt {dfv=} word ptr [r8 + 4*rax + 123], 1234
1227+
# CHECK: encoding: [0x62,0xd4,0x05,0x0a,0x81,0x7c,0x80,0x7b,0xd2,0x04]
1228+
{evex} cmp word ptr [r8 + 4*rax + 123], 1234
1229+
# CHECK: ccmpt {dfv=} dword ptr [r8 + 4*rax + 123], 123
1230+
# CHECK: encoding: [0x62,0xd4,0x04,0x0a,0x83,0x7c,0x80,0x7b,0x7b]
1231+
{evex} cmp dword ptr [r8 + 4*rax + 123], 123
1232+
# CHECK: ccmpt {dfv=} dword ptr [r8 + 4*rax + 123], 123456
1233+
# CHECK: encoding: [0x62,0xd4,0x04,0x0a,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
1234+
{evex} cmp dword ptr [r8 + 4*rax + 123], 123456
1235+
# CHECK: ccmpt {dfv=} qword ptr [r8 + 4*rax + 123], 123
1236+
# CHECK: encoding: [0x62,0xd4,0x84,0x0a,0x83,0x7c,0x80,0x7b,0x7b]
1237+
{evex} cmp qword ptr [r8 + 4*rax + 123], 123
1238+
# CHECK: ccmpt {dfv=} qword ptr [r8 + 4*rax + 123], 123456
1239+
# CHECK: encoding: [0x62,0xd4,0x84,0x0a,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
1240+
{evex} cmp qword ptr [r8 + 4*rax + 123], 123456
1241+
# CHECK: ccmpt {dfv=} byte ptr [r8 + 4*rax + 123], bl
1242+
# CHECK: encoding: [0x62,0xd4,0x04,0x0a,0x38,0x5c,0x80,0x7b]
1243+
{evex} cmp byte ptr [r8 + 4*rax + 123], bl
1244+
# CHECK: ccmpt {dfv=} word ptr [r8 + 4*rax + 123], dx
1245+
# CHECK: encoding: [0x62,0xd4,0x05,0x0a,0x39,0x54,0x80,0x7b]
1246+
{evex} cmp word ptr [r8 + 4*rax + 123], dx
1247+
# CHECK: ccmpt {dfv=} dword ptr [r8 + 4*rax + 123], ecx
1248+
# CHECK: encoding: [0x62,0xd4,0x04,0x0a,0x39,0x4c,0x80,0x7b]
1249+
{evex} cmp dword ptr [r8 + 4*rax + 123], ecx
1250+
# CHECK: ccmpt {dfv=} qword ptr [r8 + 4*rax + 123], r9
1251+
# CHECK: encoding: [0x62,0x54,0x84,0x0a,0x39,0x4c,0x80,0x7b]
1252+
{evex} cmp qword ptr [r8 + 4*rax + 123], r9
1253+
# CHECK: ccmpt {dfv=} bl, byte ptr [r8 + 4*rax + 123]
1254+
# CHECK: encoding: [0x62,0xd4,0x04,0x0a,0x3a,0x5c,0x80,0x7b]
1255+
{evex} cmp bl, byte ptr [r8 + 4*rax + 123]
1256+
# CHECK: ccmpt {dfv=} dx, word ptr [r8 + 4*rax + 123]
1257+
# CHECK: encoding: [0x62,0xd4,0x05,0x0a,0x3b,0x54,0x80,0x7b]
1258+
{evex} cmp dx, word ptr [r8 + 4*rax + 123]
1259+
# CHECK: ccmpt {dfv=} ecx, dword ptr [r8 + 4*rax + 123]
1260+
# CHECK: encoding: [0x62,0xd4,0x04,0x0a,0x3b,0x4c,0x80,0x7b]
1261+
{evex} cmp ecx, dword ptr [r8 + 4*rax + 123]
1262+
# CHECK: ccmpt {dfv=} r9, qword ptr [r8 + 4*rax + 123]
1263+
# CHECK: encoding: [0x62,0x54,0x84,0x0a,0x3b,0x4c,0x80,0x7b]
1264+
{evex} cmp r9, qword ptr [r8 + 4*rax + 123]
1265+
# CHECK: ccmpt {dfv=} bl, 123
1266+
# CHECK: encoding: [0x62,0xf4,0x04,0x0a,0x80,0xfb,0x7b]
1267+
{evex} cmp bl, 123
1268+
# CHECK: ccmpt {dfv=} dx, 123
1269+
# CHECK: encoding: [0x62,0xf4,0x05,0x0a,0x83,0xfa,0x7b]
1270+
{evex} cmp dx, 123
1271+
# CHECK: ccmpt {dfv=} ecx, 123
1272+
# CHECK: encoding: [0x62,0xf4,0x04,0x0a,0x83,0xf9,0x7b]
1273+
{evex} cmp ecx, 123
1274+
# CHECK: ccmpt {dfv=} r9, 123
1275+
# CHECK: encoding: [0x62,0xd4,0x84,0x0a,0x83,0xf9,0x7b]
1276+
{evex} cmp r9, 123
1277+
# CHECK: ccmpt {dfv=} dx, 1234
1278+
# CHECK: encoding: [0x62,0xf4,0x05,0x0a,0x81,0xfa,0xd2,0x04]
1279+
{evex} cmp dx, 1234
1280+
# CHECK: ccmpt {dfv=} ecx, 123456
1281+
# CHECK: encoding: [0x62,0xf4,0x04,0x0a,0x81,0xf9,0x40,0xe2,0x01,0x00]
1282+
{evex} cmp ecx, 123456
1283+
# CHECK: ccmpt {dfv=} r9, 123456
1284+
# CHECK: encoding: [0x62,0xd4,0x84,0x0a,0x81,0xf9,0x40,0xe2,0x01,0x00]
1285+
{evex} cmp r9, 123456
1286+
# CHECK: ccmpt {dfv=} dl, bl
1287+
# CHECK: encoding: [0x62,0xf4,0x04,0x0a,0x38,0xda]
1288+
{evex} cmp dl, bl
1289+
# CHECK: ccmpt {dfv=} ax, dx
1290+
# CHECK: encoding: [0x62,0xf4,0x05,0x0a,0x39,0xd0]
1291+
{evex} cmp ax, dx
1292+
# CHECK: ccmpt {dfv=} edx, ecx
1293+
# CHECK: encoding: [0x62,0xf4,0x04,0x0a,0x39,0xca]
1294+
{evex} cmp edx, ecx
1295+
# CHECK: ccmpt {dfv=} r15, r9
1296+
# CHECK: encoding: [0x62,0x54,0x84,0x0a,0x39,0xcf]
1297+
{evex} cmp r15, r9

llvm/test/MC/X86/apx/ctest-att.s

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# RUN: llvm-mc -triple x86_64 -show-encoding %s | FileCheck %s
22
# RUN: not llvm-mc -triple i386 -show-encoding %s 2>&1 | FileCheck %s --check-prefix=ERROR
33

4-
# ERROR-COUNT-260: error:
4+
# ERROR-COUNT-276: error:
55
# ERROR-NOT: error:
66
# CHECK: ctestbb {dfv=of} $123, 123(%r8,%rax,4)
77
# CHECK: encoding: [0x62,0xd4,0x44,0x02,0xf6,0x44,0x80,0x7b,0x7b]
@@ -784,3 +784,54 @@
784784
# CHECK: ctesteq {dfv=of} %r9, %r15
785785
# CHECK: encoding: [0x62,0x54,0xc4,0x04,0x85,0xcf]
786786
ctesteq {dfv=of} %r9, %r15
787+
788+
## "{evex} test*" are alias for "ctestt* {dfv=}"
789+
790+
# CHECK: ctesttb {dfv=} $123, 123(%r8,%rax,4)
791+
# CHECK: encoding: [0x62,0xd4,0x04,0x0a,0xf6,0x44,0x80,0x7b,0x7b]
792+
{evex} testb $123, 123(%r8,%rax,4)
793+
# CHECK: ctesttw {dfv=} $1234, 123(%r8,%rax,4)
794+
# CHECK: encoding: [0x62,0xd4,0x05,0x0a,0xf7,0x44,0x80,0x7b,0xd2,0x04]
795+
{evex} testw $1234, 123(%r8,%rax,4)
796+
# CHECK: ctesttl {dfv=} $123456, 123(%r8,%rax,4)
797+
# CHECK: encoding: [0x62,0xd4,0x04,0x0a,0xf7,0x44,0x80,0x7b,0x40,0xe2,0x01,0x00]
798+
{evex} testl $123456, 123(%r8,%rax,4)
799+
# CHECK: ctesttq {dfv=} $123456, 123(%r8,%rax,4)
800+
# CHECK: encoding: [0x62,0xd4,0x84,0x0a,0xf7,0x44,0x80,0x7b,0x40,0xe2,0x01,0x00]
801+
{evex} testq $123456, 123(%r8,%rax,4)
802+
# CHECK: ctesttb {dfv=} %bl, 123(%r8,%rax,4)
803+
# CHECK: encoding: [0x62,0xd4,0x04,0x0a,0x84,0x5c,0x80,0x7b]
804+
{evex} testb %bl, 123(%r8,%rax,4)
805+
# CHECK: ctesttw {dfv=} %dx, 123(%r8,%rax,4)
806+
# CHECK: encoding: [0x62,0xd4,0x05,0x0a,0x85,0x54,0x80,0x7b]
807+
{evex} testw %dx, 123(%r8,%rax,4)
808+
# CHECK: ctesttl {dfv=} %ecx, 123(%r8,%rax,4)
809+
# CHECK: encoding: [0x62,0xd4,0x04,0x0a,0x85,0x4c,0x80,0x7b]
810+
{evex} testl %ecx, 123(%r8,%rax,4)
811+
# CHECK: ctesttq {dfv=} %r9, 123(%r8,%rax,4)
812+
# CHECK: encoding: [0x62,0x54,0x84,0x0a,0x85,0x4c,0x80,0x7b]
813+
{evex} testq %r9, 123(%r8,%rax,4)
814+
# CHECK: ctesttb {dfv=} $123, %bl
815+
# CHECK: encoding: [0x62,0xf4,0x04,0x0a,0xf6,0xc3,0x7b]
816+
{evex} testb $123, %bl
817+
# CHECK: ctesttw {dfv=} $1234, %dx
818+
# CHECK: encoding: [0x62,0xf4,0x05,0x0a,0xf7,0xc2,0xd2,0x04]
819+
{evex} testw $1234, %dx
820+
# CHECK: ctesttl {dfv=} $123456, %ecx
821+
# CHECK: encoding: [0x62,0xf4,0x04,0x0a,0xf7,0xc1,0x40,0xe2,0x01,0x00]
822+
{evex} testl $123456, %ecx
823+
# CHECK: ctesttq {dfv=} $123456, %r9
824+
# CHECK: encoding: [0x62,0xd4,0x84,0x0a,0xf7,0xc1,0x40,0xe2,0x01,0x00]
825+
{evex} testq $123456, %r9
826+
# CHECK: ctesttb {dfv=} %bl, %dl
827+
# CHECK: encoding: [0x62,0xf4,0x04,0x0a,0x84,0xda]
828+
{evex} testb %bl, %dl
829+
# CHECK: ctesttw {dfv=} %dx, %ax
830+
# CHECK: encoding: [0x62,0xf4,0x05,0x0a,0x85,0xd0]
831+
{evex} testw %dx, %ax
832+
# CHECK: ctesttl {dfv=} %ecx, %edx
833+
# CHECK: encoding: [0x62,0xf4,0x04,0x0a,0x85,0xca]
834+
{evex} testl %ecx, %edx
835+
# CHECK: ctesttq {dfv=} %r9, %r15
836+
# CHECK: encoding: [0x62,0x54,0x84,0x0a,0x85,0xcf]
837+
{evex} testq %r9, %r15

llvm/test/MC/X86/apx/ctest-intel.s

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -780,3 +780,54 @@
780780
# CHECK: cteste {dfv=of} r15, r9
781781
# CHECK: encoding: [0x62,0x54,0xc4,0x04,0x85,0xcf]
782782
cteste {dfv=of} r15, r9
783+
784+
## "{evex} test*" are alias for "ctestt* {dfv=}"
785+
786+
# CHECK: ctestt {dfv=} byte ptr [r8 + 4*rax + 123], 123
787+
# CHECK: encoding: [0x62,0xd4,0x04,0x0a,0xf6,0x44,0x80,0x7b,0x7b]
788+
{evex} test byte ptr [r8 + 4*rax + 123], 123
789+
# CHECK: ctestt {dfv=} word ptr [r8 + 4*rax + 123], 1234
790+
# CHECK: encoding: [0x62,0xd4,0x05,0x0a,0xf7,0x44,0x80,0x7b,0xd2,0x04]
791+
{evex} test word ptr [r8 + 4*rax + 123], 1234
792+
# CHECK: ctestt {dfv=} dword ptr [r8 + 4*rax + 123], 123456
793+
# CHECK: encoding: [0x62,0xd4,0x04,0x0a,0xf7,0x44,0x80,0x7b,0x40,0xe2,0x01,0x00]
794+
{evex} test dword ptr [r8 + 4*rax + 123], 123456
795+
# CHECK: ctestt {dfv=} qword ptr [r8 + 4*rax + 123], 123456
796+
# CHECK: encoding: [0x62,0xd4,0x84,0x0a,0xf7,0x44,0x80,0x7b,0x40,0xe2,0x01,0x00]
797+
{evex} test qword ptr [r8 + 4*rax + 123], 123456
798+
# CHECK: ctestt {dfv=} byte ptr [r8 + 4*rax + 123], bl
799+
# CHECK: encoding: [0x62,0xd4,0x04,0x0a,0x84,0x5c,0x80,0x7b]
800+
{evex} test byte ptr [r8 + 4*rax + 123], bl
801+
# CHECK: ctestt {dfv=} word ptr [r8 + 4*rax + 123], dx
802+
# CHECK: encoding: [0x62,0xd4,0x05,0x0a,0x85,0x54,0x80,0x7b]
803+
{evex} test word ptr [r8 + 4*rax + 123], dx
804+
# CHECK: ctestt {dfv=} dword ptr [r8 + 4*rax + 123], ecx
805+
# CHECK: encoding: [0x62,0xd4,0x04,0x0a,0x85,0x4c,0x80,0x7b]
806+
{evex} test dword ptr [r8 + 4*rax + 123], ecx
807+
# CHECK: ctestt {dfv=} qword ptr [r8 + 4*rax + 123], r9
808+
# CHECK: encoding: [0x62,0x54,0x84,0x0a,0x85,0x4c,0x80,0x7b]
809+
{evex} test qword ptr [r8 + 4*rax + 123], r9
810+
# CHECK: ctestt {dfv=} bl, 123
811+
# CHECK: encoding: [0x62,0xf4,0x04,0x0a,0xf6,0xc3,0x7b]
812+
{evex} test bl, 123
813+
# CHECK: ctestt {dfv=} dx, 1234
814+
# CHECK: encoding: [0x62,0xf4,0x05,0x0a,0xf7,0xc2,0xd2,0x04]
815+
{evex} test dx, 1234
816+
# CHECK: ctestt {dfv=} ecx, 123456
817+
# CHECK: encoding: [0x62,0xf4,0x04,0x0a,0xf7,0xc1,0x40,0xe2,0x01,0x00]
818+
{evex} test ecx, 123456
819+
# CHECK: ctestt {dfv=} r9, 123456
820+
# CHECK: encoding: [0x62,0xd4,0x84,0x0a,0xf7,0xc1,0x40,0xe2,0x01,0x00]
821+
{evex} test r9, 123456
822+
# CHECK: ctestt {dfv=} dl, bl
823+
# CHECK: encoding: [0x62,0xf4,0x04,0x0a,0x84,0xda]
824+
{evex} test dl, bl
825+
# CHECK: ctestt {dfv=} ax, dx
826+
# CHECK: encoding: [0x62,0xf4,0x05,0x0a,0x85,0xd0]
827+
{evex} test ax, dx
828+
# CHECK: ctestt {dfv=} edx, ecx
829+
# CHECK: encoding: [0x62,0xf4,0x04,0x0a,0x85,0xca]
830+
{evex} test edx, ecx
831+
# CHECK: ctestt {dfv=} r15, r9
832+
# CHECK: encoding: [0x62,0x54,0x84,0x0a,0x85,0xcf]
833+
{evex} test r15, r9

0 commit comments

Comments
 (0)