mirror of
https://github.com/tornadocash/snarkjs.git
synced 2024-06-28 16:57:46 +02:00
35 lines
888 B
JavaScript
35 lines
888 B
JavaScript
|
|
||
|
const _revTable = [];
|
||
|
for (let i=0; i<256; i++) {
|
||
|
_revTable[i] = _revSlow(i, 8);
|
||
|
}
|
||
|
|
||
|
function _revSlow(idx, bits) {
|
||
|
let res =0;
|
||
|
let a = idx;
|
||
|
for (let i=0; i<bits; i++) {
|
||
|
res <<= 1;
|
||
|
res = res | (a &1);
|
||
|
a >>=1;
|
||
|
}
|
||
|
return res;
|
||
|
}
|
||
|
|
||
|
function bitReverse(idx, bits) {
|
||
|
return (
|
||
|
_revTable[idx >>> 24] |
|
||
|
(_revTable[(idx >>> 16) & 0xFF] << 8) |
|
||
|
(_revTable[(idx >>> 8) & 0xFF] << 16) |
|
||
|
(_revTable[idx & 0xFF] << 24)
|
||
|
) >>> (32-bits);
|
||
|
}
|
||
|
|
||
|
|
||
|
function log2( V )
|
||
|
{
|
||
|
return( ( ( V & 0xFFFF0000 ) !== 0 ? ( V &= 0xFFFF0000, 16 ) : 0 ) | ( ( V & 0xFF00FF00 ) !== 0 ? ( V &= 0xFF00FF00, 8 ) : 0 ) | ( ( V & 0xF0F0F0F0 ) !== 0 ? ( V &= 0xF0F0F0F0, 4 ) : 0 ) | ( ( V & 0xCCCCCCCC ) !== 0 ? ( V &= 0xCCCCCCCC, 2 ) : 0 ) | ( ( V & 0xAAAAAAAA ) !== 0 ) );
|
||
|
}
|
||
|
|
||
|
module.exports.bitReverse = bitReverse;
|
||
|
module.exports.log2 = log2;
|