0.7.11.2:
[sbcl.git] / src / runtime / alpha-linux-os.c
index 3597e04..80c8913 100644 (file)
 #include <sys/time.h>
 #include <sys/stat.h>
 #include <unistd.h>
+#include <asm/fpu.h>
 
 #include "validate.h"
 size_t os_vm_page_size;
 
-#if defined GENCGC             /* unlikely ... */
-#error SBCL Alpha does not work with the GENCGC
-#include "gencgc.h"
-#endif
 
 os_context_register_t   *
 os_context_register_addr(os_context_t *context, int offset)
@@ -67,6 +64,29 @@ os_context_sigmask_addr(os_context_t *context)
     return &context->uc_sigmask;
 }
 
+unsigned long
+os_context_fp_control(os_context_t *context)
+{
+    return ieee_fpcr_to_swcr((context->uc_mcontext).sc_fpcr);
+}
+
+void
+os_restore_fp_control(os_context_t *context)
+{
+    /* FIXME (in two parts):
+       Firstly, what happens in alpha linux inside the signal handler?
+       Does the floating point control state get cleared as in other
+       Linuxes?
+    
+       Secondly, how do we put it back if so? It will probably involve
+       something to do with
+    
+       context->uc_mcontext.sc_fpcr
+
+       (maybe a simple assembly statement will be enough)
+    */ 
+}
+
 void os_flush_icache(os_vm_address_t address, os_vm_size_t length)
 {
     asm volatile ("imb" : : : "memory" );