问题描述
您好,我正在寻找gcc使用的优化。在下面的代码中,我使用stpcpy复制了长的硬编码字符串。在下面的程序集中,您可以看到一系列指令,将xmm0寄存器的内容复制到rbx寄存器中。我不明白的是xmm0或相对寻址没有变化。这段代码不应该只是将xmm寄存器的开始复制到rbx的不同部分吗? movups指令有某种内部计数器吗?
char* stpcpy_test2(char* str){
char *filler = "filler2waaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawdawaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
char *ret = malloc(300);
stpcpy(str,filler);
strcpy(ret,"aahahaeheheheadwad");
return ret;}
下面是使用-O3选项在gcc 9.3上生成的程序集
stpcpy_test2:
push rbx
mov rbx,rdi
mov edi,300
call malloc
movdqa xmm0,XMMWORD PTR .LC0[rip]
movabs rdx,7016996765293437281
movdqa xmm1,XMMWORD PTR .LC2[rip]
mov QWORD PTR [rbx+176],rdx
mov edx,25697
movups XMMWORD PTR [rbx],xmm0
movdqa xmm0,XMMWORD PTR .LC1[rip]
mov BYTE PTR [rbx+184],0
movups XMMWORD PTR [rbx+16],xmm0
movups XMMWORD PTR [rbx+32],xmm0
movups XMMWORD PTR [rbx+64],xmm0
movups XMMWORD PTR [rbx+80],xmm0
movups XMMWORD PTR [rbx+96],xmm0
movups XMMWORD PTR [rbx+112],xmm0
movups XMMWORD PTR [rbx+128],xmm0
movups XMMWORD PTR [rbx+144],xmm0
movups XMMWORD PTR [rbx+160],XMMWORD PTR .LC3[rip]
mov WORD PTR [rax+16],dx
mov BYTE PTR [rax+18],0
movups XMMWORD PTR [rbx+48],xmm1
movups XMMWORD PTR [rax],xmm0
pop rbx
ret
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)