;; number of iterations.
(loop-count (- frame-size (remainder frame-size 2))))
(assert (= loop-count (* (quotient frame-size 2) 2)))
+ (assert (not (= index regnum:scratch-0)))
(LAP (ADD X ,regnum:stack-pointer ,regnum:stack-pointer
(&U ,(* 8 frame-size)))
,@(if (odd? frame-size)
(checks (get-entry-interrupt-checks))
(type type-code:compiled-entry))
(define (label+adjustment)
+ (assert (not (= regnum:applicand regnum:scratch-0)))
(LAP ,@(make-external-label internal-entry-code-word external-label)
;; regnum:applicand holds the untagged entry address.
;; Push and tag it.
(shift-left offset 48))))
(else
(error "Unknown endianness:" endianness))))
+ (assert (not (= temp regnum:scratch-0)))
(LAP ,@(load-unsigned-immediate temp (padded-word))
(STR X ,temp (POST+ ,Free (& 8)))
;; Set temp := label - 8.
(define (generate/quotation-header environment-label free-ref-label n-sections)
(let ((continuation-label (generate-label 'LINKED)))
+ (assert (not (= r0 regnum:scratch-0)))
+ (assert (not (= r1 regnum:scratch-0)))
(LAP (LDR X ,r0 ,reg:environment)
(ADR X ,r1 (@PCR ,environment-label ,regnum:scratch-0))
(STR X ,r0 ,r1)
(arg2 regnum:utility-arg2)
(arg3 regnum:utility-arg3)
(arg4 regnum:utility-arg4))
+ (assert (not (= counter regnum:scratch-0)))
(LAP ,@(load-unsigned-immediate counter n-blocks)
(LABEL ,loop-label)
,@(load-pc-relative arg2 vector-label) ;arg2 := vector