(location= number result)))))
(:result-types tagged-num)
(:note "inline ASH")
+ (:variant nil)
+ (:variant-vars modularp)
(:generator 2
(cond ((and (= amount 1) (not (location= number result)))
(inst lea result (make-ea :dword :base number :index number)))
(inst sar result (- amount))
(inst and result (lognot fixnum-tag-mask)))))
((plusp amount)
+ (unless modularp
+ (aver (not "Impossible: fixnum ASH should not be called with
+constant shift greater than word length")))
(if (sc-is result any-reg)
(inst xor result result)
(inst mov result 0)))
(define-vop (fast-ash-left-smod30-c/fixnum=>fixnum
fast-ash-c/fixnum=>fixnum)
+ (:variant :modular)
(:translate ash-left-smod30))
(define-vop (fast-ash-left-smod30/fixnum=>fixnum