[llvm-commits] [llvm] r113388 - /llvm/trunk/lib/Target/X86/X86InstrMMX.td

Dale Johannesen dalej at apple.com
Wed Sep 8 12:15:38 PDT 2010


Author: johannes
Date: Wed Sep  8 14:15:38 2010
New Revision: 113388

URL: http://llvm.org/viewvc/llvm-project?rev=113388&view=rev
Log:
Add intrinsic forms of mmx<->sse conversions.  Notes:
Omission of memory form of PI2PD is intentional; this
does not use an MMX register and does not put the chip
into MMX mode (PI2PS, oddly enough, does).
Operands of PI2PS follow the gcc builtin, not Intel.


Modified:
    llvm/trunk/lib/Target/X86/X86InstrMMX.td

Modified: llvm/trunk/lib/Target/X86/X86InstrMMX.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrMMX.td?rev=113388&r1=113387&r2=113388&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86InstrMMX.td (original)
+++ llvm/trunk/lib/Target/X86/X86InstrMMX.td Wed Sep  8 14:15:38 2010
@@ -471,6 +471,57 @@
                            "cvttps2pi\t{$src, $dst|$dst, $src}", []>;
 } // end neverHasSideEffects
 
+// Intrinsic versions.
+def MMX_CVTPD2PIirr : MMX2I<0x2D, MRMSrcReg, (outs VR64:$dst), (ins VR128:$src),
+                            "cvtpd2pi\t{$src, $dst|$dst, $src}", 
+                          [(set VR64:$dst, (int_x86_sse_cvtpd2pi VR128:$src))]>;
+def MMX_CVTPD2PIirm : MMX2I<0x2D, MRMSrcMem, (outs VR64:$dst),
+                            (ins f128mem:$src),
+                            "cvtpd2pi\t{$src, $dst|$dst, $src}",
+                          [(set VR64:$dst, 
+                              (int_x86_sse_cvtpd2pi 
+                                  (bitconvert (loadv2i64 addr:$src))))]>;
+def MMX_CVTPI2PDirr : MMX2I<0x2A, MRMSrcReg, (outs VR128:$dst), (ins VR64:$src),
+                            "cvtpi2pd\t{$src, $dst|$dst, $src}",
+                          [(set VR128:$dst, (int_x86_sse_cvtpi2pd VR64:$src))]>;
+let Constraints = "$src1 = $dst" in {
+def MMX_CVTPI2PSirr : MMXI<0x2A, MRMSrcReg, (outs VR128:$dst), 
+                                            (ins VR128:$src1, VR64:$src2),
+                           "cvtpi2ps\t{$src2, $dst|$dst, $src2}",
+                          [(set VR128:$dst, 
+                              (int_x86_sse_cvtpi2ps VR128:$src1, VR64:$src2))]>;
+def MMX_CVTPI2PSirm : MMXI<0x2A, MRMSrcMem, (outs VR128:$dst),
+                           (ins VR128:$src1, i64mem:$src2),
+                           "cvtpi2ps\t{$src2, $dst|$dst, $src2}",
+                          [(set VR128:$dst, 
+                              (int_x86_sse_cvtpi2ps VR128:$src1,
+                                  (bitconvert (load_mmx addr:$src2))))]>;
+}
+def MMX_CVTPS2PIirr : MMXI<0x2D, MRMSrcReg, (outs VR64:$dst), (ins VR128:$src),
+                           "cvtps2pi\t{$src, $dst|$dst, $src}",
+                          [(set VR64:$dst, (int_x86_sse_cvtps2pi VR128:$src))]>;
+def MMX_CVTPS2PIirm : MMXI<0x2D, MRMSrcMem, (outs VR64:$dst), (ins f64mem:$src),
+                           "cvtps2pi\t{$src, $dst|$dst, $src}",
+                          [(set VR64:$dst, 
+                              (int_x86_sse_cvtps2pi 
+                                  (bitconvert (load_mmx addr:$src))))]>;
+def MMX_CVTTPD2PIirr: MMX2I<0x2C, MRMSrcReg, (outs VR64:$dst), (ins VR128:$src),
+                            "cvttpd2pi\t{$src, $dst|$dst, $src}",
+                          [(set VR64:$dst, (int_x86_sse_cvtpd2pi VR128:$src))]>;
+def MMX_CVTTPD2PIirm: MMX2I<0x2C, MRMSrcMem, (outs VR64:$dst),
+                            (ins f128mem:$src),
+                            "cvttpd2pi\t{$src, $dst|$dst, $src}",
+                          [(set VR64:$dst, 
+                              (int_x86_sse_cvtpd2pi 
+                                  (bitconvert (loadv2i64 addr:$src))))]>;
+def MMX_CVTTPS2PIirr: MMXI<0x2C, MRMSrcReg, (outs VR64:$dst), (ins VR128:$src),
+                           "cvttps2pi\t{$src, $dst|$dst, $src}",
+                          [(set VR64:$dst, (int_x86_sse_cvtps2pi VR128:$src))]>;
+def MMX_CVTTPS2PIirm: MMXI<0x2C, MRMSrcMem, (outs VR64:$dst), (ins f64mem:$src),
+                           "cvttps2pi\t{$src, $dst|$dst, $src}",
+                          [(set VR64:$dst, 
+                              (int_x86_sse_cvtpd2pi
+                                  (bitconvert (load_mmx addr:$src))))]>;
 
 // Extract / Insert
 def MMX_X86pinsrw : SDNode<"X86ISD::MMX_PINSRW",





More information about the llvm-commits mailing list