;Printing IRNode's ;LABEL add ;LINK ;ADDF $P1 $P2 $T1 ;STOREF $T1 $L1 ;STOREF $L1 $R ;RET ;Printing IRNode's ;LABEL multiply ;LINK ;MULTF $P1 $P2 $T1 ;STOREF $T1 $L1 ;STOREF $L1 $R ;RET ;Printing IRNode's ;LABEL main ;LINK ;WRITES intro ;WRITES first ;READF $L1 ;WRITES second ;READF $L2 ;WRITES third ;READF $L3 ;PUSH ;PUSH $L1 ;PUSH $L2 ;JSR multiply ;POP ;POP ;POP $T1 ;STOREF $T1 $L4 ;PUSH ;PUSH $L4 ;PUSH $L3 ;JSR add ;POP ;POP ;POP $T2 ;STOREF $T2 $L5 ;WRITEF $L1 ;WRITES star ;WRITEF $L2 ;WRITES plus ;WRITEF $L3 ;WRITES equal ;WRITEF $L5 ;WRITES eol ;STOREI 0 $T3 ;STOREI $T3 $R ;RET str intro "You will be asked for three float numbers\n" str first "Please enter the first float number: " str second "Please enter the second float number: " str third "Please enter the third float number: " str eol "\n" str star "*" str plus "+" str equal "=" push push r0 push r1 push r2 push r3 jsr main sys halt ;generating code for function add ;codegen IRNode: LABEL add {PRED nodes:} {SUCC nodes: LINK } label add ;codegen IRNode: LINK {PRED nodes: LABEL add } {SUCC nodes: ADDF $P1 $P2 $T1 } link 1 ;codegen IRNode: ADDF $P1 $P2 $T1 {PRED nodes: LINK } {SUCC nodes: STOREF $T1 $L1 } move $7 r0 addr $6 r0 ;codegen IRNode: STOREF $T1 $L1 {PRED nodes: ADDF $P1 $P2 $T1 } {SUCC nodes: STOREF $L1 $R } move r0 $-1 ;codegen IRNode: STOREF $L1 $R {PRED nodes: STOREF $T1 $L1 } {SUCC nodes: RET } move $-1 r1 move r1 $8 ;codegen IRNode: RET {PRED nodes: STOREF $L1 $R } {SUCC nodes:} unlnk ret ;generating code for function multiply ;codegen IRNode: LABEL multiply {PRED nodes:} {SUCC nodes: LINK } label multiply ;codegen IRNode: LINK {PRED nodes: LABEL multiply } {SUCC nodes: MULTF $P1 $P2 $T1 } link 1 ;codegen IRNode: MULTF $P1 $P2 $T1 {PRED nodes: LINK } {SUCC nodes: STOREF $T1 $L1 } move $7 r2 mulr $6 r2 ;codegen IRNode: STOREF $T1 $L1 {PRED nodes: MULTF $P1 $P2 $T1 } {SUCC nodes: STOREF $L1 $R } move r2 $-1 ;codegen IRNode: STOREF $L1 $R {PRED nodes: STOREF $T1 $L1 } {SUCC nodes: RET } move $-1 r3 move r3 $8 ;codegen IRNode: RET {PRED nodes: STOREF $L1 $R } {SUCC nodes:} unlnk ret ;generating code for function main ;codegen IRNode: LABEL main {PRED nodes:} {SUCC nodes: LINK } label main ;codegen IRNode: LINK {PRED nodes: LABEL main } {SUCC nodes: WRITES intro } link 5 ;codegen IRNode: WRITES intro {PRED nodes: LINK } {SUCC nodes: WRITES first } sys writes intro ;codegen IRNode: WRITES first {PRED nodes: WRITES intro } {SUCC nodes: READF $L1 } sys writes first ;codegen IRNode: READF $L1 {PRED nodes: WRITES first } {SUCC nodes: WRITES second } sys readr $-1 ;codegen IRNode: WRITES second {PRED nodes: READF $L1 } {SUCC nodes: READF $L2 } sys writes second ;codegen IRNode: READF $L2 {PRED nodes: WRITES second } {SUCC nodes: WRITES third } sys readr $-2 ;codegen IRNode: WRITES third {PRED nodes: READF $L2 } {SUCC nodes: READF $L3 } sys writes third ;codegen IRNode: READF $L3 {PRED nodes: WRITES third } {SUCC nodes: PUSH } sys readr $-3 ;codegen IRNode: PUSH {PRED nodes: READF $L3 } {SUCC nodes: PUSH $L1 } push ;codegen IRNode: PUSH $L1 {PRED nodes: PUSH } {SUCC nodes: PUSH $L2 } push $-1 ;codegen IRNode: PUSH $L2 {PRED nodes: PUSH $L1 } {SUCC nodes: JSR multiply } push $-2 ;codegen IRNode: JSR multiply {PRED nodes: PUSH $L2 } {SUCC nodes: POP } push r0 push r1 push r2 push r3 jsr multiply pop r3 pop r2 pop r1 pop r0 ;codegen IRNode: POP {PRED nodes: JSR multiply } {SUCC nodes: POP } pop ;codegen IRNode: POP {PRED nodes: POP } {SUCC nodes: POP $T1 } pop ;codegen IRNode: POP $T1 {PRED nodes: POP } {SUCC nodes: STOREF $T1 $L4 } pop r4 ;codegen IRNode: STOREF $T1 $L4 {PRED nodes: POP $T1 } {SUCC nodes: PUSH } move r4 $-4 ;codegen IRNode: PUSH {PRED nodes: STOREF $T1 $L4 } {SUCC nodes: PUSH $L4 } push ;codegen IRNode: PUSH $L4 {PRED nodes: PUSH } {SUCC nodes: PUSH $L3 } push $-4 ;codegen IRNode: PUSH $L3 {PRED nodes: PUSH $L4 } {SUCC nodes: JSR add } push $-3 ;codegen IRNode: JSR add {PRED nodes: PUSH $L3 } {SUCC nodes: POP } push r0 push r1 push r2 push r3 jsr add pop r3 pop r2 pop r1 pop r0 ;codegen IRNode: POP {PRED nodes: JSR add } {SUCC nodes: POP } pop ;codegen IRNode: POP {PRED nodes: POP } {SUCC nodes: POP $T2 } pop ;codegen IRNode: POP $T2 {PRED nodes: POP } {SUCC nodes: STOREF $T2 $L5 } pop r5 ;codegen IRNode: STOREF $T2 $L5 {PRED nodes: POP $T2 } {SUCC nodes: WRITEF $L1 } move r5 $-5 ;codegen IRNode: WRITEF $L1 {PRED nodes: STOREF $T2 $L5 } {SUCC nodes: WRITES star } sys writer $-1 ;codegen IRNode: WRITES star {PRED nodes: WRITEF $L1 } {SUCC nodes: WRITEF $L2 } sys writes star ;codegen IRNode: WRITEF $L2 {PRED nodes: WRITES star } {SUCC nodes: WRITES plus } sys writer $-2 ;codegen IRNode: WRITES plus {PRED nodes: WRITEF $L2 } {SUCC nodes: WRITEF $L3 } sys writes plus ;codegen IRNode: WRITEF $L3 {PRED nodes: WRITES plus } {SUCC nodes: WRITES equal } sys writer $-3 ;codegen IRNode: WRITES equal {PRED nodes: WRITEF $L3 } {SUCC nodes: WRITEF $L5 } sys writes equal ;codegen IRNode: WRITEF $L5 {PRED nodes: WRITES equal } {SUCC nodes: WRITES eol } sys writer $-5 ;codegen IRNode: WRITES eol {PRED nodes: WRITEF $L5 } {SUCC nodes: STOREI 0 $T3 } sys writes eol ;codegen IRNode: STOREI 0 $T3 {PRED nodes: WRITES eol } {SUCC nodes: STOREI $T3 $R } move 0 r6 ;codegen IRNode: STOREI $T3 $R {PRED nodes: STOREI 0 $T3 } {SUCC nodes: RET } move r6 $6 ;codegen IRNode: RET {PRED nodes: STOREI $T3 $R } {SUCC nodes:} unlnk ret end