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)>; _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits