我正在尝试优化 beagleboard 上的光线追踪器代码,为此我正在使用 NEON 协处理器。有一个矩阵乘法函数被多次调用,我在内联汇编中编写过。但是,由于某种原因,结果并不准确。这是我的代码:
void VecMatMult(float Vt[4], float M[4][4], float V[4])
{
__asm__ volatile(
"vldmia %1, {q1-q4} \n\t" // Load the Matrix in the quad registers
"vldmia %2, {q5} \n\t" //Load the Vector
"vmul.f32 q0, q1, d10[0] \n\t" //Calculate the matrix product
"vmla.f32 q0, q2, d10[1] \n\t"
"vmla.f32 q0, q3, d11[0] \n\t"
"vmla.f32 q0, q4, d11[1] \n\t"
"vstmia %0, {q0} \n\t" //Store the output
:
:"r" (Vt), "r" (M), "r" (V)
:"q0", "q1", "q2", "q3", "q4", "q5"
);
}
有趣的是,当我在单独的程序中调用这段代码来测试它是否有效时,结果是完美的。但是,当它在我的主程序中多次调用时,结果不正确。任何帮助将不胜感激,因为我现在真的一无所知。