@fluffylabs/anan-as 1.2.0 → 1.3.0-5cbd3aa

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/dist/bin/index.js +138 -5
  2. package/dist/bin/src/fuzz.js +2 -2
  3. package/dist/bin/src/test-json.js +2 -6
  4. package/dist/bin/src/trace-parse.js +1 -0
  5. package/dist/bin/src/trace-replay.js +14 -9
  6. package/dist/bin/src/tracer.js +16 -13
  7. package/dist/bin/src/utils.js +2 -2
  8. package/dist/build/compiler-inline.js +1 -1
  9. package/dist/build/compiler.d.ts +17 -13
  10. package/dist/build/compiler.js +13 -21
  11. package/dist/build/compiler.wasm +0 -0
  12. package/dist/build/debug-inline.js +1 -1
  13. package/dist/build/debug-raw-inline.js +1 -1
  14. package/dist/build/debug-raw.d.ts +50 -112
  15. package/dist/build/debug-raw.js +78 -139
  16. package/dist/build/debug-raw.wasm +0 -0
  17. package/dist/build/debug.d.ts +50 -112
  18. package/dist/build/debug.js +81 -147
  19. package/dist/build/debug.wasm +0 -0
  20. package/dist/build/js/assembly/api-debugger.d.ts +55 -0
  21. package/dist/build/js/assembly/api-debugger.js +245 -0
  22. package/dist/build/js/assembly/api-internal.d.ts +13 -0
  23. package/dist/build/js/assembly/api-internal.js +191 -0
  24. package/dist/build/js/assembly/api-types.d.ts +45 -0
  25. package/dist/build/js/assembly/api-types.js +52 -0
  26. package/dist/build/js/assembly/api-utils.d.ts +79 -0
  27. package/dist/build/js/assembly/api-utils.js +221 -0
  28. package/dist/build/js/assembly/arguments.d.ts +44 -0
  29. package/dist/build/js/assembly/arguments.js +164 -0
  30. package/dist/build/js/assembly/codec.d.ts +24 -0
  31. package/dist/build/js/assembly/codec.js +139 -0
  32. package/dist/build/js/assembly/gas.d.ts +11 -0
  33. package/dist/build/js/assembly/gas.js +33 -0
  34. package/dist/build/js/assembly/index-shared.d.ts +4 -0
  35. package/dist/build/js/assembly/index-shared.js +4 -0
  36. package/dist/build/js/assembly/instructions/bit.d.ts +11 -0
  37. package/dist/build/js/assembly/instructions/bit.js +53 -0
  38. package/dist/build/js/assembly/instructions/branch.d.ts +17 -0
  39. package/dist/build/js/assembly/instructions/branch.js +120 -0
  40. package/dist/build/js/assembly/instructions/jump.d.ts +5 -0
  41. package/dist/build/js/assembly/instructions/jump.js +21 -0
  42. package/dist/build/js/assembly/instructions/load.d.ts +17 -0
  43. package/dist/build/js/assembly/instructions/load.js +134 -0
  44. package/dist/build/js/assembly/instructions/logic.d.ts +10 -0
  45. package/dist/build/js/assembly/instructions/logic.js +47 -0
  46. package/dist/build/js/assembly/instructions/math.d.ts +28 -0
  47. package/dist/build/js/assembly/instructions/math.js +225 -0
  48. package/dist/build/js/assembly/instructions/misc.d.ts +6 -0
  49. package/dist/build/js/assembly/instructions/misc.js +22 -0
  50. package/dist/build/js/assembly/instructions/mov.d.ts +6 -0
  51. package/dist/build/js/assembly/instructions/mov.js +35 -0
  52. package/dist/build/js/assembly/instructions/outcome.d.ts +30 -0
  53. package/dist/build/js/assembly/instructions/outcome.js +88 -0
  54. package/dist/build/js/assembly/instructions/rot.d.ts +15 -0
  55. package/dist/build/js/assembly/instructions/rot.js +66 -0
  56. package/dist/build/js/assembly/instructions/set.d.ts +7 -0
  57. package/dist/build/js/assembly/instructions/set.js +36 -0
  58. package/dist/build/js/assembly/instructions/shift.d.ts +19 -0
  59. package/dist/build/js/assembly/instructions/shift.js +121 -0
  60. package/dist/build/js/assembly/instructions/store.d.ts +17 -0
  61. package/dist/build/js/assembly/instructions/store.js +101 -0
  62. package/dist/build/js/assembly/instructions/utils.d.ts +25 -0
  63. package/dist/build/js/assembly/instructions/utils.js +91 -0
  64. package/dist/build/js/assembly/instructions-exe.d.ts +2 -0
  65. package/dist/build/js/assembly/instructions-exe.js +245 -0
  66. package/dist/build/js/assembly/instructions.d.ts +10 -0
  67. package/dist/build/js/assembly/instructions.js +252 -0
  68. package/dist/build/js/assembly/interpreter.d.ts +28 -0
  69. package/dist/build/js/assembly/interpreter.js +221 -0
  70. package/dist/build/js/assembly/math.d.ts +6 -0
  71. package/dist/build/js/assembly/math.js +22 -0
  72. package/dist/build/js/assembly/memory-page.d.ts +36 -0
  73. package/dist/build/js/assembly/memory-page.js +74 -0
  74. package/dist/build/js/assembly/memory.d.ts +83 -0
  75. package/dist/build/js/assembly/memory.js +482 -0
  76. package/dist/build/js/assembly/portable.d.ts +24 -0
  77. package/dist/build/js/assembly/portable.js +363 -0
  78. package/dist/build/js/assembly/program-build.d.ts +2 -0
  79. package/dist/build/js/assembly/program-build.js +104 -0
  80. package/dist/build/js/assembly/program.d.ts +85 -0
  81. package/dist/build/js/assembly/program.js +340 -0
  82. package/dist/build/js/assembly/registers.d.ts +6 -0
  83. package/dist/build/js/assembly/registers.js +9 -0
  84. package/dist/build/js/assembly/spi.d.ts +92 -0
  85. package/dist/build/js/assembly/spi.js +152 -0
  86. package/dist/build/js/portable/bootstrap.d.ts +1 -0
  87. package/dist/build/js/portable/bootstrap.js +6 -0
  88. package/dist/build/js/portable/index.d.ts +4 -0
  89. package/dist/build/js/portable/index.js +6 -0
  90. package/dist/build/js/portable-bundle.js +4497 -0
  91. package/dist/build/release-inline.js +1 -1
  92. package/dist/build/release-mini-inline.js +1 -1
  93. package/dist/build/release-mini.d.ts +50 -112
  94. package/dist/build/release-mini.js +81 -147
  95. package/dist/build/release-mini.wasm +0 -0
  96. package/dist/build/release-stub-inline.js +1 -1
  97. package/dist/build/release-stub.d.ts +50 -112
  98. package/dist/build/release-stub.js +81 -147
  99. package/dist/build/release-stub.wasm +0 -0
  100. package/dist/build/release.d.ts +50 -112
  101. package/dist/build/release.js +81 -147
  102. package/dist/build/release.wasm +0 -0
  103. package/dist/build/test-inline.js +1 -1
  104. package/dist/build/test.wasm +0 -0
  105. package/dist/test/test-gas-cost.js +2 -3
  106. package/dist/test/test-trace-format.js +166 -0
  107. package/dist/test/test-w3f-common.js +125 -0
  108. package/dist/test/test-w3f-portable.js +5 -0
  109. package/dist/test/test-w3f.js +3 -120
  110. 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,2 @@
1
+ import { InstructionRun } from "./instructions/outcome";
2
+ export declare const RUN: InstructionRun[];
@@ -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
+ }