When both sides are runtime values
Warmup taught you addiu — addition with a constant folded into the instruction. But when both operands are values that only exist at runtime, there's nothing to fold. The compiler uses the register form, addu rd, rs, rt:
addu v0, a0, a1 # v0 = a0 + a1
jr ra
nop
That's add2(x, y) returning x + y. Destination first, as always — and the u is still our old friend "don't trap on overflow", not "unsigned". Plain signed addition compiles to addu.
One more habit to learn while we're here. When a computation takes more than one step, the intermediate result has to live somewhere, and IDO is a creature of routine about where: it burns temporaries in order starting at t6, then t7, t8… You'll see t6 holding a partial result constantly in this compiler's output, and now you know it's nothing special — just the first scratch register on IDO's list.
The target below is one step longer than the example. Watch where the partial sum lands, and which argument joins last.
Your task
Write func_800c7070 to reproduce the target assembly.