Xxhash: XXH3およびWindowsARMビルド

作成日 2019年06月27日  ·  6コメント  ·  ソース: Cyan4973/xxHash

ARMアーキテクチャのビルド中にWidowsでxxh3.hを使用する際に問題が発生しました。
問題は、 __emuluがx64 / x86のみのWindows内部マクロ( MS Docs )であるということです。

/* U64 XXH_mult32to64(U32 a, U64 b) { return (U64)a * (U64)b; } */
#ifdef _MSC_VER
#   include <intrin.h>
    /* MSVC doesn't do a good job with the mull detection. */
#   define XXH_mult32to64 __emulu
#else
#   define XXH_mult32to64(x, y) ((U64)((x) & 0xFFFFFFFF) * (U64)((y) & 0xFFFFFFFF))
#endif

定義されている場合は、使用する前に_MSC_VERのみをチェックします。 これでアーキテクチャもチェックできれば非常に役立ちます。 ARMの場合は含めないか、x64 / x86プロセッサでのみ使用してください。 ありがとう。

bug

最も参考になるコメント

CMakeとVisualStudio 2019を使用してこれらの手順を実行すると、次のようになります。

  1. cd cmake_unofficial
  2. mkdir build
  3. cd build
  4. cmake -G "Visual Studio 16 2019" -A ARM ..
  5. cmake --build .

このエラーが発生します:

xxhash.obj : error LNK2019: unresolved external symbol __emulu referenced in function XXH3_mul128_fold64 [C:\Users\steve\Do
cuments\xxHash\cmake_unofficial\build\xxhash.vcxproj]
C:\Users\steve\Documents\xxHash\cmake_unofficial\build\Debug\xxhash.dll : fatal error LNK1120: 1 unresolved externals [C:\U
sers\steve\Documents\xxHash\cmake_unofficial\build\xxhash.vcxproj]

appveyor.ymlの経験はあまりありませんが、既存のパターンに従うと、ARM用に生成して実行できるようになると思います。

- if "%PLATFORM%"=="visual_arm" (
      cd cmake_unofficial &&
      cmake . -DCMAKE_BUILD_TYPE=Release -A ARM &&
      cmake --build . --config Release
  )

全てのコメント6件

良い点、通知@carstenskyboxlabsに感謝し

このコードパスはx86 / x64に対してのみ有効であるように強制する必要があります。これは、 __emulu命令が定義されているターゲットだからです。

補足:ARM用のVisual Studioコンパイルをテストし、そのようなテストをAppveyorCIに自動化する方法を見つけることができれば素晴らしいと

返信ありがとうございます。
AppveyorCIを使用したことがないかどうかはわかりませんが、VS / MSBuildがUWPARMビルドをサポートしていることは知っています。

CMakeとVisualStudio 2019を使用してこれらの手順を実行すると、次のようになります。

  1. cd cmake_unofficial
  2. mkdir build
  3. cd build
  4. cmake -G "Visual Studio 16 2019" -A ARM ..
  5. cmake --build .

このエラーが発生します:

xxhash.obj : error LNK2019: unresolved external symbol __emulu referenced in function XXH3_mul128_fold64 [C:\Users\steve\Do
cuments\xxHash\cmake_unofficial\build\xxhash.vcxproj]
C:\Users\steve\Documents\xxHash\cmake_unofficial\build\Debug\xxhash.dll : fatal error LNK1120: 1 unresolved externals [C:\U
sers\steve\Documents\xxHash\cmake_unofficial\build\xxhash.vcxproj]

appveyor.ymlの経験はあまりありませんが、既存のパターンに従うと、ARM用に生成して実行できるようになると思います。

- if "%PLATFORM%"=="visual_arm" (
      cd cmake_unofficial &&
      cmake . -DCMAKE_BUILD_TYPE=Release -A ARM &&
      cmake --build . --config Release
  )

ヒントをありがとう@ v-strob! 試す価値があります!

これはおそらくうまくいくはずです。 ARMコンパイルを修正し、 x64のパフォーマンスます

#if defined(_MSC_VER) && defined(_M_IX86)
#    include <intrin.h>
#    define XXH_mult32to64 __emulu
#else
#    define XXH_mult32to64(x, y) ((U64)((x) & 0xFFFFFFFF) * (U64)((y) & 0xFFFFFFFF))
#endif

devブランチで修正済み

このページは役に立ちましたか?
0 / 5 - 0 評価