X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcompiler%2Fppc%2Finsts.lisp;h=cdb9f5a50364da3d2504bf8408c2718ce03a01c3;hb=debae3c18d31b5222be4d5de8dcb2601336e24a4;hp=b14927a98d530185b2eeffc550b0ef6751f73c0b;hpb=d319b944d934f3efbb01a2a345c46bafd40857d0;p=sbcl.git diff --git a/src/compiler/ppc/insts.lisp b/src/compiler/ppc/insts.lisp index b14927a..cdb9f5a 100644 --- a/src/compiler/ppc/insts.lisp +++ b/src/compiler/ppc/insts.lisp @@ -42,7 +42,7 @@ (defvar *disassem-use-lisp-reg-names* t) -(!def-vm-support-routine location-number (loc) +(defun location-number (loc) (etypecase loc (null) (number) @@ -640,8 +640,7 @@ (#.fun-end-breakpoint-trap (nt "Function end breakpoint trap")) (#.object-not-instance-trap - (nt "Object not instance trap")) - ))) + (nt "Object not instance trap"))))) (eval-when (:compile-toplevel :execute) @@ -869,7 +868,7 @@ (when (typep si 'fixup) (ecase ,fixup ((:ha :l) (note-fixup segment ,fixup si))) - (setq si 0)) + (setq si (or (fixup-offset si) 0))) (emit-d-form-inst segment ,op (reg-tn-encoding rt) (reg-tn-encoding ra) si))))) (define-d-rs-ui-instruction (name op &key (cost 1) other-dependencies) @@ -1819,7 +1818,7 @@ `(inst nor. ,ra ,rs ,rs)) - (!def-vm-support-routine emit-nop (segment) + (defun emit-nop (segment) (emit-word segment #x60000000)) (define-instruction-macro extlwi (ra rs n b) @@ -1840,6 +1839,12 @@ (define-instruction-macro srwi. (ra rs n) `(inst rlwinm. ,ra ,rs (- 32 ,n) ,n 31)) + (define-instruction-macro clrlwi (ra rs n) + `(inst rlwinm ,ra ,rs 0 ,n 31)) + + (define-instruction-macro clrlwi. (ra rs n) + `(inst rlwinm. ,ra ,rs 0 ,n 31)) + (define-instruction-macro clrrwi (ra rs n) `(inst rlwinm ,ra ,rs 0 0 (- 31 ,n))) @@ -2083,10 +2088,8 @@ (inst ori temp temp (ldb (byte 16 0) delta)) (inst add dst src temp)))))) -;; this function is misnamed. should be compute-code-from-lip, -;; if the use in xep-allocate-frame is typical -;; (someone says 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-tag +(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)) @@ -2101,6 +2104,7 @@ (component-header-length)))))) ;; code = lra - other-pointer-tag - header - label-offset + other-pointer-tag +;; = lra - (header + label-offset) (define-instruction compute-code-from-lra (segment dst src label temp) (:declare (type tn dst src temp) (type label label)) (:attributes variable-length) @@ -2114,6 +2118,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)