Add support for AVX enhanced comparison predicates. Patch from Kay Tiong Khoo.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153935 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Craig Topper 2012-04-03 05:20:24 +00:00
parent 90e7d4f6f0
commit 769bbfd951
9 changed files with 832 additions and 41 deletions

View File

@ -1527,6 +1527,9 @@ static int readOperands(struct InternalInstruction* insn) {
if (insn->spec->operands[index].type == TYPE_IMM3 &&
insn->immediates[insn->numImmediatesConsumed - 1] > 7)
return -1;
if (insn->spec->operands[index].type == TYPE_IMM5 &&
insn->immediates[insn->numImmediatesConsumed - 1] > 31)
return -1;
if (insn->spec->operands[index].type == TYPE_XMM128 ||
insn->spec->operands[index].type == TYPE_XMM256)
sawRegImm = 1;

View File

@ -273,6 +273,7 @@ struct ContextDecision {
ENUM_ENTRY(TYPE_IMM32, "4-byte") \
ENUM_ENTRY(TYPE_IMM64, "8-byte") \
ENUM_ENTRY(TYPE_IMM3, "1-byte immediate operand between 0 and 7") \
ENUM_ENTRY(TYPE_IMM5, "1-byte immediate operand between 0 and 31") \
ENUM_ENTRY(TYPE_RM8, "1-byte register or memory operand") \
ENUM_ENTRY(TYPE_RM16, "2-byte") \
ENUM_ENTRY(TYPE_RM32, "4-byte") \

View File

@ -19,7 +19,6 @@
#include "X86MachineFunctionInfo.h"
#include "X86TargetMachine.h"
#include "InstPrinter/X86ATTInstPrinter.h"
#include "InstPrinter/X86IntelInstPrinter.h"
#include "llvm/CallingConv.h"
#include "llvm/DerivedTypes.h"
#include "llvm/Module.h"
@ -265,8 +264,8 @@ void X86AsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo,
void X86AsmPrinter::printSSECC(const MachineInstr *MI, unsigned Op,
raw_ostream &O) {
unsigned char value = MI->getOperand(Op).getImm();
assert(value <= 7 && "Invalid ssecc argument!");
switch (value) {
default: llvm_unreachable("Invalid ssecc argument!");
case 0: O << "eq"; break;
case 1: O << "lt"; break;
case 2: O << "le"; break;

View File

@ -374,6 +374,11 @@ def SSECC : Operand<i8> {
let OperandType = "OPERAND_IMMEDIATE";
}
def AVXCC : Operand<i8> {
let PrintMethod = "printSSECC";
let OperandType = "OPERAND_IMMEDIATE";
}
class ImmSExtAsmOperandClass : AsmOperandClass {
let SuperClasses = [ImmAsmOperand];
let RenderMethod = "addImmOperands";

View File

@ -2162,15 +2162,15 @@ def : Pat<(v4f64 (fextend (loadv4f32 addr:$src))),
// sse12_cmp_scalar - sse 1 & 2 compare scalar instructions
multiclass sse12_cmp_scalar<RegisterClass RC, X86MemOperand x86memop,
SDNode OpNode, ValueType VT, PatFrag ld_frag,
string asm, string asm_alt,
Operand CC, SDNode OpNode, ValueType VT,
PatFrag ld_frag, string asm, string asm_alt,
OpndItins itins> {
def rr : SIi8<0xC2, MRMSrcReg,
(outs RC:$dst), (ins RC:$src1, RC:$src2, SSECC:$cc), asm,
(outs RC:$dst), (ins RC:$src1, RC:$src2, CC:$cc), asm,
[(set RC:$dst, (OpNode (VT RC:$src1), RC:$src2, imm:$cc))],
itins.rr>;
def rm : SIi8<0xC2, MRMSrcMem,
(outs RC:$dst), (ins RC:$src1, x86memop:$src2, SSECC:$cc), asm,
(outs RC:$dst), (ins RC:$src1, x86memop:$src2, CC:$cc), asm,
[(set RC:$dst, (OpNode (VT RC:$src1),
(ld_frag addr:$src2), imm:$cc))],
itins.rm>;
@ -2187,57 +2187,57 @@ multiclass sse12_cmp_scalar<RegisterClass RC, X86MemOperand x86memop,
}
}
defm VCMPSS : sse12_cmp_scalar<FR32, f32mem, X86cmpss, f32, loadf32,
defm VCMPSS : sse12_cmp_scalar<FR32, f32mem, AVXCC, X86cmpss, f32, loadf32,
"cmp${cc}ss\t{$src2, $src1, $dst|$dst, $src1, $src2}",
"cmpss\t{$cc, $src2, $src1, $dst|$dst, $src1, $src2, $cc}",
SSE_ALU_F32S>,
XS, VEX_4V, VEX_LIG;
defm VCMPSD : sse12_cmp_scalar<FR64, f64mem, X86cmpsd, f64, loadf64,
defm VCMPSD : sse12_cmp_scalar<FR64, f64mem, AVXCC, X86cmpsd, f64, loadf64,
"cmp${cc}sd\t{$src2, $src1, $dst|$dst, $src1, $src2}",
"cmpsd\t{$cc, $src2, $src1, $dst|$dst, $src1, $src2, $cc}",
SSE_ALU_F32S>, // same latency as 32 bit compare
XD, VEX_4V, VEX_LIG;
let Constraints = "$src1 = $dst" in {
defm CMPSS : sse12_cmp_scalar<FR32, f32mem, X86cmpss, f32, loadf32,
defm CMPSS : sse12_cmp_scalar<FR32, f32mem, SSECC, X86cmpss, f32, loadf32,
"cmp${cc}ss\t{$src2, $dst|$dst, $src2}",
"cmpss\t{$cc, $src2, $dst|$dst, $src2, $cc}", SSE_ALU_F32S>,
XS;
defm CMPSD : sse12_cmp_scalar<FR64, f64mem, X86cmpsd, f64, loadf64,
defm CMPSD : sse12_cmp_scalar<FR64, f64mem, SSECC, X86cmpsd, f64, loadf64,
"cmp${cc}sd\t{$src2, $dst|$dst, $src2}",
"cmpsd\t{$cc, $src2, $dst|$dst, $src2, $cc}",
SSE_ALU_F32S>, // same latency as 32 bit compare
XD;
}
multiclass sse12_cmp_scalar_int<RegisterClass RC, X86MemOperand x86memop,
multiclass sse12_cmp_scalar_int<X86MemOperand x86memop, Operand CC,
Intrinsic Int, string asm, OpndItins itins> {
def rr : SIi8<0xC2, MRMSrcReg, (outs VR128:$dst),
(ins VR128:$src1, VR128:$src, SSECC:$cc), asm,
(ins VR128:$src1, VR128:$src, CC:$cc), asm,
[(set VR128:$dst, (Int VR128:$src1,
VR128:$src, imm:$cc))],
itins.rr>;
def rm : SIi8<0xC2, MRMSrcMem, (outs VR128:$dst),
(ins VR128:$src1, x86memop:$src, SSECC:$cc), asm,
(ins VR128:$src1, x86memop:$src, CC:$cc), asm,
[(set VR128:$dst, (Int VR128:$src1,
(load addr:$src), imm:$cc))],
itins.rm>;
}
// Aliases to match intrinsics which expect XMM operand(s).
defm Int_VCMPSS : sse12_cmp_scalar_int<VR128, f32mem, int_x86_sse_cmp_ss,
defm Int_VCMPSS : sse12_cmp_scalar_int<f32mem, AVXCC, int_x86_sse_cmp_ss,
"cmp${cc}ss\t{$src, $src1, $dst|$dst, $src1, $src}",
SSE_ALU_F32S>,
XS, VEX_4V;
defm Int_VCMPSD : sse12_cmp_scalar_int<VR128, f64mem, int_x86_sse2_cmp_sd,
defm Int_VCMPSD : sse12_cmp_scalar_int<f64mem, AVXCC, int_x86_sse2_cmp_sd,
"cmp${cc}sd\t{$src, $src1, $dst|$dst, $src1, $src}",
SSE_ALU_F32S>, // same latency as f32
XD, VEX_4V;
let Constraints = "$src1 = $dst" in {
defm Int_CMPSS : sse12_cmp_scalar_int<VR128, f32mem, int_x86_sse_cmp_ss,
defm Int_CMPSS : sse12_cmp_scalar_int<f32mem, SSECC, int_x86_sse_cmp_ss,
"cmp${cc}ss\t{$src, $dst|$dst, $src}",
SSE_ALU_F32S>, XS;
defm Int_CMPSD : sse12_cmp_scalar_int<VR128, f64mem, int_x86_sse2_cmp_sd,
defm Int_CMPSD : sse12_cmp_scalar_int<f64mem, SSECC, int_x86_sse2_cmp_sd,
"cmp${cc}sd\t{$src, $dst|$dst, $src}",
SSE_ALU_F32S>, // same latency as f32
XD;
@ -2308,50 +2308,50 @@ let Defs = [EFLAGS] in {
// sse12_cmp_packed - sse 1 & 2 compare packed instructions
multiclass sse12_cmp_packed<RegisterClass RC, X86MemOperand x86memop,
Intrinsic Int, string asm, string asm_alt,
Domain d> {
let isAsmParserOnly = 1 in {
def rri : PIi8<0xC2, MRMSrcReg,
(outs RC:$dst), (ins RC:$src1, RC:$src2, SSECC:$cc), asm,
[(set RC:$dst, (Int RC:$src1, RC:$src2, imm:$cc))],
IIC_SSE_CMPP_RR, d>;
def rmi : PIi8<0xC2, MRMSrcMem,
(outs RC:$dst), (ins RC:$src1, x86memop:$src2, SSECC:$cc), asm,
[(set RC:$dst, (Int RC:$src1, (memop addr:$src2), imm:$cc))],
IIC_SSE_CMPP_RM, d>;
}
Operand CC, Intrinsic Int, string asm,
string asm_alt, Domain d> {
def rri : PIi8<0xC2, MRMSrcReg,
(outs RC:$dst), (ins RC:$src1, RC:$src2, CC:$cc), asm,
[(set RC:$dst, (Int RC:$src1, RC:$src2, imm:$cc))],
IIC_SSE_CMPP_RR, d>;
def rmi : PIi8<0xC2, MRMSrcMem,
(outs RC:$dst), (ins RC:$src1, x86memop:$src2, CC:$cc), asm,
[(set RC:$dst, (Int RC:$src1, (memop addr:$src2), imm:$cc))],
IIC_SSE_CMPP_RM, d>;
// Accept explicit immediate argument form instead of comparison code.
def rri_alt : PIi8<0xC2, MRMSrcReg,
(outs RC:$dst), (ins RC:$src1, RC:$src2, i8imm:$cc),
asm_alt, [], IIC_SSE_CMPP_RR, d>;
def rmi_alt : PIi8<0xC2, MRMSrcMem,
(outs RC:$dst), (ins RC:$src1, x86memop:$src2, i8imm:$cc),
asm_alt, [], IIC_SSE_CMPP_RM, d>;
let neverHasSideEffects = 1 in {
def rri_alt : PIi8<0xC2, MRMSrcReg,
(outs RC:$dst), (ins RC:$src1, RC:$src2, i8imm:$cc),
asm_alt, [], IIC_SSE_CMPP_RR, d>;
def rmi_alt : PIi8<0xC2, MRMSrcMem,
(outs RC:$dst), (ins RC:$src1, x86memop:$src2, i8imm:$cc),
asm_alt, [], IIC_SSE_CMPP_RM, d>;
}
}
defm VCMPPS : sse12_cmp_packed<VR128, f128mem, int_x86_sse_cmp_ps,
defm VCMPPS : sse12_cmp_packed<VR128, f128mem, AVXCC, int_x86_sse_cmp_ps,
"cmp${cc}ps\t{$src2, $src1, $dst|$dst, $src1, $src2}",
"cmpps\t{$cc, $src2, $src1, $dst|$dst, $src1, $src2, $cc}",
SSEPackedSingle>, TB, VEX_4V;
defm VCMPPD : sse12_cmp_packed<VR128, f128mem, int_x86_sse2_cmp_pd,
defm VCMPPD : sse12_cmp_packed<VR128, f128mem, AVXCC, int_x86_sse2_cmp_pd,
"cmp${cc}pd\t{$src2, $src1, $dst|$dst, $src1, $src2}",
"cmppd\t{$cc, $src2, $src1, $dst|$dst, $src1, $src2, $cc}",
SSEPackedDouble>, TB, OpSize, VEX_4V;
defm VCMPPSY : sse12_cmp_packed<VR256, f256mem, int_x86_avx_cmp_ps_256,
defm VCMPPSY : sse12_cmp_packed<VR256, f256mem, AVXCC, int_x86_avx_cmp_ps_256,
"cmp${cc}ps\t{$src2, $src1, $dst|$dst, $src1, $src2}",
"cmpps\t{$cc, $src2, $src1, $dst|$dst, $src1, $src2, $cc}",
SSEPackedSingle>, TB, VEX_4V;
defm VCMPPDY : sse12_cmp_packed<VR256, f256mem, int_x86_avx_cmp_pd_256,
defm VCMPPDY : sse12_cmp_packed<VR256, f256mem, AVXCC, int_x86_avx_cmp_pd_256,
"cmp${cc}pd\t{$src2, $src1, $dst|$dst, $src1, $src2}",
"cmppd\t{$cc, $src2, $src1, $dst|$dst, $src1, $src2, $cc}",
SSEPackedDouble>, TB, OpSize, VEX_4V;
let Constraints = "$src1 = $dst" in {
defm CMPPS : sse12_cmp_packed<VR128, f128mem, int_x86_sse_cmp_ps,
defm CMPPS : sse12_cmp_packed<VR128, f128mem, SSECC, int_x86_sse_cmp_ps,
"cmp${cc}ps\t{$src2, $dst|$dst, $src2}",
"cmpps\t{$cc, $src2, $dst|$dst, $src2, $cc}",
SSEPackedSingle>, TB;
defm CMPPD : sse12_cmp_packed<VR128, f128mem, int_x86_sse2_cmp_pd,
defm CMPPD : sse12_cmp_packed<VR128, f128mem, SSECC, int_x86_sse2_cmp_pd,
"cmp${cc}pd\t{$src2, $dst|$dst, $src2}",
"cmppd\t{$cc, $src2, $dst|$dst, $src2, $cc}",
SSEPackedDouble>, TB, OpSize;

View File

@ -421,6 +421,18 @@
# CHECK: movl %eax, 0
0xa3 0x00 0x00 0x00 0x00
# CHECK: cmpordpd %xmm7, %xmm0
0x66 0x0f 0xc2 0xc7 0x07
# CHECK: cmpordps %xmm7, %xmm0
0x0f 0xc2 0xc7 0x07
# CHECK: cmpordsd %xmm7, %xmm0
0xf2 0x0f 0xc2 0xc7 0x07
# CHECK: cmpordss %xmm7, %xmm0
0xf3 0x0f 0xc2 0xc7 0x07
# CHECK: vaddps %xmm3, %xmm7, %xmm0
0xc4 0xe1 0x00 0x58 0xc3

View File

@ -600,6 +600,774 @@ vdivpd -4(%rcx,%rbx,8), %xmm10, %xmm11
// CHECK: encoding: [0xc5,0x1b,0xc2,0x6c,0xcb,0xfc,0x03]
vcmpunordsd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpps $8, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x08]
vcmpeq_uqps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $9, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x09]
vcmpngeps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $10, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x0a]
vcmpngtps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $11, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x0b]
vcmpfalseps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $12, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x0c]
vcmpneq_oqps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $13, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x0d]
vcmpgeps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $14, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x0e]
vcmpgtps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $15, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x0f]
vcmptrueps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $16, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x10]
vcmpeq_osps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $17, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x11]
vcmplt_oqps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $18, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x12]
vcmple_oqps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $19, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x13]
vcmpunord_sps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $20, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x14]
vcmpneq_usps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $21, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x15]
vcmpnlt_uqps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $22, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x16]
vcmpnle_uqps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $23, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x17]
vcmpord_sps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $24, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x18]
vcmpeq_usps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $25, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x19]
vcmpnge_uqps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $26, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x1a]
vcmpngt_uqps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $27, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x1b]
vcmpfalse_osps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $28, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x1c]
vcmpneq_osps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $29, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x1d]
vcmpge_oqps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $30, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x1e]
vcmpgt_oqps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $31, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x18,0xc2,0xeb,0x1f]
vcmptrue_usps %xmm11, %xmm12, %xmm13
// CHECK: vcmpps $8, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x18,0xc2,0x6c,0xcb,0xfc,0x08]
vcmpeq_uqps -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpps $9, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x18,0xc2,0x6c,0xcb,0xfc,0x09]
vcmpngeps -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpps $10, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x18,0xc2,0x6c,0xcb,0xfc,0x0a]
vcmpngtps -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpps $11, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x18,0xc2,0x6c,0xcb,0xfc,0x0b]
vcmpfalseps -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpps $12, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x18,0xc2,0x6c,0xcb,0xfc,0x0c]
vcmpneq_oqps -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpps $13, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x18,0xc2,0x6c,0xcb,0xfc,0x0d]
vcmpgeps -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpps $14, -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: encoding: [0xc5,0xc8,0xc2,0x54,0xcb,0xfc,0x0e]
vcmpgtps -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: vcmpps $15, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x18,0xc2,0x6c,0xcb,0xfc,0x0f]
vcmptrueps -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpps $16, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x18,0xc2,0x6c,0xcb,0xfc,0x10]
vcmpeq_osps -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpps $17, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x18,0xc2,0x6c,0xcb,0xfc,0x11]
vcmplt_oqps -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpps $18, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x18,0xc2,0x6c,0xcb,0xfc,0x12]
vcmple_oqps -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpps $19, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x18,0xc2,0x6c,0xcb,0xfc,0x13]
vcmpunord_sps -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpps $20, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x18,0xc2,0x6c,0xcb,0xfc,0x14]
vcmpneq_usps -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpps $21, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x18,0xc2,0x6c,0xcb,0xfc,0x15]
vcmpnlt_uqps -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpps $22, -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: encoding: [0xc5,0xc8,0xc2,0x54,0xcb,0xfc,0x16]
vcmpnle_uqps -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: vcmpps $23, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x18,0xc2,0x6c,0xcb,0xfc,0x17]
vcmpord_sps -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpps $24, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x18,0xc2,0x6c,0xcb,0xfc,0x18]
vcmpeq_usps -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpps $25, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x18,0xc2,0x6c,0xcb,0xfc,0x19]
vcmpnge_uqps -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpps $26, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x18,0xc2,0x6c,0xcb,0xfc,0x1a]
vcmpngt_uqps -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpps $27, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x18,0xc2,0x6c,0xcb,0xfc,0x1b]
vcmpfalse_osps -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpps $28, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x18,0xc2,0x6c,0xcb,0xfc,0x1c]
vcmpneq_osps -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpps $29, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x18,0xc2,0x6c,0xcb,0xfc,0x1d]
vcmpge_oqps -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpps $30, -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: encoding: [0xc5,0xc8,0xc2,0x54,0xcb,0xfc,0x1e]
vcmpgt_oqps -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: vcmpps $31, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x18,0xc2,0x6c,0xcb,0xfc,0x1f]
vcmptrue_usps -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmppd $8, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x08]
vcmpeq_uqpd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $9, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x09]
vcmpngepd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $10, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x0a]
vcmpngtpd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $11, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x0b]
vcmpfalsepd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $12, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x0c]
vcmpneq_oqpd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $13, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x0d]
vcmpgepd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $14, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x0e]
vcmpgtpd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $15, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x0f]
vcmptruepd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $16, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x10]
vcmpeq_ospd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $17, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x11]
vcmplt_oqpd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $18, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x12]
vcmple_oqpd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $19, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x13]
vcmpunord_spd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $20, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x14]
vcmpneq_uspd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $21, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x15]
vcmpnlt_uqpd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $22, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x16]
vcmpnle_uqpd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $23, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x17]
vcmpord_spd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $24, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x18]
vcmpeq_uspd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $25, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x19]
vcmpnge_uqpd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $26, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x1a]
vcmpngt_uqpd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $27, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x1b]
vcmpfalse_ospd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $28, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x1c]
vcmpneq_ospd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $29, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x1d]
vcmpge_oqpd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $30, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x1e]
vcmpgt_oqpd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $31, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xeb,0x1f]
vcmptrue_uspd %xmm11, %xmm12, %xmm13
// CHECK: vcmppd $8, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x19,0xc2,0x6c,0xcb,0xfc,0x08]
vcmpeq_uqpd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmppd $9, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x19,0xc2,0x6c,0xcb,0xfc,0x09]
vcmpngepd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmppd $10, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x19,0xc2,0x6c,0xcb,0xfc,0x0a]
vcmpngtpd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmppd $11, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x19,0xc2,0x6c,0xcb,0xfc,0x0b]
vcmpfalsepd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmppd $12, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x19,0xc2,0x6c,0xcb,0xfc,0x0c]
vcmpneq_oqpd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmppd $13, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x19,0xc2,0x6c,0xcb,0xfc,0x0d]
vcmpgepd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmppd $14, -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: encoding: [0xc5,0xc9,0xc2,0x54,0xcb,0xfc,0x0e]
vcmpgtpd -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: vcmppd $15, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x19,0xc2,0x6c,0xcb,0xfc,0x0f]
vcmptruepd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmppd $16, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x19,0xc2,0x6c,0xcb,0xfc,0x10]
vcmpeq_ospd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmppd $17, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x19,0xc2,0x6c,0xcb,0xfc,0x11]
vcmplt_oqpd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmppd $18, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x19,0xc2,0x6c,0xcb,0xfc,0x12]
vcmple_oqpd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmppd $19, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x19,0xc2,0x6c,0xcb,0xfc,0x13]
vcmpunord_spd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmppd $20, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x19,0xc2,0x6c,0xcb,0xfc,0x14]
vcmpneq_uspd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmppd $21, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x19,0xc2,0x6c,0xcb,0xfc,0x15]
vcmpnlt_uqpd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmppd $22, -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: encoding: [0xc5,0xc9,0xc2,0x54,0xcb,0xfc,0x16]
vcmpnle_uqpd -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: vcmppd $23, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x19,0xc2,0x6c,0xcb,0xfc,0x17]
vcmpord_spd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmppd $24, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x19,0xc2,0x6c,0xcb,0xfc,0x18]
vcmpeq_uspd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmppd $25, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x19,0xc2,0x6c,0xcb,0xfc,0x19]
vcmpnge_uqpd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmppd $26, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x19,0xc2,0x6c,0xcb,0xfc,0x1a]
vcmpngt_uqpd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmppd $27, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x19,0xc2,0x6c,0xcb,0xfc,0x1b]
vcmpfalse_ospd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmppd $28, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x19,0xc2,0x6c,0xcb,0xfc,0x1c]
vcmpneq_ospd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmppd $29, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x19,0xc2,0x6c,0xcb,0xfc,0x1d]
vcmpge_oqpd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmppd $30, -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: encoding: [0xc5,0xc9,0xc2,0x54,0xcb,0xfc,0x1e]
vcmpgt_oqpd -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: vcmppd $31, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x19,0xc2,0x6c,0xcb,0xfc,0x1f]
vcmptrue_uspd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpss $8, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x08]
vcmpeq_uqss %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $9, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x09]
vcmpngess %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $10, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x0a]
vcmpngtss %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $11, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x0b]
vcmpfalsess %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $12, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x0c]
vcmpneq_oqss %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $13, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x0d]
vcmpgess %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $14, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x0e]
vcmpgtss %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $15, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x0f]
vcmptruess %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $16, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x10]
vcmpeq_osss %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $17, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x11]
vcmplt_oqss %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $18, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x12]
vcmple_oqss %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $19, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x13]
vcmpunord_sss %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $20, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x14]
vcmpneq_usss %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $21, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x15]
vcmpnlt_uqss %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $22, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x16]
vcmpnle_uqss %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $23, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x17]
vcmpord_sss %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $24, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x18]
vcmpeq_usss %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $25, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x19]
vcmpnge_uqss %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $26, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x1a]
vcmpngt_uqss %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $27, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x1b]
vcmpfalse_osss %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $28, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x1c]
vcmpneq_osss %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $29, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x1d]
vcmpge_oqss %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $30, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x1e]
vcmpgt_oqss %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $31, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1a,0xc2,0xeb,0x1f]
vcmptrue_usss %xmm11, %xmm12, %xmm13
// CHECK: vcmpss $8, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1a,0xc2,0x6c,0xcb,0xfc,0x08]
vcmpeq_uqss -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpss $9, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1a,0xc2,0x6c,0xcb,0xfc,0x09]
vcmpngess -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpss $10, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1a,0xc2,0x6c,0xcb,0xfc,0x0a]
vcmpngtss -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpss $11, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1a,0xc2,0x6c,0xcb,0xfc,0x0b]
vcmpfalsess -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpss $12, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1a,0xc2,0x6c,0xcb,0xfc,0x0c]
vcmpneq_oqss -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpss $13, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1a,0xc2,0x6c,0xcb,0xfc,0x0d]
vcmpgess -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpss $14, -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: encoding: [0xc5,0xca,0xc2,0x54,0xcb,0xfc,0x0e]
vcmpgtss -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: vcmpss $15, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1a,0xc2,0x6c,0xcb,0xfc,0x0f]
vcmptruess -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpss $16, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1a,0xc2,0x6c,0xcb,0xfc,0x10]
vcmpeq_osss -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpss $17, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1a,0xc2,0x6c,0xcb,0xfc,0x11]
vcmplt_oqss -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpss $18, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1a,0xc2,0x6c,0xcb,0xfc,0x12]
vcmple_oqss -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpss $19, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1a,0xc2,0x6c,0xcb,0xfc,0x13]
vcmpunord_sss -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpss $20, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1a,0xc2,0x6c,0xcb,0xfc,0x14]
vcmpneq_usss -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpss $21, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1a,0xc2,0x6c,0xcb,0xfc,0x15]
vcmpnlt_uqss -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpss $22, -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: encoding: [0xc5,0xca,0xc2,0x54,0xcb,0xfc,0x16]
vcmpnle_uqss -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: vcmpss $23, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1a,0xc2,0x6c,0xcb,0xfc,0x17]
vcmpord_sss -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpss $24, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1a,0xc2,0x6c,0xcb,0xfc,0x18]
vcmpeq_usss -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpss $25, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1a,0xc2,0x6c,0xcb,0xfc,0x19]
vcmpnge_uqss -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpss $26, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1a,0xc2,0x6c,0xcb,0xfc,0x1a]
vcmpngt_uqss -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpss $27, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1a,0xc2,0x6c,0xcb,0xfc,0x1b]
vcmpfalse_osss -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpss $28, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1a,0xc2,0x6c,0xcb,0xfc,0x1c]
vcmpneq_osss -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpss $29, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1a,0xc2,0x6c,0xcb,0xfc,0x1d]
vcmpge_oqss -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpss $30, -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: encoding: [0xc5,0xca,0xc2,0x54,0xcb,0xfc,0x1e]
vcmpgt_oqss -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: vcmpss $31, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1a,0xc2,0x6c,0xcb,0xfc,0x1f]
vcmptrue_usss -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpsd $8, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x08]
vcmpeq_uqsd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $9, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x09]
vcmpngesd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $10, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x0a]
vcmpngtsd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $11, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x0b]
vcmpfalsesd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $12, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x0c]
vcmpneq_oqsd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $13, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x0d]
vcmpgesd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $14, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x0e]
vcmpgtsd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $15, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x0f]
vcmptruesd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $16, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x10]
vcmpeq_ossd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $17, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x11]
vcmplt_oqsd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $18, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x12]
vcmple_oqsd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $19, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x13]
vcmpunord_ssd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $20, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x14]
vcmpneq_ussd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $21, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x15]
vcmpnlt_uqsd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $22, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x16]
vcmpnle_uqsd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $23, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x17]
vcmpord_ssd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $24, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x18]
vcmpeq_ussd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $25, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x19]
vcmpnge_uqsd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $26, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x1a]
vcmpngt_uqsd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $27, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x1b]
vcmpfalse_ossd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $28, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x1c]
vcmpneq_ossd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $29, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x1d]
vcmpge_oqsd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $30, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x1e]
vcmpgt_oqsd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $31, %xmm11, %xmm12, %xmm13
// CHECK: encoding: [0xc4,0x41,0x1b,0xc2,0xeb,0x1f]
vcmptrue_ussd %xmm11, %xmm12, %xmm13
// CHECK: vcmpsd $8, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1b,0xc2,0x6c,0xcb,0xfc,0x08]
vcmpeq_uqsd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpsd $9, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1b,0xc2,0x6c,0xcb,0xfc,0x09]
vcmpngesd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpsd $10, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1b,0xc2,0x6c,0xcb,0xfc,0x0a]
vcmpngtsd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpsd $11, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1b,0xc2,0x6c,0xcb,0xfc,0x0b]
vcmpfalsesd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpsd $12, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1b,0xc2,0x6c,0xcb,0xfc,0x0c]
vcmpneq_oqsd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpsd $13, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1b,0xc2,0x6c,0xcb,0xfc,0x0d]
vcmpgesd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpsd $14, -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: encoding: [0xc5,0xcb,0xc2,0x54,0xcb,0xfc,0x0e]
vcmpgtsd -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: vcmpsd $15, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1b,0xc2,0x6c,0xcb,0xfc,0x0f]
vcmptruesd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpsd $16, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1b,0xc2,0x6c,0xcb,0xfc,0x10]
vcmpeq_ossd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpsd $17, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1b,0xc2,0x6c,0xcb,0xfc,0x11]
vcmplt_oqsd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpsd $18, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1b,0xc2,0x6c,0xcb,0xfc,0x12]
vcmple_oqsd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpsd $19, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1b,0xc2,0x6c,0xcb,0xfc,0x13]
vcmpunord_ssd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpsd $20, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1b,0xc2,0x6c,0xcb,0xfc,0x14]
vcmpneq_ussd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpsd $21, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1b,0xc2,0x6c,0xcb,0xfc,0x15]
vcmpnlt_uqsd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpsd $22, -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: encoding: [0xc5,0xcb,0xc2,0x54,0xcb,0xfc,0x16]
vcmpnle_uqsd -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: vcmpsd $23, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1b,0xc2,0x6c,0xcb,0xfc,0x17]
vcmpord_ssd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpsd $24, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1b,0xc2,0x6c,0xcb,0xfc,0x18]
vcmpeq_ussd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpsd $25, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1b,0xc2,0x6c,0xcb,0xfc,0x19]
vcmpnge_uqsd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpsd $26, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1b,0xc2,0x6c,0xcb,0xfc,0x1a]
vcmpngt_uqsd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpsd $27, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1b,0xc2,0x6c,0xcb,0xfc,0x1b]
vcmpfalse_ossd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpsd $28, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1b,0xc2,0x6c,0xcb,0xfc,0x1c]
vcmpneq_ossd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpsd $29, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1b,0xc2,0x6c,0xcb,0xfc,0x1d]
vcmpge_oqsd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vcmpsd $30, -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: encoding: [0xc5,0xcb,0xc2,0x54,0xcb,0xfc,0x1e]
vcmpgt_oqsd -4(%rbx,%rcx,8), %xmm6, %xmm2
// CHECK: vcmpsd $31, -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: encoding: [0xc5,0x1b,0xc2,0x6c,0xcb,0xfc,0x1f]
vcmptrue_ussd -4(%rbx,%rcx,8), %xmm12, %xmm13
// CHECK: vucomiss %xmm11, %xmm12
// CHECK: encoding: [0xc4,0x41,0x78,0x2e,0xe3]
vucomiss %xmm11, %xmm12

