X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcompiler%2Fppc%2Fvm.lisp;h=720f8b31af2578ebfd935476d975e0fd94af0434;hb=9e7a18990d8cfe726edca3450f84510f5676a3e1;hp=2782b4d594e99e928bc1d28b5e79bc805b8b1c81;hpb=a98da03220d7345b066e4092285f0dfce55d9374;p=sbcl.git diff --git a/src/compiler/ppc/vm.lisp b/src/compiler/ppc/vm.lisp index 2782b4d..720f8b3 100644 --- a/src/compiler/ppc/vm.lisp +++ b/src/compiler/ppc/vm.lisp @@ -273,7 +273,7 @@ ;;; If VALUE can be represented as an immediate constant, then return the ;;; appropriate SC number, otherwise return NIL. -(!def-vm-support-routine immediate-constant-sc (value) +(defun immediate-constant-sc (value) (typecase value ((integer 0 0) (sc-number-or-lose 'zero)) @@ -287,7 +287,7 @@ (sc-number-or-lose 'immediate) nil)))) -(!def-vm-support-routine boxed-immediate-sc-p (sc) +(defun boxed-immediate-sc-p (sc) (or (eql sc (sc-number-or-lose 'zero)) (eql sc (sc-number-or-lose 'null)) (eql sc (sc-number-or-lose 'immediate)))) @@ -344,7 +344,7 @@ ;;; This function is called by debug output routines that want a pretty name ;;; for a TN's location. It returns a thing that can be printed with PRINC. -(!def-vm-support-routine location-print-name (tn) +(defun location-print-name (tn) (declare (type tn tn)) (let ((sb (sb-name (sc-sb (tn-sc tn)))) (offset (tn-offset tn))) @@ -357,7 +357,7 @@ (constant (format nil "Const~D" offset)) (immediate-constant "Immed")))) -(!def-vm-support-routine combination-implementation-style (node) +(defun combination-implementation-style (node) (declare (type sb!c::combination node)) (flet ((valid-funtype (args result) (sb!c::valid-fun-use node @@ -369,7 +369,7 @@ ((or (valid-funtype '(fixnum fixnum) '*) (valid-funtype '((signed-byte 32) (signed-byte 32)) '*) (valid-funtype '((unsigned-byte 32) (unsigned-byte 32)) '*)) - (values :direct nil)) + (values :maybe nil)) (t (values :default nil)))) (logbitp (cond @@ -381,23 +381,23 @@ (t (values :default nil)))) ;; FIXME: can handle MIN and MAX here (sb!kernel:%ldb - (cond - ((or (valid-funtype '((constant-arg (integer 1 29)) - (constant-arg (integer 0 29)) - fixnum) - 'fixnum) - (valid-funtype '((constant-arg (integer 1 29)) - (constant-arg (integer 0 29)) - (signed-byte 32)) - 'fixnum) - (valid-funtype '((constant-arg (integer 1 29)) - (constant-arg (integer 0 29)) - (unsigned-byte 32)) - 'fixnum)) - (values :transform - '(lambda (size posn integer) - (%%ldb integer size posn)))) - (t (values :default nil)))) + (flet ((validp (type width) + (and (valid-funtype `((constant-arg (integer 1 29)) + (constant-arg (mod ,width)) + ,type) + 'fixnum) + (destructuring-bind (size posn integer) + (sb!c::basic-combination-args node) + (declare (ignore integer)) + (<= (+ (sb!c::lvar-value size) + (sb!c::lvar-value posn)) + width))))) + (if (or (validp 'fixnum 29) + (validp '(signed-byte 32) 32) + (validp '(unsigned-byte 32) 32)) + (values :transform '(lambda (size posn integer) + (%%ldb integer size posn))) + (values :default nil)))) (t (values :default nil))))) (defun primitive-type-indirect-cell-type (ptype)