summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2014-07-01 11:30:29 +0200
committerAndy Wingo <wingo@pobox.com>2014-07-01 11:30:29 +0200
commit93e838423cba836fd90662f9acd362ddf3aa6fb1 (patch)
tree12c79e272a511136daa6b91bbe8ceed27157f4ed
parent0ad455ca6b8058a08fc88d911c3814b06275fe4e (diff)
downloadguile-93e838423cba836fd90662f9acd362ddf3aa6fb1.tar.gz
Fix intset on 32-bit machines
* module/language/cps/intset.scm (*leaf-bits*): Define to 4 on 32-bit machines, to stay in fixnum range.
-rw-r--r--module/language/cps/intset.scm21
1 files changed, 20 insertions, 1 deletions
diff --git a/module/language/cps/intset.scm b/module/language/cps/intset.scm
index 4201cc8f8..e8e6df2d6 100644
--- a/module/language/cps/intset.scm
+++ b/module/language/cps/intset.scm
@@ -40,7 +40,26 @@
(define-syntax-rule (define-inline name val)
(define-syntax name (identifier-syntax val)))
-(define-inline *leaf-bits* 5)
+(eval-when (expand)
+ (use-modules (system base target))
+ (define-syntax compile-time-cond
+ (lambda (x)
+ (syntax-case x (else)
+ ((_ (test body ...) rest ...)
+ (if (primitive-eval (syntax->datum #'test))
+ #'(begin body ...)
+ #'(begin (compile-time-cond rest ...))))
+ ((_ (else body ...))
+ #'(begin body ...))
+ ((_)
+ (error "no compile-time-cond expression matched"))))))
+
+(compile-time-cond
+ ((eqv? (target-word-size) 4)
+ (define-inline *leaf-bits* 4))
+ ((eqv? (target-word-size) 8)
+ (define-inline *leaf-bits* 5)))
+
(define-inline *leaf-size* (ash 1 *leaf-bits*))
(define-inline *leaf-mask* (1- *leaf-size*))
(define-inline *branch-bits* 3)