так им общий нуб на ассемблере и читать их, аассемблере x86
так у меня есть простой код на С
void saxpy()
{
for(int i = 0; i < ARRAY_SIZE; i++) {
float product = a*x[i];
z[i] = product + y[i];
}
}
и эквивалентный код ассемблера при компиляции с
gcc -std=c99 -O3 -fno-tree-vectorize -S code.c -o code-O3.s
дает мне следующий код сборки
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, и , что делает заявления означают у-4 (% rax)
4 - размер поплавка –
Может ли сказать, что делает y-4 (% rax), Предположим, что у меня есть цикл для запуска 20 раз. после оптимизации, каково было бы мое статическое и динамическое число insns? – svm
Кроме того, в чем заключается необходимость добавления немедленного значения 4 в регистр rax. который делается в соответствии с заявлением «addq $ 4,% rax» – svm