- fixed typo: fxvector-immutable-flag used in place of
bytevector-immutable-flag in computation of type-immutable-bytevector cmacros.ss - reallocated typed-object types, using previously unused tag #b010 for strings and giving bytevectors both #b001 and #b101 (the latter for immutable bytevectors) so that the maximum bytevector length on 32-bit machines is once again the most-positive fixnum. treating bytevectors rather than strings or fxvectors (or even vectors) special in this regard is appropriate since the maximum number of bytes in a bytevector is maximum-length x 1 rather than maximum-length x 4 for strings, fxvectors, and vectors on 32-bit machines. with this change on 32-bit machines, a vector can occupy up to 1/2 of virtual memory, strings and fxvectors 1/4, and bytevectors 1/8. cmacros.ss - remade boot files original commit: 0694b3a5223ab937379e54079bc88d57309dc51f
This commit is contained in:
parent
f825e23db2
commit
3daedbcaa6
15
LOG
15
LOG
|
@ -404,3 +404,18 @@
|
||||||
patch*
|
patch*
|
||||||
- updated release notes and tweaked user's guide.
|
- updated release notes and tweaked user's guide.
|
||||||
release-notes.stex, objects.stex
|
release-notes.stex, objects.stex
|
||||||
|
- fixed typo: fxvector-immutable-flag used in place of
|
||||||
|
bytevector-immutable-flag in computation of type-immutable-bytevector
|
||||||
|
cmacros.ss
|
||||||
|
- reallocated typed-object types, using previously unused tag #b010
|
||||||
|
for strings and giving bytevectors both #b001 and #b101 (the
|
||||||
|
latter for immutable bytevectors) so that the maximum bytevector
|
||||||
|
length on 32-bit machines is once again the most-positive fixnum.
|
||||||
|
treating bytevectors rather than strings or fxvectors (or even
|
||||||
|
vectors) special in this regard is appropriate since the maximum
|
||||||
|
number of bytes in a bytevector is maximum-length x 1 rather than
|
||||||
|
maximum-length x 4 for strings, fxvectors, and vectors on 32-bit
|
||||||
|
machines. with this change on 32-bit machines, a vector can
|
||||||
|
occupy up to 1/2 of virtual memory, strings and fxvectors 1/4,
|
||||||
|
and bytevectors 1/8.
|
||||||
|
cmacros.ss
|
||||||
|
|
27
s/cmacros.ss
27
s/cmacros.ss
|
@ -705,14 +705,29 @@
|
||||||
(define-constant ptr black-hole #b01000110)
|
(define-constant ptr black-hole #b01000110)
|
||||||
(define-constant ptr sbwp #b01001110)
|
(define-constant ptr sbwp #b01001110)
|
||||||
|
|
||||||
|
;;; on 32-bit machines, vectors get two primary tag bits, including
|
||||||
|
;;; one for the immutable flag, and so do bytevectors, so their maximum
|
||||||
|
;;; lengths are equal to the most-positive fixnum on 32-bit machines.
|
||||||
|
;;; strings and fxvectors get only one primary tag bit each and have
|
||||||
|
;;; to use a different bit for the immutable flag, so their maximum
|
||||||
|
;;; lengths are equal to 1/2 of the most-positive fixnum on 32-bit
|
||||||
|
;;; machines. taking sizes of vector, bytevector, string, and fxvector
|
||||||
|
;;; elements into account, a vector can occupy up to 1/2 of virtual
|
||||||
|
;;; memory, a string or fxvector up to 1/4, and a bytevector up to 1/8.
|
||||||
|
|
||||||
|
;;; on 64-bit machines, vectors get only one of the primary tag bits,
|
||||||
|
;;; bytevectors still get two (but don't need two), and strings and
|
||||||
|
;;; fxvectors still get one. all have maximum lengths equal to the
|
||||||
|
;;; most-positive fixnum.
|
||||||
|
|
||||||
;;; vector type/length field must look like a fixnum. an immutable bit sits just above the fixnum tag, with the length above that.
|
;;; vector type/length field must look like a fixnum. an immutable bit sits just above the fixnum tag, with the length above that.
|
||||||
(define-constant type-vector (constant type-fixnum))
|
(define-constant type-vector (constant type-fixnum))
|
||||||
; #b000 occupied by vectors on 32- and 64-bit machines
|
; #b000 occupied by vectors on 32- and 64-bit machines
|
||||||
(define-constant type-string #b001)
|
(define-constant type-bytevector #b01)
|
||||||
; #b010 unused
|
(define-constant type-string #b010)
|
||||||
(define-constant type-fxvector #b011)
|
(define-constant type-fxvector #b011)
|
||||||
; #b100 occupied by vectors on 32-bit machines, unused on 64-bit machines
|
; #b100 occupied by vectors on 32-bit machines, unused on 64-bit machines
|
||||||
(define-constant type-bytevector #b101)
|
; #b101 occupied by type-immutable-bytevector
|
||||||
(define-constant type-other-number #b0110) ; bit 3 reset for numbers
|
(define-constant type-other-number #b0110) ; bit 3 reset for numbers
|
||||||
(define-constant type-bignum #b00110) ; bit 4 reset for bignums
|
(define-constant type-bignum #b00110) ; bit 4 reset for bignums
|
||||||
(define-constant type-positive-bignum #b000110)
|
(define-constant type-positive-bignum #b000110)
|
||||||
|
@ -778,7 +793,7 @@
|
||||||
(constant most-positive-fixnum)))
|
(constant most-positive-fixnum)))
|
||||||
|
|
||||||
; bytevector length field (high bits) + immutabilty is stored with type
|
; bytevector length field (high bits) + immutabilty is stored with type
|
||||||
(define-constant bytevector-length-offset 4)
|
(define-constant bytevector-length-offset 3)
|
||||||
(define-constant bytevector-immutable-flag
|
(define-constant bytevector-immutable-flag
|
||||||
(expt 2 (- (constant bytevector-length-offset) 1)))
|
(expt 2 (- (constant bytevector-length-offset) 1)))
|
||||||
(define-constant iptr maximum-bytevector-length
|
(define-constant iptr maximum-bytevector-length
|
||||||
|
@ -851,9 +866,9 @@
|
||||||
|
|
||||||
;;; vector type/length field must look like a fixnum. an immutable bit sits just above the fixnum tag, with the length above that.
|
;;; vector type/length field must look like a fixnum. an immutable bit sits just above the fixnum tag, with the length above that.
|
||||||
(define-constant mask-vector (constant mask-fixnum))
|
(define-constant mask-vector (constant mask-fixnum))
|
||||||
|
(define-constant mask-bytevector #b11)
|
||||||
(define-constant mask-string #b111)
|
(define-constant mask-string #b111)
|
||||||
(define-constant mask-fxvector #b111)
|
(define-constant mask-fxvector #b111)
|
||||||
(define-constant mask-bytevector #b111)
|
|
||||||
(define-constant mask-other-number #b1111)
|
(define-constant mask-other-number #b1111)
|
||||||
(define-constant mask-bignum #b11111)
|
(define-constant mask-bignum #b11111)
|
||||||
(define-constant mask-bignum-sign #b100000)
|
(define-constant mask-bignum-sign #b100000)
|
||||||
|
@ -916,7 +931,7 @@
|
||||||
|
|
||||||
(define-constant type-mutable-bytevector (constant type-bytevector))
|
(define-constant type-mutable-bytevector (constant type-bytevector))
|
||||||
(define-constant type-immutable-bytevector
|
(define-constant type-immutable-bytevector
|
||||||
(fxlogor (constant type-bytevector) (constant fxvector-immutable-flag)))
|
(fxlogor (constant type-bytevector) (constant bytevector-immutable-flag)))
|
||||||
(define-constant mask-mutable-bytevector
|
(define-constant mask-mutable-bytevector
|
||||||
(fxlogor (constant mask-bytevector) (constant bytevector-immutable-flag)))
|
(fxlogor (constant mask-bytevector) (constant bytevector-immutable-flag)))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user