diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /js/src/jit-test/tests/cacheir/load-typed-element-bigint.js | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/jit-test/tests/cacheir/load-typed-element-bigint.js')
-rw-r--r-- | js/src/jit-test/tests/cacheir/load-typed-element-bigint.js | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/cacheir/load-typed-element-bigint.js b/js/src/jit-test/tests/cacheir/load-typed-element-bigint.js new file mode 100644 index 0000000000..926cd9026e --- /dev/null +++ b/js/src/jit-test/tests/cacheir/load-typed-element-bigint.js @@ -0,0 +1,100 @@ +// Different typed array types to ensure we emit a GetProp IC. +var xs = [ + new BigInt64Array(10), + new BigUint64Array(10), +]; + +// Load 0n value. +function loadConstantZero() { + var value = 0n; + + xs[0][0] = value; + xs[1][0] = value; + + var ys = [ + BigInt.asIntN(64, value), + BigInt.asUintN(64, value), + ]; + + for (var i = 0; i < 100; ++i) { + var ta = xs[i & 1]; + assertEq(ta[0], ys[i & 1]); + } +} +loadConstantZero(); + +// Load non-negative BigInt using inline digits. +function loadInlineDigits() { + var value = 1n; + + xs[0][0] = value; + xs[1][0] = value; + + var ys = [ + BigInt.asIntN(64, value), + BigInt.asUintN(64, value), + ]; + + for (var i = 0; i < 100; ++i) { + var ta = xs[i & 1]; + assertEq(ta[0], ys[i & 1]); + } +} +loadInlineDigits(); + +// Load negative BigInt using inline digits. +function loadInlineDigitsNegative() { + var value = -1n; + + xs[0][0] = value; + xs[1][0] = value; + + var ys = [ + BigInt.asIntN(64, value), + BigInt.asUintN(64, value), + ]; + + for (var i = 0; i < 100; ++i) { + var ta = xs[i & 1]; + assertEq(ta[0], ys[i & 1]); + } +} +loadInlineDigitsNegative(); + +// Still inline digits, but now two digits on 32-bit platforms +function loadInlineDigitsTwoDigits() { + var value = 4294967296n; + + xs[0][0] = value; + xs[1][0] = value; + + var ys = [ + BigInt.asIntN(64, value), + BigInt.asUintN(64, value), + ]; + + for (var i = 0; i < 100; ++i) { + var ta = xs[i & 1]; + assertEq(ta[0], ys[i & 1]); + } +} +loadInlineDigitsTwoDigits(); + +// Negative case of |storeInlineDigitsTwoDigits|. +function loadInlineDigitsTwoDigitsNegative() { + var value = -4294967296n; + + xs[0][0] = value; + xs[1][0] = value; + + var ys = [ + BigInt.asIntN(64, value), + BigInt.asUintN(64, value), + ]; + + for (var i = 0; i < 100; ++i) { + var ta = xs[i & 1]; + assertEq(ta[0], ys[i & 1]); + } +} +loadInlineDigitsTwoDigitsNegative(); |