authorgravatar for koachan@protonmail.comKoakuma <koachan@protonmail.com> 2022-10-14 20:25:09+07:00
committergravatar for koachan@protonmail.comKoakuma <koachan@protonmail.com> 2022-12-10 21:11:14+07:00
log4ddedb388560afe2458fff6e1cca26ba6e70add2
tree7d192f6dc2ed2bc18ef5ef2994d7ced653e735c9
parentf020734347d03c2f1e2083272cc86a8062c27d23

stage2: sparc64: Implement get/setUnionTag


1 files changed, 14 insertions(+), 2 deletions(-)

src/arch/sparc64/CodeGen.zig+14-2
...@@ -601,8 +601,8 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void {...@@ -601,8 +601,8 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void {
601 .atomic_load => @panic("TODO try self.airAtomicLoad(inst)"),601 .atomic_load => @panic("TODO try self.airAtomicLoad(inst)"),
602 .memcpy => @panic("TODO try self.airMemcpy(inst)"),602 .memcpy => @panic("TODO try self.airMemcpy(inst)"),
603 .memset => try self.airMemset(inst),603 .memset => try self.airMemset(inst),
604 .set_union_tag => @panic("TODO try self.airSetUnionTag(inst)"),604 .set_union_tag => try self.airSetUnionTag(inst),
605 .get_union_tag => @panic("TODO try self.airGetUnionTag(inst)"),605 .get_union_tag => try self.airGetUnionTag(inst),
606 .clz => try self.airClz(inst),606 .clz => try self.airClz(inst),
607 .ctz => try self.airCtz(inst),607 .ctz => try self.airCtz(inst),
608 .popcount => try self.airPopcount(inst),608 .popcount => try self.airPopcount(inst),
...@@ -1556,6 +1556,12 @@ fn airFloatToInt(self: *Self, inst: Air.Inst.Index) !void {...@@ -1556,6 +1556,12 @@ fn airFloatToInt(self: *Self, inst: Air.Inst.Index) !void {
1556 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });1556 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
1557}1557}
15581558
1559fn airGetUnionTag(self: *Self, inst: Air.Inst.Index) !void {
1560 const ty_op = self.air.instructions.items(.data)[inst].ty_op;
1561 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airGetUnionTag for {}", .{self.target.cpu.arch});
1562 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
1563}
1564
1559fn airIntCast(self: *Self, inst: Air.Inst.Index) !void {1565fn airIntCast(self: *Self, inst: Air.Inst.Index) !void {
1560 const ty_op = self.air.instructions.items(.data)[inst].ty_op;1566 const ty_op = self.air.instructions.items(.data)[inst].ty_op;
1561 if (self.liveness.isUnused(inst))1567 if (self.liveness.isUnused(inst))
...@@ -2071,6 +2077,12 @@ fn airRetPtr(self: *Self, inst: Air.Inst.Index) !void {...@@ -2071,6 +2077,12 @@ fn airRetPtr(self: *Self, inst: Air.Inst.Index) !void {
2071 return self.finishAir(inst, .{ .ptr_stack_offset = stack_offset }, .{ .none, .none, .none });2077 return self.finishAir(inst, .{ .ptr_stack_offset = stack_offset }, .{ .none, .none, .none });
2072}2078}
20732079
2080fn airSetUnionTag(self: *Self, inst: Air.Inst.Index) !void {
2081 const bin_op = self.air.instructions.items(.data)[inst].bin_op;
2082 _ = bin_op;
2083 return self.fail("TODO implement airSetUnionTag for {}", .{self.target.cpu.arch});
2084}
2085
2074fn airShlSat(self: *Self, inst: Air.Inst.Index) !void {2086fn airShlSat(self: *Self, inst: Air.Inst.Index) !void {
2075 const bin_op = self.air.instructions.items(.data)[inst].bin_op;2087 const bin_op = self.air.instructions.items(.data)[inst].bin_op;
2076 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement shl_sat for {}", .{self.target.cpu.arch});2088 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement shl_sat for {}", .{self.target.cpu.arch});