.TITLE CC206 .IDENT /X01/ .NLIST BEX .ENABL LC ; ; C COMPILER ; CODE TABLES (NON EIS) ; ; VERSION X01 ; ; DAVID G. CONROY 01-APR-78 ; .GLOBL OP0 .GLOBL OP1 .GLOBL STAB .GLOBL TTAB .GLOBL RTAB .GLOBL CTAB .GLOBL ETAB ; ; MACROS FOR BUILDING THE CODE TABLES ; THEY DO LITTLE WORK ; THEIR MAIN FUNCTION IS TO REDUCE TYPING ; .MACRO TABEND .WORD 0 .ENDM .MACRO TAB STR,TL,KL,TR,KR .WORD STR .BYTE TY.'TL,KL,TY.'TR,KR .ENDM ; ; MACROS OPERATIONS IN THE CODE STRINGS ARE INDICATED BY NEGATIVE ; BYTES. THE ORDER OF THESE THINGS IS CRITICAL IN THAT THEY TRACK ; A JUMP TABLE IN CEXPR. ; M = -1 ;[M] SET MODULO RETURN F = -2 ;[F] SET FUNCTION RETURN R = -3 ;[R] CURRENT REGISTER R.1 = -4 ;[R+1] CURRENT REGISTER + 1 AL = -5 ;[AL] ADDRESS OF LEFT ALN = -6 ;[ALN] ADDRESS OF LEFT, NO SIDE EFFECT AR = -7 ;[AR] ADDRESS OF RIGHT ARN = -10 ;[ARN] ADDRESS OF RIGHT, NO SIDE EFFECT OP.0 = -11 ;[OP0] OPCODE OP.1 = -12 ;[OP1] OPCODE AL.2 = -13 ;[AL+2] ADDRESS OF LEFT, LONG AR.2 = -14 ;[AR+2] ADDRESS OF RIGHT, LONG TL = -15 ;[TL] TYPE OF LEFT T = -16 ;[T] TYPE OF RIGHT OR LEFT SRVA = -17 ;[SRVA] SET RIGHT VALUE ANYWHERE SRV = -20 ;[SRV] SET RIGHT VALUE SRAA = -21 ;[SRAA] SET RIGHT ADDRESS ANYWHERE SRA = -22 ;[SRA] SET RIGHT ADDRESS SLVA = -23 ;[SLVA] SET LEFT VALUE ANYWHERE SLV = -24 ;[SLV] SET LEFT VALUE SLAA = -25 ;[SLAA] SET LEFT ADDRESS ANYWHERE SLA = -26 ;[SLA] SET LEFT ADDRESS SLAC = -27 ;[SLAC] SET LEFT ADDRESS CURRENT REG. LL = -30 ;[LL] LOAD LEFT LL.1 = -31 ;[LL+1] LOAD LEFT INTO [R+1] LR = -32 ;[LR] LOAD RIGHT PL = -33 ;[PL] PUSH LEFT PLA = -34 ;[PLA] PUSH LEFT ADDRESS PR = -35 ;[PR] PUSH RIGHT V = -36 ;[V] ADC OR SBC FOR LONGS ; ; ASCII STRINGS USED BY THE [OP0] AND [OP1] MACROS ; ADD: .ASCIZ "add" SUB: .ASCIZ "sub" MUL: .ASCIZ "mul" DIV: .ASCIZ "div" MOD: .ASCIZ "mod" ASL: .ASCIZ "asl" ASR: .ASCIZ "asr" BIC: .ASCIZ "bic" BIS: .ASCIZ "bis" XOR: .ASCIZ "xor" INC: .ASCIZ "inc" DEC: .ASCIZ "dec" NEG: .ASCIZ "neg" COM: .ASCIZ "com" CLR: .ASCIZ "clr" MOV: .ASCIZ "mov" BIT: .ASCIZ "bit" BEQ: .ASCIZ "beq" BNE: .ASCIZ "bne" BGT: .ASCIZ "bgt" BGE: .ASCIZ "bge" BLE: .ASCIZ "ble" BLT: .ASCIZ "blt" BHI: .ASCIZ "bhi" BLO: .ASCIZ "blo" BLOS: .ASCIZ "blos" BHIS: .ASCIZ "bhis" BR: .ASCIZ "br" NOP: .ASCIZ "nop" BMI: .ASCIZ "bmi" BPL: .ASCIZ "bpl" .PAGE ;+ ; ** OP0 - OPCODE TABLE 0 ; ** OP1 - OPCODE TABLE 1 ; ; THESE TABLES PROVIDE THE ASCII STRINGS FOR THE [OP0] AND ; [OP1] MACROS. ;- .EVEN OP0: .WORD 0 ;OP.EOF .WORD 0 ;OP.CON .WORD 0 ;OP.ID .WORD 0 ;OP.LID .WORD 0 ;OP.4 .WORD 0 ;OP.5 .WORD 0 ;OP.REG .WORD 0 ;OP.INX .WORD 0 ;OP.AUI .WORD 0 ;OP.AUD .WORD ADD ;OP.ADD .WORD SUB ;OP.SUB .WORD MUL ;OP.MUL .WORD DIV ;OP.DIV .WORD MOD ;OP.MOD .WORD ASL ;OP.ASL .WORD ASR ;OP.ASR .WORD 0 ;OP.AND .WORD BIS ;OP.OR .WORD XOR ;OP.XOR .WORD ADD ;OP.ADA .WORD SUB ;OP.SBA .WORD MUL ;OP.MUA .WORD DIV ;OP.DVA .WORD MOD ;OP.MOA .WORD ASL ;OP.ALA .WORD ASR ;OP.ARA .WORD 0 ;OP.ANA .WORD BIS ;OP.ORA .WORD 0 ;OP.XRA .WORD BEQ ;OP.EQ .WORD BNE ;OP.NE .WORD BLT ;OP.LT .WORD BLE ;OP.LE .WORD BGE ;OP.GE .WORD BGT ;OP.GT .WORD BLO ;OP.LTU .WORD BLOS ;OP.LEU .WORD BHIS ;OP.GEU .WORD BHI ;OP.GTU .WORD 0 ;OP.AA .WORD 0 ;OP.OO .WORD ADD ;OP.INB .WORD ADD ;OP.INA .WORD SUB ;OP.DEB .WORD SUB ;OP.DEA .WORD MOV ;OP.ASG .WORD 0 ;OP.ADR .WORD 0 ;OP.IND .WORD NEG ;OP.NEG .WORD COM ;OP.COM .WORD 0 ;OP.NOT .WORD 0 ;OP.QRY .WORD 0 ;OP.CLN .WORD 0 ;OP.CMA .WORD 0 ;OP.SEQ .WORD BIC ;OP.BIC .WORD BIC ;OP.BCA .WORD BIT ;OP.BIT .WORD 0 ;OP.JSR .WORD 0 ;OP.CVR .WORD 0 ;OP.CVM .WORD 0 ;OP.FSR .WORD 0 ;OP.FSM .WORD 0 ;OP.LOD .WORD 0 ;OP.CST .WORD 0 ;OP.NAC OP1: .WORD 0 ;OP.EOF .WORD 0 ;OP.CON .WORD 0 ;OP.ID .WORD 0 ;OP.LID .WORD 0 ;OP.4 .WORD 0 ;OP.5 .WORD 0 ;OP.REG .WORD 0 ;OP.INX .WORD 0 ;OP.AUI .WORD 0 ;OP.AUD .WORD INC ;OP.ADD .WORD DEC ;OP.SUB .WORD 0 ;OP.MUL .WORD 0 ;OP.DIV .WORD 0 ;OP.MOD .WORD ASL ;OP.ASL .WORD ASR ;OP.ASR .WORD 0 ;OP.AND .WORD 0 ;OP.OR .WORD XOR ;OP.XOR .WORD INC ;OP.ADA .WORD DEC ;OP.SBA .WORD 0 ;OP.MUA .WORD 0 ;OP.DVA .WORD 0 ;OP.MOA .WORD ASL ;OP.ALA .WORD ASR ;OP.ARA .WORD 0 ;OP.ANA .WORD 0 ;OP.ORA .WORD 0 ;OP.XRA .WORD BEQ ;OP.EQ .WORD BNE ;OP.NE .WORD BMI ;OP.LT .WORD 0 ;OP.LE .WORD BPL ;OP.GE .WORD 0 ;OP.GT .WORD NOP ;OP.LTU .WORD BEQ ;OP.LEU .WORD BR ;OP.GEU .WORD BNE ;OP.GTU .WORD 0 ;OP.AA .WORD 0 ;OP.OO .WORD INC ;OP.INB .WORD INC ;OP.INA .WORD DEC ;OP.DEB .WORD DEC ;OP.DEA .WORD CLR ;OP.ASG .WORD 0 ;OP.ADR .WORD 0 ;OP.IND .WORD NEG ;OP.NEG .WORD COM ;OP.COM .WORD 0 ;OP.NOT .WORD 0 ;OP.QRY .WORD 0 ;OP.CLN .WORD 0 ;OP.CMA .WORD 0 ;OP.SEQ .WORD 0 ;OP.BIC .WORD 0 ;OP.BCA .WORD 0 ;OP.BIT .WORD 0 ;OP.JSR .WORD 0 ;OP.CVR .WORD 0 ;OP.CVM .WORD 0 ;OP.FSR .WORD 0 ;OP.FSM .WORD 0 ;OP.LOD .WORD 0 ;OP.CST .WORD 0 ;OP.NAC .PAGE ;+ ; ** STAB - EXPRESSION TO -(SP) ; ** TTAB - EXPRESSION TO (SP) ; ; THIS SMALL CODE GENERATION TABLE IS USED TO COMPILE EXPRESSIONS TO ; -(SP). MOST OF TIME AN EXPRESSION IS COMPILED TO -(SP) BY THE RTAB ; AND A MOV ONTO THE STACK. ; ; TTAB IS A FAKE. IT IS NEVER USED AS A CODE TABLE. IT MUST, HOWEVER ; BE UNIQUE. ;- TTAB: .WORD 0 ;FAKE STAB: .WORD OP.LOD,10$ ;LEAF NODES .WORD OP.ADD,20$ ;ADDITION AND SUBTRACTION .WORD OP.SUB,20$ ; .WORD OP.OR, 30$ ;BIS AND BIC .WORD OP.BIC,30$ ; .WORD OP.COM,40$ ;UNARY OPS .WORD OP.NEG,40$ ; .WORD OP.INA,50$ ;INCREMENT AND DECREMENT .WORD OP.DEA,50$ ; .WORD OP.INB,60$ ; .WORD OP.DEB,60$ ; .WORD 0 ;END OF TABLE 10$: TAB 100$, INT, CON0, INT, ANY TAB 101$, INT, ANY, INT, ANY TAB 109$, LNG, ANY, LNG, ANY TABEND 20$: TAB 102$, INT, ANY, INT, CON0 TAB 103$, INT, ANY, INT, CON1 30$: TAB 104$, INT, ANY, INT, ADDR TAB 112$, INT, ANY, INT, ANY TABEND 40$: TAB 103$, INT, ANY, INT, ANY TABEND 50$: TAB 105$, INT, ANY, INT, CON1 TAB 106$, INT, ANY, INT, ADDR TABEND 60$: TAB 107$, INT, ANY, INT, CON1 TAB 108$, INT, ANY, INT, ADDR TABEND 100$: .ASCIZ " clr -(sp)"<12> 101$: .ASCIZ " mov "",-(sp)"<12> 102$: .ASCIZ 103$: .ASCII .ASCIZ " "" (sp)"<12> 104$: .ASCII .ASCIZ " "" "",(sp)"<12> 105$: .ASCII .ASCII " mov "",-(sp)"<12> .ASCIZ " "" "<12> 106$: .ASCII .ASCII " mov "",-(sp)"<12> .ASCIZ " "" "","<12> 107$: .ASCII .ASCII " "" "<12> .ASCIZ " mov "",-(sp)"<12> 108$: .ASCII .ASCII " "" "","<12> .ASCIZ " mov "",-(sp)"<12> 109$: .ASCII " mov "",-(sp)"<12> .ASCIZ " mov "",-(sp)"<12> 112$: .ASCII .ASCII .ASCIZ " "" "",(sp)"<12> .EVEN .PAGE ;+ ; ** RTAB - EXPRESSION TO REGISTER ; ; THIS TABLE IS USED TO COMPILE CODE TO LOAD THE RESULT OF A TREE ; INTO A REGISTER. IT IS ALSO USED AS A DEFAULT TABLE IF THERE IS ; NO MATCH IN THE ETAB, STAB OR CTAB. THIS TABLE MUST BE ABLE TO ; HANDLE EVERYTING OR THERE IS AN ERROR. ;- RTAB: .WORD OP.ADD,10$ ;ADDITION AND SUBTRACTION .WORD OP.SUB,10$ ; .WORD OP.MUL,12$ ;MULTIPLICATION .WORD OP.DIV,14$ ;DIVISION .WORD OP.MOD,14$ ;REMAINDER .WORD OP.ASL,19$ ;SHIFTS .WORD OP.ASR,18$ ;INCLUDE SPECIAL UNSIGNED HOOK .WORD OP.OR, 20$ ;BITWISE LOGICALS .WORD OP.BIC,20$ ; .WORD OP.XOR,22$ ; .WORD OP.INB,24$ ;PREFIX INCREMENT AND DECREMENT .WORD OP.DEB,24$ ; .WORD OP.INA,26$ ;POSTFIX INCREMENT AND DECREMENT .WORD OP.DEA,26$ ; .WORD OP.NEG,28$ ;NEGATION .WORD OP.COM,29$ ;BITWISE COMPLEMENT .WORD OP.IND,30$ ;INDIRECTION .WORD OP.LOD,32$ ;LEAF NODES .WORD OP.CVR,34$ ;CONVERT TYPE TO REGISTER .WORD OP.ADA,36$ ;=+ AND =- .WORD OP.SBA,36$ ; .WORD OP.ORA,38$ ;=OR AND =BIC .WORD OP.BCA,38$ ; .WORD OP.ALA,41$ ;=>> AND =<< .WORD OP.ARA,40$ ; .WORD OP.MUA,42$ ;=* .WORD OP.DVA,42$ ;=/ .WORD OP.MOA,42$ ;=% .WORD OP.XRA,50$ ;=^ .WORD OP.ASG,52$ ;= .WORD 0 ;END OF TABLE ; ; ADDITION. ; SUBTRACTION. ; 10$: TAB 100$, INT, ANY, INT, CON0 TAB 101$, INT, ANY, INT, CON1 TAB 102$, INT, ANY, INT, EASY TAB 103$, LNG, ANY, INT, EASY TAB 104$, LNG, ANY, LNG, EASY TAB 105$, INT, ANY, INT, ANY TAB 106$, LNG, ANY, INT, ANY TAB 107$, LNG, ANY, LNG, ANY TABEND ; ; MULTIPLICATION. ; 12$: TAB 163$, INT, ADDR, INT, CON3 TAB 164$, INT, ADDR, INT, CON5 TAB 165$, INT, ADDR, INT, CON6 TAB 166$, INT, ADDR, INT, CON7 TAB 167$, INT, ADDR, INT, CON9 TAB 168$, INT, ADDR, INT, CON10 TAB 169$, INT, ADDR, INT, CON12 TAB 170$, INT, ANY, INT, CON0 TAB 100$, INT, ANY, INT, CON1 TAB 171$, INT, ANY, INT, CON2 TAB 172$, INT, ANY, INT, CON3 TAB 173$, INT, ANY, INT, CON4 TAB 174$, INT, ANY, INT, CON5 TAB 175$, INT, ANY, INT, CON6 TAB 176$, INT, ANY, INT, CON7 TAB 177$, INT, ANY, INT, CON8 TAB 178$, INT, ANY, INT, CON9 TAB 179$, INT, ANY, INT, CON10 TAB 180$, INT, ANY, INT, CON12 TAB 181$, INT, ANY, INT, CON16 TAB 182$, INT, ANY, INT, CON32 TAB 183$, INT, ANY, INT, ANY TAB 184$, LNG, ADDR, INT, CON3 TAB 185$, LNG, ANY, INT, CON0 TAB 100$, LNG, ANY, INT, CON1 TAB 186$, LNG, ANY, INT, CON2 TAB 187$, LNG, ANY, INT, CON4 TAB 188$, LNG, ANY, LNG, ANY TAB 189$, DBL, ANY, DBL, ANY TABEND ; ; DIVISION. ; REMAINDER. ; 14$: TAB 108$, INT, ANY, INT, ANY TAB 109$, LNG, ANY, LNG, ANY TABEND ; ; SHIFTS. ; NOTE SPECIAL ENTRY FOR UNSIGNED ">>" ; OF 1. ; 18$: TAB 196$, UNS, ANY, INT, CON1 19$: TAB 101$, INT, ANY, INT, CON1 TAB 190$, INT, ANY, INT, CON2 TAB 191$, INT, ANY, INT, CON3 TAB 192$, INT, ANY, INT, CON4 TAB 193$, INT, ANY, INT, CON5 TAB 108$, INT, ANY, INT, ANY TAB 111$, LNG, ANY, INT, ANY TAB 110$, LNG, ANY, LNG, ANY TABEND ; ; OR. ; BIC. ; 20$: TAB 102$, INT, ANY, INT, EASY TAB 121$, LNG, ANY, INT, EASY TAB 122$, LNG, ANY, LNG, EASY TAB 105$, INT, ANY, INT, ANY TAB 123$, LNG, ANY, INT, ANY TAB 124$, LNG, ANY, LNG, ANY TABEND ; ; EXCLUSIVE OR. ; 22$: TAB 125$, INT, ANY, INT, ANY TAB 109$, LNG, ANY, LNG, ANY TABEND ; ; PREFIX INCREMENT. ; PREFIX DECREMENT. ; 24$: TAB 126$, INT, ANY, INT, CON1 TAB 126$, CHR, ANY, INT, CON1 TAB 127$, INT, ANY, INT, ADDR TABEND ; ; POSTFIX INCREMENT. ; POSTFIX DECREMENT. ; 26$: TAB 128$, INT, EASY, INT, CON1 TAB 128$, CHR, EASY, INT, CON1 TAB 129$, INT, ANY, INT, CON1 TAB 129$, CHR, ANY, INT, CON1 TAB 130$, INT, EASY, INT, ADDR TAB 131$, INT, ANY, INT, ADDR TABEND ; ; NEGATION. ; 28$: TAB 132$, INT, ANY, INT, ANY TAB 133$, LNG, ANY, LNG, ANY TABEND ; ; COMPLEMENT. ; 29$: TAB 132$, INT, ANY, INT, ANY TAB 134$, LNG, ANY, LNG, ANY TABEND ; ; STAR. ; 30$: TAB 200$, CHR, ANY, INT, ANY TAB 201$, INT, ANY, INT, ANY TAB 202$, LNG, ANY, INT, ANY TABEND ; ; LEAF NODES. ; 32$: TAB 139$, INT, CON0, INT, ANY TAB 135$, INT, ANY, INT, ANY TAB 135$, CHR, ANY, CHR, ANY TAB 136$, LNG, ANY, LNG, ANY TABEND ; ; CVR. ; 34$: TAB 135$, INT, ANY, CHR, ANY TAB 140$, LNG, ANY, CHR, ANY TAB 140$, LNG, ANY, INT, ANY TAB 141$, LNG, ANY, UNS, ANY TABEND ; ; ASSIGNED ADDITION. ; ASSIGNED SUBTRACTION. ; ASSIGNED OR. ; ASSIGNED BIC. ; ; CAVEAT: NO LONGS. ; 36$: TAB 100$, INT, ANY, INT, CON0 TAB 100$, CHR, ANY, INT, CON0 TAB 126$, INT, ANY, INT, CON1 TAB 126$, CHR, ANY, INT, CON1 38$: TAB 127$, INT, ADDR, INT, ADDR TAB 146$, INT, ADDR, INT, ANY TAB 145$, INT, EASY, INT, ADDR TAB 145$, CHR, EASY, INT, ADDR TAB 147$, INT, EASY, INT, ANY TAB 147$, CHR, EASY, INT, ANY TAB 148$, INT, ANY, INT, ANY TAB 148$, CHR, ANY, INT, ANY TABEND ; ; ASSIGNED LEFT SHIFT. ; ASSIGNED RIGHT SHIFT. ; ASSIGNED MULTIPLY. ; ASSIGNED DIVIDE. ; ASSIGNED MODULUS. ; ; CAVEAT: NO LONGS. ; 40$: TAB 197$, UNS, ANY, INT, CON1 41$: TAB 126$, INT, ANY, INT, CON1 TAB 126$, CHR, ANY, INT, CON1 42$: TAB 198$, INT, ADDR, INT, ANY TAB 199$, CHR, ADDR, INT, ANY TAB 151$, INT, ANY, INT, ANY TAB 152$, CHR, ANY, INT, ANY TABEND ; ; ASSIGNED EXCLUSIVE OR. ; ; CAVEAT: NO LONGS. ; 50$: TAB 194$, INT, ADDR, INT, ANY TAB 195$, CHR, ADDR, INT, ANY TAB 158$, INT, ANY, INT, ANY TAB 159$, CHR, ANY, INT, ANY TABEND ; ; ASSIGNMENT. ; ; CAVEAT: NO LONGS. ; 52$: TAB 160$, INT, EASY, INT, ANY TAB 160$, CHR, EASY, INT, ANY TAB 161$, INT, ANY, INT, EASY TAB 161$, CHR, ANY, INT, EASY TAB 162$, INT, ANY, INT, ANY TAB 162$, CHR, ANY, INT, ANY TABEND ; ; CODE BURSTS. ; 100$: .ASCIZ 101$: .ASCII .ASCIZ " "" "<12> 102$: .ASCII .ASCII .ASCIZ " "" "","<12> 103$: .ASCII .ASCII .ASCII " "" "","<12> .ASCIZ " "" "<12> 104$: .ASCII .ASCII .ASCII " "" "","<12> .ASCII " "" "<12> .ASCIZ " "" "","<12> 105$: .ASCII .ASCII .ASCIZ " "" (sp)+,"<12> 106$: .ASCII .ASCII .ASCII " "" (sp)+,"<12> .ASCIZ " "" "<12> 107$: .ASCII .ASCII .ASCII " "" (sp)+,"<12> .ASCII " "" (sp)+,"<12> .ASCIZ " "" "<12> 108$: .ASCII .ASCII .ASCII " .globl _"<12> .ASCII " jsr pc,_"<12> .ASCII " cmp (sp)+,(sp)+"<12> .ASCIZ 109$: .ASCII .ASCII .ASCII " .globl _l"<12> .ASCII " jsr pc,_l"<12> .ASCII " add $10,sp"<12> .ASCIZ 110$: .ASCII .ASCII .ASCII " .globl _d"<12> .ASCII " jsr pc,_d"<12> .ASCII " add $20,sp"<12> .ASCIZ 111$: .ASCII .ASCII .ASCII " .globl _li"<12> .ASCII " jsr pc,_li"<12> .ASCII " add $6,sp"<12> .ASCIZ 121$: .ASCII .ASCII .ASCIZ " "" "","<12> 122$: .ASCII .ASCII .ASCII " "" "","<12> .ASCIZ " "" "","<12> 123$: .ASCII .ASCII .ASCIZ " "" (sp)+,"<12> 124$: .ASCII .ASCII .ASCII " "" (sp)+,"<12> .ASCIZ " "" (sp)+,"<12> 125$: .ASCII .ASCII .ASCII " mov "",-(sp)"<12> .ASCII " bic "","<12> .ASCII " bic (sp)+,"<12> .ASCIZ " bis "","<12> 126$: .ASCII .ASCII " "" "<12> .ASCIZ " mov"" "","<12> 127$: .ASCII .ASCII " "" "","<12> .ASCIZ " mov "","<12> 128$: .ASCII .ASCII " mov"" "","<12> .ASCIZ " "" "<12> 129$: .ASCII .ASCII " mov"" *(sp),"<12> .ASCIZ " "" *(sp)+"<12> 130$: .ASCII .ASCII " mov "","<12> .ASCIZ " "" "","<12> 131$: .ASCII .ASCII " mov *(sp),"<12> .ASCIZ " "" "",*(sp)+"<12> 132$: .ASCII .ASCIZ " "" "<12> 133$: .ASCII .ASCII " neg "<12> .ASCII " neg "<12> .ASCIZ " sbc "<12> 134$: .ASCII .ASCII " com "<12> .ASCIZ " com "<12> 135$: .ASCII .ASCIZ " mov"" "","<12> 136$: .ASCII .ASCII " mov "","<12> .ASCIZ " mov "","<12> 139$: .ASCIZ " clr"" "<12> 140$: .ASCII .ASCII " mov"" "","<12> .ASCIZ " sxt "<12> 141$: .ASCII .ASCII " mov "","<12> .ASCIZ " clr "<12> 145$: .ASCII .ASCII " mov"" "","<12> .ASCII " "" "","<12> .ASCIZ " mov"" "","<12> 146$: .ASCII .ASCII " "" "","<12> .ASCIZ " mov "","<12> 147$: .ASCII .ASCII .ASCII " mov"" "","<12> .ASCII " "" (sp)+,"<12> .ASCIZ " mov"" "","<12> 148$: .ASCII .ASCII .ASCII " mov"" *2(sp),"<12> .ASCII " "" (sp)+,"<12> .ASCIZ " mov"" "",*(sp)+"<12> 150$: .ASCII .ASCII .ASCII " .globl _"<12> .ASCII " mov "",-(sp)"<12> .ASCII " jsr pc,_"<12> .ASCII " cmp (sp)+,(sp)+"<12> .ASCII " mov r0,"<12> .ASCIZ 151$: .ASCII .ASCII .ASCII " .globl _"<12> .ASCII " mov *2(sp),-(sp)"<12> .ASCII " jsr pc,_"<12> .ASCII " cmp (sp)+,(sp)+"<12> .ASCII " mov r0,*(sp)+"<12> .ASCIZ 152$: .ASCII .ASCII .ASCII " .globl _"<12> .ASCII " movb *2(sp),r0"<12> .ASCII " mov r0,-(sp)"<12> .ASCII " jsr pc,_"<12> .ASCII " cmp (sp)+,(sp)+"<12> .ASCII " movb r0,*(sp)+"<12> .ASCIZ 158$: .ASCII .ASCII .ASCII " mov (sp),-(sp)"<12> .ASCII " mov *4(sp),"<12> .ASCII " bic "",2(sp)"<12> .ASCII " bic (sp)+,"<12> .ASCII " bis (sp)+,"<12> .ASCIZ " mov "",*(sp)+"<12> 159$: .ASCII .ASCII .ASCII " mov (sp),-(sp)"<12> .ASCII " movb *4(sp),"<12> .ASCII " bic "",2(sp)"<12> .ASCII " bic (sp)+,"<12> .ASCII " bis (sp)+,"<12> .ASCIZ " movb "",*(sp)+"<12> 160$: .ASCII .ASCII .ASCIZ " mov"" "","<12> 161$: .ASCII .ASCII .ASCII " mov"" "","<12> .ASCIZ " mov"" "","<12> 162$: .ASCII .ASCII .ASCIZ " mov"" "",*(sp)+"<12> 163$: .ASCII " mov "","<12> .ASCII " asl "<12> .ASCIZ " add "","<12> 164$: .ASCII " mov "","<12> .ASCII " asl "<12> .ASCII " asl "<12> .ASCIZ " add "","<12> 165$: .ASCII " mov "","<12> .ASCII " asl "<12> .ASCII " add "","<12> .ASCIZ " asl "<12> 166$: .ASCII " mov "","<12> .ASCII " asl "<12> .ASCII " asl "<12> .ASCII " asl "<12> .ASCIZ " sub "","<12> 167$: .ASCII " mov "","<12> .ASCII " asl "<12> .ASCII " asl "<12> .ASCII " asl "<12> .ASCIZ " add "","<12> 168$: .ASCII " mov "","<12> .ASCII " asl "<12> .ASCII " asl "<12> .ASCII " add "","<12> .ASCIZ " asl "<12> 169$: .ASCII " mov "","<12> .ASCII " asl "<12> .ASCII " add "","<12> .ASCII " asl "<12> .ASCIZ " asl "<12> 170$: .ASCIZ " clr "<12> 171$: .ASCII .ASCIZ " asl "<12> 172$: .ASCII .ASCII " mov "",-(sp)"<12> .ASCII " asl "<12> .ASCIZ " add (sp)+,"<12> 173$: .ASCII .ASCII " asl "<12> .ASCIZ " asl "<12> 174$: .ASCII .ASCII " mov "",-(sp)"<12> .ASCII " asl "<12> .ASCII " asl "<12> .ASCIZ " add (sp)+,"<12> 175$: .ASCII .ASCII " mov "",-(sp)"<12> .ASCII " asl "<12> .ASCII " add (sp)+,"<12> .ASCIZ " asl "<12> 176$: .ASCII .ASCII " mov "",-(sp)"<12> .ASCII " asl "<12> .ASCII " asl "<12> .ASCII " asl "<12> .ASCIZ " sub (sp)+,"<12> 177$: .ASCII .ASCII " asl "<12> .ASCII " asl "<12> .ASCIZ " asl "<12> 178$: .ASCII .ASCII " mov "",-(sp)"<12> .ASCII " asl "<12> .ASCII " asl "<12> .ASCII " asl "<12> .ASCIZ " add (sp)+,"<12> 179$: .ASCII .ASCII " mov "",-(sp)"<12> .ASCII " asl "<12> .ASCII " asl "<12> .ASCII " add (sp)+,"<12> .ASCIZ " asl "<12> 180$: .ASCII .ASCII " mov "",-(sp)"<12> .ASCII " asl "<12> .ASCII " add (sp)+,"<12> .ASCII " asl "<12> .ASCIZ " asl "<12> 181$: .ASCII .ASCII " asl "<12> .ASCII " asl "<12> .ASCII " asl "<12> .ASCIZ " asl "<12> 182$: .ASCII .ASCII " asl "<12> .ASCII " asl "<12> .ASCII " asl "<12> .ASCII " asl "<12> .ASCIZ " asl "<12> 183$: .ASCII .ASCII .ASCII " .globl _mul"<12> .ASCII " jsr pc,_mul"<12> .ASCII " cmp (sp)+,(sp)+"<12> .ASCIZ 184$: .ASCII .ASCII " asl "<12> .ASCII " rol "<12> .ASCII " add "","<12> .ASCII " add "","<12> .ASCIZ " adc "<12> 185$: .ASCII " clr "<12> .ASCIZ " clr "<12> 186$: .ASCII .ASCII " asl "<12> .ASCIZ " rol "<12> 187$: .ASCII .ASCII " asl "<12> .ASCII " rol "<12> .ASCII " asl "<12> .ASCIZ " rol "<12> 188$: .ASCII .ASCII .ASCII " .globl _lmul"<12> .ASCII " jsr pc,_lmul"<12> .ASCII " add $10,sp"<12> .ASCIZ 189$: .ASCII .ASCII .ASCII " .globl _dmul"<12> .ASCII " jsr pc,_dmul"<12> .ASCII " add $20,sp"<12> .ASCIZ 190$: .ASCII .ASCII " "" "<12> .ASCIZ " "" "<12> 191$: .ASCII .ASCII " "" "<12> .ASCII " "" "<12> .ASCIZ " "" "<12> 192$: .ASCII .ASCII " "" "<12> .ASCII " "" "<12> .ASCII " "" "<12> .ASCIZ " "" "<12> 193$: .ASCII .ASCII " "" "<12> .ASCII " "" "<12> .ASCII " "" "<12> .ASCII " "" "<12> .ASCIZ " "" "<12> 194$: .ASCII .ASCII " mov (sp),-(sp)"<12> .ASCII " mov "","<12> .ASCII " bic "",2(sp)"<12> .ASCII " bic (sp)+,"<12> .ASCII " bis (sp)+,"<12> .ASCIZ " mov "","<12> 195$: .ASCII .ASCII " mov (sp),-(sp)"<12> .ASCII " movb "","<12> .ASCII " bic "",2(sp)"<12> .ASCII " bic (sp)+,"<12> .ASCII " bis (sp)+,"<12> .ASCIZ " movb "","<12> 196$: .ASCII .ASCII " clc"<12> .ASCIZ " ror "<12> 197$: .ASCII .ASCII " clc"<12> .ASCII " ror "<12> .ASCIZ " mov "","<12> 198$: .ASCII .ASCII " .globl _"<12> .ASCII " mov "",-(sp)"<12> .ASCII " jsr pc,_"<12> .ASCII " cmp (sp)+,(sp)+"<12> .ASCII " mov r0,"<12> .ASCIZ 199$: .ASCII .ASCII " .globl _"<12> .ASCII " movb "",r0"<12> .ASCII " mov r0,-(sp)"<12> .ASCII " jsr pc,_"<12> .ASCII " cmp (sp)+,(sp)+"<12> .ASCII " movb r0,"<12> .ASCIZ 200$: .ASCII .ASCIZ " movb (""),"<12> 201$: .ASCII .ASCIZ " mov (""),"<12> 202$: .ASCII .ASCII " mov 2(""),"<12> .ASCIZ " mov (""),"<12> .EVEN .PAGE ;+ ; ** CTAB - SET CODES ; ; THIS CODE TABLE IS USED TO SET THE CONDITION CODES TO THE STATE ; DESCRIBED IN THE PASS 2 OPDOPE TABLE FLAGS. IT CONTAINS ONLY TWO ; SPECIAL CASES; RELATIONALS AND THE BIT TEST. CARE HAS BEEN TAKEN ; TO PERFORM BYTE OPERATIONS DIRECTLY, IF POSSIBLE. ; ; THERE IS ALSO AN ENTRY FOR '++' AND '--'. IF THE ITEM IS A BYTE ; AND THE CONSTANT IS 1 AN INCB OR DECB MAY BE USED. ; ; THERE ARE NO ENTRIES IN THE TABLE FOR LONGS. LONGS ARE DETECTED ; BY JUMPC AND ARE HANDLED BY A SPECIAL ROUTINE. ;- CTAB: .WORD OP.LOD,10$ ;LEAF NODES .WORD OP.EQ, 20$ ;SIGNED RELATIONALS .WORD OP.NE, 20$ ; .WORD OP.LT, 20$ ; .WORD OP.LE, 20$ ; .WORD OP.GE, 20$ ; .WORD OP.GT, 20$ ; .WORD OP.LTU,20$ ;UNSIGNED RELATIONALS .WORD OP.LEU,20$ ; .WORD OP.GEU,20$ ; .WORD OP.GTU,20$ ; .WORD OP.INB,30$ ;'--' AND '++' PREFIX .WORD OP.DEB,30$ ; .WORD OP.BIT,40$ ;BIT TEST .WORD 0 ;END OF TABLE ; ; LEAF NODES. ; 10$: TAB 100$, INT, ANY, INT, ANY TAB 100$, CHR, ANY, CHR, ANY TABEND ; ; RELATIONALS. ; 20$: TAB 101$, INT, ANY, INT, ADDR TAB 101$, INT, ANY, CHR, ADDR TAB 101$, CHR, ANY, CHR, ADDR TAB 101$, CHR, ANY, INT, ADDR TAB 102$, INT, ANY, INT, EASY TAB 102$, INT, ANY, CHR, EASY TAB 102$, CHR, ANY, CHR, EASY TAB 102$, CHR, ANY, INT, EASY TAB 103$, INT, ANY, INT, ANY TAB 103$, CHR, ANY, INT, ANY TABEND ; ; PREFIX INCREMENT. ; PREFIX DECREMENT. ; 30$: TAB 104$, INT, ANY, INT, CON1 TAB 104$, CHR, ANY, INT, CON1 TAB 105$, INT, ANY, INT, ADDR TABEND ; ; BIT. ; 40$: TAB 106$, INT, ANY, INT, ADDR TAB 106$, INT, ANY, CHR, ADDR TAB 106$, CHR, ANY, CHR, ADDR TAB 106$, CHR, ANY, INT, ADDR TAB 107$, INT, ANY, INT, EASY TAB 107$, INT, ANY, CHR, EASY TAB 107$, CHR, ANY, CHR, EASY TAB 107$, CHR, ANY, INT, EASY TAB 108$, INT, ANY, INT, ANY TAB 108$, CHR, ANY, INT, ANY TABEND ; ; CODE BURSTS. ; 100$: .ASCIZ " tst"" "<12> 101$: .ASCII .ASCIZ " cmp"" "","<12> 102$: .ASCII .ASCII .ASCIZ " cmp"" "","<12> 103$: .ASCII .ASCII .ASCIZ " cmp "",(sp)+"<12> 104$: .ASCII .ASCIZ " "" "<12> 105$: .ASCII .ASCIZ " "" "","<12> 106$: .ASCII .ASCIZ " bit"" "","<12> 107$: .ASCII .ASCII .ASCIZ " bit"" "","<12> 108$: .ASCII .ASCII .ASCIZ " bit "",(sp)+"<12> .EVEN .PAGE ;+ ; ** ETAB - EXPRESSION FOR SIDE EFFECTS ; ; THIS TABLE IS USED TO EVALUATE AN EXPRESSION FOR SIDE EFFECTS. IT ; IS A SMALL TABLE THAT KNOWS ONLY A FEW SPECIAL CASES; QUIRKS USED ; FOR TOP LEVEL ASSIGNMENT VIA DIRECT MOV, '++' AND '--' WHEN THE ; VALUE IS NOT SAVED, AND BINARY ASSIGNMENTS ('=+' ET. ALL) IF THE ; RESULT IS NOT NEEDED. ;- ETAB: .WORD OP.INA,10$ .WORD OP.INB,10$ .WORD OP.DEA,10$ .WORD OP.DEB,10$ .WORD OP.ADA,30$ .WORD OP.SBA,30$ .WORD OP.BCA,40$ .WORD OP.ORA,40$ .WORD OP.ASG,50$ .WORD OP.ALA,61$ .WORD OP.ARA,60$ .WORD 0 10$: TAB 100$, INT, ANY, INT, CON1 TAB 100$, CHR, ANY, INT, CON1 TAB 101$, INT, ANY, INT, ADDR TAB 138$, LNG, ANY, INT, ADDR TABEND 30$: TAB 104$, INT, ANY, INT, CON0 TAB 100$, INT, ANY, INT, CON1 TAB 100$, CHR, ANY, INT, CON1 TAB 139$, CHR, ADDR, INT, EASY TAB 140$, CHR, EASY, INT, ADDR TAB 101$, INT, ANY, INT, EASY TAB 105$, LNG, ANY, INT, EASY TAB 106$, LNG, ANY, LNG, EASY TAB 141$, CHR, ANY, INT, ANY TAB 107$, INT, ANY, INT, ANY TAB 108$, LNG, ANY, INT, ANY TAB 109$, LNG, ANY, LNG, ANY TABEND 40$: TAB 101$, INT, ANY, INT, EASY TAB 101$, CHR, ANY, CHR, EASY TAB 101$, INT, ANY, CHR, EASY TAB 101$, CHR, ANY, INT, EASY TAB 110$, LNG, ANY, INT, EASY TAB 111$, LNG, ANY, LNG, EASY TAB 107$, INT, ANY, INT, ANY TAB 107$, CHR, ANY, INT, ANY TAB 112$, LNG, ANY, INT, ANY TAB 113$, LNG, ANY, LNG, ANY TABEND 50$: TAB 100$, INT, ANY, INT, CON0 TAB 100$, CHR, ANY, INT, CON0 TAB 114$, LNG, ANY, LNG, CON0 TAB 115$, INT, ADDR, INT, ANY TAB 115$, CHR, ADDR, CHR, ANY TAB 115$, CHR, ADDR, INT, ANY TAB 117$, LNG, ADDR, LNG, ANY TAB 119$, INT, ADDR, LNG, ANY TAB 120$, LNG, ADDR, INT, ANY TAB 121$, LNG, ADDR, UNS, ANY TAB 124$, INT, ANY, INT, ADDR TAB 124$, CHR, ANY, CHR, ADDR TAB 124$, CHR, ANY, INT, ADDR TAB 101$, INT, ANY, INT, EASY TAB 101$, CHR, ANY, CHR, EASY TAB 101$, CHR, ANY, INT, EASY TAB 125$, LNG, ANY, LNG, EASY TAB 126$, LNG, ANY, INT, EASY TAB 127$, LNG, ANY, UNS, EASY TAB 128$, INT, ANY, LNG, EASY TAB 129$, INT, ANY, INT, ANY TAB 129$, CHR, ANY, INT, ANY TAB 131$, LNG, ANY, LNG, ANY TAB 132$, LNG, ANY, DBL, ANY TAB 133$, LNG, ANY, INT, ANY TAB 134$, LNG, ANY, UNS, ANY TAB 135$, INT, ANY, LNG, ANY TABEND 60$: TAB 142$, UNS, ANY, INT, CON1 61$: TAB 100$, INT, ANY, INT, CON1 TAB 100$, CHR, ANY, INT, CON1 TABEND 100$: .ASCIZ " "" "<12> 101$: .ASCIZ " "" "","<12> 104$: .ASCIZ 105$: .ASCII " "" "","<12> .ASCIZ " "" "<12> 106$: .ASCII " "" "","<12> .ASCII " "" "<12> .ASCIZ " "" "","<12> 107$: .ASCIZ " "" (sp)+,"<12> 108$: .ASCII " "" (sp)+,"<12> .ASCIZ " "" "<12> 109$: .ASCII " "" (sp)+,"<12> .ASCII " "" (sp)+,"<12> .ASCIZ " "" "<12> 110$: .ASCIZ " "" "","<12> 111$: .ASCII " "" "","<12> .ASCIZ " "" "","<12> 112$: .ASCIZ " "" (sp)+,"<12> 113$: .ASCII " "" (sp)+,"<12> .ASCIZ " "" (sp)+,"<12> 114$: .ASCII " clr "<12> .ASCIZ " clr "<12> 115$: .ASCIZ " mov"" "","<12> 117$: .ASCII " mov "","<12> .ASCIZ " mov "","<12> 119$: .ASCIZ " mov "","<12> 120$: .ASCII " mov "","<12> .ASCIZ " sxt "<12> 121$: .ASCII " mov "","<12> .ASCIZ " clr "<12> 124$: .ASCIZ " mov"" "","<12> 125$: .ASCII " mov "","<12> .ASCIZ " mov "","<12> 126$: .ASCII " mov "","<12> .ASCIZ " sxt "<12> 127$: .ASCII " mov "","<12> .ASCIZ " clr "<12> 128$: .ASCIZ " mov "","<12> 129$: .ASCIZ " mov"" (sp)+,"<12> 131$: .ASCII " mov (sp)+,"<12> .ASCIZ " mov (sp)+,"<12> 132$: .ASCII " setl"<12> .ASCII " stcdl "",*(sp)+"<12> .ASCIZ " seti"<12> 133$: .ASCII " mov (sp)+,"<12> .ASCIZ " sxt "<12> 134$: .ASCII " mov (sp)+,"<12> .ASCIZ " clr "<12> 135$: .ASCII " tst (sp)+"<12> .ASCIZ " mov (sp)+,"<12> 138$: .ASCII " "" "","<12> .ASCIZ " "" "<12> 139$: .ASCII .ASCII " movb "","<12> .ASCII " "" "","<12> .ASCIZ " movb "","<12> 140$: .ASCII .ASCII " movb "","<12> .ASCII " "" "","<12> .ASCIZ " movb "","<12> 141$: .ASCII .ASCII .ASCII " movb *2(sp),"<12> .ASCII " "" (sp)+,"<12> .ASCIZ " movb "",*(sp)+"<12> 142$: .ASCII .ASCII " clc"<12> .ASCIZ " ror "<12> .END