From 75fd4ecf54e1c0f06cfd9a5d32dad604ad053102 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9B=D0=B5=D0=BE=D0=BD=D0=B8=D0=B4=20=D0=AE=D1=80=D1=8C?= =?UTF-8?q?=D0=B5=D0=B2=20=28Leonid=20Yuriev=29?= Date: Wed, 22 May 2024 01:21:10 +0300 Subject: [PATCH] =?UTF-8?q?mdbx-testing:=20=D0=BA=D0=BE=D1=81=D1=82=D1=8B?= =?UTF-8?q?=D0=BB=D1=8C=20=D0=B4=D0=BB=D1=8F=20MSVC=20ARM/ARM64=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BF=D1=80=D0=B5=D0=B4=D0=BE=D1=82=D0=B2=D1=80?= =?UTF-8?q?=D0=B0=D1=89=D0=B5=D0=BD=D0=B8=D1=8F=20ICE=20(backport).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/chrono.c++ | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/chrono.c++ b/test/chrono.c++ index 2099b105..6c2895f1 100644 --- a/test/chrono.c++ +++ b/test/chrono.c++ @@ -42,7 +42,16 @@ uint32_t us2fractional(uint32_t us) { } uint32_t fractional2us(uint32_t fractional) { +#if !(defined(_M_ARM) || defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64)) + /* Смеяться или плакать, но все существующие на май 2024 компиляторы Microsoft + * для ARM/ARM64, уже порядка 10 лет, падают на этом коде из-за внтутренней + * ошибке (aka ICE). */ return uint32_t((fractional * uint64_t(USEC_PER_SEC)) >> 32); +#else + static_assert(USEC_PER_SEC % 16 == 0, "WTF?"); + /* Crutch for MSVC ARM/ARM64 compilers to avoid internal compiler error. */ + return UInt32x32To64(fractional, USEC_PER_SEC / 16) >> 28; +#endif } #ifndef MSEC_PER_SEC