X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fgeneric%2Fvm-tran.lisp;h=86efb42b77e26ececea35f1d3174932563f004d5;hb=dcf8b8ccc1e15a5c1c6aba00204b7d3a81827acc;hp=d616f0976bff9552b4b2f2db1392d640862a009d;hpb=51e63f301624e39febdd85b5feba19b7c980f307;p=sbcl.git diff --git a/src/compiler/generic/vm-tran.lisp b/src/compiler/generic/vm-tran.lisp index d616f09..86efb42 100644 --- a/src/compiler/generic/vm-tran.lisp +++ b/src/compiler/generic/vm-tran.lisp @@ -60,7 +60,6 @@ (funcall func value (lvar-value offset)))) (give-up-ir1-transform "constant is too large for inlining")) (splice-fun-args index func 2) - (format t "preparing to transform with ~A ~D~%" func value) `(lambda (thing index off1 off2 ,@(when setter-p '(value))) (,fun-name thing index (,func off2 off1) ,@(when setter-p @@ -733,3 +732,14 @@ result) adds shifts))) + + +;;; Transform GET-LISP-OBJ-ADDRESS for constant immediates, since the normal +;;; VOP can't handle them. + +(deftransform sb!vm::get-lisp-obj-address ((obj) ((constant-arg fixnum))) + (ash (lvar-value obj) sb!vm::n-fixnum-tag-bits)) + +(deftransform sb!vm::get-lisp-obj-address ((obj) ((constant-arg character))) + (logior sb!vm::character-widetag + (ash (char-code (lvar-value obj)) sb!vm::n-widetag-bits)))