Xxhash: XXH3 y compilaciones ARM de Windows

Creado en 27 jun. 2019  ·  6Comentarios  ·  Fuente: Cyan4973/xxHash

Tengo un problema con el uso de xxh3.h en Widows mientras construyo una arquitectura ARM.
El problema es que __emulu es una macro interna de Windows solo 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

Donde está definido solo verifica un _MSC_VER antes de usarlo. Sería muy útil si esto también pudiera verificar la arquitectura. Diga si no lo incluye en ARM o solo lo usa en procesadores x64 / x86. Gracias.

bug

Comentario más útil

Cuando ejecuto estos pasos usando CMake y 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 .

Me sale este error:

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]

No tengo mucha experiencia con appveyor.yml, pero siguiendo el patrón existente, creo que esto te permitirá generar y ejecutar ARM:

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

Todos 6 comentarios

Buen punto, gracias por la notificación @carstenskyboxlabs !

Probablemente deberíamos hacer cumplir que esta ruta de código solo es válida para x86 / x64 , ya que ese es el objetivo donde se define la instrucción __emulu .

Nota al margen : sería genial si pudiera encontrar una manera de probar la compilación de Visual Studio para ARM y

Gracias por la respuesta.
No estoy seguro de haber usado AppveyorCI, pero sé que VS / MSBuild es compatible con las compilaciones ARM de UWP.

Cuando ejecuto estos pasos usando CMake y 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 .

Me sale este error:

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]

No tengo mucha experiencia con appveyor.yml, pero siguiendo el patrón existente, creo que esto te permitirá generar y ejecutar ARM:

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

¡Gracias @ v-strob por la pista! Vale intentarlo !

Probablemente esto debería funcionar. Debería arreglar la compilación ARM y debería mejorar el rendimiento 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

Fijo en la sucursal dev

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

xinglin picture xinglin  ·  6Comentarios

gitmko0 picture gitmko0  ·  4Comentarios

devnoname120 picture devnoname120  ·  8Comentarios

WayneD picture WayneD  ·  7Comentarios

vinniefalco picture vinniefalco  ·  4Comentarios