Date: Sunday, December 26, 2010 @ 11:04:44
Author: rswindells
Path: /project/cmucl/cvsroot/src/lisp
Modified: Darwin-os.c FreeBSD-os.c Linux-os.c NetBSD-os.c lisp.c os.h
solaris-os.c x86-arch.c
Add a test for whether the operating system supports use of the SSE2
registers. The test is a stub on everything except NetBSD for now.
--------------+
Darwin-os.c | 10 +++++++++-
FreeBSD-os.c | 11 ++++++++++-
Linux-os.c | 10 +++++++++-
NetBSD-os.c | 18 +++++++++++++++++-
lisp.c | 6 +++---
os.h | 6 +++++-
solaris-os.c | 8 +++++++-
x86-arch.c | 4 ++--
8 files changed, 62 insertions(+), 11 deletions(-)
Index: src/lisp/Darwin-os.c
diff -u src/lisp/Darwin-os.c:1.30 src/lisp/Darwin-os.c:1.31
--- src/lisp/Darwin-os.c:1.30 Tue Jun 22 12:55:17 2010
+++ src/lisp/Darwin-os.c Sun Dec 26 11:04:43 2010
@@ -14,7 +14,7 @@
* Frobbed for OpenBSD by Pierre R. Mai, 2001.
* Frobbed for Darwin by Pierre R. Mai, 2003.
*
- * $Header: /project/cmucl/cvsroot/src/lisp/Darwin-os.c,v 1.30 2010-06-22 16:55:17 rtoy Rel $
+ * $Header: /project/cmucl/cvsroot/src/lisp/Darwin-os.c,v 1.31 2010-12-26 16:04:43 rswindells Exp $
*
*/
@@ -523,3 +523,11 @@
return sym_addr;
}
+
+#ifdef i386
+boolean
+os_support_sse2()
+{
+ return TRUE;
+}
+#endif
Index: src/lisp/FreeBSD-os.c
diff -u src/lisp/FreeBSD-os.c:1.36 src/lisp/FreeBSD-os.c:1.37
--- src/lisp/FreeBSD-os.c:1.36 Tue Sep 7 23:28:08 2010
+++ src/lisp/FreeBSD-os.c Sun Dec 26 11:04:43 2010
@@ -12,7 +12,7 @@
* Much hacked by Paul Werkowski
* GENCGC support by Douglas Crosher, 1996, 1997.
*
- * $Header: /project/cmucl/cvsroot/src/lisp/FreeBSD-os.c,v 1.36 2010-09-08 03:28:08 agoncharov Rel $
+ * $Header: /project/cmucl/cvsroot/src/lisp/FreeBSD-os.c,v 1.37 2010-12-26 16:04:43 rswindells Exp $
*
*/
@@ -356,3 +356,12 @@
}
#endif
}
+
+#ifdef i386
+boolean
+os_support_sse2()
+{
+ return TRUE;
+}
+#endif
+
Index: src/lisp/Linux-os.c
diff -u src/lisp/Linux-os.c:1.50 src/lisp/Linux-os.c:1.51
--- src/lisp/Linux-os.c:1.50 Tue Jun 22 12:55:17 2010
+++ src/lisp/Linux-os.c Sun Dec 26 11:04:43 2010
@@ -15,7 +15,7 @@
* GENCGC support by Douglas Crosher, 1996, 1997.
* Alpha support by Julian Dolby, 1999.
*
- * $Header: /project/cmucl/cvsroot/src/lisp/Linux-os.c,v 1.50 2010-06-22 16:55:17 rtoy Rel $
+ * $Header: /project/cmucl/cvsroot/src/lisp/Linux-os.c,v 1.51 2010-12-26 16:04:43 rswindells Exp $
*
*/
@@ -537,3 +537,11 @@
#endif
}
}
+
+#ifdef i386
+boolean
+os_support_sse2()
+{
+ return TRUE;
+}
+#endif
Index: src/lisp/NetBSD-os.c
diff -u src/lisp/NetBSD-os.c:1.18 src/lisp/NetBSD-os.c:1.19
--- src/lisp/NetBSD-os.c:1.18 Thu Dec 23 12:38:05 2010
+++ src/lisp/NetBSD-os.c Sun Dec 26 11:04:43 2010
@@ -15,7 +15,7 @@
* Frobbed for OpenBSD by Pierre R. Mai, 2001.
* Frobbed for NetBSD by Pierre R. Mai, 2002.
*
- * $Header: /project/cmucl/cvsroot/src/lisp/NetBSD-os.c,v 1.18 2010-12-23 17:38:05 rtoy Exp $
+ * $Header: /project/cmucl/cvsroot/src/lisp/NetBSD-os.c,v 1.19 2010-12-26 16:04:43 rswindells Exp $
*
*/
@@ -36,6 +36,7 @@
/* #include <sys/sysinfo.h> */
#include <sys/proc.h>
#include <dlfcn.h>
+#include <sys/sysctl.h>
#include "validate.h"
size_t os_vm_page_size;
@@ -409,3 +410,18 @@
__asm__ __volatile__ ("ldmxcsr %0"::"m"(*&mxcsr));
}
}
+
+#ifdef i386
+boolean
+os_support_sse2()
+{
+ int support_sse2;
+ size_t len;
+
+ if (sysctlbyname("machdep.sse2", &support_sse2, &len,
+ NULL, 0) == 0 && support_sse2 != 0)
+ return TRUE;
+ else
+ return FALSE;
+}
+#endif
Index: src/lisp/lisp.c
diff -u src/lisp/lisp.c:1.80 src/lisp/lisp.c:1.81
--- src/lisp/lisp.c:1.80 Wed Dec 22 22:20:27 2010
+++ src/lisp/lisp.c Sun Dec 26 11:04:43 2010
@@ -1,7 +1,7 @@
/*
* main() entry point for a stand alone lisp image.
*
- * $Header: /project/cmucl/cvsroot/src/lisp/lisp.c,v 1.80 2010-12-23 03:20:27 rtoy Exp $
+ * $Header: /project/cmucl/cvsroot/src/lisp/lisp.c,v 1.81 2010-12-26 16:04:43 rswindells Exp $
*
*/
@@ -715,8 +715,8 @@
}
#ifdef i386
- if ((fpu_type == SSE2) && !arch_support_sse2()) {
- fprintf(stderr, "Core uses SSE2, but CPU doesn't support SSE2. Exiting\n");
+ if ((fpu_type == SSE2) && (!arch_support_sse2() || !os_support_sse2())) {
+ fprintf(stderr, "Core uses SSE2, but CPU/OS doesn't support SSE2. Exiting\n");
exit(1);
}
fpu_mode = fpu_type;
Index: src/lisp/os.h
diff -u src/lisp/os.h:1.26 src/lisp/os.h:1.27
--- src/lisp/os.h:1.26 Mon Feb 1 12:38:48 2010
+++ src/lisp/os.h Sun Dec 26 11:04:43 2010
@@ -1,5 +1,5 @@
/*
- * $Header: /project/cmucl/cvsroot/src/lisp/os.h,v 1.26 2010-02-01 17:38:48 rtoy Rel $
+ * $Header: /project/cmucl/cvsroot/src/lisp/os.h,v 1.27 2010-12-26 16:04:43 rswindells Exp $
*
* Common interface for os-dependent functions.
*
@@ -115,6 +115,10 @@
unsigned char *os_sigcontext_fpu_reg(ucontext_t *, int);
unsigned int os_sigcontext_fpu_modes(ucontext_t *);
+#ifdef i386
+extern boolean os_support_sse2(void);
+#endif
+
char* convert_lisp_string(char* c_string, void* lisp_string, int len);
#endif /* _OS_H_ */
Index: src/lisp/solaris-os.c
diff -u src/lisp/solaris-os.c:1.28 src/lisp/solaris-os.c:1.29
--- src/lisp/solaris-os.c:1.28 Thu Dec 23 18:02:58 2010
+++ src/lisp/solaris-os.c Sun Dec 26 11:04:43 2010
@@ -1,5 +1,5 @@
/*
- * $Header: /project/cmucl/cvsroot/src/lisp/solaris-os.c,v 1.28 2010-12-23 23:02:58 rtoy Exp $
+ * $Header: /project/cmucl/cvsroot/src/lisp/solaris-os.c,v 1.29 2010-12-26 16:04:43 rswindells Exp $
*
* OS-dependent routines. This file (along with os.h) exports an
* OS-independent interface to the operating system VM facilities.
@@ -609,4 +609,10 @@
modes ^= (0x3f << 7);
return modes;
}
+
+boolean
+os_support_sse2()
+{
+ return TRUE;
+}
#endif
Index: src/lisp/x86-arch.c
diff -u src/lisp/x86-arch.c:1.42 src/lisp/x86-arch.c:1.43
--- src/lisp/x86-arch.c:1.42 Thu Dec 23 17:55:31 2010
+++ src/lisp/x86-arch.c Sun Dec 26 11:04:43 2010
@@ -1,6 +1,6 @@
/* x86-arch.c -*- Mode: C; comment-column: 40 -*-
*
- * $Header: /project/cmucl/cvsroot/src/lisp/x86-arch.c,v 1.42 2010-12-23 22:55:31 rtoy Exp $
+ * $Header: /project/cmucl/cvsroot/src/lisp/x86-arch.c,v 1.43 2010-12-26 16:04:43 rswindells Exp $
*
*/
@@ -105,7 +105,7 @@
{
int have_sse2;
- have_sse2 = arch_support_sse2();
+ have_sse2 = arch_support_sse2() && os_support_sse2();
switch (mode) {
case AUTO: