From: Paul K. <pk...@us...> - 2009-06-28 21:37:10
|
Update of /cvsroot/sbcl/sbcl In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv32093 Modified Files: version.lisp-expr NEWS base-target-features.lisp-expr make-config.sh package-data-list.lisp-expr Log Message: 1.0.29.54: Inline unboxed constants on x86[-64] * New build-time feature: inline-constants, which specifies that SB!C and SB!VM implement a protocol described in base-target-features.lisp-expr. Backends implementing that feature are able to load constants from code components, in a section that follows the actual executable code. * Implement the protocol on x86 and x86-64, and use it for float constants, and, on x86-64 only, mid-sized (> 2^(29-32), but still machine-sized) integers. * Use the new feature in integer and float arithmetic VOPs. * Adjust a few test cases to take newly consing situations into account. * Clean-up: - New build-time feature: float-eql-vops, which disable rewriting EQL of single and double floats in terms of foo-float*-bits. - Fix a typo (unused variable lookup) in TWO-ARG-+/- Index: version.lisp-expr =================================================================== RCS file: /cvsroot/sbcl/sbcl/version.lisp-expr,v retrieving revision 1.4546 retrieving revision 1.4547 diff -u -d -r1.4546 -r1.4547 --- version.lisp-expr 28 Jun 2009 21:21:04 -0000 1.4546 +++ version.lisp-expr 28 Jun 2009 21:37:05 -0000 1.4547 @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"1.0.29.53" +"1.0.29.54" Index: NEWS =================================================================== RCS file: /cvsroot/sbcl/sbcl/NEWS,v retrieving revision 1.1564 retrieving revision 1.1565 diff -u -d -r1.1564 -r1.1565 --- NEWS 28 Jun 2009 21:18:44 -0000 1.1564 +++ NEWS 28 Jun 2009 21:37:05 -0000 1.1565 @@ -9,8 +9,6 @@ values in other threads. * new feature: SB-INTROSPECT:ALLOCATION-INFORMATION provides information about object allocation. - * optimization: more efficient complex float and real float operations - on x86-64. * optimization: division of a real float by a complex float is implemented with a specialised code sequence. * optimization: MAKE-INSTANCE with non-constant class-argument but constant @@ -31,6 +29,14 @@ * optimization: the compiler now derives simple types for LOAD-VALUE-FORMs. * improvement: less unsafe constant folding in floating point arithmetic, especially for mixed complex/real -float operations. + * optimization: constant double and single floats are stored in native + unboxed format on x86[-64]. + * optimization: smarter code for arithmetic operations with constant floats, + complex floats, or integers on x86[-64]. + * optimization: smarter code for conjugate/multiplication of float complexes + and abs/negate of floats on x86-64. + * optimization: more efficient complex float and real float operations on + x86-64. * improvement: complex float division is slightly more stable. * improvement: DESCRIBE output has been reworked to be easier to read and contains more pertinent information. Index: base-target-features.lisp-expr =================================================================== RCS file: /cvsroot/sbcl/sbcl/base-target-features.lisp-expr,v retrieving revision 1.50 retrieving revision 1.51 diff -u -d -r1.50 -r1.51 --- base-target-features.lisp-expr 25 Jun 2009 15:37:05 -0000 1.50 +++ base-target-features.lisp-expr 28 Jun 2009 21:37:05 -0000 1.51 @@ -167,6 +167,42 @@ ;; ; :complex-float-vops + ;; Enabled automatically for platforms which implement VOPs for EQL + ;; of single and double floats. + ;; + ; :float-eql-vops + + ;; Enabled automatically for platform that can implement inline constants. + ;; + ;; Such platform must implement 5 functions, in SB!VM: + ;; * canonicalize-inline-constant: converts a constant descriptor (list) into + ;; a canonical description, to be used as a key in an EQUAL hash table + ;; and to guide the generation of the constant itself. + ;; * inline-constant-value: given a canonical constant descriptor, computes + ;; two values: + ;; 1. A label that will be used to emit the constant (usually a + ;; sb!assem:label) + ;; 2. A value that will be returned to code generators referring to + ;; the constant (on x86oids, an EA object) + ;; * sort-inline-constants: Receives a vector of unique constants; + ;; the car of each entry is the constant descriptor, and the cdr the + ;; corresponding label. Destructively returns a vector of constants + ;; sorted in emission order. It could actually perform arbitrary + ;; modifications to the vector, e.g. to fuse constants of different + ;; size. + ;; * emit-constant-segment-header: receives the vector of sorted constants + ;; and a flag (true iff speed > space). Expected to emit padding + ;; of some sort between the ELSEWHERE segment and the constants, or some + ;; metadata. + ;; * emit-inline-constant: receives a constant descriptor and its associated + ;; label. Emits the constant. + ;; + ;; Implementing this features lets VOP generators use sb!c:register-inline-constant + ;; to get handles (as returned by sb!vm:inline-constant-value) from constant + ;; descriptors. + ;; + ; :inline-constants + ;; Peter Van Eynde's increase-bulletproofness code for CMU CL ;; ;; Some of the code which was #+high-security before the fork has now Index: make-config.sh =================================================================== RCS file: /cvsroot/sbcl/sbcl/make-config.sh,v retrieving revision 1.88 retrieving revision 1.89 diff -u -d -r1.88 -r1.89 --- make-config.sh 25 Jun 2009 15:37:05 -0000 1.88 +++ make-config.sh 28 Jun 2009 21:37:05 -0000 1.89 @@ -281,7 +281,7 @@ printf ' :compare-and-swap-vops :unwind-to-frame-and-call-vop :raw-instance-init-vops' >> $ltf printf ' :stack-allocatable-closures :stack-allocatable-vectors' >> $ltf printf ' :stack-allocatable-lists :stack-allocatable-fixed-objects' >> $ltf - printf ' :alien-callbacks :cycle-counter' >> $ltf + printf ' :alien-callbacks :cycle-counter :inline-constants ' >> $ltf case "$sbcl_os" in linux | freebsd | netbsd | openbsd | sunos | darwin | win32) printf ' :linkage-table' >> $ltf @@ -297,6 +297,7 @@ printf ' :stack-allocatable-closures :stack-allocatable-vectors' >> $ltf printf ' :stack-allocatable-lists :stack-allocatable-fixed-objects' >> $ltf printf ' :alien-callbacks :cycle-counter :complex-float-vops' >> $ltf + printf ' :float-eql-vops :inline-constants ' >> $ltf elif [ "$sbcl_arch" = "mips" ]; then printf ' :linkage-table' >> $ltf printf ' :stack-allocatable-closures :stack-allocatable-vectors' >> $ltf Index: package-data-list.lisp-expr =================================================================== RCS file: /cvsroot/sbcl/sbcl/package-data-list.lisp-expr,v retrieving revision 1.510 retrieving revision 1.511 diff -u -d -r1.510 -r1.511 --- package-data-list.lisp-expr 25 Jun 2009 15:37:05 -0000 1.510 +++ package-data-list.lisp-expr 28 Jun 2009 21:37:05 -0000 1.511 @@ -312,6 +312,7 @@ "PRIMITIVE-TYPE-OR-LOSE" "PRIMITIVE-TYPE-VOP" "PRIMITIVE-TYPE-NAME" "PUSH-VALUES" "READ-PACKED-BIT-VECTOR" "READ-VAR-INTEGER" "READ-VAR-STRING" + #!+inline-constants "REGISTER-INLINE-CONSTANT" "RESET-STACK-POINTER" "RESTORE-DYNAMIC-STATE" "RETURN-MULTIPLE" "SAVE-DYNAMIC-STATE" "SB" "SB-ALLOCATED-SIZE" "SB-NAME" "SB-OR-LOSE" "SB-P" "SC" "SC-CASE" @@ -2521,6 +2522,11 @@ "GENESIS" "HALT-TRAP" "IGNORE-ME-SC-NUMBER" "IMMEDIATE-CHARACTER-SC-NUMBER" "IMMEDIATE-SAP-SC-NUMBER" "IMMEDIATE-SC-NUMBER" + #!+inline-constants "CANONICALIZE-INLINE-CONSTANT" + #!+inline-constants "INLINE-CONSTANT-VALUE" + #!+inline-constants "EMIT-CONSTANT-SEGMENT-HEADER" + #!+inline-constants "SORT-INLINE-CONSTANTS" + #!+inline-constants "EMIT-INLINE-CONSTANT" "INSTANCE-HEADER-WIDETAG" "INSTANCE-POINTER-LOWTAG" "INSTANCE-SLOTS-OFFSET" "INSTANCE-USAGE" "INTERIOR-REG-SC-NUMBER" "INTERNAL-ERROR-ARGS" |