1 ;;;; allocating simple objects
3 ;;;; This software is part of the SBCL system. See the README file for
6 ;;;; This software is derived from the CMU CL system, which was
7 ;;;; written at Carnegie Mellon University and released into the
8 ;;;; public domain. The software is in the public domain and is
9 ;;;; provided with absolutely no warranty. See the COPYING and CREDITS
10 ;;;; files for more information.
14 ;;;; Signed and unsigned bignums from word-sized integers. Argument
15 ;;;; and return in the same register. No VOPs, as these are only used
16 ;;;; as out-of-line versions: MOVE-FROM-[UN]SIGNED VOPs handle the
17 ;;;; fixnum cases inline.
19 ;;; #+SB-ASSEMBLING as we don't need VOPS, just the asm routines:
20 ;;; these are out-of-line versions called by VOPs.
25 `(define-assembly-routine (,(symbolicate "ALLOC-SIGNED-BIGNUM-IN-" reg))
26 ((:temp number unsigned-reg ,(symbolicate reg "-OFFSET")))
28 (with-fixed-allocation (number bignum-widetag (+ bignum-digits-offset 1))
29 (popw number bignum-digits-offset other-pointer-lowtag))
48 `(define-assembly-routine (,(symbolicate "ALLOC-UNSIGNED-BIGNUM-IN-" reg))
49 ((:temp number unsigned-reg ,(symbolicate reg "-OFFSET")))
51 (inst jmp :ns one-word-bignum)
53 (with-fixed-allocation (number bignum-widetag (+ bignum-digits-offset 2))
54 (popw number bignum-digits-offset other-pointer-lowtag))
57 (with-fixed-allocation (number bignum-widetag (+ bignum-digits-offset 1))
58 (popw number bignum-digits-offset other-pointer-lowtag))