Commit d9dd417b09566af55b7b3000bb53ccaf2e1d6c92

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/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