(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
result)
adds
shifts)))
+
+\f
+;;; 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)))