Commit 8a286f570ccd41db81f74ea7f248da62241d898a

Anthony Green 2013-03-16T08:01:19

Fix for m68000 systems

diff --git a/ChangeLog b/ChangeLog
index 525e518..b4273de 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2013-03-16  Alan Hourihane  <alanh@fairlite.co.uk>
+
+	* src/m68k/sysv.S (epilogue): Don't user extb instruction on
+	m680000 machines.
+
 2013-03-16  Alex Gaynor <alex.gaynor@gmail.com>
 
 	* src/x86/ffi.c (ffi_prep_cif_machdep): Always align stack.
diff --git a/README b/README
index 250c515..fd5e6b4 100644
--- a/README
+++ b/README
@@ -168,6 +168,7 @@ See the ChangeLog files for details.
 	Add Meta support.
 	Add missing Moxie bits.
 	Fix stack alignment bug on 32-bit x86.
+	Build fix for m68000 targets.
 
 3.0.12 Feb-11-13
         Add Moxie support.
diff --git a/src/m68k/sysv.S b/src/m68k/sysv.S
index 9504c6a..ec2b14f 100644
--- a/src/m68k/sysv.S
+++ b/src/m68k/sysv.S
@@ -176,7 +176,13 @@ retstruct2:
 retsint8:
 	btst	#8,%d2
 	jbeq	retsint16
+	| NOTE: On the mc68000, extb is not supported. 8->16, then 16->32.
+#if !defined(__mc68020__) && !defined(__mc68030__) && !defined(__mc68040__) && !defined(__mc68060__) && !defined(__mcoldfire__)
+	ext.w	%d0
+	ext.l	%d0
+#else
 	extb.l	%d0
+#endif
 	move.l	%d0,(%a1)
 	jbra	epilogue
 
@@ -279,7 +285,13 @@ CALLFUNC(ffi_closure_SYSV):
 	jra	.Lcls_epilogue
 .Lcls_ret_sint8:
 	move.l	(%a0),%d0
+	| NOTE: On the mc68000, extb is not supported. 8->16, then 16->32.
+#if !defined(__mc68020__) && !defined(__mc68030__) && !defined(__mc68040__) && !defined(__mc68060__) && !defined(__mcoldfire__)
+	ext.w	%d0
+	ext.l	%d0
+#else
 	extb.l	%d0
+#endif
 	jra	.Lcls_epilogue
 1:
 	| CIF_FLAGS_SINT16