@fluffylabs/anan-as 1.2.0-41e43f6 → 1.2.0-5196d29

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.
Files changed (77) hide show
  1. package/dist/bin/index.js +3 -2
  2. package/dist/bin/src/fuzz.js +1 -1
  3. package/dist/bin/src/test-json.js +2 -6
  4. package/dist/bin/src/trace-replay.js +8 -4
  5. package/dist/build/compiler-inline.js +1 -1
  6. package/dist/build/compiler.d.ts +2 -13
  7. package/dist/build/compiler.js +1 -25
  8. package/dist/build/compiler.wasm +0 -0
  9. package/dist/build/debug-inline.js +1 -1
  10. package/dist/build/debug-raw-inline.js +1 -1
  11. package/dist/build/debug-raw.d.ts +27 -25
  12. package/dist/build/debug-raw.js +58 -57
  13. package/dist/build/debug-raw.wasm +0 -0
  14. package/dist/build/debug.d.ts +27 -25
  15. package/dist/build/debug.js +59 -58
  16. package/dist/build/debug.wasm +0 -0
  17. package/dist/build/js/assembly/api-debugger.d.ts +3 -3
  18. package/dist/build/js/assembly/api-debugger.js +6 -6
  19. package/dist/build/js/assembly/api-internal.d.ts +1 -1
  20. package/dist/build/js/assembly/api-internal.js +2 -3
  21. package/dist/build/js/assembly/api-types.d.ts +0 -1
  22. package/dist/build/js/assembly/api-types.js +0 -1
  23. package/dist/build/js/assembly/api-utils.d.ts +12 -5
  24. package/dist/build/js/assembly/api-utils.js +28 -13
  25. package/dist/build/js/assembly/arguments.d.ts +4 -4
  26. package/dist/build/js/assembly/arguments.js +10 -10
  27. package/dist/build/js/assembly/gas.d.ts +1 -1
  28. package/dist/build/js/assembly/gas.js +3 -2
  29. package/dist/build/js/assembly/instructions/bit.js +22 -22
  30. package/dist/build/js/assembly/instructions/branch.js +56 -56
  31. package/dist/build/js/assembly/instructions/jump.js +10 -10
  32. package/dist/build/js/assembly/instructions/load.js +41 -41
  33. package/dist/build/js/assembly/instructions/logic.js +20 -20
  34. package/dist/build/js/assembly/instructions/math.js +105 -105
  35. package/dist/build/js/assembly/instructions/misc.js +10 -10
  36. package/dist/build/js/assembly/instructions/mov.js +16 -16
  37. package/dist/build/js/assembly/instructions/outcome.d.ts +7 -7
  38. package/dist/build/js/assembly/instructions/outcome.js +63 -36
  39. package/dist/build/js/assembly/instructions/rot.js +18 -18
  40. package/dist/build/js/assembly/instructions/set.js +18 -18
  41. package/dist/build/js/assembly/instructions/shift.js +59 -59
  42. package/dist/build/js/assembly/instructions/store.js +29 -29
  43. package/dist/build/js/assembly/instructions/utils.d.ts +6 -4
  44. package/dist/build/js/assembly/instructions/utils.js +32 -16
  45. package/dist/build/js/assembly/instructions.d.ts +2 -3
  46. package/dist/build/js/assembly/instructions.js +4 -4
  47. package/dist/build/js/assembly/interpreter.d.ts +0 -1
  48. package/dist/build/js/assembly/interpreter.js +15 -22
  49. package/dist/build/js/assembly/math.d.ts +6 -8
  50. package/dist/build/js/assembly/math.js +21 -13
  51. package/dist/build/js/assembly/memory.js +9 -7
  52. package/dist/build/js/assembly/portable.js +1 -0
  53. package/dist/build/js/assembly/program-build.js +4 -4
  54. package/dist/build/js/assembly/program.d.ts +15 -8
  55. package/dist/build/js/assembly/program.js +90 -40
  56. package/dist/build/js/assembly/spi.d.ts +1 -1
  57. package/dist/build/js/assembly/spi.js +2 -2
  58. package/dist/build/js/portable-bundle.js +666 -579
  59. package/dist/build/release-inline.js +1 -1
  60. package/dist/build/release-mini-inline.js +1 -1
  61. package/dist/build/release-mini.d.ts +27 -25
  62. package/dist/build/release-mini.js +59 -58
  63. package/dist/build/release-mini.wasm +0 -0
  64. package/dist/build/release-stub-inline.js +1 -1
  65. package/dist/build/release-stub.d.ts +27 -25
  66. package/dist/build/release-stub.js +59 -58
  67. package/dist/build/release-stub.wasm +0 -0
  68. package/dist/build/release.d.ts +27 -25
  69. package/dist/build/release.js +59 -58
  70. package/dist/build/release.wasm +0 -0
  71. package/dist/build/test-inline.js +1 -1
  72. package/dist/build/test.wasm +0 -0
  73. package/dist/test/test-gas-cost.js +2 -3
  74. package/dist/test/test-w3f-common.js +1 -2
  75. package/package.json +7 -7
  76. package/dist/build/js/assembly/gas-costs.d.ts +0 -6
  77. package/dist/build/js/assembly/gas-costs.js +0 -39
@@ -28,6 +28,7 @@ var portable = class _portable {
28
28
  arr.fill(0);
29
29
  return arr;
30
30
  };
31
+ g2.StaticArray.fromArray = (x) => x;
31
32
  g2.ASC_TARGET = 0;
32
33
  g2.i8 = (value) => {
33
34
  const n = typeof value === "bigint" ? Number(value) : value;
@@ -739,12 +740,28 @@ if (typeof globalScope.ASC_TARGET === "undefined") {
739
740
  }
740
741
 
741
742
  // dist/build/js/assembly/math.js
742
- function minI32(a, b) {
743
- return a < b ? a : b;
744
- }
745
- function minU32(a, b) {
746
- return a < b ? a : b;
747
- }
743
+ var __decorate2 = function(decorators, target, key, desc) {
744
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
745
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
746
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
747
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
748
+ };
749
+ var IntMath = class {
750
+ /** Integer minimum of two i32 values. */
751
+ static minI32(a, b) {
752
+ return a < b ? a : b;
753
+ }
754
+ /** Unsigned integer minimum of two u32 values. */
755
+ static minU32(a, b) {
756
+ return a < b ? a : b;
757
+ }
758
+ };
759
+ __decorate2([
760
+ inline
761
+ ], IntMath, "minI32", null);
762
+ __decorate2([
763
+ inline
764
+ ], IntMath, "minU32", null);
748
765
 
749
766
  // dist/build/js/assembly/arguments.js
750
767
  var Arguments;
@@ -763,8 +780,8 @@ var Arguments;
763
780
  Arguments2[Arguments2["TwoRegTwoImm"] = 11] = "TwoRegTwoImm";
764
781
  Arguments2[Arguments2["ThreeReg"] = 12] = "ThreeReg";
765
782
  })(Arguments || (Arguments = {}));