View File

@ -287,6 +287,7 @@ static int X86TypeFromOpName(LiteralConstantEmitter *type,
IMM("i64i8imm");
IMM("i64i32imm");
IMM("SSECC");
IMM("AVXCC");
// all R, I, R, I, R
MEM("i8mem");

View File

@ -1115,6 +1115,7 @@ OperandType RecognizableInstr::typeFromString(const std::string &s,
TYPE("i16imm_pcrel", TYPE_REL16)
TYPE("i32imm_pcrel", TYPE_REL32)
TYPE("SSECC", TYPE_IMM3)
TYPE("AVXCC", TYPE_IMM5)
TYPE("brtarget", TYPE_RELv)
TYPE("uncondbrtarget", TYPE_RELv)
TYPE("brtarget8", TYPE_REL8)
@ -1156,6 +1157,7 @@ OperandEncoding RecognizableInstr::immediateEncodingFromString
ENCODING("i32i8imm", ENCODING_IB)
ENCODING("u32u8imm", ENCODING_IB)
ENCODING("SSECC", ENCODING_IB)
ENCODING("AVXCC", ENCODING_IB)
ENCODING("i16imm", ENCODING_Iv)
ENCODING("i16i8imm", ENCODING_IB)
ENCODING("i32imm", ENCODING_Iv)