Micro-optimize calling assembly routines on x86oids.
authorStas Boukarev <stassats@gmail.com>
Wed, 4 Sep 2013 22:10:19 +0000 (02:10 +0400)
committerStas Boukarev <stassats@gmail.com>
Wed, 4 Sep 2013 22:10:19 +0000 (02:10 +0400)
Do not check for multiple values in the :full-call return sequence, it
always returns just one value and CLC is issued before returning.

src/assembly/x86-64/arith.lisp
src/assembly/x86-64/support.lisp
src/assembly/x86/arith.lisp
src/assembly/x86/support.lisp

index c0c773f..6a1fe24 100644 (file)
@@ -21,9 +21,7 @@
                                         (:policy :safe)
                                         (:save-p t))
                 ((:arg x (descriptor-reg any-reg) rdx-offset)
-                 (:arg y (descriptor-reg any-reg)
-                       ;; this seems wrong esi-offset -- FIXME: What's it mean?
-                       rdi-offset)
+                 (:arg y (descriptor-reg any-reg) rdi-offset)
 
                  (:res res (descriptor-reg any-reg) rdx-offset)
 
index 1bd5887..62bc41f 100644 (file)
@@ -21,8 +21,7 @@
       `((note-this-location ,vop :call-site)
         (inst mov temp-reg-tn (make-fixup ',name :assembly-routine))
         (inst call temp-reg-tn)
-        (note-this-location ,vop :single-value-return)
-        (inst cmov :c rsp-tn rbx-tn))
+        (note-this-location ,vop :single-value-return))
       '((:save-p :compute-only))))
     (:none
      (values
index 52b3efc..ea10b50 100644 (file)
@@ -21,9 +21,7 @@
                                         (:policy :safe)
                                         (:save-p t))
                 ((:arg x (descriptor-reg any-reg) edx-offset)
-                 (:arg y (descriptor-reg any-reg)
-                       ;; this seems wrong esi-offset -- FIXME: What's it mean?
-                       edi-offset)
+                 (:arg y (descriptor-reg any-reg) edi-offset)
 
                  (:res res (descriptor-reg any-reg) edx-offset)
 
index 7985f7c..5c28593 100644 (file)
      (values
       `((note-this-location ,vop :call-site)
         (inst call (make-fixup ',name :assembly-routine))
-        (note-this-location ,vop :single-value-return)
-        (cond
-          ((member :cmov *backend-subfeatures*)
-           (inst cmov :c esp-tn ebx-tn))
-          (t
-           (let ((single-value (gen-label)))
-             (inst jmp :nc single-value)
-             (move esp-tn ebx-tn)
-             (emit-label single-value)))))
+        (note-this-location ,vop :single-value-return))
       '((:save-p :compute-only))))))
 
 (defun generate-return-sequence (style)