- ;; The high bit is set, so allocate enough space for a two-word bignum.
- ;; We always skip the following instruction, so it is only executed
- ;; when we want one word.
- (inst addi (pad-data-block 1) alloc-tn alloc-tn :tr)
- ;; Set up the header for one word. Use addi instead of li so we can
- ;; skip the next instruction.
- (inst addi (logior (ash 1 n-widetag-bits) bignum-widetag) zero-tn temp :tr)
- ;; Set up the header for two words.
- (inst li (logior (ash 2 n-widetag-bits) bignum-widetag) temp)
- ;; Store the header and the data.
- (storew temp y 0 other-pointer-lowtag)
- (storew x y bignum-digits-offset other-pointer-lowtag))
+ (inst li 1 temp)
+ (inst sll temp n-widetag-bits temp)
+ (inst addi (logior (ash 1 n-widetag-bits) bignum-widetag) temp temp)
+ (storew temp y 0 other-pointer-lowtag))
+
+ (storew x y bignum-digits-offset other-pointer-lowtag)