Skip to content

Commit

Permalink
use local variables to access blockWords in compress
Browse files Browse the repository at this point in the history
  • Loading branch information
qti3e committed Apr 16, 2024
1 parent a65f32d commit 7a0d2d0
Show file tree
Hide file tree
Showing 3 changed files with 464 additions and 32 deletions.
4 changes: 3 additions & 1 deletion bench.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { hash as jsHashV2 } from "./js/v2.ts";
import { hash as jsHashV3 } from "./js/v3.ts";
import { hash as jsHashV4 } from "./js/v4.ts";
import { hash as jsHashV5 } from "./js/v5.ts";
import { hash as jsHashV6 } from "./js/v6.ts";
import { hash as latestHash } from "./js/latest.ts";

// Share the same input buffer across benchmars.
Expand Down Expand Up @@ -53,4 +54,5 @@ bench("Js#03", jsHashV2);
bench("Js#04", jsHashV3);
bench("Js#05", jsHashV4);
bench("Js#06", jsHashV5);
bench("Js#07", latestHash);
bench("Js#07", jsHashV6);
bench("Js#08", latestHash);
85 changes: 54 additions & 31 deletions js/latest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,21 +33,6 @@ function compress(
blockLen: Word,
flags: Word,
) {
const PERMUTATIONS = [
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2, 6, 3, 10, 7, 0, 4,
13, 1, 11, 12, 5, 9, 14, 15, 8, 3, 4, 10, 12, 13, 2, 7, 14, 6, 5, 9, 0, 11,
15, 8, 1, 10, 7, 12, 9, 14, 3, 13, 15, 4, 0, 11, 2, 5, 8, 1, 6, 12, 13, 9,
11, 15, 10, 14, 8, 7, 2, 5, 3, 0, 1, 6, 4, 9, 14, 11, 5, 8, 12, 15, 1, 13,
3, 0, 10, 2, 6, 4, 7, 11, 15, 5, 0, 1, 9, 8, 6, 14, 10, 2, 12, 3, 4, 7, 13,
];

const m = new Uint32Array(
blockWords.buffer,
blockWords.byteOffset + (blockWordsOffset << 2),
);

let p = 0;

let s_0 = cv[cvOffset + 0] | 0;
let s_1 = cv[cvOffset + 1] | 0;
let s_2 = cv[cvOffset + 2] | 0;
Expand All @@ -65,103 +50,141 @@ function compress(
let s_14 = blockLen | 0;
let s_15 = flags | 0;

let m_0 = blockWords[blockWordsOffset + 0] | 0;
let m_1 = blockWords[blockWordsOffset + 1] | 0;
let m_2 = blockWords[blockWordsOffset + 2] | 0;
let m_3 = blockWords[blockWordsOffset + 3] | 0;
let m_4 = blockWords[blockWordsOffset + 4] | 0;
let m_5 = blockWords[blockWordsOffset + 5] | 0;
let m_6 = blockWords[blockWordsOffset + 6] | 0;
let m_7 = blockWords[blockWordsOffset + 7] | 0;
let m_8 = blockWords[blockWordsOffset + 8] | 0;
let m_9 = blockWords[blockWordsOffset + 9] | 0;
let m_10 = blockWords[blockWordsOffset + 10] | 0;
let m_11 = blockWords[blockWordsOffset + 11] | 0;
let m_12 = blockWords[blockWordsOffset + 12] | 0;
let m_13 = blockWords[blockWordsOffset + 13] | 0;
let m_14 = blockWords[blockWordsOffset + 14] | 0;
let m_15 = blockWords[blockWordsOffset + 15] | 0;

for (let i = 0; i < 7; ++i) {
s_0 = (((s_0 + s_4) | 0) + m[PERMUTATIONS[p++]]) | 0;
s_0 = (((s_0 + s_4) | 0) + m_0) | 0;
s_12 ^= s_0;
s_12 = (s_12 >>> 16) | (s_12 << 16);
s_8 = (s_8 + s_12) | 0;
s_4 ^= s_8;
s_4 = (s_4 >>> 12) | (s_4 << 20);
s_0 = (((s_0 + s_4) | 0) + m[PERMUTATIONS[p++]]) | 0;
s_0 = (((s_0 + s_4) | 0) + m_1) | 0;
s_12 ^= s_0;
s_12 = (s_12 >>> 8) | (s_12 << 24);
s_8 = (s_8 + s_12) | 0;
s_4 ^= s_8;
s_4 = (s_4 >>> 7) | (s_4 << 25);
s_1 = (((s_1 + s_5) | 0) + m[PERMUTATIONS[p++]]) | 0;
s_1 = (((s_1 + s_5) | 0) + m_2) | 0;
s_13 ^= s_1;
s_13 = (s_13 >>> 16) | (s_13 << 16);
s_9 = (s_9 + s_13) | 0;
s_5 ^= s_9;
s_5 = (s_5 >>> 12) | (s_5 << 20);
s_1 = (((s_1 + s_5) | 0) + m[PERMUTATIONS[p++]]) | 0;
s_1 = (((s_1 + s_5) | 0) + m_3) | 0;
s_13 ^= s_1;
s_13 = (s_13 >>> 8) | (s_13 << 24);
s_9 = (s_9 + s_13) | 0;
s_5 ^= s_9;
s_5 = (s_5 >>> 7) | (s_5 << 25);
s_2 = (((s_2 + s_6) | 0) + m[PERMUTATIONS[p++]]) | 0;
s_2 = (((s_2 + s_6) | 0) + m_4) | 0;
s_14 ^= s_2;
s_14 = (s_14 >>> 16) | (s_14 << 16);
s_10 = (s_10 + s_14) | 0;
s_6 ^= s_10;
s_6 = (s_6 >>> 12) | (s_6 << 20);
s_2 = (((s_2 + s_6) | 0) + m[PERMUTATIONS[p++]]) | 0;
s_2 = (((s_2 + s_6) | 0) + m_5) | 0;
s_14 ^= s_2;
s_14 = (s_14 >>> 8) | (s_14 << 24);
s_10 = (s_10 + s_14) | 0;
s_6 ^= s_10;
s_6 = (s_6 >>> 7) | (s_6 << 25);
s_3 = (((s_3 + s_7) | 0) + m[PERMUTATIONS[p++]]) | 0;
s_3 = (((s_3 + s_7) | 0) + m_6) | 0;
s_15 ^= s_3;
s_15 = (s_15 >>> 16) | (s_15 << 16);
s_11 = (s_11 + s_15) | 0;
s_7 ^= s_11;
s_7 = (s_7 >>> 12) | (s_7 << 20);
s_3 = (((s_3 + s_7) | 0) + m[PERMUTATIONS[p++]]) | 0;
s_3 = (((s_3 + s_7) | 0) + m_7) | 0;
s_15 ^= s_3;
s_15 = (s_15 >>> 8) | (s_15 << 24);
s_11 = (s_11 + s_15) | 0;
s_7 ^= s_11;
s_7 = (s_7 >>> 7) | (s_7 << 25);
s_0 = (((s_0 + s_5) | 0) + m[PERMUTATIONS[p++]]) | 0;
s_0 = (((s_0 + s_5) | 0) + m_8) | 0;
s_15 ^= s_0;
s_15 = (s_15 >>> 16) | (s_15 << 16);
s_10 = (s_10 + s_15) | 0;
s_5 ^= s_10;
s_5 = (s_5 >>> 12) | (s_5 << 20);
s_0 = (((s_0 + s_5) | 0) + m[PERMUTATIONS[p++]]) | 0;
s_0 = (((s_0 + s_5) | 0) + m_9) | 0;
s_15 ^= s_0;
s_15 = (s_15 >>> 8) | (s_15 << 24);
s_10 = (s_10 + s_15) | 0;
s_5 ^= s_10;
s_5 = (s_5 >>> 7) | (s_5 << 25);
s_1 = (((s_1 + s_6) | 0) + m[PERMUTATIONS[p++]]) | 0;
s_1 = (((s_1 + s_6) | 0) + m_10) | 0;
s_12 ^= s_1;
s_12 = (s_12 >>> 16) | (s_12 << 16);
s_11 = (s_11 + s_12) | 0;
s_6 ^= s_11;
s_6 = (s_6 >>> 12) | (s_6 << 20);
s_1 = (((s_1 + s_6) | 0) + m[PERMUTATIONS[p++]]) | 0;
s_1 = (((s_1 + s_6) | 0) + m_11) | 0;
s_12 ^= s_1;
s_12 = (s_12 >>> 8) | (s_12 << 24);
s_11 = (s_11 + s_12) | 0;
s_6 ^= s_11;
s_6 = (s_6 >>> 7) | (s_6 << 25);
s_2 = (((s_2 + s_7) | 0) + m[PERMUTATIONS[p++]]) | 0;
s_2 = (((s_2 + s_7) | 0) + m_12) | 0;
s_13 ^= s_2;
s_13 = (s_13 >>> 16) | (s_13 << 16);
s_8 = (s_8 + s_13) | 0;
s_7 ^= s_8;
s_7 = (s_7 >>> 12) | (s_7 << 20);
s_2 = (((s_2 + s_7) | 0) + m[PERMUTATIONS[p++]]) | 0;
s_2 = (((s_2 + s_7) | 0) + m_13) | 0;
s_13 ^= s_2;
s_13 = (s_13 >>> 8) | (s_13 << 24);
s_8 = (s_8 + s_13) | 0;
s_7 ^= s_8;
s_7 = (s_7 >>> 7) | (s_7 << 25);
s_3 = (((s_3 + s_4) | 0) + m[PERMUTATIONS[p++]]) | 0;
s_3 = (((s_3 + s_4) | 0) + m_14) | 0;
s_14 ^= s_3;
s_14 = (s_14 >>> 16) | (s_14 << 16);
s_9 = (s_9 + s_14) | 0;
s_4 ^= s_9;
s_4 = (s_4 >>> 12) | (s_4 << 20);
s_3 = (((s_3 + s_4) | 0) + m[PERMUTATIONS[p++]]) | 0;
s_3 = (((s_3 + s_4) | 0) + m_15) | 0;
s_14 ^= s_3;
s_14 = (s_14 >>> 8) | (s_14 << 24);
s_9 = (s_9 + s_14) | 0;
s_4 ^= s_9;
s_4 = (s_4 >>> 7) | (s_4 << 25);

if (i != 6) {
const t0 = m_0;
const t1 = m_1;
m_0 = m_2;
m_2 = m_3;
m_3 = m_10;
m_10 = m_12;
m_12 = m_9;
m_9 = m_11;
m_11 = m_5;
m_5 = t0;
m_1 = m_6;
m_6 = m_4;
m_4 = m_7;
m_7 = m_13;
m_13 = m_14;
m_14 = m_15;
m_15 = m_8;
m_8 = t1;
}
}

if (!truncateOutput) {
Expand Down

0 comments on commit 7a0d2d0

Please sign in to comment.