766
- var RELEVANT_ARGS = [0, 1, 2, 1, 2, 3, 3, 3, 2, 3, 3, 4, 3];
767
- var REQUIRED_BYTES = [0, 0, 1, 0, 1, 9, 1, 1, 1, 1, 1, 2, 2];
783
+ var RELEVANT_ARGS = StaticArray.fromArray([0, 1, 2, 1, 2, 3, 3, 3, 2, 3, 3, 4, 3]);
784
+ var REQUIRED_BYTES = StaticArray.fromArray([0, 0, 1, 0, 1, 9, 1, 1, 1, 1, 1, 2, 2]);
768
785
  var Args = class {
769
786
  constructor() {
770
787
  this.a = 0;
@@ -781,13 +798,13 @@ var Args = class {
781
798
  }
782
799
  };
783
800
  function twoImm(args, code, offset, end) {
784
- const low = lowNibble(portable.arrayAt(code, offset));
785
- const split = minI32(4, low) + 1;
801
+ const low = lowNibble(portable.staticArrayAt(code, offset));
802
+ const split = IntMath.minI32(4, low) + 1;
786
803
  const first = decodeI32(code, offset + 1, offset + split);
787
804
  const second = decodeI32(code, offset + split, end);
788
805
  return args.fill(first, second, 0, 0);
789
806
  }
790
- var DECODERS = [
807
+ var DECODERS = StaticArray.fromArray([
791
808
  // DECODERS[Arguments.Zero] =
792
809
  (args, _d, _o, _l) => {
793
810
  return args.fill(0, 0, 0, 0);
@@ -817,7 +834,7 @@ var DECODERS = [
817
834
  (args, data, o, lim) => {
818
835
  const h = higNibble(data[o]);
819
836
  const l = lowNibble(data[o]);
820
- const split = minI32(4, h) + 1;
837
+ const split = IntMath.minI32(4, h) + 1;
821
838
  const immA = decodeI32(data, o + 1, o + split);
822
839
  const immB = decodeI32(data, o + split, lim);
823
840
  return args.fill(l, immA, immB, 0);
@@ -826,7 +843,7 @@ var DECODERS = [
826
843
  (args, data, o, lim) => {
827
844
  const h = higNibble(data[o]);
828
845
  const l = lowNibble(data[o]);
829
- const split = minI32(4, h) + 1;
846
+ const split = IntMath.minI32(4, h) + 1;
830
847
  const immA = decodeI32(data, o + 1, o + split);
831
848
  const offs = decodeI32(data, o + split, lim);
832
849
  return args.fill(l, immA, offs, 0);
@@ -861,7 +878,7 @@ var DECODERS = [
861
878
  const b = lowNibble(data[o + 1]);
862
879
  return args.fill(hig, low, b, 0);
863
880
  }
864
- ];
881
+ ]);
865
882
  function lowNibble(byte) {
866
883
  return byte & 15;
867
884
  }
@@ -878,7 +895,7 @@ function decodeI32(input, start, end) {
878
895
  for (let i = 0; i < len; i++) {
879
896
  num |= u32(input[start + i]) << i * 8;
880
897
  }
881
- const msb = portable.arrayAt(input, start + len - 1) & 128;
898
+ const msb = portable.staticArrayAt(input, start + len - 1) & 128;
882
899
  if (len < 4 && msb > 0) {
883
900
  num |= 4294967295 << len * 8;
884
901
  }
@@ -893,7 +910,7 @@ function decodeU32(data, offset) {
893
910
  }
894
911
 
895
912
  // dist/build/js/assembly/gas.js
896
- var __decorate2 = function(decorators, target, key, desc) {
913
+ var __decorate3 = function(decorators, target, key, desc) {
897
914
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
898
915
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
899
916
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -913,15 +930,16 @@ var GasCounter = class {
913
930
  return this.gas;
914
931
  }
915
932
  sub(g2) {
916
- if (g2 > this.gas) {
933
+ const cost = u64(g2);
934
+ if (cost > this.gas) {
917
935
  this.gas = u64(0);
918
936
  return true;
919
937
  }
920
- this.gas = this.gas - g2;
938
+ this.gas = this.gas - cost;
921
939
  return false;
922
940
  }
923
941
  };
924
- __decorate2([
942
+ __decorate3([
925
943
  inline
926
944
  ], GasCounter.prototype, "sub", null);
927
945
 
@@ -930,7 +948,7 @@ var Instruction = class {
930
948
  constructor() {
931
949
  this.name = "";
932
950
  this.kind = Arguments.Zero;
933
- this.gas = u64(0);
951
+ this.gas = u32(0);
934
952
  this.isTerminating = false;
935
953
  }
936
954
  };
@@ -938,13 +956,13 @@ function instruction(name, kind, gas, isTerminating = false) {
938
956
  const i = new Instruction();
939
957
  i.name = name;
940
958
  i.kind = kind;
941
- i.gas = u64(gas);
959
+ i.gas = u32(gas);
942
960
  i.isTerminating = isTerminating;
943
961
  return i;
944
962
  }
945
963
  var MISSING_INSTRUCTION = instruction("INVALID", Arguments.Zero, 1, false);
946
964
  var SBRK = instruction("SBRK", Arguments.TwoReg, 1);
947
- var INSTRUCTIONS = [
965
+ var INSTRUCTIONS = StaticArray.fromArray([
948
966
  /* 000 */
949
967
  instruction("TRAP", Arguments.Zero, 1, true),
950
968
  /* 001 */
@@ -1315,9 +1333,15 @@ var INSTRUCTIONS = [
1315
1333
  instruction("MIN", Arguments.ThreeReg, 1),
1316
1334
  /* 230 */
1317
1335
  instruction("MIN_U", Arguments.ThreeReg, 1)
1318
- ];
1336
+ ]);
1319
1337
 
1320
1338
  // dist/build/js/assembly/instructions/outcome.js
1339
+ var __decorate4 = function(decorators, target, key, desc) {
1340
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1341
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1342
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1343
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1344
+ };
1321
1345
  var Result;
1322
1346
  (function(Result2) {
1323
1347
  Result2[Result2["PANIC"] = 0] = "PANIC";
@@ -1332,7 +1356,7 @@ var Outcome;
1332
1356
  Outcome2[Outcome2["DynamicJump"] = 2] = "DynamicJump";
1333
1357
  Outcome2[Outcome2["Result"] = 3] = "Result";
1334
1358
  })(Outcome || (Outcome = {}));
1335
- var OutcomeData = class {
1359
+ var OutcomeData = class _OutcomeData {
1336
1360
  constructor() {
1337
1361
  this.outcome = Outcome.Ok;
1338
1362
  this.staticJump = 0;
@@ -1340,42 +1364,63 @@ var OutcomeData = class {
1340
1364
  this.result = Result.PANIC;
1341
1365
  this.exitCode = 0;
1342
1366
  }
1343
- };
1344
- function status(r, result) {
1345
- r.outcome = Outcome.Result;
1346
- r.result = result;
1347
- return r;
1348
- }
1349
- function staticJump(r, offset) {
1350
- r.outcome = Outcome.StaticJump;
1351
- r.staticJump = offset;
1352
- return r;
1353
- }
1354
- function dJump(r, address) {
1355
- r.outcome = Outcome.DynamicJump;
1356
- r.dJump = address;
1357
- return r;
1358
- }
1359
- function ok(r) {
1360
- return r;
1361
- }
1362
- function panic(r) {
1363
- return status(r, Result.PANIC);
1364
- }
1365
- function hostCall(r, id) {
1366
- r.outcome = Outcome.Result;
1367
- r.result = Result.HOST;
1368
- r.exitCode = id;
1369
- return r;
1370
- }
1371
- function okOrFault(r, pageFault) {
1372
- if (pageFault.isFault) {
1367
+ static status(r, result) {
1373
1368
  r.outcome = Outcome.Result;
1374
- r.result = pageFault.isAccess ? Result.FAULT_ACCESS : Result.FAULT;
1375
- r.exitCode = pageFault.fault;
1369
+ r.result = result;
1370
+ return r;
1376
1371
  }
1377
- return r;
1378
- }
1372
+ static staticJump(r, offset) {
1373
+ r.outcome = Outcome.StaticJump;
1374
+ r.staticJump = offset;
1375
+ return r;
1376
+ }
1377
+ static dJump(r, address) {
1378
+ r.outcome = Outcome.DynamicJump;
1379
+ r.dJump = address;
1380
+ return r;
1381
+ }
1382
+ static ok(r) {
1383
+ return r;
1384
+ }
1385
+ static panic(r) {
1386
+ return _OutcomeData.status(r, Result.PANIC);
1387
+ }
1388
+ static hostCall(r, id) {
1389
+ r.outcome = Outcome.Result;
1390
+ r.result = Result.HOST;
1391
+ r.exitCode = id;
1392
+ return r;
1393
+ }
1394
+ static okOrFault(r, pageFault) {
1395
+ if (pageFault.isFault) {
1396
+ r.outcome = Outcome.Result;
1397
+ r.result = pageFault.isAccess ? Result.FAULT_ACCESS : Result.FAULT;
1398
+ r.exitCode = pageFault.fault;
1399
+ }
1400
+ return r;
1401
+ }
1402
+ };
1403
+ __decorate4([
1404
+ inline
1405
+ ], OutcomeData, "status", null);
1406
+ __decorate4([
1407
+ inline
1408
+ ], OutcomeData, "staticJump", null);
1409
+ __decorate4([
1410
+ inline
1411
+ ], OutcomeData, "dJump", null);
1412
+ __decorate4([
1413
+ inline
1414
+ ], OutcomeData, "ok", null);
1415
+ __decorate4([
1416
+ inline
1417
+ ], OutcomeData, "panic", null);
1418
+ __decorate4([
1419
+ inline
1420
+ ], OutcomeData, "hostCall", null);
1421
+ __decorate4([
1422
+ inline
1423
+ ], OutcomeData, "okOrFault", null);
1379
1424
 
1380
1425
  // dist/build/js/assembly/registers.js
1381
1426
  var NO_OF_REGISTERS = 13;
@@ -1389,6 +1434,12 @@ function newRegisters() {
1389
1434
  }
1390
1435
 
1391
1436
  // dist/build/js/assembly/instructions/utils.js
1437
+ var __decorate5 = function(decorators, target, key, desc) {
1438
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1439
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1440
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1441
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1442
+ };
1392
1443
  function mulUpperUnsigned(a, b) {
1393
1444
  const aHigh = a >> u64(32);
1394
1445
  const aLow = a & u64(4294967295);
@@ -1429,183 +1480,197 @@ function mulUpperSignedUnsigned(a, b) {
1429
1480
  }
1430
1481
  return mulUpperUnsigned(a, b);
1431
1482
  }
1432
- function u8SignExtend(v) {
1433
- return u64(i64(i32(i16(i8(v)))));
1434
- }
1435
- function u16SignExtend(v) {
1436
- return u64(i64(i32(i16(v))));
1437
- }
1438
- function u32SignExtend(v) {
1439
- return u64(i64(i32(v)));
1440
- }
1441
- function reg(v) {
1442
- return v >= u64(NO_OF_REGISTERS) ? NO_OF_REGISTERS - 1 : u32(v);
1443
- }
1483
+ var Inst = class {
1484
+ static u8SignExtend(v) {
1485
+ return u64(i64(i32(i16(i8(v)))));
1486
+ }
1487
+ static u16SignExtend(v) {
1488
+ return u64(i64(i32(i16(v))));
1489
+ }
1490
+ static u32SignExtend(v) {
1491
+ return u64(i64(i32(v)));
1492
+ }
1493
+ static reg(v) {
1494
+ return v >= u64(NO_OF_REGISTERS) ? NO_OF_REGISTERS - 1 : u32(v);
1495
+ }
1496
+ };
1497
+ __decorate5([
1498
+ inline
1499
+ ], Inst, "u8SignExtend", null);
1500
+ __decorate5([
1501
+ inline
1502
+ ], Inst, "u16SignExtend", null);
1503
+ __decorate5([
1504
+ inline
1505
+ ], Inst, "u32SignExtend", null);
1506
+ __decorate5([
1507
+ inline
1508
+ ], Inst, "reg", null);
1444
1509
 
1445
1510
  // dist/build/js/assembly/instructions/bit.js
1446
1511
  var count_set_bits_64 = (r, args, regs) => {
1447
- regs[reg(args.b)] = portable.popcnt_u64(regs[reg(args.a)]);
1448
- return ok(r);
1512
+ regs[Inst.reg(args.b)] = portable.popcnt_u64(regs[Inst.reg(args.a)]);
1513
+ return OutcomeData.ok(r);
1449
1514
  };
1450
1515
  var count_set_bits_32 = (r, args, regs) => {
1451
- regs[reg(args.b)] = u64(portable.popcnt_u32(u32(regs[reg(args.a)])));
1452
- return ok(r);
1516
+ regs[Inst.reg(args.b)] = u64(portable.popcnt_u32(u32(regs[Inst.reg(args.a)])));
1517
+ return OutcomeData.ok(r);
1453
1518
  };
1454
1519
  var leading_zero_bits_64 = (r, args, regs) => {
1455
- regs[reg(args.b)] = portable.clz_u64(regs[reg(args.a)]);
1456
- return ok(r);
1520
+ regs[Inst.reg(args.b)] = portable.clz_u64(regs[Inst.reg(args.a)]);
1521
+ return OutcomeData.ok(r);
1457
1522
  };
1458
1523
  var leading_zero_bits_32 = (r, args, regs) => {
1459
- regs[reg(args.b)] = u64(portable.clz_u32(u32(regs[reg(args.a)])));
1460
- return ok(r);
1524
+ regs[Inst.reg(args.b)] = u64(portable.clz_u32(u32(regs[Inst.reg(args.a)])));
1525
+ return OutcomeData.ok(r);
1461
1526
  };
1462
1527
  var trailing_zero_bits_64 = (r, args, regs) => {
1463
- regs[reg(args.b)] = portable.ctz_u64(regs[reg(args.a)]);
1464
- return ok(r);
1528
+ regs[Inst.reg(args.b)] = portable.ctz_u64(regs[Inst.reg(args.a)]);
1529
+ return OutcomeData.ok(r);
1465
1530
  };
1466
1531
  var trailing_zero_bits_32 = (r, args, regs) => {
1467
- regs[reg(args.b)] = u64(portable.ctz_u32(u32(regs[reg(args.a)])));
1468
- return ok(r);
1532
+ regs[Inst.reg(args.b)] = u64(portable.ctz_u32(u32(regs[Inst.reg(args.a)])));
1533
+ return OutcomeData.ok(r);
1469
1534
  };
1470
1535
  var sign_extend_8 = (r, args, regs) => {
1471
- regs[reg(args.b)] = u8SignExtend(u8(regs[reg(args.a)]));
1472
- return ok(r);
1536
+ regs[Inst.reg(args.b)] = Inst.u8SignExtend(u8(regs[Inst.reg(args.a)]));
1537
+ return OutcomeData.ok(r);
1473
1538
  };
1474
1539
  var sign_extend_16 = (r, args, regs) => {
1475
- regs[reg(args.b)] = u16SignExtend(u16(regs[reg(args.a)]));
1476
- return ok(r);
1540
+ regs[Inst.reg(args.b)] = Inst.u16SignExtend(u16(regs[Inst.reg(args.a)]));
1541
+ return OutcomeData.ok(r);
1477
1542
  };
1478
1543
  var zero_extend_16 = (r, args, regs) => {
1479
- regs[reg(args.b)] = u64(u16(regs[reg(args.a)]));
1480
- return ok(r);
1544
+ regs[Inst.reg(args.b)] = u64(u16(regs[Inst.reg(args.a)]));
1545
+ return OutcomeData.ok(r);
1481
1546
  };
1482
1547
  var reverse_bytes = (r, args, regs) => {
1483
- regs[reg(args.b)] = portable.bswap_u64(regs[reg(args.a)]);
1484
- return ok(r);
1548
+ regs[Inst.reg(args.b)] = portable.bswap_u64(regs[Inst.reg(args.a)]);
1549
+ return OutcomeData.ok(r);
1485
1550
  };
1486
1551
 
1487
1552
  // dist/build/js/assembly/instructions/branch.js
1488
1553
  var branch_eq_imm = (r, args, registers) => {
1489
- const b = u64(u32SignExtend(args.b));
1490
- if (registers[reg(args.a)] === b) {
1491
- return staticJump(r, args.c);
1554
+ const b = u64(Inst.u32SignExtend(args.b));
1555
+ if (registers[Inst.reg(args.a)] === b) {
1556
+ return OutcomeData.staticJump(r, args.c);
1492
1557
  }
1493
- return ok(r);
1558
+ return OutcomeData.ok(r);
1494
1559
  };
1495
1560
  var branch_ne_imm = (r, args, registers) => {
1496
- const b = u64(u32SignExtend(args.b));
1497
- if (registers[reg(args.a)] !== b) {
1498
- return staticJump(r, args.c);
1561
+ const b = u64(Inst.u32SignExtend(args.b));
1562
+ if (registers[Inst.reg(args.a)] !== b) {
1563
+ return OutcomeData.staticJump(r, args.c);
1499
1564
  }
1500
- return ok(r);
1565
+ return OutcomeData.ok(r);
1501
1566
  };
1502
1567
  var branch_lt_u_imm = (r, args, registers) => {
1503
- const b = u64(u32SignExtend(args.b));
1504
- if (registers[reg(args.a)] < b) {
1505
- return staticJump(r, args.c);
1568
+ const b = u64(Inst.u32SignExtend(args.b));
1569
+ if (registers[Inst.reg(args.a)] < b) {
1570
+ return OutcomeData.staticJump(r, args.c);
1506
1571
  }
1507
- return ok(r);
1572
+ return OutcomeData.ok(r);
1508
1573
  };
1509
1574
  var branch_le_u_imm = (r, args, registers) => {
1510
- const b = u64(u32SignExtend(args.b));
1511
- if (registers[reg(args.a)] <= b) {
1512
- return staticJump(r, args.c);
1575
+ const b = u64(Inst.u32SignExtend(args.b));
1576
+ if (registers[Inst.reg(args.a)] <= b) {
1577
+ return OutcomeData.staticJump(r, args.c);
1513
1578
  }
1514
- return ok(r);
1579
+ return OutcomeData.ok(r);
1515
1580
  };
1516
1581
  var branch_ge_u_imm = (r, args, registers) => {
1517
- const b = u64(u32SignExtend(args.b));
1518
- if (registers[reg(args.a)] >= b) {
1519
- return staticJump(r, args.c);
1582
+ const b = u64(Inst.u32SignExtend(args.b));
1583
+ if (registers[Inst.reg(args.a)] >= b) {
1584
+ return OutcomeData.staticJump(r, args.c);
1520
1585
  }
1521
- return ok(r);
1586
+ return OutcomeData.ok(r);
1522
1587
  };
1523
1588
  var branch_gt_u_imm = (r, args, registers) => {
1524
- const b = u64(u32SignExtend(args.b));
1525
- if (registers[reg(args.a)] > b) {
1526
- return staticJump(r, args.c);
1589
+ const b = u64(Inst.u32SignExtend(args.b));
1590
+ if (registers[Inst.reg(args.a)] > b) {
1591
+ return OutcomeData.staticJump(r, args.c);
1527
1592
  }
1528
- return ok(r);
1593
+ return OutcomeData.ok(r);
1529
1594
  };
1530
1595
  var branch_lt_s_imm = (r, args, registers) => {
1531
- if (i64(registers[reg(args.a)]) < i64(u32SignExtend(args.b))) {
1532
- return staticJump(r, args.c);
1596
+ if (i64(registers[Inst.reg(args.a)]) < i64(Inst.u32SignExtend(args.b))) {
1597
+ return OutcomeData.staticJump(r, args.c);
1533
1598
  }
1534
- return ok(r);
1599
+ return OutcomeData.ok(r);
1535
1600
  };
1536
1601
  var branch_le_s_imm = (r, args, registers) => {
1537
- if (i64(registers[reg(args.a)]) <= i64(u32SignExtend(args.b))) {
1538
- return staticJump(r, args.c);
1602
+ if (i64(registers[Inst.reg(args.a)]) <= i64(Inst.u32SignExtend(args.b))) {
1603
+ return OutcomeData.staticJump(r, args.c);
1539
1604
  }
1540
- return ok(r);
1605
+ return OutcomeData.ok(r);
1541
1606
  };
1542
1607
  var branch_ge_s_imm = (r, args, registers) => {
1543
- if (i64(registers[reg(args.a)]) >= i64(u32SignExtend(args.b))) {
1544
- return staticJump(r, args.c);
1608
+ if (i64(registers[Inst.reg(args.a)]) >= i64(Inst.u32SignExtend(args.b))) {
1609
+ return OutcomeData.staticJump(r, args.c);
1545
1610
  }
1546
- return ok(r);
1611
+ return OutcomeData.ok(r);
1547
1612
  };
1548
1613
  var branch_gt_s_imm = (r, args, registers) => {
1549
- if (i64(registers[reg(args.a)]) > i64(u32SignExtend(args.b))) {
1550
- return staticJump(r, args.c);
1614
+ if (i64(registers[Inst.reg(args.a)]) > i64(Inst.u32SignExtend(args.b))) {
1615
+ return OutcomeData.staticJump(r, args.c);
1551
1616
  }
1552
- return ok(r);
1617
+ return OutcomeData.ok(r);
1553
1618
  };
1554
1619
  var branch_eq = (r, args, registers) => {
1555
- if (registers[reg(args.a)] === registers[reg(args.b)]) {
1556
- return staticJump(r, args.c);
1620
+ if (registers[Inst.reg(args.a)] === registers[Inst.reg(args.b)]) {
1621
+ return OutcomeData.staticJump(r, args.c);
1557
1622
  }
1558
- return ok(r);
1623
+ return OutcomeData.ok(r);
1559
1624
  };
1560
1625
  var branch_ne = (r, args, registers) => {
1561
- if (registers[reg(args.a)] !== registers[reg(args.b)]) {
1562
- return staticJump(r, args.c);
1626
+ if (registers[Inst.reg(args.a)] !== registers[Inst.reg(args.b)]) {
1627
+ return OutcomeData.staticJump(r, args.c);
1563
1628
  }
1564
- return ok(r);
1629
+ return OutcomeData.ok(r);
1565
1630
  };
1566
1631
  var branch_lt_u = (r, args, registers) => {
1567
- if (registers[reg(args.b)] < registers[reg(args.a)]) {
1568
- return staticJump(r, args.c);
1632
+ if (registers[Inst.reg(args.b)] < registers[Inst.reg(args.a)]) {
1633
+ return OutcomeData.staticJump(r, args.c);
1569
1634
  }
1570
- return ok(r);
1635
+ return OutcomeData.ok(r);
1571
1636
  };
1572
1637
  var branch_lt_s = (r, args, registers) => {
1573
- if (i64(registers[reg(args.b)]) < i64(registers[reg(args.a)])) {
1574
- return staticJump(r, args.c);
1638
+ if (i64(registers[Inst.reg(args.b)]) < i64(registers[Inst.reg(args.a)])) {
1639
+ return OutcomeData.staticJump(r, args.c);
1575
1640
  }
1576
- return ok(r);
1641
+ return OutcomeData.ok(r);
1577
1642
  };
1578
1643
  var branch_ge_u = (r, args, registers) => {
1579
- if (registers[reg(args.b)] >= registers[reg(args.a)]) {
1580
- return staticJump(r, args.c);
1644
+ if (registers[Inst.reg(args.b)] >= registers[Inst.reg(args.a)]) {
1645
+ return OutcomeData.staticJump(r, args.c);
1581
1646
  }
1582
- return ok(r);
1647
+ return OutcomeData.ok(r);
1583
1648
  };
1584
1649
  var branch_ge_s = (r, args, registers) => {
1585
- if (i64(registers[reg(args.b)]) >= i64(registers[reg(args.a)])) {
1586
- return staticJump(r, args.c);
1650
+ if (i64(registers[Inst.reg(args.b)]) >= i64(registers[Inst.reg(args.a)])) {
1651
+ return OutcomeData.staticJump(r, args.c);
1587
1652
  }
1588
- return ok(r);
1653
+ return OutcomeData.ok(r);
1589
1654
  };
1590
1655
 
1591
1656
  // dist/build/js/assembly/instructions/jump.js
1592
- var jump = (r, args) => staticJump(r, args.a);
1657
+ var jump = (r, args) => OutcomeData.staticJump(r, args.a);
1593
1658
  var jump_ind = (r, args, registers) => {
1594
- const address = u32(portable.u64_add(registers[reg(args.a)], u32SignExtend(args.b)));
1595
- return dJump(r, address);
1659
+ const address = u32(portable.u64_add(registers[Inst.reg(args.a)], Inst.u32SignExtend(args.b)));
1660
+ return OutcomeData.dJump(r, address);
1596
1661
  };
1597
1662
  var load_imm_jump = (r, args, registers) => {
1598
- registers[reg(args.a)] = u32SignExtend(args.b);
1599
- return staticJump(r, args.c);
1663
+ registers[Inst.reg(args.a)] = Inst.u32SignExtend(args.b);
1664
+ return OutcomeData.staticJump(r, args.c);
1600
1665
  };
1601
1666
  var load_imm_jump_ind = (r, args, registers) => {
1602
- const address = u32(portable.u64_add(registers[reg(args.a)], u32SignExtend(args.d)));
1603
- registers[reg(args.b)] = u32SignExtend(args.c);
1604
- return dJump(r, address);
1667
+ const address = u32(portable.u64_add(registers[Inst.reg(args.a)], Inst.u32SignExtend(args.d)));
1668
+ registers[Inst.reg(args.b)] = Inst.u32SignExtend(args.c);
1669
+ return OutcomeData.dJump(r, address);
1605
1670
  };
1606
1671
 
1607
1672
  // dist/build/js/assembly/memory-page.js
1608
- var __decorate3 = function(decorators, target, key, desc) {
1673
+ var __decorate6 = function(decorators, target, key, desc) {
1609
1674
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1610
1675
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1611
1676
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -1632,7 +1697,7 @@ var Page = class {
1632
1697
  return this.access === Access.Write || this.access === access;
1633
1698
  }
1634
1699
  };
1635
- __decorate3([
1700
+ __decorate6([
1636
1701
  inline
1637
1702
  ], Page.prototype, "can", null);
1638
1703
  var RawPage = class {
@@ -1644,7 +1709,7 @@ var RawPage = class {
1644
1709
  return this.page;
1645
1710
  }
1646
1711
  };
1647
- __decorate3([
1712
+ __decorate6([
1648
1713
  inline
1649
1714
  ], RawPage.prototype, "data", null);
1650
1715
  var Arena = class {
@@ -1675,7 +1740,7 @@ var Arena = class {
1675
1740
  };
1676
1741
 
1677
1742
  // dist/build/js/assembly/memory.js
1678
- var __decorate4 = function(decorators, target, key, desc) {
1743
+ var __decorate7 = function(decorators, target, key, desc) {
1679
1744
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1680
1745
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1681
1746
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -1738,10 +1803,10 @@ var PageCache = class {
1738
1803
  }
1739
1804
  }
1740
1805
  };
1741
- __decorate4([
1806
+ __decorate7([
1742
1807
  inline
1743
1808
  ], PageCache.prototype, "lookup", null);
1744
- __decorate4([
1809
+ __decorate7([
1745
1810
  inline
1746
1811
  ], PageCache.prototype, "insert", null);
1747
1812
  var MemoryBuilder = class {
@@ -1878,6 +1943,7 @@ var Memory = class {
1878
1943
  this.sbrkAddress = u32(newSbrk);
1879
1944
  const pageIdx = i32(portable.u64_sub(newSbrk, u64(1)) >> u64(PAGE_SIZE_SHIFT));
1880
1945
  if (pageIdx === this.lastAllocatedPage) {
1946
+ faultRes4.isFault = false;
1881
1947
  return freeMemoryStart;
1882
1948
  }
1883
1949
  for (let i = this.lastAllocatedPage + 1; i <= pageIdx; i++) {
@@ -1887,6 +1953,7 @@ var Memory = class {
1887
1953
  this.cache.insert(i, page);
1888
1954
  }
1889
1955
  this.lastAllocatedPage = pageIdx;
1956
+ faultRes4.isFault = false;
1890
1957
  return freeMemoryStart;
1891
1958
  }
1892
1959
  getU8(faultRes4, address) {
@@ -1902,13 +1969,13 @@ var Memory = class {
1902
1969
  return portable.bswap_u64(this.getBytesReversed(faultRes4, Access.Read, address, 8));
1903
1970
  }
1904
1971
  getI8(faultRes4, address) {
1905
- return u8SignExtend(u8(this.getU8(faultRes4, address)));
1972
+ return Inst.u8SignExtend(u8(this.getU8(faultRes4, address)));
1906
1973
  }
1907
1974
  getI16(faultRes4, address) {
1908
- return u16SignExtend(u16(this.getU16(faultRes4, address)));
1975
+ return Inst.u16SignExtend(u16(this.getU16(faultRes4, address)));
1909
1976
  }
1910
1977
  getI32(faultRes4, address) {
1911
- return u32SignExtend(u32(this.getU32(faultRes4, address)));
1978
+ return Inst.u32SignExtend(u32(this.getU32(faultRes4, address)));
1912
1979
  }
1913
1980
  setU8(faultRes4, address, value) {
1914
1981
  this.setBytes(faultRes4, address, value, 1);
@@ -2082,7 +2149,7 @@ var Memory = class {
2082
2149
  return;
2083
2150
  }
2084
2151
  let bytesLeft = u64(value);
2085
- const firstPageEnd = minU32(PAGE_SIZE, r.firstPageOffset + bytes);
2152
+ const firstPageEnd = IntMath.minU32(PAGE_SIZE, r.firstPageOffset + bytes);
2086
2153
  for (let i = r.firstPageOffset; i < firstPageEnd; i++) {
2087
2154
  r.firstPageData[i] = u8(bytesLeft);
2088
2155
  bytesLeft >>= u64(8);
@@ -2098,7 +2165,7 @@ var Memory = class {
2098
2165
  return u64(0);
2099
2166
  }
2100
2167
  let r = u64(0);
2101
- const firstPageEnd = minU32(PAGE_SIZE, this.chunksResult.firstPageOffset + bytes);
2168
+ const firstPageEnd = IntMath.minU32(PAGE_SIZE, this.chunksResult.firstPageOffset + bytes);
2102
2169
  for (let i = this.chunksResult.firstPageOffset; i < firstPageEnd; i++) {
2103
2170
  r = r << u64(8) | u64(this.chunksResult.firstPageData[i]);
2104
2171
  }
@@ -2117,419 +2184,419 @@ function fault(r, address) {
2117
2184
  // dist/build/js/assembly/instructions/load.js
2118
2185
  var faultRes = new MaybePageFault();
2119
2186
  var load_imm_64 = (r, args, registers) => {
2120
- registers[reg(args.a)] = portable.u64_add(u64(args.b), u64(args.c) << u64(32));
2121
- return ok(r);
2187
+ registers[Inst.reg(args.a)] = portable.u64_add(u64(args.b), u64(args.c) << u64(32));
2188
+ return OutcomeData.ok(r);
2122
2189
  };
2123
2190
  var load_imm = (r, args, registers) => {
2124
- registers[reg(args.a)] = u32SignExtend(args.b);
2125
- return ok(r);
2191
+ registers[Inst.reg(args.a)] = Inst.u32SignExtend(args.b);
2192
+ return OutcomeData.ok(r);
2126
2193
  };
2127
2194
  var load_u8 = (r, args, registers, memory) => {
2128
2195
  const result = memory.getU8(faultRes, args.b);
2129
2196
  if (!faultRes.isFault) {
2130
- registers[reg(args.a)] = result;
2197
+ registers[Inst.reg(args.a)] = result;
2131
2198
  }
2132
- return okOrFault(r, faultRes);
2199
+ return OutcomeData.okOrFault(r, faultRes);
2133
2200
  };
2134
2201
  var load_i8 = (r, args, registers, memory) => {
2135
2202
  const result = memory.getI8(faultRes, args.b);
2136
2203
  if (!faultRes.isFault) {
2137
- registers[reg(args.a)] = result;
2204
+ registers[Inst.reg(args.a)] = result;
2138
2205
  }
2139
- return okOrFault(r, faultRes);
2206
+ return OutcomeData.okOrFault(r, faultRes);
2140
2207
  };
2141
2208
  var load_u16 = (r, args, registers, memory) => {
2142
2209
  const result = memory.getU16(faultRes, args.b);
2143
2210
  if (!faultRes.isFault) {
2144
- registers[reg(args.a)] = result;
2211
+ registers[Inst.reg(args.a)] = result;
2145
2212
  }
2146
- return okOrFault(r, faultRes);
2213
+ return OutcomeData.okOrFault(r, faultRes);
2147
2214
  };
2148
2215
  var load_i16 = (r, args, registers, memory) => {
2149
2216
  const result = memory.getI16(faultRes, args.b);
2150
2217
  if (!faultRes.isFault) {
2151
- registers[reg(args.a)] = result;
2218
+ registers[Inst.reg(args.a)] = result;
2152
2219
  }
2153
- return okOrFault(r, faultRes);
2220
+ return OutcomeData.okOrFault(r, faultRes);
2154
2221
  };
2155
2222
  var load_u32 = (r, args, registers, memory) => {
2156
2223
  const result = memory.getU32(faultRes, args.b);
2157
2224
  if (!faultRes.isFault) {
2158
- registers[reg(args.a)] = result;
2225
+ registers[Inst.reg(args.a)] = result;
2159
2226
  }
2160
- return okOrFault(r, faultRes);
2227
+ return OutcomeData.okOrFault(r, faultRes);
2161
2228
  };
2162
2229
  var load_i32 = (r, args, registers, memory) => {
2163
2230
  const result = memory.getI32(faultRes, args.b);
2164
2231
  if (!faultRes.isFault) {
2165
- registers[reg(args.a)] = result;
2232
+ registers[Inst.reg(args.a)] = result;
2166
2233
  }
2167
- return okOrFault(r, faultRes);
2234
+ return OutcomeData.okOrFault(r, faultRes);
2168
2235
  };
2169
2236
  var load_u64 = (r, args, registers, memory) => {
2170
2237
  const result = memory.getU64(faultRes, args.b);
2171
2238
  if (!faultRes.isFault) {
2172
- registers[reg(args.a)] = result;
2239
+ registers[Inst.reg(args.a)] = result;
2173
2240
  }
2174
- return okOrFault(r, faultRes);
2241
+ return OutcomeData.okOrFault(r, faultRes);
2175
2242
  };
2176
2243
  var load_ind_u8 = (r, args, registers, memory) => {
2177
- const address = u32(portable.u64_add(registers[reg(args.a)], u32SignExtend(args.c)));
2244
+ const address = u32(portable.u64_add(registers[Inst.reg(args.a)], Inst.u32SignExtend(args.c)));
2178
2245
  const result = memory.getU8(faultRes, address);
2179
2246
  if (!faultRes.isFault) {
2180
- registers[reg(args.b)] = result;
2247
+ registers[Inst.reg(args.b)] = result;
2181
2248
  }
2182
- return okOrFault(r, faultRes);
2249
+ return OutcomeData.okOrFault(r, faultRes);
2183
2250
  };
2184
2251
  var load_ind_i8 = (r, args, registers, memory) => {
2185
- const address = u32(portable.u64_add(registers[reg(args.a)], u32SignExtend(args.c)));
2252
+ const address = u32(portable.u64_add(registers[Inst.reg(args.a)], Inst.u32SignExtend(args.c)));
2186
2253
  const result = memory.getI8(faultRes, address);
2187
2254
  if (!faultRes.isFault) {
2188
- registers[reg(args.b)] = result;
2255
+ registers[Inst.reg(args.b)] = result;
2189
2256
  }
2190
- return okOrFault(r, faultRes);
2257
+ return OutcomeData.okOrFault(r, faultRes);
2191
2258
  };
2192
2259
  var load_ind_u16 = (r, args, registers, memory) => {
2193
- const address = u32(portable.u64_add(registers[reg(args.a)], u32SignExtend(args.c)));
2260
+ const address = u32(portable.u64_add(registers[Inst.reg(args.a)], Inst.u32SignExtend(args.c)));
2194
2261
  const result = memory.getU16(faultRes, address);
2195
2262
  if (!faultRes.isFault) {
2196
- registers[reg(args.b)] = result;
2263
+ registers[Inst.reg(args.b)] = result;
2197
2264
  }
2198
- return okOrFault(r, faultRes);
2265
+ return OutcomeData.okOrFault(r, faultRes);
2199
2266
  };
2200
2267
  var load_ind_i16 = (r, args, registers, memory) => {
2201
- const address = u32(portable.u64_add(registers[reg(args.a)], u32SignExtend(args.c)));
2268
+ const address = u32(portable.u64_add(registers[Inst.reg(args.a)], Inst.u32SignExtend(args.c)));
2202
2269
  const result = memory.getI16(faultRes, address);
2203
2270
  if (!faultRes.isFault) {
2204
- registers[reg(args.b)] = result;
2271
+ registers[Inst.reg(args.b)] = result;
2205
2272
  }
2206
- return okOrFault(r, faultRes);
2273
+ return OutcomeData.okOrFault(r, faultRes);
2207
2274
  };
2208
2275
  var load_ind_u32 = (r, args, registers, memory) => {
2209
- const address = u32(portable.u64_add(registers[reg(args.a)], u32SignExtend(args.c)));
2276
+ const address = u32(portable.u64_add(registers[Inst.reg(args.a)], Inst.u32SignExtend(args.c)));
2210
2277
  const result = memory.getU32(faultRes, address);
2211
2278
  if (!faultRes.isFault) {
2212
- registers[reg(args.b)] = result;
2279
+ registers[Inst.reg(args.b)] = result;
2213
2280
  }
2214
- return okOrFault(r, faultRes);
2281
+ return OutcomeData.okOrFault(r, faultRes);
2215
2282
  };
2216
2283
  var load_ind_i32 = (r, args, registers, memory) => {
2217
- const address = u32(portable.u64_add(registers[reg(args.a)], u32SignExtend(args.c)));
2284
+ const address = u32(portable.u64_add(registers[Inst.reg(args.a)], Inst.u32SignExtend(args.c)));
2218
2285
  const result = memory.getI32(faultRes, address);
2219
2286
  if (!faultRes.isFault) {
2220
- registers[reg(args.b)] = result;
2287
+ registers[Inst.reg(args.b)] = result;
2221
2288
  }
2222
- return okOrFault(r, faultRes);
2289
+ return OutcomeData.okOrFault(r, faultRes);
2223
2290
  };
2224
2291
  var load_ind_u64 = (r, args, registers, memory) => {
2225
- const address = u32(portable.u64_add(registers[reg(args.a)], u32SignExtend(args.c)));
2292
+ const address = u32(portable.u64_add(registers[Inst.reg(args.a)], Inst.u32SignExtend(args.c)));
2226
2293
  const result = memory.getU64(faultRes, u32(address));
2227
2294
  if (!faultRes.isFault) {
2228
- registers[reg(args.b)] = result;
2295
+ registers[Inst.reg(args.b)] = result;
2229
2296
  }
2230
- return okOrFault(r, faultRes);
2297
+ return OutcomeData.okOrFault(r, faultRes);
2231
2298
  };
2232
2299
 
2233
2300
  // dist/build/js/assembly/instructions/logic.js
2234
2301
  var and_imm = (r, args, registers) => {
2235
- registers[reg(args.b)] = registers[reg(args.a)] & u32SignExtend(args.c);
2236
- return ok(r);
2302
+ registers[Inst.reg(args.b)] = registers[Inst.reg(args.a)] & Inst.u32SignExtend(args.c);
2303
+ return OutcomeData.ok(r);
2237
2304
  };
2238
2305
  var xor_imm = (r, args, registers) => {
2239
- registers[reg(args.b)] = registers[reg(args.a)] ^ u32SignExtend(args.c);
2240
- return ok(r);
2306
+ registers[Inst.reg(args.b)] = registers[Inst.reg(args.a)] ^ Inst.u32SignExtend(args.c);
2307
+ return OutcomeData.ok(r);
2241
2308
  };
2242
2309
  var or_imm = (r, args, registers) => {
2243
- registers[reg(args.b)] = registers[reg(args.a)] | u32SignExtend(args.c);
2244
- return ok(r);
2310
+ registers[Inst.reg(args.b)] = registers[Inst.reg(args.a)] | Inst.u32SignExtend(args.c);
2311
+ return OutcomeData.ok(r);
2245
2312
  };
2246
2313
  var and = (r, args, registers) => {
2247
- registers[reg(args.c)] = registers[reg(args.b)] & registers[reg(args.a)];
2248
- return ok(r);
2314
+ registers[Inst.reg(args.c)] = registers[Inst.reg(args.b)] & registers[Inst.reg(args.a)];
2315
+ return OutcomeData.ok(r);
2249
2316
  };
2250
2317
  var xor = (r, args, registers) => {
2251
- registers[reg(args.c)] = registers[reg(args.b)] ^ registers[reg(args.a)];
2252
- return ok(r);
2318
+ registers[Inst.reg(args.c)] = registers[Inst.reg(args.b)] ^ registers[Inst.reg(args.a)];
2319
+ return OutcomeData.ok(r);
2253
2320
  };
2254
2321
  var or = (r, args, registers) => {
2255
- registers[reg(args.c)] = registers[reg(args.b)] | registers[reg(args.a)];
2256
- return ok(r);
2322
+ registers[Inst.reg(args.c)] = registers[Inst.reg(args.b)] | registers[Inst.reg(args.a)];
2323
+ return OutcomeData.ok(r);
2257
2324
  };
2258
2325
  var and_inv = (r, args, registers) => {
2259
- registers[reg(args.c)] = registers[reg(args.b)] & ~registers[reg(args.a)];
2260
- return ok(r);
2326
+ registers[Inst.reg(args.c)] = registers[Inst.reg(args.b)] & ~registers[Inst.reg(args.a)];
2327
+ return OutcomeData.ok(r);
2261
2328
  };
2262
2329
  var or_inv = (r, args, registers) => {
2263
- registers[reg(args.c)] = u64(registers[reg(args.b)] | ~registers[reg(args.a)]);
2264
- return ok(r);
2330
+ registers[Inst.reg(args.c)] = u64(registers[Inst.reg(args.b)] | ~registers[Inst.reg(args.a)]);
2331
+ return OutcomeData.ok(r);
2265
2332
  };
2266
2333
  var xnor = (r, args, registers) => {
2267
- registers[reg(args.c)] = u64(~(registers[reg(args.b)] ^ registers[reg(args.a)]));
2268
- return ok(r);
2334
+ registers[Inst.reg(args.c)] = u64(~(registers[Inst.reg(args.b)] ^ registers[Inst.reg(args.a)]));
2335
+ return OutcomeData.ok(r);
2269
2336
  };
2270
2337
 
2271
2338
  // dist/build/js/assembly/instructions/math.js
2272
2339
  var add_imm_32 = (r, args, registers) => {
2273
- const a = registers[reg(args.a)];
2274
- const c = u32SignExtend(args.c);
2275
- registers[reg(args.b)] = u32SignExtend(u32(portable.u64_add(a, c)));
2276
- return ok(r);
2340
+ const a = registers[Inst.reg(args.a)];
2341
+ const c = Inst.u32SignExtend(args.c);
2342
+ registers[Inst.reg(args.b)] = Inst.u32SignExtend(u32(portable.u64_add(a, c)));
2343
+ return OutcomeData.ok(r);
2277
2344
  };
2278
2345
  var mul_imm_32 = (r, args, registers) => {
2279
- registers[reg(args.b)] = u32SignExtend(u32(portable.u64_mul(registers[reg(args.a)], u64(args.c))));
2280
- return ok(r);
2346
+ registers[Inst.reg(args.b)] = Inst.u32SignExtend(u32(portable.u64_mul(registers[Inst.reg(args.a)], u64(args.c))));
2347
+ return OutcomeData.ok(r);
2281
2348
  };
2282
2349
  var neg_add_imm_32 = (r, args, registers) => {
2283
- const sum = portable.u64_sub(u64(args.c) | u64(4294967296), registers[reg(args.a)]);
2284
- registers[reg(args.b)] = u32SignExtend(u32(sum));
2285
- return ok(r);
2350
+ const sum = portable.u64_sub(u64(args.c) | u64(4294967296), registers[Inst.reg(args.a)]);
2351
+ registers[Inst.reg(args.b)] = Inst.u32SignExtend(u32(sum));
2352
+ return OutcomeData.ok(r);
2286
2353
  };
2287
2354
  var add_imm = (r, args, registers) => {
2288
- const sum = portable.u64_add(registers[reg(args.a)], u32SignExtend(args.c));
2289
- registers[reg(args.b)] = sum;
2290
- return ok(r);
2355
+ const sum = portable.u64_add(registers[Inst.reg(args.a)], Inst.u32SignExtend(args.c));
2356
+ registers[Inst.reg(args.b)] = sum;
2357
+ return OutcomeData.ok(r);
2291
2358
  };
2292
2359
  var mul_imm = (r, args, registers) => {
2293
- registers[reg(args.b)] = portable.u64_mul(registers[reg(args.a)], u32SignExtend(args.c));
2294
- return ok(r);
2360
+ registers[Inst.reg(args.b)] = portable.u64_mul(registers[Inst.reg(args.a)], Inst.u32SignExtend(args.c));
2361
+ return OutcomeData.ok(r);
2295
2362
  };
2296
2363
  var neg_add_imm = (r, args, registers) => {
2297
- const sum = portable.u64_sub(u32SignExtend(args.c), registers[reg(args.a)]);
2298
- registers[reg(args.b)] = sum;
2299
- return ok(r);
2364
+ const sum = portable.u64_sub(Inst.u32SignExtend(args.c), registers[Inst.reg(args.a)]);
2365
+ registers[Inst.reg(args.b)] = sum;
2366
+ return OutcomeData.ok(r);
2300
2367
  };
2301
2368
  var add_32 = (r, args, registers) => {
2302
- const a = u32(registers[reg(args.a)]);
2303
- const b = u32(registers[reg(args.b)]);
2304
- registers[reg(args.c)] = u32SignExtend(a + b);
2305
- return ok(r);
2369
+ const a = u32(registers[Inst.reg(args.a)]);
2370
+ const b = u32(registers[Inst.reg(args.b)]);
2371
+ registers[Inst.reg(args.c)] = Inst.u32SignExtend(a + b);
2372
+ return OutcomeData.ok(r);
2306
2373
  };
2307
2374
  var sub_32 = (r, args, registers) => {
2308
- const a = registers[reg(args.b)];
2309
- const b = u64(4294967296 - u32(registers[reg(args.a)]));
2310
- registers[reg(args.c)] = u32SignExtend(u32(portable.u64_add(a, b)));
2311
- return ok(r);
2375
+ const a = registers[Inst.reg(args.b)];
2376
+ const b = u64(4294967296 - u32(registers[Inst.reg(args.a)]));
2377
+ registers[Inst.reg(args.c)] = Inst.u32SignExtend(u32(portable.u64_add(a, b)));
2378
+ return OutcomeData.ok(r);
2312
2379
  };
2313
2380
  var mul_32 = (r, args, registers) => {
2314
- registers[reg(args.c)] = u32SignExtend(u32(portable.u64_mul(registers[reg(args.a)], registers[reg(args.b)])));
2315
- return ok(r);
2381
+ registers[Inst.reg(args.c)] = Inst.u32SignExtend(u32(portable.u64_mul(registers[Inst.reg(args.a)], registers[Inst.reg(args.b)])));
2382
+ return OutcomeData.ok(r);
2316
2383
  };
2317
2384
  var div_u_32 = (r, args, registers) => {
2318
- const a = u32(registers[reg(args.a)]);
2385
+ const a = u32(registers[Inst.reg(args.a)]);
2319
2386
  if (a === 0) {
2320
- registers[reg(args.c)] = u64.MAX_VALUE;
2387
+ registers[Inst.reg(args.c)] = u64.MAX_VALUE;
2321
2388
  } else {
2322
- const b = u32(registers[reg(args.b)]);
2323
- registers[reg(args.c)] = u32SignExtend(b / a);
2389
+ const b = u32(registers[Inst.reg(args.b)]);
2390
+ registers[Inst.reg(args.c)] = Inst.u32SignExtend(b / a);
2324
2391
  }
2325
- return ok(r);
2392
+ return OutcomeData.ok(r);
2326
2393
  };
2327
2394
  var div_s_32 = (r, args, registers) => {
2328
- const b = i64(u32SignExtend(u32(registers[reg(args.b)])));
2329
- const a = i64(u32SignExtend(u32(registers[reg(args.a)])));
2395
+ const b = i64(Inst.u32SignExtend(u32(registers[Inst.reg(args.b)])));
2396
+ const a = i64(Inst.u32SignExtend(u32(registers[Inst.reg(args.a)])));
2330
2397
  if (a === i64(0)) {
2331
- registers[reg(args.c)] = u64.MAX_VALUE;
2398
+ registers[Inst.reg(args.c)] = u64.MAX_VALUE;
2332
2399
  } else if (a === i64(-1) && b === i64(i32.MIN_VALUE)) {
2333
- registers[reg(args.c)] = u64(b);
2400
+ registers[Inst.reg(args.c)] = u64(b);
2334
2401
  } else {
2335
- registers[reg(args.c)] = u64(b / a);
2402
+ registers[Inst.reg(args.c)] = u64(b / a);
2336
2403
  }
2337
- return ok(r);
2404
+ return OutcomeData.ok(r);
2338
2405
  };
2339
2406
  var rem_u_32 = (r, args, registers) => {
2340
- const a = u32(registers[reg(args.a)]);
2341
- const b = u32(registers[reg(args.b)]);
2407
+ const a = u32(registers[Inst.reg(args.a)]);
2408
+ const b = u32(registers[Inst.reg(args.b)]);
2342
2409
  if (a === 0) {
2343
- registers[reg(args.c)] = u32SignExtend(b);
2410
+ registers[Inst.reg(args.c)] = Inst.u32SignExtend(b);
2344
2411
  } else {
2345
- registers[reg(args.c)] = u32SignExtend(b % a);
2412
+ registers[Inst.reg(args.c)] = Inst.u32SignExtend(b % a);
2346
2413
  }
2347
- return ok(r);
2414
+ return OutcomeData.ok(r);
2348
2415
  };
2349
2416
  var rem_s_32 = (r, args, registers) => {
2350
- const b = i32(registers[reg(args.b)]);
2351
- const a = i32(registers[reg(args.a)]);
2417
+ const b = i32(registers[Inst.reg(args.b)]);
2418
+ const a = i32(registers[Inst.reg(args.a)]);
2352
2419
  if (a === 0) {
2353
- registers[reg(args.c)] = u64(i64(b));
2420
+ registers[Inst.reg(args.c)] = u64(i64(b));
2354
2421
  } else if (a === -1 && b === i32.MIN_VALUE) {
2355
- registers[reg(args.c)] = u64(0);
2422
+ registers[Inst.reg(args.c)] = u64(0);
2356
2423
  } else {
2357
- registers[reg(args.c)] = u64(i64(b) % i64(a));
2424
+ registers[Inst.reg(args.c)] = u64(i64(b) % i64(a));
2358
2425
  }
2359
- return ok(r);
2426
+ return OutcomeData.ok(r);
2360
2427
  };
2361
2428
  var add_64 = (r, args, registers) => {
2362
- const a = registers[reg(args.a)];
2363
- const b = registers[reg(args.b)];
2364
- registers[reg(args.c)] = portable.u64_add(a, b);
2365
- return ok(r);
2429
+ const a = registers[Inst.reg(args.a)];
2430
+ const b = registers[Inst.reg(args.b)];
2431
+ registers[Inst.reg(args.c)] = portable.u64_add(a, b);
2432
+ return OutcomeData.ok(r);
2366
2433
  };
2367
2434
  var sub = (r, args, registers) => {
2368
- const a = registers[reg(args.a)];
2369
- const b = registers[reg(args.b)];
2370
- registers[reg(args.c)] = portable.u64_sub(b, a);
2371
- return ok(r);
2435
+ const a = registers[Inst.reg(args.a)];
2436
+ const b = registers[Inst.reg(args.b)];
2437
+ registers[Inst.reg(args.c)] = portable.u64_sub(b, a);
2438
+ return OutcomeData.ok(r);
2372
2439
  };
2373
2440
  var mul = (r, args, registers) => {
2374
- const a = registers[reg(args.a)];
2375
- const b = registers[reg(args.b)];
2376
- registers[reg(args.c)] = portable.u64_mul(a, b);
2377
- return ok(r);
2441
+ const a = registers[Inst.reg(args.a)];
2442
+ const b = registers[Inst.reg(args.b)];
2443
+ registers[Inst.reg(args.c)] = portable.u64_mul(a, b);
2444
+ return OutcomeData.ok(r);
2378
2445
  };
2379
2446
  var div_u = (r, args, registers) => {
2380
- if (registers[reg(args.a)] === u64(0)) {
2381
- registers[reg(args.c)] = u64.MAX_VALUE;
2447
+ if (registers[Inst.reg(args.a)] === u64(0)) {
2448
+ registers[Inst.reg(args.c)] = u64.MAX_VALUE;
2382
2449
  } else {
2383
- registers[reg(args.c)] = registers[reg(args.b)] / registers[reg(args.a)];
2450
+ registers[Inst.reg(args.c)] = registers[Inst.reg(args.b)] / registers[Inst.reg(args.a)];
2384
2451
  }
2385
- return ok(r);
2452
+ return OutcomeData.ok(r);
2386
2453
  };
2387
2454
  var div_s = (r, args, registers) => {
2388
- const b = i64(registers[reg(args.b)]);
2389
- const a = i64(registers[reg(args.a)]);
2455
+ const b = i64(registers[Inst.reg(args.b)]);
2456
+ const a = i64(registers[Inst.reg(args.a)]);
2390
2457
  if (a === i64(0)) {
2391
- registers[reg(args.c)] = u64.MAX_VALUE;
2458
+ registers[Inst.reg(args.c)] = u64.MAX_VALUE;
2392
2459
  } else if (a === i64(-1) && b === i64.MIN_VALUE) {
2393
- registers[reg(args.c)] = u64(b);
2460
+ registers[Inst.reg(args.c)] = u64(b);
2394
2461
  } else {
2395
- registers[reg(args.c)] = u64(b / a);
2462
+ registers[Inst.reg(args.c)] = u64(b / a);
2396
2463
  }
2397
- return ok(r);
2464
+ return OutcomeData.ok(r);
2398
2465
  };
2399
2466
  var rem_u = (r, args, registers) => {
2400
- if (registers[reg(args.a)] === u64(0)) {
2401
- registers[reg(args.c)] = registers[reg(args.b)];
2467
+ if (registers[Inst.reg(args.a)] === u64(0)) {
2468
+ registers[Inst.reg(args.c)] = registers[Inst.reg(args.b)];
2402
2469
  } else {
2403
- registers[reg(args.c)] = registers[reg(args.b)] % registers[reg(args.a)];
2470
+ registers[Inst.reg(args.c)] = registers[Inst.reg(args.b)] % registers[Inst.reg(args.a)];
2404
2471
  }
2405
- return ok(r);
2472
+ return OutcomeData.ok(r);
2406
2473
  };
2407
2474
  var rem_s = (r, args, registers) => {
2408
- const b = i64(registers[reg(args.b)]);
2409
- const a = i64(registers[reg(args.a)]);
2475
+ const b = i64(registers[Inst.reg(args.b)]);
2476
+ const a = i64(registers[Inst.reg(args.a)]);
2410
2477
  if (a === i64(0)) {
2411
- registers[reg(args.c)] = u64(b);
2478
+ registers[Inst.reg(args.c)] = u64(b);
2412
2479
  } else if (a === i64(-1) && b === i64.MIN_VALUE) {
2413
- registers[reg(args.c)] = u64(0);
2480
+ registers[Inst.reg(args.c)] = u64(0);
2414
2481
  } else {
2415
- registers[reg(args.c)] = u64(b % a);
2482
+ registers[Inst.reg(args.c)] = u64(b % a);
2416
2483
  }
2417
- return ok(r);
2484
+ return OutcomeData.ok(r);
2418
2485
  };
2419
2486
  var mul_upper_s_s = (r, args, registers) => {
2420
- registers[reg(args.c)] = mulUpperSigned(i64(registers[reg(args.b)]), i64(registers[reg(args.a)]));
2421
- return ok(r);
2487
+ registers[Inst.reg(args.c)] = mulUpperSigned(i64(registers[Inst.reg(args.b)]), i64(registers[Inst.reg(args.a)]));
2488
+ return OutcomeData.ok(r);
2422
2489
  };
2423
2490
  var mul_upper_u_u = (r, args, registers) => {
2424
- registers[reg(args.c)] = mulUpperUnsigned(registers[reg(args.b)], registers[reg(args.a)]);
2425
- return ok(r);
2491
+ registers[Inst.reg(args.c)] = mulUpperUnsigned(registers[Inst.reg(args.b)], registers[Inst.reg(args.a)]);
2492
+ return OutcomeData.ok(r);
2426
2493
  };
2427
2494
  var mul_upper_s_u = (r, args, registers) => {
2428
- registers[reg(args.c)] = mulUpperSignedUnsigned(i64(registers[reg(args.b)]), registers[reg(args.a)]);
2429
- return ok(r);
2495
+ registers[Inst.reg(args.c)] = mulUpperSignedUnsigned(i64(registers[Inst.reg(args.b)]), registers[Inst.reg(args.a)]);
2496
+ return OutcomeData.ok(r);
2430
2497
  };
2431
2498
  var max = (r, args, registers) => {
2432
- const a = i64(registers[reg(args.a)]);
2433
- const b = i64(registers[reg(args.b)]);
2434
- registers[reg(args.c)] = u64(a < b ? b : a);
2435
- return ok(r);
2499
+ const a = i64(registers[Inst.reg(args.a)]);
2500
+ const b = i64(registers[Inst.reg(args.b)]);
2501
+ registers[Inst.reg(args.c)] = u64(a < b ? b : a);
2502
+ return OutcomeData.ok(r);
2436
2503
  };
2437
2504
  var max_u = (r, args, registers) => {
2438
- const a = registers[reg(args.a)];
2439
- const b = registers[reg(args.b)];
2440
- registers[reg(args.c)] = a < b ? b : a;
2441
- return ok(r);
2505
+ const a = registers[Inst.reg(args.a)];
2506
+ const b = registers[Inst.reg(args.b)];
2507
+ registers[Inst.reg(args.c)] = a < b ? b : a;
2508
+ return OutcomeData.ok(r);
2442
2509
  };
2443
2510
  var min = (r, args, registers) => {
2444
- const a = i64(registers[reg(args.a)]);
2445
- const b = i64(registers[reg(args.b)]);
2446
- registers[reg(args.c)] = u64(a > b ? b : a);
2447
- return ok(r);
2511
+ const a = i64(registers[Inst.reg(args.a)]);
2512
+ const b = i64(registers[Inst.reg(args.b)]);
2513
+ registers[Inst.reg(args.c)] = u64(a > b ? b : a);
2514
+ return OutcomeData.ok(r);
2448
2515
  };
2449
2516
  var min_u = (r, args, registers) => {
2450
- const a = registers[reg(args.a)];
2451
- const b = registers[reg(args.b)];
2452
- registers[reg(args.c)] = a > b ? b : a;
2453
- return ok(r);
2517
+ const a = registers[Inst.reg(args.a)];
2518
+ const b = registers[Inst.reg(args.b)];
2519
+ registers[Inst.reg(args.c)] = a > b ? b : a;
2520
+ return OutcomeData.ok(r);
2454
2521
  };
2455
2522
 
2456
2523
  // dist/build/js/assembly/instructions/misc.js
2457
2524
  var faultRes2 = new MaybePageFault();
2458
- var INVALID = (r) => panic(r);
2459
- var trap = (r) => panic(r);
2460
- var fallthrough = (r) => ok(r);
2461
- var ecalli = (r, args) => hostCall(r, args.a);
2525
+ var INVALID = (r) => OutcomeData.panic(r);
2526
+ var trap = (r) => OutcomeData.panic(r);
2527
+ var fallthrough = (r) => OutcomeData.ok(r);
2528
+ var ecalli = (r, args) => OutcomeData.hostCall(r, args.a);
2462
2529
  var sbrk = (r, args, registers, memory) => {
2463
- const res = memory.sbrk(faultRes2, u32(registers[reg(args.a)]));
2530
+ const res = memory.sbrk(faultRes2, u32(registers[Inst.reg(args.a)]));
2464
2531
  if (faultRes2.isFault) {
2465
- return okOrFault(r, faultRes2);
2532
+ return OutcomeData.okOrFault(r, faultRes2);
2466
2533
  }
2467
- registers[reg(args.b)] = res;
2468
- return ok(r);
2534
+ registers[Inst.reg(args.b)] = res;
2535
+ return OutcomeData.ok(r);
2469
2536
  };
2470
2537
 
2471
2538
  // dist/build/js/assembly/instructions/mov.js
2472
2539
  var move_reg = (r, args, registers) => {
2473
- registers[reg(args.b)] = registers[reg(args.a)];
2474
- return ok(r);
2540
+ registers[Inst.reg(args.b)] = registers[Inst.reg(args.a)];
2541
+ return OutcomeData.ok(r);
2475
2542
  };
2476
2543
  var cmov_iz_imm = (r, args, registers) => {
2477
- if (registers[reg(args.a)] === u64(0)) {
2478
- registers[reg(args.b)] = u32SignExtend(args.c);
2544
+ if (registers[Inst.reg(args.a)] === u64(0)) {
2545
+ registers[Inst.reg(args.b)] = Inst.u32SignExtend(args.c);
2479
2546
  }
2480
- return ok(r);
2547
+ return OutcomeData.ok(r);
2481
2548
  };
2482
2549
  var cmov_nz_imm = (r, args, registers) => {
2483
- if (registers[reg(args.a)] !== u64(0)) {
2484
- registers[reg(args.b)] = u32SignExtend(args.c);
2550
+ if (registers[Inst.reg(args.a)] !== u64(0)) {
2551
+ registers[Inst.reg(args.b)] = Inst.u32SignExtend(args.c);
2485
2552
  }
2486
- return ok(r);
2553
+ return OutcomeData.ok(r);
2487
2554
  };
2488
2555
  var cmov_iz = (r, args, registers) => {
2489
- if (registers[reg(args.a)] === u64(0)) {
2490
- registers[reg(args.c)] = registers[reg(args.b)];
2556
+ if (registers[Inst.reg(args.a)] === u64(0)) {
2557
+ registers[Inst.reg(args.c)] = registers[Inst.reg(args.b)];
2491
2558
  }
2492
- return ok(r);
2559
+ return OutcomeData.ok(r);
2493
2560
  };
2494
2561
  var cmov_nz = (r, args, registers) => {
2495
- if (registers[reg(args.a)] !== u64(0)) {
2496
- registers[reg(args.c)] = registers[reg(args.b)];
2562
+ if (registers[Inst.reg(args.a)] !== u64(0)) {
2563
+ registers[Inst.reg(args.c)] = registers[Inst.reg(args.b)];
2497
2564
  }
2498
- return ok(r);
2565
+ return OutcomeData.ok(r);
2499
2566
  };
2500
2567
 
2501
2568
  // dist/build/js/assembly/instructions/rot.js
2502
2569
  var rot_r_64_imm = (r, args, regs) => {
2503
- regs[reg(args.b)] = math.rot_r(regs[reg(args.a)], u32SignExtend(args.c));
2504
- return ok(r);
2570
+ regs[Inst.reg(args.b)] = math.rot_r(regs[Inst.reg(args.a)], Inst.u32SignExtend(args.c));
2571
+ return OutcomeData.ok(r);
2505
2572
  };
2506
2573
  var rot_r_64_imm_alt = (r, args, regs) => {
2507
- regs[reg(args.b)] = math.rot_r(u32SignExtend(args.c), regs[reg(args.a)]);
2508
- return ok(r);
2574
+ regs[Inst.reg(args.b)] = math.rot_r(Inst.u32SignExtend(args.c), regs[Inst.reg(args.a)]);
2575
+ return OutcomeData.ok(r);
2509
2576
  };
2510
2577
  var rot_r_32_imm = (r, args, regs) => {
2511
- regs[reg(args.b)] = u32SignExtend(math.rot_r_32(u32(regs[reg(args.a)]), u32(args.c)));
2512
- return ok(r);
2578
+ regs[Inst.reg(args.b)] = Inst.u32SignExtend(math.rot_r_32(u32(regs[Inst.reg(args.a)]), u32(args.c)));
2579
+ return OutcomeData.ok(r);
2513
2580
  };
2514
2581
  var rot_r_32_imm_alt = (r, args, regs) => {
2515
- regs[reg(args.b)] = u32SignExtend(math.rot_r_32(u32(args.c), u32(regs[reg(args.a)])));
2516
- return ok(r);
2582
+ regs[Inst.reg(args.b)] = Inst.u32SignExtend(math.rot_r_32(u32(args.c), u32(regs[Inst.reg(args.a)])));
2583
+ return OutcomeData.ok(r);
2517
2584
  };
2518
2585
  var rot_l_64 = (r, args, regs) => {
2519
- regs[reg(args.c)] = math.rot_l(regs[reg(args.b)], regs[reg(args.a)]);
2520
- return ok(r);
2586
+ regs[Inst.reg(args.c)] = math.rot_l(regs[Inst.reg(args.b)], regs[Inst.reg(args.a)]);
2587
+ return OutcomeData.ok(r);
2521
2588
  };
2522
2589
  var rot_l_32 = (r, args, regs) => {
2523
- regs[reg(args.c)] = u32SignExtend(math.rot_l_32(u32(regs[reg(args.b)]), u32(regs[reg(args.a)])));
2524
- return ok(r);
2590
+ regs[Inst.reg(args.c)] = Inst.u32SignExtend(math.rot_l_32(u32(regs[Inst.reg(args.b)]), u32(regs[Inst.reg(args.a)])));
2591
+ return OutcomeData.ok(r);
2525
2592
  };
2526
2593
  var rot_r_64 = (r, args, regs) => {
2527
- regs[reg(args.c)] = math.rot_r(regs[reg(args.b)], regs[reg(args.a)]);
2528
- return ok(r);
2594
+ regs[Inst.reg(args.c)] = math.rot_r(regs[Inst.reg(args.b)], regs[Inst.reg(args.a)]);
2595
+ return OutcomeData.ok(r);
2529
2596
  };
2530
2597
  var rot_r_32 = (r, args, regs) => {
2531
- regs[reg(args.c)] = u32SignExtend(math.rot_r_32(u32(regs[reg(args.b)]), u32(regs[reg(args.a)])));
2532
- return ok(r);
2598
+ regs[Inst.reg(args.c)] = Inst.u32SignExtend(math.rot_r_32(u32(regs[Inst.reg(args.b)]), u32(regs[Inst.reg(args.a)])));
2599
+ return OutcomeData.ok(r);
2533
2600
  };
2534
2601
  var math;
2535
2602
  (function(math2) {
@@ -2553,32 +2620,32 @@ var math;
2553
2620
 
2554
2621
  // dist/build/js/assembly/instructions/set.js
2555
2622
  var set_lt_u_imm = (r, args, registers) => {
2556
- const cond = registers[reg(args.a)] < u64(u32SignExtend(args.c));
2557
- registers[reg(args.b)] = cond ? u64(1) : u64(0);
2558
- return ok(r);
2623
+ const cond = registers[Inst.reg(args.a)] < u64(Inst.u32SignExtend(args.c));
2624
+ registers[Inst.reg(args.b)] = cond ? u64(1) : u64(0);
2625
+ return OutcomeData.ok(r);
2559
2626
  };
2560
2627
  var set_lt_s_imm = (r, args, registers) => {
2561
- const cond = i64(registers[reg(args.a)]) < i64(u32SignExtend(args.c));
2562
- registers[reg(args.b)] = cond ? u64(1) : u64(0);
2563
- return ok(r);
2628
+ const cond = i64(registers[Inst.reg(args.a)]) < i64(Inst.u32SignExtend(args.c));
2629
+ registers[Inst.reg(args.b)] = cond ? u64(1) : u64(0);
2630
+ return OutcomeData.ok(r);
2564
2631
  };
2565
2632
  var set_gt_u_imm = (r, args, registers) => {
2566
- const cond = registers[reg(args.a)] > u64(u32SignExtend(args.c));
2567
- registers[reg(args.b)] = cond ? u64(1) : u64(0);
2568
- return ok(r);
2633
+ const cond = registers[Inst.reg(args.a)] > u64(Inst.u32SignExtend(args.c));
2634
+ registers[Inst.reg(args.b)] = cond ? u64(1) : u64(0);
2635
+ return OutcomeData.ok(r);
2569
2636
  };
2570
2637
  var set_gt_s_imm = (r, args, registers) => {
2571
- const cond = i64(registers[reg(args.a)]) > i64(u32SignExtend(args.c));
2572
- registers[reg(args.b)] = cond ? u64(1) : u64(0);
2573
- return ok(r);
2638
+ const cond = i64(registers[Inst.reg(args.a)]) > i64(Inst.u32SignExtend(args.c));
2639
+ registers[Inst.reg(args.b)] = cond ? u64(1) : u64(0);
2640
+ return OutcomeData.ok(r);
2574
2641
  };
2575
2642
  var set_lt_u = (r, args, registers) => {
2576
- registers[reg(args.c)] = registers[reg(args.b)] < registers[reg(args.a)] ? u64(1) : u64(0);
2577
- return ok(r);
2643
+ registers[Inst.reg(args.c)] = registers[Inst.reg(args.b)] < registers[Inst.reg(args.a)] ? u64(1) : u64(0);
2644
+ return OutcomeData.ok(r);
2578
2645
  };
2579
2646
  var set_lt_s = (r, args, registers) => {
2580
- registers[reg(args.c)] = i64(registers[reg(args.b)]) < i64(registers[reg(args.a)]) ? u64(1) : u64(0);
2581
- return ok(r);
2647
+ registers[Inst.reg(args.c)] = i64(registers[Inst.reg(args.b)]) < i64(registers[Inst.reg(args.a)]) ? u64(1) : u64(0);
2648
+ return OutcomeData.ok(r);
2582
2649
  };
2583
2650
 
2584
2651
  // dist/build/js/assembly/instructions/shift.js
@@ -2586,184 +2653,184 @@ var MAX_SHIFT_64 = 64;
2586
2653
  var MAX_SHIFT_32 = 32;
2587
2654
  var shlo_l_imm_32 = (r, args, registers) => {
2588
2655
  const shift = u32(args.c % MAX_SHIFT_32);
2589
- const value = u32(registers[reg(args.a)]);
2590
- registers[reg(args.b)] = u32SignExtend(value << shift);
2591
- return ok(r);
2656
+ const value = u32(registers[Inst.reg(args.a)]);
2657
+ registers[Inst.reg(args.b)] = Inst.u32SignExtend(value << shift);
2658
+ return OutcomeData.ok(r);
2592
2659
  };
2593
2660
  var shlo_r_imm_32 = (r, args, registers) => {
2594
2661
  const shift = u32(args.c % MAX_SHIFT_32);
2595
- const value = u32(registers[reg(args.a)]);
2596
- registers[reg(args.b)] = u32SignExtend(value >>> shift);
2597
- return ok(r);
2662
+ const value = u32(registers[Inst.reg(args.a)]);
2663
+ registers[Inst.reg(args.b)] = Inst.u32SignExtend(value >>> shift);
2664
+ return OutcomeData.ok(r);
2598
2665
  };
2599
2666
  var shar_r_imm_32 = (r, args, registers) => {
2600
2667
  const shift = u32(args.c % MAX_SHIFT_32);
2601
- const value = u32SignExtend(u32(registers[reg(args.a)]));
2602
- registers[reg(args.b)] = u64(i64(value) >> i64(shift));
2603
- return ok(r);
2668
+ const value = Inst.u32SignExtend(u32(registers[Inst.reg(args.a)]));
2669
+ registers[Inst.reg(args.b)] = u64(i64(value) >> i64(shift));
2670
+ return OutcomeData.ok(r);
2604
2671
  };
2605
2672
  var shlo_l_imm_alt_32 = (r, args, registers) => {
2606
- const shift = u32(registers[reg(args.a)] % u64(MAX_SHIFT_32));
2607
- registers[reg(args.b)] = u32SignExtend(args.c << shift);
2608
- return ok(r);
2673
+ const shift = u32(registers[Inst.reg(args.a)] % u64(MAX_SHIFT_32));
2674
+ registers[Inst.reg(args.b)] = Inst.u32SignExtend(args.c << shift);
2675
+ return OutcomeData.ok(r);
2609
2676
  };
2610
2677
  var shlo_r_imm_alt_32 = (r, args, registers) => {
2611
- const shift = u32(registers[reg(args.a)] % u64(MAX_SHIFT_32));
2612
- registers[reg(args.b)] = u32SignExtend(args.c >>> shift);
2613
- return ok(r);
2678
+ const shift = u32(registers[Inst.reg(args.a)] % u64(MAX_SHIFT_32));
2679
+ registers[Inst.reg(args.b)] = Inst.u32SignExtend(args.c >>> shift);
2680
+ return OutcomeData.ok(r);
2614
2681
  };
2615
2682
  var shar_r_imm_alt_32 = (r, args, registers) => {
2616
- const shift = u32(registers[reg(args.a)] % u64(MAX_SHIFT_32));
2617
- const imm = u32SignExtend(args.c);
2618
- registers[reg(args.b)] = u32SignExtend(u32(i64(imm) >> i64(shift)));
2619
- return ok(r);
2683
+ const shift = u32(registers[Inst.reg(args.a)] % u64(MAX_SHIFT_32));
2684
+ const imm = Inst.u32SignExtend(args.c);
2685
+ registers[Inst.reg(args.b)] = Inst.u32SignExtend(u32(i64(imm) >> i64(shift)));
2686
+ return OutcomeData.ok(r);
2620
2687
  };
2621
2688
  var shlo_l_imm = (r, args, registers) => {
2622
2689
  const shift = u32(args.c % MAX_SHIFT_64);
2623
- registers[reg(args.b)] = u64(registers[reg(args.a)] << u64(shift));
2624
- return ok(r);
2690
+ registers[Inst.reg(args.b)] = u64(registers[Inst.reg(args.a)] << u64(shift));
2691
+ return OutcomeData.ok(r);
2625
2692
  };
2626
2693
  var shlo_r_imm = (r, args, registers) => {
2627
2694
  const shift = u32(args.c % MAX_SHIFT_64);
2628
- registers[reg(args.b)] = registers[reg(args.a)] >> u64(shift);
2629
- return ok(r);
2695
+ registers[Inst.reg(args.b)] = registers[Inst.reg(args.a)] >> u64(shift);
2696
+ return OutcomeData.ok(r);
2630
2697
  };
2631
2698
  var shar_r_imm = (r, args, registers) => {
2632
2699
  const shift = u32(args.c % MAX_SHIFT_64);
2633
- const value = i64(registers[reg(args.a)]);
2634
- registers[reg(args.b)] = u64(value >> i64(shift));
2635
- return ok(r);
2700
+ const value = i64(registers[Inst.reg(args.a)]);
2701
+ registers[Inst.reg(args.b)] = u64(value >> i64(shift));
2702
+ return OutcomeData.ok(r);
2636
2703
  };
2637
2704
  var shlo_l_imm_alt = (r, args, registers) => {
2638
- const shift = u32(registers[reg(args.a)] % u64(MAX_SHIFT_64));
2639
- registers[reg(args.b)] = u64(u32SignExtend(args.c) << i64(shift));
2640
- return ok(r);
2705
+ const shift = u32(registers[Inst.reg(args.a)] % u64(MAX_SHIFT_64));
2706
+ registers[Inst.reg(args.b)] = u64(Inst.u32SignExtend(args.c) << i64(shift));
2707
+ return OutcomeData.ok(r);
2641
2708
  };
2642
2709
  var shlo_r_imm_alt = (r, args, registers) => {
2643
- const shift = u32(registers[reg(args.a)] % u64(MAX_SHIFT_64));
2644
- registers[reg(args.b)] = u64(u32SignExtend(args.c)) >> u64(shift);
2645
- return ok(r);
2710
+ const shift = u32(registers[Inst.reg(args.a)] % u64(MAX_SHIFT_64));
2711
+ registers[Inst.reg(args.b)] = u64(Inst.u32SignExtend(args.c)) >> u64(shift);
2712
+ return OutcomeData.ok(r);
2646
2713
  };
2647
2714
  var shar_r_imm_alt = (r, args, registers) => {
2648
- const shift = u32(registers[reg(args.a)] % u64(MAX_SHIFT_64));
2649
- const value = u32SignExtend(args.c);
2650
- registers[reg(args.b)] = u32SignExtend(u32(value >> i64(shift)));
2651
- return ok(r);
2715
+ const shift = u32(registers[Inst.reg(args.a)] % u64(MAX_SHIFT_64));
2716
+ const value = Inst.u32SignExtend(args.c);
2717
+ registers[Inst.reg(args.b)] = Inst.u32SignExtend(u32(value >> i64(shift)));
2718
+ return OutcomeData.ok(r);
2652
2719
  };
2653
2720
  var shlo_l_32 = (r, args, registers) => {
2654
- const shift = u32(registers[reg(args.a)] % u64(MAX_SHIFT_32));
2655
- const value = u32(registers[reg(args.b)]);
2656
- registers[reg(args.c)] = u32SignExtend(value << shift);
2657
- return ok(r);
2721
+ const shift = u32(registers[Inst.reg(args.a)] % u64(MAX_SHIFT_32));
2722
+ const value = u32(registers[Inst.reg(args.b)]);
2723
+ registers[Inst.reg(args.c)] = Inst.u32SignExtend(value << shift);
2724
+ return OutcomeData.ok(r);
2658
2725
  };
2659
2726
  var shlo_r_32 = (r, args, registers) => {
2660
- const shift = u32(registers[reg(args.a)] % u64(MAX_SHIFT_32));
2661
- const value = u32(registers[reg(args.b)]);
2662
- registers[reg(args.c)] = u32SignExtend(value >>> shift);
2663
- return ok(r);
2727
+ const shift = u32(registers[Inst.reg(args.a)] % u64(MAX_SHIFT_32));
2728
+ const value = u32(registers[Inst.reg(args.b)]);
2729
+ registers[Inst.reg(args.c)] = Inst.u32SignExtend(value >>> shift);
2730
+ return OutcomeData.ok(r);
2664
2731
  };
2665
2732
  var shar_r_32 = (r, args, registers) => {
2666
- const shift = u32(registers[reg(args.a)] % u64(MAX_SHIFT_32));
2667
- const regValue = u32SignExtend(u32(registers[reg(args.b)]));
2668
- registers[reg(args.c)] = u32SignExtend(u32(i64(regValue) >> i64(shift)));
2669
- return ok(r);
2733
+ const shift = u32(registers[Inst.reg(args.a)] % u64(MAX_SHIFT_32));
2734
+ const regValue = Inst.u32SignExtend(u32(registers[Inst.reg(args.b)]));
2735
+ registers[Inst.reg(args.c)] = Inst.u32SignExtend(u32(i64(regValue) >> i64(shift)));
2736
+ return OutcomeData.ok(r);
2670
2737
  };
2671
2738
  var shlo_l = (r, args, registers) => {
2672
- const shift = u32(registers[reg(args.a)] % u64(MAX_SHIFT_64));
2673
- registers[reg(args.c)] = u64(registers[reg(args.b)] << u64(shift));
2674
- return ok(r);
2739
+ const shift = u32(registers[Inst.reg(args.a)] % u64(MAX_SHIFT_64));
2740
+ registers[Inst.reg(args.c)] = u64(registers[Inst.reg(args.b)] << u64(shift));
2741
+ return OutcomeData.ok(r);
2675
2742
  };
2676
2743
  var shlo_r = (r, args, registers) => {
2677
- const shift = u32(registers[reg(args.a)] % u64(MAX_SHIFT_64));
2678
- registers[reg(args.c)] = registers[reg(args.b)] >> u64(shift);
2679
- return ok(r);
2744
+ const shift = u32(registers[Inst.reg(args.a)] % u64(MAX_SHIFT_64));
2745
+ registers[Inst.reg(args.c)] = registers[Inst.reg(args.b)] >> u64(shift);
2746
+ return OutcomeData.ok(r);
2680
2747
  };
2681
2748
  var shar_r = (r, args, registers) => {
2682
- const shift = u32(registers[reg(args.a)] % u64(MAX_SHIFT_64));
2683
- registers[reg(args.c)] = u64(i64(registers[reg(args.b)]) >> i64(shift));
2684
- return ok(r);
2749
+ const shift = u32(registers[Inst.reg(args.a)] % u64(MAX_SHIFT_64));
2750
+ registers[Inst.reg(args.c)] = u64(i64(registers[Inst.reg(args.b)]) >> i64(shift));
2751
+ return OutcomeData.ok(r);
2685
2752
  };
2686
2753
 
2687
2754
  // dist/build/js/assembly/instructions/store.js
2688
2755
  var faultRes3 = new MaybePageFault();
2689
2756
  function effectiveAddress(registers, baseReg, offset) {
2690
- return u32(portable.u64_add(registers[reg(u64(baseReg))], u32SignExtend(offset)));
2757
+ return u32(portable.u64_add(registers[Inst.reg(u64(baseReg))], Inst.u32SignExtend(offset)));
2691
2758
  }
2692
2759
  var store_imm_u8 = (r, args, _registers, memory) => {
2693
2760
  const address = args.a;
2694
2761
  memory.setU8(faultRes3, address, args.b & 255);
2695
- return okOrFault(r, faultRes3);
2762
+ return OutcomeData.okOrFault(r, faultRes3);
2696
2763
  };
2697
2764
  var store_imm_u16 = (r, args, _registers, memory) => {
2698
2765
  const address = args.a;
2699
2766
  memory.setU16(faultRes3, address, args.b & 65535);
2700
- return okOrFault(r, faultRes3);
2767
+ return OutcomeData.okOrFault(r, faultRes3);
2701
2768
  };
2702
2769
  var store_imm_u32 = (r, args, _registers, memory) => {
2703
2770
  const address = args.a;
2704
2771
  memory.setU32(faultRes3, address, args.b);
2705
- return okOrFault(r, faultRes3);
2772
+ return OutcomeData.okOrFault(r, faultRes3);
2706
2773
  };
2707
2774
  var store_imm_u64 = (r, args, _registers, memory) => {
2708
2775
  const address = args.a;
2709
- memory.setU64(faultRes3, address, u32SignExtend(args.b));
2710
- return okOrFault(r, faultRes3);
2776
+ memory.setU64(faultRes3, address, Inst.u32SignExtend(args.b));
2777
+ return OutcomeData.okOrFault(r, faultRes3);
2711
2778
  };
2712
2779
  var store_u8 = (r, args, registers, memory) => {
2713
- memory.setU8(faultRes3, args.b, registers[reg(args.a)] & u64(255));
2714
- return okOrFault(r, faultRes3);
2780
+ memory.setU8(faultRes3, args.b, registers[Inst.reg(args.a)] & u64(255));
2781
+ return OutcomeData.okOrFault(r, faultRes3);
2715
2782
  };
2716
2783
  var store_u16 = (r, args, registers, memory) => {
2717
- memory.setU16(faultRes3, args.b, registers[reg(args.a)] & u64(65535));
2718
- return okOrFault(r, faultRes3);
2784
+ memory.setU16(faultRes3, args.b, registers[Inst.reg(args.a)] & u64(65535));
2785
+ return OutcomeData.okOrFault(r, faultRes3);
2719
2786
  };
2720
2787
  var store_u32 = (r, args, registers, memory) => {
2721
- memory.setU32(faultRes3, args.b, u32(registers[reg(args.a)]));
2722
- return okOrFault(r, faultRes3);
2788
+ memory.setU32(faultRes3, args.b, u32(registers[Inst.reg(args.a)]));
2789
+ return OutcomeData.okOrFault(r, faultRes3);
2723
2790
  };
2724
2791
  var store_u64 = (r, args, registers, memory) => {
2725
- memory.setU64(faultRes3, args.b, registers[reg(args.a)]);
2726
- return okOrFault(r, faultRes3);
2792
+ memory.setU64(faultRes3, args.b, registers[Inst.reg(args.a)]);
2793
+ return OutcomeData.okOrFault(r, faultRes3);
2727
2794
  };
2728
2795
  var store_imm_ind_u8 = (r, args, registers, memory) => {
2729
2796
  const address = effectiveAddress(registers, args.a, args.b);
2730
2797
  memory.setU8(faultRes3, address, args.c & 255);
2731
- return okOrFault(r, faultRes3);
2798
+ return OutcomeData.okOrFault(r, faultRes3);
2732
2799
  };
2733
2800
  var store_imm_ind_u16 = (r, args, registers, memory) => {
2734
2801
  const address = effectiveAddress(registers, args.a, args.b);
2735
2802
  memory.setU16(faultRes3, address, args.c & 65535);
2736
- return okOrFault(r, faultRes3);
2803
+ return OutcomeData.okOrFault(r, faultRes3);
2737
2804
  };
2738
2805
  var store_imm_ind_u32 = (r, args, registers, memory) => {
2739
2806
  const address = effectiveAddress(registers, args.a, args.b);
2740
2807
  memory.setU32(faultRes3, address, args.c);
2741
- return okOrFault(r, faultRes3);
2808
+ return OutcomeData.okOrFault(r, faultRes3);
2742
2809
  };
2743
2810
  var store_imm_ind_u64 = (r, args, registers, memory) => {
2744
2811
  const address = effectiveAddress(registers, args.a, args.b);
2745
- memory.setU64(faultRes3, address, u32SignExtend(args.c));
2746
- return okOrFault(r, faultRes3);
2812
+ memory.setU64(faultRes3, address, Inst.u32SignExtend(args.c));
2813
+ return OutcomeData.okOrFault(r, faultRes3);
2747
2814
  };
2748
2815
  var store_ind_u8 = (r, args, registers, memory) => {
2749
2816
  const address = effectiveAddress(registers, args.a, args.c);
2750
- memory.setU8(faultRes3, address, registers[reg(args.b)] & u64(255));
2751
- return okOrFault(r, faultRes3);
2817
+ memory.setU8(faultRes3, address, registers[Inst.reg(args.b)] & u64(255));
2818
+ return OutcomeData.okOrFault(r, faultRes3);
2752
2819
  };
2753
2820
  var store_ind_u16 = (r, args, registers, memory) => {
2754
2821
  const address = effectiveAddress(registers, args.a, args.c);
2755
- memory.setU16(faultRes3, address, registers[reg(args.b)] & u64(65535));
2756
- return okOrFault(r, faultRes3);
2822
+ memory.setU16(faultRes3, address, registers[Inst.reg(args.b)] & u64(65535));
2823
+ return OutcomeData.okOrFault(r, faultRes3);
2757
2824
  };
2758
2825
  var store_ind_u32 = (r, args, registers, memory) => {
2759
2826
  const address = effectiveAddress(registers, args.a, args.c);
2760
- memory.setU32(faultRes3, address, u32(registers[reg(args.b)]));
2761
- return okOrFault(r, faultRes3);
2827
+ memory.setU32(faultRes3, address, u32(registers[Inst.reg(args.b)]));
2828
+ return OutcomeData.okOrFault(r, faultRes3);
2762
2829
  };
2763
2830
  var store_ind_u64 = (r, args, registers, memory) => {
2764
2831
  const address = effectiveAddress(registers, args.a, args.c);
2765
- memory.setU64(faultRes3, address, registers[reg(args.b)]);
2766
- return okOrFault(r, faultRes3);
2832
+ memory.setU64(faultRes3, address, registers[Inst.reg(args.b)]);
2833
+ return OutcomeData.okOrFault(r, faultRes3);
2767
2834
  };
2768
2835
 
2769
2836
  // dist/build/js/assembly/instructions-exe.js
@@ -3160,13 +3227,13 @@ function liftBytes(data) {
3160
3227
  return p;
3161
3228
  }
3162
3229
  function lowerBytes(data) {
3163
- const r = new Array(data.length);
3230
+ const r = new StaticArray(data.length);
3164
3231
  for (let i = 0; i < data.length; i++) {
3165
3232
  r[i] = data[i];
3166
3233
  }
3167
3234
  return r;
3168
3235
  }
3169
- function deblob(program) {
3236
+ function deblob(program, useBlockGas) {
3170
3237
  const decoder = new Decoder(program);
3171
3238
  const jumpTableLength = decoder.varU32();
3172
3239
  const jumpTableItemLength = decoder.u8();
@@ -3178,7 +3245,8 @@ function deblob(program) {
3178
3245
  const mask = new Mask(rawMask, codeLength);
3179
3246
  const jumpTable = new JumpTable(jumpTableItemLength, rawJumpTable);
3180
3247
  const basicBlocks = new BasicBlocks(rawCode, mask);
3181
- return new Program(rawCode, mask, jumpTable, basicBlocks);
3248
+ const gasCosts = new GasCosts(rawCode, mask, basicBlocks, useBlockGas);
3249
+ return new Program(rawCode, mask, jumpTable, basicBlocks, gasCosts);
3182
3250
  }
3183
3251
  var Mask = class {
3184
3252
  constructor(packedMask, codeLength) {
@@ -3225,6 +3293,51 @@ var Mask = class {
3225
3293
  return `${v}]`;
3226
3294
  }
3227
3295
  };
3296
+ var GasCosts = class {
3297
+ constructor(code, mask, blocks, useBlockGasCost) {
3298
+ const len = code.length;
3299
+ const costs = new StaticArray(len);
3300
+ for (let n = 0; n < len; n += 1) {
3301
+ const isInstructionInMask = mask.isInstruction(n);
3302
+ if (!isInstructionInMask) {
3303
+ costs[n] = code[n];
3304
+ continue;
3305
+ }
3306
+ const skipArgs = mask.skipBytesToNextInstruction(n);
3307
+ const iData = code[n] >= INSTRUCTIONS.length ? MISSING_INSTRUCTION : INSTRUCTIONS[code[n]];
3308
+ costs[n] = code[n] | iData.gas << 8;
3309
+ n += skipArgs;
3310
+ }
3311
+ if (useBlockGasCost) {
3312
+ let previousStart = 0;
3313
+ let previousSum = 0;
3314
+ for (let n = 0; n < len; n += 1) {
3315
+ const currentGas = costs[n] >> 8;
3316
+ costs[n] = code[n];
3317
+ if (blocks.isStart(n)) {
3318
+ costs[previousStart] = code[previousStart] | previousSum << 8;
3319
+ previousSum = currentGas;
3320
+ previousStart = n;
3321
+ } else {
3322
+ previousSum += currentGas;
3323
+ }
3324
+ n += mask.skipBytesToNextInstruction(n);
3325
+ }
3326
+ costs[previousStart] = code[previousStart] | previousSum << 8;
3327
+ }
3328
+ this.codeAndGas = costs;
3329
+ }
3330
+ toString() {
3331
+ let v = "GasCosts[";
3332
+ for (let i = 0; i < this.codeAndGas.length; i += 1) {
3333
+ const gas = this.codeAndGas[i] >> 8;
3334
+ if (gas !== 0) {
3335
+ v += `${i} -> ${gas}, `;
3336
+ }
3337
+ }
3338
+ return `${v}]`;
3339
+ }
3340
+ };
3228
3341
  var BasicBlock;
3229
3342
  (function(BasicBlock2) {
3230
3343
  BasicBlock2[BasicBlock2["NONE"] = 0] = "NONE";
@@ -3302,29 +3415,30 @@ var JumpTable = class {
3302
3415
  }
3303
3416
  };
3304
3417
  var Program = class {
3305
- constructor(code, mask, jumpTable, basicBlocks) {
3418
+ constructor(code, mask, jumpTable, basicBlocks, gasCosts) {
3306
3419
  this.code = code;
3307
3420
  this.mask = mask;
3308
3421
  this.jumpTable = jumpTable;
3309
3422
  this.basicBlocks = basicBlocks;
3423
+ this.gasCosts = gasCosts;
3310
3424
  }
3311
3425
  toString() {
3312
- return `Program { code: ${this.code}, mask: ${this.mask}, jumpTable: ${this.jumpTable}, basicBlocks: ${this.basicBlocks} }`;
3426
+ return `Program { code: ${this.code}, mask: ${this.mask}, jumpTable: ${this.jumpTable}, basicBlocks: ${this.basicBlocks}, gasCosts: ${this.gasCosts} }`;
3313
3427
  }
3314
3428
  };
3315
- var EXTENDED_BUF = new Array(16);
3429
+ var EXTENDED_BUF = new StaticArray(16);
3316
3430
  function decodeArguments(args, kind, code, offset, lim) {
3317
3431
  if (code.length < offset + REQUIRED_BYTES[kind]) {
3318
- const reqBytes = REQUIRED_BYTES[kind];
3432
+ const reqBytes = unchecked(REQUIRED_BYTES[kind]);
3319
3433
  for (let i = 0; i < reqBytes; i++) {
3320
3434
  EXTENDED_BUF[i] = 0;
3321
3435
  }
3322
3436
  for (let i = offset; i < code.length; i++) {
3323
- EXTENDED_BUF[i - offset] = code[i];
3437
+ EXTENDED_BUF[i - offset] = unchecked(code[i]);
3324
3438
  }
3325
- return DECODERS[kind](args, EXTENDED_BUF, 0, lim);
3439
+ return unchecked(DECODERS[kind])(args, EXTENDED_BUF, 0, lim);
3326
3440
  }
3327
- return DECODERS[kind](args, code, offset, offset + lim);
3441
+ return unchecked(DECODERS[kind])(args, code, offset, offset + lim);
3328
3442
  }
3329
3443
  var ResolvedArguments = class {
3330
3444
  constructor() {
@@ -3346,57 +3460,57 @@ function resolveArguments(argsRes, kind, code, offset, lim, registers) {
3346
3460
  case Arguments.Zero:
3347
3461
  return resolved;
3348
3462
  case Arguments.OneImm:
3349
- resolved.a = u32SignExtend(args.a);
3463
+ resolved.a = Inst.u32SignExtend(args.a);
3350
3464
  return resolved;
3351
3465
  case Arguments.TwoImm:
3352
- resolved.a = u32SignExtend(args.a);
3353
- resolved.b = u32SignExtend(args.b);
3466
+ resolved.a = Inst.u32SignExtend(args.a);
3467
+ resolved.b = Inst.u32SignExtend(args.b);
3354
3468
  return resolved;
3355
3469
  case Arguments.OneOff:
3356
- resolved.a = u32SignExtend(args.a);
3470
+ resolved.a = Inst.u32SignExtend(args.a);
3357
3471
  return resolved;
3358
3472
  case Arguments.OneRegOneImm:
3359
- resolved.a = registers[reg(u64(args.a))];
3360
- resolved.b = u32SignExtend(args.b);
3473
+ resolved.a = registers[Inst.reg(u64(args.a))];
3474
+ resolved.b = Inst.u32SignExtend(args.b);
3361
3475
  return resolved;
3362
3476
  case Arguments.OneRegOneExtImm:
3363
- resolved.a = registers[reg(u64(args.a))];
3477
+ resolved.a = registers[Inst.reg(u64(args.a))];
3364
3478
  resolved.b = portable.u64_add(u64(args.a) << u64(32), u64(args.b));
3365
3479
  return resolved;
3366
3480
  case Arguments.OneRegTwoImm:
3367
- resolved.a = registers[reg(u64(args.a))];
3368
- resolved.b = u32SignExtend(args.b);
3369
- resolved.c = u32SignExtend(args.c);
3481
+ resolved.a = registers[Inst.reg(u64(args.a))];
3482
+ resolved.b = Inst.u32SignExtend(args.b);
3483
+ resolved.c = Inst.u32SignExtend(args.c);
3370
3484
  return resolved;
3371
3485
  case Arguments.OneRegOneImmOneOff:
3372
- resolved.a = registers[reg(u64(args.a))];
3373
- resolved.b = u32SignExtend(args.b);
3374
- resolved.c = u32SignExtend(args.c);
3486
+ resolved.a = registers[Inst.reg(u64(args.a))];
3487
+ resolved.b = Inst.u32SignExtend(args.b);
3488
+ resolved.c = Inst.u32SignExtend(args.c);
3375
3489
  return resolved;
3376
3490
  case Arguments.TwoReg:
3377
- resolved.a = registers[reg(u64(args.a))];
3378
- resolved.b = registers[reg(u64(args.b))];
3491
+ resolved.a = registers[Inst.reg(u64(args.a))];
3492
+ resolved.b = registers[Inst.reg(u64(args.b))];
3379
3493
  return resolved;
3380
3494
  case Arguments.TwoRegOneImm:
3381
- resolved.a = registers[reg(u64(args.a))];
3382
- resolved.b = registers[reg(u64(args.b))];
3383
- resolved.c = u32SignExtend(args.c);
3495
+ resolved.a = registers[Inst.reg(u64(args.a))];
3496
+ resolved.b = registers[Inst.reg(u64(args.b))];
3497
+ resolved.c = Inst.u32SignExtend(args.c);
3384
3498
  return resolved;
3385
3499
  case Arguments.TwoRegOneOff:
3386
- resolved.a = registers[reg(u64(args.a))];
3387
- resolved.b = registers[reg(u64(args.b))];
3388
- resolved.c = u32SignExtend(args.c);
3500
+ resolved.a = registers[Inst.reg(u64(args.a))];
3501
+ resolved.b = registers[Inst.reg(u64(args.b))];
3502
+ resolved.c = Inst.u32SignExtend(args.c);
3389
3503
  return resolved;
3390
3504
  case Arguments.TwoRegTwoImm:
3391
- resolved.a = registers[reg(u64(args.a))];
3392
- resolved.b = registers[reg(u64(args.b))];
3393
- resolved.c = u32SignExtend(args.c);
3394
- resolved.d = u32SignExtend(args.d);
3505
+ resolved.a = registers[Inst.reg(u64(args.a))];
3506
+ resolved.b = registers[Inst.reg(u64(args.b))];
3507
+ resolved.c = Inst.u32SignExtend(args.c);
3508
+ resolved.d = Inst.u32SignExtend(args.d);
3395
3509
  return resolved;
3396
3510
  case Arguments.ThreeReg:
3397
- resolved.a = registers[reg(u64(args.a))];
3398
- resolved.b = registers[reg(u64(args.b))];
3399
- resolved.c = registers[reg(u64(args.c))];
3511
+ resolved.a = registers[Inst.reg(u64(args.a))];
3512
+ resolved.b = registers[Inst.reg(u64(args.b))];
3513
+ resolved.c = registers[Inst.reg(u64(args.c))];
3400
3514
  return resolved;
3401
3515
  default:
3402
3516
  throw new Error(`Unhandled arguments kind: ${kind}`);
@@ -3445,7 +3559,6 @@ var Interpreter = class {
3445
3559
  this.status = Status.OK;
3446
3560
  this.exitCode = 0;
3447
3561
  this.nextPc = 0;
3448
- this.useSbrkGas = false;
3449
3562
  }
3450
3563
  nextSteps(nSteps2 = 1) {
3451
3564
  if (this.status === Status.HOST) {
@@ -3461,9 +3574,11 @@ var Interpreter = class {
3461
3574
  this.nextPc = -1;
3462
3575
  return true;
3463
3576
  }
3464
- const program = this.program;
3465
- const code = program.code;
3466
- const mask = program.mask;
3577
+ const code = this.program.code;
3578
+ const mask = this.program.mask;
3579
+ const gasCosts = this.program.gasCosts.codeAndGas;
3580
+ const basicBlocks = this.program.basicBlocks;
3581
+ const jumpTable = this.program.jumpTable;
3467
3582
  const argsRes = this.argsRes;
3468
3583
  const outcomeRes = this.outcomeRes;
3469
3584
  for (let i = 0; i < nSteps2; i++) {
@@ -3479,9 +3594,11 @@ var Interpreter = class {
3479
3594
  }
3480
3595
  return false;
3481
3596
  }
3482
- const instruction2 = unchecked(code[pc]);
3597
+ const codeAndGas = portable.staticArrayAt(gasCosts, pc);
3598
+ const instruction2 = codeAndGas & 255;
3599
+ const gasCost = codeAndGas >> 8;
3483
3600
  const iData = instruction2 < INSTRUCTIONS.length ? unchecked(INSTRUCTIONS[instruction2]) : MISSING_INSTRUCTION;
3484
- if (this.gas.sub(iData.gas)) {
3601
+ if (gasCost > 0 && this.gas.sub(gasCost)) {
3485
3602
  this.status = Status.OOG;
3486
3603
  return false;
3487
3604
  }
@@ -3491,14 +3608,6 @@ var Interpreter = class {
3491
3608
  }
3492
3609
  const skipBytes2 = mask.skipBytesToNextInstruction(pc);
3493
3610
  const args = decodeArguments(argsRes, iData.kind, code, pc + 1, skipBytes2);
3494
- if (iData === SBRK && this.useSbrkGas) {
3495
- const alloc = u64(u32(this.registers[reg(u64(args.a))]));
3496
- const gas = portable.u64_mul(portable.u64_sub(portable.u64_add(alloc, u64(PAGE_SIZE)), u64(1)) >> u64(PAGE_SIZE_SHIFT), u64(16));
3497
- if (this.gas.sub(gas)) {
3498
- this.status = Status.OOG;
3499
- return false;
3500
- }
3501
- }
3502
3611
  const exe = unchecked(RUN[instruction2]);
3503
3612
  const outcome = exe(outcomeRes, args, this.registers, this.memory);
3504
3613
  if (outcome.outcome === Outcome.Ok) {
@@ -3507,7 +3616,7 @@ var Interpreter = class {
3507
3616
  }
3508
3617
  switch (outcome.outcome) {
3509
3618
  case Outcome.StaticJump: {
3510
- const branchResult = branch(this.branchRes, program.basicBlocks, pc, outcome.staticJump);
3619
+ const branchResult = branch(this.branchRes, basicBlocks, pc, outcome.staticJump);
3511
3620
  if (!branchResult.isOkay) {
3512
3621
  this.status = Status.PANIC;
3513
3622
  return false;
@@ -3516,7 +3625,7 @@ var Interpreter = class {
3516
3625
  continue;
3517
3626
  }
3518
3627
  case Outcome.DynamicJump: {
3519
- const res = dJump2(this.djumpRes, program.jumpTable, outcome.dJump);
3628
+ const res = dJump(this.djumpRes, jumpTable, outcome.dJump);
3520
3629
  if (res.status === DjumpStatus.HALT) {
3521
3630
  this.status = Status.HALT;
3522
3631
  return false;
@@ -3525,7 +3634,7 @@ var Interpreter = class {
3525
3634
  this.status = Status.PANIC;
3526
3635
  return false;
3527
3636
  }
3528
- const branchResult = branch(this.branchRes, program.basicBlocks, res.newPc, 0);
3637
+ const branchResult = branch(this.branchRes, basicBlocks, res.newPc, 0);
3529
3638
  if (!branchResult.isOkay) {
3530
3639
  this.status = Status.PANIC;
3531
3640
  return false;
@@ -3578,7 +3687,7 @@ function branch(r, basicBlocks, pc, offset) {
3578
3687
  }
3579
3688
  var EXIT = 4294901760;
3580
3689
  var JUMP_ALIGMENT_FACTOR = 2;
3581
- function dJump2(r, jumpTable, address) {
3690
+ function dJump(r, jumpTable, address) {
3582
3691
  if (address === EXIT) {
3583
3692
  r.status = DjumpStatus.HALT;
3584
3693
  return r;
@@ -3619,7 +3728,6 @@ var InitialChunk = class {
3619
3728
  };
3620
3729
  var VmRunOptions = class {
3621
3730
  constructor() {
3622
- this.useSbrkGas = false;
3623
3731
  this.logs = false;
3624
3732
  this.dumpMemory = false;
3625
3733
  }
@@ -3706,15 +3814,14 @@ function buildMemory(builder, pages, chunks) {
3706
3814
  }
3707
3815
  return builder.build(sbrkIndex);
3708
3816
  }
3709
- function vmInit(input, useSbrkGas = false) {
3817
+ function vmInit(input) {
3710
3818
  const int = new Interpreter(input.program, input.registers, input.memory);
3711
- int.useSbrkGas = useSbrkGas;
3712
3819
  int.nextPc = input.pc;
3713
3820
  int.gas.set(input.gas);
3714
3821
  return int;
3715
3822
  }
3716
3823
  function vmRunOnce(input, options) {
3717
- const int = vmInit(input, options.useSbrkGas);
3824
+ const int = vmInit(input);
3718
3825
  vmExecute(int, options.logs);
3719
3826
  return vmDestroy(int, options.dumpMemory);
3720
3827
  }
@@ -3830,7 +3937,7 @@ function getOutputChunks(memory) {
3830
3937
  var MAX_ARGS_LEN = 2 ** 24;
3831
3938
  var ARGS_SEGMENT_START = 2 ** 32 - SEGMENT_SIZE - MAX_ARGS_LEN;
3832
3939
  var STACK_SEGMENT_END = ARGS_SEGMENT_START - SEGMENT_SIZE;
3833
- function decodeSpi(data, args, preallocateMemoryPages = 0) {
3940
+ function decodeSpi(data, args, preallocateMemoryPages = 0, useBlockGas = false) {
3834
3941
  const argsLength = args.length;
3835
3942
  if (argsLength > MAX_ARGS_LEN) {
3836
3943
  throw new Error(`Arguments length is too big. Got: ${argsLength}, max: ${MAX_ARGS_LEN}`);
@@ -3845,7 +3952,7 @@ function decodeSpi(data, args, preallocateMemoryPages = 0) {
3845
3952
  const codeLength = decoder.u32();
3846
3953
  const code = decoder.bytes(codeLength);
3847
3954
  decoder.finish();
3848
- const program = deblob(code);
3955
+ const program = deblob(code, useBlockGas);
3849
3956
  const builder = new MemoryBuilder(preallocateMemoryPages);
3850
3957
  const heapStart = 2 * SEGMENT_SIZE + alignToSegmentSize(roLength);
3851
3958
  const heapZerosStart = heapStart + alignToPageSize(rwLength);
@@ -3895,9 +4002,9 @@ var StandardProgram = class {
3895
4002
 
3896
4003
  // dist/build/js/assembly/api-debugger.js
3897
4004
  var interpreter = null;
3898
- function resetJAM(program, pc, initialGas, args, hasMetadata = false) {
4005
+ function resetJAM(program, pc, initialGas, args, hasMetadata = false, useBlockGas = false) {
3899
4006
  const code = hasMetadata ? extractCodeAndMetadata(liftBytes(program)).code : liftBytes(program);
3900
- const p = decodeSpi(code, liftBytes(args), 128);
4007
+ const p = decodeSpi(code, liftBytes(args), 128, useBlockGas);
3901
4008
  const int = new Interpreter(p.program, p.registers, p.memory);
3902
4009
  int.nextPc = pc;
3903
4010
  int.gas.set(initialGas);
@@ -3906,9 +4013,9 @@ function resetJAM(program, pc, initialGas, args, hasMetadata = false) {
3906
4013
  }
3907
4014
  interpreter = int;
3908
4015
  }
3909
- function resetGeneric(program, flatRegisters, initialGas, hasMetadata = false) {
4016
+ function resetGeneric(program, flatRegisters, initialGas, hasMetadata = false, useBlockGas = false) {
3910
4017
  const code = hasMetadata ? extractCodeAndMetadata(liftBytes(program)).code : liftBytes(program);
3911
- const p = deblob(code);
4018
+ const p = deblob(code, useBlockGas);
3912
4019
  const registers = newRegisters();
3913
4020
  fillRegisters(registers, flatRegisters);
3914
4021
  const int = new Interpreter(p, registers);
@@ -3918,9 +4025,9 @@ function resetGeneric(program, flatRegisters, initialGas, hasMetadata = false) {
3918
4025
  }
3919
4026
  interpreter = int;
3920
4027
  }
3921
- function resetGenericWithMemory(program, flatRegisters, pageMap, chunks, initialGas, hasMetadata = false) {
4028
+ function resetGenericWithMemory(program, flatRegisters, pageMap, chunks, initialGas, hasMetadata = false, useBlockGas = false) {
3922
4029
  const code = hasMetadata ? extractCodeAndMetadata(liftBytes(program)).code : liftBytes(program);
3923
- const p = deblob(code);
4030
+ const p = deblob(code, useBlockGas);
3924
4031
  const registers = newRegisters();
3925
4032
  fillRegisters(registers, flatRegisters);
3926
4033
  const builder = new MemoryBuilder();
@@ -4094,42 +4201,6 @@ function readChunks(chunks) {
4094
4201
  return res;
4095
4202
  }
4096
4203
 
4097
- // dist/build/js/assembly/gas-costs.js
4098
- var BlockGasCost = class {
4099
- constructor() {
4100
- this.pc = 0;
4101
- this.gas = u64(0);
4102
- }
4103
- };
4104
- function computeGasCosts(p) {
4105
- const len = p.code.length;
4106
- const blocks = /* @__PURE__ */ new Map();
4107
- let currentBlock = null;
4108
- for (let i = 0; i < len; i++) {
4109
- if (!p.mask.isInstruction(i)) {
4110
- throw new Error("We should iterate only over instructions!");
4111
- }
4112
- const instruction2 = p.code[i];
4113
- const iData = instruction2 >= INSTRUCTIONS.length ? MISSING_INSTRUCTION : INSTRUCTIONS[instruction2];
4114
- if (p.basicBlocks.isStart(i)) {
4115
- if (currentBlock !== null) {
4116
- blocks.set(currentBlock.pc, currentBlock);
4117
- }
4118
- currentBlock = new BlockGasCost();
4119
- currentBlock.pc = i;
4120
- }
4121
- if (currentBlock !== null) {
4122
- currentBlock.gas = portable.u64_add(currentBlock.gas, iData.gas);
4123
- }
4124
- const skipBytes2 = p.mask.skipBytesToNextInstruction(i);
4125
- i += skipBytes2;
4126
- }
4127
- if (currentBlock !== null) {
4128
- blocks.set(currentBlock.pc, currentBlock);
4129
- }
4130
- return blocks;
4131
- }
4132
-
4133
4204
  // dist/build/js/assembly/api-utils.js
4134
4205
  var InputKind;
4135
4206
  (function(InputKind2) {
@@ -4141,12 +4212,29 @@ var HasMetadata;
4141
4212
  HasMetadata2[HasMetadata2["Yes"] = 0] = "Yes";
4142
4213
  HasMetadata2[HasMetadata2["No"] = 1] = "No";
4143
4214
  })(HasMetadata || (HasMetadata = {}));
4144
- function getGasCosts(input, kind, withMetadata) {
4145
- const program = prepareProgram(kind, withMetadata, input, [], [], [], [], 0);
4146
- return portable.asArray(computeGasCosts(program.program).values());
4215
+ var BlockGasCost = class {
4216
+ constructor() {
4217
+ this.pc = 0;
4218
+ this.gas = 0;
4219
+ }
4220
+ };
4221
+ function getBlockGasCosts(input, kind, withMetadata) {
4222
+ const program = prepareProgram(kind, withMetadata, input, [], [], [], [], 0, true);
4223
+ const blockCosts = [];
4224
+ const costs = program.program.gasCosts.codeAndGas;
4225
+ for (let n = 0; n < costs.length; n += 1) {
4226
+ const gas = costs[n] >> 8;
4227
+ if (gas !== 0) {
4228
+ const x = new BlockGasCost();
4229
+ x.pc = n;
4230
+ x.gas = costs[n];
4231
+ blockCosts.push(x);
4232
+ }
4233
+ }
4234
+ return blockCosts;
4147
4235
  }
4148
4236
  function disassemble(input, kind, withMetadata) {
4149
- const program = prepareProgram(kind, withMetadata, input, [], [], [], [], 0);
4237
+ const program = prepareProgram(kind, withMetadata, input, [], [], [], [], 0, false);
4150
4238
  let output = "";
4151
4239
  if (withMetadata === HasMetadata.Yes) {
4152
4240
  output = "Metadata: \n";
@@ -4157,7 +4245,7 @@ function disassemble(input, kind, withMetadata) {
4157
4245
  output += getAssembly(program.program);
4158
4246
  return output;
4159
4247
  }
4160
- function prepareProgram(kind, hasMetadata, program, initialRegisters, initialPageMap, initialMemory, args, preallocateMemoryPages) {
4248
+ function prepareProgram(kind, hasMetadata, program, initialRegisters, initialPageMap, initialMemory, args, preallocateMemoryPages, useBlockGas) {
4161
4249
  let code = liftBytes(program);
4162
4250
  let metadata = new Uint8Array(0);
4163
4251
  if (hasMetadata === HasMetadata.Yes) {
@@ -4166,7 +4254,7 @@ function prepareProgram(kind, hasMetadata, program, initialRegisters, initialPag
4166
4254
  metadata = data.metadata;
4167
4255
  }
4168
4256
  if (kind === InputKind.Generic) {
4169
- const program2 = deblob(code);
4257
+ const program2 = deblob(code, useBlockGas);
4170
4258
  const builder = new MemoryBuilder(preallocateMemoryPages);
4171
4259
  const memory = buildMemory(builder, initialPageMap, initialMemory);
4172
4260
  const registers = newRegisters();
@@ -4185,22 +4273,21 @@ function prepareProgram(kind, hasMetadata, program, initialRegisters, initialPag
4185
4273
  }
4186
4274
  throw new Error(`Unknown kind: ${kind}`);
4187
4275
  }
4188
- function runProgram(program, initialGas = 0, programCounter = 0, logs = false, useSbrkGas = false, dumpMemory = false) {
4276
+ function runProgram(program, initialGas = 0, programCounter = 0, logs = false, dumpMemory = false) {
4189
4277
  const vmInput = new VmInput(program.program, program.memory, program.registers);
4190
4278
  vmInput.gas = i64(initialGas);
4191
4279
  vmInput.pc = programCounter;
4192
4280
  const vmOptions = new VmRunOptions();
4193
4281
  vmOptions.logs = logs;
4194
- vmOptions.useSbrkGas = useSbrkGas;
4195
4282
  vmOptions.dumpMemory = dumpMemory;
4196
4283
  return vmRunOnce(vmInput, vmOptions);
4197
4284
  }
4198
4285
  var nextPvmId = 0;
4199
4286
  var pvms = /* @__PURE__ */ new Map();
4200
- function pvmStart(program, useSbrkGas = false) {
4287
+ function pvmStart(program) {
4201
4288
  const vmInput = new VmInput(program.program, program.memory, program.registers);
4202
4289
  nextPvmId += 1;
4203
- pvms.set(nextPvmId, vmInit(vmInput, useSbrkGas));
4290
+ pvms.set(nextPvmId, vmInit(vmInput));
4204
4291
  return nextPvmId;
4205
4292
  }
4206
4293
  function pvmDestroy(pvmId) {
@@ -4329,9 +4416,9 @@ function skipBytes(kind, data) {
4329
4416
  case Arguments.TwoReg:
4330
4417
  return 1;
4331
4418
  case Arguments.TwoRegOneImm:
4332
- return 1 + minI32(4, data.length);
4419
+ return 1 + IntMath.minI32(4, data.length);
4333
4420
  case Arguments.TwoRegOneOff:
4334
- return 1 + minI32(4, data.length);
4421
+ return 1 + IntMath.minI32(4, data.length);
4335
4422
  case Arguments.TwoRegTwoImm: {
4336
4423
  const low = lowNibble(data[1]);
4337
4424
  const split = low + 1;
@@ -4371,15 +4458,15 @@ function immBytes(dataLength, required) {
4371
4458
  if (dataLength < required) {
4372
4459
  return 0;
4373
4460
  }
4374
- return minI32(4, dataLength - required);
4461
+ return IntMath.minI32(4, dataLength - required);
4375
4462
  }
4376
4463
  export {
4377
4464
  HasMetadata,
4378
4465
  InputKind,
4379
4466
  disassemble,
4380
4467
  getAssembly,
4468
+ getBlockGasCosts,
4381
4469
  getExitArg,
4382
- getGasCosts,
4383
4470
  getGasLeft,
4384
4471
  getMemory,
4385
4472
  getPageDump,