Xxhash: XXH3 و Windows ARM يبني

تم إنشاؤها على ٢٧ يونيو ٢٠١٩  ·  6تعليقات  ·  مصدر: Cyan4973/xxHash

لدي مشكلة في استخدام xxh3.h على Widows أثناء البناء لبنية ARM.
المشكلة هي أن __emulu هو ماكرو داخلي x64 / x86 فقط في windows ( 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. شكرا.

bug

التعليق الأكثر فائدة

عندما أقوم بتشغيل هذه الخطوات باستخدام 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 التقييمات