]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Enable the use of intrinsic high-precision multiplies on Windows ARM.
authordrh <>
Fri, 27 Mar 2026 16:09:10 +0000 (16:09 +0000)
committerdrh <>
Fri, 27 Mar 2026 16:09:10 +0000 (16:09 +0000)
Make the SQLITE_DISABLE_INTRINSIC option effective on high-precision
multiple subroutines, for testing purposes.

FossilOrigin-Name: efb6212de4ca998546329b06b43122f0fffa3759e4615ca3357ef9fa13606d44

manifest
manifest.uuid
src/util.c

index 93363568afbedbb012830d936724a442f86532a7..d9bc5da0106d4037d241ff7deffdaa3c37f9cacd 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Change\sthe\sprint\sresolution\sthe\sfp-speed-1.c\stest\sto\s17\sdigits.
-D 2026-03-27T14:54:01.631
+C Enable\sthe\suse\sof\sintrinsic\shigh-precision\smultiplies\son\sWindows\sARM.\nMake\sthe\sSQLITE_DISABLE_INTRINSIC\soption\seffective\son\shigh-precision\nmultiple\ssubroutines,\sfor\stesting\spurposes.
+D 2026-03-27T16:09:10.848
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -798,7 +798,7 @@ F src/trigger.c 4bf3bfb3851d165e4404a9f9e69357345f3f7103378c07e07139fdd8aeb7bd20
 F src/update.c 3e5e7ff66fa19ebe4d1b113d480639a24cc1175adbefabbd1a948a07f28e37cf
 F src/upsert.c 215328c3f91623c520ec8672c44323553f12caeb4f01b1090ebdca99fdf7b4f1
 F src/utf.c 7267c3fb9e2467020507601af3354c2446c61f444387e094c779dccd5ca62165
-F src/util.c c24ed5647e81eea3abe3d9878b709425a3e843cbf4580ac442ed46b93824138c
+F src/util.c 3e6ae9bde9a108d92bbb9ce5c6139efef5a1d5949d79912b7aabf67bfa3000a5
 F src/vacuum.c d3d35d8ae893d419ade5fa196d761a83bddcbb62137a1a157ae751ef38b26e82
 F src/vdbe.c 6c57525d7db0232d52687d30da1093db0c152f14206c2ef1adf0c19a09d863e3
 F src/vdbe.h 70e862ac8a11b590f8c1eaac17a0078429d42bc4ea3f757a9af0f451dd966a71
@@ -2196,8 +2196,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
 F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
 F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P 9b083070de2d782fe1db62652af8f3cd48abe16b55b974f3927b738e3d914887
-R bc862639f71414fdaa2bc2f25b71c606
+P c687b32a956315ddf4336df42deb4037c37d51b536b8a24c5cef4c5a0bc4c79b
+R 217cc40eefb63df69bf27558fb090280
 U drh
-Z ef7f1d31ce60e52e9bbaf991b4bd1e93
+Z e23febd3b8e71bad9713a72ada23a3d4
 # Remove this line to create a well-formed Fossil manifest.
index a5277d0a32ba2b215f68d19f388ed7641347c0d0..d66bd101bcff6300b06f6612739feefa6481f059 100644 (file)
@@ -1 +1 @@
-c687b32a956315ddf4336df42deb4037c37d51b536b8a24c5cef4c5a0bc4c79b
+efb6212de4ca998546329b06b43122f0fffa3759e4615ca3357ef9fa13606d44
index 18c2e127b38f947a9e0d65a852a7918d27f2bc92..82b5b7c3d9c495a40efef6d7c3dcb6ed2424fb58 100644 (file)
@@ -465,11 +465,12 @@ u8 sqlite3StrIHash(const char *z){
 */
 static u64 sqlite3Multiply128(u64 a, u64 b, u64 *pLo){
 #if (defined(__GNUC__) || defined(__clang__)) \
-        && (defined(__x86_64__) || defined(__aarch64__) || defined(__riscv))
+        && (defined(__x86_64__) || defined(__aarch64__) || defined(__riscv)) \
+        && !defined(SQLITE_DISABLE_INTRINSIC)
   __uint128_t r = (__uint128_t)a * b;
   *pLo = (u64)r;
   return (u64)(r>>64);
-#elif defined(_MSC_VER) && defined(_M_X64)
+#elif defined(_MSC_VER) && !defined(SQLITE_DISABLE_INTRINSIC)
   *pLo = a*b;
   return __umulh(a, b);
 #else
@@ -500,17 +501,19 @@ static u64 sqlite3Multiply128(u64 a, u64 b, u64 *pLo){
 */
 static u64 sqlite3Multiply160(u64 a, u32 aLo, u64 b, u32 *pLo){
 #if (defined(__GNUC__) || defined(__clang__)) \
-        && (defined(__x86_64__) || defined(__aarch64__) || defined(__riscv))
+        && (defined(__x86_64__) || defined(__aarch64__) || defined(__riscv)) \
+        && !defined(SQLITE_DISABLE_INTRINSIC)
   __uint128_t r = (__uint128_t)a * b;
   r += ((__uint128_t)aLo * b) >> 32;
   *pLo = (r>>32)&0xffffffff;
   return r>>64;
-#elif defined(_MSC_VER) && defined(_M_X64)
+#elif defined(_MSC_VER) && !defined(SQLITE_DISABLE_INTRINSIC)
   u64 r1_hi = __umulh(a,b);
   u64 r1_lo = a*b;
   u64 r2 = (__umulh((u64)aLo,b)<<32) + ((aLo*b)>>32);
-  r1_hi += _addcarry_u64(0, r1_lo, r2, &r1_lo);
-  *pLo = r1_lo>>32;
+  u64 t = r1_lo + r2;
+  if( t<r1_lo ) r1_hi++;
+  *pLo = t>>32;
   return r1_hi;
 #else
   u64 x2 = a>>32;
@@ -722,7 +725,8 @@ static int pwr2to10(int p){ return (p*78913) >> 18; }
 ** Count leading zeros for a 64-bit unsigned integer.
 */
 static int countLeadingZeros(u64 m){
-#if defined(__GNUC__) || defined(__clang__)
+#if (defined(__GNUC__) || defined(__clang__)) \
+    && !defined(SQLITE_DISABLE_INTRINSIC)
   return __builtin_clzll(m);
 #else
   int n = 0;