[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