X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ftarget-type.lisp;h=1f877a01bb087f2044ab61da80acf744d2372d10;hb=cd1b14acf6f548b28b8a14e554d779f0473122ec;hp=a3775fb56eb7b67f6f98ee6a5e6e884753f12240;hpb=faafcfc8d751c0f549f8d30ff2ea4bc7342a7329;p=sbcl.git diff --git a/src/code/target-type.lisp b/src/code/target-type.lisp index a3775fb..1f877a0 100644 --- a/src/code/target-type.lisp +++ b/src/code/target-type.lisp @@ -35,7 +35,8 @@ array-type character-set-type built-in-classoid - cons-type) + cons-type + #!+sb-simd-pack simd-pack-type) (values (%typep obj type) t)) (classoid (if (if (csubtypep type (specifier-type 'function)) @@ -130,19 +131,11 @@ ;;; Clear memoization of all type system operations that can be ;;; altered by type definition/redefinition. ;;; -;;; FIXME: This should be autogenerated. (defun clear-type-caches () - (declare (special *type-system-initialized*)) - (when *type-system-initialized* - (dolist (sym '(values-specifier-type-cache-clear - values-type-union-cache-clear - type-union2-cache-clear - values-subtypep-cache-clear - csubtypep-cache-clear - type-intersection2-cache-clear - values-type-intersection-cache-clear - type=-cache-clear)) - (funcall (the function (symbol-function sym))))) + ;; FIXME: We would like to differentiate between different cache + ;; kinds, but at the moment all our caches pretty much are type + ;; caches. + (drop-all-hash-caches) (values)) ;;; This is like TYPE-OF, only we return a CTYPE structure instead of @@ -174,6 +167,12 @@ (make-cons-type *universal-type* *universal-type*)) (character (specifier-type 'character)) + #!+sb-simd-pack + (simd-pack + (let ((type (nth (%simd-pack-tag x) *simd-pack-element-types*))) + (if type + (specifier-type `(simd-pack ,type)) + (specifier-type 'simd-pack)))) (t (classoid-of x))))