Build on sparc64.

ok jasper@
This commit is contained in:
joshe 2010-09-23 13:42:22 +00:00
parent 4770ab0216
commit 128680d7d9
5 changed files with 180 additions and 9 deletions

View File

@ -1,13 +1,14 @@
# $OpenBSD: Makefile,v 1.33 2010/08/23 16:31:33 jasper Exp $
# $OpenBSD: Makefile,v 1.34 2010/09/23 13:42:22 joshe Exp $
ONLY_FOR_ARCHS = amd64 i386 powerpc
ONLY_FOR_ARCHS = amd64 i386 powerpc sparc64
COMMENT = ANSI Common Lisp implementation
DISTNAME= clisp-2.48
REVISION = 0
REVISION = 1
CATEGORIES= lang
HOMEPAGE= http://clisp.cons.org/
MAINTAINER = Joshua Elsasser <joshe@openbsd.org>
# GPLv2
PERMIT_PACKAGE_CDROM= Yes
@ -18,7 +19,7 @@ PERMIT_DISTFILES_FTP= Yes
MODULES= devel/gettext
LIB_DEPENDS = ::devel/libsigsegv \
::devel/ffcall
:ffcall->=1.10p1:devel/ffcall
WANTLIB = avcall c callback m ncurses readline sigsegv
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=clisp/}
@ -41,4 +42,8 @@ CONFIGURE_ARGS= --fsstnd=openbsd \
--srcdir=${WRKSRC} ${WRKBUILD}
CONFIGURE_ENV = ac_cv_prog_DVIPDF=''
.if ${MACHINE_ARCH} == "sparc64"
CFLAGS += -DSAFETY=2 -DNO_ASM -mcmodel=medany
.endif
.include <bsd.port.mk>

View File

