diff --git a/src/arch/riscv64/CodeGen.zig b/src/arch/riscv64/CodeGen.zig index 1ec0d0ab6e..0cd2d2759d 100644 --- a/src/arch/riscv64/CodeGen.zig +++ b/src/arch/riscv64/CodeGen.zig @@ -830,7 +830,7 @@ fn splitType(self: *Self, ty: Type) ![2]Type { else => break, }; } else if (parts[0].abiSize(mod) + parts[1].abiSize(mod) == ty.abiSize(mod)) return parts; - return std.debug.panic("TODO implement splitType for {}", .{ty.fmt(mod)}); + return self.fail("TODO implement splitType for {}", .{ty.fmt(mod)}); } fn symbolIndex(self: *Self) !u32 { @@ -3152,11 +3152,6 @@ fn genCopy(self: *Self, ty: Type, dst_mcv: MCValue, src_mcv: MCValue) !void { }; defer if (src_info) |info| self.register_manager.unlockReg(info.addr_lock); - switch (ty.zigTypeTag(mod)) { - .Optional => return, - else => {}, - } - var part_disp: i32 = 0; for (dst_regs, try self.splitType(ty), 0..) |dst_reg, dst_ty, part_i| { try self.genSetReg(dst_ty, dst_reg, switch (src_mcv) { @@ -3554,8 +3549,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, src_mcv: MCValue) InnerError! }, }, }); - - unreachable; }, .air_ref => |ref| try self.genSetReg(ty, reg, try self.resolveInst(ref)), .indirect => |reg_off| { diff --git a/src/arch/riscv64/abi.zig b/src/arch/riscv64/abi.zig index e586d297ae..90aef62f09 100644 --- a/src/arch/riscv64/abi.zig +++ b/src/arch/riscv64/abi.zig @@ -94,10 +94,6 @@ pub fn classifyType(ty: Type, mod: *Module) Class { /// There are a maximum of 8 possible return slots. Returned values are in /// the beginning of the array; unused slots are filled with .none. pub fn classifySystemV(ty: Type, mod: *Module) [8]Class { - const memory_class = [_]Class{ - .memory, .none, .none, .none, - .none, .none, .none, .none, - }; var result = [1]Class{.none} ** 8; switch (ty.zigTypeTag(mod)) { .Pointer => switch (ty.ptrSize(mod)) { @@ -113,10 +109,11 @@ pub fn classifySystemV(ty: Type, mod: *Module) [8]Class { }, .Optional => { if (ty.isPtrLikeOptional(mod)) { - result[0] = .integer; return result; } - return memory_class; + result[0] = .integer; + result[1] = .integer; + return result; }, else => return result, }