(n-src src))
`(unless (location= ,n-dst ,n-src)
(sc-case ,n-dst
- (single-reg
- (inst movss ,n-dst ,n-src))
- (double-reg
- (inst movsd ,n-dst ,n-src))
+ ((single-reg complex-single-reg)
+ (aver (xmm-register-p ,n-src))
+ (inst movaps ,n-dst ,n-src))
+ ((double-reg complex-double-reg)
+ (aver (xmm-register-p ,n-src))
+ (inst movapd ,n-dst ,n-src))
(t
(inst mov ,n-dst ,n-src))))))
(progn ,@body)
(pseudo-atomic ,@body)))
+;;; Unsafely clear pa flags so that the image can properly lose in a
+;;; pa section.
+#!+sb-thread
+(defmacro %clear-pseudo-atomic ()
+ '(inst mov (make-ea :qword :base thread-base-tn
+ :disp (* 8 thread-pseudo-atomic-bits-slot))
+ 0))
+
#!+sb-thread
(defmacro pseudo-atomic (&rest forms)
(with-unique-names (label)