removed some hard-coded constants of pcb-offsets.

This commit is contained in:
Abdulaziz Ghuloum 2008-01-01 23:07:41 -05:00
parent 66e9cd6415
commit 50e2478d06
5 changed files with 106 additions and 113 deletions

View File

@ -443,7 +443,9 @@
(make-conditional ;;; PCB ALLOC-REDLINE (make-conditional ;;; PCB ALLOC-REDLINE
(make-primcall '<= (make-primcall '<=
(list (make-primcall 'int+ (list apr size)) (list (make-primcall 'int+ (list apr size))
(make-primcall 'mref (list pcr (make-constant 4))))) (make-primcall 'mref
(list pcr
(make-constant pcb-allocation-redline)))))
(make-primcall 'nop '()) (make-primcall 'nop '())
(make-primcall 'interrupt '())) (make-primcall 'interrupt '()))
(make-funcall (make-funcall
@ -2733,7 +2735,7 @@
(movl (int nil) ebx) (movl (int nil) ebx)
(jmp DONE_LABEL) (jmp DONE_LABEL)
CONS_LABEL CONS_LABEL
(movl (pcb-ref 'allocation-redline) ebx) (movl (mem pcb-allocation-redline pcr) ebx)
(addl eax ebx) (addl eax ebx)
(addl eax ebx) (addl eax ebx)
(cmpl ebx apr) (cmpl ebx apr)

View File

@ -1839,9 +1839,13 @@
(CodesExpr x)) (CodesExpr x))
(begin ;;; DEFINITIONS (begin ;;; DEFINITIONS
(define fx-shift 2) (define wordsize 4)
(define fx-mask #x03) (define wordshift 2)
(define fx-tag 0) (define object-alignment (* 2 wordsize))
(define align-shift (+ wordshift 1))
(define fx-shift wordshift)
(define fx-mask (- wordsize 1))
(define fx-tag 0)
(define bool-f #x2F) (define bool-f #x2F)
(define bool-t #x3F) (define bool-t #x3F)
(define bool-mask #xEF) (define bool-mask #xEF)
@ -1858,83 +1862,70 @@
(define pair-mask 7) (define pair-mask 7)
(define pair-tag 1) (define pair-tag 1)
(define disp-car 0) (define disp-car 0)
(define disp-cdr 4) (define disp-cdr wordsize)
(define pair-size 8) (define pair-size (* 2 wordsize))
(define flonum-tag #x17) (define flonum-tag #x17)
(define flonum-size 16) (define flonum-size 16)
(define disp-flonum-data 8) (define disp-flonum-data 8)
(define ratnum-tag #x27) (define ratnum-tag #x27)
(define disp-ratnum-num 4) (define disp-ratnum-num (* 1 wordsize))
(define disp-ratnum-den 8) (define disp-ratnum-den (* 2 wordsize))
(define ratnum-size 16) (define ratnum-size (* 4 wordsize))
(define bignum-mask #b111) (define bignum-mask #b111)
(define bignum-tag #b011) (define bignum-tag #b011)
(define bignum-sign-mask #b1000) (define bignum-sign-mask #b1000)
(define bignum-sign-shift 3) (define bignum-sign-shift 3)
(define bignum-length-shift 4) (define bignum-length-shift 4)
(define disp-bignum-data 4) (define disp-bignum-data wordsize)
(define pagesize 4096) (define pagesize 4096)
(define pageshift 12) (define pageshift 12)
(define wordsize 4)
(define wordshift 2)
;(define symbol-mask 7)
;(define symbol-tag 2)
;(define disp-symbol-string 0)
;(define disp-symbol-unique-string 4)
;(define disp-symbol-value 8)
;(define disp-symbol-plist 12)
;(define disp-symbol-system-value 16)
;(define disp-symbol-function 20)
;(define disp-symbol-error-function 24)
;(define disp-symbol-unused 28)
;(define symbol-size 32)
(define bytevector-mask 7) (define bytevector-mask 7)
(define bytevector-tag 2) (define bytevector-tag 2)
(define disp-bytevector-length 0) (define disp-bytevector-length 0)
(define disp-bytevector-data 8) (define disp-bytevector-data 8)
(define ptag-mask 7) (define ptag-mask 7)
(define symbol-ptag 5) (define symbol-ptag 5)
(define symbol-record-tag #x5F) (define symbol-record-tag #x5F)
(define disp-symbol-record-string 4) (define disp-symbol-record-string (* 1 wordsize))
(define disp-symbol-record-ustring 8) (define disp-symbol-record-ustring (* 2 wordsize))
(define disp-symbol-record-value 12) (define disp-symbol-record-value (* 3 wordsize))
(define disp-symbol-record-proc 16) (define disp-symbol-record-proc (* 4 wordsize))
(define disp-symbol-record-plist 20) (define disp-symbol-record-plist (* 5 wordsize))
(define symbol-record-size 24) (define symbol-record-size (* 6 wordsize))
(define record-tag 5) (define record-tag 5)
(define record-mask 7) (define record-mask 7)
(define vector-tag 5) (define vector-tag 5)
(define vector-mask 7) (define vector-mask 7)
(define disp-vector-length 0) (define disp-vector-length 0)
(define disp-vector-data 4) (define disp-vector-data wordsize)
(define string-mask 7) (define string-mask 7)
(define string-tag 6) (define string-tag 6)
(define disp-string-length 0) (define disp-string-length 0)
(define disp-string-data 4) (define disp-string-data wordsize)
(define closure-mask 7) (define closure-mask 7)
(define closure-tag 3) (define closure-tag 3)
(define disp-closure-data 4) (define disp-closure-code 0)
(define disp-closure-code 0) (define disp-closure-data wordsize)
(define continuation-size 16)
(define continuation-tag #x1F) (define continuation-tag #x1F)
(define disp-continuation-top 4) (define disp-continuation-top (* 1 wordsize))
(define disp-continuation-size 8) (define disp-continuation-size (* 2 wordsize))
(define disp-continuation-next 12) (define disp-continuation-next (* 3 wordsize))
(define continuation-size (* 4 wordsize))
(define code-tag #x2F) (define code-tag #x2F)
(define disp-code-instrsize 4) (define disp-code-instrsize (* 1 wordsize))
(define disp-code-relocsize 8) (define disp-code-relocsize (* 2 wordsize))
(define disp-code-freevars 12) (define disp-code-freevars (* 3 wordsize))
(define disp-code-annotation 16) (define disp-code-annotation (* 4 wordsize))
(define disp-code-data 24) (define disp-code-unused (* 5 wordsize))
(define disp-code-data (* 6 wordsize))
(define transcoder-mask #xFF) ;;; 0011 (define transcoder-mask #xFF) ;;; 0011
(define transcoder-tag #x7F) ;;; 0011 (define transcoder-tag #x7F) ;;; 0011
@ -1972,37 +1963,52 @@
(define port-tag #x3F) (define port-tag #x3F)
(define port-mask #x3F) (define port-mask #x3F)
(define disp-port-attrs 0) (define disp-port-attrs 0)
(define disp-port-index 4) (define disp-port-index (* 1 wordsize))
(define disp-port-size 8) (define disp-port-size (* 2 wordsize))
(define disp-port-buffer 12) (define disp-port-buffer (* 3 wordsize))
(define disp-port-transcoder 16) (define disp-port-transcoder (* 4 wordsize))
(define disp-port-id 20) (define disp-port-id (* 5 wordsize))
(define disp-port-read! 24) (define disp-port-read! (* 6 wordsize))
(define disp-port-write! 28) (define disp-port-write! (* 7 wordsize))
(define disp-port-get-position 32) (define disp-port-get-position (* 8 wordsize))
(define disp-port-set-position! 36) (define disp-port-set-position! (* 9 wordsize))
(define disp-port-close 40) (define disp-port-close (* 10 wordsize))
(define disp-port-cookie 44) (define disp-port-cookie (* 11 wordsize))
(define disp-port-position 48) (define disp-port-position (* 12 wordsize))
(define disp-port-unused 52) (define disp-port-unused (* 13 wordsize))
(define port-size 56) (define port-size (* 14 wordsize))
(define disp-tcbucket-tconc 0) (define disp-tcbucket-tconc 0)
(define disp-tcbucket-key 4) (define disp-tcbucket-key (* 1 wordsize))
(define disp-tcbucket-val 8) (define disp-tcbucket-val (* 2 wordsize))
(define disp-tcbucket-next 12) (define disp-tcbucket-next (* 3 wordsize))
(define tcbucket-size 16) (define tcbucket-size (* 4 wordsize))
(define record-ptag 5) (define record-ptag 5)
(define record-pmask 7) (define record-pmask 7)
(define disp-struct-rtd 0) (define disp-struct-rtd 0)
(define disp-struct-data 4) (define disp-struct-data wordsize)
(define disp-frame-size -17) (define disp-frame-size -17) ;; OUCH
(define disp-frame-offset -13) (define disp-frame-offset -13) ;; OUCH
(define disp-multivalue-rp -9) (define disp-multivalue-rp -9) ;; OUCH
(define object-alignment 8)
(define align-shift 3)
(define dirty-word -1)) (define dirty-word -1))
;(define pcb-allocation-pointer (* 0 wordsize)) NOT USED
(define pcb-allocation-redline (* 1 wordsize))
;(define pcb-frame-pointer (* 2 wordsize)) NOT USED
(define pcb-frame-base (* 3 wordsize))
(define pcb-frame-redline (* 4 wordsize))
(define pcb-next-continuation (* 5 wordsize))
;(define pcb-system-stack (* 6 wordsize)) NOT USED
(define pcb-dirty-vector (* 7 wordsize))
(define pcb-arg-list (* 8 wordsize))
(define pcb-engine-counter (* 9 wordsize))
(define pcb-interrupted (* 10 wordsize))
(define pcb-base-rtd (* 11 wordsize))
(define pcb-collect-key (* 12 wordsize))
(module () (module ()
;;; initialize the cogen ;;; initialize the cogen
(code-entry-adjustment (- disp-code-data vector-tag))) (code-entry-adjustment (- disp-code-data vector-tag)))
@ -2062,9 +2068,6 @@
(define (ja label) (list 'ja label)) (define (ja label) (list 'ja label))
(define (jo label) (list 'jo label)) (define (jo label) (list 'jo label))
(define (jmp label) (list 'jmp label)) (define (jmp label) (list 'jmp label))
; (define edi '%edx) ; closure pointer
; (define esi '%esi) ; pcb
; (define ebp '%ebp) ; allocation pointer
(define esp '%esp) ; stack base pointer (define esp '%esp) ; stack base pointer
(define al '%al) (define al '%al)
(define ah '%ah) (define ah '%ah)
@ -2082,23 +2085,6 @@
(define (argc-convention n) (define (argc-convention n)
(fx- 0 (fxsll n fx-shift)))) (fx- 0 (fxsll n fx-shift))))
(define pcb-ref
(lambda (x)
(case x
[(allocation-pointer) (mem 0 pcr)]
[(allocation-redline) (mem 4 pcr)]
[(frame-pointer) (mem 8 pcr)]
[(frame-base) (mem 12 pcr)]
[(frame-redline) (mem 16 pcr)]
[(next-continuation) (mem 20 pcr)]
[(system-stack) (mem 24 pcr)]
[(dirty-vector) (mem 28 pcr)]
[(arg-list) (mem 32 pcr)]
[(engine-counter) (mem 36 pcr)]
[(interrupted) (mem 40 pcr)]
[(base-rtd) (mem 44 pcr)]
[else (error 'pcb-ref "invalid arg" x)])))
(define (primref->symbol op) (define (primref->symbol op)
(unless (symbol? op) (error 'primref->symbol "not a symbol" op)) (unless (symbol? op) (error 'primref->symbol "not a symbol" op))
@ -2217,8 +2203,8 @@
(list 1 ; freevars (list 1 ; freevars
(label SL_continuation_code) (label SL_continuation_code)
(movl (mem (fx- disp-closure-data closure-tag) cpr) ebx) ; captured-k (movl (mem (fx- disp-closure-data closure-tag) cpr) ebx) ; captured-k
(movl ebx (pcb-ref 'next-continuation)) ; set (movl ebx (mem pcb-next-continuation pcr)) ; set
(movl (pcb-ref 'frame-base) ebx) (movl (mem pcb-frame-base pcr) ebx)
(cmpl (int (argc-convention 1)) eax) (cmpl (int (argc-convention 1)) eax)
(jg (label L_cont_zero_args)) (jg (label L_cont_zero_args))
(jl (label L_cont_mult_args)) (jl (label L_cont_mult_args))

View File

@ -1 +1 @@
1307 1308

View File

@ -47,7 +47,7 @@
(define (dirty-vector-set address) (define (dirty-vector-set address)
(prm 'mset (prm 'mset
(prm 'int+ (prm 'int+
(prm 'mref pcr (K 28)) (prm 'mref pcr (K pcb-dirty-vector))
(prm 'sll (prm 'srl address (K pageshift)) (K wordshift))) (prm 'sll (prm 'srl address (K pageshift)) (K wordshift)))
(K 0) (K 0)
(K dirty-word))) (K dirty-word)))
@ -87,7 +87,7 @@
(section ;;; simple objects section (section ;;; simple objects section
(define-primop base-rtd safe (define-primop base-rtd safe
[(V) (prm 'mref pcr (K 44))] [(V) (prm 'mref pcr (K pcb-base-rtd))]
[(P) (K #t)] [(P) (K #t)]
[(E) (prm 'nop)]) [(E) (prm 'nop)])
@ -156,13 +156,13 @@
[(E x) (nop)]) [(E x) (nop)])
(define-primop $arg-list unsafe (define-primop $arg-list unsafe
[(V) (prm 'mref pcr (K 32))] ;; PCB ARGS-LIST [(V) (prm 'mref pcr (K pcb-arg-list))]
[(P) (K #t)] [(P) (K #t)]
[(E) (nop)]) [(E) (nop)])
(define-primop $collect-key unsafe (define-primop $collect-key unsafe
[(V) (prm 'mref pcr (K 48))] [(V) (prm 'mref pcr (K pcb-collect-key))]
[(E x) (prm 'mset pcr (K 48) (T x))]) [(E x) (prm 'mset pcr (K pcb-collect-key) (T x))])
(define-primop $memq safe (define-primop $memq safe
[(P x ls) [(P x ls)
@ -1834,23 +1834,24 @@
(section ;;; interrupts-and-engines (section ;;; interrupts-and-engines
(define-primop $interrupted? unsafe (define-primop $interrupted? unsafe
[(P) (prm '!= (prm 'mref pcr (K 40)) (K 0))]) [(P) (prm '!= (prm 'mref pcr (K pcb-interrupted)) (K 0))])
(define-primop $unset-interrupted! unsafe (define-primop $unset-interrupted! unsafe
[(E) (prm 'mset pcr (K 40) (K 0))]) [(E) (prm 'mset pcr (K pcb-interrupted) (K 0))])
(define-primop $do-event safe (define-primop $do-event safe
[(E) [(E)
(begin (begin
(interrupt) (interrupt)
(prm 'incr/zero? pcr (K 36)))]) (prm 'incr/zero? pcr (K pcb-engine-counter)))])
(define-primop $stack-overflow-check unsafe (define-primop $stack-overflow-check unsafe
[(E) [(E)
(make-shortcut (make-shortcut
(make-conditional (make-conditional
(make-primcall '< (make-primcall '<
(list esp (make-primcall 'mref (list pcr (make-constant 16))))) (list esp (make-primcall 'mref
(list pcr (make-constant pcb-frame-redline)))))
(make-primcall 'interrupt '()) (make-primcall 'interrupt '())
(make-primcall 'nop '())) (make-primcall 'nop '()))
(make-forcall "ik_stack_overflow" '()))]) (make-forcall "ik_stack_overflow" '()))])
@ -1860,25 +1861,29 @@
(section ;;; control operations (section ;;; control operations
(define-primop $fp-at-base unsafe (define-primop $fp-at-base unsafe
[(P) ;;; PCB FRAME-BASE [(P)
(prm '= (prm 'int+ (prm 'mref pcr (K 12)) (K (- wordsize))) fpr)]) (prm '= (prm 'int+
(prm 'mref pcr (K pcb-frame-base))
(K (- wordsize))) fpr)])
(define-primop $current-frame unsafe (define-primop $current-frame unsafe
[(V) (prm 'mref pcr (K 20))]) ;; PCB NEXT-CONTINUATION [(V) (prm 'mref pcr (K pcb-next-continuation))])
(define-primop $seal-frame-and-call unsafe (define-primop $seal-frame-and-call unsafe
[(V x) ;;; PCB NEXT CONT;;; PCB BASE [(V x) ;;; PCB NEXT CONT;;; PCB BASE
(with-tmp ([k (prm 'alloc (K continuation-size) (K vector-tag))]) (with-tmp ([k (prm 'alloc (K continuation-size) (K vector-tag))])
(with-tmp ([base (prm 'int+ (prm 'mref pcr (K 12)) (K (- wordsize)))]) (with-tmp ([base (prm 'int+
(prm 'mref pcr (K pcb-frame-base))
(K (- wordsize)))])
(with-tmp ([underflow-handler (prm 'mref base (K 0))]) (with-tmp ([underflow-handler (prm 'mref base (K 0))])
(prm 'mset k (K (- vector-tag)) (K continuation-tag)) (prm 'mset k (K (- vector-tag)) (K continuation-tag))
(prm 'mset k (K (- disp-continuation-top vector-tag)) fpr) (prm 'mset k (K (- disp-continuation-top vector-tag)) fpr)
(prm 'mset k (K (- disp-continuation-next vector-tag)) (prm 'mset k (K (- disp-continuation-next vector-tag))
(prm 'mref pcr (K 20))) (prm 'mref pcr (K pcb-next-continuation)))
(prm 'mset k (K (- disp-continuation-size vector-tag)) (prm 'int- base fpr)) (prm 'mset k (K (- disp-continuation-size vector-tag)) (prm 'int- base fpr))
(prm 'mset pcr (K 20) k) (prm 'mset pcr (K pcb-next-continuation) k)
(prm 'mset pcr (K 12) fpr) (prm 'mset pcr (K pcb-frame-base) fpr)
(prm '$call-with-underflow-handler underflow-handler (T x) k))))] (prm '$call-with-underflow-handler underflow-handler (T x) k))))]
[(E . args) (interrupt)] [(E . args) (interrupt)]
[(P . args) (interrupt)]) [(P . args) (interrupt)])

View File

@ -91,7 +91,7 @@ inthash(int key) {
#define pagesize 4096 #define pagesize 4096
#define generation_count 5 /* generations 0 (nursery), 1, 2, 3, 4 */ #define generation_count 5 /* generations 0 (nursery), 1, 2, 3, 4 */
typedef unsigned int ikptr; typedef unsigned long int ikptr;
typedef int ikchar; typedef int ikchar;
@ -136,8 +136,8 @@ typedef struct ikpcb{
ikptr system_stack; /* offset = 24 */ ikptr system_stack; /* offset = 24 */
ikptr dirty_vector; /* offset = 28 */ ikptr dirty_vector; /* offset = 28 */
ikptr arg_list; /* offset = 32 */ ikptr arg_list; /* offset = 32 */
int engine_counter; /* offset = 36 */ ikptr engine_counter; /* offset = 36 */
int interrupted; /* offset = 40 */ ikptr interrupted; /* offset = 40 */
ikptr base_rtd; /* offset = 44 */ ikptr base_rtd; /* offset = 44 */
ikptr collect_key; /* offset = 48 */ ikptr collect_key; /* offset = 48 */
/* the rest are not used by any scheme code */ /* the rest are not used by any scheme code */