Add MMX calling conventions.
authorBill Wendling <isanbard@gmail.com>
Fri, 30 Mar 2007 00:35:22 +0000 (00:35 +0000)
committerBill Wendling <isanbard@gmail.com>
Fri, 30 Mar 2007 00:35:22 +0000 (00:35 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35489 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86CallingConv.td

index d397bf3369f1f665336b42ecf5fb2cb5374da7b1..d9a63c4ecd3cdf8d2b4e4481bec4bb37f1096ec8 100644 (file)
@@ -30,7 +30,11 @@ def RetCC_X86Common : CallingConv<[
   
   // Vector types are always returned in XMM0.  If the target doesn't have XMM0,
   // it won't have vector types.
-  CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64], CCAssignToReg<[XMM0]>>
+  CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64], CCAssignToReg<[XMM0]>>,
+
+  // MMX vector types are always returned in MM0. If the target doesn't have
+  // MM0, it doesn't support these vector types.
+  CCIfType<[v8i8, v4i16, v2i32, v1i64], CCAssignToReg<[MM0]>>
 ]>;
 
 // X86-32 C return-value convention.
@@ -102,8 +106,10 @@ def CC_X86_64_C : CallingConv<[
   CCIfType<[i32, i64, f32, f64], CCAssignToStack<8, 8>>,
   
   // Vectors get 16-byte stack slots that are 16-byte aligned.
-  CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64],
-              CCAssignToStack<16, 16>>
+  CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64], CCAssignToStack<16, 16>>,
+
+  // __m64 vectors get 8-byte stack slots that are 8-byte aligned.
+  CCIfType<[v8i8, v4i16, v2i32, v1i64], CCAssignToStack<8, 8>>
 ]>;
 
 
@@ -127,7 +133,11 @@ def CC_X86_32_Common : CallingConv<[
               CCAssignToReg<[XMM0, XMM1, XMM2, XMM3]>>,
 
   // Other vectors get 16-byte stack slots that are 16-byte aligned.
-  CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64], CCAssignToStack<16, 16>>
+  CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64], CCAssignToStack<16, 16>>,
+
+  // __m64 vectors get 8-byte stack slots that are 8-byte aligned. They are
+  // passed in the parameter area.
+  CCIfType<[v8i8, v4i16, v2i32, v1i64], CCAssignToStack<8, 8>>
 ]>;
 
 def CC_X86_32_C : CallingConv<[