From: Douglas K. <sn...@us...> - 2014-02-01 04:23:58
|
The branch "master" has been updated in SBCL: via 39f9608c0b01c5b775af375f47c0993dcc93cac3 (commit) from b0e67df8b369203e1cd0abe71a04f93285798695 (commit) - Log ----------------------------------------------------------------- commit 39f9608c0b01c5b775af375f47c0993dcc93cac3 Author: Douglas Katzman <do...@go...> Date: Fri Jan 31 23:22:36 2014 -0500 Improve CURRENT-THREAD-OFFSET-SAP on x86-64 --- src/compiler/x86-64/system.lisp | 19 ++++++++++++++++--- 1 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/compiler/x86-64/system.lisp b/src/compiler/x86-64/system.lisp index 083374f..013bf2f 100644 --- a/src/compiler/x86-64/system.lisp +++ b/src/compiler/x86-64/system.lisp @@ -260,16 +260,29 @@ system-area-pointer (flushable)) #!+sb-thread +(progn +(define-vop (current-thread-offset-sap/c) + (:results (sap :scs (sap-reg))) + (:result-types system-area-pointer) + (:translate current-thread-offset-sap) + (:info n) + ;; CONSTANT-DISPLACEMENT could be used here (modulo its incorrectness), + ;; except that negative indices are clearly nonsensical in this case. + (:arg-types (:constant (unsigned-byte 27))) ; as per 'target-thread.lisp' + (:policy :fast-safe) + (:generator 2 + (inst mov sap (make-ea :qword :base thread-base-tn :disp (ash n 3))))) (define-vop (current-thread-offset-sap) (:results (sap :scs (sap-reg))) (:result-types system-area-pointer) (:translate current-thread-offset-sap) - (:args (n :scs (unsigned-reg) :target sap)) - (:arg-types unsigned-num) + (:args (n :scs (any-reg) :target sap)) + (:arg-types tagged-num) (:policy :fast-safe) (:generator 2 (inst mov sap - (make-ea :qword :base thread-base-tn :disp 0 :index n :scale 8)))) + (make-ea :qword :base thread-base-tn :index n + :scale (ash 1 (- 3 n-fixnum-tag-bits))))))) (define-vop (halt) (:generator 1 ----------------------------------------------------------------------- hooks/post-receive -- SBCL |