farmhashjs 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,12 @@
1
1
  # farmhashjs
2
2
 
3
- Pure JavaScript implementation of Google's [FarmHash](https://github.com/google/farmhash) algorithm. No native dependencies, works in Node.js and browsers.
3
+ [![Test and Build](https://github.com/crisp-oss/farmhash-js/actions/workflows/test.yml/badge.svg)](https://github.com/crisp-oss/farmhash-js/actions/workflows/test.yml)
4
+ [![NPM](https://img.shields.io/npm/v/farmhashjs.svg)](https://www.npmjs.com/package/farmhashjs)
5
+ [![Downloads](https://img.shields.io/npm/dm/farmhashjs.svg)](https://www.npmjs.com/package/farmhashjs)
6
+
7
+ **Pure JavaScript implementation of Google's [FarmHash](https://github.com/google/farmhash) algorithm. No native dependencies, works in Node.js and browsers.**
8
+
9
+ **😘 Maintainer**: [@baptistejamin](https://github.com/baptistejamin)
4
10
 
5
11
  ## Why?
6
12
 
@@ -20,15 +26,23 @@ npm install farmhashjs
20
26
  ## Usage
21
27
 
22
28
  ```javascript
23
- import { fingerprint64, fingerprint32, legacyHash64, legacyHash32 } from 'farmhashjs';
29
+ import {
30
+ fingerprint64, fingerprint32,
31
+ legacyHash64_arm, legacyHash64_x86,
32
+ legacyHash32_arm, legacyHash32_x86
33
+ } from 'farmhashjs';
24
34
 
25
- // Modern stable fingerprints (recommended)
35
+ // Modern stable fingerprints (recommended - same on all platforms)
26
36
  fingerprint64('hello world'); // "6381520714923946011"
27
37
  fingerprint32('hello world'); // 430397466
28
38
 
29
39
  // Legacy hashes (compatible with farmhash@3.3.1)
30
- legacyHash64('hello world'); // "16022978042064026561"
31
- legacyHash32('hello world'); // 3602808830
40
+ // Use _arm or _x86 suffix based on your target platform
41
+ legacyHash64_arm('hello world'); // "16022978042064026561"
42
+ legacyHash64_x86('hello world'); // "16022978042064026561" (same for <512 bytes)
43
+
44
+ legacyHash32_arm('hello world'); // 3314386015
45
+ legacyHash32_x86('hello world'); // 1955099599
32
46
  ```
33
47
 
34
48
  ## API
@@ -47,11 +61,21 @@ These produce stable hashes guaranteed to be consistent across all platforms and
47
61
 
48
62
  These are compatible with `farmhash@3.3.1` which was compiled with `FARMHASH_DEBUG=1`.
49
63
 
64
+ **Important:** The native `farmhash@3.3.1` produces different outputs on ARM64 vs x86_64 architectures. Choose the `_arm` or `_x86` variant based on your target platform.
65
+
50
66
  | Function | Returns | Description |
51
67
  |----------|---------|-------------|
52
- | `legacyHash64(input)` | `string` | 64-bit hash as decimal string |
53
- | `legacyHash64BigInt(input)` | `bigint` | 64-bit hash as BigInt |
54
- | `legacyHash32(input)` | `number` | 32-bit hash as number |
68
+ | `legacyHash64_arm(input)` | `string` | 64-bit hash (ARM64) |
69
+ | `legacyHash64_x86(input)` | `string` | 64-bit hash (x86_64, <512 bytes) |
70
+ | `legacyHash64BigInt_arm(input)` | `bigint` | 64-bit hash as BigInt (ARM64) |
71
+ | `legacyHash64BigInt_x86(input)` | `bigint` | 64-bit hash as BigInt (x86_64, <512 bytes) |
72
+ | `legacyHash32_arm(input)` | `number` | 32-bit hash (ARM64) |
73
+ | `legacyHash32_x86(input)` | `number` | 32-bit hash (x86_64, <512 bytes) |
74
+
75
+ **Notes:**
76
+ - For `hash64`: ARM64 and x86_64 produce the same output for strings <512 bytes. For ≥512 bytes, different algorithms are used.
77
+ - For `hash32`: ARM64 and x86_64 produce different outputs for ALL strings (different algorithms).
78
+ - The x86_64 SIMD algorithm (farmhashte) is fully implemented in pure JavaScript.
55
79
 
56
80
  ### Aliases
57
81
 
@@ -70,8 +94,10 @@ Tested against native implementations:
70
94
  |----------|------------------|
71
95
  | `fingerprint64` | `farmhash@5.0.0` fingerprint64 |
72
96
  | `fingerprint32` | `farmhash@5.0.0` fingerprint32 |
73
- | `legacyHash64` | `farmhash@3.3.1` hash64 |
74
- | `legacyHash32` | `farmhash@3.3.1` hash32 |
97
+ | `legacyHash64_arm` | `farmhash@3.3.1` hash64 on ARM64 |
98
+ | `legacyHash64_x86` | `farmhash@3.3.1` hash64 on x86_64 (<512 bytes) |
99
+ | `legacyHash32_arm` | `farmhash@3.3.1` hash32 on ARM64 |
100
+ | `legacyHash32_x86` | `farmhash@3.3.1` hash32 on x86_64 (<512 bytes) |
75
101
 
76
102
  ## Performance
77
103
 
@@ -81,8 +107,8 @@ Benchmarked on Apple M1:
81
107
  |----------|----------|-----------|------|
82
108
  | `fingerprint32` | 251 ns/op | 903 ns/op | 9 µs/op |
83
109
  | `fingerprint64` | 843 ns/op | 7 µs/op | 65 µs/op |
84
- | `legacyHash32` | 302 ns/op | 974 ns/op | 9 µs/op |
85
- | `legacyHash64` | 1.1 µs/op | 6.8 µs/op | 58 µs/op |
110
+ | `legacyHash32_arm` | 302 ns/op | 974 ns/op | 9 µs/op |
111
+ | `legacyHash64_arm` | 1.1 µs/op | 6.8 µs/op | 58 µs/op |
86
112
 
87
113
  32-bit functions are faster because they use native `number` operations. 64-bit functions use `BigInt` which has more overhead.
88
114
 
package/dist/index.d.ts CHANGED
@@ -20,25 +20,53 @@
20
20
  */
21
21
  /**************************************************************************
22
22
  * PUBLIC API - LEGACY (with DebugTweak, compatible with farmhash v3.3.1)
23
+ *
24
+ * Note: farmhash v3.3.1 produces different results on ARM64 vs x86_64 for:
25
+ * - hash64: Different for strings ≥512 bytes
26
+ * - hash32: Different for ALL strings (different algorithms)
23
27
  ***************************************************************************/
24
28
  /**
25
- * Compute a 64-bit hash compatible with farmhash v3.3.1 hash64()
29
+ * Compute a 64-bit hash compatible with farmhash v3.3.1 hash64() on ARM64
30
+ * Also matches x86_64 for strings <512 bytes
26
31
  * @param input - The string to hash
27
32
  * @returns The hash as a decimal string
28
33
  */
29
- export declare function legacyHash64(input: string): string;
34
+ export declare function legacyHash64_arm(input: string): string;
30
35
  /**
31
- * Compute a 64-bit hash compatible with farmhash v3.3.1 hash64()
36
+ * Compute a 64-bit hash compatible with farmhash v3.3.1 hash64() on x86_64
37
+ * Uses farmhashte algorithm (SIMD simulation for ≥512 bytes)
38
+ * @param input - The string to hash
39
+ * @returns The hash as a decimal string
40
+ */
41
+ export declare function legacyHash64_x86(input: string): string;
42
+ /**
43
+ * Compute a 64-bit hash compatible with farmhash v3.3.1 hash64() on ARM64
44
+ * Also matches x86_64 for strings <512 bytes
32
45
  * @param input - The string to hash
33
46
  * @returns The hash as a BigInt
34
47
  */
35
- export declare function legacyHash64BigInt(input: string): bigint;
48
+ export declare function legacyHash64BigInt_arm(input: string): bigint;
49
+ /**
50
+ * Compute a 64-bit hash compatible with farmhash v3.3.1 hash64() on x86_64
51
+ * Uses farmhashte algorithm (SIMD simulation for ≥512 bytes)
52
+ * @param input - The string to hash
53
+ * @returns The hash as a BigInt
54
+ */
55
+ export declare function legacyHash64BigInt_x86(input: string): bigint;
56
+ /**
57
+ * Compute a 32-bit hash compatible with farmhash v3.3.1 hash32() on ARM64
58
+ * Uses farmhashmk algorithm
59
+ * @param input - The string to hash
60
+ * @returns The hash as a number
61
+ */
62
+ export declare function legacyHash32_arm(input: string): number;
36
63
  /**
37
- * Compute a 32-bit hash compatible with farmhash v3.3.1 hash32()
64
+ * Compute a 32-bit hash compatible with farmhash v3.3.1 hash32() on x86_64
65
+ * Uses lower32(farmhashte::Hash64) algorithm (SIMD simulation for ≥512 bytes)
38
66
  * @param input - The string to hash
39
67
  * @returns The hash as a number
40
68
  */
41
- export declare function legacyHash32(input: string): number;
69
+ export declare function legacyHash32_x86(input: string): number;
42
70
  /**************************************************************************
43
71
  * PUBLIC API - MODERN (stable fingerprints, same as farmhash v5)
44
72
  ***************************************************************************/
@@ -76,9 +104,12 @@ export declare const hash32: typeof fingerprint32;
76
104
  * DEFAULT EXPORT
77
105
  ***************************************************************************/
78
106
  declare const _default: {
79
- legacyHash64: typeof legacyHash64;
80
- legacyHash64BigInt: typeof legacyHash64BigInt;
81
- legacyHash32: typeof legacyHash32;
107
+ legacyHash64_arm: typeof legacyHash64_arm;
108
+ legacyHash64_x86: typeof legacyHash64_x86;
109
+ legacyHash64BigInt_arm: typeof legacyHash64BigInt_arm;
110
+ legacyHash64BigInt_x86: typeof legacyHash64BigInt_x86;
111
+ legacyHash32_arm: typeof legacyHash32_arm;
112
+ legacyHash32_x86: typeof legacyHash32_x86;
82
113
  fingerprint64: typeof fingerprint64;
83
114
  fingerprint64BigInt: typeof fingerprint64BigInt;
84
115
  fingerprint32: typeof fingerprint32;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AA4fH;;6EAE6E;AAE7E;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIxD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED;;6EAE6E;AAE7E;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;6EAE6E;AAE7E,8BAA8B;AAC9B,eAAO,MAAM,MAAM,sBAAgB,CAAC;AAEpC,oCAAoC;AACpC,eAAO,MAAM,YAAY,4BAAsB,CAAC;AAEhD,8BAA8B;AAC9B,eAAO,MAAM,MAAM,sBAAgB,CAAC;AAEpC;;6EAE6E;;;;;;;;;;;;AAE7E,wBAaE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AA00BH;;;;;;6EAM6E;AAE7E;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAItD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAItD;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI5D;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI5D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAItD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED;;6EAE6E;AAE7E;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;6EAE6E;AAE7E,8BAA8B;AAC9B,eAAO,MAAM,MAAM,sBAAgB,CAAC;AAEpC,oCAAoC;AACpC,eAAO,MAAM,YAAY,4BAAsB,CAAC;AAEhD,8BAA8B;AAC9B,eAAO,MAAM,MAAM,sBAAgB,CAAC;AAEpC;;6EAE6E;;;;;;;;;;;;;;;AAE7E,wBAgBE"}
package/dist/index.js CHANGED
@@ -313,6 +313,292 @@ function xoHash64(buf, len) {
313
313
  return naHash64(buf, len);
314
314
  return uoHash64(buf, len);
315
315
  }
316
+ function m128iFromSeed(seed) {
317
+ return [seed & 0xffffffffffffffffn, 0n];
318
+ }
319
+ function m128iSet1Epi32(val) {
320
+ const v32 = val & 0xffffffffn;
321
+ const packed = (v32 << 32n) | v32;
322
+ return [packed, packed];
323
+ }
324
+ function fetch128(buf, offset) {
325
+ return [
326
+ buf.readBigUInt64LE(offset),
327
+ buf.readBigUInt64LE(offset + 8)
328
+ ];
329
+ }
330
+ function add128(x, y) {
331
+ return [
332
+ (x[0] + y[0]) & 0xffffffffffffffffn,
333
+ (x[1] + y[1]) & 0xffffffffffffffffn
334
+ ];
335
+ }
336
+ function xor128(x, y) {
337
+ return [x[0] ^ y[0], x[1] ^ y[1]];
338
+ }
339
+ function mul128(x, y) {
340
+ const x0 = x[0] & 0xffffffffn;
341
+ const x1 = (x[0] >> 32n) & 0xffffffffn;
342
+ const x2 = x[1] & 0xffffffffn;
343
+ const x3 = (x[1] >> 32n) & 0xffffffffn;
344
+ const y0 = y[0] & 0xffffffffn;
345
+ const y1 = (y[0] >> 32n) & 0xffffffffn;
346
+ const y2 = y[1] & 0xffffffffn;
347
+ const y3 = (y[1] >> 32n) & 0xffffffffn;
348
+ const r0 = (x0 * y0) & 0xffffffffn;
349
+ const r1 = (x1 * y1) & 0xffffffffn;
350
+ const r2 = (x2 * y2) & 0xffffffffn;
351
+ const r3 = (x3 * y3) & 0xffffffffn;
352
+ return [
353
+ (r1 << 32n) | r0,
354
+ (r3 << 32n) | r2
355
+ ];
356
+ }
357
+ function shuf128(mask, data) {
358
+ const bytes = [];
359
+ bytes.push(Number(data[0] & 0xffn));
360
+ bytes.push(Number((data[0] >> 8n) & 0xffn));
361
+ bytes.push(Number((data[0] >> 16n) & 0xffn));
362
+ bytes.push(Number((data[0] >> 24n) & 0xffn));
363
+ bytes.push(Number((data[0] >> 32n) & 0xffn));
364
+ bytes.push(Number((data[0] >> 40n) & 0xffn));
365
+ bytes.push(Number((data[0] >> 48n) & 0xffn));
366
+ bytes.push(Number((data[0] >> 56n) & 0xffn));
367
+ bytes.push(Number(data[1] & 0xffn));
368
+ bytes.push(Number((data[1] >> 8n) & 0xffn));
369
+ bytes.push(Number((data[1] >> 16n) & 0xffn));
370
+ bytes.push(Number((data[1] >> 24n) & 0xffn));
371
+ bytes.push(Number((data[1] >> 32n) & 0xffn));
372
+ bytes.push(Number((data[1] >> 40n) & 0xffn));
373
+ bytes.push(Number((data[1] >> 48n) & 0xffn));
374
+ bytes.push(Number((data[1] >> 56n) & 0xffn));
375
+ const maskBytes = [];
376
+ maskBytes.push(Number(mask[0] & 0xffn));
377
+ maskBytes.push(Number((mask[0] >> 8n) & 0xffn));
378
+ maskBytes.push(Number((mask[0] >> 16n) & 0xffn));
379
+ maskBytes.push(Number((mask[0] >> 24n) & 0xffn));
380
+ maskBytes.push(Number((mask[0] >> 32n) & 0xffn));
381
+ maskBytes.push(Number((mask[0] >> 40n) & 0xffn));
382
+ maskBytes.push(Number((mask[0] >> 48n) & 0xffn));
383
+ maskBytes.push(Number((mask[0] >> 56n) & 0xffn));
384
+ maskBytes.push(Number(mask[1] & 0xffn));
385
+ maskBytes.push(Number((mask[1] >> 8n) & 0xffn));
386
+ maskBytes.push(Number((mask[1] >> 16n) & 0xffn));
387
+ maskBytes.push(Number((mask[1] >> 24n) & 0xffn));
388
+ maskBytes.push(Number((mask[1] >> 32n) & 0xffn));
389
+ maskBytes.push(Number((mask[1] >> 40n) & 0xffn));
390
+ maskBytes.push(Number((mask[1] >> 48n) & 0xffn));
391
+ maskBytes.push(Number((mask[1] >> 56n) & 0xffn));
392
+ const result = [];
393
+ for (let i = 0; i < 16; i++) {
394
+ const idx = maskBytes[i] & 0x0F;
395
+ result.push(bytes[idx]);
396
+ }
397
+ let lo = 0n;
398
+ let hi = 0n;
399
+ for (let i = 0; i < 8; i++) {
400
+ lo |= BigInt(result[i]) << BigInt(i * 8);
401
+ hi |= BigInt(result[i + 8]) << BigInt(i * 8);
402
+ }
403
+ return [lo, hi];
404
+ }
405
+ function shuffle32(x, imm8) {
406
+ const dwords = [
407
+ x[0] & 0xffffffffn,
408
+ (x[0] >> 32n) & 0xffffffffn,
409
+ x[1] & 0xffffffffn,
410
+ (x[1] >> 32n) & 0xffffffffn
411
+ ];
412
+ const r0 = dwords[imm8 & 3];
413
+ const r1 = dwords[(imm8 >> 2) & 3];
414
+ const r2 = dwords[(imm8 >> 4) & 3];
415
+ const r3 = dwords[(imm8 >> 6) & 3];
416
+ return [
417
+ (r1 << 32n) | r0,
418
+ (r3 << 32n) | r2
419
+ ];
420
+ }
421
+ function m128iToBuffer(vals) {
422
+ const buf = Buffer.alloc(vals.length * 16);
423
+ for (let i = 0; i < vals.length; i++) {
424
+ buf.writeBigUInt64LE(vals[i][0], i * 16);
425
+ buf.writeBigUInt64LE(vals[i][1], i * 16 + 8);
426
+ }
427
+ return buf;
428
+ }
429
+ function teHash64Long(buf, len, seed0, seed1) {
430
+ const kShuf = [0x0c020e0d00070301n, 0x040b0a05080f0609n];
431
+ const kMult = [0x343e33edcc9e2d51n, 0xbdd633394554fa03n];
432
+ const seed2 = ((seed0 + 113n) * (seed1 + 9n)) & 0xffffffffffffffffn;
433
+ const seed3 = ((rotate64(seed0, 23) + 27n) * (rotate64(seed1, 30) + 111n)) & 0xffffffffffffffffn;
434
+ let d0 = m128iFromSeed(seed0);
435
+ let d1 = m128iFromSeed(seed1);
436
+ let d2 = shuf128(kShuf, d0);
437
+ let d3 = shuf128(kShuf, d1);
438
+ let d4 = xor128(d0, d1);
439
+ let d5 = xor128(d1, d2);
440
+ let d6 = xor128(d2, d4);
441
+ let d7 = m128iSet1Epi32(seed2 >> 32n);
442
+ let d8 = mul128(kMult, d2);
443
+ let d9 = m128iSet1Epi32(seed3 >> 32n);
444
+ let d10 = m128iSet1Epi32(seed3 & 0xffffffffn);
445
+ let d11 = add128(d2, m128iSet1Epi32(seed2 & 0xffffffffn));
446
+ const endOffset = len & ~255;
447
+ let offset = 0;
448
+ while (offset < endOffset) {
449
+ let z;
450
+ z = fetch128(buf, offset);
451
+ d0 = add128(d0, z);
452
+ d1 = shuf128(kShuf, d1);
453
+ d2 = xor128(d2, d0);
454
+ d4 = xor128(d4, z);
455
+ d4 = xor128(d4, d1);
456
+ [d0, d6] = [d6, d0];
457
+ z = fetch128(buf, offset + 16);
458
+ d5 = add128(d5, z);
459
+ d6 = shuf128(kShuf, d6);
460
+ d8 = shuf128(kShuf, d8);
461
+ d7 = xor128(d7, d5);
462
+ d0 = xor128(d0, z);
463
+ d0 = xor128(d0, d6);
464
+ [d5, d11] = [d11, d5];
465
+ z = fetch128(buf, offset + 32);
466
+ d1 = add128(d1, z);
467
+ d2 = shuf128(kShuf, d2);
468
+ d4 = shuf128(kShuf, d4);
469
+ d5 = xor128(d5, z);
470
+ d5 = xor128(d5, d2);
471
+ [d10, d4] = [d4, d10];
472
+ z = fetch128(buf, offset + 48);
473
+ d6 = add128(d6, z);
474
+ d7 = shuf128(kShuf, d7);
475
+ d0 = shuf128(kShuf, d0);
476
+ d8 = xor128(d8, d6);
477
+ d1 = xor128(d1, z);
478
+ d1 = add128(d1, d7);
479
+ z = fetch128(buf, offset + 64);
480
+ d2 = add128(d2, z);
481
+ d5 = shuf128(kShuf, d5);
482
+ d4 = add128(d4, d2);
483
+ d6 = xor128(d6, z);
484
+ d6 = xor128(d6, d11);
485
+ [d8, d2] = [d2, d8];
486
+ z = fetch128(buf, offset + 80);
487
+ d7 = xor128(d7, z);
488
+ d8 = shuf128(kShuf, d8);
489
+ d1 = shuf128(kShuf, d1);
490
+ d0 = add128(d0, d7);
491
+ d2 = add128(d2, z);
492
+ d2 = add128(d2, d8);
493
+ [d1, d7] = [d7, d1];
494
+ z = fetch128(buf, offset + 96);
495
+ d4 = shuf128(kShuf, d4);
496
+ d6 = shuf128(kShuf, d6);
497
+ d8 = mul128(kMult, d8);
498
+ d5 = xor128(d5, d11);
499
+ d7 = xor128(d7, z);
500
+ d7 = add128(d7, d4);
501
+ [d6, d0] = [d0, d6];
502
+ z = fetch128(buf, offset + 112);
503
+ d8 = add128(d8, z);
504
+ d0 = shuf128(kShuf, d0);
505
+ d2 = shuf128(kShuf, d2);
506
+ d1 = xor128(d1, d8);
507
+ d10 = xor128(d10, z);
508
+ d10 = xor128(d10, d0);
509
+ [d11, d5] = [d5, d11];
510
+ z = fetch128(buf, offset + 128);
511
+ d4 = add128(d4, z);
512
+ d5 = shuf128(kShuf, d5);
513
+ d7 = shuf128(kShuf, d7);
514
+ d6 = add128(d6, d4);
515
+ d8 = xor128(d8, z);
516
+ d8 = xor128(d8, d5);
517
+ [d4, d10] = [d10, d4];
518
+ z = fetch128(buf, offset + 144);
519
+ d0 = add128(d0, z);
520
+ d1 = shuf128(kShuf, d1);
521
+ d2 = add128(d2, d0);
522
+ d4 = xor128(d4, z);
523
+ d4 = xor128(d4, d1);
524
+ z = fetch128(buf, offset + 160);
525
+ d5 = add128(d5, z);
526
+ d6 = shuf128(kShuf, d6);
527
+ d8 = shuf128(kShuf, d8);
528
+ d7 = xor128(d7, d5);
529
+ d0 = xor128(d0, z);
530
+ d0 = xor128(d0, d6);
531
+ [d2, d8] = [d8, d2];
532
+ z = fetch128(buf, offset + 176);
533
+ d1 = add128(d1, z);
534
+ d2 = shuf128(kShuf, d2);
535
+ d4 = shuf128(kShuf, d4);
536
+ d5 = mul128(kMult, d5);
537
+ d5 = xor128(d5, z);
538
+ d5 = xor128(d5, d2);
539
+ [d7, d1] = [d1, d7];
540
+ z = fetch128(buf, offset + 192);
541
+ d6 = add128(d6, z);
542
+ d7 = shuf128(kShuf, d7);
543
+ d0 = shuf128(kShuf, d0);
544
+ d8 = add128(d8, d6);
545
+ d1 = xor128(d1, z);
546
+ d1 = xor128(d1, d7);
547
+ [d0, d6] = [d6, d0];
548
+ z = fetch128(buf, offset + 208);
549
+ d2 = add128(d2, z);
550
+ d5 = shuf128(kShuf, d5);
551
+ d4 = xor128(d4, d2);
552
+ d6 = xor128(d6, z);
553
+ d6 = xor128(d6, d9);
554
+ [d5, d11] = [d11, d5];
555
+ z = fetch128(buf, offset + 224);
556
+ d7 = add128(d7, z);
557
+ d8 = shuf128(kShuf, d8);
558
+ d1 = shuf128(kShuf, d1);
559
+ d0 = xor128(d0, d7);
560
+ d2 = xor128(d2, z);
561
+ d2 = xor128(d2, d8);
562
+ [d10, d4] = [d4, d10];
563
+ z = fetch128(buf, offset + 240);
564
+ d3 = add128(d3, z);
565
+ d4 = shuf128(kShuf, d4);
566
+ d6 = shuf128(kShuf, d6);
567
+ d7 = mul128(kMult, d7);
568
+ d5 = add128(d5, d3);
569
+ d7 = xor128(d7, z);
570
+ d7 = xor128(d7, d4);
571
+ [d3, d9] = [d9, d3];
572
+ offset += 256;
573
+ }
574
+ d6 = add128(mul128(kMult, d6), m128iFromSeed(BigInt(len)));
575
+ if (len % 256 !== 0) {
576
+ const imm8 = (0 << 6) + (3 << 4) + (2 << 2) + (1 << 0);
577
+ d7 = add128(shuffle32(d8, imm8), d7);
578
+ d8 = add128(mul128(kMult, d8), m128iFromSeed(xoHash64(buf.subarray(offset), len % 256)));
579
+ }
580
+ d0 = mul128(kMult, shuf128(kShuf, mul128(kMult, d0)));
581
+ d3 = mul128(kMult, shuf128(kShuf, mul128(kMult, d3)));
582
+ d9 = mul128(kMult, shuf128(kShuf, mul128(kMult, d9)));
583
+ d1 = mul128(kMult, shuf128(kShuf, mul128(kMult, d1)));
584
+ d0 = add128(d11, d0);
585
+ d3 = xor128(d7, d3);
586
+ d9 = add128(d8, d9);
587
+ d1 = add128(d10, d1);
588
+ d4 = add128(d3, d4);
589
+ d5 = add128(d9, d5);
590
+ d6 = xor128(d1, d6);
591
+ d2 = add128(d0, d2);
592
+ const t = [d0, d3, d9, d1, d4, d5, d6, d2];
593
+ const tBuf = m128iToBuffer(t);
594
+ return xoHash64(tBuf, 128);
595
+ }
596
+ function teHash64(buf, len) {
597
+ if (len >= 512) {
598
+ return teHash64Long(buf, len, k2, k1);
599
+ }
600
+ return xoHash64(buf, len);
601
+ }
316
602
  /**************************************************************************
317
603
  * FARMHASH NA - HashLen33to64 (used by fingerprint64)
318
604
  ***************************************************************************/
@@ -455,37 +741,78 @@ function debugTweak32(x) {
455
741
  }
456
742
  /**************************************************************************
457
743
  * PUBLIC API - LEGACY (with DebugTweak, compatible with farmhash v3.3.1)
744
+ *
745
+ * Note: farmhash v3.3.1 produces different results on ARM64 vs x86_64 for:
746
+ * - hash64: Different for strings ≥512 bytes
747
+ * - hash32: Different for ALL strings (different algorithms)
458
748
  ***************************************************************************/
459
749
  /**
460
- * Compute a 64-bit hash compatible with farmhash v3.3.1 hash64()
750
+ * Compute a 64-bit hash compatible with farmhash v3.3.1 hash64() on ARM64
751
+ * Also matches x86_64 for strings <512 bytes
461
752
  * @param input - The string to hash
462
753
  * @returns The hash as a decimal string
463
754
  */
464
- export function legacyHash64(input) {
755
+ export function legacyHash64_arm(input) {
465
756
  const buf = Buffer.from(input);
466
757
  const rawHash = xoHash64(buf, buf.length);
467
758
  return debugTweak64(rawHash).toString();
468
759
  }
469
760
  /**
470
- * Compute a 64-bit hash compatible with farmhash v3.3.1 hash64()
761
+ * Compute a 64-bit hash compatible with farmhash v3.3.1 hash64() on x86_64
762
+ * Uses farmhashte algorithm (SIMD simulation for ≥512 bytes)
763
+ * @param input - The string to hash
764
+ * @returns The hash as a decimal string
765
+ */
766
+ export function legacyHash64_x86(input) {
767
+ const buf = Buffer.from(input);
768
+ const rawHash = teHash64(buf, buf.length);
769
+ return debugTweak64(rawHash).toString();
770
+ }
771
+ /**
772
+ * Compute a 64-bit hash compatible with farmhash v3.3.1 hash64() on ARM64
773
+ * Also matches x86_64 for strings <512 bytes
471
774
  * @param input - The string to hash
472
775
  * @returns The hash as a BigInt
473
776
  */
474
- export function legacyHash64BigInt(input) {
777
+ export function legacyHash64BigInt_arm(input) {
475
778
  const buf = Buffer.from(input);
476
779
  const rawHash = xoHash64(buf, buf.length);
477
780
  return debugTweak64(rawHash);
478
781
  }
479
782
  /**
480
- * Compute a 32-bit hash compatible with farmhash v3.3.1 hash32()
783
+ * Compute a 64-bit hash compatible with farmhash v3.3.1 hash64() on x86_64
784
+ * Uses farmhashte algorithm (SIMD simulation for ≥512 bytes)
785
+ * @param input - The string to hash
786
+ * @returns The hash as a BigInt
787
+ */
788
+ export function legacyHash64BigInt_x86(input) {
789
+ const buf = Buffer.from(input);
790
+ const rawHash = teHash64(buf, buf.length);
791
+ return debugTweak64(rawHash);
792
+ }
793
+ /**
794
+ * Compute a 32-bit hash compatible with farmhash v3.3.1 hash32() on ARM64
795
+ * Uses farmhashmk algorithm
481
796
  * @param input - The string to hash
482
797
  * @returns The hash as a number
483
798
  */
484
- export function legacyHash32(input) {
799
+ export function legacyHash32_arm(input) {
485
800
  const buf = Buffer.from(input);
486
801
  const rawHash = mkHash32(buf, buf.length);
487
802
  return debugTweak32(rawHash);
488
803
  }
804
+ /**
805
+ * Compute a 32-bit hash compatible with farmhash v3.3.1 hash32() on x86_64
806
+ * Uses lower32(farmhashte::Hash64) algorithm (SIMD simulation for ≥512 bytes)
807
+ * @param input - The string to hash
808
+ * @returns The hash as a number
809
+ */
810
+ export function legacyHash32_x86(input) {
811
+ const buf = Buffer.from(input);
812
+ const rawHash64 = teHash64(buf, buf.length);
813
+ const lower32 = Number(rawHash64 & 0xffffffffn);
814
+ return debugTweak32(lower32);
815
+ }
489
816
  /**************************************************************************
490
817
  * PUBLIC API - MODERN (stable fingerprints, same as farmhash v5)
491
818
  ***************************************************************************/
@@ -532,10 +859,13 @@ export const hash32 = fingerprint32;
532
859
  * DEFAULT EXPORT
533
860
  ***************************************************************************/
534
861
  export default {
535
- // Legacy (farmhash v3.3.1 compatible)
536
- legacyHash64,
537
- legacyHash64BigInt,
538
- legacyHash32,
862
+ // Legacy (farmhash v3.3.1 compatible) - explicit architecture
863
+ legacyHash64_arm,
864
+ legacyHash64_x86,
865
+ legacyHash64BigInt_arm,
866
+ legacyHash64BigInt_x86,
867
+ legacyHash32_arm,
868
+ legacyHash32_x86,
539
869
  // Modern stable fingerprints
540
870
  fingerprint64,
541
871
  fingerprint64BigInt,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "farmhashjs",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Pure JavaScript implementation of Google's FarmHash - compatible with farmhash v3.x and v5.x",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
package/src/index.ts CHANGED
@@ -370,6 +370,340 @@ function xoHash64(buf: Buffer, len: number): bigint {
370
370
  return uoHash64(buf, len);
371
371
  }
372
372
 
373
+ /**************************************************************************
374
+ * FARMHASH TE (x86_64 SIMD simulation for strings ≥512 bytes)
375
+ *
376
+ * This simulates the SSE4.1 SIMD operations used in farmhashte::Hash64Long
377
+ * using pairs of 64-bit bigints to represent 128-bit values.
378
+ ***************************************************************************/
379
+
380
+ type M128i = [bigint, bigint];
381
+
382
+ function m128iFromSeed(seed: bigint): M128i {
383
+ return [seed & 0xFFFFFFFFFFFFFFFFn, 0n];
384
+ }
385
+
386
+ function m128iSet1Epi32(val: bigint): M128i {
387
+ const v32 = val & 0xFFFFFFFFn;
388
+ const packed = (v32 << 32n) | v32;
389
+ return [packed, packed];
390
+ }
391
+
392
+ function fetch128(buf: Buffer, offset: number): M128i {
393
+ return [
394
+ buf.readBigUInt64LE(offset),
395
+ buf.readBigUInt64LE(offset + 8)
396
+ ];
397
+ }
398
+
399
+ function add128(x: M128i, y: M128i): M128i {
400
+ return [
401
+ (x[0] + y[0]) & 0xFFFFFFFFFFFFFFFFn,
402
+ (x[1] + y[1]) & 0xFFFFFFFFFFFFFFFFn
403
+ ];
404
+ }
405
+
406
+ function xor128(x: M128i, y: M128i): M128i {
407
+ return [x[0] ^ y[0], x[1] ^ y[1]];
408
+ }
409
+
410
+ function mul128(x: M128i, y: M128i): M128i {
411
+ const x0 = x[0] & 0xFFFFFFFFn;
412
+ const x1 = (x[0] >> 32n) & 0xFFFFFFFFn;
413
+ const x2 = x[1] & 0xFFFFFFFFn;
414
+ const x3 = (x[1] >> 32n) & 0xFFFFFFFFn;
415
+ const y0 = y[0] & 0xFFFFFFFFn;
416
+ const y1 = (y[0] >> 32n) & 0xFFFFFFFFn;
417
+ const y2 = y[1] & 0xFFFFFFFFn;
418
+ const y3 = (y[1] >> 32n) & 0xFFFFFFFFn;
419
+ const r0 = (x0 * y0) & 0xFFFFFFFFn;
420
+ const r1 = (x1 * y1) & 0xFFFFFFFFn;
421
+ const r2 = (x2 * y2) & 0xFFFFFFFFn;
422
+ const r3 = (x3 * y3) & 0xFFFFFFFFn;
423
+ return [
424
+ (r1 << 32n) | r0,
425
+ (r3 << 32n) | r2
426
+ ];
427
+ }
428
+
429
+ function shuf128(mask: M128i, data: M128i): M128i {
430
+ const bytes: number[] = [];
431
+ bytes.push(Number(data[0] & 0xFFn));
432
+ bytes.push(Number((data[0] >> 8n) & 0xFFn));
433
+ bytes.push(Number((data[0] >> 16n) & 0xFFn));
434
+ bytes.push(Number((data[0] >> 24n) & 0xFFn));
435
+ bytes.push(Number((data[0] >> 32n) & 0xFFn));
436
+ bytes.push(Number((data[0] >> 40n) & 0xFFn));
437
+ bytes.push(Number((data[0] >> 48n) & 0xFFn));
438
+ bytes.push(Number((data[0] >> 56n) & 0xFFn));
439
+ bytes.push(Number(data[1] & 0xFFn));
440
+ bytes.push(Number((data[1] >> 8n) & 0xFFn));
441
+ bytes.push(Number((data[1] >> 16n) & 0xFFn));
442
+ bytes.push(Number((data[1] >> 24n) & 0xFFn));
443
+ bytes.push(Number((data[1] >> 32n) & 0xFFn));
444
+ bytes.push(Number((data[1] >> 40n) & 0xFFn));
445
+ bytes.push(Number((data[1] >> 48n) & 0xFFn));
446
+ bytes.push(Number((data[1] >> 56n) & 0xFFn));
447
+
448
+ const maskBytes: number[] = [];
449
+ maskBytes.push(Number(mask[0] & 0xFFn));
450
+ maskBytes.push(Number((mask[0] >> 8n) & 0xFFn));
451
+ maskBytes.push(Number((mask[0] >> 16n) & 0xFFn));
452
+ maskBytes.push(Number((mask[0] >> 24n) & 0xFFn));
453
+ maskBytes.push(Number((mask[0] >> 32n) & 0xFFn));
454
+ maskBytes.push(Number((mask[0] >> 40n) & 0xFFn));
455
+ maskBytes.push(Number((mask[0] >> 48n) & 0xFFn));
456
+ maskBytes.push(Number((mask[0] >> 56n) & 0xFFn));
457
+ maskBytes.push(Number(mask[1] & 0xFFn));
458
+ maskBytes.push(Number((mask[1] >> 8n) & 0xFFn));
459
+ maskBytes.push(Number((mask[1] >> 16n) & 0xFFn));
460
+ maskBytes.push(Number((mask[1] >> 24n) & 0xFFn));
461
+ maskBytes.push(Number((mask[1] >> 32n) & 0xFFn));
462
+ maskBytes.push(Number((mask[1] >> 40n) & 0xFFn));
463
+ maskBytes.push(Number((mask[1] >> 48n) & 0xFFn));
464
+ maskBytes.push(Number((mask[1] >> 56n) & 0xFFn));
465
+
466
+ const result: number[] = [];
467
+ for (let i = 0; i < 16; i++) {
468
+ const idx = maskBytes[i] & 0x0F;
469
+ result.push(bytes[idx]);
470
+ }
471
+
472
+ let lo = 0n;
473
+ let hi = 0n;
474
+ for (let i = 0; i < 8; i++) {
475
+ lo |= BigInt(result[i]) << BigInt(i * 8);
476
+ hi |= BigInt(result[i + 8]) << BigInt(i * 8);
477
+ }
478
+ return [lo, hi];
479
+ }
480
+
481
+ function shuffle32(x: M128i, imm8: number): M128i {
482
+ const dwords: bigint[] = [
483
+ x[0] & 0xFFFFFFFFn,
484
+ (x[0] >> 32n) & 0xFFFFFFFFn,
485
+ x[1] & 0xFFFFFFFFn,
486
+ (x[1] >> 32n) & 0xFFFFFFFFn
487
+ ];
488
+ const r0 = dwords[imm8 & 3];
489
+ const r1 = dwords[(imm8 >> 2) & 3];
490
+ const r2 = dwords[(imm8 >> 4) & 3];
491
+ const r3 = dwords[(imm8 >> 6) & 3];
492
+ return [
493
+ (r1 << 32n) | r0,
494
+ (r3 << 32n) | r2
495
+ ];
496
+ }
497
+
498
+ function m128iToBuffer(vals: M128i[]): Buffer {
499
+ const buf = Buffer.alloc(vals.length * 16);
500
+ for (let i = 0; i < vals.length; i++) {
501
+ buf.writeBigUInt64LE(vals[i][0], i * 16);
502
+ buf.writeBigUInt64LE(vals[i][1], i * 16 + 8);
503
+ }
504
+ return buf;
505
+ }
506
+
507
+ function teHash64Long(buf: Buffer, len: number, seed0: bigint, seed1: bigint): bigint {
508
+ const kShuf: M128i = [0x0c020e0d00070301n, 0x040b0a05080f0609n];
509
+ const kMult: M128i = [0x343e33edcc9e2d51n, 0xbdd633394554fa03n];
510
+
511
+ const seed2 = ((seed0 + 113n) * (seed1 + 9n)) & 0xFFFFFFFFFFFFFFFFn;
512
+ const seed3 = ((rotate64(seed0, 23) + 27n) * (rotate64(seed1, 30) + 111n)) & 0xFFFFFFFFFFFFFFFFn;
513
+
514
+ let d0 = m128iFromSeed(seed0);
515
+ let d1 = m128iFromSeed(seed1);
516
+ let d2 = shuf128(kShuf, d0);
517
+ let d3 = shuf128(kShuf, d1);
518
+ let d4 = xor128(d0, d1);
519
+ let d5 = xor128(d1, d2);
520
+ let d6 = xor128(d2, d4);
521
+ let d7 = m128iSet1Epi32(seed2 >> 32n);
522
+ let d8 = mul128(kMult, d2);
523
+ let d9 = m128iSet1Epi32(seed3 >> 32n);
524
+ let d10 = m128iSet1Epi32(seed3 & 0xFFFFFFFFn);
525
+ let d11 = add128(d2, m128iSet1Epi32(seed2 & 0xFFFFFFFFn));
526
+
527
+ const endOffset = len & ~255;
528
+ let offset = 0;
529
+
530
+ while (offset < endOffset) {
531
+ let z: M128i;
532
+
533
+ z = fetch128(buf, offset);
534
+ d0 = add128(d0, z);
535
+ d1 = shuf128(kShuf, d1);
536
+ d2 = xor128(d2, d0);
537
+ d4 = xor128(d4, z);
538
+ d4 = xor128(d4, d1);
539
+ [d0, d6] = [d6, d0];
540
+
541
+ z = fetch128(buf, offset + 16);
542
+ d5 = add128(d5, z);
543
+ d6 = shuf128(kShuf, d6);
544
+ d8 = shuf128(kShuf, d8);
545
+ d7 = xor128(d7, d5);
546
+ d0 = xor128(d0, z);
547
+ d0 = xor128(d0, d6);
548
+ [d5, d11] = [d11, d5];
549
+
550
+ z = fetch128(buf, offset + 32);
551
+ d1 = add128(d1, z);
552
+ d2 = shuf128(kShuf, d2);
553
+ d4 = shuf128(kShuf, d4);
554
+ d5 = xor128(d5, z);
555
+ d5 = xor128(d5, d2);
556
+ [d10, d4] = [d4, d10];
557
+
558
+ z = fetch128(buf, offset + 48);
559
+ d6 = add128(d6, z);
560
+ d7 = shuf128(kShuf, d7);
561
+ d0 = shuf128(kShuf, d0);
562
+ d8 = xor128(d8, d6);
563
+ d1 = xor128(d1, z);
564
+ d1 = add128(d1, d7);
565
+
566
+ z = fetch128(buf, offset + 64);
567
+ d2 = add128(d2, z);
568
+ d5 = shuf128(kShuf, d5);
569
+ d4 = add128(d4, d2);
570
+ d6 = xor128(d6, z);
571
+ d6 = xor128(d6, d11);
572
+ [d8, d2] = [d2, d8];
573
+
574
+ z = fetch128(buf, offset + 80);
575
+ d7 = xor128(d7, z);
576
+ d8 = shuf128(kShuf, d8);
577
+ d1 = shuf128(kShuf, d1);
578
+ d0 = add128(d0, d7);
579
+ d2 = add128(d2, z);
580
+ d2 = add128(d2, d8);
581
+ [d1, d7] = [d7, d1];
582
+
583
+ z = fetch128(buf, offset + 96);
584
+ d4 = shuf128(kShuf, d4);
585
+ d6 = shuf128(kShuf, d6);
586
+ d8 = mul128(kMult, d8);
587
+ d5 = xor128(d5, d11);
588
+ d7 = xor128(d7, z);
589
+ d7 = add128(d7, d4);
590
+ [d6, d0] = [d0, d6];
591
+
592
+ z = fetch128(buf, offset + 112);
593
+ d8 = add128(d8, z);
594
+ d0 = shuf128(kShuf, d0);
595
+ d2 = shuf128(kShuf, d2);
596
+ d1 = xor128(d1, d8);
597
+ d10 = xor128(d10, z);
598
+ d10 = xor128(d10, d0);
599
+ [d11, d5] = [d5, d11];
600
+
601
+ z = fetch128(buf, offset + 128);
602
+ d4 = add128(d4, z);
603
+ d5 = shuf128(kShuf, d5);
604
+ d7 = shuf128(kShuf, d7);
605
+ d6 = add128(d6, d4);
606
+ d8 = xor128(d8, z);
607
+ d8 = xor128(d8, d5);
608
+ [d4, d10] = [d10, d4];
609
+
610
+ z = fetch128(buf, offset + 144);
611
+ d0 = add128(d0, z);
612
+ d1 = shuf128(kShuf, d1);
613
+ d2 = add128(d2, d0);
614
+ d4 = xor128(d4, z);
615
+ d4 = xor128(d4, d1);
616
+
617
+ z = fetch128(buf, offset + 160);
618
+ d5 = add128(d5, z);
619
+ d6 = shuf128(kShuf, d6);
620
+ d8 = shuf128(kShuf, d8);
621
+ d7 = xor128(d7, d5);
622
+ d0 = xor128(d0, z);
623
+ d0 = xor128(d0, d6);
624
+ [d2, d8] = [d8, d2];
625
+
626
+ z = fetch128(buf, offset + 176);
627
+ d1 = add128(d1, z);
628
+ d2 = shuf128(kShuf, d2);
629
+ d4 = shuf128(kShuf, d4);
630
+ d5 = mul128(kMult, d5);
631
+ d5 = xor128(d5, z);
632
+ d5 = xor128(d5, d2);
633
+ [d7, d1] = [d1, d7];
634
+
635
+ z = fetch128(buf, offset + 192);
636
+ d6 = add128(d6, z);
637
+ d7 = shuf128(kShuf, d7);
638
+ d0 = shuf128(kShuf, d0);
639
+ d8 = add128(d8, d6);
640
+ d1 = xor128(d1, z);
641
+ d1 = xor128(d1, d7);
642
+ [d0, d6] = [d6, d0];
643
+
644
+ z = fetch128(buf, offset + 208);
645
+ d2 = add128(d2, z);
646
+ d5 = shuf128(kShuf, d5);
647
+ d4 = xor128(d4, d2);
648
+ d6 = xor128(d6, z);
649
+ d6 = xor128(d6, d9);
650
+ [d5, d11] = [d11, d5];
651
+
652
+ z = fetch128(buf, offset + 224);
653
+ d7 = add128(d7, z);
654
+ d8 = shuf128(kShuf, d8);
655
+ d1 = shuf128(kShuf, d1);
656
+ d0 = xor128(d0, d7);
657
+ d2 = xor128(d2, z);
658
+ d2 = xor128(d2, d8);
659
+ [d10, d4] = [d4, d10];
660
+
661
+ z = fetch128(buf, offset + 240);
662
+ d3 = add128(d3, z);
663
+ d4 = shuf128(kShuf, d4);
664
+ d6 = shuf128(kShuf, d6);
665
+ d7 = mul128(kMult, d7);
666
+ d5 = add128(d5, d3);
667
+ d7 = xor128(d7, z);
668
+ d7 = xor128(d7, d4);
669
+ [d3, d9] = [d9, d3];
670
+
671
+ offset += 256;
672
+ }
673
+
674
+ d6 = add128(mul128(kMult, d6), m128iFromSeed(BigInt(len)));
675
+
676
+ if (len % 256 !== 0) {
677
+ const imm8 = (0 << 6) + (3 << 4) + (2 << 2) + (1 << 0);
678
+ d7 = add128(shuffle32(d8, imm8), d7);
679
+ d8 = add128(mul128(kMult, d8), m128iFromSeed(xoHash64(buf.subarray(offset), len % 256)));
680
+ }
681
+
682
+ d0 = mul128(kMult, shuf128(kShuf, mul128(kMult, d0)));
683
+ d3 = mul128(kMult, shuf128(kShuf, mul128(kMult, d3)));
684
+ d9 = mul128(kMult, shuf128(kShuf, mul128(kMult, d9)));
685
+ d1 = mul128(kMult, shuf128(kShuf, mul128(kMult, d1)));
686
+ d0 = add128(d11, d0);
687
+ d3 = xor128(d7, d3);
688
+ d9 = add128(d8, d9);
689
+ d1 = add128(d10, d1);
690
+ d4 = add128(d3, d4);
691
+ d5 = add128(d9, d5);
692
+ d6 = xor128(d1, d6);
693
+ d2 = add128(d0, d2);
694
+
695
+ const t: M128i[] = [d0, d3, d9, d1, d4, d5, d6, d2];
696
+ const tBuf = m128iToBuffer(t);
697
+ return xoHash64(tBuf, 128);
698
+ }
699
+
700
+ function teHash64(buf: Buffer, len: number): bigint {
701
+ if (len >= 512) {
702
+ return teHash64Long(buf, len, k2, k1);
703
+ }
704
+ return xoHash64(buf, len);
705
+ }
706
+
373
707
  /**************************************************************************
374
708
  * FARMHASH NA - HashLen33to64 (used by fingerprint64)
375
709
  ***************************************************************************/
@@ -527,41 +861,85 @@ function debugTweak32(x: number): number {
527
861
 
528
862
  /**************************************************************************
529
863
  * PUBLIC API - LEGACY (with DebugTweak, compatible with farmhash v3.3.1)
864
+ *
865
+ * Note: farmhash v3.3.1 produces different results on ARM64 vs x86_64 for:
866
+ * - hash64: Different for strings ≥512 bytes
867
+ * - hash32: Different for ALL strings (different algorithms)
530
868
  ***************************************************************************/
531
869
 
532
870
  /**
533
- * Compute a 64-bit hash compatible with farmhash v3.3.1 hash64()
871
+ * Compute a 64-bit hash compatible with farmhash v3.3.1 hash64() on ARM64
872
+ * Also matches x86_64 for strings <512 bytes
534
873
  * @param input - The string to hash
535
874
  * @returns The hash as a decimal string
536
875
  */
537
- export function legacyHash64(input: string): string {
876
+ export function legacyHash64_arm(input: string): string {
538
877
  const buf = Buffer.from(input);
539
878
  const rawHash = xoHash64(buf, buf.length);
540
879
  return debugTweak64(rawHash).toString();
541
880
  }
542
881
 
543
882
  /**
544
- * Compute a 64-bit hash compatible with farmhash v3.3.1 hash64()
883
+ * Compute a 64-bit hash compatible with farmhash v3.3.1 hash64() on x86_64
884
+ * Uses farmhashte algorithm (SIMD simulation for ≥512 bytes)
885
+ * @param input - The string to hash
886
+ * @returns The hash as a decimal string
887
+ */
888
+ export function legacyHash64_x86(input: string): string {
889
+ const buf = Buffer.from(input);
890
+ const rawHash = teHash64(buf, buf.length);
891
+ return debugTweak64(rawHash).toString();
892
+ }
893
+
894
+ /**
895
+ * Compute a 64-bit hash compatible with farmhash v3.3.1 hash64() on ARM64
896
+ * Also matches x86_64 for strings <512 bytes
545
897
  * @param input - The string to hash
546
898
  * @returns The hash as a BigInt
547
899
  */
548
- export function legacyHash64BigInt(input: string): bigint {
900
+ export function legacyHash64BigInt_arm(input: string): bigint {
549
901
  const buf = Buffer.from(input);
550
902
  const rawHash = xoHash64(buf, buf.length);
551
903
  return debugTweak64(rawHash);
552
904
  }
553
905
 
554
906
  /**
555
- * Compute a 32-bit hash compatible with farmhash v3.3.1 hash32()
907
+ * Compute a 64-bit hash compatible with farmhash v3.3.1 hash64() on x86_64
908
+ * Uses farmhashte algorithm (SIMD simulation for ≥512 bytes)
909
+ * @param input - The string to hash
910
+ * @returns The hash as a BigInt
911
+ */
912
+ export function legacyHash64BigInt_x86(input: string): bigint {
913
+ const buf = Buffer.from(input);
914
+ const rawHash = teHash64(buf, buf.length);
915
+ return debugTweak64(rawHash);
916
+ }
917
+
918
+ /**
919
+ * Compute a 32-bit hash compatible with farmhash v3.3.1 hash32() on ARM64
920
+ * Uses farmhashmk algorithm
556
921
  * @param input - The string to hash
557
922
  * @returns The hash as a number
558
923
  */
559
- export function legacyHash32(input: string): number {
924
+ export function legacyHash32_arm(input: string): number {
560
925
  const buf = Buffer.from(input);
561
926
  const rawHash = mkHash32(buf, buf.length);
562
927
  return debugTweak32(rawHash);
563
928
  }
564
929
 
930
+ /**
931
+ * Compute a 32-bit hash compatible with farmhash v3.3.1 hash32() on x86_64
932
+ * Uses lower32(farmhashte::Hash64) algorithm (SIMD simulation for ≥512 bytes)
933
+ * @param input - The string to hash
934
+ * @returns The hash as a number
935
+ */
936
+ export function legacyHash32_x86(input: string): number {
937
+ const buf = Buffer.from(input);
938
+ const rawHash64 = teHash64(buf, buf.length);
939
+ const lower32 = Number(rawHash64 & 0xFFFFFFFFn);
940
+ return debugTweak32(lower32);
941
+ }
942
+
565
943
  /**************************************************************************
566
944
  * PUBLIC API - MODERN (stable fingerprints, same as farmhash v5)
567
945
  ***************************************************************************/
@@ -617,10 +995,13 @@ export const hash32 = fingerprint32;
617
995
  ***************************************************************************/
618
996
 
619
997
  export default {
620
- // Legacy (farmhash v3.3.1 compatible)
621
- legacyHash64,
622
- legacyHash64BigInt,
623
- legacyHash32,
998
+ // Legacy (farmhash v3.3.1 compatible) - explicit architecture
999
+ legacyHash64_arm,
1000
+ legacyHash64_x86,
1001
+ legacyHash64BigInt_arm,
1002
+ legacyHash64BigInt_x86,
1003
+ legacyHash32_arm,
1004
+ legacyHash32_x86,
624
1005
  // Modern stable fingerprints
625
1006
  fingerprint64,
626
1007
  fingerprint64BigInt,