1

みんな。iOSシミュレーターでスキアを実行しましたが、iPhoneで実行できません。ここで停止しました。

    #if defined(__x86_64__) || defined(_WIN64)
    /* All x86_64 machines have SSE2, so don't even bother checking. */
    static inline bool hasSSE2() {
        return true;
    }
    #else
    #ifdef _MSC_VER
    static inline void getcpuid(int info_type, int info[4]) {
__asm {
    mov    eax, [info_type]
    cpuid
    mov    edi, [info]
    mov    [edi], eax
    mov    [edi+4], ebx
    mov    [edi+8], ecx
    mov    [edi+12], edx
}
}
#else
static inline void getcpuid(int info_type, int info[4]) {
// We save and restore ebx, so this code can be compatible with -fPIC
asm volatile (
    "pushl %%ebx      \n\t"
    "cpuid            \n\t"
    "movl %%ebx, %1   \n\t"
    "popl %%ebx       \n\t"
    : "=a"(info[0]), "=r"(info[1]), "=c"(info[2]), "=d"(info[3])
    : "a"(info_type)
);
 }
#endif

static inline bool hasSSE2() {
int cpu_info[4] = { 0 };
getcpuid(1, cpu_info);
return (cpu_info[3] & (1<<26)) != 0;
return true;
}
#endif

getcpuidメソッドでは、「asmの出力制約'a'が無効です」と表示されます。どうしたの??誰でも?

4

1 に答える 1

1

壊れているコードは、アーム チップの x86 アセンブリをビルドしようとしています。当然のことながら、これはデバイスでは機能しません。シミュレーターは x86 チップ上で動作するため、シミュレーター上で動作します。a 制約は、eax:edx (IIRC) で 64 ビット値を返すことを示す x86 制約です。

arm コード パスを介して配置するには、適切なフラグを使用してコンパイルする必要があります。

これを読んだことがありますか?

https://sites.google.com/site/skiadocs/user-documentation/quick-start-guides/how-to-check-out-and-build-skia-on-ios

于 2013-03-03T15:06:43.797 に答える