(sc-case stack
((control-stack)
(loadw reg cfp-tn offset))))))
+
(defmacro store-stack-tn (stack reg)
`(let ((stack ,stack)
(reg ,reg))
(storew ,temp-tn ,result-tn 0 other-pointer-lowtag)
,@body)))
+(defun align-csp (temp)
+ ;; is used for stack allocation of dynamic-extent objects
+ (let ((aligned (gen-label)))
+ (inst and temp csp-tn lowtag-mask)
+ (inst beq temp aligned)
+ (inst nop)
+ (inst addu csp-tn n-word-bytes)
+ (storew zero-tn csp-tn -1)
+ (emit-label aligned)))
+
\f
;;;; Three Way Comparison
(defun three-way-comparison (x y condition flavor not-p target temp)
`((let ((vop ,vop))
(when vop
(note-this-location vop :internal-error)))
- (inst break ,kind)
+ (inst break 0 ,kind)
(with-adjustable-vector (,vector)
(write-var-integer (error-number-or-lose ',code) ,vector)
,@(mapcar #'(lambda (tn)
"Cause a continuable error. If the error is continued, execution resumes at
LABEL."
`(progn
- (inst b ,label)
- ,@(emit-error-break vop cerror-trap error-code values)))
+ (without-scheduling ()
+ (inst b ,label)
+ ,@(emit-error-break vop cerror-trap error-code values))))
(defmacro generate-error-code (vop error-code &rest values)
"Generate-Error-Code Error-code Value*
(let ((label (gen-label)))
(inst bgez ,flag-tn label)
(inst addu alloc-tn (1- ,extra))
- (inst break 16)
+ (inst break 0 16)
(emit-label label)))))
\f
;;;; memory accessor vop generators