# 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