@ -0,0 +1,73 @@
$OpenBSD: patch-src_arilev0_d,v 1.1 2010/09/23 13:42:22 joshe Exp $
Rip out a bunch of sparc assembly code which is dubious at best.
--- src/arilev0.d.orig Thu Dec 13 14:27:48 2007
+++ src/arilev0.d Sun Sep 19 15:45:18 2010
@@ -337,12 +337,6 @@
); \
hi_assignment _hi; lo_assignment _lo; \
})
- #elif defined(SPARC)
- #define mulu32(x,y,hi_assignment,lo_assignment) \
- ({ lo_assignment mulu32_(x,y); # extern in Assembler \
- {var register uint32 _hi __asm__("%g1"); \
- hi_assignment _hi; \
- }})
#elif defined(HAVE_LONG_LONG_INT) && !defined(ARM)
#define mulu32(x,y,hi_assignment,lo_assignment) \
({ var register uint64 _prod = (uint64)(x) * (uint64)(y); \
@@ -354,11 +348,9 @@
#ifndef mulu32
#define mulu32(x,y,hi_assignment,lo_assignment) \
{ lo_assignment mulu32_(x,y); hi_assignment mulu32_high; }
- #if defined(MC680X0) || defined(SPARC) || defined(SPARC64) || defined(ARM) || (defined(I80386) && !defined(BORLAND)) || defined(MIPS) || defined(HPPA) || defined(VAX)
+ #if defined(MC680X0) || defined(ARM) || (defined(I80386) && !defined(BORLAND)) || defined(MIPS) || defined(HPPA) || defined(VAX)
# mulu32_ extern in Assembler
- #if defined(SPARC) || defined(SPARC64)
- #define mulu32_high (uint32)(_get_g1()) # Rückgabe im Register %g1
- #elif defined(LISPARIT) && !defined(HPPA) # In arihppa.d ist mulu32_high bereits definiert.
+ #if defined(LISPARIT) && !defined(HPPA) # In arihppa.d ist mulu32_high bereits definiert.
global uint32 mulu32_high;
#endif
#else
@@ -468,12 +460,6 @@
); \
highlow64(_hi,_lo); \
})
- #elif defined(SPARC)
- #define mulu32_64(x,y) \
- ({ var register uint32 _lo = mulu32_(x,y); # extern in Assembler \
- var register uint32 _hi __asm__("%g1"); \
- highlow64(_hi,_lo); \
- })
#endif
#endif
#ifndef mulu32_64
@@ -887,12 +873,6 @@
q_assignment (uint32)__q; \
r_assignment (uint32)__r; \
})
- #elif defined(SPARC) || defined(SPARC64)
- #define divu_6432_3232(xhi,xlo,y,q_assignment,r_assignment) \
- ({ var uint32 _q = divu_6432_3232_(xhi,xlo,y); # extern in Assembler \
- var register uint32 _r __asm__("%g1"); \
- q_assignment _q; r_assignment _r; \
- })
#elif defined(ARM) && 0 # see comment ariarm.d
#define divu_6432_3232(xhi,xlo,y,q_assignment,r_assignment) \
({ var uint32 _q = divu_6432_3232_(xhi,xlo,y); # extern in Assembler \
@@ -932,11 +912,9 @@
#ifndef divu_6432_3232
#define divu_6432_3232(xhi,xlo,y,q_assignment,r_assignment) \
{ q_assignment divu_6432_3232_(xhi,xlo,y); r_assignment divu_32_rest; }
- #if defined(MC680Y0) || defined(SPARC) || defined(SPARC64) || defined(ARM) || (defined(I80386) && !defined(BORLAND)) || defined(HPPA)
+ #if defined(MC680Y0) || defined(ARM) || (defined(I80386) && !defined(BORLAND)) || defined(HPPA)
# divu_6432_3232_ extern in Assembler
- #if defined(SPARC) || defined(SPARC64)
- #define divu_32_rest (uint32)(_get_g1()) # Rückgabe im Register %g1
- #elif defined(LISPARIT)
+ #if defined(LISPARIT)
global uint32 divu_32_rest;
#endif
#else

View File

@ -0,0 +1,56 @@
$OpenBSD: patch-src_arisparc64_d,v 1.1 2010/09/23 13:42:22 joshe Exp $
Disable the assembler loops, at least one of them is broken.
Remove a couple of potentially-broken math functions to make sure they
aren't used in case the maze of #ifdefs in arilev0.d ever changes.
--- src/arisparc64.d.orig Wed Dec 5 08:06:32 2007
+++ src/arisparc64.d Sun Sep 19 16:25:17 2010
@@ -14,6 +14,7 @@
#ifdef INCLUDED_FROM_C
+#if 0
#define COPY_LOOPS
#define FILL_LOOPS
#define CLEAR_LOOPS
@@ -23,6 +24,7 @@
#define SHIFT_LOOPS
#define MUL_LOOPS
#define DIV_LOOPS
+#endif
#else
@@ -73,30 +75,12 @@ C(mulu16_:) # Input in %o0,%o1, Output in %o0
retl
_ srl %o2,0,%o0
-# extern struct { uint32 lo; uint32 hi; } mulu32_ (uint32 arg1, uint32 arg2);
-# 2^32*hi+lo := arg1*arg2.
-C(mulu32_:) # Input in %o0,%o1, Output in %o0,%g1
- umul %o0,%o1,%o2
- rd %y,%g1
- retl
- _ srl %o2,0,%o0
-
# extern uint32 mulu32_unchecked (uint32 x, uint32 y);
# result := arg1*arg2 < 2^32.
C(mulu32_unchecked:) # Input in %o0,%o1, Output in %o0
umul %o0,%o1,%o2
retl
_ srl %o2,0,%o0
-
-# extern struct { uint32 q; uint32 r; } divu_6432_3232_ (uint32 xhi, uint32 xlo, uint32 y);
-# x = 2^32*xhi+xlo = q*y+r schreiben. Sei bekannt, dass 0 <= x < 2^32*y .
-C(divu_6432_3232_:) # Input in %o0,%o1,%o2, Output in %o0,%g1
- wr %o0,%g0,%y
- udiv %o1,%o2,%o0 # x durch y dividieren, %o0 := q
- umul %o0,%o2,%g1 # %g1 := (q*y) mod 2^32
- sub %o1,%g1,%g1 # %g1 := (xlo-q*y) mod 2^32 = r
- retl
- _ srl %o0,0,%o0
# extern struct { uint16 q; uint16 r; } divu_3216_1616_ (uint32 x, uint16 y);
# x = q*y+r schreiben. Sei bekannt, dass 0 <= x < 2^16*y .

View File

@ -1,7 +1,20 @@
$OpenBSD: patch-src_makemake_in,v 1.10 2010/01/07 10:55:28 edd Exp $
--- src/makemake.in.orig Tue Jul 28 19:58:03 2009
+++ src/makemake.in Wed Dec 30 22:12:19 2009
@@ -1916,7 +1916,7 @@ echol "# This can also be used for pre-test and post-r
$OpenBSD: patch-src_makemake_in,v 1.11 2010/09/23 13:42:22 joshe Exp $
Override broken compiler test, attempting to build 32-bit clisp on a
64-bit patform will not work out very well.
--- src/makemake.in.orig Tue Jul 28 06:58:03 2009
+++ src/makemake.in Mon Sep 20 16:32:15 2010
@@ -1108,6 +1108,8 @@ esac
# cpu=hppa ;;
# esac
+test "$cpu" = "${host_cpu%*64}" && cpu=${host_cpu}
+
if [ "${verbose}" = true -o "${verbose}" = yes ]; then
cat <<EOF >&2
# host system:
@@ -1916,7 +1918,7 @@ echol "# This can also be used for pre-test and post-r
echol "# make distrib VERSION_SUFFIX=pre"
echol "VERSION_SUFFIX="
echol "# The distribution's top directory"
@ -10,7 +23,7 @@ $OpenBSD: patch-src_makemake_in,v 1.10 2010/01/07 10:55:28 edd Exp $
echol
echol '# Directories used by "make install":'
echol "prefix = ${PREFIX}"
@@ -3002,7 +3002,7 @@ fi
@@ -3002,7 +3004,7 @@ fi
CLISP_="${HERE_}lisp${LEXE} -M ${HERE_}lispinit.mem ${localeflags}${someflags}"
if [ $CROSS = false ] ; then

View File

@ -0,0 +1,24 @@
$OpenBSD: patch-src_spsparc64_d,v 1.1 2010/09/23 13:42:22 joshe Exp $
Using %g1 to pass values across function calls is a bit iffy so make
sure that trying to call _get_g1() results in a linker error.
--- src/spsparc64.d.orig Mon Mar 24 11:23:28 2008
+++ src/spsparc64.d Sun Sep 19 15:03:08 2010
@@ -11,16 +11,8 @@
.global getSP
.global _getSP
- .global _get_g1
- .global __get_g1
# extern void* getSP (void);
getSP:
_getSP: retl
_ mov %sp,%o0
-
-# extern uint32 _get_g1 (void);
-_get_g1:
-__get_g1: retl
- _ srl %g1,0,%o0
-