This is the mail archive of the libc-ports@sources.redhat.com mailing list for the libc-ports project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Miscellaneous ColdFire patches


On Fri, 28 Jun 2013, Andreas Schwab wrote:

> There should be no need to even allocate the stack space.

Here is a revised patch which avoids the stack allocation in this
case, using new macros FMOVE and FPSPACE to abstract the differences
between classic m68k, ColdFire with FPU, and ColdFire without FPU.
Again, completely untested.

2013-06-28  Joseph Myers  <joseph@codesourcery.com>

	* sysdeps/m68k/dl-trampoline.S (FMOVE): Define conditional on
	[__mcoldfire__] and [__mcffpu__].
	(FPSPACE): Likewise.
	(_dl_runtime_profile): Save and restore %fp0 with FMOVE, only if
	[FMOVE].  Use FPSPACE in stack offsets.

diff --git a/ports/sysdeps/m68k/dl-trampoline.S b/ports/sysdeps/m68k/dl-trampoline.S
index 5aeafc7..a4caa67 100644
--- a/ports/sysdeps/m68k/dl-trampoline.S
+++ b/ports/sysdeps/m68k/dl-trampoline.S
@@ -18,6 +18,16 @@
 
 #include <sysdep.h>
 
+#if !defined (__mcoldfire__)
+# define FMOVE		fmove.x
+# define FPSPACE	12
+#elif defined (__mcffpu__)
+# define FMOVE		fmove.d
+# define FPSPACE	8
+#else
+# define FPSPACE	0
+#endif
+
 	.text
 	.globl _dl_runtime_resolve
 	.type _dl_runtime_resolve, @function
@@ -174,12 +184,9 @@ _dl_runtime_profile:
 	    +4      %a1
 	   %sp      %a0
 	*/
-#ifdef __mcoldfire__
-	fmove.d %fp0, -(%sp)
-	cfi_adjust_cfa_offset (8)
-#else
-	fmove.x %fp0, -(%sp)
-	cfi_adjust_cfa_offset (12)
+#ifdef FMOVE
+	FMOVE %fp0, -(%sp)
+	cfi_adjust_cfa_offset (FPSPACE)
 #endif
 	move.l %a0, -(%sp)
 	cfi_adjust_cfa_offset (4)
@@ -189,21 +196,12 @@ _dl_runtime_profile:
 	cfi_adjust_cfa_offset (4)
 	pea (%sp)
 	cfi_adjust_cfa_offset (4)
-#ifdef __mcoldfire__
-	pea 24(%sp)
-	cfi_adjust_cfa_offset (4)
-	move.l 40(%sp), -(%sp)
+	pea (16+FPSPACE)(%sp)
 	cfi_adjust_cfa_offset (4)
-	move.l 40(%sp), -(%sp)
+	move.l (32+FPSPACE)(%sp), -(%sp)
 	cfi_adjust_cfa_offset (4)
-#else
-	pea 28(%sp)
-	cfi_adjust_cfa_offset (4)
-	move.l 44(%sp), -(%sp)
+	move.l (32+FPSPACE)(%sp), -(%sp)
 	cfi_adjust_cfa_offset (4)
-	move.l 44(%sp), -(%sp)
-	cfi_adjust_cfa_offset (4)
-#endif
 	jbsr _dl_call_pltexit
 	lea 16(%sp), %sp
 	cfi_adjust_cfa_offset (-16)
@@ -213,12 +211,9 @@ _dl_runtime_profile:
 	cfi_adjust_cfa_offset (-4)
 	move.l (%sp)+, %a0
 	cfi_adjust_cfa_offset (-4)
-#ifdef __mcoldfire__
-	fmove.d (%sp)+, %fp0
-	cfi_adjust_cfa_offset (-8)
-#else
-	fmove.x (%sp)+, %fp0
-	cfi_adjust_cfa_offset (-12)
+#ifdef FMOVE
+	FMOVE (%sp)+, %fp0
+	cfi_adjust_cfa_offset (-FPSPACE)
 #endif
 	lea 20(%sp), %sp
 	cfi_adjust_cfa_offset (-20)


-- 
Joseph S. Myers
joseph@codesourcery.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]