0.9.9.27:
[sbcl.git] / src / compiler / mips / macros.lisp
index dd32fdc..a015232 100644 (file)
        (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