authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-05-06 16:05:52-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-05-08 07:36:20-04:00
log4b75352c78731f76cfeac0b5c78c03f232022096
treeb418175687ec47093e28f3c788e5f91d3f682fb1
parent5d4288c5f6c69bdd4cbd9b3580016828e38f087d

x86_64: implement packed floating point fields


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

src/arch/x86_64/CodeGen.zig+10-2
......@@ -4922,7 +4922,14 @@ fn airStructFieldVal(self: *Self, inst: Air.Inst.Index) !void {
49224922 }
49234923
49244924 if (field_extra_bits > 0) try self.truncateRegister(field_ty, dst_reg);
4925 break :result .{ .register = dst_reg };
4925
4926 const dst_mcv = MCValue{ .register = dst_reg };
4927 const dst_rc = regClassForType(field_ty);
4928 if (dst_rc.eql(gp)) break :result dst_mcv;
4929
4930 const result_reg = try self.register_manager.allocReg(inst, dst_rc);
4931 try self.genSetReg(result_reg, field_ty, dst_mcv);
4932 break :result .{ .register = result_reg };
49264933 },
49274934 .register => |reg| {
49284935 const reg_lock = self.register_manager.lockRegAssumeUnused(reg);
......@@ -7896,7 +7903,8 @@ fn genCopy(self: *Self, ty: Type, dst_mcv: MCValue, src_mcv: MCValue) InnerError
78967903
78977904fn genSetReg(self: *Self, dst_reg: Register, ty: Type, src_mcv: MCValue) InnerError!void {
78987905 const abi_size = @intCast(u32, ty.abiSize(self.target.*));
7899 if (abi_size > 8) return self.fail("genSetReg called with a value larger than one register", .{});
7906 if (abi_size * 8 > dst_reg.bitSize())
7907 return self.fail("genSetReg called with a value larger than dst_reg", .{});
79007908 switch (src_mcv) {
79017909 .none,
79027910 .unreach,