Xxhash: XXH3- und Windows ARM-Builds

Erstellt am 27. Juni 2019  ·  6Kommentare  ·  Quelle: Cyan4973/xxHash

Ich habe ein Problem mit der Verwendung von xxh3.h auf Widows, während ich für eine ARM-Architektur baue.
Das Problem ist, dass __emulu ein internes x64/x86-Windows-Makro ( MS Docs ) ist.

/* 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

Wo es definiert ist, wird nur nach einem _MSC_VER bevor es verwendet wird. Es wäre sehr hilfreich, wenn dies auch die Architektur überprüfen könnte. Sagen Sie entweder, indem Sie es nicht bei ARM einschließen oder es nur auf x64/x86-Prozessoren verwenden. Vielen Dank.

bug

Hilfreichster Kommentar

Wenn ich diese Schritte mit CMake und Visual Studio 2019 ausführe:

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

Ich bekomme diesen Fehler:

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]

Ich habe nicht viel Erfahrung mit appveyor.yml, aber nach dem bestehenden Muster denke ich, dass Sie damit für ARM generieren und ausführen können:

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

Alle 6 Kommentare

Guter Punkt, danke für die Benachrichtigung @carstenskyboxlabs !

Wir sollten wahrscheinlich erzwingen, dass dieser Codepfad nur für x86 / x64 gültig ist, da dies das Ziel ist, in dem die __emulu Anweisung definiert wird .

Randnotiz: Es wäre großartig, wenn ich eine Möglichkeit finden könnte, die Visual Studio-Kompilierung für ARM zu testen und einen solchen Test in AppveyorCI zu automatisieren . Es hätte dieses Problem und potenzielle zukünftige Probleme erfasst.

Danke für die Antwort.
Ich bin mir nicht sicher, ob ich AppveyorCI noch nie verwendet habe, aber ich weiß, dass VS/MSBuild UWP ARM-Builds unterstützt.

Wenn ich diese Schritte mit CMake und Visual Studio 2019 ausführe:

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

Ich bekomme diesen Fehler:

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]

Ich habe nicht viel Erfahrung mit appveyor.yml, aber nach dem bestehenden Muster denke ich, dass Sie damit für ARM generieren und ausführen können:

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

Danke @v-strob für den Hinweis! Einen Versuch wert !

Das sollte wohl funktionieren. Es sollte die ARM-Kompilierung beheben und die x64-Leistung verbessern

#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

Behoben im dev Zweig

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen