authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-04-12 10:10:13+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-04-13 11:47:51+02:00
log059ed062bc8d98be338c294d5ef443b11e0a180b
treee30ca051d38f81ebcd45124130469af1c3841f86
parente05a51cb6264d073cc0d8d0d8c8f18f47084f170

x86_64: simplify isNull() when loading optional from memory


1 files changed, 19 insertions(+), 1 deletions(-)

src/arch/x86_64/CodeGen.zig+19-1
......@@ -6144,7 +6144,25 @@ fn isNull(self: *Self, inst: Air.Inst.Index, opt_ty: Type, opt_mcv: MCValue) !MC
61446144 const addr_reg_lock = self.register_manager.lockRegAssumeUnused(addr_reg);
61456145 defer self.register_manager.unlockReg(addr_reg_lock);
61466146
6147 try self.loadMemPtrIntoRegister(addr_reg, Type.usize, opt_mcv);
6147 switch (opt_mcv) {
6148 .memory => |addr| try self.genSetReg(Type.usize, addr_reg, .{ .immediate = addr }),
6149 .linker_load => |load_struct| {
6150 const atom_index = if (self.bin_file.cast(link.File.MachO)) |macho_file| blk: {
6151 const atom = try macho_file.getOrCreateAtomForDecl(self.mod_fn.owner_decl);
6152 break :blk macho_file.getAtom(atom).getSymbolIndex().?;
6153 } else if (self.bin_file.cast(link.File.Coff)) |coff_file| blk: {
6154 const atom = try coff_file.getOrCreateAtomForDecl(self.mod_fn.owner_decl);
6155 break :blk coff_file.getAtom(atom).getSymbolIndex().?;
6156 } else unreachable;
6157
6158 switch (load_struct.type) {
6159 .import => unreachable,
6160 .got => try self.asmMovLinker(addr_reg, atom_index, load_struct),
6161 .direct => try self.asmLeaLinker(addr_reg, atom_index, load_struct),
6162 }
6163 },
6164 else => unreachable,
6165 }
61486166
61496167 const some_abi_size = @intCast(u32, some_info.ty.abiSize(self.target.*));
61506168 try self.asmMemoryImmediate(.cmp, Memory.sib(