authorgravatar for koachan@protonmail.comKoakuma <koachan@protonmail.com> 2022-07-08 19:56:34+07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-09-14 16:57:31-07:00
logf01867f78e1c483dc2b5a836df361bf5092ab4ce
tree47dbed141fd9101b35711e0b127632b06f02eea1
parentb6307144c011fab2114ccd33a7db91171eb501dd

stage2: sparc64: Implement airWrapOptional


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

src/arch/sparc64/CodeGen.zig+15-1
......@@ -677,7 +677,7 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void {
677677 .err_return_trace => @panic("TODO try self.airErrReturnTrace(inst)"),
678678 .set_err_return_trace => @panic("TODO try self.airSetErrReturnTrace(inst)"),
679679
680 .wrap_optional => @panic("TODO try self.airWrapOptional(inst)"),
680 .wrap_optional => try self.airWrapOptional(inst),
681681 .wrap_errunion_payload => @panic("TODO try self.airWrapErrUnionPayload(inst)"),
682682 .wrap_errunion_err => try self.airWrapErrUnionErr(inst),
683683
......@@ -2175,6 +2175,20 @@ fn airWrapErrUnionErr(self: *Self, inst: Air.Inst.Index) !void {
21752175 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
21762176}
21772177
2178fn airWrapOptional(self: *Self, inst: Air.Inst.Index) !void {
2179 const ty_op = self.air.instructions.items(.data)[inst].ty_op;
2180 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else result: {
2181 const optional_ty = self.air.typeOfIndex(inst);
2182
2183 // Optional with a zero-bit payload type is just a boolean true
2184 if (optional_ty.abiSize(self.target.*) == 1)
2185 break :result MCValue{ .immediate = 1 };
2186
2187 return self.fail("TODO implement wrap optional for {}", .{self.target.cpu.arch});
2188 };
2189 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
2190}
2191
21782192// Common helper functions
21792193
21802194/// Adds a Type to the .debug_info at the current position. The bytes will be populated later,