| ... | ... | @@ -6085,16 +6085,48 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 6085 | 6085 | .direct_load, |
| 6086 | 6086 | .got_load, |
| 6087 | 6087 | => { |
| 6088 | | try self.loadMemPtrIntoRegister(reg, Type.usize, mcv); |
| 6089 | | _ = try self.addInst(.{ |
| 6090 | | .tag = .mov, |
| 6091 | | .ops = Mir.Inst.Ops.encode(.{ |
| 6092 | | .reg1 = registerAlias(reg, abi_size), |
| 6093 | | .reg2 = reg.to64(), |
| 6094 | | .flags = 0b01, |
| 6095 | | }), |
| 6096 | | .data = .{ .imm = 0 }, |
| 6097 | | }); |
| 6088 | switch (ty.zigTypeTag()) { |
| 6089 | .Float => { |
| 6090 | const base_reg = try self.register_manager.allocReg(null, .{ .selector_mask = gp }); |
| 6091 | try self.loadMemPtrIntoRegister(base_reg, Type.usize, mcv); |
| 6092 | |
| 6093 | if (self.intrinsicsAllowed(ty)) { |
| 6094 | const tag: Mir.Inst.Tag = switch (ty.tag()) { |
| 6095 | .f32 => .mov_f32_avx, |
| 6096 | .f64 => .mov_f64_avx, |
| 6097 | else => return self.fail("TODO genSetReg from memory for {}", .{ty.fmtDebug()}), |
| 6098 | }; |
| 6099 | |
| 6100 | _ = try self.addInst(.{ |
| 6101 | .tag = tag, |
| 6102 | .ops = Mir.Inst.Ops.encode(.{ |
| 6103 | .reg1 = reg.to128(), |
| 6104 | .reg2 = switch (ty.tag()) { |
| 6105 | .f32 => base_reg.to32(), |
| 6106 | .f64 => base_reg.to64(), |
| 6107 | else => unreachable, |
| 6108 | }, |
| 6109 | }), |
| 6110 | .data = .{ .imm = 0 }, |
| 6111 | }); |
| 6112 | return; |
| 6113 | } |
| 6114 | |
| 6115 | return self.fail("TODO genSetReg from memory for float with no intrinsics", .{}); |
| 6116 | }, |
| 6117 | else => { |
| 6118 | try self.loadMemPtrIntoRegister(reg, Type.usize, mcv); |
| 6119 | _ = try self.addInst(.{ |
| 6120 | .tag = .mov, |
| 6121 | .ops = Mir.Inst.Ops.encode(.{ |
| 6122 | .reg1 = registerAlias(reg, abi_size), |
| 6123 | .reg2 = reg.to64(), |
| 6124 | .flags = 0b01, |
| 6125 | }), |
| 6126 | .data = .{ .imm = 0 }, |
| 6127 | }); |
| 6128 | }, |
| 6129 | } |
| 6098 | 6130 | }, |
| 6099 | 6131 | .memory => |x| switch (ty.zigTypeTag()) { |
| 6100 | 6132 | .Float => { |