int checksum_v1(int *data)
{
char i; //2nd time, "int" replaces "char"
int sum = 0;
for(i = 0; i < 64; i++)
sum += data[i];
return sum;
}
上面这段代码,用arm-linux-gcc -S checksum_v1.c 反汇编一次;
然后讲int 代替char,再反汇编一次,将所得的两个文件比较了一下
1st:
str r3, [fp, #-20]
.L2:
ldr r3, [fp, #-20]
cmp r3, #63
ble .L5
b .L3
.L5:
ldr r3, [fp, #-20]
mov r2, r3, asl #2
ldr r3, [fp, #-16]
add r3, r2, r3
ldr r2, [fp, #-24]
ldr r3, [r3, #0]
add r3, r2, r3
str r3, [fp, #-24]
ldr r3, [fp, #-20]
add r3, r3, #1
str r3, [fp, #-20]
2nd:
strb r3, [fp, #-17]
.L2:
ldrb r3, [fp, #-17] @ zero_extendqisi2
cmp r3, #63
bls .L5
b .L3
.L5:
ldrb r3, [fp, #-17] @ zero_extendqisi2
mov r2, r3, asl #2
ldr r3, [fp, #-16]
add r3, r2, r3
ldr r2, [fp, #-24]
ldr r3, [r3, #0]
add r3, r2, r3
str r3, [fp, #-24]
ldrb r3, [fp, #-17]
add r3, r3, #1
strb r3, [fp, #-17]
差别如上,第一次用到str,第二次用到strb
我想问在arm32位环境中,是否strb执行的会比较快点呢?
谢谢 |