win ce arm汇编高手请进

vinceWH   2009-8-31 22:12 楼主
// 预定义函数
inline f32 Mulfx(f32 x, f32 y)
{   
        return ((y) * (x)) >> 12;
}
inline f32 Divfx(f32 x, f32 y)
{
        return (((x) << 12) / (y));            // Divide a fixed by a fixed
}
inline f32 inttof32(int n)
{
        return (n) << 12;
}
inline int f32toint(f32 n)
{
        return ((n) >> 12);
}
inline float f32tofloat(f32 n)
{
        return (((float)(n)) / (float)(1<<12));
}
inline f32 floattof32(float f)
{
        return (int(4096.0*f));
}
inline f32 divf32(f32 num1, f32 num2)
{
        return (num1 << 12) / num2;
}
inline f32 f32floor(f32 xv)
{
        return (xv>>12)<<12;
}

inline f32 f32ceiling(f32 xv)
{
        if ((xv - f32floor(xv)) > 0)
        {
                return inttof32(f32toint(xv)+1);
        }
        else
        {
                return inttof32(f32toint(xv));
        }
}


上面这些函数是我用c写的,可是在执行的时候发现效率不佳,希望可以汇编花,各位大侠有没有做过,或者帮忙写几个,写着有分,谢谢

回复评论 (8)

反汇编不就行了,再从汇编中找出你你觉得需要优化的代码
点赞  2009-8-31 22:20
ARM的我忘了,只会DSP的了
不过你这些函数基本都是一句,如果写好了C,可以和汇编效率差不多的。
点赞  2009-8-31 23:04
效率不佳和
你用汇编写或者c写 没有一点关系,ads编译后可能看到编译后的汇编,可以对照一下编译后的结果

ads下的O(x)编译选项下编译的代码通常说比自己动手写的效率要高

lz这些函数纯逻辑的东西,没有必要用汇编写。


f32应该是int吧?
看到了2个float的函数,lz能不能想办法不使用float类型,优化以下2个函数?

浮点运算

inline float f32tofloat(f32 n)
{
return (((float)(n)) / (float)(1 < <12));
}

inline f32 floattof32(float f)
{
return (int(4096.0*f));
}
点赞  2009-9-1 01:52
谢谢楼上的,我也在想怎么处理这一快

我作的是windows mobile手机的开发,现在作的上面的图像变形软件

运算量比较大,这些是常用的几个函数。

我先想办法把float去除出去,函数的汇编话大家看看有没有,帮忙给写写

点赞  2009-9-1 10:23
你的芯片支持浮点数处理么?
点赞  2009-9-1 10:58
不支持,浮点运算在上面跑很慢很慢,所以我才改成顶点的

可是顶点的在最差的200mhz的cpu上面跑图像变换还不是很流畅

所以才考虑到一些常用的函数进行汇编话的
点赞  2009-9-1 15:38
如果没有浮点单元的话,那你得考虑一下怎么处理乘除。否则单纯的转为汇编不会有什么改善。瓶颈应该是如何实现乘除上。
点赞  2009-9-2 10:23
谢谢楼上的

大家在没有浮点协处理器的arm cpu上面有没有吹乘除的经验

分享一下,谢谢啊
点赞  2009-9-7 19:53
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复