diff --git a/notes/7.md b/notes/7.md new file mode 100644 index 0000000..2ff412a --- /dev/null +++ b/notes/7.md @@ -0,0 +1,56 @@ +# Code Generation 2 + +## Stack Machine + +Consider two instructions +* `push i` +* `add i` + +It is not efficient because all stack is considered as memory (which is slower than register). + +### Utilizing Register Files + +Keep the top of the stack in a register, so `add` requires only a single memory access. + +* `acc <- i` +* `push acc` +* `pop` +* `add` + + +### Code Generation From Stack Machine + +Assume that stack grows towards lower addresses. + + +## MIPS + +32 regs + +`$sp`, `$a0`, `$t1` + +* `lw` +* `add` +* `sw` +* `addi` +* `li` +* `mv` + + +Converting Stack to MIPS ISA + +* `acc <- i` + * `li $a0 i` + +### Optimizing + + + +## Branch + +`beq $1 $2 lbl` +`b lbl` + + +## Function + diff --git a/pdf/L7.pdf b/pdf/L7.pdf new file mode 100644 index 0000000..bdb89c8 Binary files /dev/null and b/pdf/L7.pdf differ