It appears that the *arm_extendqisi pattern never match anything for reasons I can't find. This means that on ARMv4 and ARMv5, this code: int foo(signed char *x) { return *x; } produces: ldrb r0, [r0, #4] mov r0, r0, asl #24 mov r0, r0, asr #24 mov pc, lr instead of the expected: ldrsb r0, [r0, #4] mov pc, lr
TARGET_ARM && arm_arch4 && !arm_arch6
I just tested with HEAD today and the problem doesn't appear to be there any longer. Therefore gcc 4.1.0 should be OK.