- (loadw temp thing 0 lowtag)
- (inst srl temp n-widetag-bits temp)
- (inst comb := zero-tn temp done)
- (move null-tn code)
- (inst sll temp (1- (integer-length n-word-bytes)) temp)
- (unless (= lowtag other-pointer-lowtag)
- (inst addi (- lowtag other-pointer-lowtag) temp temp))
- (inst sub thing temp code)
- DONE))
+ (let ((bogus (gen-label))
+ (done (gen-label)))
+ (loadw temp thing 0 lowtag)
+ (inst srl temp n-widetag-bits temp)
+ (inst comb := zero-tn temp bogus)
+ (inst sll temp (1- (integer-length n-word-bytes)) temp)
+ (unless (= lowtag other-pointer-lowtag)
+ (inst addi (- lowtag other-pointer-lowtag) temp temp))
+ (inst sub thing temp code)
+ (emit-label done)
+ (assemble (*elsewhere*)
+ (emit-label bogus)
+ (inst b done)
+ (move null-tn code t)))))