Skip to content

Commit e20fa92

Browse files
committed
Implement GC opcodes
1 parent 83b6311 commit e20fa92

51 files changed

Lines changed: 5783 additions & 1551 deletions

Some content is hidden

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

include/wabt/binary-reader-logging.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,17 @@ class BinaryReaderLogging : public BinaryReaderDelegate {
165165
Result OnOpcodeV128(v128 value) override;
166166
Result OnOpcodeBlockSig(Type sig_type) override;
167167
Result OnOpcodeType(Type type) override;
168+
Result OnArrayCopyExpr(Index dst_type_index, Index src_type_index) override;
169+
Result OnArrayFillExpr(Index type_index) override;
170+
Result OnArrayGetExpr(Opcode opcode, Index type_index) override;
171+
Result OnArrayInitDataExpr(Index type_index, Index data_index) override;
172+
Result OnArrayInitElemExpr(Index type_index, Index elem_index) override;
173+
Result OnArrayNewExpr(Index type_index) override;
174+
Result OnArrayNewDataExpr(Index type_index, Index data_index) override;
175+
Result OnArrayNewDefaultExpr(Index type_index) override;
176+
Result OnArrayNewElemExpr(Index type_index, Index elem_index) override;
177+
Result OnArrayNewFixedExpr(Index type_index, Index count) override;
178+
Result OnArraySetExpr(Index type_index) override;
168179
Result OnAtomicLoadExpr(Opcode opcode,
169180
Index memidx,
170181
Address alignment_log2,
@@ -185,6 +196,10 @@ class BinaryReaderLogging : public BinaryReaderDelegate {
185196
Result OnBlockExpr(Type sig_type) override;
186197
Result OnBrExpr(Index depth) override;
187198
Result OnBrIfExpr(Index depth) override;
199+
Result OnBrOnCastExpr(Opcode opcode,
200+
Index depth,
201+
Type type1,
202+
Type type2) override;
188203
Result OnBrOnNonNullExpr(Index depth) override;
189204
Result OnBrOnNullExpr(Index depth) override;
190205
Result OnBrTableExpr(Index num_targets,
@@ -204,6 +219,7 @@ class BinaryReaderLogging : public BinaryReaderDelegate {
204219
Result OnF32ConstExpr(uint32_t value_bits) override;
205220
Result OnF64ConstExpr(uint64_t value_bits) override;
206221
Result OnV128ConstExpr(v128 value_bits) override;
222+
Result OnGCUnaryExpr(Opcode opcode) override;
207223
Result OnGlobalGetExpr(Index global_index) override;
208224
Result OnGlobalSetExpr(Index global_index) override;
209225
Result OnI32ConstExpr(uint32_t value) override;
@@ -232,9 +248,11 @@ class BinaryReaderLogging : public BinaryReaderDelegate {
232248
Result OnTableSizeExpr(Index table) override;
233249
Result OnTableFillExpr(Index table) override;
234250
Result OnRefAsNonNullExpr() override;
251+
Result OnRefCastExpr(Type type) override;
235252
Result OnRefFuncExpr(Index index) override;
236253
Result OnRefNullExpr(Type type) override;
237254
Result OnRefIsNullExpr() override;
255+
Result OnRefTestExpr(Type type) override;
238256
Result OnNopExpr() override;
239257
Result OnRethrowExpr(Index depth) override;
240258
Result OnReturnCallExpr(Index func_index) override;
@@ -246,6 +264,12 @@ class BinaryReaderLogging : public BinaryReaderDelegate {
246264
Index memidx,
247265
Address alignment_log2,
248266
Address offset) override;
267+
Result OnStructGetExpr(Opcode opcode,
268+
Index type_index,
269+
Index field_index) override;
270+
Result OnStructNewExpr(Index type_index) override;
271+
Result OnStructNewDefaultExpr(Index type_index) override;
272+
Result OnStructSetExpr(Index type_index, Index field_index) override;
249273
Result OnThrowExpr(Index tag_index) override;
250274
Result OnThrowRefExpr() override;
251275
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
@@ -219,6 +219,31 @@ class BinaryReaderNop : public BinaryReaderDelegate {
219219
Result OnOpcodeV128(v128 value) override { return Result::Ok; }
220220
Result OnOpcodeBlockSig(Type sig_type) override { return Result::Ok; }
221221
Result OnOpcodeType(Type type) override { return Result::Ok; }
222+
Result OnArrayCopyExpr(Index dst_type_index, Index src_type_index) override {
223+
return Result::Ok;
224+
}
225+
Result OnArrayFillExpr(Index type_index) override { return Result::Ok; }
226+
Result OnArrayGetExpr(Opcode opcode, Index type_index) override {
227+
return Result::Ok;
228+
}
229+
Result OnArrayInitDataExpr(Index type_index, Index data_index) override {
230+
return Result::Ok;
231+
}
232+
Result OnArrayInitElemExpr(Index type_index, Index elem_index) override {
233+
return Result::Ok;
234+
}
235+
Result OnArrayNewExpr(Index type_index) override { return Result::Ok; }
236+
Result OnArrayNewDataExpr(Index type_index, Index data_index) override {
237+
return Result::Ok;
238+
}
239+
Result OnArrayNewDefaultExpr(Index type_index) override { return Result::Ok; }
240+
Result OnArrayNewElemExpr(Index type_index, Index elem_index) override {
241+
return Result::Ok;
242+
}
243+
Result OnArrayNewFixedExpr(Index type_index, Index count) override {
244+
return Result::Ok;
245+
}
246+
Result OnArraySetExpr(Index type_index) override { return Result::Ok; }
222247
Result OnAtomicLoadExpr(Opcode opcode,
223248
Index memidx,
224249
Address alignment_log2,
@@ -254,6 +279,12 @@ class BinaryReaderNop : public BinaryReaderDelegate {
254279
Result OnBlockExpr(Type sig_type) override { return Result::Ok; }
255280
Result OnBrExpr(Index depth) override { return Result::Ok; }
256281
Result OnBrIfExpr(Index depth) override { return Result::Ok; }
282+
Result OnBrOnCastExpr(Opcode opcode,
283+
Index depth,
284+
Type type1,
285+
Type type2) override {
286+
return Result::Ok;
287+
}
257288
Result OnBrOnNonNullExpr(Index depth) override { return Result::Ok; }
258289
Result OnBrOnNullExpr(Index depth) override { return Result::Ok; }
259290
Result OnBrTableExpr(Index num_targets,
@@ -277,6 +308,7 @@ class BinaryReaderNop : public BinaryReaderDelegate {
277308
Result OnF32ConstExpr(uint32_t value_bits) override { return Result::Ok; }
278309
Result OnF64ConstExpr(uint64_t value_bits) override { return Result::Ok; }
279310
Result OnV128ConstExpr(v128 value_bits) override { return Result::Ok; }
311+
Result OnGCUnaryExpr(Opcode opcode) override { return Result::Ok; }
280312
Result OnGlobalGetExpr(Index global_index) override { return Result::Ok; }
281313
Result OnGlobalSetExpr(Index global_index) override { return Result::Ok; }
282314
Result OnI32ConstExpr(uint32_t value) override { return Result::Ok; }
@@ -315,9 +347,11 @@ class BinaryReaderNop : public BinaryReaderDelegate {
315347
Result OnTableSizeExpr(Index table_index) override { return Result::Ok; }
316348
Result OnTableFillExpr(Index table_index) override { return Result::Ok; }
317349
Result OnRefAsNonNullExpr() override { return Result::Ok; }
350+
Result OnRefCastExpr(Type type) override { return Result::Ok; }
318351
Result OnRefFuncExpr(Index func_index) override { return Result::Ok; }
319352
Result OnRefNullExpr(Type type) override { return Result::Ok; }
320353
Result OnRefIsNullExpr() override { return Result::Ok; }
354+
Result OnRefTestExpr(Type type) override { return Result::Ok; }
321355
Result OnNopExpr() override { return Result::Ok; }
322356
Result OnRethrowExpr(Index depth) override { return Result::Ok; }
323357
Result OnReturnCallExpr(Index sig_index) override { return Result::Ok; }
@@ -335,6 +369,18 @@ class BinaryReaderNop : public BinaryReaderDelegate {
335369
Address offset) override {
336370
return Result::Ok;
337371
}
372+
Result OnStructGetExpr(Opcode opcode,
373+
Index type_index,
374+
Index field_index) override {
375+
return Result::Ok;
376+
}
377+
Result OnStructNewExpr(Index type_index) override { return Result::Ok; }
378+
Result OnStructNewDefaultExpr(Index type_index) override {
379+
return Result::Ok;
380+
}
381+
Result OnStructSetExpr(Index type_index, Index field_index) override {
382+
return Result::Ok;
383+
}
338384
Result OnThrowExpr(Index depth) override { return Result::Ok; }
339385
Result OnThrowRefExpr() override { return Result::Ok; }
340386
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
@@ -242,6 +242,17 @@ class BinaryReaderDelegate {
242242
virtual Result OnOpcodeV128(v128 value) = 0;
243243
virtual Result OnOpcodeBlockSig(Type sig_type) = 0;
244244
virtual Result OnOpcodeType(Type type) = 0;
245+
virtual Result OnArrayCopyExpr(Index dst_type_index, Index src_type_index) = 0;
246+
virtual Result OnArrayFillExpr(Index type_index) = 0;
247+
virtual Result OnArrayGetExpr(Opcode opcode, Index type_index) = 0;
248+
virtual Result OnArrayInitDataExpr(Index type_index, Index data_index) = 0;
249+
virtual Result OnArrayInitElemExpr(Index type_index, Index elem_index) = 0;
250+
virtual Result OnArrayNewExpr(Index type_index) = 0;
251+
virtual Result OnArrayNewDataExpr(Index type_index, Index data_index) = 0;
252+
virtual Result OnArrayNewDefaultExpr(Index type_index) = 0;
253+
virtual Result OnArrayNewElemExpr(Index type_index, Index elem_index) = 0;
254+
virtual Result OnArrayNewFixedExpr(Index type_index, Index count) = 0;
255+
virtual Result OnArraySetExpr(Index type_index) = 0;
245256
virtual Result OnAtomicLoadExpr(Opcode opcode,
246257
Index memidx,
247258
Address alignment_log2,
@@ -271,6 +282,10 @@ class BinaryReaderDelegate {
271282
virtual Result OnBlockExpr(Type sig_type) = 0;
272283
virtual Result OnBrExpr(Index depth) = 0;
273284
virtual Result OnBrIfExpr(Index depth) = 0;
285+
virtual Result OnBrOnCastExpr(Opcode opcode,
286+
Index depth,
287+
Type type1,
288+
Type type2) = 0;
274289
virtual Result OnBrOnNonNullExpr(Index depth) = 0;
275290
virtual Result OnBrOnNullExpr(Index depth) = 0;
276291
virtual Result OnBrTableExpr(Index num_targets,
@@ -290,6 +305,7 @@ class BinaryReaderDelegate {
290305
virtual Result OnF32ConstExpr(uint32_t value_bits) = 0;
291306
virtual Result OnF64ConstExpr(uint64_t value_bits) = 0;
292307
virtual Result OnV128ConstExpr(v128 value_bits) = 0;
308+
virtual Result OnGCUnaryExpr(Opcode opcode) = 0;
293309
virtual Result OnGlobalGetExpr(Index global_index) = 0;
294310
virtual Result OnGlobalSetExpr(Index global_index) = 0;
295311
virtual Result OnI32ConstExpr(uint32_t value) = 0;
@@ -318,9 +334,11 @@ class BinaryReaderDelegate {
318334
virtual Result OnTableSizeExpr(Index table_index) = 0;
319335
virtual Result OnTableFillExpr(Index table_index) = 0;
320336
virtual Result OnRefAsNonNullExpr() = 0;
337+
virtual Result OnRefCastExpr(Type type) = 0;
321338
virtual Result OnRefFuncExpr(Index func_index) = 0;
322339
virtual Result OnRefNullExpr(Type type) = 0;
323340
virtual Result OnRefIsNullExpr() = 0;
341+
virtual Result OnRefTestExpr(Type type) = 0;
324342
virtual Result OnNopExpr() = 0;
325343
virtual Result OnRethrowExpr(Index depth) = 0;
326344
virtual Result OnReturnExpr() = 0;
@@ -333,6 +351,12 @@ class BinaryReaderDelegate {
333351
Index memidx,
334352
Address alignment_log2,
335353
Address offset) = 0;
354+
virtual Result OnStructGetExpr(Opcode opcode,
355+
Index type_index,
356+
Index field_index) = 0;
357+
virtual Result OnStructNewExpr(Index type_index) = 0;
358+
virtual Result OnStructNewDefaultExpr(Index type_index) = 0;
359+
virtual Result OnStructSetExpr(Index type_index, Index field_index) = 0;
336360
virtual Result OnThrowExpr(Index tag_index) = 0;
337361
virtual Result OnThrowRefExpr() = 0;
338362
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
@@ -73,6 +73,7 @@ class ExprVisitor::Delegate {
7373
virtual Result EndBlockExpr(BlockExpr*) = 0;
7474
virtual Result OnBrExpr(BrExpr*) = 0;
7575
virtual Result OnBrIfExpr(BrIfExpr*) = 0;
76+
virtual Result OnBrOnCastExpr(BrOnCastExpr*) = 0;
7677
virtual Result OnBrOnNonNullExpr(BrOnNonNullExpr*) = 0;
7778
virtual Result OnBrOnNullExpr(BrOnNullExpr*) = 0;
7879
virtual Result OnBrTableExpr(BrTableExpr*) = 0;
@@ -145,6 +146,24 @@ class ExprVisitor::Delegate {
145146
virtual Result OnSimdShuffleOpExpr(SimdShuffleOpExpr*) = 0;
146147
virtual Result OnLoadSplatExpr(LoadSplatExpr*) = 0;
147148
virtual Result OnLoadZeroExpr(LoadZeroExpr*) = 0;
149+
virtual Result OnArrayCopyExpr(ArrayCopyExpr*) = 0;
150+
virtual Result OnArrayFillExpr(ArrayFillExpr*) = 0;
151+
virtual Result OnArrayGetExpr(ArrayGetExpr*) = 0;
152+
virtual Result OnArrayInitDataExpr(ArrayInitDataExpr*) = 0;
153+
virtual Result OnArrayInitElemExpr(ArrayInitElemExpr*) = 0;
154+
virtual Result OnArrayNewExpr(ArrayNewExpr*) = 0;
155+
virtual Result OnArrayNewDataExpr(ArrayNewDataExpr*) = 0;
156+
virtual Result OnArrayNewDefaultExpr(ArrayNewDefaultExpr*) = 0;
157+
virtual Result OnArrayNewElemExpr(ArrayNewElemExpr*) = 0;
158+
virtual Result OnArrayNewFixedExpr(ArrayNewFixedExpr*) = 0;
159+
virtual Result OnArraySetExpr(ArraySetExpr*) = 0;
160+
virtual Result OnGCUnaryExpr(GCUnaryExpr*) = 0;
161+
virtual Result OnRefCastExpr(RefCastExpr*) = 0;
162+
virtual Result OnRefTestExpr(RefTestExpr*) = 0;
163+
virtual Result OnStructGetExpr(StructGetExpr*) = 0;
164+
virtual Result OnStructNewExpr(StructNewExpr*) = 0;
165+
virtual Result OnStructNewDefaultExpr(StructNewDefaultExpr*) = 0;
166+
virtual Result OnStructSetExpr(StructSetExpr*) = 0;
148167
};
149168

150169
class ExprVisitor::DelegateNop : public ExprVisitor::Delegate {
@@ -154,6 +173,7 @@ class ExprVisitor::DelegateNop : public ExprVisitor::Delegate {
154173
Result EndBlockExpr(BlockExpr*) override { return Result::Ok; }
155174
Result OnBrExpr(BrExpr*) override { return Result::Ok; }
156175
Result OnBrIfExpr(BrIfExpr*) override { return Result::Ok; }
176+
Result OnBrOnCastExpr(BrOnCastExpr*) override { return Result::Ok; };
157177
Result OnBrOnNonNullExpr(BrOnNonNullExpr*) override { return Result::Ok; };
158178
Result OnBrOnNullExpr(BrOnNullExpr*) override { return Result::Ok; };
159179
Result OnBrTableExpr(BrTableExpr*) override { return Result::Ok; }
@@ -230,6 +250,28 @@ class ExprVisitor::DelegateNop : public ExprVisitor::Delegate {
230250
Result OnSimdShuffleOpExpr(SimdShuffleOpExpr*) override { return Result::Ok; }
231251
Result OnLoadSplatExpr(LoadSplatExpr*) override { return Result::Ok; }
232252
Result OnLoadZeroExpr(LoadZeroExpr*) override { return Result::Ok; }
253+
Result OnArrayCopyExpr(ArrayCopyExpr*) override { return Result::Ok; }
254+
Result OnArrayFillExpr(ArrayFillExpr*) override { return Result::Ok; }
255+
Result OnArrayGetExpr(ArrayGetExpr*) override { return Result::Ok; }
256+
Result OnArrayInitDataExpr(ArrayInitDataExpr*) override { return Result::Ok; }
257+
Result OnArrayInitElemExpr(ArrayInitElemExpr*) override { return Result::Ok; }
258+
Result OnArrayNewExpr(ArrayNewExpr*) override { return Result::Ok; }
259+
Result OnArrayNewDataExpr(ArrayNewDataExpr*) override { return Result::Ok; }
260+
Result OnArrayNewDefaultExpr(ArrayNewDefaultExpr*) override {
261+
return Result::Ok;
262+
}
263+
Result OnArrayNewElemExpr(ArrayNewElemExpr*) override { return Result::Ok; }
264+
Result OnArrayNewFixedExpr(ArrayNewFixedExpr*) override { return Result::Ok; }
265+
Result OnArraySetExpr(ArraySetExpr*) override { return Result::Ok; }
266+
Result OnGCUnaryExpr(GCUnaryExpr*) override { return Result::Ok; }
267+
Result OnRefCastExpr(RefCastExpr*) override { return Result::Ok; }
268+
Result OnRefTestExpr(RefTestExpr*) override { return Result::Ok; }
269+
Result OnStructGetExpr(StructGetExpr*) override { return Result::Ok; }
270+
Result OnStructNewExpr(StructNewExpr*) override { return Result::Ok; }
271+
Result OnStructNewDefaultExpr(StructNewDefaultExpr*) override {
272+
return Result::Ok;
273+
}
274+
Result OnStructSetExpr(StructSetExpr*) override { return Result::Ok; }
233275
};
234276

235277
} // namespace wabt

0 commit comments

Comments
 (0)