From c78ebeb44ce078a165e3302b629432eeee6a656d Mon Sep 17 00:00:00 2001 From: David Rubin Date: Fri, 5 Jul 2024 23:00:55 -0700 Subject: [PATCH] riscv: implement `ptr_slice_ptr_ptr` just one step closer to allocation --- lib/std/builtin.zig | 1 + src/arch/riscv64/CodeGen.zig | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/std/builtin.zig b/lib/std/builtin.zig index a600f055df..86f8da6cd4 100644 --- a/lib/std/builtin.zig +++ b/lib/std/builtin.zig @@ -776,6 +776,7 @@ pub fn default_panic(msg: []const u8, error_return_trace: ?*StackTrace, ret_addr if (builtin.zig_backend == .stage2_riscv64) { std.debug.print("panic: {s}\n", .{msg}); + @breakpoint(); std.posix.exit(127); } diff --git a/src/arch/riscv64/CodeGen.zig b/src/arch/riscv64/CodeGen.zig index 56815f63b9..6ca4f37695 100644 --- a/src/arch/riscv64/CodeGen.zig +++ b/src/arch/riscv64/CodeGen.zig @@ -3433,8 +3433,13 @@ fn airPtrSliceLenPtr(func: *Func, inst: Air.Inst.Index) !void { fn airPtrSlicePtrPtr(func: *Func, inst: Air.Inst.Index) !void { const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op; - const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else return func.fail("TODO implement ptr_slice_ptr_ptr for {}", .{func.target.cpu.arch}); - return func.finishAir(inst, result, .{ ty_op.operand, .none, .none }); + + const opt_mcv = try func.resolveInst(ty_op.operand); + const dst_mcv = if (func.reuseOperand(inst, ty_op.operand, 0, opt_mcv)) + opt_mcv + else + try func.copyToNewRegister(inst, opt_mcv); + return func.finishAir(inst, dst_mcv, .{ ty_op.operand, .none, .none }); } fn airSliceElemVal(func: *Func, inst: Air.Inst.Index) !void {