[llvm-commits] [llvm-gcc-4.2] r52666 - in /llvm-gcc-4.2/trunk/gcc/config/i386: llvm-i386-target.h llvm-i386.cpp

Dale Johannesen dalej at apple.com
Mon Jun 23 20:47:15 PDT 2008


Author: johannes
Date: Mon Jun 23 22:47:15 2008
New Revision: 52666

URL: http://llvm.org/viewvc/llvm-project?rev=52666&view=rev
Log:
X86-64 ABI:  return 64-bit (MMX) vectors in the right
place.  Changed for darwin only, but probably applicable
to Linux but not Win64; somebody on those targets 
should look.


Modified:
    llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h
    llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp

Modified: llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h?rev=52666&r1=52665&r2=52666&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h (original)
+++ llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h Mon Jun 23 22:47:15 2008
@@ -146,7 +146,9 @@
 
 /* The MMX vector v1i64 is returned in EAX and EDX on Darwin.  Communicate
     this by returning i64 here.  Likewise, (generic) vectors such as v2i16
-    are returned in EAX.  */
+    are returned in EAX.  
+    On Darwin x86-64, MMX vectors are returned in XMM0.  Communicate this by
+    returning f64.  */
 #define LLVM_SHOULD_RETURN_VECTOR_AS_SCALAR(X,isBuiltin)\
   llvm_x86_should_return_vector_as_scalar((X), (isBuiltin))
 

Modified: llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp?rev=52666&r1=52665&r2=52666&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp Mon Jun 23 22:47:15 2008
@@ -862,7 +862,10 @@
 
 /* The MMX vector v1i64 is returned in EAX and EDX on Darwin.  Communicate
     this by returning i64 here.  Likewise, (generic) vectors such as v2i16
-    are returned in EAX.  */
+    are returned in EAX.  
+   On Darwin x86-64, v1i64 is returned in RAX and other MMX vectors are 
+    returned in XMM0.  Judging from comments, this would not be right for
+    Win64.  Don't know about Linux.  */
 tree llvm_x86_should_return_vector_as_scalar(tree type, bool isBuiltin) {
   if (TARGET_MACHO &&
       !isBuiltin &&
@@ -872,6 +875,8 @@
     if (TREE_INT_CST_LOW(TYPE_SIZE(type))==64 &&
         TYPE_VECTOR_SUBPARTS(type)==1)
       return uint64_type_node;
+    if (TARGET_64BIT && TREE_INT_CST_LOW(TYPE_SIZE(type))==64)
+      return double_type_node;
     if (TREE_INT_CST_LOW(TYPE_SIZE(type))==32)
       return uint32_type_node;
   }





More information about the llvm-commits mailing list