X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fmips%2Finsts.lisp;h=dec4636a0031a8baa1f9603a38c6bac4370e5880;hb=40b6c8b10330df5f1a3cc17e309857a7465ebc3f;hp=2f1b723301d51b22eb19d9ef25b55d0ce77d08ac;hpb=02567855a57e1ee0974c4c8513bde7625702c1b4;p=sbcl.git diff --git a/src/compiler/mips/insts.lisp b/src/compiler/mips/insts.lisp index 2f1b723..dec4636 100644 --- a/src/compiler/mips/insts.lisp +++ b/src/compiler/mips/insts.lisp @@ -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 @@ -1064,6 +1063,10 @@ (declare (ignore inst)) (flet ((nt (x) (if stream (sb!disassem:note x dstate)))) (case (break-code 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)) @@ -1072,19 +1075,23 @@ (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")) + (#.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")) ))) (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 ) + :control #'break-control) :pinned (:cost 0) (:delay 0) @@ -1143,7 +1150,7 @@ (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) @@ -1164,7 +1171,7 @@ 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) @@ -1178,8 +1185,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 +1214,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)