Xxhash: Versões XXH3 e Windows ARM

Criado em 27 jun. 2019  ·  6Comentários  ·  Fonte: Cyan4973/xxHash

Eu tenho um problema ao usar xxh3.h no Widows ao construir para uma arquitetura ARM.
O problema é que __emulu é uma macro interna do Windows x64 / x86 somente ( 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

Onde está definido, verifica apenas _MSC_VER antes de usá-lo. Seria muito útil se isso pudesse verificar a arquitetura também. Diga por não incluí-lo no ARM ou apenas usá-lo em processadores x64 / x86. Obrigado.

bug

Comentários muito úteis

Quando eu executo essas etapas usando CMake e 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 .

Eu recebo este erro:

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]

Não tenho muita experiência com appveyor.yml, mas seguindo o padrão existente, acho que isso permitirá que você gere e execute para ARM:

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

Todos 6 comentários

Bom ponto, obrigado pela notificação @carstenskyboxlabs !

Devemos provavelmente impor que este caminho de código só é válido para x86 / x64 , uma vez que esse é o destino onde a instrução __emulu é definida .

Observação lateral: seria ótimo se eu pudesse encontrar uma maneira de testar a compilação do Visual Studio para ARM e automatizar esse teste no AppveyorCI . Ele teria detectado esse problema e outros possíveis no futuro.

Obrigado pela resposta.
Não tenho certeza se nunca usei o AppveyorCI, mas sei que o VS / MSBuild oferece suporte a compilações UWP ARM.

Quando eu executo essas etapas usando CMake e 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 .

Eu recebo este erro:

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]

Não tenho muita experiência com appveyor.yml, mas seguindo o padrão existente, acho que isso permitirá que você gere e execute para ARM:

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

Obrigado @ v-strob pela dica! Vale a pena tentar !

Isso provavelmente deve funcionar. Deve corrigir a compilação ARM e deve melhorar o desempenho do 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

Corrigido na filial dev

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

WayneD picture WayneD  ·  7Comentários

jtoivainen picture jtoivainen  ·  4Comentários

shuffle2 picture shuffle2  ·  6Comentários

easyaspi314 picture easyaspi314  ·  7Comentários

make-github-pseudonymous-again picture make-github-pseudonymous-again  ·  3Comentários