summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/cacheir/load-typed-element-bigint.js
diff options
context:
space:
mode:
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.js100
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();