From: Daniel B. <da...@us...> - 2003-01-19 16:52:34
|
Update of /cvsroot/sbcl/sbcl/src/compiler/x86 In directory sc8-pr-cvs1:/tmp/cvs-serv28344/src/compiler/x86 Modified Files: Tag: dan_native_threads_branch macros.lisp parms.lisp system.lisp Log Message: "0.7.9.54.thread.17" #+thats-not-a-thread-its-a-promise To reduce the number of hardcoded offsets to struct thread elements in Lisp, we move the struct thread definition into objdef.lisp But this creates circular dependencies in C-land, where the first half of sbcl.h has #defines that all the other headers depend on, but the second half has structures that depend on all the other headers. So, hack up genesis to write n header files (config.h, constants.h, static-symbols.h, plus one per primitive-object) instead of one. Now we can do some cleanup of the more gross uses of magic numbers in Lisp (debug-int, pseudo-atomic macro, etc) Lost *current-thread* : as a struct thread * it was useless, and as a pid it was unprintable 75% of the time, a native word pid is not a fixnum. Settled the interface for protect_control_stack_guard_page: it takes a pid is_valid_lisp_addr fixed to check all control stacks, not just the first one Parent thread now catches signals from dying children and cleans up after them (see destroy_thread) Index: macros.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/x86/macros.lisp,v retrieving revision 1.10.2.5 retrieving revision 1.10.2.6 diff -u -d -r1.10.2.5 -r1.10.2.6 --- macros.lisp 16 Jan 2003 17:15:20 -0000 1.10.2.5 +++ macros.lisp 19 Jan 2003 16:51:56 -0000 1.10.2.6 @@ -331,15 +331,16 @@ (let ((label (gensym "LABEL-"))) `(let ((,label (gen-label))) (inst gs-segment-prefix) - (inst mov (make-ea :byte :disp (* 4 23)) 1) ;FIXME EVIL HARDCODED NUMBER + (inst mov (make-ea :byte :disp (* 4 thread-pseudo-atomic-atomic-slot)) 1) (inst gs-segment-prefix) - (inst mov (make-ea :byte :disp (* 4 24)) 0) - ;(23 and 24 are the slot offsets - ,@forms ;for *p-a-a* and *p-a-i* in struct thread) + (inst mov (make-ea :byte + :disp (* 4 thread-pseudo-atomic-interrupted-slot)) 0) + ,@forms (inst gs-segment-prefix) - (inst mov (make-ea :byte :disp (* 4 23)) 0) + (inst mov (make-ea :byte :disp (* 4 thread-pseudo-atomic-atomic-slot)) 0) (inst gs-segment-prefix) - (inst cmp (make-ea :byte :disp (* 4 24)) 0) + (inst cmp (make-ea :byte + :disp (* 4 thread-pseudo-atomic-interrupted-slot)) 0) (inst jmp :eq ,label) ;; if PAI was set, interrupts were disabled at the same time ;; using the process signal mask. Index: parms.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/x86/parms.lisp,v retrieving revision 1.30.6.4 retrieving revision 1.30.6.5 diff -u -d -r1.30.6.4 -r1.30.6.5 --- parms.lisp 18 Dec 2002 17:23:44 -0000 1.30.6.4 +++ parms.lisp 19 Jan 2003 16:52:00 -0000 1.30.6.5 @@ -256,7 +256,7 @@ *free-interrupt-context-index* *free-tls-index* - *current-thread* + ;; *current-thread* *allocation-pointer* *binding-stack-pointer* Index: system.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/x86/system.lisp,v retrieving revision 1.15.6.2 retrieving revision 1.15.6.3 diff -u -d -r1.15.6.2 -r1.15.6.3 --- system.lisp 5 Dec 2002 01:38:54 -0000 1.15.6.2 +++ system.lisp 19 Jan 2003 16:52:00 -0000 1.15.6.3 @@ -274,19 +274,20 @@ (:generator 1 (inst break pending-interrupt-trap))) -(defknown sb!di::nth-interrupt-context-sap ((unsigned-byte 32)) +(defknown current-thread-offset-sap ((unsigned-byte 32)) system-area-pointer (flushable)) -(define-vop (sb!di::nth-interrupt-context-sap) +(define-vop (current-thread-offset-sap) (:results (sap :scs (sap-reg))) (:result-types system-area-pointer) - (:translate sb!di::nth-interrupt-context-sap) + (:translate current-thread-offset-sap) (:args (n :scs (unsigned-reg) :target sap)) (:arg-types unsigned-num) (:policy :fast-safe) (:generator 2 (inst gs-segment-prefix) - (inst mov sap (make-ea :dword :disp (* 4 11) :index n :scale 4)))) + (inst mov sap (make-ea :dword :disp 0 + :index n :scale 4)))) (define-vop (halt) (:generator 1 |