authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-10-19 19:20:31-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-10-19 19:20:31-07:00
log2192d404d58a3e95d8fbb26e7fd73a95756172a6
tree37c9fa5177924bb955b9a7b50fa81c7ef6bf4852
parente4c437f23baecf9d170f3f058cde78f34dedd5d0

stage2: wasm: implement struct_field_val


1 files changed, 10 insertions(+), 0 deletions(-)

src/codegen/wasm.zig+10
......@@ -866,6 +866,7 @@ pub const Context = struct {
866866 .struct_field_ptr_index_1 => self.airStructFieldPtrIndex(inst, 1),
867867 .struct_field_ptr_index_2 => self.airStructFieldPtrIndex(inst, 2),
868868 .struct_field_ptr_index_3 => self.airStructFieldPtrIndex(inst, 3),
869 .struct_field_val => self.airStructFieldVal(inst),
869870 .switch_br => self.airSwitchBr(inst),
870871 .unreach => self.airUnreachable(inst),
871872 .wrap_optional => self.airWrapOptional(inst),
......@@ -1456,6 +1457,15 @@ pub const Context = struct {
14561457 return WValue{ .local = struct_ptr.multi_value.index + index };
14571458 }
14581459
1460 fn airStructFieldVal(self: *Context, inst: Air.Inst.Index) InnerError!WValue {
1461 if (self.liveness.isUnused(inst)) return WValue.none;
1462
1463 const ty_pl = self.air.instructions.items(.data)[inst].ty_pl;
1464 const extra = self.air.extraData(Air.StructField, ty_pl.payload).data;
1465 const struct_multivalue = self.resolveInst(extra.struct_operand).multi_value;
1466 return WValue{ .local = struct_multivalue.index + extra.field_index };
1467 }
1468
14591469 fn airSwitchBr(self: *Context, inst: Air.Inst.Index) InnerError!WValue {
14601470 // result type is always 'noreturn'
14611471 const blocktype = wasm.block_empty;