+(define-vop (fast-ash/unsigned=>unsigned)
+ (:note "inline ASH")
+ (:args (number :scs (unsigned-reg) :to :save)
+ (amount :scs (signed-reg)))
+ (:arg-types unsigned-num signed-num)
+ (:results (result :scs (unsigned-reg)))
+ (:result-types unsigned-num)
+ (:translate ash)
+ (:policy :fast-safe)
+ (:temporary (:sc non-descriptor-reg) ndesc)
+ (:temporary (:sc non-descriptor-reg) temp)
+ (:generator 3
+ (inst bge amount positive)
+ (inst subq zero-tn amount ndesc)
+ (inst cmplt ndesc 64 temp)
+ (inst srl number ndesc result)
+ ;; FIXME: this looks like a candidate for a conditional move --
+ ;; CSR, 2003-09-10
+ (inst bne temp done)
+ (move zero-tn result)
+ (inst br zero-tn done)
+
+ POSITIVE
+ (inst sll number amount result)
+
+ DONE))
+
+(define-vop (fast-ash/signed=>signed)