#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/decls.scm,v 1.23 1987/08/23 03:34:41 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/decls.scm,v 1.24 1987/09/03 05:17:16 jinx Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
"ralloc" "rcseep" "rdeath" "rdebug" "rgcomb"
"rgpcom" "rgpred" "rgproc" "rgrval" "rgstmt" "rlife"
"rtlgen")
- (filename/append "back-end" "lapgn1" "lapgn2" "lapgn3")))
+ (filename/append "back-end" "lapgn1" "lapgn2" "lapgn3")
+ (filename/append "machines/bobcat" "rgspcm")))
(define filenames/dependency-chain/bits
(filename/append "back-end" "symtab" "bitutl" "bittop"))
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/lapgen.scm,v 1.188 1987/07/30 21:44:13 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/lapgen.scm,v 1.189 1987/09/03 05:14:16 jinx Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
assignment-trap)
(define-entries #x0228 uuo-link uuo-link-trap cache-reference-apply
safe-reference-trap unassigned?-trap cache-variable-multiple
- uuo-link-multiple))
+ uuo-link-multiple &+ &- &* &/ &= &< &> 1+ -1+ zero? positive? negative?))
(define-integrable reg:compiled-memtop (INST-EA (@A 6)))
(define-integrable reg:environment (INST-EA (@AO 6 #x000C)))
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/make.scm-68040,v 1.42 1987/08/07 17:13:18 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/make.scm-68040,v 1.43 1987/09/03 05:13:32 jinx Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
(make-environment
(define :name "Liar (Bobcat 68020)")
(define :version 3)
- (define :modification 0)
+ (define :modification 1)
(define :files)
; (parse-rcs-header
-; "$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/make.scm-68040,v 1.42 1987/08/07 17:13:18 cph Exp $"
+; "$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/make.scm-68040,v 1.43 1987/09/03 05:13:32 jinx Exp $"
; (lambda (filename version date time zone author state)
; (set! :version (car version))
; (set! :modification (cadr version))))
"front-end/rgrval.bin" ;RTL generator: RValues
"front-end/rgcomb.bin" ;RTL generator: Combinations
"front-end/rgpcom.bin" ;RTL generator: Primitive open-coding
+ "machines/bobcat/rgspcm.bin" ;RTL generator: primitives treated specially.
))
(cons rtl-cse-package
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/rules3.scm,v 1.13 1987/07/30 21:44:51 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/rules3.scm,v 1.14 1987/09/03 05:14:52 jinx Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
(AND L (D 7) (D 1))
(MOV L (D 1) (A 0))
(JMP (@A 0)))))
+\f
+(let-syntax
+ ((define-special-primitive-invocation
+ (macro (name)
+ `(define-rule statement
+ (INVOCATION:SPECIAL-PRIMITIVE ,name (? frame-size)
+ (? prefix) (? continuation))
+ (disable-frame-pointer-offset!
+ ,(list 'LAP
+ (list 'UNQUOTE-SPLICING
+ '(generate-invocation-prefix prefix '()))
+ (list 'JMP
+ (list 'UNQUOTE
+ (symbol-append 'ENTRY:COMPILER- name)))))))))
+
+ (define-special-primitive-invocation &+)
+ (define-special-primitive-invocation &-)
+ (define-special-primitive-invocation &*)
+ (define-special-primitive-invocation &/)
+ (define-special-primitive-invocation &=)
+ (define-special-primitive-invocation &<)
+ (define-special-primitive-invocation &>)
+ (define-special-primitive-invocation 1+)
+ (define-special-primitive-invocation -1+)
+ (define-special-primitive-invocation zero?)
+ (define-special-primitive-invocation positive?)
+ (define-special-primitive-invocation negative?))
(define-rule statement
(RETURN)
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlbase/rtlcon.scm,v 1.12 1987/07/31 00:51:10 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlbase/rtlcon.scm,v 1.13 1987/09/03 05:15:47 jinx Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
frame-size prefix (and continuation (continuation-label continuation))
procedure))
+(define (rtl:make-invocation:special-primitive name frame-size
+ prefix continuation)
+ (%make-invocation:special-primitive
+ name frame-size prefix
+ (and continuation (continuation-label continuation))))
+
(define (rtl:make-invocation:uuo-link frame-size prefix continuation name)
(%make-invocation:uuo-link
frame-size prefix (and continuation (continuation-label continuation))
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlbase/rtlexp.scm,v 1.2 1987/05/28 17:58:38 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlbase/rtlexp.scm,v 1.3 1987/09/03 05:16:17 jinx Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
INVOCATION:JUMP
INVOCATION:LEXPR
INVOCATION:LOOKUP
- INVOCATION:PRIMITIVE)))
+ INVOCATION:PRIMITIVE
+ INVOCATION:SPECIAL-PRIMITIVE
+ INVOCATION:UUO-LINK)))
(define (rtl:machine-register-expression? expression)
(and (rtl:register? expression)
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlbase/rtlty1.scm,v 1.12 1987/07/03 18:56:20 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlbase/rtlty1.scm,v 1.13 1987/09/03 05:15:29 jinx Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
environment name)
(define-rtl-statement invocation:primitive % pushed prefix continuation
procedure)
+(define-rtl-statement invocation:special-primitive % name pushed prefix
+ continuation)
(define-rtl-statement invocation:uuo-link % pushed prefix continuation name)
(define-rtl-statement message-sender:value rtl: size)
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlgen/rgcomb.scm,v 1.33 1987/08/07 17:08:10 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlgen/rgcomb.scm,v 1.34 1987/09/03 05:10:05 jinx Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
(normal-primitive-constant? callee)
(let ((open-coder
(assq (constant-value callee)
- primitive-open-coders)))
+ (cdr primitive-open-coders))))
(and open-coder
((cdr open-coder) combination
subproblem?
(else
(error "Unknown combination value" value)))))))
-(define (define-open-coder primitive open-coder)
- (let ((kernel
- (lambda (primitive)
- (let ((entry (assq primitive primitive-open-coders)))
- (if entry
- (set-cdr! entry open-coder)
- (set! primitive-open-coders
- (cons (cons primitive open-coder)
- primitive-open-coders)))))))
- (if (pair? primitive)
- (for-each kernel primitive)
- (kernel primitive)))
- primitive)
+(define (define-primitive-handler data-base)
+ (lambda (primitive handler)
+ (let ((kernel
+ (lambda (primitive)
+ (let ((entry (assq primitive (cdr data-base))))
+ (if entry
+ (set-cdr! entry handler)
+ (set-cdr! data-base
+ (cons (cons primitive handler)
+ (cdr data-base))))))))
+ (if (pair? primitive)
+ (for-each kernel primitive)
+ (kernel primitive)))
+ primitive))
(define primitive-open-coders
- '())
+ (list 'PRIMITIVE-OPEN-CODERS))
+
+(define define-open-coder
+ (define-primitive-handler primitive-open-coders))
\f
(define (combination/subproblem combination operator operands)
(let ((block (combination-block combination)))
(define (make-call/primitive combination operator operands prefix continuation)
(make-call false combination operator operands
- (lambda (number-pushed)
- (rtl:make-invocation:primitive
- (1+ number-pushed)
- (prefix combination number-pushed)
- continuation
- (constant-value (combination-known-operator combination))))))
+ (let* ((prim (constant-value (combination-known-operator combination)))
+ (special-handler (assq prim (cdr special-primitive-handlers))))
+ (if special-handler
+ ((cdr special-handler) combination prefix continuation)
+ (lambda (number-pushed)
+ (rtl:make-invocation:primitive
+ (1+ number-pushed)
+ (prefix combination number-pushed)
+ continuation
+ prim))))))
+
+(define special-primitive-handlers
+ (list 'SPECIAL-PRIMITIVE-HANDLERS))
+
+(define define-special-primitive-handler
+ (define-primitive-handler special-primitive-handlers))
\f
(define (make-call/reference combination operator operands prefix continuation)
(make-call false combination operator operands
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlopt/rcse1.scm,v 1.113 1987/08/07 17:07:06 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlopt/rcse1.scm,v 1.114 1987/09/03 05:12:54 jinx Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
(define-cse-method 'INVOCATION:JUMP method/noop)
(define-cse-method 'INVOCATION:LEXPR method/noop)
(define-cse-method 'INVOCATION:PRIMITIVE method/noop)
+(define-cse-method 'INVOCATION:SPECIAL-PRIMITIVE method/noop)
(define-cse-method 'INVOCATION:UUO-LINK method/noop)
(define (method/invalidate-stack statement)