Skip to content

Commit 1e96166

Browse files
author
Zoltan Herczeg
committed
Implement GC opcodes
1 parent 21a32fa commit 1e96166

Some content is hidden

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

49 files changed

+5608
-1505
lines changed

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
@@ -237,6 +237,17 @@ class BinaryReaderDelegate {
237237
virtual Result OnOpcodeV128(v128 value) = 0;
238238
virtual Result OnOpcodeBlockSig(Type sig_type) = 0;
239239
virtual Result OnOpcodeType(Type type) = 0;
240+
virtual Result OnArrayCopyExpr(Index dst_type_index, Index src_type_index) = 0;
241+
virtual Result OnArrayFillExpr(Index type_index) = 0;
242+
virtual Result OnArrayGetExpr(Opcode opcode, Index type_index) = 0;
243+
virtual Result OnArrayInitDataExpr(Index type_index, Index data_index) = 0;
244+
virtual Result OnArrayInitElemExpr(Index type_index, Index elem_index) = 0;
245+
virtual Result OnArrayNewExpr(Index type_index) = 0;
246+
virtual Result OnArrayNewDataExpr(Index type_index, Index data_index) = 0;
247+
virtual Result OnArrayNewDefaultExpr(Index type_index) = 0;
248+
virtual Result OnArrayNewElemExpr(Index type_index, Index elem_index) = 0;
249+
virtual Result OnArrayNewFixedExpr(Index type_index, Index count) = 0;
250+
virtual Result OnArraySetExpr(Index type_index) = 0;
240251
virtual Result OnAtomicLoadExpr(Opcode opcode,
241252
Index memidx,
242253
Address alignment_log2,
@@ -266,6 +277,10 @@ class BinaryReaderDelegate {
266277
virtual Result OnBlockExpr(Type sig_type) = 0;
267278
virtual Result OnBrExpr(Index depth) = 0;
268279
virtual Result OnBrIfExpr(Index depth) = 0;
280+
virtual Result OnBrOnCastExpr(Opcode opcode,
281+
Index depth,
282+
Type type1,
283+
Type type2) = 0;
269284
virtual Result OnBrOnNonNullExpr(Index depth) = 0;
270285
virtual Result OnBrOnNullExpr(Index depth) = 0;
271286
virtual Result OnBrTableExpr(Index num_targets,
@@ -285,6 +300,7 @@ class BinaryReaderDelegate {
285300
virtual Result OnF32ConstExpr(uint32_t value_bits) = 0;
286301
virtual Result OnF64ConstExpr(uint64_t value_bits) = 0;
287302
virtual Result OnV128ConstExpr(v128 value_bits) = 0;
303+
virtual Result OnGCUnaryExpr(Opcode opcode) = 0;
288304
virtual Result OnGlobalGetExpr(Index global_index) = 0;
289305
virtual Result OnGlobalSetExpr(Index global_index) = 0;
290306
virtual Result OnI32ConstExpr(uint32_t value) = 0;
@@ -313,9 +329,11 @@ class BinaryReaderDelegate {
313329
virtual Result OnTableSizeExpr(Index table_index) = 0;
314330
virtual Result OnTableFillExpr(Index table_index) = 0;
315331
virtual Result OnRefAsNonNullExpr() = 0;
332+
virtual Result OnRefCastExpr(Type type) = 0;
316333
virtual Result OnRefFuncExpr(Index func_index) = 0;
317334
virtual Result OnRefNullExpr(Type type) = 0;
318335
virtual Result OnRefIsNullExpr() = 0;
336+
virtual Result OnRefTestExpr(Type type) = 0;
319337
virtual Result OnNopExpr() = 0;
320338
virtual Result OnRethrowExpr(Index depth) = 0;
321339
virtual Result OnReturnExpr() = 0;
@@ -328,6 +346,12 @@ class BinaryReaderDelegate {
328346
Index memidx,
329347
Address alignment_log2,
330348
Address offset) = 0;
349+
virtual Result OnStructGetExpr(Opcode opcode,
350+
Index type_index,
351+
Index field_index) = 0;
352+
virtual Result OnStructNewExpr(Index type_index) = 0;
353+
virtual Result OnStructNewDefaultExpr(Index type_index) = 0;
354+
virtual Result OnStructSetExpr(Index type_index, Index field_index) = 0;
331355
virtual Result OnThrowExpr(Index tag_index) = 0;
332356
virtual Result OnThrowRefExpr() = 0;
333357
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)