The bugs were:
- teq and similar take 4-bit unsigned immediates on microMIPS.
- teqi and similar have side-effects like teq do.
- shll_s.w and shra_r.w take 5-bit unsigned immediates.
- The various DSP ext* instructions take a 5-bit immediate.
- repl.qh takes an 8-bit unsigned immediate.
- repl.ph takes a 10-bit unsigned immediate.
- rddsp/wrdsp take a 10-bit unsigned immediate.
- teqi and similar take signed 16-bit immediates (10-bit for microMIPS).
- Out-of-range immediate macros for or/xor take a simm32/simm64 depending on architecture. I'll fix the simm64 case properly when I reach simm32.
lui is a bit more lenient than GAS and accepts signed immediates in addition
to unsigned. This is because MipsMCExpr can produce signed values when
constant folding and it currently lacks a way of knowing it should fold to
an unsigned value.