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

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

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

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架构的就这么慢啊

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

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//