BSD 3 development
[unix-history] / usr / src / cmd / px / 00case.s
# 00case.s
#
# Berkeley Pascal Assembler Kernel
#
.globl _interpret #normal interpreter entry point
#
# register definitions
#
# registers R0 - R6 are for scratch use
#
.set lino, r11
.set lc, r10
.set dp, r9
.set loop, r8
.set buf, r7
#
# Global constants
#
.set R2,0x004 #register fields in call mask
.set R3,0x008
.set R4,0x010
.set R5,0x020
.set R6,0x040
.set R7,0x080
.set R8,0x100
.set R9,0x200
.set R10,0x400
.set R11,0x800
.set SIGINT,2 #interrupt signal
.set SIGFPE,8 #arithmetic exception signal
.set SIGSEGV,11 #segmentation violation
.set MASK,6 #offset of save mask in call stack
.set FP,12 #offset of "fp" in call stack
.set PC,16 #offset of "pc" in call stack
.set REGS,20 #beginning of saved registers in call stack
.set O_DATE,0346 #DATE opcode number
.set O_TIME,0347 #TIME opcode number
.set tempsize,-256 #maximum required temporary stack space
.set HZ,60 #interrupt frequency
#
# program variables
#
.globl _display #runtime display
.globl _addrsze #size of addresses
.globl _file #current file name
.globl _bufopt #standard output buffering option
.globl _fchain #head of active file chain
.globl _llimit #max number of output lines
.globl _stcnt #number of stmts executed
.globl _stlim #max number of stmts to exec
.globl _nodump #1 => no postmortum dump
.globl _perrno #interpreter error number
.globl _profcnts #PX profile execution counts
.globl _pxpbuf #ptr to pxp buffer
.globl _pxpsize #size of pxp buffer
.globl _argc #number of passed args
.globl _argv #values of passed args
.globl __iob #base of I/O buffer block
#
# system subroutines
#
.globl _signal
.globl _time
.globl _times
#
# system math routines
#
.globl _atan
.globl _cos
.globl _exp
.globl _log
.globl _sin
.globl _sqrt
.globl _srand
.globl _rand
#
# pascal specific subroutines
#
.globl _error #error message routine
.globl _palloc #heap allocator
.globl _pfree
.globl _pcttot #set constructor
.globl _pdattim #getting date, time info
.globl _perror #process pxp errors
#
# initializing the interpreter
#
_interpret:
.word 0xffc #register save mask
moval iloop,r8
tstl 8(ap) #check for profiling
beql l0050
moval ploop,r8 #set profiling request
l0050:
callg *4(ap),l0051 #set ap to base of program
ret
l0051:
.word 0
bispsw $0xe0 #enable overflow traps
movl ap,r10 #program start address
moval _display,r9
moval -4(sp),(r9)
pushal stderr #set up global file variables
movl sp,stderr+FLEV
movl _llimit,stderr+LLIMIT
pushal stdout
movl sp,stdout+FLEV
movl _llimit,stdout+LLIMIT
pushal stdin
movl sp,stdin+FLEV
moval stdin,_fchain
jmp (r8) #begin interpreter
#
# main interpreter loop
# the instruction 'jmp (loop)'
# transfers here
#
ploop:
movzbl (r10),r0
incl _profcnts[r0]
iloop:
caseb (r10)+,$0,$255
optab:
.word _ABORT-optab
.word _HALT-optab
.word _TRA4-optab
.word _NODUMP-optab
.word _BEG-optab
.word _END-optab
.word _CALL-optab
.word _TRACNT-optab
.word _PUSH-optab
.word _POP-optab
.word _INX4-optab
.word _SDUP-optab
.word _IF-optab
.word _TRA-optab
.word _LINO-optab
.word _GOTO-optab
.word _REL2-optab
.word _REL4-optab
.word _REL24-optab
.word _REL42-optab
.word _REL8-optab
.word _RELG-optab
.word _RELT-optab
.word badop-optab
.word _REL28-optab
.word _REL48-optab
.word _REL82-optab
.word _REL84-optab
.word _AND-optab
.word _OR-optab
.word _NOT-optab
.word badop-optab
.word _AS2-optab
.word _AS4-optab
.word _AS24-optab
.word _AS42-optab
.word _AS8-optab
.word _INX2P2-optab
.word _INX4P2-optab
.word _AS-optab
.word _AS21-optab
.word _AS41-optab
.word _AS28-optab
.word _AS48-optab
.word _OFF-optab
.word _INX2-optab
.word _NIL-optab
.word _LV-optab
.word _ADD2-optab
.word _ADD4-optab
.word _ADD24-optab
.word _ADD42-optab
.word _ADD28-optab
.word _ADD48-optab
.word _ADD82-optab
.word _ADD84-optab
.word _SUB2-optab
.word _SUB4-optab
.word _SUB24-optab
.word _SUB42-optab
.word _SUB28-optab
.word _SUB48-optab
.word _SUB82-optab
.word _SUB84-optab
.word _MUL2-optab
.word _MUL4-optab
.word _MUL24-optab
.word _MUL42-optab
.word _MUL28-optab
.word _MUL48-optab
.word _MUL82-optab
.word _MUL84-optab
.word _ABS2-optab
.word _ABS4-optab
.word _ABS8-optab
.word badop-optab
.word _ADD8-optab
.word _SUB8-optab
.word _MUL8-optab
.word _DVD8-optab
.word _DIV2-optab
.word _DIV4-optab
.word _DIV24-optab
.word _DIV42-optab
.word badop-optab
.word badop-optab
.word badop-optab
.word badop-optab
.word _MOD2-optab
.word _MOD4-optab
.word _MOD24-optab
.word _MOD42-optab
.word badop-optab
.word badop-optab
.word badop-optab
.word badop-optab
.word _NEG2-optab
.word _NEG4-optab
.word _NEG8-optab
.word badop-optab
.word badop-optab
.word badop-optab
.word badop-optab
.word badop-optab
.word badop-optab
.word badop-optab
.word badop-optab
.word badop-optab
.word badop-optab
.word badop-optab
.word badop-optab
.word badop-optab
.word _DVD2-optab
.word _DVD4-optab
.word _DVD24-optab
.word _DVD42-optab
.word _DVD28-optab
.word _DVD48-optab
.word _DVD82-optab
.word _DVD84-optab
.word _RV1-optab
.word _RV2-optab
.word _RV4-optab
.word _RV8-optab
.word _IND1-optab
.word _IND2-optab
.word _IND4-optab
.word _IND8-optab
.word _CON1-optab
.word _CON2-optab
.word _CON4-optab
.word _CON8-optab
.word _RV-optab
.word _IND-optab
.word _CON-optab
.word badop-optab
.word _RANG2-optab
.word _RANG42-optab
.word _RSNG2-optab
.word _RSNG42-optab
.word _RANG4-optab
.word _RANG24-optab
.word _RSNG4-optab
.word _RSNG24-optab
.word _WRITEF-optab
.word _WRITEC-optab
.word _WRITES-optab
.word _WRITEB-optab
.word badop-optab
.word badop-optab
.word badop-optab
.word badop-optab
.word _BLKBEG-optab
.word _PUSH4-optab
.word _POP4-optab
.word badop-optab
.word badop-optab
.word badop-optab
.word badop-optab
.word badop-optab
.word _CASE1OP-optab
.word _CASE2OP-optab
.word _CASE4OP-optab
.word _PXPBUF-optab
.word _COUNT-optab
.word badop-optab
.word badop-optab
.word badop-optab
.word _ADDT-optab
.word _SUBT-optab
.word _MULT-optab
.word _INCT-optab
.word _CTTOT-optab
.word _CARD-optab
.word _IN-optab
.word _ASRT-optab
.word _FOR1U-optab
.word _FOR2U-optab
.word _FOR4U-optab
.word _FOR1D-optab
.word _FOR2D-optab
.word _FOR4D-optab
.word _STLIM-optab
.word _SCLCK-optab
.word _STOI-optab
.word _STOD-optab
.word _ITOD-optab
.word _ITOS-optab
.word _BUFF-optab
.word _WCLCK-optab
.word _WRHEX2-optab
.word _WRHEX4-optab
.word _GET-optab
.word _PUT-optab
.word _MESSAGE-optab
.word _FNIL-optab
.word _EOF-optab
.word _EOLN-optab
.word _RESET-optab
.word _REWRITE-optab
.word _REMOVE-optab
.word _READ4-optab
.word _UNIT-optab
.word _READC-optab
.word _READ8-optab
.word _UNITINP-optab
.word _UNITOUT-optab
.word _READLN-optab
.word _WRIT2-optab
.word _WRIT4-optab
.word _WRITB-optab
.word _WRITC-optab
.word _WRIT8-optab
.word _WRITG-optab
.word _WRIT82-optab
.word _WRITLN-optab
.word _WROCT2-optab
.word _WROCT4-optab
.word _FLUSH-optab
.word _PACK-optab
.word _UNPACK-optab
.word _LLIMIT-optab
.word _ARGC-optab
.word _ARGV-optab
.word _CLCK-optab
.word _SEED-optab
.word _RANDOM-optab
.word _DISPOSE-optab
.word _NEW-optab
.word _EXPO-optab
.word _DATE-optab
.word _TIME-optab
.word _ATAN-optab
.word _COS-optab
.word _EXP-optab
.word _LN-optab
.word _SIN-optab
.word _SQRT-optab
.word _CHR2-optab
.word _CHR4-optab
.word _ODD2-optab
.word _ODD4-optab
.word _PRED2-optab
.word _PRED4-optab
.word _PRED24-optab
.word _SUCC2-optab
.word _SUCC4-optab
.word _SUCC24-optab
.word _DEFNAME-optab
.word _PAGE-optab
.word _UNDEF-optab
.word _SQR2-optab
.word _SQR4-optab
.word _SQR8-optab
.word _ROUND-optab
.word _TRUNC-optab
badop:
incl r10
movw $EBADOP,_perrno
jbr error