X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fx86%2Fsystem.lisp;h=6ee2c633465019fd5116d0e096ee9c43e3fc4388;hb=7aef55b130d95c384b63422807f1848faa9aba5a;hp=77981e8ed278e9a87fa2354610964fcb06734aa0;hpb=d4d54599b5acc39f97ff880507388687b684d36a;p=sbcl.git diff --git a/src/compiler/x86/system.lisp b/src/compiler/x86/system.lisp index 77981e8..6ee2c63 100644 --- a/src/compiler/x86/system.lisp +++ b/src/compiler/x86/system.lisp @@ -254,6 +254,13 @@ (:generator 1 (inst break pending-interrupt-trap))) +#!+sb-safepoint +(define-vop (insert-safepoint) + (:policy :fast-safe) + (:translate sb!kernel::gc-safepoint) + (:generator 0 + (emit-safepoint))) + #!+sb-thread (defknown current-thread-offset-sap ((unsigned-byte 32)) system-area-pointer (flushable)) @@ -263,10 +270,19 @@ (:results (sap :scs (sap-reg))) (:result-types system-area-pointer) (:translate current-thread-offset-sap) - (:args (n :scs (unsigned-reg) :target sap)) + (:args (n :scs (unsigned-reg) + #!+win32 #!+win32 :to :save + #!-win32 #!-win32 :target sap)) (:arg-types unsigned-num) (:policy :fast-safe) (:generator 2 + #!+win32 + (progn + ;; Note that SAP conflicts with N in this case, hence the reader + ;; conditionals above. + (inst mov sap (make-ea :dword :disp +win32-tib-arbitrary-field-offset+) :fs) + (inst mov sap (make-ea :dword :base sap :disp 0 :index n :scale 4))) + #!-win32 (inst mov sap (make-ea :dword :disp 0 :index n :scale 4) :fs))) (define-vop (halt) @@ -372,18 +388,22 @@ number of CPU cycles elapsed as secondary value. EXPERIMENTAL." (define-vop (%read-barrier) (:policy :fast-safe) (:translate %read-barrier) - (:generator 3 - (inst add (make-ea :dword :base esp-tn) 0 :lock))) + (:generator 3)) #!+memory-barrier-vops (define-vop (%write-barrier) (:policy :fast-safe) (:translate %write-barrier) - (:generator 3 - (inst add (make-ea :dword :base esp-tn) 0 :lock))) + (:generator 3)) #!+memory-barrier-vops (define-vop (%data-dependency-barrier) (:policy :fast-safe) (:translate %data-dependency-barrier) (:generator 3)) + +(define-vop (pause) + (:translate spin-loop-hint) + (:policy :fast-safe) + (:generator 0 + (inst pause)))