Snap for 8426163 from c577b94ed81e89bb905b7cbba8043480561afda6 to mainline-tzdata2-release

Change-Id: Idba2825b457acbac58dab9b9fa0a0b6f1fdcbcdf
diff --git a/.gitignore b/.gitignore
index c10cb60..73b2998 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,17 +2,10 @@
 build.ninja
 
 # Build objects and artifacts
-bazel-bin
-bazel-genfiles
-bazel-out
-bazel-testlogs
-bazel-FXdiv
-bin/
-build/
-build-*/
 deps/
+build/
+bin/
 lib/
-libs/
 *.pyc
 *.pyo
 
diff --git a/Android.bp b/Android.bp
index e4e0bc8..972b0ab 100644
--- a/Android.bp
+++ b/Android.bp
@@ -12,23 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package {
-    default_applicable_licenses: ["external_FXdiv_license"],
-}
-
-// Added automatically by a large-scale-change
-// See: http://go/android-license-faq
-license {
-    name: "external_FXdiv_license",
-    visibility: [":__subpackages__"],
-    license_kinds: [
-        "SPDX-license-identifier-MIT",
-    ],
-    license_text: [
-        "LICENSE",
-    ],
-}
-
 cc_library_headers {
     name: "fxdiv_headers",
     export_include_dirs: ["include"],
diff --git a/BUILD.bazel b/BUILD.bazel
deleted file mode 100644
index 2e3882b..0000000
--- a/BUILD.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test")
-
-licenses(["notice"])
-
-exports_files(["LICENSE"])
-
-################################# FXdiv library ################################
-
-cc_library(
-    name = "FXdiv",
-    hdrs = [
-        "include/fxdiv.h",
-    ],
-    includes = [
-        "include",
-    ],
-    strip_include_prefix = "include",
-    deps = [],
-    visibility = ["//visibility:public"],
-)
-
-################################## Unit tests ##################################
-
-cc_test(
-    name = "multiply_high_test",
-    srcs = ["test/multiply-high.cc"],
-    deps = [
-        ":FXdiv",
-        "@com_google_googletest//:gtest_main",
-    ],
-)
-
-cc_test(
-    name = "quotient_test",
-    srcs = ["test/quotient.cc"],
-    deps = [
-        ":FXdiv",
-        "@com_google_googletest//:gtest_main",
-    ],
-)
-
-################################## Benchmarks ##################################
-
-cc_binary(
-    name = "init_bench",
-    srcs = ["bench/init.cc"],
-    deps = [
-        ":FXdiv",
-        "@com_google_benchmark//:benchmark",
-    ],
-)
-
-cc_binary(
-    name = "multiply_bench",
-    srcs = ["bench/multiply.cc"],
-    deps = [
-        ":FXdiv",
-        "@com_google_benchmark//:benchmark",
-    ],
-)
-
-cc_binary(
-    name = "divide_bench",
-    srcs = ["bench/divide.cc"],
-    deps = [
-        ":FXdiv",
-        "@com_google_benchmark//:benchmark",
-    ],
-)
-
-cc_binary(
-    name = "quotient_bench",
-    srcs = ["bench/quotient.cc"],
-    deps = [
-        ":FXdiv",
-        "@com_google_benchmark//:benchmark",
-    ],
-)
-
-cc_binary(
-    name = "round_down_bench",
-    srcs = ["bench/round-down.cc"],
-    deps = [
-        ":FXdiv",
-        "@com_google_benchmark//:benchmark",
-    ],
-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index bcae6b5..a74d59d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,6 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 3.5 FATAL_ERROR)
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12 FATAL_ERROR)
+
+INCLUDE(GNUInstallDirs)
 
 # ---[ Project
 PROJECT(FXdiv C CXX)
@@ -14,39 +16,45 @@
 ENDIF()
 
 # ---[ CMake options
-INCLUDE(GNUInstallDirs)
-
 IF(FXDIV_BUILD_TESTS)
   ENABLE_TESTING()
 ENDIF()
 
 # ---[ Download deps
