因此Im在汇编代码总共小白和阅读他们以及汇编代码的x86
所以当与
gcc -std=c99 -O3 -fno-tree-vectorize -S code.c -o code-O3.s
编译我有一个简单的C代码
void saxpy()
{
for(int i = 0; i < ARRAY_SIZE; i++) {
float product = a*x[i];
z[i] = product + y[i];
}
}
和等效汇编代码
给我如下asssembly代码
saxpy:
.LFB0:
.cfi_startproc
movss a(%rip), %xmm1
xorl %eax, %eax
.p2align 4,,10
.p2align 3
.L3:
movss x(%rax), %xmm0
addq $4, %rax
mulss %xmm1, %xmm0
addss y-4(%rax), %xmm0
movss %xmm0, z-4(%rax)
cmpq $262144, %rax
jne .L3
rep ret
.cfi_endproc
我也明白,展开循环已经发生 但林不能够理解的意图和想法背后
addq $4, %rax
mulss %xmm1, %xmm0
addss y-4(%rax), %xmm0
movss %xmm0, z-4(%rax)
有人可以解释,4的使用情况,并 什么呢语句的意思 Y-4 (%rax)
4是浮点大小 –
你能告诉我y-4(%rax)是什么, 假设,我有循环运行20次。优化后的 什么是我的静态和动态insns计数? – svm
另外,需要在Rax寄存器中添加一个立即数4。这是按照声明 “addq $ 4%RAX”做 – svm