X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fhppa%2Fparms.lisp;h=61d6e718bc226aafe4fb0862b4e54af9300208ac;hb=b83353d9f998e5c0e34604b5593df70c66d2c510;hp=3624bebf2ddc9562e114e9d53b254088a239c1f4;hpb=02c9007b4ca5753406f60019f4fe5e5f8392541a;p=sbcl.git diff --git a/src/compiler/hppa/parms.lisp b/src/compiler/hppa/parms.lisp index 3624beb..61d6e71 100644 --- a/src/compiler/hppa/parms.lisp +++ b/src/compiler/hppa/parms.lisp @@ -1,33 +1,32 @@ (in-package "SB!VM") - ;;;; Machine Architecture parameters: +(eval-when (:compile-toplevel :load-toplevel :execute) -(def!constant n-word-bits 32 - "Number of bits per word where a word holds one lisp descriptor.") - -(def!constant n-byte-bits 8 - "Number of bits per byte where a byte is the smallest addressable object.") +;;; number of bits per word where a word holds one lisp descriptor +(def!constant n-word-bits 32) -(def!constant word-shift (1- (integer-length (/ n-word-bits n-byte-bits))) - "Number of bits to shift between word addresses and byte addresses.") +;;; the natural width of a machine word (as seen in e.g. register width, +;;; address space) +(def!constant n-machine-word-bits 32) -(def!constant n-word-bytes (/ n-word-bits n-byte-bits) - "Number of bytes in a word.") +;;; 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) (def!constant single-float-bias 126) -(defconstant-eqx single-float-exponent-byte (byte 8 23) #'equal) -(defconstant-eqx single-float-significand-byte (byte 23 0) #'equal) +(defconstant-eqx single-float-exponent-byte (byte 8 23) #'equalp) +(defconstant-eqx single-float-significand-byte (byte 23 0) #'equalp) (def!constant single-float-normal-exponent-min 1) (def!constant single-float-normal-exponent-max 254) (def!constant single-float-hidden-bit (ash 1 23)) (def!constant single-float-trapping-nan-bit (ash 1 22)) (def!constant double-float-bias 1022) -(defconstant-eqx double-float-exponent-byte (byte 11 20) #'equal) -(defconstant-eqx double-float-significand-byte (byte 20 0) #'equal) +(defconstant-eqx double-float-exponent-byte (byte 11 20) #'equalp) +(defconstant-eqx double-float-significand-byte (byte 20 0) #'equalp) (def!constant double-float-normal-exponent-min 1) (def!constant double-float-normal-exponent-max #x7FE) (def!constant double-float-hidden-bit (ash 1 20)) @@ -50,60 +49,59 @@ (def!constant float-round-to-positive 2) (def!constant float-round-to-negative 3) -(defconstant-eqx float-rounding-mode (byte 2 7) #'equal) -(defconstant-eqx float-sticky-bits (byte 5 27) #'equal) -(defconstant-eqx float-traps-byte (byte 5 0) #'equal) -(defconstant-eqx float-exceptions-byte (byte 5 27) #'equal) -(def!constant float-condition-bit (ash 1 26)) -(def!constant float-fast-bit 0) ; No fast mode on HPPA. +(defconstant-eqx float-rounding-mode (byte 2 7) #'equalp) +(defconstant-eqx float-sticky-bits (byte 5 27) #'equalp) +(defconstant-eqx float-traps-byte (byte 5 0) #'equalp) +(defconstant-eqx float-exceptions-byte (byte 5 27) #'equalp) +(defconstant-eqx float-condition-bit (ash 1 26) #'equalp) +(def!constant float-fast-bit 0) ; No fast mode on HPPA. ;;;; Description of the target address space. ;;; Where to put the different spaces. -;;; -(def!constant read-only-space-start #x20000000) -(def!constant read-only-space-end #x24000000) +;;; +(def!constant read-only-space-start #x4b000000) +(def!constant read-only-space-end #x4dff0000) -(def!constant static-space-start #x28000000) -(def!constant static-space-end #x2a000000) +(def!constant static-space-start #x4e000000) +(def!constant static-space-end #x4fff0000) -(def!constant dynamic-space-start #x30000000) -(def!constant dynamic-space-end #x37fff000) +(def!constant dynamic-0-space-start #x50000000) +(def!constant dynamic-0-space-end #x54000000) +(def!constant dynamic-1-space-start #x60000000) +(def!constant dynamic-1-space-end #x64000000) -(def!constant dynamic-0-space-start #x30000000) -(def!constant dynamic-0-space-end #x37fff000) -(def!constant dynamic-1-space-start #x38000000) -(def!constant dynamic-1-space-end #x3ffff000) +); eval-when -;;; FIXME: WTF are these for? +;;; When doing external branching on hppa (e.g. inst ble) +;;; we must know which space we want to jump into (text, code) ;; The space-register holding the lisp heap. (def!constant lisp-heap-space 5) -;; The space-register holding the C text segment. +;; The space-register holding the C text heap. (def!constant c-text-space 4) ;;;; Other random constants. -(defenum (:suffix -trap :start 8) - halt - pending-interrupt - error - cerror - breakpoint - fun-end-breakpoint - single-step-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 + single-step-breakpoint-trap + single-step-around-trap + single-step-before-trap + single-step-after-trap) ;;;; Static symbols. @@ -114,38 +112,11 @@ ;;; 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 - - ;; The C startup code must fill these in. - *posix-argv* - - ;; Functions that the C code needs to call - 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* '(length @@ -156,11 +127,14 @@ 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:%negate sb!kernel:two-arg-and sb!kernel:two-arg-ior sb!kernel:two-arg-xor sb!kernel:two-arg-gcd - sb!kernel:two-arg-lcm - )) + sb!kernel:two-arg-lcm)) +