(%test-headers value target not-p nil headers drop-through))
(defun %test-lowtag (value target not-p lowtag)
- (move-qword-to-eax value)
- (inst and al-tn lowtag-mask)
- (inst cmp al-tn lowtag)
- (inst jmp (if not-p :ne :e) target))
+ (inst lea eax-tn (make-ea :dword :base value :disp (- lowtag)))
+ (inst test al-tn lowtag-mask)
+ (inst jmp (if not-p :nz :z) target))
(defun %test-headers (value target not-p function-p headers
&optional (drop-through (gen-label)))
(if not-p
(values not-target target)
(values target not-target))
- (generate-fixnum-test value)
- (inst jmp :e yep)
(move-qword-to-eax value)
+ (inst test al-tn fixnum-tag-mask)
+ (inst jmp :e yep)
+
(inst and al-tn lowtag-mask)
(inst cmp al-tn other-pointer-lowtag)
(inst jmp :ne nope)
(values not-target target)
(values target not-target))
;; Is it a fixnum?
- (generate-fixnum-test value)
(move rax-tn value)
+ (inst test al-tn fixnum-tag-mask)
(inst jmp :e fixnum)
;; If not, is it an other pointer?