Commit 16d56c51aded374730920a4acde76ff3d2860ae1

Alan Modra 2013-11-18T06:36:03

An #endif in the wrong place would cause compile failure on powerpcle. Using bl instead of b doesn't cause runtime failures as you might think, but does mess the processor branch prediction.

diff --git a/ChangeLog b/ChangeLog
index 08c1dd8..3c5854c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2013-11-16  Alan Modra  <amodra@gmail.com>
 
+	* src/powerpc/ppc_closure.S: Move errant #endif to where it belongs.
+	Don't bl .Luint128.
+
+2013-11-16  Alan Modra  <amodra@gmail.com>
+
 	* src/powerpc/ffi.c (ffi_prep_cif_machdep_core): Use #if _CALL_ELF
 	test to select parameter save sizing for ELFv2 vs. ELFv1.
 	* src/powerpc/ffitarget.h (FFI_V2_TYPE_FLOAT_HOMOG,
diff --git a/src/powerpc/ppc_closure.S b/src/powerpc/ppc_closure.S
index 3eefe7e..1f72340 100644
--- a/src/powerpc/ppc_closure.S
+++ b/src/powerpc/ppc_closure.S
@@ -238,7 +238,7 @@ ENTRY(ffi_closure_SYSV)
 	lwz %r3,112+0(%r1)
 	lwz %r4,112+4(%r1)
 	lwz %r5,112+8(%r1)
-	bl .Luint128
+	b .Luint128
 
 # The return types below are only used when the ABI type is FFI_SYSV.
 # case FFI_SYSV_TYPE_SMALL_STRUCT + 1. One byte struct.
@@ -320,13 +320,13 @@ ENTRY(ffi_closure_SYSV)
 	mtlr %r0
 	addi %r1,%r1,144
 	blr
+#endif
 
 .Luint128:
 	lwz %r6,112+12(%r1)
 	mtlr %r0
 	addi %r1,%r1,144
 	blr
-#endif
 	
 END(ffi_closure_SYSV)