web-dev-qa-db-ja.com

asmの不明なレジスタ名 'q0'

$(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開発に不慣れなので、ちょっと迷っています...

19

neon_matrix_impl.cとmat4.cで変更してみてください
#if defined(ARM_NEON)

#if defined(_ARM_Arch_7)

46
charlieme

Cocos2d 2.1を使用している場合、2つのマクロでmodification(#if defined(ARM_NEON) ->#if defined(_ARM_Arch_7))が必要です

  1. neon_matrix_impl.cおよび
  2. 行番号218のmat4.c

enter image description here

実際には ARM NEON はiOSデバイスのマルチメディアレンダリングエンジンとして使用されていましたが、iOS 7.0以降では新しいレンダリングエンジン (ARM Arch 64ビット) が使用されています。

詳細は ここ から入手できます。

しかし、Xcodeプロジェクトが完全にコンパイルされ、これらの変更なしでiPod Touch(第5世代)で正常に実行されたことは、私にとって本当に混乱しました。変更が必要だったのは、プロジェクトをアーカイブしてAppStoreに送信しようとしたときだけでした。

19
Sauvik Dolui