mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-06 09:44:39 +00:00
Add AVX SHUF{PS,PD}{rr,rm} instructions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106672 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
50b9efc2a8
commit
7dbfd07e32
@ -1394,33 +1394,37 @@ def : Pat<(v2i64 (X86cmppd (v2f64 VR128:$src1), (memop addr:$src2), imm:$cc)),
|
||||
(CMPPDrmi VR128:$src1, addr:$src2, imm:$cc)>;
|
||||
|
||||
// Shuffle and unpack instructions
|
||||
multiclass sse12_shuffle<RegisterClass RC, X86MemOperand x86memop,
|
||||
ValueType vt, string asm, PatFrag mem_frag,
|
||||
Domain d, bit IsConvertibleToThreeAddress = 0> {
|
||||
def rmi : PIi8<0xC6, MRMSrcMem, (outs VR128:$dst),
|
||||
(ins VR128:$src1, f128mem:$src2, i8imm:$src3), asm,
|
||||
[(set VR128:$dst, (vt (shufp:$src3
|
||||
VR128:$src1, (mem_frag addr:$src2))))], d>;
|
||||
let isConvertibleToThreeAddress = IsConvertibleToThreeAddress in
|
||||
def rri : PIi8<0xC6, MRMSrcReg, (outs VR128:$dst),
|
||||
(ins VR128:$src1, VR128:$src2, i8imm:$src3), asm,
|
||||
[(set VR128:$dst,
|
||||
(vt (shufp:$src3 VR128:$src1, VR128:$src2)))], d>;
|
||||
}
|
||||
|
||||
let Constraints = "$src1 = $dst" in {
|
||||
let isConvertibleToThreeAddress = 1 in // Convert to pshufd
|
||||
def SHUFPSrri : PSIi8<0xC6, MRMSrcReg,
|
||||
(outs VR128:$dst), (ins VR128:$src1,
|
||||
VR128:$src2, i8imm:$src3),
|
||||
"shufps\t{$src3, $src2, $dst|$dst, $src2, $src3}",
|
||||
[(set VR128:$dst,
|
||||
(v4f32 (shufp:$src3 VR128:$src1, VR128:$src2)))]>;
|
||||
def SHUFPSrmi : PSIi8<0xC6, MRMSrcMem,
|
||||
(outs VR128:$dst), (ins VR128:$src1,
|
||||
f128mem:$src2, i8imm:$src3),
|
||||
"shufps\t{$src3, $src2, $dst|$dst, $src2, $src3}",
|
||||
[(set VR128:$dst,
|
||||
(v4f32 (shufp:$src3
|
||||
VR128:$src1, (memopv4f32 addr:$src2))))]>;
|
||||
def SHUFPDrri : PDIi8<0xC6, MRMSrcReg,
|
||||
(outs VR128:$dst), (ins VR128:$src1, VR128:$src2, i8imm:$src3),
|
||||
"shufpd\t{$src3, $src2, $dst|$dst, $src2, $src3}",
|
||||
[(set VR128:$dst,
|
||||
(v2f64 (shufp:$src3 VR128:$src1, VR128:$src2)))]>;
|
||||
def SHUFPDrmi : PDIi8<0xC6, MRMSrcMem,
|
||||
(outs VR128:$dst), (ins VR128:$src1,
|
||||
f128mem:$src2, i8imm:$src3),
|
||||
"shufpd\t{$src3, $src2, $dst|$dst, $src2, $src3}",
|
||||
[(set VR128:$dst,
|
||||
(v2f64 (shufp:$src3
|
||||
VR128:$src1, (memopv2f64 addr:$src2))))]>;
|
||||
defm SHUFPS : sse12_shuffle<VR128, f128mem, v4f32,
|
||||
"shufps\t{$src3, $src2, $dst|$dst, $src2, $src3}",
|
||||
memopv4f32, SSEPackedSingle, 1 /* cvt to pshufd */>,
|
||||
TB;
|
||||
defm SHUFPD : sse12_shuffle<VR128, f128mem, v2f64,
|
||||
"shufpd\t{$src3, $src2, $dst|$dst, $src2, $src3}",
|
||||
memopv2f64, SSEPackedDouble>, TB, OpSize;
|
||||
|
||||
let Constraints = "", isAsmParserOnly = 1 in {
|
||||
defm VSHUFPS : sse12_shuffle<VR128, f128mem, v4f32,
|
||||
"shufps\t{$src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3}",
|
||||
memopv4f32, SSEPackedSingle>, VEX_4V;
|
||||
defm VSHUFPD : sse12_shuffle<VR128, f128mem, v2f64,
|
||||
"shufpd\t{$src3, $src2, $src1, $dst|$dst, $src2, $src2, $src3}",
|
||||
memopv2f64, SSEPackedDouble>, OpSize, VEX_4V;
|
||||
}
|
||||
|
||||
let AddedComplexity = 10 in {
|
||||
let Constraints = "", isAsmParserOnly = 1 in {
|
||||
|
@ -10374,3 +10374,19 @@
|
||||
// CHECK: encoding: [0xc5,0xc9,0xc2,0xc8,0x07]
|
||||
vcmppd $7, %xmm0, %xmm6, %xmm1
|
||||
|
||||
// CHECK: vshufps $8, %xmm1, %xmm2, %xmm3
|
||||
// CHECK: encoding: [0xc5,0xe8,0xc6,0xd9,0x08]
|
||||
vshufps $8, %xmm1, %xmm2, %xmm3
|
||||
|
||||
// CHECK: vshufps $8, -4(%ebx,%ecx,8), %xmm2, %xmm3
|
||||
// CHECK: encoding: [0xc5,0xe8,0xc6,0x5c,0xcb,0xfc,0x08]
|
||||
vshufps $8, -4(%ebx,%ecx,8), %xmm2, %xmm3
|
||||
|
||||
// CHECK: vshufpd $8, %xmm1, %xmm2, %xmm3
|
||||
// CHECK: encoding: [0xc5,0xe9,0xc6,0xd9,0x08]
|
||||
vshufpd $8, %xmm1, %xmm2, %xmm3
|
||||
|
||||
// CHECK: vshufpd $8, -4(%ebx,%ecx,8), %xmm2, %xmm3
|
||||
// CHECK: encoding: [0xc5,0xe9,0xc6,0x5c,0xcb,0xfc,0x08]
|
||||
vshufpd $8, -4(%ebx,%ecx,8), %xmm2, %xmm3
|
||||
|
||||
|
@ -438,3 +438,19 @@ pshufb CPI1_0(%rip), %xmm1
|
||||
// CHECK: encoding: [0xc4,0x41,0x19,0xc2,0xfa,0x07]
|
||||
vcmppd $7, %xmm10, %xmm12, %xmm15
|
||||
|
||||
// CHECK: vshufps $8, %xmm11, %xmm12, %xmm13
|
||||
// CHECK: encoding: [0xc4,0x41,0x18,0xc6,0xeb,0x08]
|
||||
vshufps $8, %xmm11, %xmm12, %xmm13
|
||||
|
||||
// CHECK: vshufps $8, -4(%rbx,%rcx,8), %xmm12, %xmm13
|
||||
// CHECK: encoding: [0xc5,0x18,0xc6,0x6c,0xcb,0xfc,0x08]
|
||||
vshufps $8, -4(%rbx,%rcx,8), %xmm12, %xmm13
|
||||
|
||||
// CHECK: vshufpd $8, %xmm11, %xmm12, %xmm13
|
||||
// CHECK: encoding: [0xc4,0x41,0x19,0xc6,0xeb,0x08]
|
||||
vshufpd $8, %xmm11, %xmm12, %xmm13
|
||||
|
||||
// CHECK: vshufpd $8, -4(%rbx,%rcx,8), %xmm12, %xmm13
|
||||
// CHECK: encoding: [0xc5,0x19,0xc6,0x6c,0xcb,0xfc,0x08]
|
||||
vshufpd $8, -4(%rbx,%rcx,8), %xmm12, %xmm13
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user