Xxhash: XXH3 и сборки Windows ARM

Созданный на 27 июн. 2019  ·  6Комментарии  ·  Источник: Cyan4973/xxHash

У меня проблема с использованием xxh3.h в Widows при сборке для архитектуры ARM.
Проблема в том, что __emulu - это внутренний макрос Windows только для x64 / x86 ( 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. Спасибо.

Самый полезный комментарий

Когда я запускаю эти шаги с помощью CMake и Visual Studio 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 .

Боковое примечание: было бы здорово найти способ протестировать компиляцию Visual Studio для ARM и автоматизировать такой тест в AppveyorCI . Он бы поймал эту проблему и потенциальные будущие.

Спасибо за ответ.
Я не уверен, что никогда не использовал AppveyorCI, но знаю, что VS / MSBuild поддерживает сборки UWP ARM.

Когда я запускаю эти шаги с помощью CMake и Visual Studio 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 рейтинги

Смежные вопросы

vinniefalco picture vinniefalco  ·  4Комментарии

jtoivainen picture jtoivainen  ·  4Комментарии

gitmko0 picture gitmko0  ·  7Комментарии

jvriezen picture jvriezen  ·  6Комментарии

easyaspi314 picture easyaspi314  ·  6Комментарии