12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- ;;; Ported from Scheme 48 1.9. See file COPYING for notices and license.
- ;;;
- ;;; Port Author: Andrew Whatson
- ;;;
- ;;; Original Authors: Richard Kelsey, Jonathan Rees, Marcus Crestani, David Frese
- ;;;
- ;;; scheme48-1.9.2/scheme/platform-interfaces.scm
- ;;; scheme48-1.9.2/scheme/vm/data/platform-32.scm
- ;;; scheme48-1.9.2/scheme/vm/data/platform-64.scm
- ;;;
- ;;; Essential constants for 32/64-bit platforms.
- ;;;
- (define-module (prescheme platform)
- #:use-module (system base target)
- #:export (bytes-per-cell
- log-bytes-per-cell
- bits-per-byte
- bits-per-cell
- addressing-units-per-cell
- c-useful-bits-per-word
- s48-useful-bits-per-word
- unused-field-width
- tag-field-width
- data-field-width
- immediate-type-field-width
- pre-scheme-integer-size))
- ;; Fundamental parameters
- (define 64bit? (>= (target-word-size) 8))
- (define bytes-per-cell (if 64bit? 8 4))
- (define log-bytes-per-cell (if 64bit? 3 2))
- (define bits-per-byte 8)
- (define bits-per-cell (* bits-per-byte bytes-per-cell))
- (define addressing-units-per-cell bytes-per-cell)
- ;; This is actually the mimimum for the different PreScheme implementations.
- ;; The Scheme version of PreScheme leaves 30 bits for PreScheme's fixnums.
- ;; There have to be enough bits to represent the largest fixnum in the system.
- ;; USEFUL-BITS-PER-WORD is not written in the image.
- (define s48-useful-bits-per-word (if 64bit? 62 30)) ; in Scheme48
- (define c-useful-bits-per-word (if 64bit? 64 32)) ; when compiled
- ;; Addresses
- ;;
- ;; An "addressing unit" is the smallest quantum of storage addressed by
- ;; an address on a particular machine. On a DEC-20, 3600, or other
- ;; word-addressed architecture there is one addressing unit per cell. On
- ;; the VAX or 68000, though, the addressing unit is the byte, of which there
- ;; are 4 to a cell.
- ;;
- ;; Note: by a "byte" is meant enough bits to store a bytecode. That
- ;; probably means either 7, 8, or 9 bits.
- ;;
- ;; If the addressing unit is smaller than a cell each address will have some
- ;; number of "unused bits" at its low end. On a byte-addressable machine with
- ;; 32 bit addresses, there are two.
- (define unused-field-width log-bytes-per-cell)
- ;; Descriptors
- ;; A descriptor describes a Scheme object.
- ;; A descriptor is represented as an integer whose low two bits are
- ;; tag bits. The high bits contain information whose format and
- ;; meaning are dependent on the tag.
- (define tag-field-width 2)
- (define data-field-width (- bits-per-cell tag-field-width))
- ;; Immediates
- ;; This streamlines 8-bit-byte-oriented implementations.
- (define immediate-type-field-width
- (- bits-per-byte tag-field-width))
- ;; Pre-Scheme
- (define pre-scheme-integer-size bits-per-cell)
|