]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Faster implementation for sqlite3MulInt64().
authordrh <drh@noemail.net>
Mon, 10 Feb 2014 12:59:15 +0000 (12:59 +0000)
committerdrh <drh@noemail.net>
Mon, 10 Feb 2014 12:59:15 +0000 (12:59 +0000)
FossilOrigin-Name: 010c48f671e909cb406f3716102a0032bc72a592

manifest
manifest.uuid
src/util.c

index 5af97eeec4da55e4b4a9cfa6fb1cb8ade89d5ea1..f2bf30fbc726c07b5e8b4a6655d375210a214302 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Faster\sand\ssmaller\simplementation\sof\ssqlite3_value_type().
-D 2014-02-10T03:21:57.367
+C Faster\simplementation\sfor\ssqlite3MulInt64().
+D 2014-02-10T12:59:15.771
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -278,7 +278,7 @@ F src/tokenize.c 6da2de6e12218ccb0aea5184b56727d011f4bee7
 F src/trigger.c a417d386e214f0abd2e0f756b834b4d9f4d3368a
 F src/update.c a7df6fffce6bfedc578fda6136dd33e34a63f8ee
 F src/utf.c 6fc6c88d50448c469c5c196acf21617a24f90269
-F src/util.c 15ac2627f548f5481d0d7e6c4eb67be673027695
+F src/util.c c46c90459ef9bdc0c6c73803cf4c55425b4771cf
 F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179
 F src/vdbe.c 66c3e5c49ff61aaa3e3182fb9962ceddb847b05f
 F src/vdbe.h e6c4c610fcabad4fa80ebb1efc6822a9367e2b26
@@ -1152,7 +1152,7 @@ F tool/vdbe-compress.tcl 0cf56e9263a152b84da86e75a5c0cdcdb7a47891
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
-P 532995759114ab7a7cba18cc9d8820d78eb1a96e
-R 1d6572df35f58f7e82be516ccbec8b1d
+P 5708bc24b8cab623b833121183042b43e5a7021b
+R 96b6443498b3eb7df60c900f013f8cef
 U drh
-Z d879d19c9c74c4f3aa3952d43b5ccba0
+Z d856cf5d0cd482b54ac364a01a0fe1f8
index da59cef8ead045d08aebf1d11c1fecef0b24b35c..f2a051d0be87df3e7e344a283aaaf6144ccc379f 100644 (file)
@@ -1 +1 @@
-5708bc24b8cab623b833121183042b43e5a7021b
\ No newline at end of file
+010c48f671e909cb406f3716102a0032bc72a592
\ No newline at end of file
index 3f3a9649e026a0ecd517ab03a4cfd1bab88b9ee7..d88c17b759176794d6983c945d8c7d13629d23d3 100644 (file)
@@ -1123,13 +1123,12 @@ int sqlite3AddInt64(i64 *pA, i64 iB){
     testcase( iA>0 && LARGEST_INT64 - iA == iB );
     testcase( iA>0 && LARGEST_INT64 - iA == iB - 1 );
     if( iA>0 && LARGEST_INT64 - iA < iB ) return 1;
-    *pA += iB;
   }else{
     testcase( iA<0 && -(iA + LARGEST_INT64) == iB + 1 );
     testcase( iA<0 && -(iA + LARGEST_INT64) == iB + 2 );
     if( iA<0 && -(iA + LARGEST_INT64) > iB + 1 ) return 1;
-    *pA += iB;
   }
+  *pA += iB;
   return 0; 
 }
 int sqlite3SubInt64(i64 *pA, i64 iB){
@@ -1153,9 +1152,18 @@ int sqlite3MulInt64(i64 *pA, i64 iB){
   iA0 = iA % TWOPOWER32;
   iB1 = iB/TWOPOWER32;
   iB0 = iB % TWOPOWER32;
-  if( iA1*iB1 != 0 ) return 1;
-  assert( iA1*iB0==0 || iA0*iB1==0 );
-  r = iA1*iB0 + iA0*iB1;
+  if( iA1==0 ){
+    if( iB1==0 ){
+      *pA *= iB;
+      return 0;
+    }
+    r = iA0*iB1;
+  }else if( iB1==0 ){
+    r = iA1*iB0;
+  }else{
+    /* If both iA1 and iB1 are non-zero, overflow will result */
+    return 1;
+  }
   testcase( r==(-TWOPOWER31)-1 );
   testcase( r==(-TWOPOWER31) );
   testcase( r==TWOPOWER31 );