X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fmips-arch.c;h=72ac15afb7120b7a04eaaff05e70a610f6e1c545;hb=35ab27e7aab71c94aa6be12da15603c7fd87fca8;hp=ad7d8339d0db7905c7a2e1d4ebc1f8bd5636c2dd;hpb=66de8065bc761501b5dccef3de86125a167175db;p=sbcl.git diff --git a/src/runtime/mips-arch.c b/src/runtime/mips-arch.c index ad7d833..72ac15a 100644 --- a/src/runtime/mips-arch.c +++ b/src/runtime/mips-arch.c @@ -396,9 +396,8 @@ arch_handle_single_step_trap(os_context_t *context, int trap) } static void -sigtrap_handler(int signal, siginfo_t *info, void *void_context) +sigtrap_handler(int signal, siginfo_t *info, os_context_t *context) { - os_context_t *context = arch_os_get_context(&void_context); unsigned int code = (os_context_insn(context) >> 6) & 0xfffff; /* FIXME: This magic number is pseudo-atomic-trap from parms.lisp. * Genesis should provide the proper #define, but it specialcases @@ -415,9 +414,8 @@ sigtrap_handler(int signal, siginfo_t *info, void *void_context) #define FIXNUM_VALUE(lispobj) (((int)lispobj) >> N_FIXNUM_TAG_BITS) static void -sigfpe_handler(int signal, siginfo_t *info, void *void_context) +sigfpe_handler(int signal, siginfo_t *info, os_context_t *context) { - os_context_t *context = arch_os_get_context(&void_context); unsigned int bad_inst = os_context_insn(context); unsigned int op, rs, rt, rd, funct, dest = 32; int immed; @@ -473,6 +471,22 @@ sigfpe_handler(int signal, siginfo_t *info, void *void_context) arch_skip_instruction(context); } +unsigned int +arch_get_fp_control(void) +{ + register unsigned int ret asm("$2"); + + __asm__ __volatile__ ("cfc1 %0, $31" : "=r" (ret)); + + return ret; +} + +void +arch_set_fp_control(unsigned int fp) +{ + __asm__ __volatile__ ("ctc1 %0, $31" :: "r" (fp)); +} + void arch_install_interrupt_handlers(void) {