Microoptimize (signed-byte 64) type test on x86-64.
authorStas Boukarev <stassats@gmail.com>
Thu, 1 Aug 2013 17:51:55 +0000 (21:51 +0400)
committerStas Boukarev <stassats@gmail.com>
Thu, 1 Aug 2013 17:51:55 +0000 (21:51 +0400)
Similar to the (unsigned-byte 64) one:
TEST CL, 3
MOV EAX, ECX
=>
MOV EAX, ECX
TEST AL, 3

Also add tests/run-tests-* to .gitignore.

.gitignore
src/compiler/x86-64/type-vops.lisp

index 69a1b3a..82898af 100644 (file)
@@ -35,6 +35,7 @@ src/runtime/ppc-linux-mcontext.h
 src/runtime/sparc-funcdef.h
 tests/test-status.lisp-expr
 tests/*.so
+tests/run-tests-*
 tools-for-build/determine-endianness
 tools-for-build/grovel-headers
 tools-for-build/grovel-headers.exe
index 5f2e78f..0727ca6 100644 (file)
         (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?
-        ;; Is it a fixnum?
         (move rax-tn value)
         (inst test al-tn fixnum-tag-mask)
         (inst jmp :e fixnum)