+SET(CONFU_DEPENDENCIES_SOURCE_DIR ${CMAKE_SOURCE_DIR}/deps
+  CACHE PATH "Confu-style dependencies source directory")
+SET(CONFU_DEPENDENCIES_BINARY_DIR ${CMAKE_BINARY_DIR}/deps
+  CACHE PATH "Confu-style dependencies binary directory")
+
 IF(FXDIV_BUILD_TESTS AND NOT DEFINED GOOGLETEST_SOURCE_DIR)
-  MESSAGE(STATUS "Downloading Google Test to ${CMAKE_BINARY_DIR}/googletest-source (define GOOGLETEST_SOURCE_DIR to avoid it)")
-  CONFIGURE_FILE(cmake/DownloadGoogleTest.cmake "${CMAKE_BINARY_DIR}/googletest-download/CMakeLists.txt")
+  MESSAGE(STATUS "Downloading Google Test to ${CONFU_DEPENDENCIES_SOURCE_DIR}/googletest (define GOOGLETEST_SOURCE_DIR to avoid it)")
+  CONFIGURE_FILE(cmake/DownloadGoogleTest.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest-download/CMakeLists.txt")
   EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
-    WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/googletest-download")
+    WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest-download")
   EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" --build .
-    WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/googletest-download")
-  SET(GOOGLETEST_SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-source" CACHE STRING "Google Test source directory")
+    WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest-download")
+  SET(GOOGLETEST_SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/googletest" CACHE STRING "Google Test source directory")
 ENDIF()
 
 IF(FXDIV_BUILD_BENCHMARKS AND NOT DEFINED GOOGLEBENCHMARK_SOURCE_DIR)
-  MESSAGE(STATUS "Downloading Google Benchmark to ${CMAKE_BINARY_DIR}/googlebenchmark-source (define GOOGLEBENCHMARK_SOURCE_DIR to avoid it)")
-  CONFIGURE_FILE(cmake/DownloadGoogleBenchmark.cmake "${CMAKE_BINARY_DIR}/googlebenchmark-download/CMakeLists.txt")
+  MESSAGE(STATUS "Downloading Google Benchmark to ${CONFU_DEPENDENCIES_SOURCE_DIR}/googlebenchmark (define GOOGLEBENCHMARK_SOURCE_DIR to avoid it)")
+  CONFIGURE_FILE(cmake/DownloadGoogleBenchmark.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/googlebenchmark-download/CMakeLists.txt")
   EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
-    WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/googlebenchmark-download")
+    WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/googlebenchmark-download")
   EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" --build .
-    WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/googlebenchmark-download")
-  SET(GOOGLEBENCHMARK_SOURCE_DIR "${CMAKE_BINARY_DIR}/googlebenchmark-source" CACHE STRING "Google Benchmark source directory")
+    WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/googlebenchmark-download")
+  SET(GOOGLEBENCHMARK_SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/googlebenchmark" CACHE STRING "Google Benchmark source directory")
 ENDIF()
 
 # ---[ FXdiv library
-ADD_LIBRARY(fxdiv INTERFACE)
-TARGET_INCLUDE_DIRECTORIES(fxdiv INTERFACE include)
-IF(FXDIV_USE_INLINE_ASSEMBLY)
-  TARGET_COMPILE_DEFINITIONS(fxdiv INTERFACE FXDIV_USE_INLINE_ASSEMBLY=1)
+IF(${CMAKE_VERSION} VERSION_LESS "3.0")
+  ADD_LIBRARY(fxdiv STATIC include/fxdiv.h)
+  SET_TARGET_PROPERTIES(fxdiv PROPERTIES LINKER_LANGUAGE C)
 ELSE()
+  ADD_LIBRARY(fxdiv INTERFACE)
+ENDIF()
+TARGET_INCLUDE_DIRECTORIES(fxdiv INTERFACE include)
+IF(NOT FXDIV_USE_INLINE_ASSEMBLY)
   TARGET_COMPILE_DEFINITIONS(fxdiv INTERFACE FXDIV_USE_INLINE_ASSEMBLY=0)
 ENDIF()
 
@@ -58,20 +66,14 @@
     SET(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
     ADD_SUBDIRECTORY(
       "${GOOGLETEST_SOURCE_DIR}"
-      "${CMAKE_BINARY_DIR}/googletest")
+      "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest")
   ENDIF()
 
   ADD_EXECUTABLE(multiply-high-test test/multiply-high.cc)
-  SET_TARGET_PROPERTIES(multiply-high-test PROPERTIES
-    CXX_STANDARD 11
-    CXX_EXTENSIONS YES)
   TARGET_LINK_LIBRARIES(multiply-high-test fxdiv gtest gtest_main)
   ADD_TEST(multiply-high multiply-high-test)
 
   ADD_EXECUTABLE(quotient-test test/quotient.cc)
-  SET_TARGET_PROPERTIES(quotient-test PROPERTIES
-    CXX_STANDARD 11
-    CXX_EXTENSIONS YES)
   TARGET_LINK_LIBRARIES(quotient-test fxdiv gtest gtest_main)
   ADD_TEST(quotient quotient-test)
 ENDIF()
@@ -82,36 +84,21 @@
     SET(BENCHMARK_ENABLE_TESTING OFF CACHE BOOL "" FORCE)
     ADD_SUBDIRECTORY(
       "${GOOGLEBENCHMARK_SOURCE_DIR}"
-      "${CMAKE_BINARY_DIR}/googlebenchmark")
+      "${CONFU_DEPENDENCIES_BINARY_DIR}/googlebenchmark")
   ENDIF()
 
   ADD_EXECUTABLE(init-bench bench/init.cc)
-  SET_TARGET_PROPERTIES(init-bench PROPERTIES
-    CXX_STANDARD 11
-    CXX_EXTENSIONS YES)
   TARGET_LINK_LIBRARIES(init-bench fxdiv benchmark)
 
   ADD_EXECUTABLE(multiply-bench bench/multiply.cc)
-  SET_TARGET_PROPERTIES(multiply-bench PROPERTIES
-    CXX_STANDARD 11
-    CXX_EXTENSIONS YES)
   TARGET_LINK_LIBRARIES(multiply-bench fxdiv benchmark)
 
   ADD_EXECUTABLE(divide-bench bench/divide.cc)
-  SET_TARGET_PROPERTIES(divide-bench PROPERTIES
-    CXX_STANDARD 11
-    CXX_EXTENSIONS YES)
   TARGET_LINK_LIBRARIES(divide-bench fxdiv benchmark)
 
   ADD_EXECUTABLE(quotient-bench bench/quotient.cc)
-  SET_TARGET_PROPERTIES(quotient-bench PROPERTIES
-    CXX_STANDARD 11
-    CXX_EXTENSIONS YES)
   TARGET_LINK_LIBRARIES(quotient-bench fxdiv benchmark)
 
   ADD_EXECUTABLE(round-down-bench bench/round-down.cc)
-  SET_TARGET_PROPERTIES(round-down-bench PROPERTIES
-    CXX_STANDARD 11
-    CXX_EXTENSIONS YES)
   TARGET_LINK_LIBRARIES(round-down-bench fxdiv benchmark)
 ENDIF()
diff --git a/METADATA b/METADATA
index 7e1712f..8360525 100644
--- a/METADATA
+++ b/METADATA
@@ -1,5 +1,13 @@
 name: "FXdiv"
-description: "Header-only library for division via fixed-point multiplication by inverse  On modern CPUs and GPUs integer division is several times slower than multiplication. FXdiv implements an algorithm to replace an integer division with a multiplication and two shifts. This algorithm improves performance when an application performs repeated divisions by the same divisor."
+description:
+    "Header-only library for division via fixed-point multiplication by inverse "
+    " "
+    "On modern CPUs and GPUs integer division is several times slower than "
+    "multiplication. FXdiv implements an algorithm to replace an integer "
+    "division with a multiplication and two shifts. This algorithm improves "
+    "performance when an application performs repeated divisions by the same "
+    "divisor."
+
 third_party {
   url {
     type: HOMEPAGE
@@ -9,11 +17,7 @@
     type: GIT
     value: "https://github.com/Maratyszcza/FXdiv"
   }
-  version: "63058eff77e11aa15bf531df5dd34395ec3017c8"
+  version: "fd804a929fc64be9e40ee58bb51ed9f9cac98244"
+  last_upgrade_date { year: 2020 month: 2 day: 3 }
   license_type: NOTICE
-  last_upgrade_date {
-    year: 2020
-    month: 12
-    day: 9
-  }
 }
diff --git a/NOTICE b/NOTICE
new file mode 120000
index 0000000..7a694c9
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1 @@
+LICENSE
\ No newline at end of file
diff --git a/README.md b/README.md
index b8ef0d3..2e9e231 100644
--- a/README.md
+++ b/README.md
@@ -40,31 +40,21 @@
 
 ## Status
 
-Currently working features:
+Project is in alpha stage. API is unstable. Currently working features:
 
 | Platform        | uint32_t | uint64_t | size_t   |
 | --------------- |:--------:|:--------:|:--------:|
 | x86-64 gcc      | Works    | Works    | Works    |
-| x86-64 clang    | Works    | Works    | Works    |
 | x86-64 MSVC     | Works    | Works    | Works    |
 | x86 gcc         | Works    | Works    | Works    |
-| x86 clang       | Works    | Works    | Works    |
 | x86 MSVC        | Works    | Works    | Works    |
 | ARMv7 gcc       | Works    | Works    | Works    |
-| ARMv7 clang     | Works    | Works    | Works    |
-| ARMv7 MSVC*     | Compiles | Compiles | Compiles |
-| ARM64 gcc       | Works    | Works    | Works    |
-| ARM64 clang     | Works    | Works    | Works    |
-| ARM64 MSVC*     | Compiles | Compiles | Compiles |
 | PPC64 gcc       | Works    | Works    | Works    |
-| WAsm clang      | Works    | Works    | Works    |
-| Asm.js clang    | Works    | Works    | Works    |
 | PNaCl clang     | Works    | Works    | Works    |
+| Asm.js clang    | Works    | Works    | Works    |
 | CUDA            | Untested | Untested | Untested |
 | OpenCL          | Untested | Untested | Untested |
 
-*ARMv7 and ARM64 builds with MSVC are presumed to work, but were only verified to compile successfully
-
 ## References
 
 - Granlund, Torbjörn, and Peter L. Montgomery. "Division by invariant integers using multiplication." In ACM SIGPLAN Notices, vol. 29, no. 6, pp. 61-72. ACM, 1994. Available: [gmplib.org/~tege/divcnst-pldi94.pdf](https://gmplib.org/~tege/divcnst-pldi94.pdf)
diff --git a/WORKSPACE b/WORKSPACE
deleted file mode 100644
index 4fbe23d..0000000
--- a/WORKSPACE
+++ /dev/null
@@ -1,30 +0,0 @@
-workspace(name = "FXdiv")
-
-load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
-
-# Bazel rule definitions
-http_archive(
-    name = "rules_cc",
-    strip_prefix = "rules_cc-master",
-    urls = ["https://github.com/bazelbuild/rules_cc/archive/master.zip"],
-)
-
-# Google Test framework, used by most unit-tests.
-http_archive(
-    name = "com_google_googletest",
-    strip_prefix = "googletest-master",
-    urls = ["https://github.com/google/googletest/archive/master.zip"],
-)
-
-# Google Benchmark library, used in micro-benchmarks.
-http_archive(
-    name = "com_google_benchmark",
-    strip_prefix = "benchmark-master",
-    urls = ["https://github.com/google/benchmark/archive/master.zip"],
-)
-
-# Android NDK location and version is auto-detected from $ANDROID_NDK_HOME environment variable
-android_ndk_repository(name = "androidndk")
-
-# Android SDK location and API is auto-detected from $ANDROID_HOME environment variable
-android_sdk_repository(name = "androidsdk")
diff --git a/cmake/DownloadGoogleBenchmark.cmake b/cmake/DownloadGoogleBenchmark.cmake
index d042e07..349e7cb 100644
--- a/cmake/DownloadGoogleBenchmark.cmake
+++ b/cmake/DownloadGoogleBenchmark.cmake
@@ -1,13 +1,13 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 3.5 FATAL_ERROR)
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8.2)
 
 PROJECT(googlebenchmark-download NONE)
 
 INCLUDE(ExternalProject)
 ExternalProject_Add(googlebenchmark
-	URL https://github.com/google/benchmark/archive/v1.5.0.zip
-	URL_HASH SHA256=2d22dd3758afee43842bb504af1a8385cccb3ee1f164824e4837c1c1b04d92a0
-	SOURCE_DIR "${CMAKE_BINARY_DIR}/googlebenchmark-source"
-	BINARY_DIR "${CMAKE_BINARY_DIR}/googlebenchmark"
+	URL https://github.com/google/benchmark/archive/v1.2.0.zip
+	URL_HASH SHA256=cc463b28cb3701a35c0855fbcefb75b29068443f1952b64dd5f4f669272e95ea
+	SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/googlebenchmark"
+	BINARY_DIR "${CONFU_DEPENDENCIES_BINARY_DIR}/googlebenchmark"
 	CONFIGURE_COMMAND ""
 	BUILD_COMMAND ""
 	INSTALL_COMMAND ""
diff --git a/cmake/DownloadGoogleTest.cmake b/cmake/DownloadGoogleTest.cmake
index 1a0c152..19f5eb1 100644
--- a/cmake/DownloadGoogleTest.cmake
+++ b/cmake/DownloadGoogleTest.cmake
@@ -1,13 +1,13 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 3.5 FATAL_ERROR)
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8.2)
 
 PROJECT(googletest-download NONE)
 
 INCLUDE(ExternalProject)
 ExternalProject_Add(googletest
-	URL https://github.com/google/googletest/archive/release-1.10.0.zip
-	URL_HASH SHA256=94c634d499558a76fa649edb13721dce6e98fb1e7018dfaeba3cd7a083945e91
-	SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-source"
-	BINARY_DIR "${CMAKE_BINARY_DIR}/googletest"
+	URL https://github.com/google/googletest/archive/release-1.8.0.zip
+	URL_HASH SHA256=f3ed3b58511efd272eb074a3a6d6fb79d7c2e6a0e374323d1e6bcbcc1ef141bf
+	SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/googletest"
+	BINARY_DIR "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest"
 	CONFIGURE_COMMAND ""
 	BUILD_COMMAND ""
 	INSTALL_COMMAND ""
diff --git a/include/fxdiv.h b/include/fxdiv.h
index 2c35038..21a3dc1 100644
--- a/include/fxdiv.h
+++ b/include/fxdiv.h
@@ -14,13 +14,10 @@
 
 #if defined(_MSC_VER)
 	#include <intrin.h>
-	#if defined(_M_IX86) || defined(_M_X64)
-		#include <immintrin.h>
-	#endif
 #endif
 
 #ifndef FXDIV_USE_INLINE_ASSEMBLY
-	#define FXDIV_USE_INLINE_ASSEMBLY 0
+	#define FXDIV_USE_INLINE_ASSEMBLY 1
 #endif
 
 static inline uint64_t fxdiv_mulext_uint32_t(uint32_t a, uint32_t b) {
@@ -124,15 +121,14 @@
 			const uint32_t l_minus_1 = 31 - clz(d - 1);
 		#elif defined(__CUDA_ARCH__)
 			const uint32_t l_minus_1 = 31 - __clz((int) (d - 1));
-		#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64) || defined(_M_ARM) || defined(_M_ARM64))
+		#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
 			unsigned long l_minus_1;
 			_BitScanReverse(&l_minus_1, (unsigned long) (d - 1));
 		#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) && FXDIV_USE_INLINE_ASSEMBLY
 			uint32_t l_minus_1;
 			__asm__("BSRL %[d_minus_1], %[l_minus_1]"
 				: [l_minus_1] "=r" (l_minus_1)
-				: [d_minus_1] "r" (d - 1)
-				: "cc");
+				: [d_minus_1] "r" (d - 1));
 		#elif defined(__GNUC__)
 			const uint32_t l_minus_1 = 31 - __builtin_clz(d - 1);
 		#else
@@ -171,11 +167,7 @@
 			uint32_t q;
 			__asm__("DIVL %[d]"
 				: "=a" (q), "+d" (u_hi)
-				: [d] "r" (d), "a" (0)
-				: "cc");
-		#elif (defined(_MSC_VER) && _MSC_VER >= 1920) && !defined(__clang__) && !defined(__INTEL_COMPILER) && (defined(_M_IX86) || defined(_M_X64))
-			unsigned int remainder;
-			const uint32_t q = (uint32_t) _udiv64((unsigned __int64) ((uint64_t) u_hi << 32), (unsigned int) d, &remainder);
+				: [d] "r" (d), "a" (0));
 		#else
 			const uint32_t q = ((uint64_t) u_hi << 32) / d;
 		#endif
@@ -200,13 +192,13 @@
 		#elif defined(__CUDA_ARCH__)
 			const uint32_t nlz_d = __clzll((long long) d);
 			const uint32_t l_minus_1 = 63 - __clzll((long long) (d - 1));
-		#elif defined(_MSC_VER) && (defined(_M_X64) || defined(_M_ARM64))
+		#elif defined(_MSC_VER) && defined(_M_X64)
 			unsigned long l_minus_1;
 			_BitScanReverse64(&l_minus_1, (unsigned __int64) (d - 1));
 			unsigned long bsr_d;
 			_BitScanReverse64(&bsr_d, (unsigned __int64) d);
 			const uint32_t nlz_d = bsr_d ^ 0x3F;
-		#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_ARM))
+		#elif defined(_MSC_VER) && defined(_M_IX86)
 			const uint64_t d_minus_1 = d - 1;
 			const uint8_t d_is_power_of_2 = (d & d_minus_1) == 0;
 			unsigned long l_minus_1;
@@ -221,8 +213,7 @@
 			uint64_t l_minus_1;
 			__asm__("BSRQ %[d_minus_1], %[l_minus_1]"
 				: [l_minus_1] "=r" (l_minus_1)
-				: [d_minus_1] "r" (d - 1)
-				: "cc");
+				: [d_minus_1] "r" (d - 1));
 		#elif defined(__GNUC__)
 			const uint32_t l_minus_1 = 63 - __builtin_clzll(d - 1);
 			const uint32_t nlz_d = __builtin_clzll(d);
@@ -230,8 +221,8 @@
 			/* Based on Algorithm 2 from Hacker's delight */
 			const uint64_t d_minus_1 = d - 1;
 			const uint32_t d_is_power_of_2 = (d & d_minus_1) == 0;
-			uint32_t l_minus_1 = 0;
-			uint32_t x = (uint32_t) d_minus_1;
+			uint64_t l_minus_1 = 0;
+			uint32_t x = d_minus_1;
 			uint32_t y = d_minus_1 >> 32;
 			if (y != 0) {
 				l_minus_1 += 32;
@@ -269,14 +260,7 @@
 			uint64_t q;
 			__asm__("DIVQ %[d]"
 				: "=a" (q), "+d" (u_hi)
-				: [d] "r" (d), "a" (UINT64_C(0))
-				: "cc");
-		#elif 0 && defined(__GNUC__) && defined(__SIZEOF_INT128__)
-			/* GCC, Clang, and Intel Compiler fail to inline optimized implementation and call into support library for 128-bit division */
-			const uint64_t q = (uint64_t) (((unsigned __int128) u_hi << 64) / ((unsigned __int128) d));
-		#elif (defined(_MSC_VER) && _MSC_VER >= 1920) && !defined(__clang__) && !defined(__INTEL_COMPILER) && defined(_M_X64)
-			unsigned __int64 remainder;
-			const uint64_t q = (uint64_t) _udiv128((unsigned __int64) u_hi, 0, (unsigned __int64) d, &remainder);
+				: [d] "r" (d), "a" (UINT64_C(0)));
 		#else
 			/* Implementation based on code from Hacker's delight */