Don't warn when #'(setf fun) is used in the presence of a setf-macro.
[sbcl.git] / src / compiler / x86-64 / macros.lisp
index e77d9c1..781a270 100644 (file)
       ((double-reg complex-double-reg)
        (aver (xmm-register-p src))
        (inst movapd dst src))
+      #!+sb-simd-pack
+      ((int-sse-reg sse-reg)
+       (aver (xmm-register-p src))
+       (inst movdqa dst src))
+      #!+sb-simd-pack
+      ((single-sse-reg double-sse-reg)
+       (aver (xmm-register-p src))
+       (inst movaps dst src))
       (t
        (inst mov dst src)))))
 
 
 (defmacro popw (ptr &optional (slot 0) (lowtag 0))
   `(inst pop (make-ea-for-object-slot ,ptr ,slot ,lowtag)))
+
+(defun call-indirect (offset)
+  (typecase offset
+    ((signed-byte 32)
+     (inst call (make-ea :qword :disp offset)))
+    (t
+     (inst mov temp-reg-tn offset)
+     (inst call (make-ea :qword :base temp-reg-tn)))))
 \f
 ;;;; macros to generate useful values
 
 ;;; object.
 (defun allocation-tramp (alloc-tn size lowtag)
   (inst push size)
-  (inst lea temp-reg-tn (make-ea :qword
-                            :disp (make-fixup "alloc_tramp" :foreign)))
-  (inst call temp-reg-tn)
+  (inst mov alloc-tn (make-fixup "alloc_tramp" :foreign))
+  (inst call alloc-tn)
   (inst pop alloc-tn)
   (when lowtag
     (inst lea alloc-tn (make-ea :byte :base alloc-tn :disp lowtag)))