mirror of
https://github.com/0x5eal/rbxts-pako.git
synced 2025-04-10 22:00:58 +01:00
Simplified Adler32() until deopt traces investigated - now fast enougth
This commit is contained in:
parent
c19d9ce8aa
commit
aa4ddcac50
1 changed files with 19 additions and 46 deletions
|
@ -1,55 +1,28 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
function adler32(adler, buf, len, start)
|
// TODO: investigate why --trace_deopt shows something
|
||||||
{
|
// (though speed doesn't seems to reduce)
|
||||||
var BASE = 65521; /* largest prime smaller than 65536 */
|
//
|
||||||
var NMAX = 5552;
|
function adler32(adler, buf, len, pos) {
|
||||||
|
var s1 = adler & 0xffff
|
||||||
|
, s2 = (adler >>> 16) & 0xffff
|
||||||
|
, n = 0;
|
||||||
|
|
||||||
var i = start;
|
while (len !== 0) {
|
||||||
/* split Adler-32 into component sums */
|
n = len > 5552 ? 5552 : len;
|
||||||
var sum2 = (adler >> 16) & 0xffff;
|
len -= n;
|
||||||
adler &= 0xffff;
|
|
||||||
|
|
||||||
/* in case user likes doing a byte at a time, keep it fast */
|
do {
|
||||||
if (len === 1) {
|
s1 += buf[pos++];
|
||||||
adler += buf[0];
|
s2 += s1;
|
||||||
if (adler >= BASE) {
|
} while (--n);
|
||||||
adler -= BASE;
|
|
||||||
}
|
s1 %= 65521;
|
||||||
sum2 += adler;
|
s2 %= 65521;
|
||||||
if (sum2 >= BASE) {
|
|
||||||
sum2 -= BASE;
|
|
||||||
}
|
|
||||||
return (adler | (sum2 << 16)) >>> 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* in case short lengths are provided, keep it somewhat fast */
|
return (s1 | (s2 << 16));
|
||||||
if (len < 16) {
|
|
||||||
for(i=0;i<len;i++) {
|
|
||||||
adler += buf[i];
|
|
||||||
sum2 += adler;
|
|
||||||
}
|
|
||||||
if (adler >= BASE) {
|
|
||||||
adler -= BASE;
|
|
||||||
}
|
|
||||||
sum2 %= BASE; /* only added so many BASE's */
|
|
||||||
return (adler | (sum2 << 16)) >>> 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (len>0) {
|
|
||||||
var cursor = len > NMAX ? NMAX : len;
|
|
||||||
len -= cursor;
|
|
||||||
for(var j=0;j<cursor;j++) {
|
|
||||||
adler += buf[i++];
|
|
||||||
sum2 += adler;
|
|
||||||
}
|
|
||||||
|
|
||||||
adler %= BASE;
|
|
||||||
sum2 %= BASE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* return recombined sums */
|
|
||||||
return (adler | (sum2 << 16)) >>> 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
module.exports = adler32;
|
module.exports = adler32;
|
Loading…
Add table
Reference in a new issue