From: Nikodemus S. <de...@us...> - 2009-05-08 19:08:16
|
Update of /cvsroot/sbcl/sbcl/src/compiler/generic In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv31092/src/compiler/generic Modified Files: objdef.lisp Log Message: 1.0.28.30: DEFGLOBAL, ALWAYS-BOUND, GLOBAL, SYMBOL-GLOBAL-VALUE * ALWAYS-BOUND allows the compiler to elide boundness checks for symbol value access, and prohibits MAKUNBOUND. This is handled via a new globaldb entry. GLOBAL makes the compiler elide TLS checking for symbol values access, and prohibits rebinding. This is handled via new globaldb :variable :type, namely :global. DEFGLOBAL is build on top of these. Global variables are mainly an efficiency measure on threaded builds, but can also express intention as they prohibit rebinding. * Add %SET-SYMBOL-GLOBAL-VALUE, FAST-SYMBOL-GLOBAL-VALUE, and SYMBOL-GLOBAL-VALUE VOPs to all backends. On unithreaded builds these are trivial copies of the non-global versions. * Tell SB-CLTL2 about both GLOBAL and ALWAYS-BOUND declarations too. * Document in the Efficiency chapter of the manual. * Prohibit declaring constants special. * Tests. Later: use these new features inside SBCL itself. For now there is only a single DEFGLOBAL used, but more could well be. Index: objdef.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/generic/objdef.lisp,v retrieving revision 1.63 retrieving revision 1.64 diff -u -d -r1.63 -r1.64 --- objdef.lisp 7 May 2009 11:11:05 -0000 1.63 +++ objdef.lisp 8 May 2009 19:08:08 -0000 1.64 @@ -322,7 +322,9 @@ ;; first data slot, and if you subtract 7 you get a symbol header. ;; also the CAR of NIL-as-end-of-list - (value :init :unbound :ref-known (flushable) :ref-trans symbol-global-value) + (value :init :unbound + :set-trans %set-symbol-global-value + :set-known (unsafe)) ;; also the CDR of NIL-as-end-of-list. Its reffer needs special ;; care for this reason, as hash values must be fixnums. (hash :set-trans %set-symbol-hash) |