@fluffylabs/anan-as 1.2.0-e8a5af8 → 1.2.0-ef04361

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 (102) hide show
  1. package/dist/bin/src/trace-replay.js +2 -2
  2. package/dist/build/compiler-inline.js +1 -1
  3. package/dist/build/compiler.wasm +0 -0
  4. package/dist/build/debug-inline.js +1 -1
  5. package/dist/build/debug-raw-inline.js +1 -1
  6. package/dist/build/debug-raw.d.ts +34 -98
  7. package/dist/build/debug-raw.js +51 -105
  8. package/dist/build/debug-raw.wasm +0 -0
  9. package/dist/build/debug.d.ts +34 -98
  10. package/dist/build/debug.js +53 -112
  11. package/dist/build/debug.wasm +0 -0
  12. package/dist/build/js/assembly/api-debugger.d.ts +55 -0
  13. package/dist/build/js/assembly/api-debugger.js +245 -0
  14. package/dist/build/js/assembly/api-internal.d.ts +13 -0
  15. package/dist/build/js/assembly/api-internal.js +192 -0
  16. package/dist/build/js/assembly/api-types.d.ts +45 -0
  17. package/dist/build/js/assembly/api-types.js +53 -0
  18. package/dist/build/js/assembly/api-utils.d.ts +71 -0
  19. package/dist/build/js/assembly/api-utils.js +206 -0
  20. package/dist/build/js/assembly/arguments.d.ts +44 -0
  21. package/dist/build/js/assembly/arguments.js +164 -0
  22. package/dist/build/js/assembly/codec.d.ts +24 -0
  23. package/dist/build/js/assembly/codec.js +139 -0
  24. package/dist/build/js/assembly/gas-costs.d.ts +6 -0
  25. package/dist/build/js/assembly/gas-costs.js +39 -0
  26. package/dist/build/js/assembly/gas.d.ts +16 -0
  27. package/dist/build/js/assembly/gas.js +23 -0
  28. package/dist/build/js/assembly/index-shared.d.ts +4 -0
  29. package/dist/build/js/assembly/index-shared.js +4 -0
  30. package/dist/build/js/assembly/instructions/bit.d.ts +11 -0
  31. package/dist/build/js/assembly/instructions/bit.js +53 -0
  32. package/dist/build/js/assembly/instructions/branch.d.ts +17 -0
  33. package/dist/build/js/assembly/instructions/branch.js +120 -0
  34. package/dist/build/js/assembly/instructions/jump.d.ts +5 -0
  35. package/dist/build/js/assembly/instructions/jump.js +21 -0
  36. package/dist/build/js/assembly/instructions/load.d.ts +17 -0
  37. package/dist/build/js/assembly/instructions/load.js +134 -0
  38. package/dist/build/js/assembly/instructions/logic.d.ts +10 -0
  39. package/dist/build/js/assembly/instructions/logic.js +47 -0
  40. package/dist/build/js/assembly/instructions/math.d.ts +28 -0
  41. package/dist/build/js/assembly/instructions/math.js +225 -0
  42. package/dist/build/js/assembly/instructions/misc.d.ts +6 -0
  43. package/dist/build/js/assembly/instructions/misc.js +22 -0
  44. package/dist/build/js/assembly/instructions/mov.d.ts +6 -0
  45. package/dist/build/js/assembly/instructions/mov.js +35 -0
  46. package/dist/build/js/assembly/instructions/outcome.d.ts +30 -0
  47. package/dist/build/js/assembly/instructions/outcome.js +63 -0
  48. package/dist/build/js/assembly/instructions/rot.d.ts +15 -0
  49. package/dist/build/js/assembly/instructions/rot.js +66 -0
  50. package/dist/build/js/assembly/instructions/set.d.ts +7 -0
  51. package/dist/build/js/assembly/instructions/set.js +36 -0
  52. package/dist/build/js/assembly/instructions/shift.d.ts +19 -0
  53. package/dist/build/js/assembly/instructions/shift.js +121 -0
  54. package/dist/build/js/assembly/instructions/store.d.ts +17 -0
  55. package/dist/build/js/assembly/instructions/store.js +101 -0
  56. package/dist/build/js/assembly/instructions/utils.d.ts +23 -0
  57. package/dist/build/js/assembly/instructions/utils.js +75 -0
  58. package/dist/build/js/assembly/instructions-exe.d.ts +2 -0
  59. package/dist/build/js/assembly/instructions-exe.js +245 -0
  60. package/dist/build/js/assembly/instructions.d.ts +11 -0
  61. package/dist/build/js/assembly/instructions.js +252 -0
  62. package/dist/build/js/assembly/interpreter.d.ts +29 -0
  63. package/dist/build/js/assembly/interpreter.js +229 -0
  64. package/dist/build/js/assembly/math.d.ts +8 -0
  65. package/dist/build/js/assembly/math.js +14 -0
  66. package/dist/build/js/assembly/memory-page.d.ts +38 -0
  67. package/dist/build/js/assembly/memory-page.js +68 -0
  68. package/dist/build/js/assembly/memory.d.ts +82 -0
  69. package/dist/build/js/assembly/memory.js +386 -0
  70. package/dist/build/js/assembly/portable.d.ts +24 -0
  71. package/dist/build/js/assembly/portable.js +362 -0
  72. package/dist/build/js/assembly/program-build.d.ts +2 -0
  73. package/dist/build/js/assembly/program-build.js +104 -0
  74. package/dist/build/js/assembly/program.d.ts +78 -0
  75. package/dist/build/js/assembly/program.js +284 -0
  76. package/dist/build/js/assembly/registers.d.ts +6 -0
  77. package/dist/build/js/assembly/registers.js +9 -0
  78. package/dist/build/js/assembly/spi.d.ts +92 -0
  79. package/dist/build/js/assembly/spi.js +152 -0
  80. package/dist/build/js/portable/bootstrap.d.ts +1 -0
  81. package/dist/build/js/portable/bootstrap.js +5 -0
  82. package/dist/build/js/portable/index.d.ts +4 -0
  83. package/dist/build/js/portable/index.js +6 -0
  84. package/dist/build/js/portable-bundle.js +4309 -0
  85. package/dist/build/release-inline.js +1 -1
  86. package/dist/build/release-mini-inline.js +1 -1
  87. package/dist/build/release-mini.d.ts +34 -98
  88. package/dist/build/release-mini.js +53 -112
  89. package/dist/build/release-mini.wasm +0 -0
  90. package/dist/build/release-stub-inline.js +1 -1
  91. package/dist/build/release-stub.d.ts +34 -98
  92. package/dist/build/release-stub.js +53 -112
  93. package/dist/build/release-stub.wasm +0 -0
  94. package/dist/build/release.d.ts +34 -98
  95. package/dist/build/release.js +53 -112
  96. package/dist/build/release.wasm +0 -0
  97. package/dist/build/test-inline.js +1 -1
  98. package/dist/build/test.wasm +0 -0
  99. package/dist/test/test-w3f-common.js +126 -0
  100. package/dist/test/test-w3f-portable.js +5 -0
  101. package/dist/test/test-w3f.js +3 -120
  102. package/package.json +11 -4
@@ -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,11 @@
1
+ import { Arguments } from "./arguments";
2
+ import { Gas } from "./gas";
3
+ export declare class Instruction {
4
+ name: string;
5
+ kind: Arguments;
6
+ gas: Gas;
7
+ isTerminating: boolean;
8
+ }
9
+ export declare const MISSING_INSTRUCTION: Instruction;
10
+ export declare const SBRK: Instruction;
11
+ export declare const INSTRUCTIONS: 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 = i64(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 = i64(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 = [
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,29 @@
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
+ useSbrkGas: boolean;
23
+ private djumpRes;
24
+ private argsRes;
25
+ private outcomeRes;
26
+ private branchRes;
27
+ constructor(program: Program, registers: Registers, memory?: Memory);
28
+ nextSteps(nSteps?: u32): boolean;
29
+ }