projects
/
sbcl.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
1cdc827
)
Correct call-indirect for >32-bit addresses.
author
Stas Boukarev
<stassats@gmail.com>
Sun, 2 Jun 2013 18:22:44 +0000
(22:22 +0400)
committer
Stas Boukarev
<stassats@gmail.com>
Sun, 2 Jun 2013 18:22:44 +0000
(22:22 +0400)
src/compiler/x86-64/macros.lisp
patch
|
blob
|
history
diff --git
a/src/compiler/x86-64/macros.lisp
b/src/compiler/x86-64/macros.lisp
index
8088d43
..
2883d28
100644
(file)
--- a/
src/compiler/x86-64/macros.lisp
+++ b/
src/compiler/x86-64/macros.lisp
@@
-63,12
+63,12
@@
`(inst pop (make-ea-for-object-slot ,ptr ,slot ,lowtag)))
(defun call-indirect (offset)
- (let ((ea (make-ea :qword :disp offset)))
- (cond ((immediate32-p offset)
- (inst call ea))
- (t
- (inst mov temp-reg-tn ea)
- (inst call temp-reg-tn)))))
+ (typecase offset
+ ((signed-byte 32)
+ (inst call (make-ea :qword :disp offset)))
+ (t
+ (inst mov temp-reg-tn offset)
+ (inst call (make-ea :qword :base temp-reg-tn)))))
\f
;;;; macros to generate useful values