X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fmips%2Finsts.lisp;h=8e21fd8da28e8f04755f0e9975aad26274c95e36;hb=5c119c97cb1504dfdd5260fe8bcf1b8ac89ea3aa;hp=594e834d498bdb71e505bf88161c633bc3b63a57;hpb=481348f2f96f364374f669786f9fc61348decabc;p=sbcl.git diff --git a/src/compiler/mips/insts.lisp b/src/compiler/mips/insts.lisp index 594e834..8e21fd8 100644 --- a/src/compiler/mips/insts.lisp +++ b/src/compiler/mips/insts.lisp @@ -222,10 +222,10 @@ (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)) - (subcode :field (byte 10 6) :value 0) + (subcode :field (byte 10 6)) (funct :field (byte 6 0) :value #b001101)) (sb!disassem:define-instruction-format @@ -1025,16 +1025,15 @@ 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)))) - (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 - (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 @@ -1063,28 +1062,40 @@ (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)) - '(: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) @@ -1178,8 +1189,8 @@ (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)) @@ -1207,6 +1218,7 @@ (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)