The bugs were:
- append, prepend, and balign were not tested
- balign takes a uimm2 not a uimm5.
- drotr32 was correctly implemented with a uimm5 but the tests expected '52' to be valid.
- li/la were implemented with a uimm5 instead of simm32. simm32 isn't completely correct either but I'll fix that when I get to simm32.
A notable omission are some of the shift instructions. Several of these
have been implemented using a single uimm6 instruction (rather than two
uimm5 instructions and a CodeGen-only uimm6 pseudo). These will be updated
in the uimm6 patch.
I don't think we need isImm() because isConstantImm() calls it internally.