【发布时间】:2012-02-21 17:06:46
【问题描述】:
我试图改进一些代码,但我无法做到,所以我在这里寻求帮助,我也尝试过使用内在函数,但是如果你想使用内在函数,你需要使用 GCC 编译器,这个编译器编译速度较慢的代码比 LLVM,那么所有的代码都会变慢,所以最好的选择是直接使用 asm。 我把我想改进的两个功能,还有霓虹灯中的代码,代码返回的是无意义的数字。 我真的需要这方面的帮助,任何指向正确方向的点都可以帮助我很多。
我要改进的代码:
inline unsigned des(const unsigned char* v0)
{
unsigned r;
r = v0[0]*v0[0];
r += v0[1]*v0[1];
r += v0[2]*v0[2];
r += v0[3]*v0[3];
r += v0[4]*v0[4];
r += v0[5]*v0[5];
r += v0[6]*v0[6];
r += v0[7]*v0[7];
return r;
}
inline unsigned suma(const unsigned char* v0)
{
unsigned r;
r = v0[0];
r += v0[1];
r += v0[2];
r += v0[3];
r += v0[4];
r += v0[5];
r += v0[6];
r += v0[7];
return r;
}
霓虹灯代码不起作用
unsigned desneon(unsigned v0[8])
{
asm volatile (
"vld1.32 {d2- d5}, [%0] \n\t"
"vld1.32 {d6- d9}, [%0] \n\t"
"vmul.s32 d0, d2, d6 \n\t" //d0= d2*d6
"vmla.s32 d0, d3, d7 \n\t" //d0 = d0 + d3*d7
"vmla.s32 d0, d4, d8 \n\t" //d0 = d0 + d4*d8
"vmla.s32 d0, d5, d9 \n\t" //d0 = d0 + d5*d9
"vpadd.s32 d0, d0 \n\t" //d0 = d[0] + d[1]
:: "r"(v0) :
);
}
非常感谢!!!
【问题讨论】:
-
您实际上并没有从该方法返回任何内容。
d0最终会得到您想要的结果,我很确定,但您实际上需要返回它。 -
为什么不在 Accelerate.framework 中使用 vDSP 函数?
-
vDSP 正在使用浮点数,我想这会使应用程序变慢,不是吗?