diff options
Diffstat (limited to 'libc/ports/sysdeps/m68k')
-rw-r--r-- | libc/ports/sysdeps/m68k/dl-trampoline.S | 54 | ||||
-rw-r--r-- | libc/ports/sysdeps/m68k/fpu_control.h | 64 | ||||
-rw-r--r-- | libc/ports/sysdeps/m68k/sysdep.h | 4 |
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 |