@fluffylabs/anan-as 1.2.0 → 1.3.0-1ebcf8f
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 +138 -5
- package/dist/bin/src/fuzz.js +2 -2
- package/dist/bin/src/test-json.js +2 -6
- package/dist/bin/src/trace-parse.js +1 -0
- package/dist/bin/src/trace-replay.js +14 -9
- package/dist/bin/src/tracer.js +16 -13
- package/dist/bin/src/utils.js +2 -2
- package/dist/build/compiler-inline.js +1 -1
- package/dist/build/compiler.d.ts +17 -13
- package/dist/build/compiler.js +13 -21
- 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 +50 -112
- package/dist/build/debug-raw.js +78 -139
- package/dist/build/debug-raw.wasm +0 -0
- package/dist/build/debug.d.ts +50 -112
- package/dist/build/debug.js +81 -147
- package/dist/build/debug.wasm +0 -0
- package/dist/build/js/assembly/api-debugger.d.ts +55 -0
- package/dist/build/js/assembly/api-debugger.js +245 -0
- package/dist/build/js/assembly/api-internal.d.ts +13 -0
- package/dist/build/js/assembly/api-internal.js +191 -0
- package/dist/build/js/assembly/api-types.d.ts +45 -0
- package/dist/build/js/assembly/api-types.js +52 -0
- package/dist/build/js/assembly/api-utils.d.ts +79 -0
- package/dist/build/js/assembly/api-utils.js +221 -0
- package/dist/build/js/assembly/arguments.d.ts +44 -0
- package/dist/build/js/assembly/arguments.js +164 -0
- package/dist/build/js/assembly/codec.d.ts +24 -0
- package/dist/build/js/assembly/codec.js +139 -0
- package/dist/build/js/assembly/gas.d.ts +11 -0
- package/dist/build/js/assembly/gas.js +33 -0
- package/dist/build/js/assembly/index-shared.d.ts +4 -0
- package/dist/build/js/assembly/index-shared.js +4 -0
- package/dist/build/js/assembly/instructions/bit.d.ts +11 -0
- package/dist/build/js/assembly/instructions/bit.js +53 -0
- package/dist/build/js/assembly/instructions/branch.d.ts +17 -0
- package/dist/build/js/assembly/instructions/branch.js +120 -0
- package/dist/build/js/assembly/instructions/jump.d.ts +5 -0
- package/dist/build/js/assembly/instructions/jump.js +21 -0
- package/dist/build/js/assembly/instructions/load.d.ts +17 -0
- package/dist/build/js/assembly/instructions/load.js +134 -0
- package/dist/build/js/assembly/instructions/logic.d.ts +10 -0
- package/dist/build/js/assembly/instructions/logic.js +47 -0
- package/dist/build/js/assembly/instructions/math.d.ts +28 -0
- package/dist/build/js/assembly/instructions/math.js +225 -0
- package/dist/build/js/assembly/instructions/misc.d.ts +6 -0
- package/dist/build/js/assembly/instructions/misc.js +22 -0
- package/dist/build/js/assembly/instructions/mov.d.ts +6 -0
- package/dist/build/js/assembly/instructions/mov.js +35 -0
- package/dist/build/js/assembly/instructions/outcome.d.ts +30 -0
- package/dist/build/js/assembly/instructions/outcome.js +88 -0
- package/dist/build/js/assembly/instructions/rot.d.ts +15 -0
- package/dist/build/js/assembly/instructions/rot.js +66 -0
- package/dist/build/js/assembly/instructions/set.d.ts +7 -0
- package/dist/build/js/assembly/instructions/set.js +36 -0
- package/dist/build/js/assembly/instructions/shift.d.ts +19 -0
- package/dist/build/js/assembly/instructions/shift.js +121 -0
- package/dist/build/js/assembly/instructions/store.d.ts +17 -0
- package/dist/build/js/assembly/instructions/store.js +101 -0
- package/dist/build/js/assembly/instructions/utils.d.ts +25 -0
- package/dist/build/js/assembly/instructions/utils.js +91 -0
- package/dist/build/js/assembly/instructions-exe.d.ts +2 -0
- package/dist/build/js/assembly/instructions-exe.js +245 -0
- package/dist/build/js/assembly/instructions.d.ts +10 -0
- package/dist/build/js/assembly/instructions.js +252 -0
- package/dist/build/js/assembly/interpreter.d.ts +28 -0
- package/dist/build/js/assembly/interpreter.js +221 -0
- package/dist/build/js/assembly/math.d.ts +6 -0
- package/dist/build/js/assembly/math.js +22 -0
- package/dist/build/js/assembly/memory-page.d.ts +36 -0
- package/dist/build/js/assembly/memory-page.js +74 -0
- package/dist/build/js/assembly/memory.d.ts +83 -0
- package/dist/build/js/assembly/memory.js +482 -0
- package/dist/build/js/assembly/portable.d.ts +24 -0
- package/dist/build/js/assembly/portable.js +363 -0
- package/dist/build/js/assembly/program-build.d.ts +2 -0
- package/dist/build/js/assembly/program-build.js +104 -0
- package/dist/build/js/assembly/program.d.ts +85 -0
- package/dist/build/js/assembly/program.js +340 -0
- package/dist/build/js/assembly/registers.d.ts +6 -0
- package/dist/build/js/assembly/registers.js +9 -0
- package/dist/build/js/assembly/spi.d.ts +92 -0
- package/dist/build/js/assembly/spi.js +152 -0
- package/dist/build/js/portable/bootstrap.d.ts +1 -0
- package/dist/build/js/portable/bootstrap.js +6 -0
- package/dist/build/js/portable/index.d.ts +4 -0
- package/dist/build/js/portable/index.js +6 -0
- package/dist/build/js/portable-bundle.js +4497 -0
- package/dist/build/release-inline.js +1 -1
- package/dist/build/release-mini-inline.js +1 -1
- package/dist/build/release-mini.d.ts +50 -112
- package/dist/build/release-mini.js +81 -147
- package/dist/build/release-mini.wasm +0 -0
- package/dist/build/release-stub-inline.js +1 -1
- package/dist/build/release-stub.d.ts +50 -112
- package/dist/build/release-stub.js +81 -147
- package/dist/build/release-stub.wasm +0 -0
- package/dist/build/release.d.ts +50 -112
- package/dist/build/release.js +81 -147
- 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-trace-format.js +166 -0
- package/dist/test/test-w3f-common.js +125 -0
- package/dist/test/test-w3f-portable.js +5 -0
- package/dist/test/test-w3f.js +3 -120
- package/package.json +22 -11
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
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;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { portable } from "../portable";
|
|
8
|
+
import { NO_OF_REGISTERS } from "../registers";
|
|
9
|
+
/**
|
|
10
|
+
* Multiply two unsigned 64-bit numbers and take the upper 64-bits of the result.
|
|
11
|
+
*
|
|
12
|
+
* The result of multiplication is a 128-bits number and we are only interested in the part that lands in the upper 64-bits.
|
|
13
|
+
* For example (for 32-bit case) if we multiply `0xffffffff * 0xffffffff`, we get:
|
|
14
|
+
|
|
15
|
+
* | 32-bits | 32-bits |
|
|
16
|
+
* +------------+------------+
|
|
17
|
+
* | upper | lower |
|
|
18
|
+
* | 0xfffffffe | 0x00000001 |
|
|
19
|
+
*
|
|
20
|
+
* So `0xfffffffe` is returned.
|
|
21
|
+
*/
|
|
22
|
+
export function mulUpperUnsigned(a, b) {
|
|
23
|
+
const aHigh = a >> u64(32);
|
|
24
|
+
const aLow = a & u64(4294967295);
|
|
25
|
+
const bHigh = b >> u64(32);
|
|
26
|
+
const bLow = b & u64(4294967295);
|
|
27
|
+
const lowLow = portable.u64_mul(aLow, bLow);
|
|
28
|
+
const lowHigh = portable.u64_mul(aLow, bHigh);
|
|
29
|
+
const highLow = portable.u64_mul(aHigh, bLow);
|
|
30
|
+
const highHigh = portable.u64_mul(aHigh, bHigh);
|
|
31
|
+
const carry = portable.u64_add(portable.u64_add(lowLow >> u64(32), lowHigh & u64(4294967295)), highLow & u64(4294967295));
|
|
32
|
+
return portable.u64_add(portable.u64_add(portable.u64_add(highHigh, lowHigh >> u64(32)), highLow >> u64(32)), carry >> u64(32));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Same as [mulUpperUnsigned] but treat the arguments as signed (two-complement) 64-bit numbers and the result alike.
|
|
36
|
+
*/
|
|
37
|
+
export function mulUpperSigned(a, b) {
|
|
38
|
+
let isResultNegative = false;
|
|
39
|
+
let aAbs = a;
|
|
40
|
+
let bAbs = b;
|
|
41
|
+
if (a < i64(0)) {
|
|
42
|
+
isResultNegative = !isResultNegative;
|
|
43
|
+
aAbs = portable.u64_add(~a, i64(1));
|
|
44
|
+
}
|
|
45
|
+
if (b < i64(0)) {
|
|
46
|
+
isResultNegative = !isResultNegative;
|
|
47
|
+
bAbs = portable.u64_add(~b, i64(1));
|
|
48
|
+
}
|
|
49
|
+
if (isResultNegative) {
|
|
50
|
+
const upper = mulUpperUnsigned(aAbs, bAbs);
|
|
51
|
+
const lower = portable.u64_mul(aAbs, bAbs);
|
|
52
|
+
return portable.u64_add(~upper, lower === u64(0) ? u64(1) : u64(0));
|
|
53
|
+
}
|
|
54
|
+
return mulUpperUnsigned(aAbs, bAbs);
|
|
55
|
+
}
|
|
56
|
+
export function mulUpperSignedUnsigned(a, b) {
|
|
57
|
+
if (a < i64(0)) {
|
|
58
|
+
const aAbs = portable.u64_add(~a, u64(1));
|
|
59
|
+
const upper = mulUpperUnsigned(aAbs, b);
|
|
60
|
+
const lower = portable.u64_mul(aAbs, b);
|
|
61
|
+
return portable.u64_add(~upper, lower === u64(0) ? u64(1) : u64(0));
|
|
62
|
+
}
|
|
63
|
+
return mulUpperUnsigned(a, b);
|
|
64
|
+
}
|
|
65
|
+
export class Inst {
|
|
66
|
+
static u8SignExtend(v) {
|
|
67
|
+
// u64 wrap ensures unsigned representation in JS BigInt (no-op in AS)
|
|
68
|
+
return u64(i64(i32(i16(i8(v)))));
|
|
69
|
+
}
|
|
70
|
+
static u16SignExtend(v) {
|
|
71
|
+
return u64(i64(i32(i16(v))));
|
|
72
|
+
}
|
|
73
|
+
static u32SignExtend(v) {
|
|
74
|
+
return u64(i64(i32(v)));
|
|
75
|
+
}
|
|
76
|
+
static reg(v) {
|
|
77
|
+
return v >= u64(NO_OF_REGISTERS) ? NO_OF_REGISTERS - 1 : u32(v);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
__decorate([
|
|
81
|
+
inline
|
|
82
|
+
], Inst, "u8SignExtend", null);
|
|
83
|
+
__decorate([
|
|
84
|
+
inline
|
|
85
|
+
], Inst, "u16SignExtend", null);
|
|
86
|
+
__decorate([
|
|
87
|
+
inline
|
|
88
|
+
], Inst, "u32SignExtend", null);
|
|
89
|
+
__decorate([
|
|
90
|
+
inline
|
|
91
|
+
], Inst, "reg", null);
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import * as bit from "./instructions/bit";
|
|
2
|
+
import * as branch from "./instructions/branch";
|
|
3
|
+
import * as jump from "./instructions/jump";
|
|
4
|
+
import * as load from "./instructions/load";
|
|
5
|
+
import * as logic from "./instructions/logic";
|
|
6
|
+
import * as math from "./instructions/math";
|
|
7
|
+
import { ecalli, fallthrough, INVALID, sbrk, trap } from "./instructions/misc";
|
|
8
|
+
import * as mov from "./instructions/mov";
|
|
9
|
+
import * as rot from "./instructions/rot";
|
|
10
|
+
import * as set from "./instructions/set";
|
|
11
|
+
import * as shift from "./instructions/shift";
|
|
12
|
+
import * as store from "./instructions/store";
|
|
13
|
+
export const RUN = [
|
|
14
|
+
/* 000 */ trap,
|
|
15
|
+
/* 001 */ fallthrough,
|
|
16
|
+
INVALID,
|
|
17
|
+
INVALID,
|
|
18
|
+
INVALID,
|
|
19
|
+
INVALID,
|
|
20
|
+
INVALID,
|
|
21
|
+
INVALID,
|
|
22
|
+
INVALID,
|
|
23
|
+
INVALID,
|
|
24
|
+
/* 010 */ ecalli,
|
|
25
|
+
INVALID,
|
|
26
|
+
INVALID,
|
|
27
|
+
INVALID,
|
|
28
|
+
INVALID,
|
|
29
|
+
INVALID,
|
|
30
|
+
INVALID,
|
|
31
|
+
INVALID,
|
|
32
|
+
INVALID,
|
|
33
|
+
INVALID,
|
|
34
|
+
/* 020 */ load.load_imm_64,
|
|
35
|
+
INVALID,
|
|
36
|
+
INVALID,
|
|
37
|
+
INVALID,
|
|
38
|
+
INVALID,
|
|
39
|
+
INVALID,
|
|
40
|
+
INVALID,
|
|
41
|
+
INVALID,
|
|
42
|
+
INVALID,
|
|
43
|
+
INVALID,
|
|
44
|
+
/* 030 */ store.store_imm_u8,
|
|
45
|
+
/* 031 */ store.store_imm_u16,
|
|
46
|
+
/* 032 */ store.store_imm_u32,
|
|
47
|
+
/* 033 */ store.store_imm_u64,
|
|
48
|
+
INVALID,
|
|
49
|
+
INVALID,
|
|
50
|
+
INVALID,
|
|
51
|
+
INVALID,
|
|
52
|
+
INVALID,
|
|
53
|
+
INVALID,
|
|
54
|
+
/* 040 */ jump.jump,
|
|
55
|
+
INVALID,
|
|
56
|
+
INVALID,
|
|
57
|
+
INVALID,
|
|
58
|
+
INVALID,
|
|
59
|
+
INVALID,
|
|
60
|
+
INVALID,
|
|
61
|
+
INVALID,
|
|
62
|
+
INVALID,
|
|
63
|
+
INVALID,
|
|
64
|
+
/* 050 */ jump.jump_ind,
|
|
65
|
+
/* 051 */ load.load_imm,
|
|
66
|
+
/* 052 */ load.load_u8,
|
|
67
|
+
/* 053 */ load.load_i8,
|
|
68
|
+
/* 054 */ load.load_u16,
|
|
69
|
+
/* 055 */ load.load_i16,
|
|
70
|
+
/* 056 */ load.load_u32,
|
|
71
|
+
/* 057 */ load.load_i32,
|
|
72
|
+
/* 058 */ load.load_u64,
|
|
73
|
+
/* 059 */ store.store_u8,
|
|
74
|
+
/* 060 */ store.store_u16,
|
|
75
|
+
/* 061 */ store.store_u32,
|
|
76
|
+
/* 062 */ store.store_u64,
|
|
77
|
+
INVALID,
|
|
78
|
+
INVALID,
|
|
79
|
+
INVALID,
|
|
80
|
+
INVALID,
|
|
81
|
+
INVALID,
|
|
82
|
+
INVALID,
|
|
83
|
+
INVALID,
|
|
84
|
+
/* 070 */ store.store_imm_ind_u8,
|
|
85
|
+
/* 071 */ store.store_imm_ind_u16,
|
|
86
|
+
/* 072 */ store.store_imm_ind_u32,
|
|
87
|
+
/* 073 */ store.store_imm_ind_u64,
|
|
88
|
+
INVALID,
|
|
89
|
+
INVALID,
|
|
90
|
+
INVALID,
|
|
91
|
+
INVALID,
|
|
92
|
+
INVALID,
|
|
93
|
+
INVALID,
|
|
94
|
+
/* 080 */ jump.load_imm_jump,
|
|
95
|
+
/* 081 */ branch.branch_eq_imm,
|
|
96
|
+
/* 082 */ branch.branch_ne_imm,
|
|
97
|
+
/* 083 */ branch.branch_lt_u_imm,
|
|
98
|
+
/* 084 */ branch.branch_le_u_imm,
|
|
99
|
+
/* 085 */ branch.branch_ge_u_imm,
|
|
100
|
+
/* 086 */ branch.branch_gt_u_imm,
|
|
101
|
+
/* 087 */ branch.branch_lt_s_imm,
|
|
102
|
+
/* 088 */ branch.branch_le_s_imm,
|
|
103
|
+
/* 089 */ branch.branch_ge_s_imm,
|
|
104
|
+
/* 090 */ branch.branch_gt_s_imm,
|
|
105
|
+
INVALID,
|
|
106
|
+
INVALID,
|
|
107
|
+
INVALID,
|
|
108
|
+
INVALID,
|
|
109
|
+
INVALID,
|
|
110
|
+
INVALID,
|
|
111
|
+
INVALID,
|
|
112
|
+
INVALID,
|
|
113
|
+
INVALID,
|
|
114
|
+
/* 100 */ mov.move_reg,
|
|
115
|
+
/* 101 */ sbrk,
|
|
116
|
+
/* 102 */ bit.count_set_bits_64,
|
|
117
|
+
/* 103 */ bit.count_set_bits_32,
|
|
118
|
+
/* 104 */ bit.leading_zero_bits_64,
|
|
119
|
+
/* 105 */ bit.leading_zero_bits_32,
|
|
120
|
+
/* 106 */ bit.trailing_zero_bits_64,
|
|
121
|
+
/* 107 */ bit.trailing_zero_bits_32,
|
|
122
|
+
/* 108 */ bit.sign_extend_8,
|
|
123
|
+
/* 109 */ bit.sign_extend_16,
|
|
124
|
+
/* 110 */ bit.zero_extend_16,
|
|
125
|
+
/* 111 */ bit.reverse_bytes,
|
|
126
|
+
INVALID,
|
|
127
|
+
INVALID,
|
|
128
|
+
INVALID,
|
|
129
|
+
INVALID,
|
|
130
|
+
INVALID,
|
|
131
|
+
INVALID,
|
|
132
|
+
INVALID,
|
|
133
|
+
INVALID,
|
|
134
|
+
/* 120 */ store.store_ind_u8,
|
|
135
|
+
/* 121 */ store.store_ind_u16,
|
|
136
|
+
/* 122 */ store.store_ind_u32,
|
|
137
|
+
/* 123 */ store.store_ind_u64,
|
|
138
|
+
/* 124 */ load.load_ind_u8,
|
|
139
|
+
/* 125 */ load.load_ind_i8,
|
|
140
|
+
/* 126 */ load.load_ind_u16,
|
|
141
|
+
/* 127 */ load.load_ind_i16,
|
|
142
|
+
/* 128 */ load.load_ind_u32,
|
|
143
|
+
/* 129 */ load.load_ind_i32,
|
|
144
|
+
/* 130 */ load.load_ind_u64,
|
|
145
|
+
/* 131 */ math.add_imm_32,
|
|
146
|
+
/* 132 */ logic.and_imm,
|
|
147
|
+
/* 133 */ logic.xor_imm,
|
|
148
|
+
/* 134 */ logic.or_imm,
|
|
149
|
+
/* 135 */ math.mul_imm_32,
|
|
150
|
+
/* 136 */ set.set_lt_u_imm,
|
|
151
|
+
/* 137 */ set.set_lt_s_imm,
|
|
152
|
+
/* 138 */ shift.shlo_l_imm_32,
|
|
153
|
+
/* 139 */ shift.shlo_r_imm_32,
|
|
154
|
+
/* 140 */ shift.shar_r_imm_32,
|
|
155
|
+
/* 141 */ math.neg_add_imm_32,
|
|
156
|
+
/* 142 */ set.set_gt_u_imm,
|
|
157
|
+
/* 143 */ set.set_gt_s_imm,
|
|
158
|
+
/* 144 */ shift.shlo_l_imm_alt_32,
|
|
159
|
+
/* 145 */ shift.shlo_r_imm_alt_32,
|
|
160
|
+
/* 146 */ shift.shar_r_imm_alt_32,
|
|
161
|
+
/* 147 */ mov.cmov_iz_imm,
|
|
162
|
+
/* 148 */ mov.cmov_nz_imm,
|
|
163
|
+
/* 149 */ math.add_imm,
|
|
164
|
+
/* 150 */ math.mul_imm,
|
|
165
|
+
/* 151 */ shift.shlo_l_imm,
|
|
166
|
+
/* 152 */ shift.shlo_r_imm,
|
|
167
|
+
/* 153 */ shift.shar_r_imm,
|
|
168
|
+
/* 154 */ math.neg_add_imm,
|
|
169
|
+
/* 155 */ shift.shlo_l_imm_alt,
|
|
170
|
+
/* 156 */ shift.shlo_r_imm_alt,
|
|
171
|
+
/* 157 */ shift.shar_r_imm_alt,
|
|
172
|
+
/* 158 */ rot.rot_r_64_imm,
|
|
173
|
+
/* 159 */ rot.rot_r_64_imm_alt,
|
|
174
|
+
/* 160 */ rot.rot_r_32_imm,
|
|
175
|
+
/* 161 */ rot.rot_r_32_imm_alt,
|
|
176
|
+
INVALID,
|
|
177
|
+
INVALID,
|
|
178
|
+
INVALID,
|
|
179
|
+
INVALID,
|
|
180
|
+
INVALID,
|
|
181
|
+
INVALID,
|
|
182
|
+
INVALID,
|
|
183
|
+
INVALID,
|
|
184
|
+
/* 170 */ branch.branch_eq,
|
|
185
|
+
/* 171 */ branch.branch_ne,
|
|
186
|
+
/* 172 */ branch.branch_lt_u,
|
|
187
|
+
/* 173 */ branch.branch_lt_s,
|
|
188
|
+
/* 174 */ branch.branch_ge_u,
|
|
189
|
+
/* 175 */ branch.branch_ge_s,
|
|
190
|
+
INVALID,
|
|
191
|
+
INVALID,
|
|
192
|
+
INVALID,
|
|
193
|
+
INVALID,
|
|
194
|
+
/* 180 */ jump.load_imm_jump_ind,
|
|
195
|
+
INVALID,
|
|
196
|
+
INVALID,
|
|
197
|
+
INVALID,
|
|
198
|
+
INVALID,
|
|
199
|
+
INVALID,
|
|
200
|
+
INVALID,
|
|
201
|
+
INVALID,
|
|
202
|
+
INVALID,
|
|
203
|
+
INVALID,
|
|
204
|
+
/* 190 */ math.add_32,
|
|
205
|
+
/* 191 */ math.sub_32,
|
|
206
|
+
/* 192 */ math.mul_32,
|
|
207
|
+
/* 193 */ math.div_u_32,
|
|
208
|
+
/* 194 */ math.div_s_32,
|
|
209
|
+
/* 195 */ math.rem_u_32,
|
|
210
|
+
/* 196 */ math.rem_s_32,
|
|
211
|
+
/* 197 */ shift.shlo_l_32,
|
|
212
|
+
/* 198 */ shift.shlo_r_32,
|
|
213
|
+
/* 199 */ shift.shar_r_32,
|
|
214
|
+
/* 200 */ math.add_64,
|
|
215
|
+
/* 201 */ math.sub,
|
|
216
|
+
/* 202 */ math.mul,
|
|
217
|
+
/* 203 */ math.div_u,
|
|
218
|
+
/* 204 */ math.div_s,
|
|
219
|
+
/* 205 */ math.rem_u,
|
|
220
|
+
/* 206 */ math.rem_s,
|
|
221
|
+
/* 207 */ shift.shlo_l,
|
|
222
|
+
/* 208 */ shift.shlo_r,
|
|
223
|
+
/* 209 */ shift.shar_r,
|
|
224
|
+
/* 210 */ logic.and,
|
|
225
|
+
/* 211 */ logic.xor,
|
|
226
|
+
/* 212 */ logic.or,
|
|
227
|
+
/* 213 */ math.mul_upper_s_s,
|
|
228
|
+
/* 214 */ math.mul_upper_u_u,
|
|
229
|
+
/* 215 */ math.mul_upper_s_u,
|
|
230
|
+
/* 216 */ set.set_lt_u,
|
|
231
|
+
/* 217 */ set.set_lt_s,
|
|
232
|
+
/* 218 */ mov.cmov_iz,
|
|
233
|
+
/* 219 */ mov.cmov_nz,
|
|
234
|
+
/* 220 */ rot.rot_l_64,
|
|
235
|
+
/* 221 */ rot.rot_l_32,
|
|
236
|
+
/* 222 */ rot.rot_r_64,
|
|
237
|
+
/* 223 */ rot.rot_r_32,
|
|
238
|
+
/* 224 */ logic.and_inv,
|
|
239
|
+
/* 225 */ logic.or_inv,
|
|
240
|
+
/* 226 */ logic.xnor,
|
|
241
|
+
/* 227 */ math.max,
|
|
242
|
+
/* 228 */ math.max_u,
|
|
243
|
+
/* 229 */ math.min,
|
|
244
|
+
/* 230 */ math.min_u,
|
|
245
|
+
];
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Arguments } from "./arguments";
|
|
2
|
+
export declare class Instruction {
|
|
3
|
+
name: string;
|
|
4
|
+
kind: Arguments;
|
|
5
|
+
gas: u32;
|
|
6
|
+
isTerminating: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare const MISSING_INSTRUCTION: Instruction;
|
|
9
|
+
export declare const SBRK: Instruction;
|
|
10
|
+
export declare const INSTRUCTIONS: StaticArray<Instruction>;
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import { Arguments } from "./arguments";
|
|
2
|
+
export class Instruction {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.name = "";
|
|
5
|
+
this.kind = Arguments.Zero;
|
|
6
|
+
this.gas = u32(0);
|
|
7
|
+
this.isTerminating = false;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
function instruction(name, kind, gas, isTerminating = false) {
|
|
11
|
+
const i = new Instruction();
|
|
12
|
+
i.name = name;
|
|
13
|
+
i.kind = kind;
|
|
14
|
+
i.gas = u32(gas);
|
|
15
|
+
i.isTerminating = isTerminating;
|
|
16
|
+
return i;
|
|
17
|
+
}
|
|
18
|
+
export const MISSING_INSTRUCTION = instruction("INVALID", Arguments.Zero, 1, false);
|
|
19
|
+
export const SBRK = instruction("SBRK", Arguments.TwoReg, 1);
|
|
20
|
+
export const INSTRUCTIONS = StaticArray.fromArray([
|
|
21
|
+
/* 000 */ instruction("TRAP", Arguments.Zero, 1, true),
|
|
22
|
+
/* 001 */ instruction("FALLTHROUGH", Arguments.Zero, 1, true),
|
|
23
|
+
MISSING_INSTRUCTION,
|
|
24
|
+
MISSING_INSTRUCTION,
|
|
25
|
+
MISSING_INSTRUCTION,
|
|
26
|
+
MISSING_INSTRUCTION,
|
|
27
|
+
MISSING_INSTRUCTION,
|
|
28
|
+
MISSING_INSTRUCTION,
|
|
29
|
+
MISSING_INSTRUCTION,
|
|
30
|
+
MISSING_INSTRUCTION,
|
|
31
|
+
/* 010 */ instruction("ECALLI", Arguments.OneImm, 1),
|
|
32
|
+
MISSING_INSTRUCTION,
|
|
33
|
+
MISSING_INSTRUCTION,
|
|
34
|
+
MISSING_INSTRUCTION,
|
|
35
|
+
MISSING_INSTRUCTION,
|
|
36
|
+
MISSING_INSTRUCTION,
|
|
37
|
+
MISSING_INSTRUCTION,
|
|
38
|
+
MISSING_INSTRUCTION,
|
|
39
|
+
MISSING_INSTRUCTION,
|
|
40
|
+
MISSING_INSTRUCTION,
|
|
41
|
+
/* 020 */ instruction("LOAD_IMM_64", Arguments.OneRegOneExtImm, 1),
|
|
42
|
+
MISSING_INSTRUCTION,
|
|
43
|
+
MISSING_INSTRUCTION,
|
|
44
|
+
MISSING_INSTRUCTION,
|
|
45
|
+
MISSING_INSTRUCTION,
|
|
46
|
+
MISSING_INSTRUCTION,
|
|
47
|
+
MISSING_INSTRUCTION,
|
|
48
|
+
MISSING_INSTRUCTION,
|
|
49
|
+
MISSING_INSTRUCTION,
|
|
50
|
+
MISSING_INSTRUCTION,
|
|
51
|
+
/* 030 */ instruction("STORE_IMM_U8", Arguments.TwoImm, 1),
|
|
52
|
+
/* 031 */ instruction("STORE_IMM_U16", Arguments.TwoImm, 1),
|
|
53
|
+
/* 032 */ instruction("STORE_IMM_U32", Arguments.TwoImm, 1),
|
|
54
|
+
/* 033 */ instruction("STORE_IMM_U64", Arguments.TwoImm, 1),
|
|
55
|
+
MISSING_INSTRUCTION,
|
|
56
|
+
MISSING_INSTRUCTION,
|
|
57
|
+
MISSING_INSTRUCTION,
|
|
58
|
+
MISSING_INSTRUCTION,
|
|
59
|
+
MISSING_INSTRUCTION,
|
|
60
|
+
MISSING_INSTRUCTION,
|
|
61
|
+
/* 040 */ instruction("JUMP", Arguments.OneOff, 1, true),
|
|
62
|
+
MISSING_INSTRUCTION,
|
|
63
|
+
MISSING_INSTRUCTION,
|
|
64
|
+
MISSING_INSTRUCTION,
|
|
65
|
+
MISSING_INSTRUCTION,
|
|
66
|
+
MISSING_INSTRUCTION,
|
|
67
|
+
MISSING_INSTRUCTION,
|
|
68
|
+
MISSING_INSTRUCTION,
|
|
69
|
+
MISSING_INSTRUCTION,
|
|
70
|
+
MISSING_INSTRUCTION,
|
|
71
|
+
/* 050 */ instruction("JUMP_IND", Arguments.OneRegOneImm, 1, true),
|
|
72
|
+
/* 051 */ instruction("LOAD_IMM", Arguments.OneRegOneImm, 1),
|
|
73
|
+
/* 052 */ instruction("LOAD_U8", Arguments.OneRegOneImm, 1),
|
|
74
|
+
/* 053 */ instruction("LOAD_I8", Arguments.OneRegOneImm, 1),
|
|
75
|
+
/* 054 */ instruction("LOAD_U16", Arguments.OneRegOneImm, 1),
|
|
76
|
+
/* 055 */ instruction("LOAD_I16", Arguments.OneRegOneImm, 1),
|
|
77
|
+
/* 056 */ instruction("LOAD_U32", Arguments.OneRegOneImm, 1),
|
|
78
|
+
/* 057 */ instruction("LOAD_I32", Arguments.OneRegOneImm, 1),
|
|
79
|
+
/* 058 */ instruction("LOAD_U64", Arguments.OneRegOneImm, 1),
|
|
80
|
+
/* 059 */ instruction("STORE_U8", Arguments.OneRegOneImm, 1),
|
|
81
|
+
/* 060 */ instruction("STORE_U16", Arguments.OneRegOneImm, 1),
|
|
82
|
+
/* 061 */ instruction("STORE_U32", Arguments.OneRegOneImm, 1),
|
|
83
|
+
/* 062 */ instruction("STORE_U64", Arguments.OneRegOneImm, 1),
|
|
84
|
+
MISSING_INSTRUCTION,
|
|
85
|
+
MISSING_INSTRUCTION,
|
|
86
|
+
MISSING_INSTRUCTION,
|
|
87
|
+
MISSING_INSTRUCTION,
|
|
88
|
+
MISSING_INSTRUCTION,
|
|
89
|
+
MISSING_INSTRUCTION,
|
|
90
|
+
MISSING_INSTRUCTION,
|
|
91
|
+
/* 070 */ instruction("STORE_IMM_IND_U8", Arguments.OneRegTwoImm, 1),
|
|
92
|
+
/* 071 */ instruction("STORE_IMM_IND_U16", Arguments.OneRegTwoImm, 1),
|
|
93
|
+
/* 072 */ instruction("STORE_IMM_IND_U32", Arguments.OneRegTwoImm, 1),
|
|
94
|
+
/* 073 */ instruction("STORE_IMM_IND_U64", Arguments.OneRegTwoImm, 1),
|
|
95
|
+
MISSING_INSTRUCTION,
|
|
96
|
+
MISSING_INSTRUCTION,
|
|
97
|
+
MISSING_INSTRUCTION,
|
|
98
|
+
MISSING_INSTRUCTION,
|
|
99
|
+
MISSING_INSTRUCTION,
|
|
100
|
+
MISSING_INSTRUCTION,
|
|
101
|
+
/* 080 */ instruction("LOAD_IMM_JUMP", Arguments.OneRegOneImmOneOff, 1, true),
|
|
102
|
+
/* 081 */ instruction("BRANCH_EQ_IMM", Arguments.OneRegOneImmOneOff, 1, true),
|
|
103
|
+
/* 082 */ instruction("BRANCH_NE_IMM", Arguments.OneRegOneImmOneOff, 1, true),
|
|
104
|
+
/* 083 */ instruction("BRANCH_LT_U_IMM", Arguments.OneRegOneImmOneOff, 1, true),
|
|
105
|
+
/* 084 */ instruction("BRANCH_LE_U_IMM", Arguments.OneRegOneImmOneOff, 1, true),
|
|
106
|
+
/* 085 */ instruction("BRANCH_GE_U_IMM", Arguments.OneRegOneImmOneOff, 1, true),
|
|
107
|
+
/* 086 */ instruction("BRANCH_GT_U_IMM", Arguments.OneRegOneImmOneOff, 1, true),
|
|
108
|
+
/* 087 */ instruction("BRANCH_LT_S_IMM", Arguments.OneRegOneImmOneOff, 1, true),
|
|
109
|
+
/* 088 */ instruction("BRANCH_LE_S_IMM", Arguments.OneRegOneImmOneOff, 1, true),
|
|
110
|
+
/* 089 */ instruction("BRANCH_GE_S_IMM", Arguments.OneRegOneImmOneOff, 1, true),
|
|
111
|
+
/* 090 */ instruction("BRANCH_GT_S_IMM", Arguments.OneRegOneImmOneOff, 1, true),
|
|
112
|
+
MISSING_INSTRUCTION,
|
|
113
|
+
MISSING_INSTRUCTION,
|
|
114
|
+
MISSING_INSTRUCTION,
|
|
115
|
+
MISSING_INSTRUCTION,
|
|
116
|
+
MISSING_INSTRUCTION,
|
|
117
|
+
MISSING_INSTRUCTION,
|
|
118
|
+
MISSING_INSTRUCTION,
|
|
119
|
+
MISSING_INSTRUCTION,
|
|
120
|
+
MISSING_INSTRUCTION,
|
|
121
|
+
/* 100 */ instruction("MOVE_REG", Arguments.TwoReg, 1),
|
|
122
|
+
/* 101 */ SBRK,
|
|
123
|
+
/* 102 */ instruction("COUNT_SET_BITS_64", Arguments.TwoReg, 1),
|
|
124
|
+
/* 103 */ instruction("COUNT_SET_BITS_32", Arguments.TwoReg, 1),
|
|
125
|
+
/* 104 */ instruction("LEADING_ZERO_BITS_64", Arguments.TwoReg, 1),
|
|
126
|
+
/* 105 */ instruction("LEADING_ZERO_BITS_32", Arguments.TwoReg, 1),
|
|
127
|
+
/* 106 */ instruction("TRAILING_ZERO_BITS_64", Arguments.TwoReg, 1),
|
|
128
|
+
/* 107 */ instruction("TRAILING_ZERO_BITS_32", Arguments.TwoReg, 1),
|
|
129
|
+
/* 108 */ instruction("SIGN_EXTEND_8", Arguments.TwoReg, 1),
|
|
130
|
+
/* 109 */ instruction("SIGN_EXTEND_16", Arguments.TwoReg, 1),
|
|
131
|
+
/* 110 */ instruction("ZERO_EXTEND_16", Arguments.TwoReg, 1),
|
|
132
|
+
/* 111 */ instruction("REVERSE_BYTES", Arguments.TwoReg, 1),
|
|
133
|
+
MISSING_INSTRUCTION,
|
|
134
|
+
MISSING_INSTRUCTION,
|
|
135
|
+
MISSING_INSTRUCTION,
|
|
136
|
+
MISSING_INSTRUCTION,
|
|
137
|
+
MISSING_INSTRUCTION,
|
|
138
|
+
MISSING_INSTRUCTION,
|
|
139
|
+
MISSING_INSTRUCTION,
|
|
140
|
+
MISSING_INSTRUCTION,
|
|
141
|
+
/* 120 */ instruction("STORE_IND_U8", Arguments.TwoRegOneImm, 1),
|
|
142
|
+
/* 121 */ instruction("STORE_IND_U16", Arguments.TwoRegOneImm, 1),
|
|
143
|
+
/* 122 */ instruction("STORE_IND_U32", Arguments.TwoRegOneImm, 1),
|
|
144
|
+
/* 123 */ instruction("STORE_IND_U64", Arguments.TwoRegOneImm, 1),
|
|
145
|
+
/* 124 */ instruction("LOAD_IND_U8", Arguments.TwoRegOneImm, 1),
|
|
146
|
+
/* 125 */ instruction("LOAD_IND_I8", Arguments.TwoRegOneImm, 1),
|
|
147
|
+
/* 126 */ instruction("LOAD_IND_U16", Arguments.TwoRegOneImm, 1),
|
|
148
|
+
/* 127 */ instruction("LOAD_IND_I16", Arguments.TwoRegOneImm, 1),
|
|
149
|
+
/* 128 */ instruction("LOAD_IND_U32", Arguments.TwoRegOneImm, 1),
|
|
150
|
+
/* 129 */ instruction("LOAD_IND_I32", Arguments.TwoRegOneImm, 1),
|
|
151
|
+
/* 130 */ instruction("LOAD_IND_U64", Arguments.TwoRegOneImm, 1),
|
|
152
|
+
/* 131 */ instruction("ADD_IMM_32", Arguments.TwoRegOneImm, 1),
|
|
153
|
+
/* 132 */ instruction("AND_IMM", Arguments.TwoRegOneImm, 1),
|
|
154
|
+
/* 133 */ instruction("XOR_IMM", Arguments.TwoRegOneImm, 1),
|
|
155
|
+
/* 134 */ instruction("OR_IMM", Arguments.TwoRegOneImm, 1),
|
|
156
|
+
/* 135 */ instruction("MUL_IMM_32", Arguments.TwoRegOneImm, 1),
|
|
157
|
+
/* 136 */ instruction("SET_LT_U_IMM", Arguments.TwoRegOneImm, 1),
|
|
158
|
+
/* 137 */ instruction("SET_LT_S_IMM", Arguments.TwoRegOneImm, 1),
|
|
159
|
+
/* 138 */ instruction("SHLO_L_IMM_32", Arguments.TwoRegOneImm, 1),
|
|
160
|
+
/* 139 */ instruction("SHLO_R_IMM_32", Arguments.TwoRegOneImm, 1),
|
|
161
|
+
/* 140 */ instruction("SHAR_R_IMM_32", Arguments.TwoRegOneImm, 1),
|
|
162
|
+
/* 141 */ instruction("NEG_ADD_IMM_32", Arguments.TwoRegOneImm, 1),
|
|
163
|
+
/* 142 */ instruction("SET_GT_U_IMM", Arguments.TwoRegOneImm, 1),
|
|
164
|
+
/* 143 */ instruction("SET_GT_S_IMM", Arguments.TwoRegOneImm, 1),
|
|
165
|
+
/* 144 */ instruction("SHLO_L_IMM_ALT_32", Arguments.TwoRegOneImm, 1),
|
|
166
|
+
/* 145 */ instruction("SHLO_R_IMM_ALT_32", Arguments.TwoRegOneImm, 1),
|
|
167
|
+
/* 146 */ instruction("SHAR_R_IMM_ALT_32", Arguments.TwoRegOneImm, 1),
|
|
168
|
+
/* 147 */ instruction("CMOV_IZ_IMM", Arguments.TwoRegOneImm, 1),
|
|
169
|
+
/* 148 */ instruction("CMOV_NZ_IMM", Arguments.TwoRegOneImm, 1),
|
|
170
|
+
/* 149 */ instruction("ADD_IMM_64", Arguments.TwoRegOneImm, 1),
|
|
171
|
+
/* 150 */ instruction("MUL_IMM_64", Arguments.TwoRegOneImm, 1),
|
|
172
|
+
/* 151 */ instruction("SHLO_L_IMM_64", Arguments.TwoRegOneImm, 1),
|
|
173
|
+
/* 152 */ instruction("SHLO_R_IMM_64", Arguments.TwoRegOneImm, 1),
|
|
174
|
+
/* 153 */ instruction("SHAR_R_IMM_64", Arguments.TwoRegOneImm, 1),
|
|
175
|
+
/* 154 */ instruction("NEG_ADD_IMM_64", Arguments.TwoRegOneImm, 1),
|
|
176
|
+
/* 155 */ instruction("SHLO_L_IMM_ALT_64", Arguments.TwoRegOneImm, 1),
|
|
177
|
+
/* 156 */ instruction("SHLO_R_IMM_ALT_64", Arguments.TwoRegOneImm, 1),
|
|
178
|
+
/* 157 */ instruction("SHAR_R_IMM_ALT_64", Arguments.TwoRegOneImm, 1),
|
|
179
|
+
/* 158 */ instruction("ROT_R_64_IMM", Arguments.TwoRegOneImm, 1),
|
|
180
|
+
/* 159 */ instruction("ROT_R_64_IMM_ALT", Arguments.TwoRegOneImm, 1),
|
|
181
|
+
/* 160 */ instruction("ROT_R_32_IMM", Arguments.TwoRegOneImm, 1),
|
|
182
|
+
/* 161 */ instruction("ROT_R_32_IMM_ALT", Arguments.TwoRegOneImm, 1),
|
|
183
|
+
MISSING_INSTRUCTION,
|
|
184
|
+
MISSING_INSTRUCTION,
|
|
185
|
+
MISSING_INSTRUCTION,
|
|
186
|
+
MISSING_INSTRUCTION,
|
|
187
|
+
MISSING_INSTRUCTION,
|
|
188
|
+
MISSING_INSTRUCTION,
|
|
189
|
+
MISSING_INSTRUCTION,
|
|
190
|
+
MISSING_INSTRUCTION,
|
|
191
|
+
/* 170 */ instruction("BRANCH_EQ", Arguments.TwoRegOneOff, 1, true),
|
|
192
|
+
/* 171 */ instruction("BRANCH_NE", Arguments.TwoRegOneOff, 1, true),
|
|
193
|
+
/* 172 */ instruction("BRANCH_LT_U", Arguments.TwoRegOneOff, 1, true),
|
|
194
|
+
/* 173 */ instruction("BRANCH_LT_S", Arguments.TwoRegOneOff, 1, true),
|
|
195
|
+
/* 174 */ instruction("BRANCH_GE_U", Arguments.TwoRegOneOff, 1, true),
|
|
196
|
+
/* 175 */ instruction("BRANCH_GE_S", Arguments.TwoRegOneOff, 1, true),
|
|
197
|
+
MISSING_INSTRUCTION,
|
|
198
|
+
MISSING_INSTRUCTION,
|
|
199
|
+
MISSING_INSTRUCTION,
|
|
200
|
+
MISSING_INSTRUCTION,
|
|
201
|
+
/* 180 */ instruction("LOAD_IMM_JUMP_IND", Arguments.TwoRegTwoImm, 1, true),
|
|
202
|
+
MISSING_INSTRUCTION,
|
|
203
|
+
MISSING_INSTRUCTION,
|
|
204
|
+
MISSING_INSTRUCTION,
|
|
205
|
+
MISSING_INSTRUCTION,
|
|
206
|
+
MISSING_INSTRUCTION,
|
|
207
|
+
MISSING_INSTRUCTION,
|
|
208
|
+
MISSING_INSTRUCTION,
|
|
209
|
+
MISSING_INSTRUCTION,
|
|
210
|
+
MISSING_INSTRUCTION,
|
|
211
|
+
/* 190 */ instruction("ADD_32", Arguments.ThreeReg, 1),
|
|
212
|
+
/* 191 */ instruction("SUB_32", Arguments.ThreeReg, 1),
|
|
213
|
+
/* 192 */ instruction("MUL_32", Arguments.ThreeReg, 1),
|
|
214
|
+
/* 193 */ instruction("DIV_U_32", Arguments.ThreeReg, 1),
|
|
215
|
+
/* 194 */ instruction("DIV_S_32", Arguments.ThreeReg, 1),
|
|
216
|
+
/* 195 */ instruction("REM_U_32", Arguments.ThreeReg, 1),
|
|
217
|
+
/* 196 */ instruction("REM_S_32", Arguments.ThreeReg, 1),
|
|
218
|
+
/* 197 */ instruction("SHLO_L_32", Arguments.ThreeReg, 1),
|
|
219
|
+
/* 198 */ instruction("SHLO_R_32", Arguments.ThreeReg, 1),
|
|
220
|
+
/* 199 */ instruction("SHAR_R_32", Arguments.ThreeReg, 1),
|
|
221
|
+
/* 200 */ instruction("ADD_64", Arguments.ThreeReg, 1),
|
|
222
|
+
/* 201 */ instruction("SUB_64", Arguments.ThreeReg, 1),
|
|
223
|
+
/* 202 */ instruction("MUL_64", Arguments.ThreeReg, 1),
|
|
224
|
+
/* 203 */ instruction("DIV_U_64", Arguments.ThreeReg, 1),
|
|
225
|
+
/* 204 */ instruction("DIV_S_64", Arguments.ThreeReg, 1),
|
|
226
|
+
/* 205 */ instruction("REM_U_64", Arguments.ThreeReg, 1),
|
|
227
|
+
/* 206 */ instruction("REM_S_64", Arguments.ThreeReg, 1),
|
|
228
|
+
/* 207 */ instruction("SHLO_L_64", Arguments.ThreeReg, 1),
|
|
229
|
+
/* 208 */ instruction("SHLO_R_64", Arguments.ThreeReg, 1),
|
|
230
|
+
/* 209 */ instruction("SHAR_R_64", Arguments.ThreeReg, 1),
|
|
231
|
+
/* 210 */ instruction("AND", Arguments.ThreeReg, 1),
|
|
232
|
+
/* 211 */ instruction("XOR", Arguments.ThreeReg, 1),
|
|
233
|
+
/* 212 */ instruction("OR", Arguments.ThreeReg, 1),
|
|
234
|
+
/* 213 */ instruction("MUL_UPPER_S_S", Arguments.ThreeReg, 1),
|
|
235
|
+
/* 214 */ instruction("MUL_UPPER_U_U", Arguments.ThreeReg, 1),
|
|
236
|
+
/* 215 */ instruction("MUL_UPPER_S_U", Arguments.ThreeReg, 1),
|
|
237
|
+
/* 216 */ instruction("SET_LT_U", Arguments.ThreeReg, 1),
|
|
238
|
+
/* 217 */ instruction("SET_LT_S", Arguments.ThreeReg, 1),
|
|
239
|
+
/* 218 */ instruction("CMOV_IZ", Arguments.ThreeReg, 1),
|
|
240
|
+
/* 219 */ instruction("CMOV_NZ", Arguments.ThreeReg, 1),
|
|
241
|
+
/* 220 */ instruction("ROT_L_64", Arguments.ThreeReg, 1),
|
|
242
|
+
/* 221 */ instruction("ROT_L_32", Arguments.ThreeReg, 1),
|
|
243
|
+
/* 222 */ instruction("ROT_R_64", Arguments.ThreeReg, 1),
|
|
244
|
+
/* 223 */ instruction("ROT_R_32", Arguments.ThreeReg, 1),
|
|
245
|
+
/* 224 */ instruction("AND_INV", Arguments.ThreeReg, 1),
|
|
246
|
+
/* 225 */ instruction("OR_INV", Arguments.ThreeReg, 1),
|
|
247
|
+
/* 226 */ instruction("XNOR", Arguments.ThreeReg, 1),
|
|
248
|
+
/* 227 */ instruction("MAX", Arguments.ThreeReg, 1),
|
|
249
|
+
/* 228 */ instruction("MAX_U", Arguments.ThreeReg, 1),
|
|
250
|
+
/* 229 */ instruction("MIN", Arguments.ThreeReg, 1),
|
|
251
|
+
/* 230 */ instruction("MIN_U", Arguments.ThreeReg, 1),
|
|
252
|
+
]);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { GasCounter } from "./gas";
|
|
2
|
+
import { Memory } from "./memory";
|
|
3
|
+
import { Program } from "./program";
|
|
4
|
+
import { Registers } from "./registers";
|
|
5
|
+
export declare enum Status {
|
|
6
|
+
OK = -1,
|
|
7
|
+
HALT = 0,
|
|
8
|
+
PANIC = 1,
|
|
9
|
+
FAULT = 2,
|
|
10
|
+
HOST = 3,
|
|
11
|
+
OOG = 4
|
|
12
|
+
}
|
|
13
|
+
export declare class Interpreter {
|
|
14
|
+
readonly program: Program;
|
|
15
|
+
readonly registers: Registers;
|
|
16
|
+
readonly memory: Memory;
|
|
17
|
+
readonly gas: GasCounter;
|
|
18
|
+
pc: u32;
|
|
19
|
+
status: Status;
|
|
20
|
+
exitCode: u32;
|
|
21
|
+
nextPc: u32;
|
|
22
|
+
private djumpRes;
|
|
23
|
+
private argsRes;
|
|
24
|
+
private outcomeRes;
|
|
25
|
+
private branchRes;
|
|
26
|
+
constructor(program: Program, registers: Registers, memory?: Memory);
|
|
27
|
+
nextSteps(nSteps?: u32): boolean;
|
|
28
|
+
}
|