pcs/newpcs/popcodes.s

707 lines
27 KiB
Common Lisp
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; -*- Mode: Lisp -*- Filename: popcodes.s
;--------------------------------------------------------------------------;
; ;
; TI SCHEME -- PCS Compiler ;
; Copyright 1985, 1987 (c) Texas Instruments ;
; ;
; David Bartley ;
; ;
; Primitive Functions and Opcodes ;
; ;
; tc 2/10/87 READ-STRING opcode added ;
; rb 3/20/87 %XESC opcode added ;
; rb 4/ 1/87 pcs-primop-+, -* modified; no error was being signalled ;
; for a single non-numeric argument to either + or * since ;
; pcs-primop-std-n2 assumes a unary arg is the operator's ;
; identity element and removes the operator; so, the ;
; arg was never type-checked since the operator's handler ;
; never got called; now force unarys to binarys to keep ;
; the operator ;
; tc 4/13/87 make-string primop handler changed to handle optional ;
; 2nd argument ;
; ;
;--------------------------------------------------------------------------;
(define pcs-define-primop
(lambda (op handler)
(putprop op handler 'pcs*primop-handler)))
(define (pcs-primop-std-n2 form) ; n-ary to binary, left associative
(if (atom? form)
`(%%get-global%% (quote ,form)) ; funarg use
(begin
(pcs-chk-length>= form form 2)
(cond ((null? (cddr form)) ; unary?
(cadr form)) ; --> identity
((null? (cdddr form))
form) ; binary
(else
(let ((op (car form))
(a (cadr form))
(b (caddr form))
(rest (cdddr form)))
(pcs-primop-std-n2
`(,op (,op ,a ,b) . ,rest))))))))
(define (pcs-primop-append* form) ; for append, append!, string-append
(if (atom? form)
`(%%get-global%% (quote ,form)) ; funarg use
(let ((op (car form)))
(pcs-chk-length>= form form 1)
(cond ((null? (cdr form)) ; no args?
(if (eq? op 'STRING-APPEND)
''""
''()))
((null? (cddr form)) ; one arg?
(if (eq? op 'STRING-APPEND)
`(STRING-APPEND ,(cadr form) '"")
(cadr form)))
((null? (cdddr form)) ; two args?
(case op
((APPEND) `(%APPEND . ,(cdr form)))
((APPEND!) form)
(else
`(let ((%00000 ,(cadr form))
(%00001 ,(caddr form)))
(%STRING-APPEND %00000 0 (STRING-LENGTH %00000)
'()
%00001 0 (STRING-LENGTH %00001))))))
((and (null? (cddddr form))
(eq? op 'STRING-APPEND)) ; 3 args
`(let ((%00000 ,(cadr form))
(%00001 ,(caddr form))
(%00002 ,(cadddr form)))
(%STRING-APPEND %00000 0 (STRING-LENGTH %00000)
%00001
%00002 0 (STRING-LENGTH %00002))))
(else
(let ((a (cadr form))
(b (caddr form))
(rest (cdddr form)))
(pcs-primop-append*
`(,op ,a (,op ,b . ,rest)))))))))
(define pcs-primop-+ ; "+" handler
(lambda (form)
(if (and (not (atom? form))
(null? (cdr form)))
0
(if (and (not (atom? form))
(null? (cddr form)))
`(+ 0 ,(cadr form))
(pcs-primop-std-n2 form)))))
(define pcs-primop-- ; "-" handler
(lambda (form)
(cond ((and (not (atom? form))
(not (atom? (cdr form)))
(null? (cddr form)))
`(minus ,(cadr form)))
(t (pcs-primop-std-n2 form)))))
(define pcs-primop-* ; "*" handler
(lambda (form)
(if (and (not (atom? form))
(null? (cdr form)))
1
(if (and (not (atom? form))
(null? (cddr form)))
`(* 1 ,(cadr form))
(pcs-primop-std-n2 form)))))
(define pcs-primop-/ ; "/" handler
(lambda (form)
(cond ((and (not (atom? form))
(not (atom? (cdr form)))
(null? (cddr form)))
`(/ '1 ,(cadr form)))
(t (pcs-primop-std-n2 form)))))
(define (pcs-primop-vector form) ; "vector" handler
(cond ((atom? form)
`(%%get-global%% (quote vector)))
(else
`(list->vector (list . ,(cdr form))))))
(define (pcs-primop-list form) ; "list" handler
(cond ((atom? form)
`(%%get-global%% (quote list)))
((atom? (cdr form)) ; (list)
''())
((atom? (cddr form)) ; (list a)
form)
((atom? (cdddr form))
(cons '%list2 (cdr form)))
(else
(let ((rest (pcs-primop-list (cons 'list (cddr form)))))
`(cons ,(cadr form) ,rest)))))
(define (pcs-primop-list* form) ; "list*" handler
(cond ((atom? form)
`(%%get-global%% (quote list*)))
((atom? (cdr form)) ; (list*)
''())
((atom? (cddr form)) ; (list* a)
(cadr form))
(else
(let ((rest (pcs-primop-list* (cons 'list* (cddr form)))))
`(cons ,(cadr form) ,rest)))))
(define pcs-primop-make-vector ; "make-vector" handler
(lambda (form)
(cond ((atom? form)
`(%%get-global%% (quote ,form))) ; funarg use
((and (not (atom? (cdr form))) ; unary?
(null? (cddr form)))
form)
((and (not (atom? (cdr form))) ; binary?
(not (atom? (cddr form)))
(null? (cdddr form)))
`(let ((%00000 (make-vector ,(cadr form))))
(begin (vector-fill! %00000 ,(caddr form))
%00000)))
(else
(pcs-chk-length= form form 3)))))
(define pcs-primop-io-1 ; optional PORT arg
(lambda (form)
(cond ((atom? form)
`(%%get-global%% (quote ,form))) ; funarg use
((null? (cdr form))
`(,(car form) '())) ; add null port
((and (not (atom? (cdr form)))
(null? (cddr form)))
form) ; PORT supplied
(else
(pcs-chk-length= form form 2)))))
;
; Note that make-string uses the following primop definition to take
; care of its optional second argument.
;
(define pcs-primop-io-2 ; optional 2nd PORT arg
(lambda (form)
(cond ((atom? form)
`(%%get-global%% (quote ,form))) ; funarg use
((and (not (atom? (cdr form)))
(null? (cddr form))) ; add null port
`(,(car form) ,(cadr form) '()))
((and (not (atom? (cdr form)))
(not (atom? (cddr form)))
(null? (cdddr form)))
form) ; PORT supplied
(else
(pcs-chk-length= form form 3)))))
;;; --------------------------------------------------------------------
;;; !! NOTE !!
;;; Each primitive operation defined with PCS-DEFINE-PRIMOP must also
;;; be represented at runtime as a closure object in case the name is
;;; used as a "funarg." The error handler can auto-create such
;;; closures when both PCS*PRIMOP-HANDLER and PCS*OPCODE properties are
;;; integers. Others must have such closures defined explicitly. Many
;;; of them are defined in the PCS source file PFUNARG.S.
;;; --------------------------------------------------------------------
(begin
(pcs-define-primop '%%bind-fluid%% 2)
(pcs-define-primop '%%car 1)
(pcs-define-primop '%%cdr 1)
(pcs-define-primop '%%def-global%% 2)
(pcs-define-primop '%%execute 1)
(pcs-define-primop '%%fasl 1)
(pcs-define-primop '%%fluid-bound?%% 1)
(pcs-define-primop '%%get-fluid%% 1)
(pcs-define-primop '%%get-global%% 1)
(pcs-define-primop '%%get-scoops%% 1)
(pcs-define-primop '%%set-fluid%% 2)
(pcs-define-primop '%%set-global%% 2)
(pcs-define-primop '%%set-scoops%% 2)
(pcs-define-primop '%%unbind-fluid%% 1)
(pcs-define-primop '%append 2)
(pcs-define-primop '%apply 2)
(pcs-define-primop '%begin-debug 0)
(pcs-define-primop '%call/cc 1)
(pcs-define-primop '%car 1)
(pcs-define-primop '%cdr 1)
(pcs-define-primop '%clear-registers 0)
(pcs-define-primop '%clear-window 1)
(pcs-define-primop '%close-port 1)
(pcs-define-primop '%compact-memory 0)
(pcs-define-primop '%define 3)
(pcs-define-primop '%env-lu 2)
(pcs-define-primop '%esc1 1)
(pcs-define-primop '%esc2 2)
(pcs-define-primop '%esc3 3)
(pcs-define-primop '%esc4 4)
(pcs-define-primop '%esc5 5)
(pcs-define-primop '%esc6 6)
(pcs-define-primop '%esc7 7)
(pcs-define-primop '%xesc (lambda (form) form))
(pcs-define-primop '%garbage-collect 0)
(pcs-define-primop '%graphics 7)
(pcs-define-primop '%halt 0)
(pcs-define-primop '%internal-time 0)
(pcs-define-primop '%list2 2)
(pcs-define-primop '%logxor 2)
(pcs-define-primop '%logand 2)
(pcs-define-primop '%logior 2)
(pcs-define-primop '%make-window 1)
(pcs-define-primop '%open-port 2)
(pcs-define-primop '%random 0)
(pcs-define-primop '%reify 2)
(pcs-define-primop '%reify! 3)
(pcs-define-primop '%reify-port 2)
(pcs-define-primop '%reify-port! 3)
(pcs-define-primop '%reify-stack 1)
(pcs-define-primop '%reify-stack! 2)
(pcs-define-primop '%restore-window 2)
(pcs-define-primop '%save-window 1)
(pcs-define-primop '%set-global-environment 1)
(pcs-define-primop '%sfpos 3) ; set-file-position!
(pcs-define-primop '%start-timer 1)
(pcs-define-primop '%stop-timer 0)
(pcs-define-primop '%string-append 7)
(pcs-define-primop '%substring-display 5)
(pcs-define-primop '%transcript 1)
)
(begin
(pcs-define-primop '* pcs-primop-*)
(pcs-define-primop '+ pcs-primop-+)
(pcs-define-primop '- pcs-primop--)
(pcs-define-primop '/ pcs-primop-/ )
(pcs-define-primop '< 2)
(pcs-define-primop '<= 2)
(pcs-define-primop '<=? 2)
(pcs-define-primop '<> 2)
(pcs-define-primop '<>? 2)
(pcs-define-primop '<? 2)
(pcs-define-primop '= 2)
(pcs-define-primop '=? 2)
(pcs-define-primop '> 2)
(pcs-define-primop '>= 2)
(pcs-define-primop '>=? 2)
(pcs-define-primop '>? 2)
(pcs-define-primop 'abs 1)
(pcs-define-primop 'append pcs-primop-append*)
(pcs-define-primop 'append! pcs-primop-append*)
(pcs-define-primop 'assoc 2)
(pcs-define-primop 'assq 2)
(pcs-define-primop 'assv 2)
(pcs-define-primop 'atom? 1)
(pcs-define-primop 'caaar 1)
(pcs-define-primop 'caadr 1)
(pcs-define-primop 'caar 1)
(pcs-define-primop 'cadar 1)
(pcs-define-primop 'cadddr 1)
(pcs-define-primop 'caddr 1)
(pcs-define-primop 'cadr 1)
(pcs-define-primop 'car 1)
(pcs-define-primop 'cdaar 1)
(pcs-define-primop 'cdadr 1)
(pcs-define-primop 'cdar 1)
(pcs-define-primop 'cddar 1)
(pcs-define-primop 'cdddr 1)
(pcs-define-primop 'cddr 1)
(pcs-define-primop 'cdr 1)
(pcs-define-primop 'ceiling 1)
(pcs-define-primop 'char->integer 1)
(pcs-define-primop 'char-ci<? 2)
(pcs-define-primop 'char-ci=? 2)
(pcs-define-primop 'char-downcase 1)
(pcs-define-primop 'char-ready? pcs-primop-io-1)
(pcs-define-primop 'char-upcase 1)
(pcs-define-primop 'char<? 2)
(pcs-define-primop 'char=? 2)
(pcs-define-primop 'char? 1)
(pcs-define-primop 'closure? 1)
(pcs-define-primop 'complex? 1)
(pcs-define-primop 'cons 2)
(pcs-define-primop 'continuation? 1)
(pcs-define-primop 'display pcs-primop-io-2)
(pcs-define-primop 'environment-parent 1)
(pcs-define-primop 'environment? 1)
(pcs-define-primop 'eq? 2)
(pcs-define-primop 'equal? 2)
(pcs-define-primop 'eqv? 2)
(pcs-define-primop 'even? 1)
(pcs-define-primop 'float 1)
(pcs-define-primop 'float? 1)
(pcs-define-primop 'floor 1)
(pcs-define-primop 'getprop 2)
(pcs-define-primop 'integer->char 1)
(pcs-define-primop 'integer? 1)
(pcs-define-primop 'last-pair 1)
(pcs-define-primop 'length 1)
(pcs-define-primop 'list pcs-primop-list)
(pcs-define-primop 'list* pcs-primop-list*)
(pcs-define-primop 'list-tail 2)
(pcs-define-primop 'make-packed-vector 3)
(pcs-define-primop 'make-string pcs-primop-io-2) ; handle optional 2nd arg
(pcs-define-primop 'make-vector pcs-primop-make-vector)
(pcs-define-primop 'max pcs-primop-std-n2)
(pcs-define-primop 'member 2)
(pcs-define-primop 'memq 2)
(pcs-define-primop 'memv 2)
(pcs-define-primop 'min pcs-primop-std-n2)
(pcs-define-primop 'minus 1)
(pcs-define-primop 'negative? 1)
(pcs-define-primop 'newline pcs-primop-io-1)
(pcs-define-primop 'not 1)
(pcs-define-primop 'number? 1)
(pcs-define-primop 'object-hash 1)
(pcs-define-primop 'object-unhash 1)
(pcs-define-primop 'odd? 1)
(pcs-define-primop 'pair? 1)
(pcs-define-primop 'port? 1)
(pcs-define-primop 'positive? 1)
(pcs-define-primop 'prin1 pcs-primop-io-2)
(pcs-define-primop 'princ pcs-primop-io-2)
(pcs-define-primop 'print pcs-primop-io-2)
(pcs-define-primop 'print-length 1)
(pcs-define-primop 'proc? 1)
(pcs-define-primop 'proplist 1)
(pcs-define-primop 'putprop 3)
(pcs-define-primop 'quotient 2)
(pcs-define-primop 'rational? 1)
(pcs-define-primop 'read-line pcs-primop-io-1)
(pcs-define-primop 'read-atom pcs-primop-io-1)
(pcs-define-primop 'read-char pcs-primop-io-1)
(pcs-define-primop 'real? 1)
(pcs-define-primop 'remainder 2)
(pcs-define-primop 'remprop 2)
(pcs-define-primop 'reset 0)
(pcs-define-primop 'reverse! 1)
(pcs-define-primop 'round 1)
(pcs-define-primop 'scheme-reset 0)
(pcs-define-primop 'set-car! 2)
(pcs-define-primop 'set-cdr! 2)
(pcs-define-primop 'string->symbol 1)
(pcs-define-primop 'string->uninterned-symbol 1)
(pcs-define-primop 'string-append pcs-primop-append*)
(pcs-define-primop 'string-fill! 2)
(pcs-define-primop 'string-length 1)
(pcs-define-primop 'string-ref 2)
(pcs-define-primop 'string-set! 3)
(pcs-define-primop 'string? 1)
(pcs-define-primop 'substring 3)
(pcs-define-primop 'substring-find-next-char-in-set 4)
(pcs-define-primop 'substring-find-previous-char-in-set 4)
(pcs-define-primop 'symbol->string 1)
(pcs-define-primop 'symbol? 1)
(pcs-define-primop 'the-environment 0)
(pcs-define-primop '%make-hashed-environment 0)
(pcs-define-primop 'truncate 1)
(pcs-define-primop 'vector pcs-primop-vector)
(pcs-define-primop 'vector-fill! 2)
(pcs-define-primop 'vector-length 1)
(pcs-define-primop 'vector-ref 2)
(pcs-define-primop 'vector-set! 3)
(pcs-define-primop 'vector? 1)
(pcs-define-primop 'window-save-contents 1)
(pcs-define-primop 'window-restore-contents 2)
(pcs-define-primop 'write pcs-primop-io-2)
(pcs-define-primop 'write-char pcs-primop-io-2)
(pcs-define-primop 'zero? 1)
)
;;; --------------------------------------------------------------------
(define pcs-define-opcode ; !! NOTE !!
(lambda (op opcode) ; negative values mark
(putprop op opcode 'pcs*opcode))) ; side-effecting operations
;;; -- opcode assignments --
(begin
(pcs-define-opcode '%%car 064) ; (%%car nil) => nil
(pcs-define-opcode '%%cdr 065) ; (%%cdr nil) => nil
(pcs-define-opcode '%%fasl -191)
(pcs-define-opcode '%*imm 084)
(pcs-define-opcode '%+imm 081)
(pcs-define-opcode '%/imm 086)
(pcs-define-opcode '%append 113)
(pcs-define-opcode '%apply -056)
(pcs-define-opcode '%call/cc -054)
(pcs-define-opcode '%car 089) ; (%car nil) => #!unbound
(pcs-define-opcode '%cdr 090) ; (%cdr nil) => #!unbound
(pcs-define-opcode '%clear-window -211)
(pcs-define-opcode '%close-port -177)
(pcs-define-opcode '%define -220)
(pcs-define-opcode '%env-lu 219)
(pcs-define-opcode '%esc1 -232)
(pcs-define-opcode '%esc2 -233)
(pcs-define-opcode '%esc3 -234)
(pcs-define-opcode '%esc4 -235)
(pcs-define-opcode '%esc5 -236)
(pcs-define-opcode '%esc6 -237)
(pcs-define-opcode '%esc7 -238)
(pcs-define-opcode '%xesc -239)
(pcs-define-opcode '%graphics -215)
(pcs-define-opcode '%halt -248)
(pcs-define-opcode '%list2 120)
(pcs-define-opcode '%logxor 125)
(pcs-define-opcode '%logand 126)
(pcs-define-opcode '%logior 127)
(pcs-define-opcode '%make-window -208)
(pcs-define-opcode '%open-port -176)
(pcs-define-opcode '%random -091)
(pcs-define-opcode '%reify 216)
(pcs-define-opcode '%reify! -226)
(pcs-define-opcode '%reify-port 210)
(pcs-define-opcode '%reify-port! -209)
(pcs-define-opcode '%reify-stack 229)
(pcs-define-opcode '%reify-stack! -230)
(pcs-define-opcode '%restore-window -213)
(pcs-define-opcode '%save-window -212)
(pcs-define-opcode '%set-global-environment -225)
(pcs-define-opcode '%sfpos -231) ; set-file-position!
(pcs-define-opcode '%start-timer -174)
(pcs-define-opcode '%stop-timer -175)
(pcs-define-opcode '%string-append 214)
(pcs-define-opcode '%substring-display -172)
(pcs-define-opcode '%transcript -189)
)
(begin
(pcs-define-opcode '* 083)
(pcs-define-opcode '+ 080)
(pcs-define-opcode '- 082)
(pcs-define-opcode '/ 085)
(pcs-define-opcode '< 092)
(pcs-define-opcode '<= 093)
(pcs-define-opcode '<=? 093)
(pcs-define-opcode '<> 097)
(pcs-define-opcode '<>? 097)
(pcs-define-opcode '<? 092)
(pcs-define-opcode '= 094)
(pcs-define-opcode '=? 094)
(pcs-define-opcode '> 095)
(pcs-define-opcode '>= 096)
(pcs-define-opcode '>=? 096)
(pcs-define-opcode '>? 095)
(pcs-define-opcode 'abs 149)
(pcs-define-opcode 'append! -112)
(pcs-define-opcode 'assoc 110)
(pcs-define-opcode 'assq 108)
(pcs-define-opcode 'assv 109)
(pcs-define-opcode 'atom? 128)
(pcs-define-opcode 'caaar 070)
(pcs-define-opcode 'caadr 071)
(pcs-define-opcode 'caar 066)
(pcs-define-opcode 'cadar 072)
(pcs-define-opcode 'cadddr 078)
(pcs-define-opcode 'caddr 073)
(pcs-define-opcode 'cadr 067)
(pcs-define-opcode 'car 064) ; same as %%car
(pcs-define-opcode 'cdaar 074)
(pcs-define-opcode 'cdadr 075)
(pcs-define-opcode 'cdar 068)
(pcs-define-opcode 'cddar 076)
(pcs-define-opcode 'cdddr 077)
(pcs-define-opcode 'cddr 069)
(pcs-define-opcode 'cdr 065) ; same as %%cdr
(pcs-define-opcode 'ceiling 153)
(pcs-define-opcode 'char->integer 161)
(pcs-define-opcode 'char-ci<? 195)
(pcs-define-opcode 'char-ci=? 193)
(pcs-define-opcode 'char-downcase 197)
(pcs-define-opcode 'char-ready? 190)
(pcs-define-opcode 'char-upcase 196)
(pcs-define-opcode 'char<? 194)
(pcs-define-opcode 'char=? 192)
(pcs-define-opcode 'char? 156)
(pcs-define-opcode 'closure? 129)
(pcs-define-opcode 'complex? 137) ; same as NUMBER?
(pcs-define-opcode 'cons 079)
(pcs-define-opcode 'continuation? 131)
(pcs-define-opcode 'display -179)
(pcs-define-opcode 'environment-parent 218)
(pcs-define-opcode 'environment? 157)
(pcs-define-opcode 'eq? 100)
(pcs-define-opcode 'equal? 102)
(pcs-define-opcode 'eqv? 101)
(pcs-define-opcode 'even? 132)
(pcs-define-opcode 'float 150)
(pcs-define-opcode 'float? 133)
(pcs-define-opcode 'floor 152)
(pcs-define-opcode 'getprop 116)
(pcs-define-opcode 'integer->char 160)
(pcs-define-opcode 'integer? 135)
(pcs-define-opcode 'last-pair 166)
(pcs-define-opcode 'length 165)
(pcs-define-opcode 'list 111)
(pcs-define-opcode 'list-tail 122)
(pcs-define-opcode 'make-packed-vector 171)
(pcs-define-opcode 'make-string 201)
(pcs-define-opcode 'make-vector 168)
(pcs-define-opcode 'max 098)
(pcs-define-opcode 'member 105)
(pcs-define-opcode 'memq 103)
(pcs-define-opcode 'memv 104)
(pcs-define-opcode 'min 099)
(pcs-define-opcode 'minus 151)
(pcs-define-opcode 'negative? 147)
(pcs-define-opcode 'newline -181)
(pcs-define-opcode 'not 136)
(pcs-define-opcode 'number? 137)
(pcs-define-opcode 'object-hash -227)
(pcs-define-opcode 'object-unhash 228)
(pcs-define-opcode 'odd? 138)
(pcs-define-opcode 'pair? 139)
(pcs-define-opcode 'port? 140)
(pcs-define-opcode 'positive? 148)
(pcs-define-opcode 'prin1 -178)
(pcs-define-opcode 'princ -179)
(pcs-define-opcode 'print -180)
(pcs-define-opcode 'print-length 184)
(pcs-define-opcode 'proc? 141)
(pcs-define-opcode 'proplist 118)
(pcs-define-opcode 'putprop -117)
(pcs-define-opcode 'quotient 087)
(pcs-define-opcode 'rational? 135) ; same as INTEGER?
(pcs-define-opcode 'read-line -186)
(pcs-define-opcode 'read-atom -187)
(pcs-define-opcode 'read-char -188)
(pcs-define-opcode 'real? 137) ; same as NUMBER?
(pcs-define-opcode 'remainder 088)
(pcs-define-opcode 'remprop -119)
(pcs-define-opcode 'reset -251)
(pcs-define-opcode 'reverse! -106)
(pcs-define-opcode 'round 155)
(pcs-define-opcode 'scheme-reset -252)
(pcs-define-opcode 'set-car! -020)
(pcs-define-opcode 'set-cdr! -021)
(pcs-define-opcode 'string->symbol 203)
(pcs-define-opcode 'string->uninterned-symbol 204)
(pcs-define-opcode 'string-fill! -202)
(pcs-define-opcode 'string-length 198)
(pcs-define-opcode 'string-ref 199)
(pcs-define-opcode 'string-set! -200)
(pcs-define-opcode 'string? 143)
(pcs-define-opcode 'substring 167)
(pcs-define-opcode 'substring-find-next-char-in-set 206)
(pcs-define-opcode 'substring-find-previous-char-in-set 207)
(pcs-define-opcode 'symbol->string 205)
(pcs-define-opcode 'symbol? 144)
(pcs-define-opcode 'the-environment 217)
(pcs-define-opcode '%make-hashed-environment 62)
(pcs-define-opcode 'truncate 154)
(pcs-define-opcode 'vector-fill! -170)
(pcs-define-opcode 'vector-length 169)
(pcs-define-opcode 'vector-ref 011)
(pcs-define-opcode 'vector-set! -019)
(pcs-define-opcode 'vector? 145)
(pcs-define-opcode 'window-save-contents -212)
(pcs-define-opcode 'window-restore-contents -213)
(pcs-define-opcode 'write -178)
(pcs-define-opcode 'write-char -179)
(pcs-define-opcode 'zero? 146)
)
;;; --------------------------------------------------------------------
(begin
(pcs-define-opcode 'LOAD 000)
(pcs-define-opcode 'LOAD-CONSTANT 001)
(pcs-define-opcode 'LOAD-IMMEDIATE 002)
(pcs-define-opcode 'LOAD-LOCAL 004)
(pcs-define-opcode 'LOAD-LEX 005)
(pcs-define-opcode 'LOAD-ENV 006)
(pcs-define-opcode 'LOAD-GLOBAL 007)
(pcs-define-opcode 'LOAD-FLUID 008)
(pcs-define-opcode 'STORE-LOCAL -012)
(pcs-define-opcode 'STORE-LEX -013)
(pcs-define-opcode 'STORE-ENV -014)
(pcs-define-opcode 'STORE-GLOBAL -015)
(pcs-define-opcode 'STORE-GLOBAL-DEF -031)
(pcs-define-opcode 'STORE-FLUID -016)
(pcs-define-opcode 'POP -024)
(pcs-define-opcode 'PUSH -025)
(pcs-define-opcode 'DROP -026)
(pcs-define-opcode 'DROP-ENV -061)
(pcs-define-opcode 'PUSH-ENV -221)
(pcs-define-opcode 'BIND-FLUID -029)
(pcs-define-opcode 'UNBIND-FLUIDS -030)
(pcs-define-opcode '%%fluid-bound?%% 134)
(pcs-define-opcode 'J_S -032)
(pcs-define-opcode 'JN_S -034)
(pcs-define-opcode 'JNN_S -036)
(pcs-define-opcode 'JA_S -038)
(pcs-define-opcode 'JNA_S -040)
(pcs-define-opcode 'JE_S -042)
(pcs-define-opcode 'JNE_S -044)
(pcs-define-opcode 'J_L -033)
(pcs-define-opcode 'JN_L -035)
(pcs-define-opcode 'JNN_L -037)
(pcs-define-opcode 'JA_L -039)
(pcs-define-opcode 'JNA_L -041)
(pcs-define-opcode 'JE_L -043)
(pcs-define-opcode 'JNE_L -045)
(pcs-define-opcode 'CALL -048)
(pcs-define-opcode 'CALL-TR -049)
(pcs-define-opcode 'CCC -050)
(pcs-define-opcode 'CCC-TR -051)
(pcs-define-opcode 'CALL-CLOSURE -052)
(pcs-define-opcode 'CALL-CLOSURE-TR -053)
(pcs-define-opcode 'CCC-CLOSED -054)
(pcs-define-opcode 'CCC-CLOSED-TR -055)
(pcs-define-opcode 'APPLY-CLOSURE -056)
(pcs-define-opcode 'APPLY-CLOSURE-TR -057)
(pcs-define-opcode 'EXIT -059)
(pcs-define-opcode 'CLOSE -060)
(pcs-define-opcode '%begin-debug -255)
(pcs-define-opcode '%clear-registers -253)
(pcs-define-opcode '%compact-memory -247)
(pcs-define-opcode '%%execute -058)
(pcs-define-opcode '%garbage-collect -249)
(pcs-define-opcode '%internal-time 250)
)
;;; --------------------------------------------------------------------
(begin
(putprop '%begin-debug #!true 'pcs*nilargop) ; no source or dest
(putprop '%clear-registers #!true 'pcs*nilargop) ; no source or dest
(putprop '%compact-memory #!true 'pcs*nilargop) ; no source or dest
(putprop '%garbage-collect #!true 'pcs*nilargop) ; no source or dest
(putprop '%halt #!true 'pcs*nilargop) ; no source or dest
(putprop 'reset #!true 'pcs*nilargop) ; no source or dest
(putprop 'scheme-reset #!true 'pcs*nilargop) ; no source or dest
)
;;; --------------------------------------------------------------------
(begin ; collect garbage
(%clear-registers)
(%compact-memory))
;;; --------------------------------------------------------------------