This is a benchmark run for nobbling promote_mode. This changes the code generated for this particular testcase by removing the extra uxtb in brackets below.
void f(unsigned char * p,unsigned short *s, int c)
{
unsigned short or = 0;
while (c)
{
or = or | s[c];
c --;
}
*p = (unsigned char)or;
}
This is a benchmark run for nobbling promote_mode. This changes the code generated for this particular testcase by removing the extra uxtb in brackets below.
void f(unsigned char * p,unsigned short *s, int c)
{
unsigned short or = 0;
while (c)
{
or = or | s[c];
c --;
}
*p = (unsigned char)or;
}
f:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 0, uses_anonymous_args = 0
@ link register save eliminated.
cmp r2, #0
str r4, [sp, #-4]!
beq .L2
rsb r4, r2, r2, asl #31
mov r3, #0
add r1, r1, r2, asl #1
mov r2, r3 @ movhi
mov r4, r4, asl #1
.L4:
ldrh ip, [r1, r3]
sub r3, r3, #2
cmp r3, r4
orr r2, ip, r2
bne .L4
(uxtb r2, r2)
.L2:
strb r2, [r0, #0]
ldmfd sp!, {r4}
bx lr