如何解决Movups指令计数器
您好,我正在寻找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 举报,一经查实,本站将立刻删除。