It looks like stack space is not being allocated for local variables when using -O0. This sounds familiar, so I'll need to go through the previous notes and see where things stand.
32-bit negate has been fixed, moving on.
The subtract opcode seems to be working wierd. The carry flag is being set opposite to what the carry-in would be. Odd, but not a big deal. Hopefully this is not an emulation bug, because I have no way of verifying this on real hardware right now.
I've also added optimizations for adding special constant values (-2,-1,0,1,2) in each of the words. Works fine.