X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fruntime%2Fx86-64-linux-os.c;h=01e69bcf15ef582f3035a130ebb501ea0bd9e197;hb=eaa8a506790bb6ed627da617247bfd13802eb365;hp=6633b326ac265fcd058671ffb9f11d102b16b4be;hpb=cd056980425e3fa67b8b77de3936ccb46508c3b0;p=sbcl.git diff --git a/src/runtime/x86-64-linux-os.c b/src/runtime/x86-64-linux-os.c index 6633b32..01e69bc 100644 --- a/src/runtime/x86-64-linux-os.c +++ b/src/runtime/x86-64-linux-os.c @@ -129,12 +129,8 @@ os_context_fp_addr(os_context_t *context) unsigned long os_context_fp_control(os_context_t *context) { -#if 0 - return ((((context->uc_mcontext.fpregs->cw) & 0xffff) ^ 0x3f) | - (((context->uc_mcontext.fpregs->sw) & 0xffff) << 16)); -#else - return 0; -#endif + int mxcsr = context->uc_mcontext.fpregs->mxcsr; + return ((mxcsr & 0x3F) << 16 | ((mxcsr >> 7) & 0x3F)) ^ 0x3F; } sigset_t * @@ -146,9 +142,7 @@ os_context_sigmask_addr(os_context_t *context) void os_restore_fp_control(os_context_t *context) { -#if 0 - asm ("fldcw %0" : : "m" (context->uc_mcontext.fpregs->cw)); -#endif + asm ("ldmxcsr %0" : : "m" (context->uc_mcontext.fpregs->mxcsr)); } void