X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fmips%2Fmacros.lisp;h=a0152322ddc89d1fb087a23ec4837cc96ad804c3;hb=1831934a29eb9361472e4f49efbcd5398392a6b0;hp=7a8a296ba02d3cf491f94a849cc792669dff91aa;hpb=52cfe54802db8736f1f4e2b67764c43bba9b78b3;p=sbcl.git diff --git a/src/compiler/mips/macros.lisp b/src/compiler/mips/macros.lisp index 7a8a296..a015232 100644 --- a/src/compiler/mips/macros.lisp +++ b/src/compiler/mips/macros.lisp @@ -114,6 +114,7 @@ (sc-case stack ((control-stack) (loadw reg cfp-tn offset)))))) + (defmacro store-stack-tn (stack reg) `(let ((stack ,stack) (reg ,reg)) @@ -152,6 +153,16 @@ (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))) + ;;;; Three Way Comparison (defun three-way-comparison (x y condition flavor not-p target temp) @@ -189,7 +200,7 @@ `((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) @@ -214,8 +225,9 @@ "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* @@ -255,7 +267,7 @@ (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))))) ;;;; memory accessor vop generators