X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Ftypetran.lisp;h=6f25b7db11c8f7cbfdc58342264d09b1a74b936a;hb=09f925d42d072d74c6977cc52e3ebf36135d2e15;hp=aeb9a7b4b8cfe7da471c808971ca55781edfb7a3;hpb=aa01df7a18a5d8747423173bda7c20eb46092514;p=sbcl.git diff --git a/src/compiler/typetran.lisp b/src/compiler/typetran.lisp index aeb9a7b..6f25b7d 100644 --- a/src/compiler/typetran.lisp +++ b/src/compiler/typetran.lisp @@ -340,6 +340,20 @@ collect `(<= ,(car pair) ,n-code ,(cdr pair))))))))))) +#!+sb-simd-pack +(defun source-transform-simd-pack-typep (object type) + (if (type= type (specifier-type 'simd-pack)) + `(simd-pack-p ,object) + (once-only ((n-obj object)) + (let ((n-tag (gensym "TAG"))) + `(and + (simd-pack-p ,n-obj) + (let ((,n-tag (%simd-pack-tag ,n-obj))) + (or ,@(loop + for type in (simd-pack-type-element-type type) + for index = (position type *simd-pack-element-types*) + collect `(eql ,n-tag ,index))))))))) + ;;; Return the predicate and type from the most specific entry in ;;; *TYPE-PREDICATES* that is a supertype of TYPE. (defun find-supertype-predicate (type) @@ -607,6 +621,9 @@ (source-transform-cons-typep object ctype)) (character-set-type (source-transform-character-set-typep object ctype)) + #!+sb-simd-pack + (simd-pack-type + (source-transform-simd-pack-typep object ctype)) (t nil)) `(%typep ,object ',type))))