Patchwork libffi fixes for m68k

login
register
mail settings
Submitter Andreas Schwab
Date Jan. 14, 2012, 8:42 p.m.
Message ID <m2zkdqm2xx.fsf@igel.home>
Download mbox | patch
Permalink /patch/136112/
State New
Headers show

Comments

Andreas Schwab - Jan. 14, 2012, 8:42 p.m.
The only way to detect compiling for a plain 68000 is the absense of
other defines since __mc68000__ is always defined.  Also, gcc defines
__HAVE_68881__, not __MC68881__.  The latter fixes failures of all tests
involving floating point return values.  Tested on m68k-linux.

Andreas.

2012-01-14  Andreas Schwab <schwab@linux-m68k.org>

        * src/m68k/sysv.S (ffi_call_SYSV): Properly test for plain
        mc68000.  Test for __HAVE_68881__ in addition to __MC68881__.

---
 libffi/src/m68k/sysv.S |   16 ++++++++--------
 1 files changed, 8 insertions(+), 8 deletions(-)

Patch

diff --git a/libffi/src/m68k/sysv.S b/libffi/src/m68k/sysv.S
index c782f51..dfdd864 100644
--- a/libffi/src/m68k/sysv.S
+++ b/libffi/src/m68k/sysv.S
@@ -1,6 +1,6 @@ 
 /* -----------------------------------------------------------------------
 	
-   sysv.S - Copyright (c) 1998 Andreas Schwab
+   sysv.S - Copyright (c) 1998, 2012 Andreas Schwab
 	    Copyright (c) 2008 Red Hat, Inc. 
    
    m68k Foreign Function Interface 
@@ -87,7 +87,7 @@  ffi_call_SYSV:
 
 	| If the return value pointer is NULL, assume no return value.
 	| NOTE: On the mc68000, tst on an address register is not supported.
-#if defined(__mc68000__) && !defined(__mcoldfire__)
+#if !defined(__mc68020__) && !defined(__mc68030__) && !defined(__mc68040__) && !defined(__mc68060__) && !defined(__mcoldfire__)
 	cmp.w	#0, %a1
 #else
 	tst.l	%a1
@@ -109,7 +109,7 @@  retlongint:
 retfloat:
 	btst	#2,%d2
 	jbeq	retdouble
-#if defined(__MC68881__)
+#if defined(__MC68881__) || defined(__HAVE_68881__)
 	fmove.s	%fp0,(%a1)
 #else
 	move.l	%d0,(%a1)
@@ -119,7 +119,7 @@  retfloat:
 retdouble:
 	btst	#3,%d2
 	jbeq	retlongdouble
-#if defined(__MC68881__)
+#if defined(__MC68881__) || defined(__HAVE_68881__)
 	fmove.d	%fp0,(%a1)
 #else
 	move.l	%d0,(%a1)+
@@ -130,7 +130,7 @@  retdouble:
 retlongdouble:
 	btst	#4,%d2
 	jbeq	retpointer
-#if defined(__MC68881__)
+#if defined(__MC68881__) || defined(__HAVE_68881__)
 	fmove.x	%fp0,(%a1)
 #else
 	move.l	%d0,(%a1)+
@@ -199,7 +199,7 @@  ffi_closure_SYSV:
 	move.l	(%a0),%d1
 	jra	.Lcls_epilogue
 .Lcls_ret_float:
-#if defined(__MC68881__)
+#if defined(__MC68881__) || defined(__HAVE_68881__)
 	fmove.s	(%a0),%fp0
 #else
 	move.l	(%a0),%d0
@@ -209,7 +209,7 @@  ffi_closure_SYSV:
 	lsr.l	#2,%d0
 	jne	1f
 	jcs	.Lcls_ret_ldouble
-#if defined(__MC68881__)
+#if defined(__MC68881__) || defined(__HAVE_68881__)
 	fmove.d	(%a0),%fp0
 #else
 	move.l	(%a0)+,%d0
@@ -217,7 +217,7 @@  ffi_closure_SYSV:
 #endif
 	jra	.Lcls_epilogue
 .Lcls_ret_ldouble:
-#if defined(__MC68881__)
+#if defined(__MC68881__) || defined(__HAVE_68881__)
 	fmove.x	(%a0),%fp0
 #else
 	move.l	(%a0)+,%d0