This is the mail archive of the
libc-ports@sources.redhat.com
mailing list for the libc-ports project.
Re: Miscellaneous ColdFire patches
- From: "Joseph S. Myers" <joseph at codesourcery dot com>
- To: Andreas Schwab <schwab at linux-m68k dot org>
- Cc: <libc-ports at sourceware dot org>
- Date: Fri, 28 Jun 2013 20:15:29 +0000
- Subject: Re: Miscellaneous ColdFire patches
- References: <Pine dot LNX dot 4 dot 64 dot 1306281549400 dot 27363 at digraph dot polyomino dot org dot uk> <87obaqgjlq dot fsf at igel dot home>
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