混合NEON程序集和非矢量函数

| 我想我找到了问题的答案。 VFP有一条“ fmacs”指令,可以完成对NEON / VFP寄存器进行标量计算的技巧。 我对NEON或ARM编程非常陌生... 我想将一个上三角矩阵加载到NEON寄存器中,并使用单精度积分(累积)向量的外部乘积。基本思想是A + = x \'* x,其中A是上三角矩阵。通过在四或双寄存器上使用NEON指令\“ vmla.f32 \”对操作进行矢量化,可以完成某些操作。但是,有时我一次只需要对一个精度寄存器进行操作1,即不需要对2或4个精度寄存器进行操作。在下面的示例中(无效),我对该行感兴趣
// A[8-14] += A[1]*x[1-7] 
\"mla  s16, s16, d0[1]\\n\\t\"
我想使用NEON寄存器执行一个单精度运算。 程式码片段:
    __asm__ volatile (
    //load x into registers
    \"vldmia    %0, {d0-d3}\\n\\t\"
    // load A into registers
    \"vldmia    %1, {d4-d12}\\n\\t\"
    \"vldmia    %1, {d13-d21}\\n\\t\"
    // A[0-7] += x[0]*x[0-7]
    \"vmla.f32  q2, q2, d0[0]\\n\\t\"
    \"vmla.f32  q3, q3, d0[0]\\n\\t\"
    // A[8-14] += A[1]*x[1-7]
    \"mla  s16, s16, d0[1]\\n\\t\"
    // output
    :
    // input
    : \"r\"(A), \"r\"(x)
    // registers
    : \"q0\", \"q1\", \"q2\", \"q3\", \"q4\", \"q5\", \"q6\", \"q7\", \"q8\", \"q9\", \"q10\"
    );
    
已邀请:
所以我认为您是在问将向量与标量相乘吗? 我将使用“ vdup”将标量加载到NEON寄存器的所有通道中,然后相乘。 如果您可以发布您要执行的操作的纯C版本,则可以尝试提供更多帮助...     

要回复问题请先登录注册