((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)))