使用 x86-64 gcc -Og -std=gnu99 -xc 编译。
在.L3的第二行(addl (%rdi,%rcx,4),%eax
)中,为什么不直接使用寄存器%edx
来加和呢?
addl (%rdi,%edx,%eax
int sum_arr(int arr[],int nelems) {
int sum = 0;
for (int i = 0; i < nelems; i++) {
sum += arr[i];
}
return sum;
}
sum_arr:
movl $0,%edx
movl $0,%eax
jmp .L2
.L3:
movslq %edx,%rcx
addl (%rdi,%eax
addl $1,%edx
.L2:
cmpl %esi,%edx
jl .L3
rep ret