X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fcross-misc.lisp;h=0d68f251cc9b15c1ac5b3c0636a6b8e1c17f7f52;hb=2da80a5263e44a824675283340b2253db2348f5e;hp=df93d816551aec78a9d9b007fd4f1028e13a6a89;hpb=2e91e29892268b2c7e5ab557e8192fa03bce68f2;p=sbcl.git diff --git a/src/code/cross-misc.lisp b/src/code/cross-misc.lisp index df93d81..0d68f25 100644 --- a/src/code/cross-misc.lisp +++ b/src/code/cross-misc.lisp @@ -68,10 +68,11 @@ nil)) ;;; This seems to be the portable Common Lisp type test which -;;; corresponds to the effect of the target SBCL implementation test.. +;;; corresponds to the effect of the target SBCL implementation test... (defun sb!kernel:array-header-p (x) - (and (typep x 'simple-array) - (= 1 (array-rank x)))) + (and (typep x 'array) + (or (not (typep x 'simple-array)) + (/= (array-rank x) 1)))) ;;; GENESIS needs these at cross-compile time. The target ;;; implementation of these is reasonably efficient by virtue of its @@ -118,3 +119,35 @@ (defun symbol-hash (symbol) (declare (type symbol symbol)) (sxhash symbol)) + +;;; These functions are needed for constant-folding. +(defun sb!kernel:simple-array-nil-p (object) + (when (typep object 'array) + (assert (not (eq (array-element-type object) nil)))) + nil) + +(defun sb!kernel:%negate (number) + (- number)) + +(defun sb!kernel:%single-float (number) + (coerce number 'single-float)) + +(defun sb!kernel:%double-float (number) + (coerce number 'double-float)) + +(defun sb!kernel:%ldb (size posn integer) + (ldb (byte size posn) integer)) + +(defun sb!kernel:%dpb (newbyte size posn integer) + (dpb newbyte (byte size posn) integer)) + +(defun sb!kernel:%with-array-data (array start end) + (assert (typep array '(simple-array * (*)))) + (values array start end 0)) + +#!+sparc +(progn + (defun sb!vm::ash-right-signed (num shift) + (ash num (- shift))) + (defun sb!vm::ash-right-unsigned (num shift) + (ash num (- shift))))