X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fx86%2Ftype-vops.lisp;h=062c47f150d86e090b52d14b28f68bb3ec276084;hb=eb6f8dd033501c7372b27967a2cb7750560897bd;hp=36f49a60123126233e9e0536bd3c9ee70a6b6e3d;hpb=faa0ea92986f4c2b361c9378c69a540e42a70c62;p=sbcl.git diff --git a/src/compiler/x86/type-vops.lisp b/src/compiler/x86/type-vops.lisp index 36f49a6..062c47f 100644 --- a/src/compiler/x86/type-vops.lisp +++ b/src/compiler/x86/type-vops.lisp @@ -65,12 +65,6 @@ (inst cmp al-tn lowtag) (inst jmp (if not-p :ne :e) target)) -(defun %test-lowtag-and-headers (value target not-p lowtag function-p headers) - (let ((drop-through (gen-label))) - (%test-lowtag value (if not-p drop-through target) nil lowtag) - (%test-headers value target not-p function-p headers drop-through t))) - - (defun %test-headers (value target not-p function-p headers &optional (drop-through (gen-label)) al-loaded) (let ((lowtag (if function-p fun-pointer-lowtag other-pointer-lowtag))) @@ -145,7 +139,7 @@ (defmacro !define-type-vops (pred-name check-name ptype error-code (&rest type-codes) - &key (variant nil variant-p)) + &key (variant nil variant-p) &allow-other-keys) ;; KLUDGE: UGH. Why do we need this eval? Can't we put this in the ;; expansion? (let* ((cost (cost-to-test-types (mapcar #'eval type-codes))) @@ -170,6 +164,14 @@ ;;;; other integer ranges +(define-vop (fixnump/unsigned-byte-32 simple-type-predicate) + (:args (value :scs (unsigned-reg))) + (:arg-types unsigned-num) + (:translate fixnump) + (:generator 5 + (inst cmp value #.sb!xc:most-positive-fixnum) + (inst jmp (if not-p :a :be) target))) + ;;; A (SIGNED-BYTE 32) can be represented with either fixnum or a bignum with ;;; exactly one digit.