fix "unable to read" compiler-error reporting during SBCL build
[sbcl.git] / src / compiler / mips / insts.lisp
index 2f1b723..d441d5c 100644 (file)
 \f
 ;;;; Constants used by instruction emitters.
 
 \f
 ;;;; Constants used by instruction emitters.
 
-(defconstant special-op #b000000)
-(defconstant bcond-op #b000001)
-(defconstant cop0-op #b010000)
-(defconstant cop1-op #b010001)
-(defconstant cop2-op #b010010)
-(defconstant cop3-op #b010011)
+(def!constant special-op #b000000)
+(def!constant bcond-op #b000001)
+(def!constant cop0-op #b010000)
+(def!constant cop1-op #b010001)
+(def!constant cop2-op #b010010)
+(def!constant cop3-op #b010011)
 
 
 \f
 
 
 \f
 
 (sb!disassem:define-instruction-format
     (break 32 :default-printer
 
 (sb!disassem:define-instruction-format
     (break 32 :default-printer
-           '(:name :tab code (:unless (:constant 0) subcode)))
+           '(:name :tab code (:unless (:constant 0) ", " subcode)))
   (op :field (byte 6 26) :value special-op)
   (code :field (byte 10 16))
   (op :field (byte 6 26) :value special-op)
   (code :field (byte 10 16))
-  (subcode :field (byte 10 6) :value 0)
+  (subcode :field (byte 10 6))
   (funct :field (byte 6 0) :value #b001101))
 
 (sb!disassem:define-instruction-format
   (funct :field (byte 6 0) :value #b001101))
 
 (sb!disassem:define-instruction-format
   nil)
 
 (defun snarf-error-junk (sap offset &optional length-only)
   nil)
 
 (defun snarf-error-junk (sap offset &optional length-only)
-  (let* ((length (sb!sys:sap-ref-8 sap offset))
+  (let* ((length (sap-ref-8 sap offset))
          (vector (make-array length :element-type '(unsigned-byte 8))))
          (vector (make-array length :element-type '(unsigned-byte 8))))
-    (declare (type sb!sys:system-area-pointer sap)
+    (declare (type system-area-pointer sap)
              (type (unsigned-byte 8) length)
              (type (simple-array (unsigned-byte 8) (*)) vector))
     (cond (length-only
            (values 0 (1+ length) nil nil))
           (t
              (type (unsigned-byte 8) length)
              (type (simple-array (unsigned-byte 8) (*)) vector))
     (cond (length-only
            (values 0 (1+ length) nil nil))
           (t
-           (sb!kernel:copy-ub8-from-system-area sap (1+ offset)
-                                                vector 0 length)
+           (copy-ub8-from-system-area sap (1+ offset) vector 0 length)
            (collect ((sc-offsets)
                      (lengths))
              (lengths 1)                ; the length byte
            (collect ((sc-offsets)
                      (lengths))
              (lengths 1)                ; the length byte
 (defun break-control (chunk inst stream dstate)
   (declare (ignore inst))
   (flet ((nt (x) (if stream (sb!disassem:note x dstate))))
 (defun break-control (chunk inst stream dstate)
   (declare (ignore inst))
   (flet ((nt (x) (if stream (sb!disassem:note x dstate))))
-    (case (break-code chunk dstate)
-      (#.error-trap
-       (nt "Error trap")
-       (sb!disassem:handle-break-args #'snarf-error-junk stream dstate))
-      (#.cerror-trap
-       (nt "Cerror trap")
-       (sb!disassem:handle-break-args #'snarf-error-junk stream dstate))
-      (#.breakpoint-trap
-       (nt "Breakpoint trap"))
-      (#.pending-interrupt-trap
-       (nt "Pending interrupt trap"))
-      (#.halt-trap
-       (nt "Halt trap"))
-      (#.fun-end-breakpoint-trap
-       (nt "Function end breakpoint trap"))
-    )))
+    (when (= (break-code chunk dstate) 0)
+      (case (break-subcode chunk dstate)
+        (#.halt-trap
+         (nt "Halt trap"))
+        (#.pending-interrupt-trap
+         (nt "Pending interrupt trap"))
+        (#.error-trap
+         (nt "Error trap")
+         (sb!disassem:handle-break-args #'snarf-error-junk stream dstate))
+        (#.cerror-trap
+         (nt "Cerror trap")
+         (sb!disassem:handle-break-args #'snarf-error-junk stream dstate))
+        (#.breakpoint-trap
+         (nt "Breakpoint trap"))
+        (#.fun-end-breakpoint-trap
+         (nt "Function end breakpoint trap"))
+        (#.after-breakpoint-trap
+         (nt "After breakpoint trap"))
+        (#.pseudo-atomic-trap
+         (nt "Pseudo atomic trap"))
+        (#.object-not-list-trap
+         (nt "Object not list trap"))
+        (#.object-not-instance-trap
+         (nt "Object not instance trap"))
+        (#.single-step-around-trap
+         (nt "Single step around trap"))
+        (#.single-step-before-trap
+         (nt "Single step before trap"))))))
 
 (define-instruction break (segment code &optional (subcode 0))
   (:declare (type (unsigned-byte 10) code subcode))
   (:printer break ((op special-op) (funct #b001101))
 
 (define-instruction break (segment code &optional (subcode 0))
   (:declare (type (unsigned-byte 10) code subcode))
   (:printer break ((op special-op) (funct #b001101))
-            '(:name :tab code (:unless (:constant 0) subcode))
-            :control #'break-control )
+            '(:name :tab code (:unless (:constant 0) ", " subcode))
+            :control #'break-control)
   :pinned
   (:cost 0)
   (:delay 0)
   :pinned
   (:cost 0)
   (:delay 0)
                           (ash (+ posn (component-header-length))
                                (- n-widetag-bits word-shift)))))))
 
                           (ash (+ posn (component-header-length))
                                (- n-widetag-bits word-shift)))))))
 
-(define-instruction fun-header-word (segment)
+(define-instruction simple-fun-header-word (segment)
   :pinned
   (:cost 0)
   (:delay 0)
   :pinned
   (:cost 0)
   (:delay 0)
    segment 12 3
    #'(lambda (segment posn delta-if-after)
        (let ((delta (funcall calc label posn delta-if-after)))
    segment 12 3
    #'(lambda (segment posn delta-if-after)
        (let ((delta (funcall calc label posn delta-if-after)))
-          (when (<= (- (ash 1 15)) delta (1- (ash 1 15)))
+          (when (typep delta '(signed-byte 16))
             (emit-back-patch segment 4
                              #'(lambda (segment posn)
                                  (assemble (segment vop)
             (emit-back-patch segment 4
                              #'(lambda (segment posn)
                                  (assemble (segment vop)
                    (inst or temp (ldb (byte 16 0) delta))
                    (inst addu dst src temp))))))
 
                    (inst or temp (ldb (byte 16 0) delta))
                    (inst addu dst src temp))))))
 
-;; code = fn - header - label-offset + other-pointer-tag
-(define-instruction compute-code-from-fn (segment dst src label temp)
+;; code = lip - header - label-offset + other-pointer-lowtag
+(define-instruction compute-code-from-lip (segment dst src label temp)
   (:declare (type tn dst src temp) (type label label))
   (:attributes variable-length)
   (:dependencies (reads src) (writes dst) (writes temp))
   (:declare (type tn dst src temp) (type label label))
   (:attributes variable-length)
   (:dependencies (reads src) (writes dst) (writes temp))
                                 (component-header-length)))))))
 
 ;; lra = code + other-pointer-tag + header + label-offset - other-pointer-tag
                                 (component-header-length)))))))
 
 ;; lra = code + other-pointer-tag + header + label-offset - other-pointer-tag
+;;     = code + header + label-offset
 (define-instruction compute-lra-from-code (segment dst src label temp)
   (:declare (type tn dst src temp) (type label label))
   (:attributes variable-length)
 (define-instruction compute-lra-from-code (segment dst src label temp)
   (:declare (type tn dst src temp) (type label label))
   (:attributes variable-length)