📄 f36.s
字号:
/// f36 -- expression code generation.globl lvalue.globl rvalue.globl convrt.globl type.globl funcappl.globl name.globl error.globl lookup.globl code.globl iserror.globl genop.globl typ.globl newline.globl functn.globl sizelvalue: jsr r5,iserror rts r5 tst (r2) bne 1f mov 2(r2),r3 jsr r5,code < lval>; .even br name1: mov r2,-(sp) cmp (r2),$32. / array appl bne 1f jsr r5,aryappl dec r0 bne 2f / dim =| 1 tstb symtab(r3) blt 2f / p-bit, not simple mov $"al,r0 br simpary2: jsr r5,code < alval\0>; .evenarydope: jsr r5,pbit mov symtab+2(r3),r2 mov (r2)+,r0 asl r0 add r0,r2 mov (r2),r0 jsr r5,code <; d%d\0>; .even r0 br 2f1: jsr r5,error; 54. mov (sp)+,r2 rts r5simpary: mov r3,-(sp) mov symtab(r3),r3 bis $7,r3 jsr r5,genop mov (sp)+,r3 jsr r5,size jsr r5,code <; %d.\0>; .even r0 br 2fname: mov r2,-(sp) jsr r5,pbit2: jsr r5,code <; \0>; .even bit $100,symtab(r3) / common beq 1f mov symtab+4(r3),r2 jsr r5,code <%n+\0>; .even r21: movb symtab(r3),r2 bic $!70,r2 cmp r2,$30 / external bne 1f jsr r5,code <%n.\n\0>; .even r3 br 2f1: jsr r5,code <%n_\n\0>; .even r32: mov symtab(r3),r3 mov (sp)+,r2 rts r5rvalue: jsr r5,iserror rts r5 mov r2,-(sp) tst (r2) bne 1f mov 2(r2),r3 movb symtab+1(r3),r2 jsr r5,code < rval%d>; .even r2 mov (sp)+,r2 br name1: cmp (r2),$32. bne 1f jsr r5,aryappl dec r0 bne 3f tstb symtab(r3) blt 3f mov $"ar,r0 br simpary3: jsr r5,code < arval\0>; .even br arydope1: cmp (r2),$34. / array appl bne 1f jsr r5,funcappl mov (sp)+,r2 mov 2(r2),r3 movb symtab+1(r3),r0 jsr r5,code <%d.\n\0>; .even r0 mov symtab(r3),r3 rts r51: cmp (r2),$2 bne 1f movb 3(r2),r3 mov 4(r2),r2 jsr r5,code < rval%d; c%d\n\0>; .even r3 r2 mov (sp)+,r2 mov 2(r2),r3 rts r51: cmp (r2),$24. / arith or relat bhi 1f mov 2(r2),r2 bne 3f mov (sp),r2 sub $10.,(r2) / - bin -> - unary mov 4(r2),r2 jsr r5,rvalue br 2f3: jsr r5,rvalue mov (sp),r2 mov r3,-(sp) mov 4(r2),r2 jsr r5,type cmp *2(sp),$4 / ** bne 3f mov r3,r2 bic $!7,r2 cmp r2,$1 / ** integer bne 3f mov 2(sp),r2 sub $2,(r2) / pr -> pi mov 4(r2),r2 jsr r5,rvalue mov $intcon,r2 jsr r5,convrt mov (sp)+,r3 br 2f3: mov (sp),r2 jsr pc,maxtyp mov (sp)+,r3 mov r2,-(sp) jsr r5,convrt mov 2(sp),r2 mov 4(r2),r2 jsr r5,rvalue mov (sp)+,r2 jsr r5,convrt mov r2,r3 br 2f1: cmp (r2),$30. / and or not bhi 1f mov 2(r2),r2 beq 3f jsr r5,rvalue mov $logcon,r2 jsr r5,convrt3: mov (sp),r2 mov 4(r2),r2 jsr r5,rvalue mov $logcon,r2 jsr r5,convrt2: mov (sp)+,r2 mov (r2),r0 cmp r0,$4 bhis 2f add $10.,(r2) / back to binary tst r0 beq 2f sub $8,(r2) / back to pr2: mov optab(r0),r0 jsr r5,genop jsr r5,newline cmp (r2),$14. / relat blo 2f mov $logcon,r32: rts r51: jsr r5,error; 54. mov (sp)+,r2 rts r5pbit: tstb symtab(r3) bge 1f jsr r5,code <p\0>1: rts r5funcappl: mov r2,-(sp) mov functn,r3 jsr r5,code < stsp; ft+%d.\n\0>; .even r3 mov r3,-(sp) add $2,r3 mov r3,functn clr -(sp) / nargs1: mov 4(r2),r2 beq 2f inc (sp) cmp (r2),$36. / , bne 1f mov r2,-(sp) mov 2(r2),r2 mov 6(sp),r3 jsr r5,fapp1 mov (sp)+,r2 br 1b1: mov 4(sp),r3 jsr r5,fapp12: mov (sp)+,r0 / nargs mov (sp)+,r2 mov (sp)+,r3 mov 2(r3),r3 jsr r5,code < call\0>; .even jsr r5,pbit jsr r5,code <; %n.; ft+%d.; %d.; \0>; .even r3 r2 r0 cmp functn,functm ble 1f mov functn,functm1: mov r2,functn rts r5fapp1: mov 2(r3),r3 / fetch out function name mov symtab+2(r3),r3 / arg conversion bne 2f tst (r2) beq 1f cmp (r2),$32. beq 4f cmp (r2),$42. / lv if funct or name or arry app beq 1f cmp (r2),$2 / lv if const bne 2f mov 4(r2),r3 jsr r5,code < lval; c%d\n\0> r3 br 3f2: mov r3,-(sp) jsr r5,rvalue mov (sp)+,r2 beq 2f jsr r5,convrt2: mov functn,r3 jsr r5,code < stsp; ft+%d.\n\0>; .even r3 add $2,functn rts r51: clr (r2) / turn func/array names into lvs4: jsr r5,lvalue3: mov functn,r3 jsr r5,code < stst; ft+%d.\n\0>; .even r3 add $2,functn rts r5aryappl: mov r2,-(sp) clr -(sp) / arg count2: inc (sp) mov 4(r2),r2 cmp (r2),$36. / , bne 2f mov r2,-(sp) mov 2(r2),r2 jsr r5,rvalue mov $intcon,r2 jsr r5,convrt mov (sp)+,r2 br 2b2: jsr r5,rvalue mov $intcon,r2 jsr r5,convrt mov (sp)+,r0 mov (sp)+,r2 mov 2(r2),r3 cmp r0,*symtab+2(r3) beq 1f jsr r5,error; 53. / dimension mismatch1: rts r5/ converts stack from type in r3 to type in r2convrt: mov r2,-(sp) mov r3,-(sp) bic $![377\<8+7],r2 bic $![377\<8+7],r3 cmp r2,r3 beq 1f jsr r5,code < \0>; .even jsr pc,2f mov r2,r3 jsr pc,2f jsr r5,code <\n\0>; .even1: mov (sp)+,r3 mov (sp)+,r2 rts r52: mov r2,-(sp) mov r3,r2 clrb r3 swab r3 bic $!7,r2 movb typ(r2),r2 jsr r5,code <%c%d\0>; .even r2 r3 mov (sp)+,r2 rts pctype: cmp (r2),$32. beq 2f cmp (r2),$34. beq 2f tst (r2) bne 1f2: mov 2(r2),r3 mov symtab(r3),r3 rts r51: cmp (r2),$2 bne 1f mov 2(r2),r3 rts r51: cmp (r2),$14. blo 1f mov $logcon,r3 rts r51: mov r2,-(sp) mov 2(r2),r2 bne 1f mov (sp),r2 mov 4(r2),r2 jsr r5,type br 2f1: jsr r5,type mov (sp),r2 mov r3,-(sp) mov 4(r2),r2 jsr r5,type mov (sp)+,r2 jsr pc,maxtyp mov r2,r32: mov (sp)+,r2 rts r5maxtyp: mov r2,r0 cmp r2,r3 bhis 2f mov r3,r22: clrb r2 bic $!7,r0 bic $!7,r3 cmp r0,r3 bhis 2f mov r3,r02: bis r0,r2 rts pcoptab: <ng> <pi> <pr> <dv> <mp> <sb> <ad> <lt> <le> <eq> <ne> <gt> <ge> <nt> <an> <or>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -