【发布时间】:2014-02-25 22:12:42
【问题描述】:
我正在尝试为 $(ARCHS_STANDARD_32_BIT) 架构构建 ios 项目 - armv7 用于最新的 iOS (iOS 7.0),但出现以下错误:
Unknown register name 'q0' in asm
在函数中
static void neon_asm_mat4_vec4_mul(const float* __restrict m, const int* __restrict v, int* __restrict output)
{
asm volatile
(
// Store m & v - avoiding q4-q7 which need to be preserved - q0 = result
"vldmia %1, { q8-q11 } \n\t" // q8-q11 = m
"vldmia %2, { q1 } \n\t" // q1 = v
// Convert v to floats
"vcvt.f32.s32 q1, q1 \n\t"
// result = first column of A x V.x
"vmul.f32 q0, q8, d2[0] \n\t"
// result += second column of A x V.y
"vmla.f32 q0, q9, d2[1] \n\t"
// result += third column of A x V.z
"vmla.f32 q0, q10, d3[0] \n\t"
// result += last column of A x V.w
"vmla.f32 q0, q11, d3[1] \n\t"
// convert to integer
"vcvt.s32.f32 q0, q0 \n\t"
// output = result registers
"vstmia %0, { q0 } \n\t"
: // no output
: "r" (output), "r" (m), "r" (v) // input - note *value* of pointer doesn't change
: "memory", "q0", "q1", "q2", "q3", "q8", "q9", "q10", "q11" //clobber
);
}
能否请您帮助我更新我的代码,以便可以为最新的硬件构建它,或者只是以不同的方式配置构建设置。我是 iOS 开发的新手,所以我有点迷茫......
【问题讨论】:
-
@PaulR 我看到另一个与此主题相关的问题,但答案状态为“您需要重新编写此代码”。聪明,但我仍然不知道如何解决它!
-
另外我正在为 32 位硬件构建...至少
$(ARCHS_STANDARD_32_BIT)这是我的看法。 -
另见Error: invalid use of vector register at operand 1。尽管您遇到了一些 GCC 扩展 ASM 问题,但它仍然有效。看看ARM machine constraints,因为你可能需要一个“t”或“w”而不是“r”。
标签: ios ios7 build cpu-registers armv7