From: drh Date: Thu, 21 Nov 2013 04:18:31 +0000 (+0000) Subject: Another improvement to OP_Function and an improvement to OP_Move. X-Git-Tag: version-3.8.2~66 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e09f43f8b78369852773661c52df015b21ef3932;p=thirdparty%2Fsqlite.git Another improvement to OP_Function and an improvement to OP_Move. FossilOrigin-Name: 70b056fb6f60cdfbe24e4b77a1770eef064a73c6 --- diff --git a/manifest b/manifest index ecd4861c86..6c4d9ef46a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C A\ssimple\schange\sto\sthe\sOP_Function\sopcode\simproves\soverall\sperformance\sby\nabout\s0.5%. -D 2013-11-21T03:43:12.554 +C Another\simprovement\sto\sOP_Function\sand\san\simprovement\sto\sOP_Move. +D 2013-11-21T04:18:31.892 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 8a07bebafbfda0eb67728f4bd15a36201662d1a1 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -280,7 +280,7 @@ F src/update.c c05a0ee658f1a149e0960dfd110f3b8bd846bcb0 F src/utf.c 6fc6c88d50448c469c5c196acf21617a24f90269 F src/util.c 2fa6c821d28bbdbeec1b2a7b091a281c9ef8f918 F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179 -F src/vdbe.c 9d8490d65b06d2e21dd0f0e6286c07e7f3095a48 +F src/vdbe.c bfbbaf9daddfd0228747e4e47677bd34dc306388 F src/vdbe.h c06f0813f853566457ce9cfb1a4a4bc39a5da644 F src/vdbeInt.h 0ac03c790b8ea4568b747550ba9bbf92a8e8feb2 F src/vdbeapi.c 93a22a9ba2abe292d5c2cf304d7eb2e894dde0ed @@ -1140,7 +1140,7 @@ F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff -P ecaac28a2e78aca148fc614fe54bf2706aed8be2 -R 33f1c98c35afb745f70ac2d0738f01fc +P b890eefd57fbd189f7df611e82eb1fb4b197e1c3 +R f453cb4528248c0309ea050c9ba4ca77 U drh -Z a8c7ba243cd2d2fb4fb7b6cf27c27770 +Z 2b2e2a3a32727285c9b4dfbebd948b02 diff --git a/manifest.uuid b/manifest.uuid index c568fbf63a..4fff4fd7d3 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -b890eefd57fbd189f7df611e82eb1fb4b197e1c3 \ No newline at end of file +70b056fb6f60cdfbe24e4b77a1770eef064a73c6 \ No newline at end of file diff --git a/src/vdbe.c b/src/vdbe.c index e94c885045..f30810dd8a 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -1081,15 +1081,15 @@ case OP_Move: { int p1; /* Register to copy from */ int p2; /* Register to copy to */ - n = pOp->p3 + 1; + n = pOp->p3; p1 = pOp->p1; p2 = pOp->p2; - assert( n>0 && p1>0 && p2>0 ); + assert( n>=0 && p1>0 && p2>0 ); assert( p1+n<=p2 || p2+n<=p1 ); pIn1 = &aMem[p1]; pOut = &aMem[p2]; - while( n-- ){ + do{ assert( pOut<=&aMem[(p->nMem-p->nCursor)] ); assert( pIn1<=&aMem[(p->nMem-p->nCursor)] ); assert( memIsValid(pIn1) ); @@ -1106,7 +1106,7 @@ case OP_Move: { REGISTER_TRACE(p2++, pOut); pIn1++; pOut++; - } + }while( n-- ); break; } @@ -1532,7 +1532,8 @@ case OP_Function: { /* Copy the result of the function into register P3 */ sqlite3VdbeChangeEncoding(&ctx.s, encoding); - sqlite3VdbeMemMove(pOut, &ctx.s); + assert( pOut->flags==MEM_Null ); + memcpy(pOut, &ctx.s, sizeof(Mem)); if( sqlite3VdbeMemTooBig(pOut) ){ goto too_big; }