// 预定义函数
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写的,可是在执行的时候发现效率不佳,希望可以汇编花,各位大侠有没有做过,或者帮忙写几个,写着有分,谢谢
反汇编不就行了,再从汇编中找出你你觉得需要优化的代码
ARM的我忘了,只会DSP的了
不过你这些函数基本都是一句,如果写好了C,可以和汇编效率差不多的。
效率不佳和
你用汇编写或者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));
}
谢谢楼上的,我也在想怎么处理这一快
我作的是windows mobile手机的开发,现在作的上面的图像变形软件
运算量比较大,这些是常用的几个函数。
我先想办法把float去除出去,函数的汇编话大家看看有没有,帮忙给写写
不支持,浮点运算在上面跑很慢很慢,所以我才改成顶点的
可是顶点的在最差的200mhz的cpu上面跑图像变换还不是很流畅
所以才考虑到一些常用的函数进行汇编话的
如果没有浮点单元的话,那你得考虑一下怎么处理乘除。否则单纯的转为汇编不会有什么改善。瓶颈应该是如何实现乘除上。
谢谢楼上的
大家在没有浮点协处理器的arm cpu上面有没有吹乘除的经验
分享一下,谢谢啊