summaryrefslogtreecommitdiff
path: root/lang/clisp
diff options
context:
space:
mode:
authorjoerg <joerg@pkgsrc.org>2013-06-18 19:58:20 +0000
committerjoerg <joerg@pkgsrc.org>2013-06-18 19:58:20 +0000
commitb469e6b13a2843b6f18a049e3dbf464002b9b19b (patch)
treec859f6a03e678c875752726a67992b08cca8be87 /lang/clisp
parent306b1e0faec780e4ce55e8292e107b1465f32456 (diff)
downloadpkgsrc-b469e6b13a2843b6f18a049e3dbf464002b9b19b.tar.gz
Don't use register variables with Clang/amd64, provide assembler for
fetching/setting SP. Can't use the fast accessor as clisp doesn't align in the stack correctly in that case. Still fails somewhere in the middle of the regression tests, but much much farther in.
Diffstat (limited to 'lang/clisp')
-rw-r--r--lang/clisp/distinfo3
-rw-r--r--lang/clisp/patches/patch-src_lispbibl.d20
2 files changed, 22 insertions, 1 deletions
diff --git a/lang/clisp/distinfo b/lang/clisp/distinfo
index b96c7d0fc98..174b81de375 100644
--- a/lang/clisp/distinfo
+++ b/lang/clisp/distinfo
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.26 2010/07/09 18:08:05 asau Exp $
+$NetBSD: distinfo,v 1.27 2013/06/18 19:58:20 joerg Exp $
SHA1 (clisp-2.49.tar.gz) = 1743e7917013162400c955af441e991db43b3323
RMD160 (clisp-2.49.tar.gz) = ae30f3b681cb023e885c6e4ed12210ee5ba14c76
@@ -6,3 +6,4 @@ Size (clisp-2.49.tar.gz) = 9823111 bytes
SHA1 (patch-aa) = 1a0af21eb2c2de898a7cb3500ce72f15581bfeb8
SHA1 (patch-ab) = 225873ed24e4a1f343acc8e3163c8151e9958c77
SHA1 (patch-ac) = c31fcd65d7d37aeaf69c0eee9499bff596b6619b
+SHA1 (patch-src_lispbibl.d) = 122cdcc570065b7518b391d9433c5994c3925880
diff --git a/lang/clisp/patches/patch-src_lispbibl.d b/lang/clisp/patches/patch-src_lispbibl.d
new file mode 100644
index 00000000000..8e1b69e40c3
--- /dev/null
+++ b/lang/clisp/patches/patch-src_lispbibl.d
@@ -0,0 +1,20 @@
+$NetBSD: patch-src_lispbibl.d,v 1.1 2013/06/18 19:58:20 joerg Exp $
+
+--- src/lispbibl.d.orig 2013-06-17 14:15:17.000000000 +0000
++++ src/lispbibl.d
+@@ -9090,6 +9090,15 @@ All other long words on the LISP-Stack a
+ #define setSP(adresse) \
+ ({ __asm__ __volatile__ ("movel %0,"REGISTER_PREFIX"sp" : : "g" ((aint)(adresse)) : "sp" ); })
+ #define FAST_SP
++#elif defined(__clang__) && defined(__x86_64__)
++ /* Access to a register-"variable" %rsp */
++ #define SP() \
++ ({var aint __SP; \
++ __asm__ __volatile__ ("movq %%rsp,%0" : "=g" (__SP) : ); \
++ __SP; \
++ })
++ #define setSP(adresse) \
++ ({ __asm__ __volatile__ ("movq %0,%%rsp" : : "g" ((aint)(adresse)) : "sp" ); })
+ #elif (defined(GNU) || defined(INTEL)) && defined(I80386) && !defined(NO_ASM)
+ /* Access to a register-"variable" %esp */
+ #define SP() \