diff options
author | Bill Wendling <isanbard@gmail.com> | 2007-03-30 00:35:22 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2007-03-30 00:35:22 +0000 |
commit | e2501b303c70c5b1d49329b021739aa999cfafe8 (patch) | |
tree | 451a6abbaa64763d3be3c81c0db548b092fdd65d /lib | |
parent | 87c6c9abb3c0c19cb172a3cf3cc3de79a03b02f7 (diff) | |
download | external_llvm-e2501b303c70c5b1d49329b021739aa999cfafe8.zip external_llvm-e2501b303c70c5b1d49329b021739aa999cfafe8.tar.gz external_llvm-e2501b303c70c5b1d49329b021739aa999cfafe8.tar.bz2 |
Add MMX calling conventions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35489 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Target/X86/X86CallingConv.td | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/lib/Target/X86/X86CallingConv.td b/lib/Target/X86/X86CallingConv.td index d397bf3..d9a63c4 100644 --- a/lib/Target/X86/X86CallingConv.td +++ b/lib/Target/X86/X86CallingConv.td @@ -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<[ |