[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td
Evan Cheng
evan.cheng at apple.com
Tue Apr 4 14:49:52 PDT 2006
Changes in directory llvm/lib/Target/X86:
X86InstrSSE.td updated: 1.60 -> 1.61
---
Log message:
Added pslldq and psrldq.
---
Diffs of the changes: (+18 -0)
X86InstrSSE.td | 18 ++++++++++++++++++
1 files changed, 18 insertions(+)
Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.60 llvm/lib/Target/X86/X86InstrSSE.td:1.61
--- llvm/lib/Target/X86/X86InstrSSE.td:1.60 Tue Apr 4 14:12:30 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td Tue Apr 4 16:49:39 2006
@@ -57,6 +57,11 @@
return N->isExactlyValue(+0.0);
}]>;
+def PSxLDQ_imm : SDNodeXForm<imm, [{
+ // Transformation function: imm >> 3
+ return getI32Imm(N->getValue() >> 3);
+}]>;
+
// SHUFFLE_get_shuf_imm xform function: convert vector_shuffle mask to PSHUF*,
// SHUFP* etc. imm.
def SHUFFLE_get_shuf_imm : SDNodeXForm<build_vector, [{
@@ -1159,6 +1164,13 @@
(load addr:$src2))))]>;
}
+let isTwoAddress = 1 in {
+def PSLLDQri : PDIi8<0x73, MRM7r, (ops VR128:$dst, VR128:$src1, i32i8imm:$src2),
+ "pslldq {$src2, $dst|$dst, $src2}", []>;
+def PSRLDQri : PDIi8<0x73, MRM7r, (ops VR128:$dst, VR128:$src1, i32i8imm:$src2),
+ "psrldq {$src2, $dst|$dst, $src2}", []>;
+}
+
// Logical
let isTwoAddress = 1 in {
let isCommutable = 1 in {
@@ -1721,6 +1733,12 @@
(v4f32 (PSHUFLWmi addr:$src1, PSHUFLW_fp_shuffle_mask:$sm))>,
Requires<[HasSSE2]>;
+// 128-bit logical shifts
+def : Pat<(int_x86_sse2_psll_dq VR128:$src1, imm:$src2),
+ (v2i64 (PSLLDQri VR128:$src1, (PSxLDQ_imm imm:$src2)))>;
+def : Pat<(int_x86_sse2_psrl_dq VR128:$src1, imm:$src2),
+ (v2i64 (PSRLDQri VR128:$src1, (PSxLDQ_imm imm:$src2)))>;
+
// Logical ops
def : Pat<(and (bc_v4i32 (v4f32 VR128:$src1)), (loadv4i32 addr:$src2)),
(ANDPSrm VR128:$src1, addr:$src2)>;
More information about the llvm-commits
mailing list