【问题标题】:Unknown register name 'q0' in asmasm 中的未知寄存器名称“q0”
【发布时间】: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 开发的新手,所以我有点迷茫......

【问题讨论】:

标签: ios ios7 build cpu-registers armv7


【解决方案1】:

尝试更改 neon_matrix_impl.c 和 mat4.c
#if defined(ARM_NEON)

#if defined(_ARM_ARCH_7)

【讨论】:

  • 我发现我必须更改这两个文件:neon_matrix_impl.c 和 mat4.c。
  • 你做了哪些改变?
  • 您似乎在混合和匹配... NEON 在 ARMv7 和 ARMv8 中几乎无处不在。将__ARM_NEON__ 更改为_ARM_ARCH_7 似乎是错误的。 如果您有一个支持 NEON 的 ARM 设备,那么您应该将-march=armv7-a -mfpu=neon 添加到您的CFLAGSCXXFLAGS。根据/proc/cpuinfo 中存在的标志,您可能可以使用-march=armv7-a -mfpu=neon-vfpv4,它应该指示VFPv4 和32 个D 寄存器与16 个Q 寄存器重叠。
【解决方案2】:

使用 Cocos2d 2.1 的,需要在两个宏中修改(#if defined(ARM_NEON) ->#if defined(_ARM_ARCH_7))

  1. neon_matrix_impl.c 和
  2. mat4.c 在第 218 行

实际上ARM NEON在iOS设备中被用作多媒体渲染引擎,但现在在iOS 7.0及更高版本中使用了新的渲染引擎(ARM ARCH 64 bit)

更多详情可以咨询here

但是让我感到非常困惑的是,我的 Xcode 项目在我的 iPod Touch(第 5 代)上完美编译并成功执行,而没有进行这些修改。只有当我尝试归档我的项目以将其提交到 AppStore 时才需要修改。

【讨论】:

  • 您似乎在混合和匹配... NEON 在 ARMv7 和 ARMv8 中几乎无处不在。将__ARM_NEON__ 更改为_ARM_ARCH_7 似乎是错误的。 如果您有一个支持 NEON 的 ARM 设备,那么您应该将-march=armv7-a -mfpu=neon 添加到您的CFLAGSCXXFLAGS。根据/proc/cpuinfo 中存在的标志,您也许可以使用-march=armv7-a -mfpu=neon-vfpv4,这应该表示VFPv4 和32 个D 寄存器与16 个Q 寄存器重叠。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-26
  • 2023-03-11
相关资源
最近更新 更多