aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2006-04-14 23:32:40 +0000
committerEvan Cheng <evan.cheng@apple.com>2006-04-14 23:32:40 +0000
commit9ab1ac5e9908ea07f2e0f758bd9a67a75f82d33b (patch)
treec2098508e78383fc0d05b1b0e56a30f11e32377c
parentb097aa9353121cf6713408402022b8843a0f6acc (diff)
Some clean up
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27715 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/X86/X86InstrSSE.td159
1 files changed, 81 insertions, 78 deletions
diff --git a/lib/Target/X86/X86InstrSSE.td b/lib/Target/X86/X86InstrSSE.td
index 0540cd0935..430dfd9f86 100644
--- a/lib/Target/X86/X86InstrSSE.td
+++ b/lib/Target/X86/X86InstrSSE.td
@@ -736,7 +736,7 @@ def FsANDNPDrm : PDI<0x55, MRMSrcMem, (ops FR64:$dst, FR64:$src1, f128mem:$src2)
}
//===----------------------------------------------------------------------===//
-// SSE packed Instructions
+// SSE packed FP Instructions
//===----------------------------------------------------------------------===//
// Some 'special' instructions
@@ -780,17 +780,6 @@ def MOVUPDrm : PDI<0x10, MRMSrcMem, (ops VR128:$dst, f128mem:$src),
def MOVUPDmr : PDI<0x11, MRMDestMem, (ops f128mem:$dst, VR128:$src),
"movupd {$src, $dst|$dst, $src}",
[(int_x86_sse2_storeu_pd addr:$dst, VR128:$src)]>;
-def MOVDQUrm : I<0x6F, MRMSrcMem, (ops VR128:$dst, i128mem:$src),
- "movdqu {$src, $dst|$dst, $src}",
- [(set VR128:$dst, (int_x86_sse2_loadu_dq addr:$src))]>,
- XS, Requires<[HasSSE2]>;
-def MOVDQUmr : I<0x7F, MRMDestMem, (ops i128mem:$dst, VR128:$src),
- "movdqu {$src, $dst|$dst, $src}",
- [(int_x86_sse2_storeu_dq addr:$dst, VR128:$src)]>,
- XS, Requires<[HasSSE2]>;
-def LDDQUrm : S3DI<0xF0, MRMSrcMem, (ops VR128:$dst, i128mem:$src),
- "lddqu {$src, $dst|$dst, $src}",
- [(set VR128:$dst, (int_x86_sse3_ldu_dq addr:$src))]>;
let isTwoAddress = 1 in {
def MOVLPSrm : PSI<0x12, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f64mem:$src2),
@@ -1226,68 +1215,6 @@ def CMPPDrm : PDIi8<0xC2, MRMSrcMem,
"cmp${cc}pd {$src, $dst|$dst, $src}",
[(set VR128:$dst, (int_x86_sse2_cmp_pd VR128:$src1,
(load addr:$src), imm:$cc))]>;
-
-def PCMPEQBrr : PDI<0x74, MRMSrcReg,
- (ops VR128:$dst, VR128:$src1, VR128:$src2),
- "pcmpeqb {$src2, $dst|$dst, $src2}",
- [(set VR128:$dst, (int_x86_sse2_pcmpeq_b VR128:$src1,
- VR128:$src2))]>;
-def PCMPEQBrm : PDI<0x74, MRMSrcReg,
- (ops VR128:$dst, VR128:$src1, i128mem:$src2),
- "pcmpeqb {$src2, $dst|$dst, $src2}",
- [(set VR128:$dst, (int_x86_sse2_pcmpeq_b VR128:$src1,
- (bc_v16i8 (loadv2i64 addr:$src2))))]>;
-def PCMPEQWrr : PDI<0x75, MRMSrcReg,
- (ops VR128:$dst, VR128:$src1, VR128:$src2),
- "pcmpeqw {$src2, $dst|$dst, $src2}",
- [(set VR128:$dst, (int_x86_sse2_pcmpeq_w VR128:$src1,
- VR128:$src2))]>;
-def PCMPEQWrm : PDI<0x75, MRMSrcReg,
- (ops VR128:$dst, VR128:$src1, i128mem:$src2),
- "pcmpeqw {$src2, $dst|$dst, $src2}",
- [(set VR128:$dst, (int_x86_sse2_pcmpeq_w VR128:$src1,
- (bc_v8i16 (loadv2i64 addr:$src2))))]>;
-def PCMPEQDrr : PDI<0x76, MRMSrcReg,
- (ops VR128:$dst, VR128:$src1, VR128:$src2),
- "pcmpeqd {$src2, $dst|$dst, $src2}",
- [(set VR128:$dst, (int_x86_sse2_pcmpeq_d VR128:$src1,
- VR128:$src2))]>;
-def PCMPEQDrm : PDI<0x76, MRMSrcReg,
- (ops VR128:$dst, VR128:$src1, i128mem:$src2),
- "pcmpeqd {$src2, $dst|$dst, $src2}",
- [(set VR128:$dst, (int_x86_sse2_pcmpeq_d VR128:$src1,
- (bc_v4i32 (loadv2i64 addr:$src2))))]>;
-
-def PCMPGTBrr : PDI<0x64, MRMSrcReg,
- (ops VR128:$dst, VR128:$src1, VR128:$src2),
- "pcmpgtb {$src2, $dst|$dst, $src2}",
- [(set VR128:$dst, (int_x86_sse2_pcmpgt_b VR128:$src1,
- VR128:$src2))]>;
-def PCMPGTBrm : PDI<0x64, MRMSrcReg,
- (ops VR128:$dst, VR128:$src1, i128mem:$src2),
- "pcmpgtb {$src2, $dst|$dst, $src2}",
- [(set VR128:$dst, (int_x86_sse2_pcmpgt_b VR128:$src1,
- (bc_v16i8 (loadv2i64 addr:$src2))))]>;
-def PCMPGTWrr : PDI<0x65, MRMSrcReg,
- (ops VR128:$dst, VR128:$src1, VR128:$src2),
- "pcmpgtw {$src2, $dst|$dst, $src2}",
- [(set VR128:$dst, (int_x86_sse2_pcmpgt_w VR128:$src1,
- VR128:$src2))]>;
-def PCMPGTWrm : PDI<0x65, MRMSrcReg,
- (ops VR128:$dst, VR128:$src1, i128mem:$src2),
- "pcmpgtw {$src2, $dst|$dst, $src2}",
- [(set VR128:$dst, (int_x86_sse2_pcmpgt_w VR128:$src1,
- (bc_v8i16 (loadv2i64 addr:$src2))))]>;
-def PCMPGTDrr : PDI<0x66, MRMSrcReg,
- (ops VR128:$dst, VR128:$src1, VR128:$src2),
- "pcmpgtd {$src2, $dst|$dst, $src2}",
- [(set VR128:$dst, (int_x86_sse2_pcmpgt_d VR128:$src1,
- VR128:$src2))]>;
-def PCMPGTDrm : PDI<0x66, MRMSrcReg,
- (ops VR128:$dst, VR128:$src1, i128mem:$src2),
- "pcmpgtd {$src2, $dst|$dst, $src2}",
- [(set VR128:$dst, (int_x86_sse2_pcmpgt_d VR128:$src1,
- (bc_v4i32 (loadv2i64 addr:$src2))))]>;
}
// Shuffle and unpack instructions
@@ -1401,6 +1328,17 @@ def MOVDQArm : PDI<0x6F, MRMSrcMem, (ops VR128:$dst, i128mem:$src),
def MOVDQAmr : PDI<0x7F, MRMDestMem, (ops i128mem:$dst, VR128:$src),
"movdqa {$src, $dst|$dst, $src}",
[(store (v2i64 VR128:$src), addr:$dst)]>;
+def MOVDQUrm : I<0x6F, MRMSrcMem, (ops VR128:$dst, i128mem:$src),
+ "movdqu {$src, $dst|$dst, $src}",
+ [(set VR128:$dst, (int_x86_sse2_loadu_dq addr:$src))]>,
+ XS, Requires<[HasSSE2]>;
+def MOVDQUmr : I<0x7F, MRMDestMem, (ops i128mem:$dst, VR128:$src),
+ "movdqu {$src, $dst|$dst, $src}",
+ [(int_x86_sse2_storeu_dq addr:$dst, VR128:$src)]>,
+ XS, Requires<[HasSSE2]>;
+def LDDQUrm : S3DI<0xF0, MRMSrcMem, (ops VR128:$dst, i128mem:$src),
+ "lddqu {$src, $dst|$dst, $src}",
+ [(set VR128:$dst, (int_x86_sse3_ldu_dq addr:$src))]>;
// 128-bit Integer Arithmetic
let isTwoAddress = 1 in {
@@ -1800,6 +1738,71 @@ def PANDNrm : PDI<0xDF, MRMSrcMem, (ops VR128:$dst, VR128:$src1, i128mem:$src2),
(load addr:$src2))))]>;
}
+// SSE2 Integer comparison
+let isTwoAddress = 1 in {
+def PCMPEQBrr : PDI<0x74, MRMSrcReg,
+ (ops VR128:$dst, VR128:$src1, VR128:$src2),
+ "pcmpeqb {$src2, $dst|$dst, $src2}",
+ [(set VR128:$dst, (int_x86_sse2_pcmpeq_b VR128:$src1,
+ VR128:$src2))]>;
+def PCMPEQBrm : PDI<0x74, MRMSrcReg,
+ (ops VR128:$dst, VR128:$src1, i128mem:$src2),
+ "pcmpeqb {$src2, $dst|$dst, $src2}",
+ [(set VR128:$dst, (int_x86_sse2_pcmpeq_b VR128:$src1,
+ (bc_v16i8 (loadv2i64 addr:$src2))))]>;
+def PCMPEQWrr : PDI<0x75, MRMSrcReg,
+ (ops VR128:$dst, VR128:$src1, VR128:$src2),
+ "pcmpeqw {$src2, $dst|$dst, $src2}",
+ [(set VR128:$dst, (int_x86_sse2_pcmpeq_w VR128:$src1,
+ VR128:$src2))]>;
+def PCMPEQWrm : PDI<0x75, MRMSrcReg,
+ (ops VR128:$dst, VR128:$src1, i128mem:$src2),
+ "pcmpeqw {$src2, $dst|$dst, $src2}",
+ [(set VR128:$dst, (int_x86_sse2_pcmpeq_w VR128:$src1,
+ (bc_v8i16 (loadv2i64 addr:$src2))))]>;
+def PCMPEQDrr : PDI<0x76, MRMSrcReg,
+ (ops VR128:$dst, VR128:$src1, VR128:$src2),
+ "pcmpeqd {$src2, $dst|$dst, $src2}",
+ [(set VR128:$dst, (int_x86_sse2_pcmpeq_d VR128:$src1,
+ VR128:$src2))]>;
+def PCMPEQDrm : PDI<0x76, MRMSrcReg,
+ (ops VR128:$dst, VR128:$src1, i128mem:$src2),
+ "pcmpeqd {$src2, $dst|$dst, $src2}",
+ [(set VR128:$dst, (int_x86_sse2_pcmpeq_d VR128:$src1,
+ (bc_v4i32 (loadv2i64 addr:$src2))))]>;
+
+def PCMPGTBrr : PDI<0x64, MRMSrcReg,
+ (ops VR128:$dst, VR128:$src1, VR128:$src2),
+ "pcmpgtb {$src2, $dst|$dst, $src2}",
+ [(set VR128:$dst, (int_x86_sse2_pcmpgt_b VR128:$src1,
+ VR128:$src2))]>;
+def PCMPGTBrm : PDI<0x64, MRMSrcReg,
+ (ops VR128:$dst, VR128:$src1, i128mem:$src2),
+ "pcmpgtb {$src2, $dst|$dst, $src2}",
+ [(set VR128:$dst, (int_x86_sse2_pcmpgt_b VR128:$src1,
+ (bc_v16i8 (loadv2i64 addr:$src2))))]>;
+def PCMPGTWrr : PDI<0x65, MRMSrcReg,
+ (ops VR128:$dst, VR128:$src1, VR128:$src2),
+ "pcmpgtw {$src2, $dst|$dst, $src2}",
+ [(set VR128:$dst, (int_x86_sse2_pcmpgt_w VR128:$src1,
+ VR128:$src2))]>;
+def PCMPGTWrm : PDI<0x65, MRMSrcReg,
+ (ops VR128:$dst, VR128:$src1, i128mem:$src2),
+ "pcmpgtw {$src2, $dst|$dst, $src2}",
+ [(set VR128:$dst, (int_x86_sse2_pcmpgt_w VR128:$src1,
+ (bc_v8i16 (loadv2i64 addr:$src2))))]>;
+def PCMPGTDrr : PDI<0x66, MRMSrcReg,
+ (ops VR128:$dst, VR128:$src1, VR128:$src2),
+ "pcmpgtd {$src2, $dst|$dst, $src2}",
+ [(set VR128:$dst, (int_x86_sse2_pcmpgt_d VR128:$src1,
+ VR128:$src2))]>;
+def PCMPGTDrm : PDI<0x66, MRMSrcReg,
+ (ops VR128:$dst, VR128:$src1, i128mem:$src2),
+ "pcmpgtd {$src2, $dst|$dst, $src2}",
+ [(set VR128:$dst, (int_x86_sse2_pcmpgt_d VR128:$src1,
+ (bc_v4i32 (loadv2i64 addr:$src2))))]>;
+}
+
// Pack instructions
let isTwoAddress = 1 in {
def PACKSSWBrr : PDI<0x63, MRMSrcReg, (ops VR128:$dst, VR128:$src1,
@@ -1998,12 +2001,12 @@ def PUNPCKHQDQrm : PDI<0x6D, MRMSrcMem,
}
// Extract / Insert
-def PEXTRWr : PDIi8<0xC5, MRMSrcReg,
+def PEXTRWri : PDIi8<0xC5, MRMSrcReg,
(ops R32:$dst, VR128:$src1, i32i8imm:$src2),
"pextrw {$src2, $src1, $dst|$dst, $src1, $src2}",
[(set R32:$dst, (X86pextrw (v8i16 VR128:$src1),
(i32 imm:$src2)))]>;
-def PEXTRWm : PDIi8<0xC5, MRMSrcMem,
+def PEXTRWmi : PDIi8<0xC5, MRMSrcMem,
(ops R32:$dst, i128mem:$src1, i32i8imm:$src2),
"pextrw {$src2, $src1, $dst|$dst, $src1, $src2}",
[(set R32:$dst, (X86pextrw
@@ -2011,12 +2014,12 @@ def PEXTRWm : PDIi8<0xC5, MRMSrcMem,
(i32 imm:$src2)))]>;
let isTwoAddress = 1 in {
-def PINSRWr : PDIi8<0xC4, MRMSrcReg,
+def PINSRWrri : PDIi8<0xC4, MRMSrcReg,
(ops VR128:$dst, VR128:$src1, R32:$src2, i32i8imm:$src3),
"pinsrw {$src3, $src2, $dst|$dst, $src2, $src3}",
[(set VR128:$dst, (v8i16 (X86pinsrw (v8i16 VR128:$src1),
R32:$src2, (i32 imm:$src3))))]>;
-def PINSRWm : PDIi8<0xC4, MRMSrcMem,
+def PINSRWrmi : PDIi8<0xC4, MRMSrcMem,
(ops VR128:$dst, VR128:$src1, i16mem:$src2, i32i8imm:$src3),
"pinsrw {$src3, $src2, $dst|$dst, $src2, $src3}",
[(set VR128:$dst,