@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.
- package/dist/bin/index.js +3 -2
- package/dist/bin/src/fuzz.js +1 -1
- package/dist/bin/src/test-json.js +2 -6
- package/dist/bin/src/trace-replay.js +8 -4
- package/dist/build/compiler-inline.js +1 -1
- package/dist/build/compiler.d.ts +2 -13
- package/dist/build/compiler.js +1 -25
- package/dist/build/compiler.wasm +0 -0
- package/dist/build/debug-inline.js +1 -1
- package/dist/build/debug-raw-inline.js +1 -1
- package/dist/build/debug-raw.d.ts +27 -25
- package/dist/build/debug-raw.js +58 -57
- package/dist/build/debug-raw.wasm +0 -0
- package/dist/build/debug.d.ts +27 -25
- package/dist/build/debug.js +59 -58
- package/dist/build/debug.wasm +0 -0
- package/dist/build/js/assembly/api-debugger.d.ts +3 -3
- package/dist/build/js/assembly/api-debugger.js +6 -6
- package/dist/build/js/assembly/api-internal.d.ts +1 -1
- package/dist/build/js/assembly/api-internal.js +2 -3
- package/dist/build/js/assembly/api-types.d.ts +0 -1
- package/dist/build/js/assembly/api-types.js +0 -1
- package/dist/build/js/assembly/api-utils.d.ts +12 -5
- package/dist/build/js/assembly/api-utils.js +28 -13
- package/dist/build/js/assembly/arguments.d.ts +4 -4
- package/dist/build/js/assembly/arguments.js +10 -10
- package/dist/build/js/assembly/gas.d.ts +1 -1
- package/dist/build/js/assembly/gas.js +3 -2
- package/dist/build/js/assembly/instructions/bit.js +22 -22
- package/dist/build/js/assembly/instructions/branch.js +56 -56
- package/dist/build/js/assembly/instructions/jump.js +10 -10
- package/dist/build/js/assembly/instructions/load.js +41 -41
- package/dist/build/js/assembly/instructions/logic.js +20 -20
- package/dist/build/js/assembly/instructions/math.js +105 -105
- package/dist/build/js/assembly/instructions/misc.js +10 -10
- package/dist/build/js/assembly/instructions/mov.js +16 -16
- package/dist/build/js/assembly/instructions/outcome.d.ts +7 -7
- package/dist/build/js/assembly/instructions/outcome.js +63 -36
- package/dist/build/js/assembly/instructions/rot.js +18 -18
- package/dist/build/js/assembly/instructions/set.js +18 -18
- package/dist/build/js/assembly/instructions/shift.js +59 -59
- package/dist/build/js/assembly/instructions/store.js +29 -29
- package/dist/build/js/assembly/instructions/utils.d.ts +6 -4
- package/dist/build/js/assembly/instructions/utils.js +32 -16
- package/dist/build/js/assembly/instructions.d.ts +2 -3
- package/dist/build/js/assembly/instructions.js +4 -4
- package/dist/build/js/assembly/interpreter.d.ts +0 -1
- package/dist/build/js/assembly/interpreter.js +15 -22
- package/dist/build/js/assembly/math.d.ts +6 -8
- package/dist/build/js/assembly/math.js +21 -13
- package/dist/build/js/assembly/memory.js +9 -7
- package/dist/build/js/assembly/portable.js +1 -0
- package/dist/build/js/assembly/program-build.js +4 -4
- package/dist/build/js/assembly/program.d.ts +15 -8
- package/dist/build/js/assembly/program.js +90 -40
- package/dist/build/js/assembly/spi.d.ts +1 -1
- package/dist/build/js/assembly/spi.js +2 -2
- package/dist/build/js/portable-bundle.js +666 -579
- package/dist/build/release-inline.js +1 -1
- package/dist/build/release-mini-inline.js +1 -1
- package/dist/build/release-mini.d.ts +27 -25
- package/dist/build/release-mini.js +59 -58
- package/dist/build/release-mini.wasm +0 -0
- package/dist/build/release-stub-inline.js +1 -1
- package/dist/build/release-stub.d.ts +27 -25
- package/dist/build/release-stub.js +59 -58
- package/dist/build/release-stub.wasm +0 -0
- package/dist/build/release.d.ts +27 -25
- package/dist/build/release.js +59 -58
- package/dist/build/release.wasm +0 -0
- package/dist/build/test-inline.js +1 -1
- package/dist/build/test.wasm +0 -0
- package/dist/test/test-gas-cost.js +2 -3
- package/dist/test/test-w3f-common.js +1 -2
- package/package.json +7 -7
- package/dist/build/js/assembly/gas-costs.d.ts +0 -6
- 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
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
return
|
|
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.
|
|
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.
|
|
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
|
|
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
|
-
|
|
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 -
|
|
938
|
+
this.gas = this.gas - cost;
|
|
921
939
|
return false;
|
|
922
940
|
}
|
|
923
941
|
};
|
|
924
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
1375
|
-
r
|
|
1369
|
+
r.result = result;
|
|
1370
|
+
return r;
|
|
1376
1371
|
}
|
|
1377
|
-
|
|
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
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
1806
|
+
__decorate7([
|
|
1742
1807
|
inline
|
|
1743
1808
|
], PageCache.prototype, "lookup", null);
|
|
1744
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
3465
|
-
const
|
|
3466
|
-
const
|
|
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
|
|
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(
|
|
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,
|
|
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 =
|
|
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,
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
4145
|
-
|
|
4146
|
-
|
|
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,
|
|
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
|
|
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
|
|
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,
|