Fix some memcheck bugs

The slightly concerning one here is that I was (in one place, but not all memory checks) getting errors when a memcheck did not hit.

I tried making everything far jumps but it didn't help, but when I made the jump targets earlier, it did help.  So I just moved it out of the loop, better that way anyway.  But I feel like I'm still missing something important.

The specific code was (doesn't take the imm path because `rs == rt`):
lui a0, 0x08A0
lbu a0, a0(3550)

If I put a memcheck like 0x08A03550, then it worked.  If I used 0x07A03550, it said "invalid address 00003500".  In this case the reg is ESI, so it seems like it's getting cleared... or not saved properly. but I'm not seeing it.

Hmm...

-[Unknown]