X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fmips%2Fparms.lisp;h=703d887c078bec6349613a3d83451af49f80c901;hb=01cc13c8dab7399f6d7ef10e01add5edbbc03e31;hp=2db49109e20a7bb1254816c0a509f668ba30c8ee;hpb=c5759c03562c984984e368c2ab85a21dceb719ab;p=sbcl.git diff --git a/src/compiler/mips/parms.lisp b/src/compiler/mips/parms.lisp index 2db4910..703d887 100644 --- a/src/compiler/mips/parms.lisp +++ b/src/compiler/mips/parms.lisp @@ -1,17 +1,27 @@ -(in-package "SB!VM") - -(def!constant n-word-bits 32 - "Number of bits per word where a word holds one lisp descriptor.") +;;;; This software is part of the SBCL system. See the README file for +;;;; more information. +;;;; +;;;; This software is derived from the CMU CL system, which was +;;;; written at Carnegie Mellon University and released into the +;;;; public domain. The software is in the public domain and is +;;;; provided with absolutely no warranty. See the COPYING and CREDITS +;;;; files for more information. -(def!constant n-byte-bits 8 - "Number of bits per byte where a byte is the smallest addressable object.") +(in-package "SB!VM") + +;;;; Machine Architecture parameters: +(eval-when (:compile-toplevel :load-toplevel :execute) -(def!constant word-shift (1- (integer-length (/ n-word-bits n-byte-bits))) - "Number of bits to shift between word addresses and byte addresses.") +;;; number of bits per word where a word holds one lisp descriptor +(def!constant n-word-bits 32) -(def!constant n-word-bytes (/ n-word-bits n-byte-bits) - "Number of bytes in a word.") +;;; the natural width of a machine word (as seen in e.g. register width, +;;; address space) +(def!constant n-machine-word-bits 32) +;;; number of bits per byte where a byte is the smallest addressable +;;; object +(def!constant n-byte-bits 8) (def!constant float-sign-shift 31) @@ -42,6 +52,7 @@ (def!constant float-overflow-trap-bit (ash 1 2)) (def!constant float-divide-by-zero-trap-bit (ash 1 3)) (def!constant float-invalid-trap-bit (ash 1 4)) +(def!constant float-unimplemented-trap-bit (ash 1 5)) (def!constant float-round-to-nearest 0) (def!constant float-round-to-zero 1) @@ -51,50 +62,75 @@ (defconstant-eqx float-rounding-mode (byte 2 0) #'equalp) (defconstant-eqx float-sticky-bits (byte 5 2) #'equalp) (defconstant-eqx float-traps-byte (byte 5 7) #'equalp) -(defconstant-eqx float-exceptions-byte (byte 5 12) #'equalp) +(defconstant-eqx float-exceptions-byte (byte 6 12) #'equalp) (defconstant-eqx float-condition-bit (ash 1 23) #'equalp) -(def!constant float-fast-bit 0) ; No fast mode on PMAX. +(def!constant float-fast-bit (ash 1 24)) - ;;;; Description of the target address space. -;;; Where to put the different spaces. -;;; -(def!constant read-only-space-start #x01000000) -(def!constant read-only-space-end #x05000000) - -(def!constant static-space-start #x06000000) -(def!constant static-space-end #x08000000) - -(def!constant dynamic-space-start #x08000000) -(def!constant dynamic-space-end #x0c000000) - -(def!constant dynamic-0-space-start #x08000000) -(def!constant dynamic-0-space-end #x0c000000) -(def!constant dynamic-1-space-start #x0c000000) -(def!constant dynamic-1-space-end #x10000000) +#!+irix +(progn + ;; Where to put the different spaces. + ;; Old definitions, might be still relevant for an IRIX port. + ;; + (def!constant read-only-space-start #x01000000) + (def!constant read-only-space-end #x05000000) + + (def!constant static-space-start #x06000000) + (def!constant static-space-end #x08000000) + + (def!constant dynamic-0-space-start #x08000000) + (def!constant dynamic-0-space-end #x0c000000) + (def!constant dynamic-1-space-start #x0c000000) + (def!constant dynamic-1-space-end #x10000000)) + +#!+linux +(progn + ;; Where to put the address spaces on Linux. + ;; + ;; C runtime executable segment starts at 0x00400000 + (def!constant read-only-space-start #x01000000) + (def!constant read-only-space-end #x07ff0000) + + (def!constant static-space-start #x08000000) + (def!constant static-space-end #x0fff0000) + ;; C runtime read/write segment starts at 0x10000000, heap and DSOs + ;; start at 0x2a000000 + (def!constant dynamic-0-space-start #x30000000) + (def!constant dynamic-0-space-end #x4fff0000) + (def!constant dynamic-1-space-start #x50000000) + (def!constant dynamic-1-space-end #x6fff0000) + + (def!constant linkage-table-space-start #x70000000) + (def!constant linkage-table-space-end #x71000000) + (def!constant linkage-table-entry-size 16) + + ;; C stack grows downward from 0x80000000 + ) + +); eval-when ;;;; Other non-type constants. -(defenum (:suffix -flag) - atomic - interrupted) - -(defenum (:suffix -trap :start 8) - halt - pending-interrupt - error - cerror - breakpoint - fun-end-breakpoint - after-breakpoint) - -(defenum (:prefix trace-table-) - normal - call-site - fun-prologue - fun-epilogue) +(defenum () + atomic-flag + interrupted-flag) + +(defenum (:start 8) + halt-trap + pending-interrupt-trap + error-trap + cerror-trap + breakpoint-trap + fun-end-breakpoint-trap + after-breakpoint-trap + unused-trap + pseudo-atomic-trap + object-not-list-trap + object-not-instance-trap + single-step-around-trap + single-step-before-trap) ;;;; Static symbols. @@ -105,53 +141,28 @@ ;;; The fdefn objects for the static functions are loaded into static ;;; space directly after the static symbols. That way, the raw-addr ;;; can be loaded directly out of them by indirecting relative to NIL. -;;; (defparameter *static-symbols* - '(t - - *posix-argv* - - sb!impl::sub-gc - sb!kernel::internal-error - sb!kernel::control-stack-exhausted-error - sb!di::handle-breakpoint - sb!impl::fdefinition-object - - ;; Free Pointers - *read-only-space-free-pointer* - *static-space-free-pointer* - *initial-dynamic-space-free-pointer* - - ;; Things needed for non-local-exit. - *current-catch-block* - *current-unwind-protect-block* - - *binding-stack-start* - *control-stack-start* - *control-stack-end* - - ;; Interrupt Handling - *free-interrupt-context-index* - sb!unix::*interrupts-enabled* - sb!unix::*interrupt-pending* - )) + (append + *common-static-symbols* + *c-callable-static-symbols* + '())) (defparameter *static-funs* - '(sb!kernel:two-arg-+ - sb!kernel:two-arg-- - sb!kernel:two-arg-* - sb!kernel:two-arg-/ - sb!kernel:two-arg-< - sb!kernel:two-arg-> + '(sb!kernel:two-arg-+ + sb!kernel:two-arg-- + sb!kernel:two-arg-* + sb!kernel:two-arg-/ + sb!kernel:two-arg-< + sb!kernel:two-arg-> sb!kernel:two-arg-= - sb!kernel:two-arg-<= - sb!kernel:two-arg->= - sb!kernel:two-arg-/= - eql + sb!kernel:two-arg-<= + sb!kernel:two-arg->= + sb!kernel:two-arg-/= + eql sb!kernel:%negate - sb!kernel:two-arg-and - sb!kernel:two-arg-ior + sb!kernel:two-arg-and + sb!kernel:two-arg-ior sb!kernel:two-arg-xor - length - sb!kernel:two-arg-gcd + length + sb!kernel:two-arg-gcd sb!kernel:two-arg-lcm))