summaryrefslogtreecommitdiff
path: root/libc/ports/sysdeps/m68k
diff options
context:
space:
mode:
Diffstat (limited to 'libc/ports/sysdeps/m68k')
-rw-r--r--libc/ports/sysdeps/m68k/dl-trampoline.S54
-rw-r--r--libc/ports/sysdeps/m68k/fpu_control.h64
-rw-r--r--libc/ports/sysdeps/m68k/sysdep.h4
3 files changed, 54 insertions, 68 deletions
diff --git a/libc/ports/sysdeps/m68k/dl-trampoline.S b/libc/ports/sysdeps/m68k/dl-trampoline.S
index 16f20dcad..a4caa67a8 100644
--- a/libc/ports/sysdeps/m68k/dl-trampoline.S
+++ b/libc/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,16 +184,9 @@ _dl_runtime_profile:
+4 %a1
%sp %a0
*/
-#if !defined (__mcoldfire__)
- fmove.x %fp0, -(%sp)
- cfi_adjust_cfa_offset (12)
-#elif defined (__mcffpu__)
- fmove.d %fp0, -(%sp)
- cfi_adjust_cfa_offset (8)
-#else
- clr.l -(%sp)
- clr.l -(%sp)
- cfi_adjust_cfa_offset (8)
+#ifdef FMOVE
+ FMOVE %fp0, -(%sp)
+ cfi_adjust_cfa_offset (FPSPACE)
#endif
move.l %a0, -(%sp)
cfi_adjust_cfa_offset (4)
@@ -193,21 +196,12 @@ _dl_runtime_profile:
cfi_adjust_cfa_offset (4)
pea (%sp)
cfi_adjust_cfa_offset (4)
-#ifdef __mcoldfire__
- pea 24(%sp)
+ pea (16+FPSPACE)(%sp)
cfi_adjust_cfa_offset (4)
- move.l 40(%sp), -(%sp)
- cfi_adjust_cfa_offset (4)
- move.l 40(%sp), -(%sp)
- cfi_adjust_cfa_offset (4)
-#else
- pea 28(%sp)
+ move.l (32+FPSPACE)(%sp), -(%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)
@@ -217,20 +211,12 @@ _dl_runtime_profile:
cfi_adjust_cfa_offset (-4)
move.l (%sp)+, %a0
cfi_adjust_cfa_offset (-4)
-#if !defined (__mcoldfire__)
- fmove.x (%sp)+, %fp0
- cfi_adjust_cfa_offset (-12)
- lea 20(%sp), %sp
- cfi_adjust_cfa_offset (-20)
-#elif defined (__mcffpu__)
- fmove.l (%sp)+, %fp0
- cfi_adjust_cfa_offset (-8)
+#ifdef FMOVE
+ FMOVE (%sp)+, %fp0
+ cfi_adjust_cfa_offset (-FPSPACE)
+#endif
lea 20(%sp), %sp
cfi_adjust_cfa_offset (-20)
-#else
- lea 28(%sp), %sp
- cfi_adjust_cfa_offset (-28)
-#endif
rts
cfi_endproc
.size _dl_runtime_profile, . - _dl_runtime_profile
diff --git a/libc/ports/sysdeps/m68k/fpu_control.h b/libc/ports/sysdeps/m68k/fpu_control.h
index 71b9c3002..7b22a95c7 100644
--- a/libc/ports/sysdeps/m68k/fpu_control.h
+++ b/libc/ports/sysdeps/m68k/fpu_control.h
@@ -55,58 +55,58 @@
#if defined (__mcoldfire__) && !defined (__mcffpu__)
-#define _FPU_RESERVED 0xffffffff
-#define _FPU_DEFAULT 0x00000000
-#define _FPU_GETCW(cw) ((cw) = 0)
-#define _FPU_SETCW(cw) ((void)(cw))
+# define _FPU_RESERVED 0xffffffff
+# define _FPU_DEFAULT 0x00000000
+# define _FPU_GETCW(cw) ((cw) = 0)
+# define _FPU_SETCW(cw) ((void) (cw))
#else
/* masking of interrupts */
-#define _FPU_MASK_BSUN 0x8000
-#define _FPU_MASK_SNAN 0x4000
-#define _FPU_MASK_OPERR 0x2000
-#define _FPU_MASK_OVFL 0x1000
-#define _FPU_MASK_UNFL 0x0800
-#define _FPU_MASK_DZ 0x0400
-#define _FPU_MASK_INEX1 0x0200
-#define _FPU_MASK_INEX2 0x0100
+# define _FPU_MASK_BSUN 0x8000
+# define _FPU_MASK_SNAN 0x4000
+# define _FPU_MASK_OPERR 0x2000
+# define _FPU_MASK_OVFL 0x1000
+# define _FPU_MASK_UNFL 0x0800
+# define _FPU_MASK_DZ 0x0400
+# define _FPU_MASK_INEX1 0x0200
+# define _FPU_MASK_INEX2 0x0100
/* precision control */
-#ifdef __mcoldfire__
-#define _FPU_DOUBLE 0x00
-#else
-#define _FPU_EXTENDED 0x00 /* RECOMMENDED */
-#define _FPU_DOUBLE 0x80
-#endif
-#define _FPU_SINGLE 0x40 /* DO NOT USE */
+# ifdef __mcoldfire__
+# define _FPU_DOUBLE 0x00
+# else
+# define _FPU_EXTENDED 0x00 /* RECOMMENDED */
+# define _FPU_DOUBLE 0x80
+# endif
+# define _FPU_SINGLE 0x40 /* DO NOT USE */
/* rounding control */
-#define _FPU_RC_NEAREST 0x00 /* RECOMMENDED */
-#define _FPU_RC_ZERO 0x10
-#define _FPU_RC_DOWN 0x20
-#define _FPU_RC_UP 0x30
+# define _FPU_RC_NEAREST 0x00 /* RECOMMENDED */
+# define _FPU_RC_ZERO 0x10
+# define _FPU_RC_DOWN 0x20
+# define _FPU_RC_UP 0x30
-#ifdef __mcoldfire__
-#define _FPU_RESERVED 0xFFFF800F
-#else
-#define _FPU_RESERVED 0xFFFF000F /* Reserved bits in fpucr */
-#endif
+# ifdef __mcoldfire__
+# define _FPU_RESERVED 0xFFFF800F
+# else
+# define _FPU_RESERVED 0xFFFF000F /* Reserved bits in fpucr */
+# endif
/* Now two recommended fpucr */
/* The fdlibm code requires no interrupts for exceptions. Don't
change the rounding mode, it would break long double I/O! */
-#define _FPU_DEFAULT 0x00000000
+# define _FPU_DEFAULT 0x00000000
/* IEEE: same as above, but exceptions. We must make it non-zero so
that __setfpucw works. This bit will be ignored. */
-#define _FPU_IEEE 0x00000001
+# define _FPU_IEEE 0x00000001
/* Macros for accessing the hardware control word. */
-#define _FPU_GETCW(cw) __asm__ ("fmove%.l %!, %0" : "=dm" (cw))
-#define _FPU_SETCW(cw) __asm__ volatile ("fmove%.l %0, %!" : : "dm" (cw))
+# define _FPU_GETCW(cw) __asm__ ("fmove%.l %!, %0" : "=dm" (cw))
+# define _FPU_SETCW(cw) __asm__ volatile ("fmove%.l %0, %!" : : "dm" (cw))
#endif
/* Type of the control word. */
diff --git a/libc/ports/sysdeps/m68k/sysdep.h b/libc/ports/sysdeps/m68k/sysdep.h
index cd34dd836..f8ad70e01 100644
--- a/libc/ports/sysdeps/m68k/sysdep.h
+++ b/libc/ports/sysdeps/m68k/sysdep.h
@@ -45,11 +45,11 @@
to locate our caller, so push one just for its benefit. */
# define CALL_MCOUNT \
move.l %fp, -(%sp); \
- cfi_adjust_cfa_offset (4); cfi_rel_offset (%fp, 0); \
+ cfi_adjust_cfa_offset (4); cfi_rel_offset (%a6, 0); \
move.l %sp, %fp; \
jbsr JUMPTARGET (_mcount); \
move.l (%sp)+, %fp; \
- cfi_adjust_cfa_offset (-4); cfi_restore (%fp);
+ cfi_adjust_cfa_offset (-4); cfi_restore (%a6);
# else
# define CALL_MCOUNT /* Do nothing. */
# endif