Hi again.
I've found the reason for the shift-and test fails. riscv.md does a match on (subreg:QI (and:SI ...) 0) Unfortunately, due to the way "subreg" is defined, this needs to be (subreg:QI (and:SI ...) 3) on big endian. I can fix the failures by duplicating the rule and making the one with "0" check !BYTES_BIG_ENDIAN and the one with "3" check BYTES_BIG_ENDIAN. But that's a bit heavy handed of course. I'll try to come up with a solution using subreg_lowpart_p instead of hardcoding "0" or "3". // Marcus