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.
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:
cd cmake_unofficial
mkdir build
cd build
cmake -G "Visual Studio 16 2019" -A ARM ..
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
Comentario más útil
Cuando ejecuto estos pasos usando CMake y Visual Studio 2019:
cd cmake_unofficial
mkdir build
cd build
cmake -G "Visual Studio 16 2019" -A ARM ..
cmake --build .
Me sale este error:
No tengo mucha experiencia con appveyor.yml, pero siguiendo el patrón existente, creo que esto te permitirá generar y ejecutar ARM: