#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/coerce.scm,v 1.7 1987/03/19 00:52:34 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/coerce.scm,v 1.8 1987/07/17 15:40:20 jinx Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
(and (< offset 128) offset))
(error "Short label out of range" offset)))))
+(define coerce-bit-field-width
+ (standard-coercion
+ (lambda (w)
+ (cond ((< 0 w 32) w)
+ ((= w 32) 0)
+ (else (error "Bad bit field width" w))))))
+
(define make-coercion
(coercion-maker
`((UNSIGNED . ,coerce-unsigned-integer)
(SIGNED . ,coerce-signed-integer)
(QUICK . ,coerce-quick)
(SHIFT-NUMBER . ,coerce-quick)
- (SHORT-LABEL . ,coerce-short-label))))
+ (SHORT-LABEL . ,coerce-short-label)
+ (BFWIDTH . ,coerce-bit-field-width))))
(define-coercion 'UNSIGNED 1)
(define-coercion 'UNSIGNED 2)
(define-coercion 'UNSIGNED 4)
(define-coercion 'UNSIGNED 5)
(define-coercion 'UNSIGNED 6)
+(define-coercion 'UNSIGNED 7)
(define-coercion 'UNSIGNED 8)
(define-coercion 'UNSIGNED 9)
(define-coercion 'UNSIGNED 10)
+(define-coercion 'UNSIGNED 11)
(define-coercion 'UNSIGNED 12)
(define-coercion 'UNSIGNED 13)
+(define-coercion 'UNSIGNED 14)
+(define-coercion 'UNSIGNED 15)
(define-coercion 'UNSIGNED 16)
(define-coercion 'UNSIGNED 32)
(define-coercion 'SIGNED 32)
(define-coercion 'QUICK 3)
+(define-coercion 'BFWIDTH 5)
(define-coercion 'SHIFT-NUMBER 3)
(define-coercion 'SHORT-LABEL 8)
\ No newline at end of file
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/decls.scm,v 1.18 1987/07/15 02:59:48 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/decls.scm,v 1.19 1987/07/17 15:46:27 jinx Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
;;;; Lap level integration and expansion dependencies
(define filenames/dependency-group/lap
- (filename/append "machines/bobcat" "instr1" "instr2" "instr3"))
+ (filename/append "machines/bobcat" "instr1" "instr2" "instr3" "instr4"))
(define filenames/dependency-group/lap-syn1
(append (filename/append "back-end" "lapgn1" "lapgn2" "lapgn3" "regmap")
(file-dependency/syntax/join
(append (filename/append "machines/bobcat" "insutl" "instr1" "instr2"
- "instr3")
+ "instr3" "instr4")
(filename/append "machines/spectrum" "instrs"))
assembler-syntax-table)
\ No newline at end of file
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/insmac.scm,v 1.119 1987/07/08 22:05:47 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/insmac.scm,v 1.120 1987/07/17 15:48:27 jinx Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
(coercion-type
(if (null? (cddr descriptor)) 'UNSIGNED (caddr descriptor))))
(case coercion-type
- ((UNSIGNED SIGNED SHIFT-NUMBER QUICK)
+ ((UNSIGNED SIGNED SHIFT-NUMBER QUICK BFWIDTH)
(receiver `(,(integer-syntaxer expression coercion-type size))
size false false))
((SHORT-LABEL)
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/instr1.scm,v 1.62 1987/07/08 22:06:08 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/instr1.scm,v 1.63 1987/07/17 15:48:41 jinx Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
(define-ea-transformer ea-d&-& (DATA) (&))
(define-ea-transformer ea-all-A () (A))
+
+(define-ea-transformer ea-d/c () (A @A+ @-A &))
+(define-ea-transformer ea-d/c&a (ALTERABLE) (A @A+ @-A &))
\f
;;;; Special purpose transformers
(define-symbol-transformer lw (W . 1) (L . 0))
(define-symbol-transformer rl (R . 0) (L . 1))
(define-symbol-transformer us (U . 0) (S . 1))
+(define-symbol-transformer chkwl (W . 6) (L . 4))
+(define-symbol-transformer bwl+1 (B . 1) (W . 2) (L . 3))
+(define-symbol-transformer nwl-n (W . 2) (L . 3))
+
(define-symbol-transformer cc
(T . 0) (F . 1) (HI . 2) (LS . 3) (HS . 4) (LO . 5)
(CC . 4) (CS . 5) (NE . 6) (EQ . 7) (VC . 8) (VS . 9)
(define-reg-list-transformer @-reg-list
(D0 . 0) (D1 . 1) (D2 . 2) (D3 . 3) (D4 . 4) (D5 . 5) (D6 . 6) (D7 . 7)
(A0 . 8) (A1 . 9) (A2 . 10) (A3 . 11) (A4 . 12) (A5 . 13)
- (A6 . 14) (A7 . 15))
\ No newline at end of file
+ (A6 . 14) (A7 . 15))
+
+;; Control registers for 68010 and 68020
+
+(define-symbol-transformer cont-reg
+ (SFC . #x000) (DFC . #x001) (USP . #x800) (VBR . #x801)
+ ;; The ones below are for the 68020 only.
+ (CACR . #x002) (CAAR . #x802) (MSP . #x803) (ISP . #x804))
+
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/instr2.scm,v 1.10 1987/07/08 22:06:40 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/instr2.scm,v 1.11 1987/07/17 15:48:53 jinx Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
(let-syntax ((define-binary-addition
(macro (keyword Qkeyword Xkeyword opcode Qbit Iopcode)
`(BEGIN
- (define-instruction ,Qkeyword ;ADDQ
+ (define-instruction ,Qkeyword ;ADDQ/SUBQ
((B (& (? data)) (? ea ea-all-A))
(WORD (4 #b0101)
(3 data QUICK)
(6 ea DESTINATION-EA))))
(define-instruction ,keyword
- (((? s bwl ssym) (& (? data)) (? ea ea-d&a)) ;ADDI
+ (((? s bwl ssym) (& (? data)) (? ea ea-d&a)) ;ADDI/SUBI
(WORD (4 #b0000)
(4 ,Iopcode)
(2 s)
(3 rx)
(1 #b1)
(2 s)
- (6 ea DESTINATION-EA)))
+\f (6 ea DESTINATION-EA)))
- (((? s wl ssym) (? ea ea-all) (A (? rx))) ;ADDA
+ (((? s wl ssym) (? ea ea-all) (A (? rx))) ;ADDA/SUBA
(WORD (4 ,opcode)
(3 rx)
(1 s)
(define-binary-addition ADD ADDQ ADDX #b1101 #b0 #b0110)
(define-binary-addition SUB SUBQ SUBX #b1001 #b1 #b0100))
\f
-(define-instruction DIV
- (((? sgn us) (D (? rx)) (? ea ea-d))
- (WORD (4 #b1000)
- (3 rx)
- (1 sgn)
- (2 #b11)
- (6 ea SOURCE-EA 'W))))
-
(define-instruction EXT
(((? s wl) (D (? rx)))
(WORD (9 #b010010001)
(3 #b000)
(3 rx))))
-(define-instruction MUL
- (((? sgn us) (? ea ea-d) (D (? rx)))
- (WORD (4 #b1100)
- (3 rx)
- (1 sgn)
- (2 #b11)
- (6 ea SOURCE-EA 'W))))
-
(define-instruction NEG
(((? s bwl) (? dea ea-d&a))
(WORD (8 #b01000100)
(WORD (8 #b01000000)
(2 s)
(6 dea DESTINATION-EA))))
+
+;;; Multiplication and division
+
+#|
+
+;; These are the 68000/68010 versions
+
+(define-instruction DIV
+ (((? sgn us) (D (? rx)) (? ea ea-d))
+ (WORD (4 #b1000)
+ (3 rx)
+ (1 sgn)
+ (2 #b11)
+ (6 ea SOURCE-EA 'W))))
+
+(define-instruction MUL
+ (((? sgn us) (? ea ea-d) (D (? rx)))
+ (WORD (4 #b1100)
+ (3 rx)
+ (1 sgn)
+ (2 #b11)
+ (6 ea SOURCE-EA 'W))))
+
+|#
+\f
+;; These are the 68020 versions
+
+(let-syntax ((define-mul-and-div
+ (macro (keyword word-form-bit long-form-bit)
+ `(define-instruction ,keyword
+ (((? sgn us) W (D (? n)) (? ea ea-d))
+ (WORD (1 #b1)
+ (1 ,word-form-bit)
+ (2 #b00)
+ (3 n)
+ (1 sgn)
+ (2 #b11)
+ (6 ea SOURCE-EA 'W)))
+
+ (((? sgn us) L (D (? q)) (? ea ea-d))
+ (WORD (9 #b010011000)
+ (1 ,long-form-bit)
+ (6 ea SOURCE-EA 'L))
+ (EXTENSION-WORD (1 #b0)
+ (3 q)
+ (1 sgn)
+ (8 #b00000000)
+ (3 q)))
+
+ (((? sgn us) L (D (? r)) (D (? q)) (? ea ea-d))
+ (WORD (9 #b010011000)
+ (1 ,long-form-bit)
+ (6 ea SOURCE-EA 'L))
+ (EXTENSION-WORD (1 #b0)
+ (3 q)
+ (1 sgn)
+ (8 #b10000000)
+ (3 r)))))))
+ (define-mul-and-div MUL #b1 #b0)
+ (define-mul-and-div DIV #b0 #b1))
+
+(define-instruction DIVL
+ (((? sgn us) L (D (? r)) (D (? q)) (? ea ea-d))
+ (WORD (9 #b010011000)
+ (1 #b1) ; DIV long-form-bit
+ (6 ea SOURCE-EA 'L))
+ (EXTENSION-WORD (1 #b0)
+ (3 q)
+ (1 sgn)
+ (8 #b00000000)
+ (3 r))))
\f
;;;; Comparisons
(2 s)
(6 #b111100))
(immediate-words data ssym))))))
- (define-bitwise-logical AND #b1100 #b0010)
- (define-bitwise-logical OR #b1000 #b0000))
+ (define-bitwise-logical AND #b1100 #b0010) ; and ANDI
+ (define-bitwise-logical OR #b1000 #b0000)) ; and ORI
(define-instruction EOR
(((? s bwl) (D (? rx)) (? ea ea-d&a))
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/instr3.scm,v 1.11 1987/07/16 10:13:36 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/instr3.scm,v 1.12 1987/07/17 15:49:06 jinx Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
(8 #b00000000))
(relative-word l))
+ ;; 68020 only
+
+ (((? c cc) L (@PCO (? o)))
+ (WORD (4 #b0110)
+ (4 cc)
+ (8 #b11111111))
+ (immediate-long o))
+
+ (((? c cc) L (@PCR (? l)))
+ (WORD (4 #b0110)
+ (4 cc)
+ (8 #b11111111))
+ (relative-long l))
+
(((? c cc) U (@PCO (? o)))
(WORD (4 #b0110)
(4 c)
(WORD (16 #b0110000000000000))
(relative-word l))
+ ;; 68020 only
+
+ ((L (@PCO (? o)))
+ (WORD (16 #b0110000011111111))
+ (immediate-long o))
+
+ ((L (@PCR (? l)))
+ (WORD (16 #b0110000011111111))
+ (relative-long l))
+
((U (@PCO (? o)))
(WORD (16 #b0110000000000000))
(immediate-word o))
((U (@PCR (? l)))
(WORD (16 #b0110000000000000))
(relative-word l)))
-
+\f
(define-instruction BSR
((B (@PCO (? o)))
(WORD (8 #b01100001)
(WORD (16 #b0110000100000000))
(relative-word l))
+ ;; 68020 onlyu
+
+ ((L (@PCO (? o)))
+ (WORD (16 #b0110000111111111))
+ (immediate-long o))
+
+ ((L (@PCR (? l)))
+ (WORD (16 #b0110000111111111))
+ (relative-long l))
+
((U (@PCO (? o)))
(WORD (16 #b0110000100000000))
(immediate-word o))
(WORD (10 #b0100111010)
(6 ea DESTINATION-EA))))
+;; 68010 and 68020 only
+
+(define-instruction RTD
+ (((& (? offset)))
+ (WORD (16 #b0100111001110100))
+ (EXTENSION-WORD (16 offset))))
+
(define-instruction RTE
(()
(WORD (16 #b0100111001110011))))
(()
(WORD (16 #b0100111001110101))))
-(define-instruction TRAP
- (((& (? v)))
- (WORD (12 #b010011100100)
- (4 v))))
-
(define-instruction TRAPV
(()
(WORD (16 #b0100111001110110))))
\f
-;;;; Randomness
+;;;; Family member dependent miscellaneous instructions.
+
+#|
+
+;; These are the 68000/68010 versions
+
+(define-instruction TRAP
+ (((& (? v)))
+ (WORD (12 #b010011100100)
+ (4 v))))
(define-instruction CHK
(((? ea ea-d) (D (? rx)))
(3 rx))
(immediate-word d)))
+|#
+\f
+;;;; Family member dependent miscellaneous instructions (continued).
+
+;; These are the 68020 versions
+
+(define-instruction TRAP
+ (((& (? v)))
+ (WORD (12 #b010011100100)
+ (4 v)))
+
+ (((? c cc))
+ (WORD (4 #b0101)
+ (4 cc)
+ (8 #b11111100)))
+
+ (((? c cc) W (& (? data)))
+ (WORD (4 #b0101)
+ (4 cc)
+ (8 #b11111010))
+ (EXTENSION-WORD (16 data)))
+
+ (((? c cc) L (& (? data)))
+ (WORD (4 #b0101)
+ (4 cc)
+ (8 #b11111011))
+ (EXTENSION-WORD (32 data))))
+
+(define-instruction CHK
+ ;; This is for compatibility with older (68000/68010) syntax.
+ ;; There is no size suffix to the opcode.
+
+ (((? ea ea-d) (D (? rx)))
+ (WORD (4 #b0100)
+ (3 rx)
+ (3 #b110)
+ (6 ea SOURCE-EA 'W)))
+
+ (((? size chkwl) (? ea ea-d) (D (? rx)))
+ (WORD (4 #b0100)
+ (3 rx)
+ (3 size)
+ (6 ea SOURCE-EA 'W))))
+
+(define-instruction LINK
+ ((W (A (? rx)) (& (? d)))
+ (WORD (13 #b0100111001010)
+ (3 rx))
+ (immediate-word d))
+
+ ((L (A (? rx)) (& (? d)))
+ (WORD (13 #b0100100000001)
+ (3 rx))
+ (immediate-long d)))
+\f
+;;;; Randomness
+
+(define-instruction ILLEGAL
+ (()
+ (WORD (16 #b0100101011111100))))
+
(define-instruction NOP
(()
(WORD (16 #b0100111001110001))))
(3 #b001)
(3 ry))
(relative-word l)))
+\f
+;;;; 68010 and 68020 only privileged MOVE instructions.
+
+;;; move from/to control register.
+
+(define-instruction MOVEC
+ ((((? creg cont-reg)) ((? rtype da) (? greg)))
+ (WORD (15 #b010011100111101)
+ (1 #b0))
+ (EXTENSION-WORD (1 rtype)
+ (3 greg)
+ (12 creg)))
+
+ ((((? rtype da) (? greg)) ((? creg cont-reg)))
+ (WORD (15 #b010011100111101)
+ (1 #b1))
+ (EXTENSION-WORD (1 rtype)
+ (3 greg)
+ (12 creg))))
+
+(define-instruction MOVES
+ (((? size bwl) ((? rtype da) (? reg)) (? dest ea-m&a))
+ (WORD (8 #b00001110)
+ (2 size)
+ (6 dest DESTINATION-EA))
+ (EXTENSION-WORD (1 rtype)
+ (3 reg)
+ (1 #b1)
+ (11 #b00000000000)))
+ (((? size bwl) (? dest ea-m&a) ((? rtype da) (? reg)))
+ (WORD (8 #b00001110)
+ (2 size)
+ (6 dest DESTINATION-EA))
+ (EXTENSION-WORD (1 rtype)
+ (3 reg)
+ (1 #b0)
+ (11 #b00000000000))))
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/insutl.scm,v 1.2 1987/07/01 20:53:42 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/insutl.scm,v 1.3 1987/07/17 15:49:20 jinx Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
(define-integrable (relative-word address)
(syntax-evaluation `(- ,address *PC*) coerce-16-bit-signed))
+(define-integrable (relative-long address)
+ (syntax-evaluation `(- ,address *PC*) coerce-32-bit-signed))
+
(define-integrable (offset-word data)
(syntax-evaluation data coerce-16-bit-signed))
(define-integrable (output-bit-string bit-string)
bit-string)
\f
+;;;; Randoms
+
;; Auxiliary procedure for register list transformers
(define (encode-register-list reg-list encoding)
(begin
(bit-string-set! bit-string (cdr place))
(loop (cdr regs)))))))
- (loop reg-list)))
\ No newline at end of file
+ (loop reg-list)))
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/make.scm-68040,v 1.32 1987/07/16 10:15:36 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/make.scm-68040,v 1.33 1987/07/17 15:42:50 jinx Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
(make-environment
(define :name "Liar (Bobcat 68020)")
(define :version 1)
- (define :modification 32)
+ (define :modification 33)
(define :files)
; (parse-rcs-header
-; "$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/make.scm-68040,v 1.32 1987/07/16 10:15:36 jinx Exp $"
+; "$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/bobcat/make.scm-68040,v 1.33 1987/07/17 15:42:50 jinx Exp $"
; (lambda (filename version date time zone author state)
; (set! :version (car version))
; (set! :modification (cadr version))))