Skip to content

Commit d885feb

Browse files
committed
Implement GC opcodes
1 parent e1d4797 commit d885feb

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+5772
-1554
lines changed

include/wabt/binary-reader-logging.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,17 @@ class BinaryReaderLogging : public BinaryReaderDelegate {
171171
Result OnTernaryExpr(Opcode opcode) override;
172172
Result OnQuaternaryExpr(Opcode opcode) override;
173173

174+
Result OnArrayCopyExpr(Index dst_type_index, Index src_type_index) override;
175+
Result OnArrayFillExpr(Index type_index) override;
176+
Result OnArrayGetExpr(Opcode opcode, Index type_index) override;
177+
Result OnArrayInitDataExpr(Index type_index, Index data_index) override;
178+
Result OnArrayInitElemExpr(Index type_index, Index elem_index) override;
179+
Result OnArrayNewExpr(Index type_index) override;
180+
Result OnArrayNewDataExpr(Index type_index, Index data_index) override;
181+
Result OnArrayNewDefaultExpr(Index type_index) override;
182+
Result OnArrayNewElemExpr(Index type_index, Index elem_index) override;
183+
Result OnArrayNewFixedExpr(Index type_index, Index count) override;
184+
Result OnArraySetExpr(Index type_index) override;
174185
Result OnAtomicLoadExpr(Opcode opcode,
175186
Index memidx,
176187
Address alignment_log2,
@@ -190,6 +201,10 @@ class BinaryReaderLogging : public BinaryReaderDelegate {
190201
Result OnBlockExpr(Type sig_type) override;
191202
Result OnBrExpr(Index depth) override;
192203
Result OnBrIfExpr(Index depth) override;
204+
Result OnBrOnCastExpr(Opcode opcode,
205+
Index depth,
206+
Type type1,
207+
Type type2) override;
193208
Result OnBrOnNonNullExpr(Index depth) override;
194209
Result OnBrOnNullExpr(Index depth) override;
195210
Result OnBrTableExpr(Index num_targets,
@@ -209,6 +224,7 @@ class BinaryReaderLogging : public BinaryReaderDelegate {
209224
Result OnF32ConstExpr(uint32_t value_bits) override;
210225
Result OnF64ConstExpr(uint64_t value_bits) override;
211226
Result OnV128ConstExpr(v128 value_bits) override;
227+
Result OnGCUnaryExpr(Opcode opcode) override;
212228
Result OnGlobalGetExpr(Index global_index) override;
213229
Result OnGlobalSetExpr(Index global_index) override;
214230
Result OnI32ConstExpr(uint32_t value) override;
@@ -237,9 +253,11 @@ class BinaryReaderLogging : public BinaryReaderDelegate {
237253
Result OnTableSizeExpr(Index table) override;
238254
Result OnTableFillExpr(Index table) override;
239255
Result OnRefAsNonNullExpr() override;
256+
Result OnRefCastExpr(Type type) override;
240257
Result OnRefFuncExpr(Index index) override;
241258
Result OnRefNullExpr(Type type) override;
242259
Result OnRefIsNullExpr() override;
260+
Result OnRefTestExpr(Type type) override;
243261
Result OnNopExpr() override;
244262
Result OnRethrowExpr(Index depth) override;
245263
Result OnReturnCallExpr(Index func_index) override;
@@ -251,6 +269,12 @@ class BinaryReaderLogging : public BinaryReaderDelegate {
251269
Index memidx,
252270
Address alignment_log2,
253271
Address offset) override;
272+
Result OnStructGetExpr(Opcode opcode,
273+
Index type_index,
274+
Index field_index) override;
275+
Result OnStructNewExpr(Index type_index) override;
276+
Result OnStructNewDefaultExpr(Index type_index) override;
277+
Result OnStructSetExpr(Index type_index, Index field_index) override;
254278
Result OnThrowExpr(Index tag_index) override;
255279
Result OnThrowRefExpr() override;
256280
Result OnTryExpr(Type sig_type) override;

include/wabt/binary-reader-nop.h

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,31 @@ class BinaryReaderNop : public BinaryReaderDelegate {
225225
Result OnTernaryExpr(Opcode opcode) override { return Result::Ok; }
226226
Result OnQuaternaryExpr(Opcode opcode) override { return Result::Ok; }
227227

228+
Result OnArrayCopyExpr(Index dst_type_index, Index src_type_index) override {
229+
return Result::Ok;
230+
}
231+
Result OnArrayFillExpr(Index type_index) override { return Result::Ok; }
232+
Result OnArrayGetExpr(Opcode opcode, Index type_index) override {
233+
return Result::Ok;
234+
}
235+
Result OnArrayInitDataExpr(Index type_index, Index data_index) override {
236+
return Result::Ok;
237+
}
238+
Result OnArrayInitElemExpr(Index type_index, Index elem_index) override {
239+
return Result::Ok;
240+
}
241+
Result OnArrayNewExpr(Index type_index) override { return Result::Ok; }
242+
Result OnArrayNewDataExpr(Index type_index, Index data_index) override {
243+
return Result::Ok;
244+
}
245+
Result OnArrayNewDefaultExpr(Index type_index) override { return Result::Ok; }
246+
Result OnArrayNewElemExpr(Index type_index, Index elem_index) override {
247+
return Result::Ok;
248+
}
249+
Result OnArrayNewFixedExpr(Index type_index, Index count) override {
250+
return Result::Ok;
251+
}
252+
Result OnArraySetExpr(Index type_index) override { return Result::Ok; }
228253
Result OnAtomicLoadExpr(Opcode opcode,
229254
Index memidx,
230255
Address alignment_log2,
@@ -259,6 +284,12 @@ class BinaryReaderNop : public BinaryReaderDelegate {
259284
Result OnBlockExpr(Type sig_type) override { return Result::Ok; }
260285
Result OnBrExpr(Index depth) override { return Result::Ok; }
261286
Result OnBrIfExpr(Index depth) override { return Result::Ok; }
287+
Result OnBrOnCastExpr(Opcode opcode,
288+
Index depth,
289+
Type type1,
290+
Type type2) override {
291+
return Result::Ok;
292+
}
262293
Result OnBrOnNonNullExpr(Index depth) override { return Result::Ok; }
263294
Result OnBrOnNullExpr(Index depth) override { return Result::Ok; }
264295
Result OnBrTableExpr(Index num_targets,
@@ -282,6 +313,7 @@ class BinaryReaderNop : public BinaryReaderDelegate {
282313
Result OnF32ConstExpr(uint32_t value_bits) override { return Result::Ok; }
283314
Result OnF64ConstExpr(uint64_t value_bits) override { return Result::Ok; }
284315
Result OnV128ConstExpr(v128 value_bits) override { return Result::Ok; }
316+
Result OnGCUnaryExpr(Opcode opcode) override { return Result::Ok; }
285317
Result OnGlobalGetExpr(Index global_index) override { return Result::Ok; }
286318
Result OnGlobalSetExpr(Index global_index) override { return Result::Ok; }
287319
Result OnI32ConstExpr(uint32_t value) override { return Result::Ok; }
@@ -320,9 +352,11 @@ class BinaryReaderNop : public BinaryReaderDelegate {
320352
Result OnTableSizeExpr(Index table_index) override { return Result::Ok; }
321353
Result OnTableFillExpr(Index table_index) override { return Result::Ok; }
322354
Result OnRefAsNonNullExpr() override { return Result::Ok; }
355+
Result OnRefCastExpr(Type type) override { return Result::Ok; }
323356
Result OnRefFuncExpr(Index func_index) override { return Result::Ok; }
324357
Result OnRefNullExpr(Type type) override { return Result::Ok; }
325358
Result OnRefIsNullExpr() override { return Result::Ok; }
359+
Result OnRefTestExpr(Type type) override { return Result::Ok; }
326360
Result OnNopExpr() override { return Result::Ok; }
327361
Result OnRethrowExpr(Index depth) override { return Result::Ok; }
328362
Result OnReturnCallExpr(Index sig_index) override { return Result::Ok; }
@@ -340,6 +374,18 @@ class BinaryReaderNop : public BinaryReaderDelegate {
340374
Address offset) override {
341375
return Result::Ok;
342376
}
377+
Result OnStructGetExpr(Opcode opcode,
378+
Index type_index,
379+
Index field_index) override {
380+
return Result::Ok;
381+
}
382+
Result OnStructNewExpr(Index type_index) override { return Result::Ok; }
383+
Result OnStructNewDefaultExpr(Index type_index) override {
384+
return Result::Ok;
385+
}
386+
Result OnStructSetExpr(Index type_index, Index field_index) override {
387+
return Result::Ok;
388+
}
343389
Result OnThrowExpr(Index depth) override { return Result::Ok; }
344390
Result OnThrowRefExpr() override { return Result::Ok; }
345391
Result OnTryExpr(Type sig_type) override { return Result::Ok; }

include/wabt/binary-reader.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,17 @@ class BinaryReaderDelegate {
248248
virtual Result OnTernaryExpr(Opcode opcode) = 0;
249249
virtual Result OnQuaternaryExpr(Opcode opcode) = 0;
250250

251+
virtual Result OnArrayCopyExpr(Index dst_type_index, Index src_type_index) = 0;
252+
virtual Result OnArrayFillExpr(Index type_index) = 0;
253+
virtual Result OnArrayGetExpr(Opcode opcode, Index type_index) = 0;
254+
virtual Result OnArrayInitDataExpr(Index type_index, Index data_index) = 0;
255+
virtual Result OnArrayInitElemExpr(Index type_index, Index elem_index) = 0;
256+
virtual Result OnArrayNewExpr(Index type_index) = 0;
257+
virtual Result OnArrayNewDataExpr(Index type_index, Index data_index) = 0;
258+
virtual Result OnArrayNewDefaultExpr(Index type_index) = 0;
259+
virtual Result OnArrayNewElemExpr(Index type_index, Index elem_index) = 0;
260+
virtual Result OnArrayNewFixedExpr(Index type_index, Index count) = 0;
261+
virtual Result OnArraySetExpr(Index type_index) = 0;
251262
virtual Result OnAtomicLoadExpr(Opcode opcode,
252263
Index memidx,
253264
Address alignment_log2,
@@ -276,6 +287,10 @@ class BinaryReaderDelegate {
276287
virtual Result OnBlockExpr(Type sig_type) = 0;
277288
virtual Result OnBrExpr(Index depth) = 0;
278289
virtual Result OnBrIfExpr(Index depth) = 0;
290+
virtual Result OnBrOnCastExpr(Opcode opcode,
291+
Index depth,
292+
Type type1,
293+
Type type2) = 0;
279294
virtual Result OnBrOnNonNullExpr(Index depth) = 0;
280295
virtual Result OnBrOnNullExpr(Index depth) = 0;
281296
virtual Result OnBrTableExpr(Index num_targets,
@@ -295,6 +310,7 @@ class BinaryReaderDelegate {
295310
virtual Result OnF32ConstExpr(uint32_t value_bits) = 0;
296311
virtual Result OnF64ConstExpr(uint64_t value_bits) = 0;
297312
virtual Result OnV128ConstExpr(v128 value_bits) = 0;
313+
virtual Result OnGCUnaryExpr(Opcode opcode) = 0;
298314
virtual Result OnGlobalGetExpr(Index global_index) = 0;
299315
virtual Result OnGlobalSetExpr(Index global_index) = 0;
300316
virtual Result OnI32ConstExpr(uint32_t value) = 0;
@@ -323,9 +339,11 @@ class BinaryReaderDelegate {
323339
virtual Result OnTableSizeExpr(Index table_index) = 0;
324340
virtual Result OnTableFillExpr(Index table_index) = 0;
325341
virtual Result OnRefAsNonNullExpr() = 0;
342+
virtual Result OnRefCastExpr(Type type) = 0;
326343
virtual Result OnRefFuncExpr(Index func_index) = 0;
327344
virtual Result OnRefNullExpr(Type type) = 0;
328345
virtual Result OnRefIsNullExpr() = 0;
346+
virtual Result OnRefTestExpr(Type type) = 0;
329347
virtual Result OnNopExpr() = 0;
330348
virtual Result OnRethrowExpr(Index depth) = 0;
331349
virtual Result OnReturnExpr() = 0;
@@ -338,6 +356,12 @@ class BinaryReaderDelegate {
338356
Index memidx,
339357
Address alignment_log2,
340358
Address offset) = 0;
359+
virtual Result OnStructGetExpr(Opcode opcode,
360+
Index type_index,
361+
Index field_index) = 0;
362+
virtual Result OnStructNewExpr(Index type_index) = 0;
363+
virtual Result OnStructNewDefaultExpr(Index type_index) = 0;
364+
virtual Result OnStructSetExpr(Index type_index, Index field_index) = 0;
341365
virtual Result OnThrowExpr(Index tag_index) = 0;
342366
virtual Result OnThrowRefExpr() = 0;
343367
virtual Result OnTryExpr(Type sig_type) = 0;

include/wabt/expr-visitor.h

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ class ExprVisitor::Delegate {
7777
virtual Result EndBlockExpr(BlockExpr*) = 0;
7878
virtual Result OnBrExpr(BrExpr*) = 0;
7979
virtual Result OnBrIfExpr(BrIfExpr*) = 0;
80+
virtual Result OnBrOnCastExpr(BrOnCastExpr*) = 0;
8081
virtual Result OnBrOnNonNullExpr(BrOnNonNullExpr*) = 0;
8182
virtual Result OnBrOnNullExpr(BrOnNullExpr*) = 0;
8283
virtual Result OnBrTableExpr(BrTableExpr*) = 0;
@@ -147,6 +148,24 @@ class ExprVisitor::Delegate {
147148
virtual Result OnSimdShuffleOpExpr(SimdShuffleOpExpr*) = 0;
148149
virtual Result OnLoadSplatExpr(LoadSplatExpr*) = 0;
149150
virtual Result OnLoadZeroExpr(LoadZeroExpr*) = 0;
151+
virtual Result OnArrayCopyExpr(ArrayCopyExpr*) = 0;
152+
virtual Result OnArrayFillExpr(ArrayFillExpr*) = 0;
153+
virtual Result OnArrayGetExpr(ArrayGetExpr*) = 0;
154+
virtual Result OnArrayInitDataExpr(ArrayInitDataExpr*) = 0;
155+
virtual Result OnArrayInitElemExpr(ArrayInitElemExpr*) = 0;
156+
virtual Result OnArrayNewExpr(ArrayNewExpr*) = 0;
157+
virtual Result OnArrayNewDataExpr(ArrayNewDataExpr*) = 0;
158+
virtual Result OnArrayNewDefaultExpr(ArrayNewDefaultExpr*) = 0;
159+
virtual Result OnArrayNewElemExpr(ArrayNewElemExpr*) = 0;
160+
virtual Result OnArrayNewFixedExpr(ArrayNewFixedExpr*) = 0;
161+
virtual Result OnArraySetExpr(ArraySetExpr*) = 0;
162+
virtual Result OnGCUnaryExpr(GCUnaryExpr*) = 0;
163+
virtual Result OnRefCastExpr(RefCastExpr*) = 0;
164+
virtual Result OnRefTestExpr(RefTestExpr*) = 0;
165+
virtual Result OnStructGetExpr(StructGetExpr*) = 0;
166+
virtual Result OnStructNewExpr(StructNewExpr*) = 0;
167+
virtual Result OnStructNewDefaultExpr(StructNewDefaultExpr*) = 0;
168+
virtual Result OnStructSetExpr(StructSetExpr*) = 0;
150169
};
151170

152171
class ExprVisitor::DelegateNop : public ExprVisitor::Delegate {
@@ -160,6 +179,7 @@ class ExprVisitor::DelegateNop : public ExprVisitor::Delegate {
160179
Result EndBlockExpr(BlockExpr*) override { return Result::Ok; }
161180
Result OnBrExpr(BrExpr*) override { return Result::Ok; }
162181
Result OnBrIfExpr(BrIfExpr*) override { return Result::Ok; }
182+
Result OnBrOnCastExpr(BrOnCastExpr*) override { return Result::Ok; };
163183
Result OnBrOnNonNullExpr(BrOnNonNullExpr*) override { return Result::Ok; };
164184
Result OnBrOnNullExpr(BrOnNullExpr*) override { return Result::Ok; };
165185
Result OnBrTableExpr(BrTableExpr*) override { return Result::Ok; }
@@ -234,6 +254,28 @@ class ExprVisitor::DelegateNop : public ExprVisitor::Delegate {
234254
Result OnSimdShuffleOpExpr(SimdShuffleOpExpr*) override { return Result::Ok; }
235255
Result OnLoadSplatExpr(LoadSplatExpr*) override { return Result::Ok; }
236256
Result OnLoadZeroExpr(LoadZeroExpr*) override { return Result::Ok; }
257+
Result OnArrayCopyExpr(ArrayCopyExpr*) override { return Result::Ok; }
258+
Result OnArrayFillExpr(ArrayFillExpr*) override { return Result::Ok; }
259+
Result OnArrayGetExpr(ArrayGetExpr*) override { return Result::Ok; }
260+
Result OnArrayInitDataExpr(ArrayInitDataExpr*) override { return Result::Ok; }
261+
Result OnArrayInitElemExpr(ArrayInitElemExpr*) override { return Result::Ok; }
262+
Result OnArrayNewExpr(ArrayNewExpr*) override { return Result::Ok; }
263+
Result OnArrayNewDataExpr(ArrayNewDataExpr*) override { return Result::Ok; }
264+
Result OnArrayNewDefaultExpr(ArrayNewDefaultExpr*) override {
265+
return Result::Ok;
266+
}
267+
Result OnArrayNewElemExpr(ArrayNewElemExpr*) override { return Result::Ok; }
268+
Result OnArrayNewFixedExpr(ArrayNewFixedExpr*) override { return Result::Ok; }
269+
Result OnArraySetExpr(ArraySetExpr*) override { return Result::Ok; }
270+
Result OnGCUnaryExpr(GCUnaryExpr*) override { return Result::Ok; }
271+
Result OnRefCastExpr(RefCastExpr*) override { return Result::Ok; }
272+
Result OnRefTestExpr(RefTestExpr*) override { return Result::Ok; }
273+
Result OnStructGetExpr(StructGetExpr*) override { return Result::Ok; }
274+
Result OnStructNewExpr(StructNewExpr*) override { return Result::Ok; }
275+
Result OnStructNewDefaultExpr(StructNewDefaultExpr*) override {
276+
return Result::Ok;
277+
}
278+
Result OnStructSetExpr(StructSetExpr*) override { return Result::Ok; }
237279
};
238280

239281
} // namespace wabt

0 commit comments

Comments
 (0)