首页
社区
课程
招聘
[求助]sh4下的一段汇编问题
2010-9-1 11:49 4666

[求助]sh4下的一段汇编问题

2010-9-1 11:49
4666
先贴代码:

void memset32(char* dst, int src, int size)
{
        if (!dst || !size) return ;

        int left = size & 0x3;
        dst += (size << 2);
        if (!left)
        {
                size >>= 2;
                asm volatile
                (
                        "1:\n\t"
                        "dt %0\n\t"
                        "mov.l %1,@-%2\n\t"
                        "mov.l %1,@-%2\n\t"
                        "mov.l %1,@-%2\n\t"
                        "mov.l %1,@-%2\n\t"
                        "bf 1b\n\t"                 
                        :                                        
                        : "r" (size), "r" (src), "r" (dst)
                );
        }
        else
        {
                size >>= 2;
                asm volatile  // 貌似这段有点问题,运行时老挂掉
                (
                        "1:\n\t"                        
                        "dt %3\n\t"
                        "mov.l %1,@-%2\n\t"
                        "bf 1b\n\t"
                        "2:\n\t"                        
                        "dt %0\n\t"                
                        "mov.l %1,@-%2\n\t"
                        "mov.l %1,@-%2\n\t"
                        "mov.l %1,@-%2\n\t"
                        "mov.l %1,@-%2\n\t"
                        "bf 2b\n\t"  
                        :                                
                        : "r" (size), "r" (src), "r" (dst), "r" (left)
                );
        }
}

那位大虾帮忙看看,这段汇编哪里写的不对啊,这个是按4字节memset的汇编版本,用的是sh4的指令集

还有怎样才能进一步优化其性能啊, 我尝试memset 1m x 4,的内存 效率还是很低啊, 仅仅快了一倍而已 在pc上优化memset32,可以快10-15倍了 为什么sh4架构的就这么慢啊

有谁帮我指点下 我初学不太清楚

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回