[cmucl-commit] CMUCL commit: cross-sol-x86-branch src/lisp (solaris-os.c)

Raymond Toy rtoy at common-lisp.net
Mon Dec 20 16:12:26 CET 2010


    Date: Monday, December 20, 2010 @ 10:12:26
  Author: rtoy
    Path: /project/cmucl/cvsroot/src/lisp
     Tag: cross-sol-x86-branch

Modified: solaris-os.c

Add implementation of os_sigcontext_fpu_reg.  Tested to work with
SSE2.  X87 not yet tested.


--------------+
 solaris-os.c |   34 +++++++++++++++++++++++++++++++++-
 1 file changed, 33 insertions(+), 1 deletion(-)


Index: src/lisp/solaris-os.c
diff -u src/lisp/solaris-os.c:1.26.4.4 src/lisp/solaris-os.c:1.26.4.5
--- src/lisp/solaris-os.c:1.26.4.4	Sun Dec 19 23:17:28 2010
+++ src/lisp/solaris-os.c	Mon Dec 20 10:12:26 2010
@@ -1,5 +1,5 @@
 /*
- * $Header: /project/cmucl/cvsroot/src/lisp/solaris-os.c,v 1.26.4.4 2010-12-20 04:17:28 rtoy Exp $
+ * $Header: /project/cmucl/cvsroot/src/lisp/solaris-os.c,v 1.26.4.5 2010-12-20 15:12:26 rtoy Exp $
  *
  * OS-dependent routines.  This file (along with os.h) exports an
  * OS-independent interface to the operating system VM facilities.
@@ -541,6 +541,38 @@
     return (unsigned long *) &scp->uc_mcontext.gregs[EIP];
 }
 
+
+unsigned char *
+os_sigcontext_fpu_reg(ucontext_t *scp, int offset)
+{
+    fpregset_t *fpregs = &scp->uc_mcontext.fpregs;
+    unsigned char *reg = NULL;
+
+    if (offset < 8) {
+        unsigned char *fpustate;
+        unsigned char *stregs;
+
+        /*
+         * Not sure this is right.  There is no structure defined for
+         * the x87 fpu state in /usr/include/sys/regset.h
+         */
+        
+        /* Point to the fpchip_state */
+        fpustate = (unsigned char*) &fpregs->fp_reg_set.fpchip_state.state[0];
+        /* Skip to where the x87 fp registers are */
+        stregs = fpustate + 24;
+    
+        reg = stregs + 16*offset;
+    }
+#ifdef FEATURE_SSE2
+    else {
+        reg = &fpregs->fp_reg_set.fpchip_state.xmm[offset - 8];
+    }
+#endif
+
+    return reg;
+}
+
 unsigned int
 os_sigcontext_fpu_modes(ucontext_t *scp)
 {


More information about the cmucl-commit mailing list