Saya memiliki masalah dengan menggunakan xxh3.h
pada Janda saat membangun arsitektur ARM.
Masalahnya adalah __emulu
adalah makro internal windows x64/x86 saja ( 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
Di mana itu didefinisikan hanya memeriksa _MSC_VER
sebelum menggunakannya. Akan sangat membantu jika ini dapat memeriksa arsitektur juga. Katakan baik dengan tidak memasukkannya saat ARM atau hanya menggunakannya pada prosesor x64/x86. Terima kasih.
Poin bagus, terima kasih atas pemberitahuannya @carstenskyboxlabs !
Kita mungkin harus menegakkan bahwa jalur kode ini hanya valid untuk x86
/ x64
, karena itulah target di mana instruksi __emulu
didefinisikan .
Catatan tambahan: akan sangat bagus jika saya dapat menemukan cara untuk menguji kompilasi Visual Studio untuk ARM, dan mengotomatiskan pengujian semacam itu ke AppveyorCI . Itu akan menangkap masalah ini, dan yang potensial di masa depan.
Terima kasih atas tanggapannya.
Saya tidak yakin saya belum pernah menggunakan AppveyorCI, tetapi saya tahu bahwa VS/MSBuild mendukung build UWP ARM.
Ketika saya menjalankan langkah-langkah ini menggunakan CMake dan Visual Studio 2019:
cd cmake_unofficial
mkdir build
cd build
cmake -G "Visual Studio 16 2019" -A ARM ..
cmake --build .
Saya mendapatkan kesalahan ini:
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]
Saya tidak punya banyak pengalaman dengan appveyor.yml, tetapi mengikuti pola yang ada, saya pikir ini akan memungkinkan Anda menghasilkan dan menjalankan untuk ARM:
- if "%PLATFORM%"=="visual_arm" (
cd cmake_unofficial &&
cmake . -DCMAKE_BUILD_TYPE=Release -A ARM &&
cmake --build . --config Release
)
Terima kasih @v-strob atas petunjuknya! Layak untuk dicoba!
Ini mungkin harus bekerja. Itu harus memperbaiki kompilasi ARM, dan itu harus meningkatkan kinerja 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
Diperbaiki di cabang dev
Komentar yang paling membantu
Ketika saya menjalankan langkah-langkah ini menggunakan CMake dan Visual Studio 2019:
cd cmake_unofficial
mkdir build
cd build
cmake -G "Visual Studio 16 2019" -A ARM ..
cmake --build .
Saya mendapatkan kesalahan ini:
Saya tidak punya banyak pengalaman dengan appveyor.yml, tetapi mengikuti pola yang ada, saya pikir ini akan memungkinkan Anda menghasilkan dan menjalankan untuk ARM: