This fixes a bunch of jank regarding shift opcodes:
asl worked as an alias for lsl in THUMB, but not in ARM; fixed by adding to ARM.
In ARM, lsl 32 printed the error Invalid shift mode instead of the more logical Shift amount out of range; changed to the latter.
THUMB's Immediate out of range error printed a hex number without a hex specifier; added the hex specifier.
Added the actual shift immediate that is out of range to ARM's Shift amount out of range error message to make it more consistent with THUMB's Immediate out of range error.
THUMB encoded lsr 0/asr 0 as-is, but this actually computes lsr 32/asr 32; fixed by converting lsr 0/asr 0 to lsl 0 which is equivalent to what the user probably actually meant to do (this is also what No$gba does). This makes it consistent with how it was handled on the ARM side.
THUMB wrongly errored on lsr 32/asr 32; fixed by adding support for it.
This fixes a bunch of jank regarding shift opcodes:
asl
worked as an alias forlsl
in THUMB, but not in ARM; fixed by adding to ARM.lsl 32
printed the errorInvalid shift mode
instead of the more logicalShift amount out of range
; changed to the latter.Immediate out of range
error printed a hex number without a hex specifier; added the hex specifier.Shift amount out of range
error message to make it more consistent with THUMB'sImmediate out of range
error.lsr 0
/asr 0
as-is, but this actually computeslsr 32
/asr 32
; fixed by convertinglsr 0
/asr 0
tolsl 0
which is equivalent to what the user probably actually meant to do (this is also what No$gba does). This makes it consistent with how it was handled on the ARM side.lsr 32
/asr 32
; fixed by adding support for it.Test cases are included for all this.