authorgravatar for koachan@protonmail.comKoakuma <koachan@protonmail.com> 2022-10-27 20:03:26+07:00
committergravatar for koachan@protonmail.comKoakuma <koachan@protonmail.com> 2022-12-10 21:11:14+07:00
loga72362f3953d38a108ba1c4dc265e22fb11cf8f6
treead1a9b1611420cc94c84bf93a06eec75bba8a6fa
parent1b5b9eb365dc5f5d5f9387ab25e128fb507f91f3

stage2: sparc64: Implement airWrapErrUnionPayload


1 files changed, 8 insertions(+), 1 deletions(-)

src/arch/sparc64/CodeGen.zig+8-1
...@@ -683,7 +683,7 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void {...@@ -683,7 +683,7 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void {
683 .save_err_return_trace_index=> @panic("TODO try self.airSaveErrReturnTraceIndex(inst)"),683 .save_err_return_trace_index=> @panic("TODO try self.airSaveErrReturnTraceIndex(inst)"),
684684
685 .wrap_optional => try self.airWrapOptional(inst),685 .wrap_optional => try self.airWrapOptional(inst),
686 .wrap_errunion_payload => @panic("TODO try self.airWrapErrUnionPayload(inst)"),686 .wrap_errunion_payload => try self.airWrapErrUnionPayload(inst),
687 .wrap_errunion_err => try self.airWrapErrUnionErr(inst),687 .wrap_errunion_err => try self.airWrapErrUnionErr(inst),
688688
689 .add_optimized,689 .add_optimized,
...@@ -2493,6 +2493,13 @@ fn airWrapErrUnionErr(self: *Self, inst: Air.Inst.Index) !void {...@@ -2493,6 +2493,13 @@ fn airWrapErrUnionErr(self: *Self, inst: Air.Inst.Index) !void {
2493 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });2493 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
2494}2494}
24952495
2496/// T to E!T
2497fn airWrapErrUnionPayload(self: *Self, inst: Air.Inst.Index) !void {
2498 const ty_op = self.air.instructions.items(.data)[inst].ty_op;
2499 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement wrap errunion payload for {}", .{self.target.cpu.arch});
2500 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
2501}
2502
2496fn airWrapOptional(self: *Self, inst: Air.Inst.Index) !void {2503fn airWrapOptional(self: *Self, inst: Air.Inst.Index) !void {
2497 const ty_op = self.air.instructions.items(.data)[inst].ty_op;2504 const ty_op = self.air.instructions.items(.data)[inst].ty_op;
2498 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else result: {2505 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else result: {