Commit ba53b14028
Changed files (16)
lib
std
src
lib/std/heap/debug_allocator.zig
@@ -212,8 +212,8 @@ pub fn DebugAllocator(comptime config: Config) type {
DummyMutex{};
const DummyMutex = struct {
- inline fn lock(_: *DummyMutex) void {}
- inline fn unlock(_: *DummyMutex) void {}
+ inline fn lock(_: DummyMutex) void {}
+ inline fn unlock(_: DummyMutex) void {}
};
const stack_n = config.stack_trace_frames;
src/arch/riscv64/CodeGen.zig
@@ -3603,9 +3603,7 @@ fn airRuntimeNavPtr(func: *Func, inst: Air.Inst.Index) !void {
const tlv_sym_index = if (func.bin_file.cast(.elf)) |elf_file| sym: {
const zo = elf_file.zigObjectPtr().?;
if (nav.getExtern(ip)) |e| {
- const sym = try elf_file.getGlobalSymbol(nav.name.toSlice(ip), e.lib_name.toSlice(ip));
- zo.symbol(sym).flags.is_extern_ptr = true;
- break :sym sym;
+ break :sym try elf_file.getGlobalSymbol(nav.name.toSlice(ip), e.lib_name.toSlice(ip));
}
break :sym try zo.getOrCreateMetadataForNav(zcu, ty_nav.nav);
} else return func.fail("TODO runtime_nav_ptr on {}", .{func.bin_file.tag});
src/arch/riscv64/Emit.zig
@@ -50,8 +50,8 @@ pub fn emitMir(emit: *Emit) Error!void {
const atom_ptr = zo.symbol(symbol.atom_index).atom(elf_file).?;
const sym = zo.symbol(symbol.sym_index);
- if (sym.flags.is_extern_ptr and emit.lower.pic) {
- return emit.fail("emit GOT relocation for symbol '{s}'", .{sym.name(elf_file)});
+ if (emit.lower.pic) {
+ return emit.fail("know when to emit GOT relocation for symbol '{s}'", .{sym.name(elf_file)});
}
const hi_r_type: u32 = @intFromEnum(std.elf.R_RISCV.HI20);
src/arch/x86_64/bits.zig
@@ -4,6 +4,8 @@ const expect = std.testing.expect;
const Allocator = std.mem.Allocator;
const ArrayList = std.ArrayList;
+const InternPool = @import("../../InternPool.zig");
+const link = @import("../../link.zig");
const Mir = @import("Mir.zig");
/// EFLAGS condition codes
@@ -750,20 +752,22 @@ pub const FrameAddr = struct { index: FrameIndex, off: i32 = 0 };
pub const RegisterOffset = struct { reg: Register, off: i32 = 0 };
-pub const SymbolOffset = struct { sym_index: u32, off: i32 = 0 };
+pub const NavOffset = struct { index: InternPool.Nav.Index, off: i32 = 0 };
pub const Memory = struct {
base: Base = .none,
mod: Mod = .{ .rm = .{} },
- pub const Base = union(enum(u3)) {
+ pub const Base = union(enum(u4)) {
none,
reg: Register,
frame: FrameIndex,
table,
- reloc: u32,
- pcrel: u32,
rip_inst: Mir.Inst.Index,
+ nav: InternPool.Nav.Index,
+ uav: InternPool.Key.Ptr.BaseAddr.Uav,
+ lazy_sym: link.File.LazySymbol,
+ extern_func: Mir.NullTerminatedString,
pub const Tag = @typeInfo(Base).@"union".tag_type.?;
};
@@ -899,7 +903,10 @@ pub const Memory = struct {
pub const Immediate = union(enum) {
signed: i32,
unsigned: u64,
- reloc: SymbolOffset,
+ nav: NavOffset,
+ uav: InternPool.Key.Ptr.BaseAddr.Uav,
+ lazy_sym: link.File.LazySymbol,
+ extern_func: Mir.NullTerminatedString,
pub fn u(x: u64) Immediate {
return .{ .unsigned = x };
@@ -909,10 +916,6 @@ pub const Immediate = union(enum) {
return .{ .signed = x };
}
- pub fn rel(sym_off: SymbolOffset) Immediate {
- return .{ .reloc = sym_off };
- }
-
pub fn format(
imm: Immediate,
comptime _: []const u8,
@@ -921,7 +924,10 @@ pub const Immediate = union(enum) {
) @TypeOf(writer).Error!void {
switch (imm) {
inline else => |int| try writer.print("{d}", .{int}),
- .reloc => |sym_off| try writer.print("Symbol({[sym_index]d}) + {[off]d}", sym_off),
+ .nav => |nav_off| try writer.print("Nav({d}) + {d}", .{ @intFromEnum(nav_off.nav), nav_off.off }),
+ .uav => |uav| try writer.print("Uav({d})", .{@intFromEnum(uav.val)}),
+ .lazy_sym => |lazy_sym| try writer.print("LazySym({s}, {d})", .{ @tagName(lazy_sym.kind), @intFromEnum(lazy_sym.ty) }),
+ .extern_func => |extern_func| try writer.print("ExternFunc({d})", .{@intFromEnum(extern_func)}),
}
}
};
src/arch/x86_64/CodeGen.zig
@@ -124,9 +124,11 @@ gpa: Allocator,
pt: Zcu.PerThread,
air: Air,
liveness: Air.Liveness,
-bin_file: *link.File,
target: *const std.Target,
-owner: Owner,
+owner: union(enum) {
+ nav_index: InternPool.Nav.Index,
+ lazy_sym: link.File.LazySymbol,
+},
inline_func: InternPool.Index,
mod: *Module,
args: []MCValue,
@@ -150,8 +152,14 @@ eflags_inst: ?Air.Inst.Index = null,
mir_instructions: std.MultiArrayList(Mir.Inst) = .empty,
/// MIR extra data
mir_extra: std.ArrayListUnmanaged(u32) = .empty,
-mir_local_name_bytes: std.ArrayListUnmanaged(u8) = .empty,
-mir_local_types: std.ArrayListUnmanaged(InternPool.Index) = .empty,
+mir_string_bytes: std.ArrayListUnmanaged(u8) = .empty,
+mir_strings: std.HashMapUnmanaged(
+ u32,
+ void,
+ std.hash_map.StringIndexContext,
+ std.hash_map.default_max_load_percentage,
+) = .empty,
+mir_locals: std.ArrayListUnmanaged(Mir.Local) = .empty,
mir_table: std.ArrayListUnmanaged(Mir.Inst.Index) = .empty,
/// The value is an offset into the `Function` `code` from the beginning.
@@ -194,41 +202,6 @@ loop_switches: std.AutoHashMapUnmanaged(Air.Inst.Index, struct {
next_temp_index: Temp.Index = @enumFromInt(0),
temp_type: [Temp.Index.max]Type = undefined,
-const Owner = union(enum) {
- nav_index: InternPool.Nav.Index,
- lazy_sym: link.File.LazySymbol,
-
- fn getSymbolIndex(owner: Owner, ctx: *CodeGen) !u32 {
- const pt = ctx.pt;
- switch (owner) {
- .nav_index => |nav_index| if (ctx.bin_file.cast(.elf)) |elf_file| {
- return elf_file.zigObjectPtr().?.getOrCreateMetadataForNav(pt.zcu, nav_index);
- } else if (ctx.bin_file.cast(.macho)) |macho_file| {
- return macho_file.getZigObject().?.getOrCreateMetadataForNav(macho_file, nav_index);
- } else if (ctx.bin_file.cast(.coff)) |coff_file| {
- const atom = try coff_file.getOrCreateAtomForNav(nav_index);
- return coff_file.getAtom(atom).getSymbolIndex().?;
- } else if (ctx.bin_file.cast(.plan9)) |p9_file| {
- return p9_file.seeNav(pt, nav_index);
- } else unreachable,
- .lazy_sym => |lazy_sym| if (ctx.bin_file.cast(.elf)) |elf_file| {
- return elf_file.zigObjectPtr().?.getOrCreateMetadataForLazySymbol(elf_file, pt, lazy_sym) catch |err|
- ctx.fail("{s} creating lazy symbol", .{@errorName(err)});
- } else if (ctx.bin_file.cast(.macho)) |macho_file| {
- return macho_file.getZigObject().?.getOrCreateMetadataForLazySymbol(macho_file, pt, lazy_sym) catch |err|
- ctx.fail("{s} creating lazy symbol", .{@errorName(err)});
- } else if (ctx.bin_file.cast(.coff)) |coff_file| {
- const atom = coff_file.getOrCreateAtomForLazySymbol(pt, lazy_sym) catch |err|
- return ctx.fail("{s} creating lazy symbol", .{@errorName(err)});
- return coff_file.getAtom(atom).getSymbolIndex().?;
- } else if (ctx.bin_file.cast(.plan9)) |p9_file| {
- return p9_file.getOrCreateAtomForLazySymbol(pt, lazy_sym) catch |err|
- return ctx.fail("{s} creating lazy symbol", .{@errorName(err)});
- } else unreachable,
- }
- }
-};
-
const MaskInfo = packed struct {
kind: enum(u1) { sign, all },
inverted: bool = false,
@@ -269,37 +242,22 @@ pub const MCValue = union(enum) {
/// The value is in memory at a hard-coded address.
/// If the type is a pointer, it means the pointer address is stored at this memory location.
memory: u64,
- /// The value is in memory at an address not-yet-allocated by the linker.
- /// This traditionally corresponds to a relocation emitted in a relocatable object file.
- load_symbol: bits.SymbolOffset,
- /// The address of the memory location not-yet-allocated by the linker.
- lea_symbol: bits.SymbolOffset,
- /// The value is in memory at an address not-yet-allocated by the linker.
- /// This must use a non-got pc-relative relocation.
- load_pcrel: bits.SymbolOffset,
- /// The address of the memory location not-yet-allocated by the linker.
- /// This must use a non-got pc-relative relocation.
- lea_pcrel: bits.SymbolOffset,
/// The value is in memory at a constant offset from the address in a register.
indirect: bits.RegisterOffset,
- /// The value is in memory.
- /// Payload is a symbol index.
- load_direct: u32,
- /// The value is a pointer to a value in memory.
- /// Payload is a symbol index.
- lea_direct: u32,
- /// The value is in memory referenced indirectly via GOT.
- /// Payload is a symbol index.
- load_got: u32,
- /// The value is a pointer to a value referenced indirectly via GOT.
- /// Payload is a symbol index.
- lea_got: u32,
/// The value stored at an offset from a frame index
/// Payload is a frame address.
load_frame: bits.FrameAddr,
/// The address of an offset from a frame index
/// Payload is a frame address.
lea_frame: bits.FrameAddr,
+ load_nav: InternPool.Nav.Index,
+ lea_nav: InternPool.Nav.Index,
+ load_uav: InternPool.Key.Ptr.BaseAddr.Uav,
+ lea_uav: InternPool.Key.Ptr.BaseAddr.Uav,
+ load_lazy_sym: link.File.LazySymbol,
+ lea_lazy_sym: link.File.LazySymbol,
+ load_extern_func: Mir.NullTerminatedString,
+ lea_extern_func: Mir.NullTerminatedString,
/// Supports integer_per_element abi
elementwise_args: packed struct { regs: u3, frame_off: i29, frame_index: FrameIndex },
/// This indicates that we have already allocated a frame index for this instruction,
@@ -319,11 +277,14 @@ pub const MCValue = union(enum) {
.register_mask,
.eflags,
.register_overflow,
- .lea_symbol,
- .lea_pcrel,
- .lea_direct,
- .lea_got,
.lea_frame,
+ .lea_nav,
+ .load_uav,
+ .lea_uav,
+ .load_lazy_sym,
+ .lea_lazy_sym,
+ .lea_extern_func,
+ .load_extern_func,
.elementwise_args,
.reserved_frame,
.air_ref,
@@ -333,11 +294,8 @@ pub const MCValue = union(enum) {
.register_triple,
.register_quadruple,
.memory,
- .load_symbol,
- .load_pcrel,
- .load_got,
- .load_direct,
.indirect,
+ .load_nav,
=> true,
.load_frame => |frame_addr| !frame_addr.index.isNamed(),
};
@@ -353,7 +311,14 @@ pub const MCValue = union(enum) {
fn isMemory(mcv: MCValue) bool {
return switch (mcv) {
- .memory, .indirect, .load_frame, .load_symbol => true,
+ .memory,
+ .indirect,
+ .load_frame,
+ .load_nav,
+ .load_uav,
+ .load_lazy_sym,
+ .load_extern_func,
+ => true,
else => false,
};
}
@@ -423,7 +388,7 @@ pub const MCValue = union(enum) {
fn address(mcv: MCValue) MCValue {
return switch (mcv) {
- .none,
+ .none => .none,
.unreach,
.dead,
.undef,
@@ -436,11 +401,11 @@ pub const MCValue = union(enum) {
.register_offset,
.register_overflow,
.register_mask,
- .lea_symbol,
- .lea_pcrel,
- .lea_direct,
- .lea_got,
.lea_frame,
+ .lea_nav,
+ .lea_uav,
+ .lea_lazy_sym,
+ .lea_extern_func,
.elementwise_args,
.reserved_frame,
.air_ref,
@@ -450,17 +415,17 @@ pub const MCValue = union(enum) {
0 => .{ .register = reg_off.reg },
else => .{ .register_offset = reg_off },
},
- .load_direct => |sym_index| .{ .lea_direct = sym_index },
- .load_got => |sym_index| .{ .lea_got = sym_index },
.load_frame => |frame_addr| .{ .lea_frame = frame_addr },
- .load_symbol => |sym_off| .{ .lea_symbol = sym_off },
- .load_pcrel => |sym_off| .{ .lea_pcrel = sym_off },
+ .load_nav => |nav| .{ .lea_nav = nav },
+ .load_uav => |uav| .{ .lea_uav = uav },
+ .load_lazy_sym => |lazy_sym| .{ .lea_lazy_sym = lazy_sym },
+ .load_extern_func => |extern_func| .{ .lea_extern_func = extern_func },
};
}
fn deref(mcv: MCValue) MCValue {
return switch (mcv) {
- .none,
+ .none => .none,
.unreach,
.dead,
.undef,
@@ -472,11 +437,11 @@ pub const MCValue = union(enum) {
.register_mask,
.memory,
.indirect,
- .load_direct,
- .load_got,
.load_frame,
- .load_symbol,
- .load_pcrel,
+ .load_nav,
+ .load_uav,
+ .load_lazy_sym,
+ .load_extern_func,
.elementwise_args,
.reserved_frame,
.air_ref,
@@ -484,17 +449,17 @@ pub const MCValue = union(enum) {
.immediate => |addr| .{ .memory = addr },
.register => |reg| .{ .indirect = .{ .reg = reg } },
.register_offset => |reg_off| .{ .indirect = reg_off },
- .lea_direct => |sym_index| .{ .load_direct = sym_index },
- .lea_got => |sym_index| .{ .load_got = sym_index },
.lea_frame => |frame_addr| .{ .load_frame = frame_addr },
- .lea_symbol => |sym_index| .{ .load_symbol = sym_index },
- .lea_pcrel => |sym_index| .{ .load_pcrel = sym_index },
+ .lea_nav => |nav| .{ .load_nav = nav },
+ .lea_uav => |uav| .{ .load_uav = uav },
+ .lea_lazy_sym => |lazy_sym| .{ .load_lazy_sym = lazy_sym },
+ .lea_extern_func => |extern_func| .{ .load_extern_func = extern_func },
};
}
fn offset(mcv: MCValue, off: i32) MCValue {
return switch (mcv) {
- .none,
+ .none => .none,
.unreach,
.dead,
.undef,
@@ -510,15 +475,15 @@ pub const MCValue = union(enum) {
.register_mask,
.memory,
.indirect,
- .load_direct,
- .lea_direct,
- .load_got,
- .lea_got,
.load_frame,
- .load_symbol,
- .lea_symbol,
- .load_pcrel,
- .lea_pcrel,
+ .load_nav,
+ .lea_nav,
+ .load_uav,
+ .lea_uav,
+ .load_lazy_sym,
+ .lea_lazy_sym,
+ .load_extern_func,
+ .lea_extern_func,
=> switch (off) {
0 => mcv,
else => unreachable, // not offsettable
@@ -536,7 +501,7 @@ pub const MCValue = union(enum) {
fn mem(mcv: MCValue, function: *CodeGen, mod_rm: Memory.Mod.Rm) !Memory {
return switch (mcv) {
- .none,
+ .none => .{ .mod = .{ .rm = mod_rm } },
.unreach,
.dead,
.undef,
@@ -549,15 +514,13 @@ pub const MCValue = union(enum) {
.register_offset,
.register_overflow,
.register_mask,
- .load_direct,
- .lea_direct,
- .load_got,
- .lea_got,
.lea_frame,
.elementwise_args,
.reserved_frame,
- .lea_symbol,
- .lea_pcrel,
+ .lea_nav,
+ .lea_uav,
+ .lea_lazy_sym,
+ .lea_extern_func,
=> unreachable,
.memory => |addr| if (std.math.cast(i32, @as(i64, @bitCast(addr)))) |small_addr| .{
.base = .{ .reg = .ds },
@@ -586,30 +549,10 @@ pub const MCValue = union(enum) {
.disp = frame_addr.off + mod_rm.disp,
} },
},
- .load_symbol => |sym_off| {
- assert(sym_off.off == 0);
- return .{
- .base = .{ .reloc = sym_off.sym_index },
- .mod = .{ .rm = .{
- .size = mod_rm.size,
- .index = mod_rm.index,
- .scale = mod_rm.scale,
- .disp = sym_off.off + mod_rm.disp,
- } },
- };
- },
- .load_pcrel => |sym_off| {
- assert(sym_off.off == 0);
- return .{
- .base = .{ .pcrel = sym_off.sym_index },
- .mod = .{ .rm = .{
- .size = mod_rm.size,
- .index = mod_rm.index,
- .scale = mod_rm.scale,
- .disp = sym_off.off + mod_rm.disp,
- } },
- };
- },
+ .load_nav => |nav| .{ .base = .{ .nav = nav }, .mod = .{ .rm = mod_rm } },
+ .load_uav => |uav| .{ .base = .{ .uav = uav }, .mod = .{ .rm = mod_rm } },
+ .load_lazy_sym => |lazy_sym| .{ .base = .{ .lazy_sym = lazy_sym }, .mod = .{ .rm = mod_rm } },
+ .load_extern_func => |extern_func| .{ .base = .{ .extern_func = extern_func }, .mod = .{ .rm = mod_rm } },
.air_ref => |ref| (try function.resolveInst(ref)).mem(function, mod_rm),
};
}
@@ -643,20 +586,20 @@ pub const MCValue = union(enum) {
@as(u8, if (pl.info.inverted) '!' else ' '),
@tagName(pl.reg),
}),
- .load_symbol => |pl| try writer.print("[sym:{} + 0x{x}]", .{ pl.sym_index, pl.off }),
- .lea_symbol => |pl| try writer.print("sym:{} + 0x{x}", .{ pl.sym_index, pl.off }),
- .load_pcrel => |pl| try writer.print("[sym@pcrel:{} + 0x{x}]", .{ pl.sym_index, pl.off }),
- .lea_pcrel => |pl| try writer.print("sym@pcrel:{} + 0x{x}", .{ pl.sym_index, pl.off }),
.indirect => |pl| try writer.print("[{s} + 0x{x}]", .{ @tagName(pl.reg), pl.off }),
- .load_direct => |pl| try writer.print("[direct:{d}]", .{pl}),
- .lea_direct => |pl| try writer.print("direct:{d}", .{pl}),
- .load_got => |pl| try writer.print("[got:{d}]", .{pl}),
- .lea_got => |pl| try writer.print("got:{d}", .{pl}),
.load_frame => |pl| try writer.print("[{} + 0x{x}]", .{ pl.index, pl.off }),
+ .lea_frame => |pl| try writer.print("{} + 0x{x}", .{ pl.index, pl.off }),
+ .load_nav => |pl| try writer.print("[nav:{d}]", .{@intFromEnum(pl)}),
+ .lea_nav => |pl| try writer.print("nav:{d}", .{@intFromEnum(pl)}),
+ .load_uav => |pl| try writer.print("[uav:{d}]", .{@intFromEnum(pl.val)}),
+ .lea_uav => |pl| try writer.print("uav:{d}", .{@intFromEnum(pl.val)}),
+ .load_lazy_sym => |pl| try writer.print("[lazy:{s}:{d}]", .{ @tagName(pl.kind), @intFromEnum(pl.ty) }),
+ .lea_lazy_sym => |pl| try writer.print("lazy:{s}:{d}", .{ @tagName(pl.kind), @intFromEnum(pl.ty) }),
+ .load_extern_func => |pl| try writer.print("[extern:{d}]", .{@intFromEnum(pl)}),
+ .lea_extern_func => |pl| try writer.print("extern:{d}", .{@intFromEnum(pl)}),
.elementwise_args => |pl| try writer.print("elementwise:{d}:[{} + 0x{x}]", .{
pl.regs, pl.frame_index, pl.frame_off,
}),
- .lea_frame => |pl| try writer.print("{} + 0x{x}", .{ pl.index, pl.off }),
.reserved_frame => |pl| try writer.print("(dead:{})", .{pl}),
.air_ref => |pl| try writer.print("(air:0x{x})", .{@intFromEnum(pl)}),
}
@@ -676,16 +619,16 @@ const InstTracking = struct {
.undef,
.immediate,
.memory,
- .load_direct,
- .lea_direct,
- .load_got,
- .lea_got,
.load_frame,
.lea_frame,
- .load_symbol,
- .lea_symbol,
- .load_pcrel,
- .lea_pcrel,
+ .load_nav,
+ .lea_nav,
+ .load_uav,
+ .lea_uav,
+ .load_lazy_sym,
+ .lea_lazy_sym,
+ .load_extern_func,
+ .lea_extern_func,
=> result,
.dead,
.elementwise_args,
@@ -779,15 +722,15 @@ const InstTracking = struct {
.undef,
.immediate,
.memory,
- .load_direct,
- .lea_direct,
- .load_got,
- .lea_got,
.lea_frame,
- .load_symbol,
- .lea_symbol,
- .load_pcrel,
- .lea_pcrel,
+ .load_nav,
+ .lea_nav,
+ .load_uav,
+ .lea_uav,
+ .load_lazy_sym,
+ .lea_lazy_sym,
+ .load_extern_func,
+ .lea_extern_func,
=> assert(std.meta.eql(self.long, target.long)),
.dead,
.eflags,
@@ -975,6 +918,7 @@ pub fn generate(
air: *const Air,
liveness: *const Air.Liveness,
) codegen.CodeGenError!Mir {
+ _ = bin_file;
const zcu = pt.zcu;
const gpa = zcu.gpa;
const ip = &zcu.intern_pool;
@@ -991,7 +935,6 @@ pub fn generate(
.liveness = liveness.*,
.target = &mod.resolved_target.result,
.mod = mod,
- .bin_file = bin_file,
.owner = .{ .nav_index = func.owner_nav },
.inline_func = func_index,
.args = undefined, // populated after `resolveCallingConventionValues`
@@ -1013,8 +956,9 @@ pub fn generate(
function.inst_tracking.deinit(gpa);
function.epilogue_relocs.deinit(gpa);
function.mir_instructions.deinit(gpa);
- function.mir_local_name_bytes.deinit(gpa);
- function.mir_local_types.deinit(gpa);
+ function.mir_string_bytes.deinit(gpa);
+ function.mir_strings.deinit(gpa);
+ function.mir_locals.deinit(gpa);
function.mir_extra.deinit(gpa);
function.mir_table.deinit(gpa);
}
@@ -1101,27 +1045,27 @@ pub fn generate(
var mir: Mir = .{
.instructions = .empty,
.extra = &.{},
- .local_name_bytes = &.{},
- .local_types = &.{},
+ .string_bytes = &.{},
+ .locals = &.{},
.table = &.{},
.frame_locs = .empty,
};
errdefer mir.deinit(gpa);
mir.instructions = function.mir_instructions.toOwnedSlice();
mir.extra = try function.mir_extra.toOwnedSlice(gpa);
- mir.local_name_bytes = try function.mir_local_name_bytes.toOwnedSlice(gpa);
- mir.local_types = try function.mir_local_types.toOwnedSlice(gpa);
+ mir.string_bytes = try function.mir_string_bytes.toOwnedSlice(gpa);
+ mir.locals = try function.mir_locals.toOwnedSlice(gpa);
mir.table = try function.mir_table.toOwnedSlice(gpa);
mir.frame_locs = function.frame_locs.toOwnedSlice();
return mir;
}
-pub fn toTmpMir(cg: *CodeGen) Mir {
+pub fn getTmpMir(cg: *CodeGen) Mir {
return .{
.instructions = cg.mir_instructions.slice(),
.extra = cg.mir_extra.items,
- .local_name_bytes = cg.mir_local_name_bytes.items,
- .local_types = cg.mir_local_types.items,
+ .string_bytes = cg.mir_string_bytes.items,
+ .locals = cg.mir_locals.items,
.table = cg.mir_table.items,
.frame_locs = cg.frame_locs.slice(),
};
@@ -1135,10 +1079,9 @@ pub fn generateLazy(
code: *std.ArrayListUnmanaged(u8),
debug_output: link.File.DebugInfoOutput,
) codegen.CodeGenError!void {
- const comp = bin_file.comp;
- const gpa = comp.gpa;
+ const gpa = pt.zcu.gpa;
// This function is for generating global code, so we use the root module.
- const mod = comp.root_mod;
+ const mod = pt.zcu.comp.root_mod;
var function: CodeGen = .{
.gpa = gpa,
.pt = pt,
@@ -1146,7 +1089,6 @@ pub fn generateLazy(
.liveness = undefined,
.target = &mod.resolved_target.result,
.mod = mod,
- .bin_file = bin_file,
.owner = .{ .lazy_sym = lazy_sym },
.inline_func = undefined,
.args = undefined,
@@ -1159,8 +1101,9 @@ pub fn generateLazy(
defer {
function.inst_tracking.deinit(gpa);
function.mir_instructions.deinit(gpa);
- function.mir_local_name_bytes.deinit(gpa);
- function.mir_local_types.deinit(gpa);
+ function.mir_string_bytes.deinit(gpa);
+ function.mir_strings.deinit(gpa);
+ function.mir_locals.deinit(gpa);
function.mir_extra.deinit(gpa);
function.mir_table.deinit(gpa);
}
@@ -1176,33 +1119,7 @@ pub fn generateLazy(
else => |e| return e,
};
- var emit: Emit = .{
- .lower = .{
- .bin_file = bin_file,
- .target = function.target,
- .allocator = gpa,
- .mir = function.toTmpMir(),
- .cc = .auto,
- .src_loc = src_loc,
- .output_mode = comp.config.output_mode,
- .link_mode = comp.config.link_mode,
- .pic = mod.pic,
- },
- .atom_index = function.owner.getSymbolIndex(&function) catch |err| switch (err) {
- error.CodegenFail => return error.CodegenFail,
- else => |e| return e,
- },
- .debug_output = debug_output,
- .code = code,
- .prev_di_loc = undefined, // no debug info yet
- .prev_di_pc = undefined, // no debug info yet
- };
- emit.emitMir() catch |err| switch (err) {
- error.LowerFail, error.EmitFail => return function.failMsg(emit.lower.err_msg.?),
- error.InvalidInstruction => return function.fail("failed to find a viable x86 instruction (Zig compiler bug)", .{}),
- error.CannotEncode => return function.fail("failed to encode x86 instruction (Zig compiler bug)", .{}),
- else => |e| return function.fail("failed to emit MIR: {s}", .{@errorName(e)}),
- };
+ try function.getTmpMir().emitLazy(bin_file, pt, src_loc, lazy_sym, code, debug_output);
}
const FormatNavData = struct {
@@ -1250,17 +1167,12 @@ fn formatWipMir(
_: std.fmt.FormatOptions,
writer: anytype,
) @TypeOf(writer).Error!void {
- const comp = data.self.bin_file.comp;
var lower: Lower = .{
- .bin_file = data.self.bin_file,
.target = data.self.target,
.allocator = data.self.gpa,
- .mir = data.self.toTmpMir(),
+ .mir = data.self.getTmpMir(),
.cc = .auto,
.src_loc = data.self.src_loc,
- .output_mode = comp.config.output_mode,
- .link_mode = comp.config.link_mode,
- .pic = data.self.mod.pic,
};
var first = true;
for ((lower.lowerMir(data.inst) catch |err| switch (err) {
@@ -1317,13 +1229,6 @@ fn formatWipMir(
.pseudo_dbg_arg_i_64, .pseudo_dbg_var_i_64 => try writer.print(" {d}", .{
mir_inst.data.i64,
}),
- .pseudo_dbg_arg_reloc, .pseudo_dbg_var_reloc => {
- const mem_op: encoder.Instruction.Operand = .{ .mem = .initSib(.qword, .{
- .base = .{ .reloc = mir_inst.data.reloc.sym_index },
- .disp = mir_inst.data.reloc.off,
- }) };
- try writer.print(" {}", .{mem_op.fmt(.m)});
- },
.pseudo_dbg_arg_ro, .pseudo_dbg_var_ro => {
const mem_op: encoder.Instruction.Operand = .{ .mem = .initSib(.qword, .{
.base = .{ .reg = mir_inst.data.ro.reg },
@@ -1399,6 +1304,22 @@ fn addExtraAssumeCapacity(self: *CodeGen, extra: anytype) u32 {
return result;
}
+fn addString(cg: *CodeGen, string: []const u8) Allocator.Error!Mir.NullTerminatedString {
+ try cg.mir_string_bytes.ensureUnusedCapacity(cg.gpa, string.len + 1);
+ try cg.mir_strings.ensureUnusedCapacityContext(cg.gpa, 1, .{ .bytes = &cg.mir_string_bytes });
+
+ const mir_string_gop = cg.mir_strings.getOrPutAssumeCapacityAdapted(
+ string,
+ std.hash_map.StringIndexAdapter{ .bytes = &cg.mir_string_bytes },
+ );
+ if (!mir_string_gop.found_existing) {
+ mir_string_gop.key_ptr.* = @intCast(cg.mir_string_bytes.items.len);
+ cg.mir_string_bytes.appendSliceAssumeCapacity(string);
+ cg.mir_string_bytes.appendAssumeCapacity(0);
+ }
+ return @enumFromInt(mir_string_gop.key_ptr.*);
+}
+
fn asmOps(self: *CodeGen, tag: Mir.Inst.FixedTag, ops: [4]Operand) !void {
return switch (ops[0]) {
.none => self.asmOpOnly(tag),
@@ -1714,21 +1635,36 @@ fn asmImmediate(self: *CodeGen, tag: Mir.Inst.FixedTag, imm: Immediate) !void {
.ops = switch (imm) {
.signed => .i_s,
.unsigned => .i_u,
- .reloc => .rel,
+ .nav => .nav,
+ .uav => .uav,
+ .lazy_sym => .lazy_sym,
+ .extern_func => .extern_func,
},
.data = switch (imm) {
- .reloc => |sym_off| reloc: {
- assert(tag[0] == ._);
- break :reloc .{ .reloc = sym_off };
- },
.signed, .unsigned => .{ .i = .{
.fixes = tag[0],
.i = switch (imm) {
.signed => |s| @bitCast(s),
.unsigned => |u| @intCast(u),
- .reloc => unreachable,
+ .nav, .uav, .lazy_sym, .extern_func => unreachable,
},
} },
+ .nav => |nav| switch (tag[0]) {
+ ._ => .{ .nav = nav },
+ else => unreachable,
+ },
+ .uav => |uav| switch (tag[0]) {
+ ._ => .{ .uav = uav },
+ else => unreachable,
+ },
+ .lazy_sym => |lazy_sym| switch (tag[0]) {
+ ._ => .{ .lazy_sym = lazy_sym },
+ else => unreachable,
+ },
+ .extern_func => |extern_func| switch (tag[0]) {
+ ._ => .{ .extern_func = extern_func },
+ else => unreachable,
+ },
},
});
}
@@ -1743,7 +1679,7 @@ fn asmImmediateRegister(self: *CodeGen, tag: Mir.Inst.FixedTag, imm: Immediate,
.i = @as(u8, switch (imm) {
.signed => |s| @bitCast(@as(i8, @intCast(s))),
.unsigned => |u| @intCast(u),
- .reloc => unreachable,
+ .nav, .uav, .lazy_sym, .extern_func => unreachable,
}),
} },
});
@@ -1758,12 +1694,12 @@ fn asmImmediateImmediate(self: *CodeGen, tag: Mir.Inst.FixedTag, imm1: Immediate
.i1 = switch (imm1) {
.signed => |s| @bitCast(@as(i16, @intCast(s))),
.unsigned => |u| @intCast(u),
- .reloc => unreachable,
+ .nav, .uav, .lazy_sym, .extern_func => unreachable,
},
.i2 = switch (imm2) {
.signed => |s| @bitCast(@as(i8, @intCast(s))),
.unsigned => |u| @intCast(u),
- .reloc => unreachable,
+ .nav, .uav, .lazy_sym, .extern_func => unreachable,
},
} },
});
@@ -1788,7 +1724,7 @@ fn asmRegisterImmediate(self: *CodeGen, tag: Mir.Inst.FixedTag, reg: Register, i
.{ .ri_u, small }
else
.{ .ri_64, try self.addExtra(Mir.Imm64.encode(imm.unsigned)) },
- .reloc => unreachable,
+ .nav, .uav, .lazy_sym, .extern_func => unreachable,
};
_ = try self.addInst(.{
.tag = tag[1],
@@ -1860,7 +1796,7 @@ fn asmRegisterRegisterRegisterImmediate(
.i = switch (imm) {
.signed => |s| @bitCast(@as(i8, @intCast(s))),
.unsigned => |u| @intCast(u),
- .reloc => unreachable,
+ .nav, .uav, .lazy_sym, .extern_func => unreachable,
},
} },
});
@@ -1878,7 +1814,7 @@ fn asmRegisterRegisterImmediate(
.ops = switch (imm) {
.signed => .rri_s,
.unsigned => .rri_u,
- .reloc => unreachable,
+ .nav, .uav, .lazy_sym, .extern_func => unreachable,
},
.data = .{ .rri = .{
.fixes = tag[0],
@@ -1887,7 +1823,7 @@ fn asmRegisterRegisterImmediate(
.i = switch (imm) {
.signed => |s| @bitCast(s),
.unsigned => |u| @intCast(u),
- .reloc => unreachable,
+ .nav, .uav, .lazy_sym, .extern_func => unreachable,
},
} },
});
@@ -1985,7 +1921,7 @@ fn asmRegisterMemoryImmediate(
if (switch (imm) {
.signed => |s| if (std.math.cast(i16, s)) |x| @as(u16, @bitCast(x)) else null,
.unsigned => |u| std.math.cast(u16, u),
- .reloc => unreachable,
+ .nav, .uav, .lazy_sym, .extern_func => unreachable,
}) |small_imm| {
_ = try self.addInst(.{
.tag = tag[1],
@@ -2001,7 +1937,7 @@ fn asmRegisterMemoryImmediate(
const payload = try self.addExtra(Mir.Imm32{ .imm = switch (imm) {
.signed => |s| @bitCast(s),
.unsigned => |u| @as(u32, @intCast(u)),
- .reloc => unreachable,
+ .nav, .uav, .lazy_sym, .extern_func => unreachable,
} });
assert(payload + 1 == try self.addExtra(Mir.Memory.encode(m)));
_ = try self.addInst(.{
@@ -2009,7 +1945,7 @@ fn asmRegisterMemoryImmediate(
.ops = switch (imm) {
.signed => .rmi_s,
.unsigned => .rmi_u,
- .reloc => unreachable,
+ .nav, .uav, .lazy_sym, .extern_func => unreachable,
},
.data = .{ .rx = .{
.fixes = tag[0],
@@ -2057,7 +1993,7 @@ fn asmMemoryImmediate(self: *CodeGen, tag: Mir.Inst.FixedTag, m: Memory, imm: Im
const payload = try self.addExtra(Mir.Imm32{ .imm = switch (imm) {
.signed => |s| @bitCast(s),
.unsigned => |u| @intCast(u),
- .reloc => unreachable,
+ .nav, .uav, .lazy_sym, .extern_func => unreachable,
} });
assert(payload + 1 == try self.addExtra(Mir.Memory.encode(m)));
_ = try self.addInst(.{
@@ -2065,7 +2001,7 @@ fn asmMemoryImmediate(self: *CodeGen, tag: Mir.Inst.FixedTag, m: Memory, imm: Im
.ops = switch (imm) {
.signed => .mi_s,
.unsigned => .mi_u,
- .reloc => unreachable,
+ .nav, .uav, .lazy_sym, .extern_func => unreachable,
},
.data = .{ .x = .{
.fixes = tag[0],
@@ -2347,16 +2283,18 @@ fn genMainBody(
var air_arg_index: usize = 0;
const fn_info = zcu.typeToFunc(cg.fn_type).?;
var fn_param_index: usize = 0;
- try cg.mir_local_types.ensureTotalCapacity(cg.gpa, fn_info.param_types.len);
var zir_param_index: usize = 0;
for (zir.getParamBody(func_zir_inst)) |zir_param_inst| {
- const name = zir.nullTerminatedString(zir.getParamName(zir_param_inst) orelse continue);
+ const name = switch (zir.getParamName(zir_param_inst) orelse break) {
+ .empty => .none,
+ else => |zir_name| try cg.addString(zir.nullTerminatedString(zir_name)),
+ };
defer zir_param_index += 1;
- try cg.mir_local_name_bytes.appendSlice(cg.gpa, name[0 .. name.len + 1]);
if (comptime_args.len > 0) switch (comptime_args.get(ip)[zir_param_index]) {
.none => {},
else => |comptime_arg| {
+ try cg.mir_locals.append(cg.gpa, .{ .name = name, .type = ip.typeOf(comptime_arg) });
_ = try cg.addInst(.{
.tag = .pseudo,
.ops = .pseudo_dbg_arg_val,
@@ -2366,9 +2304,9 @@ fn genMainBody(
},
};
- const arg_ty: Type = .fromInterned(fn_info.param_types.get(ip)[fn_param_index]);
+ const arg_ty = fn_info.param_types.get(ip)[fn_param_index];
+ try cg.mir_locals.append(cg.gpa, .{ .name = name, .type = arg_ty });
fn_param_index += 1;
- cg.mir_local_types.appendAssumeCapacity(arg_ty.toIntern());
if (air_arg_index == air_args_body.len) {
try cg.asmPseudo(.pseudo_dbg_arg_none);
@@ -2381,7 +2319,11 @@ fn genMainBody(
continue;
}
air_arg_index += 1;
- try cg.genLocalDebugInfo(.arg, arg_ty, cg.getResolvedInstValue(air_arg_inst).short);
+ try cg.genLocalDebugInfo(
+ .arg,
+ .fromInterned(arg_ty),
+ cg.getResolvedInstValue(air_arg_inst).short,
+ );
}
if (fn_info.is_var_args) try cg.asmPseudo(.pseudo_dbg_var_args_none);
}
@@ -3453,7 +3395,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -3585,7 +3527,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -3621,7 +3563,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -3658,7 +3600,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
.unused,
@@ -3698,7 +3640,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -4183,7 +4125,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addtf3" } },
.unused,
.unused,
.unused,
@@ -4215,7 +4157,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addtf3" } },
.unused,
.unused,
.unused,
@@ -4250,7 +4192,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addtf3" } },
.unused,
.unused,
.unused,
@@ -4285,7 +4227,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addtf3" } },
.unused,
.unused,
.unused,
@@ -13885,7 +13827,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__subhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__subhf3" } },
.unused,
.unused,
.unused,
@@ -14017,7 +13959,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__subhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__subhf3" } },
.unused,
.unused,
.unused,
@@ -14053,7 +13995,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__subhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__subhf3" } },
.unused,
.unused,
.unused,
@@ -14090,7 +14032,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__subhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__subhf3" } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
.unused,
@@ -14130,7 +14072,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__subhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__subhf3" } },
.unused,
.unused,
.unused,
@@ -14632,7 +14574,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__subtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__subtf3" } },
.unused,
.unused,
.unused,
@@ -14664,7 +14606,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__subtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__subtf3" } },
.unused,
.unused,
.unused,
@@ -14699,7 +14641,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__subtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__subtf3" } },
.unused,
.unused,
.unused,
@@ -14734,7 +14676,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__subtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__subtf3" } },
.unused,
.unused,
.unused,
@@ -23415,7 +23357,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__mulhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__mulhf3" } },
.unused,
.unused,
.unused,
@@ -23547,7 +23489,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__mulhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__mulhf3" } },
.unused,
.unused,
.unused,
@@ -23583,7 +23525,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__mulhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__mulhf3" } },
.unused,
.unused,
.unused,
@@ -23620,7 +23562,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__mulhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__mulhf3" } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
.unused,
@@ -23660,7 +23602,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__mulhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__mulhf3" } },
.unused,
.unused,
.unused,
@@ -24145,7 +24087,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__multf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__multf3" } },
.unused,
.unused,
.unused,
@@ -24177,7 +24119,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__multf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__multf3" } },
.unused,
.unused,
.unused,
@@ -24212,7 +24154,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__multf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__multf3" } },
.unused,
.unused,
.unused,
@@ -24247,7 +24189,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__multf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__multf3" } },
.unused,
.unused,
.unused,
@@ -26107,7 +26049,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__mulhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__mulhf3" } },
.unused,
.unused,
.unused,
@@ -26239,7 +26181,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__mulhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__mulhf3" } },
.unused,
.unused,
.unused,
@@ -26275,7 +26217,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__mulhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__mulhf3" } },
.unused,
.unused,
.unused,
@@ -26312,7 +26254,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__mulhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__mulhf3" } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
.unused,
@@ -26352,7 +26294,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__mulhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__mulhf3" } },
.unused,
.unused,
.unused,
@@ -26837,7 +26779,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__multf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__multf3" } },
.unused,
.unused,
.unused,
@@ -26869,7 +26811,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__multf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__multf3" } },
.unused,
.unused,
.unused,
@@ -26904,7 +26846,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__multf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__multf3" } },
.unused,
.unused,
.unused,
@@ -26939,7 +26881,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__multf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__multf3" } },
.unused,
.unused,
.unused,
@@ -32247,7 +32189,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divhf3" } },
.unused,
.unused,
.unused,
@@ -32379,7 +32321,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divhf3" } },
.unused,
.unused,
.unused,
@@ -32415,7 +32357,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divhf3" } },
.unused,
.unused,
.unused,
@@ -32452,7 +32394,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divhf3" } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
.unused,
@@ -32492,7 +32434,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divhf3" } },
.unused,
.unused,
.unused,
@@ -32995,7 +32937,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divtf3" } },
.unused,
.unused,
.unused,
@@ -33027,7 +32969,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divtf3" } },
.unused,
.unused,
.unused,
@@ -33062,7 +33004,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divtf3" } },
.unused,
.unused,
.unused,
@@ -33097,7 +33039,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divtf3" } },
.unused,
.unused,
.unused,
@@ -33181,8 +33123,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divhf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunch" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divhf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__trunch" } },
.unused,
.unused,
.unused,
@@ -33323,8 +33265,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divhf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunch" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divhf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__trunch" } },
.unused,
.unused,
.unused,
@@ -33360,8 +33302,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divhf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunch" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divhf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__trunch" } },
.unused,
.unused,
.unused,
@@ -33398,8 +33340,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divhf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunch" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divhf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__trunch" } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
.unused,
@@ -33439,8 +33381,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divhf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunch" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divhf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__trunch" } },
.unused,
.unused,
.unused,
@@ -33508,7 +33450,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "truncf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "truncf" } },
.unused,
.unused,
.unused,
@@ -33572,7 +33514,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "truncf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "truncf" } },
.unused,
.unused,
.unused,
@@ -33721,7 +33663,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "trunc" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "trunc" } },
.unused,
.unused,
.unused,
@@ -33751,8 +33693,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divdf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "trunc" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divdf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = "trunc" } },
.unused,
.unused,
.unused,
@@ -33899,7 +33841,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "trunc" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "trunc" } },
.unused,
.unused,
.unused,
@@ -33935,8 +33877,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.{ .type = .f64, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divdf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "trunc" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divdf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = "trunc" } },
.unused,
.unused,
.unused,
@@ -33973,7 +33915,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f80, .kind = .{ .reg = .st6 } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncx" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__truncx" } },
.unused,
.unused,
.unused,
@@ -34007,7 +33949,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f80, .kind = .{ .reg = .st6 } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncx" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__truncx" } },
.unused,
.unused,
.unused,
@@ -34041,8 +33983,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divtf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "truncq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divtf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = "truncq" } },
.unused,
.unused,
.unused,
@@ -34074,8 +34016,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divtf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "truncq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divtf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = "truncq" } },
.unused,
.unused,
.unused,
@@ -34110,8 +34052,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divtf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "truncq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divtf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = "truncq" } },
.unused,
.unused,
.unused,
@@ -34146,8 +34088,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divtf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "truncq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divtf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = "truncq" } },
.unused,
.unused,
.unused,
@@ -34237,12 +34179,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divhf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = "__divhf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.zero => "__trunch",
.down => "__floorh",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -34377,12 +34319,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divhf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = "__divhf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.zero => "__trunch",
.down => "__floorh",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -34418,12 +34360,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divhf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = "__divhf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.zero => "__trunch",
.down => "__floorh",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -34460,12 +34402,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divhf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = "__divhf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.zero => "__trunch",
.down => "__floorh",
- } } } },
+ } } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
.unused,
@@ -34505,12 +34447,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divhf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = "__divhf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.zero => "__trunch",
.down => "__floorh",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -34578,11 +34520,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.zero => "truncf",
.down => "floorf",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -34646,11 +34588,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.zero => "truncf",
.down => "floorf",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -34799,11 +34741,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.zero => "trunc",
.down => "floor",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -34833,12 +34775,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divdf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = "__divdf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.zero => "trunc",
.down => "floor",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -34985,11 +34927,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.zero => "trunc",
.down => "floor",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -35025,12 +34967,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.{ .type = .f64, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divdf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = "__divdf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.zero => "trunc",
.down => "floor",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -35067,11 +35009,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f80, .kind = .{ .reg = .st6 } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.zero => "__truncx",
.down => "__floorx",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -35103,11 +35045,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.zero => "__truncx",
.down => "__floorx",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -35140,11 +35082,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.zero => "__truncx",
.down => "__floorx",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -35178,11 +35120,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f80, .kind = .{ .reg = .st6 } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.zero => "__truncx",
.down => "__floorx",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -35216,12 +35158,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divtf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = "__divtf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.zero => "truncq",
.down => "floorq",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -35253,12 +35195,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divtf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = "__divtf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.zero => "truncq",
.down => "floorq",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -35293,12 +35235,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divtf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = "__divtf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.zero => "truncq",
.down => "floorq",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -35333,12 +35275,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divtf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = "__divtf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.zero => "truncq",
.down => "floorq",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -35525,9 +35467,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .i128, .kind = .{ .param_gpr_pair = .{ .cc = .ccc, .at = 0 } } },
.{ .type = .i64, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 3 } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__modti3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__modti3" } },
.{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divti3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divti3" } },
.unused,
.unused,
.unused,
@@ -35576,9 +35518,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 2 } } },
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 3 } } },
.{ .type = .i32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divei4" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divei4" } },
.{ .kind = .{ .mem_of_type = .dst0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__modei4" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__modei4" } },
.unused,
.unused,
.unused,
@@ -35657,8 +35599,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divhf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floorh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divhf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floorh" } },
.unused,
.unused,
.unused,
@@ -35799,8 +35741,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divhf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floorh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divhf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floorh" } },
.unused,
.unused,
.unused,
@@ -35836,8 +35778,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divhf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floorh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divhf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floorh" } },
.unused,
.unused,
.unused,
@@ -35874,8 +35816,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divhf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floorh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divhf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floorh" } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
.unused,
@@ -35915,8 +35857,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divhf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floorh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divhf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floorh" } },
.unused,
.unused,
.unused,
@@ -35984,7 +35926,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "floorf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "floorf" } },
.unused,
.unused,
.unused,
@@ -36048,7 +35990,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "floorf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "floorf" } },
.unused,
.unused,
.unused,
@@ -36197,7 +36139,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "floor" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "floor" } },
.unused,
.unused,
.unused,
@@ -36227,8 +36169,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divdf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "floor" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divdf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = "floor" } },
.unused,
.unused,
.unused,
@@ -36375,7 +36317,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "floor" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "floor" } },
.unused,
.unused,
.unused,
@@ -36411,8 +36353,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.{ .type = .f64, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divdf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "floor" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divdf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = "floor" } },
.unused,
.unused,
.unused,
@@ -36449,7 +36391,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f80, .kind = .{ .reg = .st6 } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floorx" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floorx" } },
.unused,
.unused,
.unused,
@@ -36483,7 +36425,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f80, .kind = .{ .reg = .st6 } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floorx" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floorx" } },
.unused,
.unused,
.unused,
@@ -36517,8 +36459,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divtf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "floorq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divtf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = "floorq" } },
.unused,
.unused,
.unused,
@@ -36550,8 +36492,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divtf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "floorq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divtf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = "floorq" } },
.unused,
.unused,
.unused,
@@ -36586,8 +36528,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divtf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "floorq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divtf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = "floorq" } },
.unused,
.unused,
.unused,
@@ -36622,8 +36564,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divtf3" } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "floorq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divtf3" } },
+ .{ .type = .usize, .kind = .{ .extern_func = "floorq" } },
.unused,
.unused,
.unused,
@@ -36779,7 +36721,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__modti3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__modti3" } },
.unused,
.unused,
.unused,
@@ -36808,7 +36750,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__umodti3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__umodti3" } },
.unused,
.unused,
.unused,
@@ -36841,7 +36783,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 1 } } },
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 2 } } },
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 3 } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__modei4" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__modei4" } },
.unused,
.unused,
.unused,
@@ -36874,7 +36816,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 1 } } },
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 2 } } },
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 3 } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__umodei4" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__umodei4" } },
.unused,
.unused,
.unused,
@@ -37238,7 +37180,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .i64, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 1 } } },
.{ .type = .u64, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 2 } } },
.{ .type = .i64, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 3 } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__modti3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__modti3" } },
.{ .type = .u64, .kind = .{ .ret_gpr = .{ .cc = .ccc, .at = 0 } } },
.unused,
.unused,
@@ -37276,7 +37218,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 1 } } },
.{ .type = .u64, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 2 } } },
.{ .type = .u64, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 3 } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__umodti3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__umodti3" } },
.{ .type = .u64, .kind = .{ .ret_gpr = .{ .cc = .ccc, .at = 0 } } },
.unused,
.unused,
@@ -37314,7 +37256,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 1 } } },
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 2 } } },
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 3 } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__modei4" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__modei4" } },
.unused,
.unused,
.unused,
@@ -37350,7 +37292,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 1 } } },
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 2 } } },
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 3 } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__umodei4" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__umodei4" } },
.unused,
.unused,
.unused,
@@ -37381,7 +37323,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodh" } },
.unused,
.unused,
.unused,
@@ -37413,7 +37355,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodh" } },
.unused,
.unused,
.unused,
@@ -37449,7 +37391,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodh" } },
.unused,
.unused,
.unused,
@@ -37486,7 +37428,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodh" } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
.unused,
@@ -37526,7 +37468,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodh" } },
.unused,
.unused,
.unused,
@@ -37562,7 +37504,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmodf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmodf" } },
.unused,
.unused,
.unused,
@@ -37594,7 +37536,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.{ .type = .f32, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmodf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmodf" } },
.unused,
.unused,
.unused,
@@ -37629,7 +37571,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.{ .type = .f32, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmodf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmodf" } },
.unused,
.unused,
.unused,
@@ -37661,7 +37603,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmod" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmod" } },
.unused,
.unused,
.unused,
@@ -37693,7 +37635,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.{ .type = .f64, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmod" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmod" } },
.unused,
.unused,
.unused,
@@ -37728,7 +37670,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.{ .type = .f64, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmod" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmod" } },
.unused,
.unused,
.unused,
@@ -37763,7 +37705,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.{ .type = .f64, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmod" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmod" } },
.unused,
.unused,
.unused,
@@ -37799,7 +37741,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodx" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodx" } },
.unused,
.unused,
.unused,
@@ -37832,7 +37774,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodx" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodx" } },
.unused,
.unused,
.unused,
@@ -37865,7 +37807,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodx" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodx" } },
.unused,
.unused,
.unused,
@@ -37899,7 +37841,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodx" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodx" } },
.unused,
.unused,
.unused,
@@ -37937,7 +37879,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodx" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodx" } },
.unused,
.unused,
.unused,
@@ -37975,7 +37917,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodx" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodx" } },
.unused,
.unused,
.unused,
@@ -38010,7 +37952,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmodq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmodq" } },
.unused,
.unused,
.unused,
@@ -38042,7 +37984,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmodq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmodq" } },
.unused,
.unused,
.unused,
@@ -38077,7 +38019,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmodq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmodq" } },
.unused,
.unused,
.unused,
@@ -38112,7 +38054,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmodq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmodq" } },
.unused,
.unused,
.unused,
@@ -38447,7 +38389,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .i64, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 3 } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__modti3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__modti3" } },
.{ .type = .i64, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
@@ -38486,7 +38428,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .i64, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 3 } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__modti3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__modti3" } },
.unused,
.unused,
.unused,
@@ -38526,7 +38468,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__umodti3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__umodti3" } },
.unused,
.unused,
.unused,
@@ -38560,7 +38502,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 2 } } },
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 3 } } },
.{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__modei4" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__modei4" } },
.unused,
.unused,
.unused,
@@ -38617,7 +38559,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 1 } } },
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 2 } } },
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 3 } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__umodei4" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__umodei4" } },
.unused,
.unused,
.unused,
@@ -38647,7 +38589,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f16, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodh" } },
.{ .type = .f16, .kind = .{ .reg = .dx } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
@@ -38688,7 +38630,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f16, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodh" } },
.{ .type = .f16, .kind = .{ .reg = .dx } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
@@ -38729,10 +38671,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f16, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodh" } },
.{ .type = .f16, .kind = .{ .reg = .dx } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -38767,10 +38709,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f16, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodh" } },
.{ .type = .f16, .kind = .{ .reg = .dx } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -38805,10 +38747,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f16, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodh" } },
.{ .type = .f16, .kind = .{ .reg = .dx } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -38843,10 +38785,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f16, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodh" } },
.{ .type = .f16, .kind = .{ .reg = .dx } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -38881,10 +38823,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f32, .kind = .mem },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodh" } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .ax } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -38919,10 +38861,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f32, .kind = .mem },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodh" } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .ax } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -38960,7 +38902,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodh" } },
.{ .type = .f16, .kind = .{ .reg = .dx } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
@@ -39008,7 +38950,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodh" } },
.{ .type = .f16, .kind = .{ .reg = .dx } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
@@ -39056,10 +38998,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodh" } },
.{ .type = .f16, .kind = .{ .reg = .dx } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -39101,10 +39043,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodh" } },
.{ .type = .f16, .kind = .{ .reg = .dx } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -39146,10 +39088,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodh" } },
.{ .type = .f16, .kind = .{ .reg = .dx } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -39191,10 +39133,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodh" } },
.{ .type = .f16, .kind = .{ .reg = .dx } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -39236,10 +39178,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodh" } },
.{ .type = .f16, .kind = .{ .reg = .dx } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -39282,10 +39224,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodh" } },
.{ .type = .f16, .kind = .{ .reg = .dx } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -39329,9 +39271,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodh" } },
.{ .type = .f32, .kind = .mem },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -39378,9 +39320,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodh" } },
.{ .type = .f32, .kind = .mem },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -39423,7 +39365,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmodf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmodf" } },
.{ .type = .f32, .kind = .{ .reg = .edx } },
.{ .type = .f32, .kind = .{ .reg = .eax } },
.unused,
@@ -39461,7 +39403,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmodf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmodf" } },
.{ .type = .f32, .kind = .{ .reg = .edx } },
.{ .type = .f32, .kind = .{ .reg = .eax } },
.unused,
@@ -39499,7 +39441,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f32, .kind = .mem },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmodf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmodf" } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f32, .kind = .{ .reg = .eax } },
.unused,
@@ -39539,7 +39481,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.{ .type = .f32, .kind = .{ .reg = .xmm1 } },
.{ .type = .f32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmodf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmodf" } },
.{ .type = .f32, .kind = .{ .reg = .edx } },
.{ .type = .f32, .kind = .{ .reg = .eax } },
.unused,
@@ -39583,7 +39525,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.{ .type = .f32, .kind = .{ .reg = .xmm1 } },
.{ .type = .f32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmodf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmodf" } },
.{ .type = .f32, .kind = .{ .reg = .edx } },
.{ .type = .f32, .kind = .{ .reg = .eax } },
.unused,
@@ -39626,7 +39568,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.{ .type = .f32, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmodf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmodf" } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f32, .kind = .{ .reg = .eax } },
.unused,
@@ -39666,7 +39608,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmod" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmod" } },
.{ .type = .f64, .kind = .{ .reg = .rcx } },
.{ .type = .f64, .kind = .{ .reg = .rdx } },
.{ .type = .f64, .kind = .{ .reg = .rax } },
@@ -39705,7 +39647,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmod" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmod" } },
.{ .type = .f64, .kind = .{ .reg = .rcx } },
.{ .type = .f64, .kind = .{ .reg = .rdx } },
.{ .type = .f64, .kind = .{ .reg = .rax } },
@@ -39744,7 +39686,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f64, .kind = .mem },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmod" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmod" } },
.{ .type = .f64, .kind = .mem },
.{ .type = .f64, .kind = .{ .reg = .rdx } },
.{ .type = .f64, .kind = .{ .reg = .rax } },
@@ -39789,7 +39731,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.{ .type = .f64, .kind = .{ .reg = .xmm1 } },
.{ .type = .f64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmod" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmod" } },
.{ .type = .f64, .kind = .{ .reg = .rcx } },
.{ .type = .f64, .kind = .{ .reg = .rdx } },
.{ .type = .f64, .kind = .{ .reg = .rax } },
@@ -39834,7 +39776,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.{ .type = .f64, .kind = .{ .reg = .xmm1 } },
.{ .type = .f64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmod" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmod" } },
.{ .type = .f64, .kind = .{ .reg = .rcx } },
.{ .type = .f64, .kind = .{ .reg = .rdx } },
.{ .type = .f64, .kind = .{ .reg = .rax } },
@@ -39878,7 +39820,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.{ .type = .f64, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmod" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmod" } },
.{ .type = .f64, .kind = .{ .reg = .rdx } },
.{ .type = .f64, .kind = .mem },
.{ .type = .f64, .kind = .{ .reg = .rax } },
@@ -39926,7 +39868,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodx" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodx" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .f80, .kind = .{ .reg = .rax } },
.unused,
@@ -39969,7 +39911,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodx" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodx" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .f80, .kind = .{ .reg = .rax } },
.unused,
@@ -40012,7 +39954,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodx" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodx" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .f80, .kind = .{ .reg = .rax } },
.unused,
@@ -40055,7 +39997,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodx" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodx" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .f80, .kind = .{ .reg = .rax } },
.unused,
@@ -40098,7 +40040,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodx" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodx" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .f80, .kind = .{ .reg = .rax } },
.unused,
@@ -40141,7 +40083,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodx" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodx" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .f80, .kind = .{ .reg = .rax } },
.unused,
@@ -40185,7 +40127,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodx" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodx" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .f80, .kind = .{ .reg = .rax } },
.unused,
@@ -40233,7 +40175,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodx" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodx" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .f80, .kind = .{ .reg = .rax } },
.unused,
@@ -40281,7 +40223,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodx" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodx" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .f80, .kind = .{ .reg = .rax } },
.unused,
@@ -40329,7 +40271,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodx" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodx" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .f80, .kind = .{ .reg = .rax } },
.unused,
@@ -40377,7 +40319,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodx" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodx" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .f80, .kind = .{ .reg = .rax } },
.unused,
@@ -40425,7 +40367,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmodx" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmodx" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .f80, .kind = .{ .reg = .rax } },
.unused,
@@ -40471,11 +40413,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f128, .kind = .mem },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmodq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmodq" } },
.{ .type = .f128, .kind = .{ .reg = .rcx } },
.{ .type = .f128, .kind = .{ .reg = .rdx } },
.{ .type = .f128, .kind = .{ .reg = .rax } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addtf3" } },
.unused,
.unused,
.unused,
@@ -40512,11 +40454,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f128, .kind = .mem },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmodq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmodq" } },
.{ .type = .f128, .kind = .{ .reg = .rcx } },
.{ .type = .f128, .kind = .{ .reg = .rdx } },
.{ .type = .f128, .kind = .{ .reg = .rax } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addtf3" } },
.unused,
.unused,
.unused,
@@ -40553,11 +40495,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f128, .kind = .mem },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmodq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmodq" } },
.{ .type = .f128, .kind = .{ .reg = .rcx } },
.{ .type = .f128, .kind = .{ .reg = .rdx } },
.{ .type = .f128, .kind = .{ .reg = .rax } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addtf3" } },
.unused,
.unused,
.unused,
@@ -40595,11 +40537,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f128, .kind = .mem },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmodq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmodq" } },
.{ .type = .f128, .kind = .{ .reg = .rdx } },
.{ .type = .f128, .kind = .mem },
.{ .type = .f128, .kind = .{ .reg = .rax } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addtf3" } },
.unused,
.unused,
.unused,
@@ -40637,11 +40579,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmodq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmodq" } },
.{ .type = .f128, .kind = .{ .reg = .rcx } },
.{ .type = .f128, .kind = .{ .reg = .rdx } },
.{ .type = .f128, .kind = .{ .reg = .rax } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addtf3" } },
.unused,
.unused,
.unused,
@@ -40683,11 +40625,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmodq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmodq" } },
.{ .type = .f128, .kind = .{ .reg = .rcx } },
.{ .type = .f128, .kind = .{ .reg = .rdx } },
.{ .type = .f128, .kind = .{ .reg = .rax } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addtf3" } },
.unused,
.unused,
.unused,
@@ -40729,11 +40671,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmodq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmodq" } },
.{ .type = .f128, .kind = .{ .reg = .rcx } },
.{ .type = .f128, .kind = .{ .reg = .rdx } },
.{ .type = .f128, .kind = .{ .reg = .rax } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addtf3" } },
.unused,
.unused,
.unused,
@@ -40776,11 +40718,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmodq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmodq" } },
.{ .type = .f128, .kind = .{ .reg = .rdx } },
.{ .type = .f128, .kind = .mem },
.{ .type = .f128, .kind = .{ .reg = .rax } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addtf3" } },
.unused,
.unused,
.unused,
@@ -43870,7 +43812,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmaxh" } },
.unused,
.unused,
.unused,
@@ -44008,7 +43950,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmaxh" } },
.unused,
.unused,
.unused,
@@ -44044,7 +43986,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmaxh" } },
.unused,
.unused,
.unused,
@@ -44081,7 +44023,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmaxh" } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
.unused,
@@ -44121,7 +44063,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmaxh" } },
.unused,
.unused,
.unused,
@@ -44536,7 +44478,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmax" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmax" } },
.unused,
.unused,
.unused,
@@ -44791,7 +44733,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.{ .type = .f64, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmax" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmax" } },
.unused,
.unused,
.unused,
@@ -45080,7 +45022,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmaxq" } },
.unused,
.unused,
.unused,
@@ -45112,7 +45054,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmaxq" } },
.unused,
.unused,
.unused,
@@ -45147,7 +45089,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmaxq" } },
.unused,
.unused,
.unused,
@@ -45182,7 +45124,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmaxq" } },
.unused,
.unused,
.unused,
@@ -48029,7 +47971,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fminh" } },
.unused,
.unused,
.unused,
@@ -48167,7 +48109,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fminh" } },
.unused,
.unused,
.unused,
@@ -48203,7 +48145,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fminh" } },
.unused,
.unused,
.unused,
@@ -48240,7 +48182,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fminh" } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
.unused,
@@ -48280,7 +48222,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fminh" } },
.unused,
.unused,
.unused,
@@ -48695,7 +48637,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmin" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmin" } },
.unused,
.unused,
.unused,
@@ -48950,7 +48892,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.{ .type = .f64, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmin" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmin" } },
.unused,
.unused,
.unused,
@@ -49227,7 +49169,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fminq" } },
.unused,
.unused,
.unused,
@@ -49259,7 +49201,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fminq" } },
.unused,
.unused,
.unused,
@@ -49294,7 +49236,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fminq" } },
.unused,
.unused,
.unused,
@@ -49329,7 +49271,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fminq" } },
.unused,
.unused,
.unused,
@@ -72269,7 +72211,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__sqrth" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__sqrth" } },
.unused,
.unused,
.unused,
@@ -72351,7 +72293,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__sqrth" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__sqrth" } },
.unused,
.unused,
.unused,
@@ -72382,7 +72324,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__sqrth" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__sqrth" } },
.unused,
.unused,
.unused,
@@ -72413,7 +72355,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__sqrth" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__sqrth" } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
.unused,
@@ -72447,7 +72389,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .ax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__sqrth" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__sqrth" } },
.unused,
.unused,
.unused,
@@ -72519,7 +72461,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "sqrtf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "sqrtf" } },
.unused,
.unused,
.unused,
@@ -72635,7 +72577,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "sqrtf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "sqrtf" } },
.unused,
.unused,
.unused,
@@ -72665,7 +72607,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "sqrtf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "sqrtf" } },
.unused,
.unused,
.unused,
@@ -72735,7 +72677,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "sqrt" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "sqrt" } },
.unused,
.unused,
.unused,
@@ -72851,7 +72793,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "sqrt" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "sqrt" } },
.unused,
.unused,
.unused,
@@ -72881,7 +72823,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "sqrt" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "sqrt" } },
.unused,
.unused,
.unused,
@@ -72911,7 +72853,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "sqrt" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "sqrt" } },
.unused,
.unused,
.unused,
@@ -72995,7 +72937,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "sqrtq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "sqrtq" } },
.unused,
.unused,
.unused,
@@ -73022,7 +72964,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "sqrtq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "sqrtq" } },
.unused,
.unused,
.unused,
@@ -73052,7 +72994,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "sqrtq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "sqrtq" } },
.unused,
.unused,
.unused,
@@ -73082,7 +73024,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "sqrtq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "sqrtq" } },
.unused,
.unused,
.unused,
@@ -73126,7 +73068,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__" ++ @tagName(name) ++ "h" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__" ++ @tagName(name) ++ "h" } },
.unused,
.unused,
.unused,
@@ -73153,7 +73095,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__" ++ @tagName(name) ++ "h" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__" ++ @tagName(name) ++ "h" } },
.unused,
.unused,
.unused,
@@ -73184,7 +73126,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__" ++ @tagName(name) ++ "h" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__" ++ @tagName(name) ++ "h" } },
.unused,
.unused,
.unused,
@@ -73215,7 +73157,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__" ++ @tagName(name) ++ "h" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__" ++ @tagName(name) ++ "h" } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
.unused,
@@ -73249,7 +73191,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .ax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__" ++ @tagName(name) ++ "h" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__" ++ @tagName(name) ++ "h" } },
.unused,
.unused,
.unused,
@@ -73279,7 +73221,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = @tagName(name) ++ "f" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = @tagName(name) ++ "f" } },
.unused,
.unused,
.unused,
@@ -73306,7 +73248,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = @tagName(name) ++ "f" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = @tagName(name) ++ "f" } },
.unused,
.unused,
.unused,
@@ -73336,7 +73278,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = @tagName(name) ++ "f" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = @tagName(name) ++ "f" } },
.unused,
.unused,
.unused,
@@ -73364,7 +73306,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = @tagName(name) } } },
+ .{ .type = .usize, .kind = .{ .extern_func = @tagName(name) } },
.unused,
.unused,
.unused,
@@ -73391,7 +73333,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = @tagName(name) } } },
+ .{ .type = .usize, .kind = .{ .extern_func = @tagName(name) } },
.unused,
.unused,
.unused,
@@ -73421,7 +73363,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = @tagName(name) } } },
+ .{ .type = .usize, .kind = .{ .extern_func = @tagName(name) } },
.unused,
.unused,
.unused,
@@ -73451,7 +73393,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = @tagName(name) } } },
+ .{ .type = .usize, .kind = .{ .extern_func = @tagName(name) } },
.unused,
.unused,
.unused,
@@ -73482,7 +73424,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__" ++ @tagName(name) ++ "x" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__" ++ @tagName(name) ++ "x" } },
.unused,
.unused,
.unused,
@@ -73509,7 +73451,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__" ++ @tagName(name) ++ "x" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__" ++ @tagName(name) ++ "x" } },
.unused,
.unused,
.unused,
@@ -73536,7 +73478,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__" ++ @tagName(name) ++ "x" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__" ++ @tagName(name) ++ "x" } },
.unused,
.unused,
.unused,
@@ -73564,7 +73506,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__" ++ @tagName(name) ++ "x" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__" ++ @tagName(name) ++ "x" } },
.unused,
.unused,
.unused,
@@ -73596,7 +73538,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__" ++ @tagName(name) ++ "x" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__" ++ @tagName(name) ++ "x" } },
.unused,
.unused,
.unused,
@@ -73628,7 +73570,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__" ++ @tagName(name) ++ "x" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__" ++ @tagName(name) ++ "x" } },
.unused,
.unused,
.unused,
@@ -73657,7 +73599,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = @tagName(name) ++ "q" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = @tagName(name) ++ "q" } },
.unused,
.unused,
.unused,
@@ -73684,7 +73626,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = @tagName(name) ++ "q" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = @tagName(name) ++ "q" } },
.unused,
.unused,
.unused,
@@ -73714,7 +73656,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = @tagName(name) ++ "q" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = @tagName(name) ++ "q" } },
.unused,
.unused,
.unused,
@@ -73744,7 +73686,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = @tagName(name) ++ "q" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = @tagName(name) ++ "q" } },
.unused,
.unused,
.unused,
@@ -75362,12 +75304,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.down => "__floorh",
.up => "__ceilh",
.zero => "__trunch",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -75449,12 +75391,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.down => "__floorh",
.up => "__ceilh",
.zero => "__trunch",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -75485,12 +75427,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.down => "__floorh",
.up => "__ceilh",
.zero => "__trunch",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -75521,12 +75463,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.down => "__floorh",
.up => "__ceilh",
.zero => "__trunch",
- } } } },
+ } } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
.unused,
@@ -75560,12 +75502,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .ax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.down => "__floorh",
.up => "__ceilh",
.zero => "__trunch",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -75637,12 +75579,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.down => "floorf",
.up => "ceilf",
.zero => "truncf",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -75764,12 +75706,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.down => "floorf",
.up => "ceilf",
.zero => "truncf",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -75799,12 +75741,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.down => "floorf",
.up => "ceilf",
.zero => "truncf",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -75874,12 +75816,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.down => "floor",
.up => "ceil",
.zero => "trunc",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -76001,12 +75943,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.down => "floor",
.up => "ceil",
.zero => "trunc",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -76036,12 +75978,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.down => "floor",
.up => "ceil",
.zero => "trunc",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -76071,12 +76013,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.down => "floor",
.up => "ceil",
.zero => "trunc",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -76107,12 +76049,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.down => "__floorx",
.up => "__ceilx",
.zero => "__truncx",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -76139,12 +76081,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.down => "__floorx",
.up => "__ceilx",
.zero => "__truncx",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -76171,12 +76113,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.down => "__floorx",
.up => "__ceilx",
.zero => "__truncx",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -76204,12 +76146,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.down => "__floorx",
.up => "__ceilx",
.zero => "__truncx",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -76241,12 +76183,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.down => "__floorx",
.up => "__ceilx",
.zero => "__truncx",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -76278,12 +76220,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.down => "__floorx",
.up => "__ceilx",
.zero => "__truncx",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -76312,12 +76254,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.down => "floorq",
.up => "ceilq",
.zero => "truncq",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -76344,12 +76286,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.down => "floorq",
.up => "ceilq",
.zero => "truncq",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -76379,12 +76321,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.down => "floorq",
.up => "ceilq",
.zero => "truncq",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -76414,12 +76356,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .{ .type = .usize, .kind = .{ .extern_func = switch (direction) {
else => unreachable,
.down => "floorq",
.up => "ceilq",
.zero => "truncq",
- } } } },
+ } } },
.unused,
.unused,
.unused,
@@ -77051,7 +76993,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -77394,7 +77336,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -77555,7 +77497,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -77922,7 +77864,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -78591,7 +78533,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -78635,7 +78577,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -78679,7 +78621,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -78724,7 +78666,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -78769,7 +78711,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -78816,7 +78758,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -78863,7 +78805,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -78916,7 +78858,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -78969,7 +78911,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -79023,7 +78965,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -79077,7 +79019,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -79133,7 +79075,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -79960,7 +79902,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -80004,7 +79946,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -80048,7 +79990,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -80092,7 +80034,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -80136,7 +80078,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -80180,7 +80122,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -80224,7 +80166,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -80277,7 +80219,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -80330,7 +80272,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -80383,7 +80325,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -80436,7 +80378,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -80489,7 +80431,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -83099,7 +83041,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -83143,7 +83085,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -83187,7 +83129,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -83232,7 +83174,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -83277,7 +83219,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -83324,7 +83266,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -83371,7 +83313,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -83424,7 +83366,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -83477,7 +83419,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -83531,7 +83473,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -83585,7 +83527,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -83641,7 +83583,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmphf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -84482,7 +84424,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -84526,7 +84468,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -84570,7 +84512,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -84614,7 +84556,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -84658,7 +84600,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -84702,7 +84644,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .reg = .edx } },
@@ -84746,7 +84688,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -84799,7 +84741,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -84852,7 +84794,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -84905,7 +84847,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -84958,7 +84900,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -85011,7 +84953,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__cmptf2" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
@@ -85109,6 +85051,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dbg_arg_inline,
=> |air_tag| if (use_old) try cg.airDbgVar(inst) else if (!cg.mod.strip) {
const pl_op = air_datas[@intFromEnum(inst)].pl_op;
+ const air_name: Air.NullTerminatedString = @enumFromInt(pl_op.payload);
+ const ty = cg.typeOf(pl_op.operand);
var ops = try cg.tempsFromOperands(inst, .{pl_op.operand});
var mcv = ops[0].tracking(cg).short;
switch (mcv) {
@@ -85124,13 +85068,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
}
- const name_nts: Air.NullTerminatedString = @enumFromInt(pl_op.payload);
- assert(name_nts != .none);
- const name = name_nts.toSlice(cg.air);
- try cg.mir_local_name_bytes.appendSlice(cg.gpa, name[0 .. name.len + 1]);
-
- const ty = cg.typeOf(pl_op.operand);
- try cg.mir_local_types.append(cg.gpa, ty.toIntern());
+ try cg.mir_locals.append(cg.gpa, .{
+ .name = switch (air_name) {
+ .none => switch (air_tag) {
+ else => unreachable,
+ .dbg_arg_inline => .none,
+ },
+ else => try cg.addString(air_name.toSlice(cg.air)),
+ },
+ .type = ty.toIntern(),
+ });
try cg.genLocalDebugInfo(air_tag, ty, ops[0].tracking(cg).short);
try ops[0].die(cg);
@@ -85398,7 +85345,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncsfhf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__truncsfhf2" } },
.unused,
.unused,
.unused,
@@ -85455,7 +85402,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncsfhf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__truncsfhf2" } },
.unused,
.unused,
.unused,
@@ -85486,7 +85433,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncsfhf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__truncsfhf2" } },
.unused,
.unused,
.unused,
@@ -85517,7 +85464,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncsfhf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__truncsfhf2" } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
.unused,
@@ -85549,7 +85496,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncsfhf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__truncsfhf2" } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
@@ -85580,7 +85527,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncdfhf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__truncdfhf2" } },
.unused,
.unused,
.unused,
@@ -85608,7 +85555,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncdfhf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__truncdfhf2" } },
.unused,
.unused,
.unused,
@@ -85639,7 +85586,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncdfhf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__truncdfhf2" } },
.unused,
.unused,
.unused,
@@ -85670,7 +85617,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncdfhf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__truncdfhf2" } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
.unused,
@@ -85702,7 +85649,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncdfhf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__truncdfhf2" } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
@@ -85919,7 +85866,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncxfhf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__truncxfhf2" } },
.unused,
.unused,
.unused,
@@ -85947,7 +85894,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncxfhf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__truncxfhf2" } },
.unused,
.unused,
.unused,
@@ -85975,7 +85922,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncxfhf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__truncxfhf2" } },
.unused,
.unused,
.unused,
@@ -86005,7 +85952,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncxfhf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__truncxfhf2" } },
.unused,
.unused,
.unused,
@@ -86037,7 +85984,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncxfhf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__truncxfhf2" } },
.unused,
.unused,
.unused,
@@ -86069,7 +86016,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncxfhf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__truncxfhf2" } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
.unused,
@@ -86102,7 +86049,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncxfhf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__truncxfhf2" } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
.unused,
@@ -86243,7 +86190,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfhf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__trunctfhf2" } },
.unused,
.unused,
.unused,
@@ -86271,7 +86218,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfhf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__trunctfhf2" } },
.unused,
.unused,
.unused,
@@ -86302,7 +86249,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfhf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__trunctfhf2" } },
.unused,
.unused,
.unused,
@@ -86333,7 +86280,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfhf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__trunctfhf2" } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
.unused,
@@ -86365,7 +86312,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfhf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__trunctfhf2" } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
@@ -86396,7 +86343,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfsf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__trunctfsf2" } },
.unused,
.unused,
.unused,
@@ -86424,7 +86371,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfsf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__trunctfsf2" } },
.unused,
.unused,
.unused,
@@ -86455,7 +86402,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfsf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__trunctfsf2" } },
.unused,
.unused,
.unused,
@@ -86486,7 +86433,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfsf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__trunctfsf2" } },
.unused,
.unused,
.unused,
@@ -86515,7 +86462,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfdf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__trunctfdf2" } },
.unused,
.unused,
.unused,
@@ -86543,7 +86490,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfdf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__trunctfdf2" } },
.unused,
.unused,
.unused,
@@ -86574,7 +86521,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfdf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__trunctfdf2" } },
.unused,
.unused,
.unused,
@@ -86605,7 +86552,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfdf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__trunctfdf2" } },
.unused,
.unused,
.unused,
@@ -86634,7 +86581,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfxf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__trunctfxf2" } },
.unused,
.unused,
.unused,
@@ -86662,7 +86609,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfxf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__trunctfxf2" } },
.unused,
.unused,
.unused,
@@ -86694,7 +86641,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfxf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__trunctfxf2" } },
.unused,
.unused,
.unused,
@@ -86726,7 +86673,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfxf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__trunctfxf2" } },
.unused,
.unused,
.unused,
@@ -86806,7 +86753,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfsf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendhfsf2" } },
.unused,
.unused,
.unused,
@@ -86863,7 +86810,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfsf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendhfsf2" } },
.unused,
.unused,
.unused,
@@ -86895,7 +86842,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfsf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendhfsf2" } },
.unused,
.unused,
.unused,
@@ -86929,7 +86876,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .ax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfsf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendhfsf2" } },
.unused,
.unused,
.unused,
@@ -87026,7 +86973,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfdf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendhfdf2" } },
.unused,
.unused,
.unused,
@@ -87087,7 +87034,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfdf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendhfdf2" } },
.unused,
.unused,
.unused,
@@ -87119,7 +87066,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfdf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendhfdf2" } },
.unused,
.unused,
.unused,
@@ -87153,7 +87100,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .ax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfdf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendhfdf2" } },
.unused,
.unused,
.unused,
@@ -87209,7 +87156,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfxf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendhfxf2" } },
.unused,
.unused,
.unused,
@@ -87237,7 +87184,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfxf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendhfxf2" } },
.unused,
.unused,
.unused,
@@ -87270,7 +87217,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfxf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendhfxf2" } },
.unused,
.unused,
.unused,
@@ -87305,7 +87252,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .ax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfxf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendhfxf2" } },
.unused,
.unused,
.unused,
@@ -87335,7 +87282,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhftf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendhftf2" } },
.unused,
.unused,
.unused,
@@ -87363,7 +87310,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhftf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendhftf2" } },
.unused,
.unused,
.unused,
@@ -87395,7 +87342,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhftf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendhftf2" } },
.unused,
.unused,
.unused,
@@ -87429,7 +87376,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .ax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhftf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendhftf2" } },
.unused,
.unused,
.unused,
@@ -87696,7 +87643,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendsftf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendsftf2" } },
.unused,
.unused,
.unused,
@@ -87724,7 +87671,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendsftf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendsftf2" } },
.unused,
.unused,
.unused,
@@ -87755,7 +87702,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendsftf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendsftf2" } },
.unused,
.unused,
.unused,
@@ -87786,7 +87733,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendsftf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendsftf2" } },
.unused,
.unused,
.unused,
@@ -87869,7 +87816,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extenddftf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extenddftf2" } },
.unused,
.unused,
.unused,
@@ -87897,7 +87844,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extenddftf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extenddftf2" } },
.unused,
.unused,
.unused,
@@ -87928,7 +87875,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extenddftf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extenddftf2" } },
.unused,
.unused,
.unused,
@@ -87959,7 +87906,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extenddftf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extenddftf2" } },
.unused,
.unused,
.unused,
@@ -87990,7 +87937,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendxftf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendxftf2" } },
.unused,
.unused,
.unused,
@@ -88018,7 +87965,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendxftf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendxftf2" } },
.unused,
.unused,
.unused,
@@ -88046,7 +87993,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendxftf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendxftf2" } },
.unused,
.unused,
.unused,
@@ -88076,7 +88023,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendxftf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendxftf2" } },
.unused,
.unused,
.unused,
@@ -88108,7 +88055,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendxftf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendxftf2" } },
.unused,
.unused,
.unused,
@@ -88140,7 +88087,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendxftf2" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__extendxftf2" } },
.unused,
.unused,
.unused,
@@ -98891,9 +98838,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
} }) catch |err| switch (err) {
error.SelectFailed => {
const elem_size = res_ty.abiSize(zcu);
- const base = try cg.tempAllocReg(.usize, abi.RegisterClass.gp);
+ var base = try cg.tempAllocReg(.usize, abi.RegisterClass.gp);
while (try ops[0].toBase(false, cg) or
- try ops[1].toRegClass(true, .general_purpose, cg))
+ try ops[1].toRegClass(true, .general_purpose, cg) or
+ try base.toRegClass(true, .general_purpose, cg))
{}
const base_reg = base.tracking(cg).short.register.to64();
const rhs_reg = ops[1].tracking(cg).short.register.to64();
@@ -99334,7 +99282,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfsi" } },
.unused,
.unused,
.unused,
@@ -99360,7 +99308,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunshfsi" } },
.unused,
.unused,
.unused,
@@ -99386,7 +99334,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfdi" } },
.unused,
.unused,
.unused,
@@ -99412,7 +99360,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunshfdi" } },
.unused,
.unused,
.unused,
@@ -99438,7 +99386,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfti" } },
.unused,
.unused,
.unused,
@@ -99464,7 +99412,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunshfti" } },
.unused,
.unused,
.unused,
@@ -99490,7 +99438,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfdi" } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .u32, .kind = .{ .reg = .ecx } },
@@ -99521,7 +99469,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunshfdi" } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .u32, .kind = .{ .reg = .ecx } },
@@ -99615,7 +99563,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -99647,7 +99595,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -99679,7 +99627,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -99711,7 +99659,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -99745,7 +99693,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfsi" } },
.unused,
.unused,
.unused,
@@ -99778,7 +99726,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfsi" } },
.unused,
.unused,
.unused,
@@ -99899,7 +99847,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -99931,7 +99879,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -99965,7 +99913,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfsi" } },
.unused,
.unused,
.unused,
@@ -100058,7 +100006,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -100090,7 +100038,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunshfsi" } },
.{ .type = .u32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -100122,7 +100070,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -100154,7 +100102,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunshfsi" } },
.{ .type = .u32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -100188,7 +100136,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .i32, .kind = .{ .reg = .eax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfsi" } },
.unused,
.unused,
.unused,
@@ -100221,7 +100169,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .reg = .eax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunshfsi" } },
.unused,
.unused,
.unused,
@@ -100284,7 +100232,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfdi" } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -100316,7 +100264,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunshfdi" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -100348,7 +100296,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfdi" } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -100380,7 +100328,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunshfdi" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -100414,7 +100362,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .i64, .kind = .{ .reg = .rax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfdi" } },
.unused,
.unused,
.unused,
@@ -100447,7 +100395,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunshfdi" } },
.unused,
.unused,
.unused,
@@ -100478,7 +100426,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
@@ -100511,7 +100459,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunshfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
@@ -100544,7 +100492,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
@@ -100577,7 +100525,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunshfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
@@ -100612,7 +100560,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfti" } },
.{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
@@ -100646,7 +100594,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunshfti" } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
@@ -100681,7 +100629,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfei" } },
.unused,
.unused,
.unused,
@@ -100716,7 +100664,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunshfei" } },
.unused,
.unused,
.unused,
@@ -100751,7 +100699,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfei" } },
.unused,
.unused,
.unused,
@@ -100786,7 +100734,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunshfei" } },
.unused,
.unused,
.unused,
@@ -100822,7 +100770,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixhfei" } },
.unused,
.unused,
.unused,
@@ -100858,7 +100806,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunshfei" } },
.unused,
.unused,
.unused,
@@ -101000,7 +100948,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixsfti" } },
.unused,
.unused,
.unused,
@@ -101026,7 +100974,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunssfti" } },
.unused,
.unused,
.unused,
@@ -101055,7 +101003,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .i64, .kind = .{ .rc = .general_purpose } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
.{ .type = .vector_4_f32, .kind = .{ .smax_mem = .{} } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunssfti" } },
.{ .type = .i64, .kind = .{ .reg = .rdx } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .u32, .kind = .{ .reg = .ecx } },
@@ -101096,7 +101044,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .i64, .kind = .{ .rc = .general_purpose } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
.{ .type = .vector_4_f32, .kind = .{ .smax_mem = .{} } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunssfti" } },
.{ .type = .i64, .kind = .{ .reg = .rdx } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .u32, .kind = .{ .reg = .ecx } },
@@ -101137,7 +101085,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
.{ .type = .vector_4_f32, .kind = .{ .smax_mem = .{} } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunssfti" } },
.{ .type = .u32, .kind = .{ .reg = .ecx } },
.{ .type = .i64, .kind = .{ .reg = .rdx } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
@@ -101175,7 +101123,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunssfti" } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
.{ .type = .i64, .kind = .{ .reg = .rdx } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
@@ -101385,7 +101333,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixsfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -101416,7 +101364,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixsfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -101447,7 +101395,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixsfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -101478,7 +101426,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixsfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -101681,7 +101629,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixsfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -101712,7 +101660,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixsfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -101825,7 +101773,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixsfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -101856,7 +101804,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunssfsi" } },
.{ .type = .u32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -101887,7 +101835,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixsfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -101918,7 +101866,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunssfsi" } },
.{ .type = .u32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -102007,7 +101955,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixsfdi" } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -102038,7 +101986,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunssfdi" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -102069,7 +102017,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixsfdi" } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -102100,7 +102048,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunssfdi" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -102131,7 +102079,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixsfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
@@ -102163,7 +102111,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunssfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
@@ -102195,7 +102143,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixsfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
@@ -102227,7 +102175,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunssfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
@@ -102262,7 +102210,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixsfei" } },
.unused,
.unused,
.unused,
@@ -102296,7 +102244,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunssfei" } },
.unused,
.unused,
.unused,
@@ -102330,7 +102278,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixsfei" } },
.unused,
.unused,
.unused,
@@ -102364,7 +102312,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunssfei" } },
.unused,
.unused,
.unused,
@@ -102703,7 +102651,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixdfti" } },
.unused,
.unused,
.unused,
@@ -102729,7 +102677,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsdfti" } },
.unused,
.unused,
.unused,
@@ -102757,7 +102705,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixdfei" } },
.unused,
.unused,
.unused,
@@ -102785,7 +102733,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsdfei" } },
.unused,
.unused,
.unused,
@@ -103090,7 +103038,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixdfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -103121,7 +103069,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixdfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -103152,7 +103100,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixdfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -103183,7 +103131,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixsfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -103214,7 +103162,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixdfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -103246,7 +103194,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixsfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -103577,7 +103525,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixdfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -103608,7 +103556,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixdfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -103639,7 +103587,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixdfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -103837,7 +103785,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixdfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -103868,7 +103816,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsdfsi" } },
.{ .type = .u32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -103899,7 +103847,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixdfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -103930,7 +103878,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsdfsi" } },
.{ .type = .u32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -103961,7 +103909,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixdfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -103993,7 +103941,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsdfsi" } },
.{ .type = .u32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -104118,7 +104066,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixdfdi" } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -104149,7 +104097,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsdfdi" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -104180,7 +104128,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixdfdi" } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -104211,7 +104159,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsdfdi" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -104242,7 +104190,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixdfdi" } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -104274,7 +104222,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsdfdi" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -104306,7 +104254,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixdfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
@@ -104338,7 +104286,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsdfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
@@ -104370,7 +104318,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixdfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
@@ -104402,7 +104350,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsdfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
@@ -104434,7 +104382,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixdfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
@@ -104467,7 +104415,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsdfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
@@ -104503,7 +104451,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixdfei" } },
.unused,
.unused,
.unused,
@@ -104537,7 +104485,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsdfei" } },
.unused,
.unused,
.unused,
@@ -104571,7 +104519,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixdfei" } },
.unused,
.unused,
.unused,
@@ -104605,7 +104553,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsdfei" } },
.unused,
.unused,
.unused,
@@ -104639,7 +104587,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixdfei" } },
.unused,
.unused,
.unused,
@@ -104674,7 +104622,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsdfei" } },
.unused,
.unused,
.unused,
@@ -105695,7 +105643,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsxfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -105727,7 +105675,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsxfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -105759,7 +105707,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsxfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -105790,7 +105738,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixxfti" } },
.unused,
.unused,
.unused,
@@ -105818,7 +105766,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsxfti" } },
.unused,
.unused,
.unused,
@@ -105846,7 +105794,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixxfti" } },
.unused,
.unused,
.unused,
@@ -105874,7 +105822,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsxfti" } },
.unused,
.unused,
.unused,
@@ -105902,7 +105850,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixxfti" } },
.unused,
.unused,
.unused,
@@ -105930,7 +105878,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsxfti" } },
.unused,
.unused,
.unused,
@@ -105959,7 +105907,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixxfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
@@ -105992,7 +105940,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsxfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
@@ -106025,7 +105973,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixxfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
@@ -106058,7 +106006,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsxfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
@@ -106091,7 +106039,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixxfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
@@ -106124,7 +106072,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsxfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
@@ -106158,7 +106106,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixxfei" } },
.unused,
.unused,
.unused,
@@ -106188,7 +106136,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsxfei" } },
.unused,
.unused,
.unused,
@@ -106218,7 +106166,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixxfei" } },
.unused,
.unused,
.unused,
@@ -106248,7 +106196,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsxfei" } },
.unused,
.unused,
.unused,
@@ -106278,7 +106226,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixxfei" } },
.unused,
.unused,
.unused,
@@ -106308,7 +106256,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsxfei" } },
.unused,
.unused,
.unused,
@@ -106340,7 +106288,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixxfei" } },
.unused,
.unused,
.unused,
@@ -106375,7 +106323,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsxfei" } },
.unused,
.unused,
.unused,
@@ -106410,7 +106358,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixxfei" } },
.unused,
.unused,
.unused,
@@ -106445,7 +106393,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsxfei" } },
.unused,
.unused,
.unused,
@@ -106480,7 +106428,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixxfei" } },
.unused,
.unused,
.unused,
@@ -106515,7 +106463,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunsxfei" } },
.unused,
.unused,
.unused,
@@ -106547,7 +106495,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -106580,7 +106528,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -106613,7 +106561,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -106646,7 +106594,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -106679,7 +106627,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -106712,7 +106660,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -106744,7 +106692,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -106775,7 +106723,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -106806,7 +106754,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -106835,7 +106783,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfsi" } },
.unused,
.unused,
.unused,
@@ -106861,7 +106809,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunstfsi" } },
.unused,
.unused,
.unused,
@@ -106889,7 +106837,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -106920,7 +106868,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunstfsi" } },
.{ .type = .u32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -106951,7 +106899,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -106982,7 +106930,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunstfsi" } },
.{ .type = .u32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -107013,7 +106961,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfsi" } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -107044,7 +106992,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfsi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunstfsi" } },
.{ .type = .u32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -107073,7 +107021,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfdi" } },
.unused,
.unused,
.unused,
@@ -107099,7 +107047,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunstfdi" } },
.unused,
.unused,
.unused,
@@ -107127,7 +107075,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfdi" } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -107158,7 +107106,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunstfdi" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -107189,7 +107137,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfdi" } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -107220,7 +107168,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunstfdi" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -107251,7 +107199,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfdi" } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -107282,7 +107230,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfdi" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunstfdi" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -107311,7 +107259,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfti" } },
.unused,
.unused,
.unused,
@@ -107337,7 +107285,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunstfti" } },
.unused,
.unused,
.unused,
@@ -107365,7 +107313,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
@@ -107397,7 +107345,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunstfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
@@ -107429,7 +107377,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
@@ -107461,7 +107409,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunstfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
@@ -107493,7 +107441,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
@@ -107525,7 +107473,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfti" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunstfti" } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
@@ -107557,7 +107505,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfei" } },
.unused,
.unused,
.unused,
@@ -107585,7 +107533,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunstfei" } },
.unused,
.unused,
.unused,
@@ -107616,7 +107564,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfei" } },
.unused,
.unused,
.unused,
@@ -107650,7 +107598,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunstfei" } },
.unused,
.unused,
.unused,
@@ -107684,7 +107632,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfei" } },
.unused,
.unused,
.unused,
@@ -107718,7 +107666,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunstfei" } },
.unused,
.unused,
.unused,
@@ -107752,7 +107700,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixtfei" } },
.unused,
.unused,
.unused,
@@ -107786,7 +107734,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfei" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fixunstfei" } },
.unused,
.unused,
.unused,
@@ -108034,7 +107982,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsihf" } },
.unused,
.unused,
.unused,
@@ -108061,7 +108009,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsihf" } },
.unused,
.unused,
.unused,
@@ -108088,7 +108036,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsihf" } },
.unused,
.unused,
.unused,
@@ -108115,7 +108063,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsihf" } },
.unused,
.unused,
.unused,
@@ -108142,7 +108090,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsihf" } },
.unused,
.unused,
.unused,
@@ -108168,7 +108116,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsihf" } },
.unused,
.unused,
.unused,
@@ -108194,7 +108142,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatdihf" } },
.unused,
.unused,
.unused,
@@ -108220,7 +108168,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatundihf" } },
.unused,
.unused,
.unused,
@@ -108246,7 +108194,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floattihf" } },
.unused,
.unused,
.unused,
@@ -108272,7 +108220,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuntihf" } },
.unused,
.unused,
.unused,
@@ -108300,7 +108248,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floateihf" } },
.unused,
.unused,
.unused,
@@ -108328,7 +108276,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuneihf" } },
.unused,
.unused,
.unused,
@@ -108532,7 +108480,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -108563,7 +108511,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -108594,7 +108542,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -108625,7 +108573,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -108656,7 +108604,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -108688,7 +108636,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -108720,7 +108668,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f32, .kind = .mem },
.unused,
@@ -108753,7 +108701,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f32, .kind = .mem },
.unused,
@@ -108786,7 +108734,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -108817,7 +108765,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -108848,7 +108796,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -108879,7 +108827,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -108910,7 +108858,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -108942,7 +108890,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -108974,7 +108922,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f32, .kind = .mem },
.unused,
@@ -109007,7 +108955,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f32, .kind = .mem },
.unused,
@@ -109216,7 +109164,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -109247,7 +109195,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -109278,7 +109226,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -109310,7 +109258,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f32, .kind = .mem },
.unused,
@@ -109343,7 +109291,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -109374,7 +109322,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -109405,7 +109353,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -109437,7 +109385,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f32, .kind = .mem },
.unused,
@@ -109554,7 +109502,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -109585,7 +109533,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -109616,7 +109564,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -109648,7 +109596,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f32, .kind = .mem },
.unused,
@@ -109681,7 +109629,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -109712,7 +109660,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -109743,7 +109691,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -109775,7 +109723,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f32, .kind = .mem },
.unused,
@@ -109839,7 +109787,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatdihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -109870,7 +109818,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatdihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -109901,7 +109849,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatdihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -109933,7 +109881,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatdihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f32, .kind = .mem },
.unused,
@@ -109966,7 +109914,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatundihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -109997,7 +109945,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatundihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -110028,7 +109976,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatundihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -110060,7 +110008,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatundihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f32, .kind = .mem },
.unused,
@@ -110094,7 +110042,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floattihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -110126,7 +110074,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floattihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -110158,7 +110106,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floattihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -110191,7 +110139,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floattihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f32, .kind = .mem },
.unused,
@@ -110225,7 +110173,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuntihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -110257,7 +110205,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuntihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -110289,7 +110237,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuntihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -110322,7 +110270,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuntihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f32, .kind = .mem },
.unused,
@@ -110357,7 +110305,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floateihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -110391,7 +110339,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floateihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -110425,7 +110373,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floateihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -110460,7 +110408,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floateihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f32, .kind = .mem },
.unused,
@@ -110496,7 +110444,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuneihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -110530,7 +110478,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuneihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -110564,7 +110512,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuneihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -110599,7 +110547,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneihf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuneihf" } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f32, .kind = .mem },
.unused,
@@ -111023,7 +110971,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floattisf" } },
.unused,
.unused,
.unused,
@@ -111049,7 +110997,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuntisf" } },
.unused,
.unused,
.unused,
@@ -111077,7 +111025,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floateisf" } },
.unused,
.unused,
.unused,
@@ -111105,7 +111053,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuneisf" } },
.unused,
.unused,
.unused,
@@ -111391,7 +111339,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -111422,7 +111370,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -111453,7 +111401,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -111484,7 +111432,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -111515,7 +111463,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -111546,7 +111494,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -111577,7 +111525,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -111608,7 +111556,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -111897,7 +111845,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -111928,7 +111876,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -111959,7 +111907,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -111990,7 +111938,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -112173,7 +112121,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -112204,7 +112152,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -112235,7 +112183,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -112266,7 +112214,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -112357,7 +112305,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatdisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -112388,7 +112336,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatdisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -112419,7 +112367,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatundisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -112450,7 +112398,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatundisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -112482,7 +112430,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floattisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -112514,7 +112462,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floattisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -112546,7 +112494,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuntisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -112578,7 +112526,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuntisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -112611,7 +112559,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floateisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -112645,7 +112593,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floateisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -112679,7 +112627,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuneisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -112713,7 +112661,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneisf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuneisf" } },
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -113353,7 +113301,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floattidf" } },
.unused,
.unused,
.unused,
@@ -113379,7 +113327,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuntidf" } },
.unused,
.unused,
.unused,
@@ -113407,7 +113355,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floateidf" } },
.unused,
.unused,
.unused,
@@ -113435,7 +113383,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuneidf" } },
.unused,
.unused,
.unused,
@@ -113729,7 +113677,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -113760,7 +113708,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -113791,7 +113739,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -113822,7 +113770,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -113853,7 +113801,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -113884,7 +113832,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -113915,7 +113863,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -113946,7 +113894,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -113977,7 +113925,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -114008,7 +113956,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -114039,7 +113987,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -114070,7 +114018,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -114363,7 +114311,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -114394,7 +114342,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -114425,7 +114373,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -114456,7 +114404,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -114487,7 +114435,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -114518,7 +114466,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -114672,7 +114620,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -114703,7 +114651,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -114734,7 +114682,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -114765,7 +114713,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -114796,7 +114744,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -114827,7 +114775,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -114918,7 +114866,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatdidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -114949,7 +114897,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatdidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -114980,7 +114928,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatdidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -115011,7 +114959,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatundidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -115042,7 +114990,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatundidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -115073,7 +115021,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatundidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -115105,7 +115053,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floattidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -115137,7 +115085,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floattidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -115169,7 +115117,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floattidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -115201,7 +115149,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuntidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -115233,7 +115181,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuntidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -115265,7 +115213,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuntidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -115298,7 +115246,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floateidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -115332,7 +115280,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floateidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -115366,7 +115314,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floateidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -115400,7 +115348,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuneidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -115434,7 +115382,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuneidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -115468,7 +115416,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneidf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuneidf" } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -115715,7 +115663,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattixf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floattixf" } },
.unused,
.unused,
.unused,
@@ -115741,7 +115689,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntixf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuntixf" } },
.unused,
.unused,
.unused,
@@ -115769,7 +115717,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateixf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floateixf" } },
.unused,
.unused,
.unused,
@@ -115797,7 +115745,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneixf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuneixf" } },
.unused,
.unused,
.unused,
@@ -115958,7 +115906,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsixf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsixf" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
@@ -115992,7 +115940,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsixf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsixf" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
@@ -116026,7 +115974,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsixf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsixf" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
@@ -116060,7 +116008,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsixf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsixf" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
@@ -116122,7 +116070,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsixf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsixf" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
@@ -116154,7 +116102,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsixf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsixf" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
@@ -116215,7 +116163,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsixf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsixf" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
@@ -116247,7 +116195,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsixf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsixf" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
@@ -116308,7 +116256,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdixf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatdixf" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
@@ -116340,7 +116288,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundixf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatundixf" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
@@ -116373,7 +116321,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattixf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floattixf" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
@@ -116406,7 +116354,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntixf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuntixf" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
@@ -116440,7 +116388,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateixf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floateixf" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
@@ -116475,7 +116423,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneixf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuneixf" } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
@@ -116508,7 +116456,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsitf" } },
.unused,
.unused,
.unused,
@@ -116536,7 +116484,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsitf" } },
.unused,
.unused,
.unused,
@@ -116564,7 +116512,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsitf" } },
.unused,
.unused,
.unused,
@@ -116592,7 +116540,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsitf" } },
.unused,
.unused,
.unused,
@@ -116618,7 +116566,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsitf" } },
.unused,
.unused,
.unused,
@@ -116644,7 +116592,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsitf" } },
.unused,
.unused,
.unused,
@@ -116670,7 +116618,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatditf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatditf" } },
.unused,
.unused,
.unused,
@@ -116696,7 +116644,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunditf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunditf" } },
.unused,
.unused,
.unused,
@@ -116722,7 +116670,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floattitf" } },
.unused,
.unused,
.unused,
@@ -116748,7 +116696,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuntitf" } },
.unused,
.unused,
.unused,
@@ -116776,7 +116724,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floateitf" } },
.unused,
.unused,
.unused,
@@ -116804,7 +116752,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuneitf" } },
.unused,
.unused,
.unused,
@@ -116833,7 +116781,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -116866,7 +116814,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -116899,7 +116847,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -116932,7 +116880,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -116965,7 +116913,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -116998,7 +116946,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117031,7 +116979,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117064,7 +117012,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117097,7 +117045,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117130,7 +117078,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117163,7 +117111,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117196,7 +117144,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117228,7 +117176,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117259,7 +117207,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117290,7 +117238,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117321,7 +117269,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117352,7 +117300,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117383,7 +117331,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117414,7 +117362,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117445,7 +117393,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117476,7 +117424,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117507,7 +117455,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117538,7 +117486,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117569,7 +117517,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunsitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117600,7 +117548,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatditf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatditf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117631,7 +117579,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatditf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatditf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117662,7 +117610,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatditf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatditf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117693,7 +117641,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunditf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunditf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117724,7 +117672,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunditf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunditf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117755,7 +117703,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunditf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatunditf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117787,7 +117735,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floattitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117819,7 +117767,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floattitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117851,7 +117799,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floattitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117883,7 +117831,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuntitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117915,7 +117863,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuntitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117947,7 +117895,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuntitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -117980,7 +117928,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floateitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -118014,7 +117962,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floateitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -118048,7 +117996,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floateitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -118082,7 +118030,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuneitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -118116,7 +118064,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuneitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -118150,7 +118098,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneitf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__floatuneitf" } },
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -131865,7 +131813,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fminh" } },
.unused,
.unused,
.unused,
@@ -131898,7 +131846,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fminh" } },
.unused,
.unused,
.unused,
@@ -131933,7 +131881,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .ax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fminh" } },
.unused,
.unused,
.unused,
@@ -133533,7 +133481,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fminq" } },
.unused,
.unused,
.unused,
@@ -133564,7 +133512,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fminq" } },
.unused,
.unused,
.unused,
@@ -133595,7 +133543,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fminq" } },
.unused,
.unused,
.unused,
@@ -141985,7 +141933,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmaxh" } },
.unused,
.unused,
.unused,
@@ -142018,7 +141966,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmaxh" } },
.unused,
.unused,
.unused,
@@ -142053,7 +142001,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .ax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmaxh" } },
.unused,
.unused,
.unused,
@@ -143661,7 +143609,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmaxq" } },
.unused,
.unused,
.unused,
@@ -143692,7 +143640,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmaxq" } },
.unused,
.unused,
.unused,
@@ -143723,7 +143671,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmaxq" } },
.unused,
.unused,
.unused,
@@ -147656,7 +147604,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -147689,7 +147637,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -147724,7 +147672,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .ax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -148241,7 +148189,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addtf3" } },
.unused,
.unused,
.unused,
@@ -148272,7 +148220,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addtf3" } },
.unused,
.unused,
.unused,
@@ -148303,7 +148251,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addtf3" } },
.unused,
.unused,
.unused,
@@ -151315,7 +151263,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__mulhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__mulhf3" } },
.unused,
.unused,
.unused,
@@ -151348,7 +151296,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__mulhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__mulhf3" } },
.unused,
.unused,
.unused,
@@ -151383,7 +151331,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .ax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__mulhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__mulhf3" } },
.unused,
.unused,
.unused,
@@ -151780,7 +151728,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__multf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__multf3" } },
.unused,
.unused,
.unused,
@@ -151811,7 +151759,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__multf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__multf3" } },
.unused,
.unused,
.unused,
@@ -151842,7 +151790,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__multf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__multf3" } },
.unused,
.unused,
.unused,
@@ -152354,7 +152302,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fminh" } },
.unused,
.unused,
.unused,
@@ -152387,7 +152335,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fminh" } },
.unused,
.unused,
.unused,
@@ -152422,7 +152370,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .ax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fminh" } },
.unused,
.unused,
.unused,
@@ -153502,7 +153450,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fminq" } },
.unused,
.unused,
.unused,
@@ -153533,7 +153481,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fminq" } },
.unused,
.unused,
.unused,
@@ -153564,7 +153512,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fminq" } },
.unused,
.unused,
.unused,
@@ -154046,7 +153994,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmaxh" } },
.unused,
.unused,
.unused,
@@ -154079,7 +154027,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmaxh" } },
.unused,
.unused,
.unused,
@@ -154114,7 +154062,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .ax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmaxh" } },
.unused,
.unused,
.unused,
@@ -155194,7 +155142,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmaxq" } },
.unused,
.unused,
.unused,
@@ -155225,7 +155173,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmaxq" } },
.unused,
.unused,
.unused,
@@ -155256,7 +155204,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmaxq" } },
.unused,
.unused,
.unused,
@@ -155987,7 +155935,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -156020,7 +155968,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -156055,7 +156003,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .ax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addhf3" } },
.unused,
.unused,
.unused,
@@ -157453,7 +157401,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addtf3" } },
.unused,
.unused,
.unused,
@@ -157484,7 +157432,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addtf3" } },
.unused,
.unused,
.unused,
@@ -157515,7 +157463,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__addtf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__addtf3" } },
.unused,
.unused,
.unused,
@@ -157997,7 +157945,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__mulhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__mulhf3" } },
.unused,
.unused,
.unused,
@@ -158030,7 +157978,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__mulhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__mulhf3" } },
.unused,
.unused,
.unused,
@@ -158065,7 +158013,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .ax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__mulhf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__mulhf3" } },
.unused,
.unused,
.unused,
@@ -158996,7 +158944,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__multf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__multf3" } },
.unused,
.unused,
.unused,
@@ -159027,7 +158975,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__multf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__multf3" } },
.unused,
.unused,
.unused,
@@ -159058,7 +159006,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__multf3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__multf3" } },
.unused,
.unused,
.unused,
@@ -160939,7 +160887,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = @tagName(symbol) } } },
+ .{ .type = .usize, .kind = .{ .extern_func = @tagName(symbol) } },
.unused,
.unused,
.unused,
@@ -160988,7 +160936,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"32" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .lazy_symbol = .{ .kind = .code, .ref = .src0 } } },
+ .{ .type = .usize, .kind = .{ .lazy_sym = .{ .kind = .code, .ref = .src0 } } },
.unused,
.unused,
.unused,
@@ -161014,7 +160962,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .lazy_symbol = .{ .kind = .code, .ref = .src0 } } },
+ .{ .type = .usize, .kind = .{ .lazy_sym = .{ .kind = .code, .ref = .src0 } } },
.unused,
.unused,
.unused,
@@ -161039,7 +160987,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"8" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .lazy_symbol = .{ .kind = .code, .ref = .src0 } } },
+ .{ .type = .usize, .kind = .{ .lazy_sym = .{ .kind = .code, .ref = .src0 } } },
.unused,
.unused,
.unused,
@@ -161079,7 +161027,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"32" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .lazy_symbol = .{ .kind = .code, .ref = .src0 } } },
+ .{ .type = .usize, .kind = .{ .lazy_sym = .{ .kind = .code, .ref = .src0 } } },
.unused,
.unused,
.unused,
@@ -161104,7 +161052,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .lazy_symbol = .{ .kind = .code, .ref = .src0 } } },
+ .{ .type = .usize, .kind = .{ .lazy_sym = .{ .kind = .code, .ref = .src0 } } },
.unused,
.unused,
.unused,
@@ -161128,7 +161076,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"8" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .lazy_symbol = .{ .kind = .code, .ref = .src0 } } },
+ .{ .type = .usize, .kind = .{ .lazy_sym = .{ .kind = .code, .ref = .src0 } } },
.unused,
.unused,
.unused,
@@ -161167,7 +161115,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_gpr, .none, .none } },
},
.extra_temps = .{
- .{ .type = .anyerror, .kind = .{ .lazy_symbol = .{ .kind = .const_data } } },
+ .{ .type = .anyerror, .kind = .{ .lazy_sym = .{ .kind = .const_data } } },
.{ .type = .u32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
.unused,
.unused,
@@ -161196,7 +161144,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_gpr, .none, .none } },
},
.extra_temps = .{
- .{ .type = .anyerror, .kind = .{ .lazy_symbol = .{ .kind = .const_data } } },
+ .{ .type = .anyerror, .kind = .{ .lazy_sym = .{ .kind = .const_data } } },
.{ .type = .u32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
.unused,
.unused,
@@ -161225,7 +161173,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_gpr, .none, .none } },
},
.extra_temps = .{
- .{ .type = .anyerror, .kind = .{ .lazy_symbol = .{ .kind = .const_data } } },
+ .{ .type = .anyerror, .kind = .{ .lazy_sym = .{ .kind = .const_data } } },
.{ .type = .u32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
.unused,
.unused,
@@ -161276,7 +161224,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"32" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .lazy_symbol = .{ .kind = .code, .ref = .src1 } } },
+ .{ .type = .usize, .kind = .{ .lazy_sym = .{ .kind = .code, .ref = .src1 } } },
.unused,
.unused,
.unused,
@@ -161302,7 +161250,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .lazy_symbol = .{ .kind = .code, .ref = .src1 } } },
+ .{ .type = .usize, .kind = .{ .lazy_sym = .{ .kind = .code, .ref = .src1 } } },
.unused,
.unused,
.unused,
@@ -161327,7 +161275,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"8" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .lazy_symbol = .{ .kind = .code, .ref = .src1 } } },
+ .{ .type = .usize, .kind = .{ .lazy_sym = .{ .kind = .code, .ref = .src1 } } },
.unused,
.unused,
.unused,
@@ -161523,7 +161471,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmah" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmah" } },
.unused,
.unused,
.unused,
@@ -161666,7 +161614,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
.{ .type = .f16, .kind = .{ .reg = .xmm2 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmah" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmah" } },
.unused,
.unused,
.unused,
@@ -161703,7 +161651,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
.{ .type = .f16, .kind = .{ .reg = .xmm2 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmah" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmah" } },
.unused,
.unused,
.unused,
@@ -161742,7 +161690,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
.{ .type = .f16, .kind = .{ .reg = .xmm2 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmah" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmah" } },
.{ .type = .f16, .kind = .{ .reg = .ax } },
.unused,
.unused,
@@ -161784,7 +161732,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
.{ .type = .f16, .kind = .{ .reg = .xmm2 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmah" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmah" } },
.unused,
.unused,
.unused,
@@ -161872,7 +161820,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmaf" } },
.unused,
.unused,
.unused,
@@ -162038,7 +161986,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.{ .type = .f32, .kind = .{ .reg = .xmm1 } },
.{ .type = .f32, .kind = .{ .reg = .xmm2 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmaf" } },
.unused,
.unused,
.unused,
@@ -162074,7 +162022,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.{ .type = .f32, .kind = .{ .reg = .xmm1 } },
.{ .type = .f32, .kind = .{ .reg = .xmm2 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaf" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmaf" } },
.unused,
.unused,
.unused,
@@ -162156,7 +162104,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fma" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fma" } },
.unused,
.unused,
.unused,
@@ -162322,7 +162270,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.{ .type = .f64, .kind = .{ .reg = .xmm1 } },
.{ .type = .f64, .kind = .{ .reg = .xmm2 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fma" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fma" } },
.unused,
.unused,
.unused,
@@ -162358,7 +162306,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.{ .type = .f64, .kind = .{ .reg = .xmm1 } },
.{ .type = .f64, .kind = .{ .reg = .xmm2 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fma" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fma" } },
.unused,
.unused,
.unused,
@@ -162394,7 +162342,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.{ .type = .f64, .kind = .{ .reg = .xmm1 } },
.{ .type = .f64, .kind = .{ .reg = .xmm2 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fma" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fma" } },
.unused,
.unused,
.unused,
@@ -162431,7 +162379,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmax" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmax" } },
.unused,
.unused,
.unused,
@@ -162467,7 +162415,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .xmm0 } },
.{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmax" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__fmax" } },
.unused,
.unused,
.unused,
@@ -162504,7 +162452,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmaq" } },
.unused,
.unused,
.unused,
@@ -162537,7 +162485,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
.{ .type = .f128, .kind = .{ .reg = .xmm2 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmaq" } },
.unused,
.unused,
.unused,
@@ -162573,7 +162521,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
.{ .type = .f128, .kind = .{ .reg = .xmm2 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmaq" } },
.unused,
.unused,
.unused,
@@ -162609,7 +162557,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.{ .type = .f128, .kind = .{ .reg = .xmm1 } },
.{ .type = .f128, .kind = .{ .reg = .xmm2 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaq" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "fmaq" } },
.unused,
.unused,
.unused,
@@ -162663,7 +162611,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_gpr, .none, .none } },
},
.extra_temps = .{
- .{ .type = .anyerror, .kind = .{ .lazy_symbol = .{ .kind = .const_data } } },
+ .{ .type = .anyerror, .kind = .{ .lazy_sym = .{ .kind = .const_data } } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
@@ -162687,7 +162635,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_gpr, .none, .none } },
},
.extra_temps = .{
- .{ .type = .anyerror, .kind = .{ .lazy_symbol = .{ .kind = .const_data } } },
+ .{ .type = .anyerror, .kind = .{ .lazy_sym = .{ .kind = .const_data } } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
@@ -162711,7 +162659,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_gpr, .none, .none } },
},
.extra_temps = .{
- .{ .type = .anyerror, .kind = .{ .lazy_symbol = .{ .kind = .const_data } } },
+ .{ .type = .anyerror, .kind = .{ .lazy_sym = .{ .kind = .const_data } } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
@@ -163402,65 +163350,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
};
for (ops) |op| try op.die(cg);
},
- .runtime_nav_ptr => switch (cg.bin_file.tag) {
- .elf, .macho => {
- const ty_nav = air_datas[@intFromEnum(inst)].ty_nav;
-
- const nav = ip.getNav(ty_nav.nav);
- const sym_index, const relocation = sym: {
- if (cg.bin_file.cast(.elf)) |elf_file| {
- const zo = elf_file.zigObjectPtr().?;
- if (nav.getExtern(ip)) |e| {
- const sym = try elf_file.getGlobalSymbol(nav.name.toSlice(ip), e.lib_name.toSlice(ip));
- linkage: switch (e.linkage) {
- .internal => {},
- .strong => switch (e.visibility) {
- .default => zo.symbol(sym).flags.is_extern_ptr = true,
- .hidden, .protected => {},
- },
- .weak => {
- zo.symbol(sym).flags.weak = true;
- continue :linkage .strong;
- },
- .link_once => unreachable,
- }
- break :sym .{ sym, e.relocation };
- } else break :sym .{ try zo.getOrCreateMetadataForNav(zcu, ty_nav.nav), .any };
- } else if (cg.bin_file.cast(.macho)) |macho_file| {
- const zo = macho_file.getZigObject().?;
- if (nav.getExtern(ip)) |e| {
- const sym = try macho_file.getGlobalSymbol(nav.name.toSlice(ip), e.lib_name.toSlice(ip));
- linkage: switch (e.linkage) {
- .internal => {},
- .strong => switch (e.visibility) {
- .default => zo.symbols.items[sym].flags.is_extern_ptr = true,
- .hidden, .protected => {},
- },
- .weak => {
- zo.symbols.items[sym].flags.weak = true;
- continue :linkage .strong;
- },
- .link_once => unreachable,
- }
- break :sym .{ sym, e.relocation };
- } else break :sym .{ try zo.getOrCreateMetadataForNav(macho_file, ty_nav.nav), .any };
- } else unreachable;
- };
-
- if (cg.mod.pic) {
- try cg.spillRegisters(&.{ .rdi, .rax });
- } else {
- try cg.spillRegisters(&.{.rax});
- }
-
- var slot = try cg.tempInit(.usize, switch (relocation) {
- .any => .{ .lea_symbol = .{ .sym_index = sym_index } },
- .pcrel => .{ .lea_pcrel = .{ .sym_index = sym_index } },
- });
- while (try slot.toRegClass(true, .general_purpose, cg)) {}
- try slot.finish(inst, &.{}, &.{}, cg);
- },
- else => return cg.fail("TODO implement runtime_nav_ptr on {}", .{cg.bin_file.tag}),
+ .runtime_nav_ptr => {
+ const ty_nav = air_datas[@intFromEnum(inst)].ty_nav;
+ const is_threadlocal = ip.getNav(ty_nav.nav).isThreadlocal(ip);
+ if (is_threadlocal) if (cg.mod.pic) {
+ try cg.spillRegisters(&.{ .rdi, .rax });
+ } else {
+ try cg.spillRegisters(&.{.rax});
+ };
+ var res = try cg.tempInit(.fromInterned(ty_nav.ty), .{ .lea_nav = ty_nav.nav });
+ if (is_threadlocal) while (try res.toRegClass(true, .general_purpose, cg)) {};
+ try res.finish(inst, &.{}, &.{}, cg);
},
.c_va_arg => try cg.airVaArg(inst),
.c_va_copy => try cg.airVaCopy(inst),
@@ -164116,11 +164016,11 @@ fn airFptrunc(self: *CodeGen, inst: Air.Inst.Index) !void {
},
else => unreachable,
}) {
- var callee_buf: ["__trunc?f?f2".len]u8 = undefined;
- break :result try self.genCall(.{ .lib = .{
+ var sym_buf: ["__trunc?f?f2".len]u8 = undefined;
+ break :result try self.genCall(.{ .extern_func = .{
.return_type = self.floatCompilerRtAbiType(dst_ty, src_ty).toIntern(),
.param_types = &.{self.floatCompilerRtAbiType(src_ty, dst_ty).toIntern()},
- .callee = std.fmt.bufPrint(&callee_buf, "__trunc{c}f{c}f2", .{
+ .sym = std.fmt.bufPrint(&sym_buf, "__trunc{c}f{c}f2", .{
floatCompilerRtAbiName(src_bits),
floatCompilerRtAbiName(dst_bits),
}) catch unreachable,
@@ -164220,11 +164120,11 @@ fn airFpext(self: *CodeGen, inst: Air.Inst.Index) !void {
else => unreachable,
}) {
if (dst_ty.isVector(zcu)) break :result null;
- var callee_buf: ["__extend?f?f2".len]u8 = undefined;
- break :result try self.genCall(.{ .lib = .{
+ var sym_buf: ["__extend?f?f2".len]u8 = undefined;
+ break :result try self.genCall(.{ .extern_func = .{
.return_type = self.floatCompilerRtAbiType(dst_scalar_ty, src_scalar_ty).toIntern(),
.param_types = &.{self.floatCompilerRtAbiType(src_scalar_ty, dst_scalar_ty).toIntern()},
- .callee = std.fmt.bufPrint(&callee_buf, "__extend{c}f{c}f2", .{
+ .sym = std.fmt.bufPrint(&sym_buf, "__extend{c}f{c}f2", .{
floatCompilerRtAbiName(src_bits),
floatCompilerRtAbiName(dst_bits),
}) catch unreachable,
@@ -164661,7 +164561,7 @@ fn airTrunc(self: *CodeGen, inst: Air.Inst.Index) !void {
.storage = .{ .repeated_elem = mask_val.ip_index },
} });
- const splat_mcv = try self.genTypedValue(.fromInterned(splat_val));
+ const splat_mcv = try self.lowerValue(.fromInterned(splat_val));
const splat_addr_mcv: MCValue = switch (splat_mcv) {
.memory, .indirect, .load_frame => splat_mcv.address(),
else => .{ .register = try self.copyToTmpRegister(.usize, splat_mcv.address()) },
@@ -164860,7 +164760,7 @@ fn airMulDivBinOp(self: *CodeGen, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void
.mul, .mul_wrap => {},
.div_trunc, .div_floor, .div_exact, .rem, .mod => {
const signed = dst_ty.isSignedInt(zcu);
- var callee_buf: ["__udiv?i3".len]u8 = undefined;
+ var sym_buf: ["__udiv?i3".len]u8 = undefined;
const signed_div_floor_state: struct {
frame_index: FrameIndex,
state: State,
@@ -164879,7 +164779,7 @@ fn airMulDivBinOp(self: *CodeGen, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void
const lhs_mcv = try self.resolveInst(bin_op.lhs);
const mat_lhs_mcv = switch (lhs_mcv) {
- .load_symbol => mat_lhs_mcv: {
+ .load_nav, .load_uav, .load_lazy_sym => mat_lhs_mcv: {
// TODO clean this up!
const addr_reg = try self.copyToTmpRegister(.usize, lhs_mcv.address());
break :mat_lhs_mcv MCValue{ .indirect = .{ .reg = addr_reg } };
@@ -164903,7 +164803,7 @@ fn airMulDivBinOp(self: *CodeGen, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void
const rhs_mcv = try self.resolveInst(bin_op.rhs);
const mat_rhs_mcv = switch (rhs_mcv) {
- .load_symbol => mat_rhs_mcv: {
+ .load_nav, .load_uav, .load_lazy_sym => mat_rhs_mcv: {
// TODO clean this up!
const addr_reg = try self.copyToTmpRegister(.usize, rhs_mcv.address());
break :mat_rhs_mcv MCValue{ .indirect = .{ .reg = addr_reg } };
@@ -164930,10 +164830,10 @@ fn airMulDivBinOp(self: *CodeGen, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void
break :state .{ .frame_index = frame_index, .state = state, .reloc = reloc };
} else undefined;
const call_mcv = try self.genCall(
- .{ .lib = .{
+ .{ .extern_func = .{
.return_type = dst_ty.toIntern(),
.param_types = &.{ src_ty.toIntern(), src_ty.toIntern() },
- .callee = std.fmt.bufPrint(&callee_buf, "__{s}{s}{c}i3", .{
+ .sym = std.fmt.bufPrint(&sym_buf, "__{s}{s}{c}i3", .{
if (signed) "" else "u",
switch (tag) {
.div_trunc, .div_exact => "div",
@@ -164967,10 +164867,10 @@ fn airMulDivBinOp(self: *CodeGen, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void
});
self.performReloc(signed_div_floor_state.reloc);
const dst_mcv = try self.genCall(
- .{ .lib = .{
+ .{ .extern_func = .{
.return_type = dst_ty.toIntern(),
.param_types = &.{ src_ty.toIntern(), src_ty.toIntern() },
- .callee = std.fmt.bufPrint(&callee_buf, "__div{c}i3", .{
+ .sym = std.fmt.bufPrint(&sym_buf, "__div{c}i3", .{
intCompilerRtAbiName(@intCast(dst_ty.bitSize(zcu))),
}) catch unreachable,
} },
@@ -165004,7 +164904,7 @@ fn airMulDivBinOp(self: *CodeGen, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void
const rhs_mcv = try self.resolveInst(bin_op.rhs);
const mat_rhs_mcv = switch (rhs_mcv) {
- .load_symbol => mat_rhs_mcv: {
+ .load_nav, .load_uav, .load_lazy_sym => mat_rhs_mcv: {
// TODO clean this up!
const addr_reg = try self.copyToTmpRegister(.usize, rhs_mcv.address());
break :mat_rhs_mcv MCValue{ .indirect = .{ .reg = addr_reg } };
@@ -165218,10 +165118,10 @@ fn airMulSat(self: *CodeGen, inst: Air.Inst.Index) !void {
const ptr_c_int = try pt.singleMutPtrType(.c_int);
const overflow = try self.allocTempRegOrMem(.c_int, false);
- const dst_mcv = try self.genCall(.{ .lib = .{
+ const dst_mcv = try self.genCall(.{ .extern_func = .{
.return_type = .i128_type,
.param_types = &.{ .i128_type, .i128_type, ptr_c_int.toIntern() },
- .callee = "__muloti4",
+ .sym = "__muloti4",
} }, &.{ .i128, .i128, ptr_c_int }, &.{
.{ .air_ref = bin_op.lhs },
.{ .air_ref = bin_op.rhs },
@@ -165236,7 +165136,7 @@ fn airMulSat(self: *CodeGen, inst: Air.Inst.Index) !void {
const lhs_mcv = try self.resolveInst(bin_op.lhs);
const mat_lhs_mcv = switch (lhs_mcv) {
- .load_symbol => mat_lhs_mcv: {
+ .load_nav, .load_uav, .load_lazy_sym => mat_lhs_mcv: {
// TODO clean this up!
const addr_reg = try self.copyToTmpRegister(.usize, lhs_mcv.address());
break :mat_lhs_mcv MCValue{ .indirect = .{ .reg = addr_reg } };
@@ -165260,7 +165160,7 @@ fn airMulSat(self: *CodeGen, inst: Air.Inst.Index) !void {
const rhs_mcv = try self.resolveInst(bin_op.rhs);
const mat_rhs_mcv = switch (rhs_mcv) {
- .load_symbol => mat_rhs_mcv: {
+ .load_nav, .load_uav, .load_lazy_sym => mat_rhs_mcv: {
// TODO clean this up!
const addr_reg = try self.copyToTmpRegister(.usize, rhs_mcv.address());
break :mat_rhs_mcv MCValue{ .indirect = .{ .reg = addr_reg } };
@@ -165734,10 +165634,10 @@ fn airMulWithOverflow(self: *CodeGen, inst: Air.Inst.Index) !void {
.signed => {
const ptr_c_int = try pt.singleMutPtrType(.c_int);
const overflow = try self.allocTempRegOrMem(.c_int, false);
- const result = try self.genCall(.{ .lib = .{
+ const result = try self.genCall(.{ .extern_func = .{
.return_type = .i128_type,
.param_types = &.{ .i128_type, .i128_type, ptr_c_int.toIntern() },
- .callee = "__muloti4",
+ .sym = "__muloti4",
} }, &.{ .i128, .i128, ptr_c_int }, &.{
.{ .air_ref = bin_op.lhs },
.{ .air_ref = bin_op.rhs },
@@ -165791,7 +165691,7 @@ fn airMulWithOverflow(self: *CodeGen, inst: Air.Inst.Index) !void {
break :mat_lhs_mcv mat_lhs_mcv;
},
},
- .load_symbol => {
+ .load_nav, .load_uav, .load_lazy_sym => {
// TODO clean this up!
const addr_reg = try self.copyToTmpRegister(.usize, lhs_mcv.address());
break :mat_lhs_mcv MCValue{ .indirect = .{ .reg = addr_reg } };
@@ -165815,7 +165715,7 @@ fn airMulWithOverflow(self: *CodeGen, inst: Air.Inst.Index) !void {
break :mat_rhs_mcv mat_rhs_mcv;
},
},
- .load_symbol => {
+ .load_nav, .load_uav, .load_lazy_sym => {
// TODO clean this up!
const addr_reg = try self.copyToTmpRegister(.usize, rhs_mcv.address());
break :mat_rhs_mcv MCValue{ .indirect = .{ .reg = addr_reg } };
@@ -166291,7 +166191,7 @@ fn airShlShrBinOp(self: *CodeGen, inst: Air.Inst.Index) !void {
defer self.register_manager.unlockReg(shift_lock);
const mask_ty = try pt.vectorType(.{ .len = 16, .child = .u8_type });
- const mask_mcv = try self.genTypedValue(.fromInterned(try pt.intern(.{ .aggregate = .{
+ const mask_mcv = try self.lowerValue(.fromInterned(try pt.intern(.{ .aggregate = .{
.ty = mask_ty.toIntern(),
.storage = .{ .elems = &([1]InternPool.Index{
(try rhs_ty.childType(zcu).maxIntScalar(pt, .u8)).toIntern(),
@@ -166432,7 +166332,7 @@ fn airShlSat(self: *CodeGen, inst: Air.Inst.Index) !void {
// if lhs is negative, it is min
switch (lhs_ty.intInfo(zcu).signedness) {
.unsigned => {
- const bound_mcv = try self.genTypedValue(try lhs_ty.maxIntScalar(self.pt, lhs_ty));
+ const bound_mcv = try self.lowerValue(try lhs_ty.maxIntScalar(self.pt, lhs_ty));
try self.genCopy(lhs_ty, dst_mcv, bound_mcv, .{});
},
.signed => {
@@ -166441,7 +166341,7 @@ fn airShlSat(self: *CodeGen, inst: Air.Inst.Index) !void {
// we only need the highest bit so shifting the highest part of lhs_mcv
// is enough to check the signedness. other parts can be skipped here.
var lhs_temp2 = try self.tempInit(lhs_ty, lhs_mcv);
- var zero_temp = try self.tempInit(lhs_ty, try self.genTypedValue(try self.pt.intValue(lhs_ty, 0)));
+ var zero_temp = try self.tempInit(lhs_ty, try self.lowerValue(try self.pt.intValue(lhs_ty, 0)));
const sign_cc_temp = lhs_temp2.cmpInts(.lt, &zero_temp, self) catch |err| switch (err) {
error.SelectFailed => unreachable,
else => |e| return e,
@@ -166452,13 +166352,13 @@ fn airShlSat(self: *CodeGen, inst: Air.Inst.Index) !void {
try sign_cc_temp.die(self);
// if it is negative
- const min_mcv = try self.genTypedValue(try lhs_ty.minIntScalar(self.pt, lhs_ty));
+ const min_mcv = try self.lowerValue(try lhs_ty.minIntScalar(self.pt, lhs_ty));
try self.genCopy(lhs_ty, dst_mcv, min_mcv, .{});
const sign_reloc_br = try self.asmJmpReloc(undefined);
self.performReloc(sign_reloc_condbr);
// if it is positive
- const max_mcv = try self.genTypedValue(try lhs_ty.maxIntScalar(self.pt, lhs_ty));
+ const max_mcv = try self.lowerValue(try lhs_ty.maxIntScalar(self.pt, lhs_ty));
try self.genCopy(lhs_ty, dst_mcv, max_mcv, .{});
self.performReloc(sign_reloc_br);
},
@@ -167179,7 +167079,12 @@ fn airArrayElemVal(self: *CodeGen, inst: Air.Inst.Index) !void {
}.to64(),
),
},
- .memory, .load_symbol, .load_direct, .load_got => switch (index_mcv) {
+ .memory,
+ .load_nav,
+ .load_uav,
+ .load_lazy_sym,
+ .load_extern_func,
+ => switch (index_mcv) {
.immediate => |index_imm| try self.asmMemoryImmediate(
.{ ._, .bt },
.{
@@ -167241,11 +167146,15 @@ fn airArrayElemVal(self: *CodeGen, inst: Air.Inst.Index) !void {
},
),
.memory,
- .load_symbol,
- .load_direct,
- .load_got,
+ .load_nav,
+ .lea_nav,
+ .load_uav,
+ .lea_uav,
+ .load_lazy_sym,
+ .lea_lazy_sym,
+ .load_extern_func,
+ .lea_extern_func,
=> try self.genSetReg(addr_reg, .usize, array_mcv.address(), .{}),
- .lea_symbol, .lea_direct => unreachable,
else => return self.fail("TODO airArrayElemVal_val for {s} of {}", .{
@tagName(array_mcv), array_ty.fmt(pt),
}),
@@ -168346,7 +168255,7 @@ fn floatSign(self: *CodeGen, inst: Air.Inst.Index, tag: Air.Inst.Tag, operand: A
.child = (try pt.intType(.signed, scalar_bits)).ip_index,
});
- const sign_mcv = try self.genTypedValue(switch (tag) {
+ const sign_mcv = try self.lowerValue(switch (tag) {
.neg => try vec_ty.minInt(pt, vec_ty),
.abs => try vec_ty.maxInt(pt, vec_ty),
else => unreachable,
@@ -168488,11 +168397,11 @@ fn genRoundLibcall(self: *CodeGen, ty: Type, src_mcv: MCValue, mode: bits.RoundM
if (ty.zigTypeTag(zcu) != .float)
return self.fail("TODO implement genRound for {}", .{ty.fmt(pt)});
- var callee_buf: ["__trunc?".len]u8 = undefined;
- return try self.genCall(.{ .lib = .{
+ var sym_buf: ["__trunc?".len]u8 = undefined;
+ return try self.genCall(.{ .extern_func = .{
.return_type = ty.toIntern(),
.param_types = &.{ty.toIntern()},
- .callee = std.fmt.bufPrint(&callee_buf, "{s}{s}{s}", .{
+ .sym = std.fmt.bufPrint(&sym_buf, "{s}{s}{s}", .{
floatLibcAbiPrefix(ty),
switch (mode.direction) {
.down => "floor",
@@ -168765,11 +168674,11 @@ fn airSqrt(self: *CodeGen, inst: Air.Inst.Index) !void {
80, 128 => true,
else => unreachable,
}) {
- var callee_buf: ["__sqrt?".len]u8 = undefined;
- break :result try self.genCall(.{ .lib = .{
+ var sym_buf: ["__sqrt?".len]u8 = undefined;
+ break :result try self.genCall(.{ .extern_func = .{
.return_type = ty.toIntern(),
.param_types = &.{ty.toIntern()},
- .callee = std.fmt.bufPrint(&callee_buf, "{s}sqrt{s}", .{
+ .sym = std.fmt.bufPrint(&sym_buf, "{s}sqrt{s}", .{
floatLibcAbiPrefix(ty),
floatLibcAbiSuffix(ty),
}) catch unreachable,
@@ -168918,11 +168827,11 @@ fn airSqrt(self: *CodeGen, inst: Air.Inst.Index) !void {
fn airUnaryMath(self: *CodeGen, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void {
const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
const ty = self.typeOf(un_op);
- var callee_buf: ["__round?".len]u8 = undefined;
- const result = try self.genCall(.{ .lib = .{
+ var sym_buf: ["__round?".len]u8 = undefined;
+ const result = try self.genCall(.{ .extern_func = .{
.return_type = ty.toIntern(),
.param_types = &.{ty.toIntern()},
- .callee = std.fmt.bufPrint(&callee_buf, "{s}{s}{s}", .{
+ .sym = std.fmt.bufPrint(&sym_buf, "{s}{s}{s}", .{
floatLibcAbiPrefix(ty),
switch (tag) {
.sin,
@@ -169122,19 +169031,19 @@ fn load(self: *CodeGen, dst_mcv: MCValue, ptr_ty: Type, ptr_mcv: MCValue) InnerE
.immediate,
.register,
.register_offset,
- .lea_symbol,
- .lea_pcrel,
- .lea_direct,
- .lea_got,
.lea_frame,
+ .lea_nav,
+ .lea_uav,
+ .lea_lazy_sym,
+ .lea_extern_func,
=> try self.genCopy(dst_ty, dst_mcv, ptr_mcv.deref(), .{}),
.memory,
.indirect,
- .load_symbol,
- .load_pcrel,
- .load_direct,
- .load_got,
.load_frame,
+ .load_nav,
+ .load_uav,
+ .load_lazy_sym,
+ .load_extern_func,
=> {
const addr_reg = try self.copyToTmpRegister(ptr_ty, ptr_mcv);
const addr_lock = self.register_manager.lockRegAssumeUnused(addr_reg);
@@ -169342,19 +169251,19 @@ fn store(
.immediate,
.register,
.register_offset,
- .lea_symbol,
- .lea_pcrel,
- .lea_direct,
- .lea_got,
.lea_frame,
+ .lea_nav,
+ .lea_uav,
+ .lea_lazy_sym,
+ .lea_extern_func,
=> try self.genCopy(src_ty, ptr_mcv.deref(), src_mcv, opts),
.memory,
.indirect,
- .load_symbol,
- .load_pcrel,
- .load_direct,
- .load_got,
.load_frame,
+ .load_nav,
+ .load_uav,
+ .load_lazy_sym,
+ .load_extern_func,
=> {
const addr_reg = try self.copyToTmpRegister(ptr_ty, ptr_mcv);
const addr_lock = self.register_manager.lockRegAssumeUnused(addr_reg);
@@ -169820,18 +169729,18 @@ fn genUnOpMir(self: *CodeGen, mir_tag: Mir.Inst.FixedTag, dst_ty: Type, dst_mcv:
.eflags,
.register_overflow,
.register_mask,
- .lea_symbol,
- .lea_pcrel,
- .lea_direct,
- .lea_got,
.lea_frame,
+ .lea_nav,
+ .lea_uav,
+ .lea_lazy_sym,
+ .lea_extern_func,
.elementwise_args,
.reserved_frame,
.air_ref,
=> unreachable, // unmodifiable destination
.register => |dst_reg| try self.asmRegister(mir_tag, registerAlias(dst_reg, abi_size)),
.register_pair, .register_triple, .register_quadruple => unreachable, // unimplemented
- .memory, .load_symbol, .load_pcrel, .load_got, .load_direct => {
+ .memory, .load_nav, .load_uav, .load_lazy_sym, .load_extern_func => {
const addr_reg = try self.register_manager.allocReg(null, abi.RegisterClass.gp);
const addr_reg_lock = self.register_manager.lockRegAssumeUnused(addr_reg);
defer self.register_manager.unlockReg(addr_reg_lock);
@@ -170591,7 +170500,7 @@ fn genMulDivBinOp(
defer for (reg_locks) |reg_lock| if (reg_lock) |lock| self.register_manager.unlockReg(lock);
const mat_lhs_mcv = switch (lhs_mcv) {
- .load_symbol => mat_lhs_mcv: {
+ .load_nav, .load_uav, .load_lazy_sym => mat_lhs_mcv: {
// TODO clean this up!
const addr_reg = try self.copyToTmpRegister(.usize, lhs_mcv.address());
break :mat_lhs_mcv MCValue{ .indirect = .{ .reg = addr_reg } };
@@ -170604,7 +170513,7 @@ fn genMulDivBinOp(
};
defer if (mat_lhs_lock) |lock| self.register_manager.unlockReg(lock);
const mat_rhs_mcv = switch (rhs_mcv) {
- .load_symbol => mat_rhs_mcv: {
+ .load_nav, .load_uav, .load_lazy_sym => mat_rhs_mcv: {
// TODO clean this up!
const addr_reg = try self.copyToTmpRegister(.usize, rhs_mcv.address());
break :mat_rhs_mcv MCValue{ .indirect = .{ .reg = addr_reg } };
@@ -170772,7 +170681,7 @@ fn genMulDivBinOp(
.is_const = true,
},
});
- _ = try self.genCall(.{ .lib = .{
+ _ = try self.genCall(.{ .extern_func = .{
.return_type = .void_type,
.param_types = &.{
manyptr_u32_ty.toIntern(),
@@ -170780,7 +170689,7 @@ fn genMulDivBinOp(
manyptr_const_u32_ty.toIntern(),
.usize_type,
},
- .callee = switch (tag) {
+ .sym = switch (tag) {
.div_trunc,
.div_floor,
.div_exact,
@@ -171003,8 +170912,8 @@ fn genBinOp(
.rem, .mod => {},
else => if (!type_needs_libcall) break :libcall,
}
- var callee_buf: ["__mod?f3".len]u8 = undefined;
- const callee = switch (air_tag) {
+ var sym_buf: ["__mod?f3".len]u8 = undefined;
+ const sym = switch (air_tag) {
.add,
.sub,
.mul,
@@ -171012,11 +170921,11 @@ fn genBinOp(
.div_trunc,
.div_floor,
.div_exact,
- => std.fmt.bufPrint(&callee_buf, "__{s}{c}f3", .{
+ => std.fmt.bufPrint(&sym_buf, "__{s}{c}f3", .{
@tagName(air_tag)[0..3],
floatCompilerRtAbiName(float_bits),
}),
- .rem, .mod, .min, .max => std.fmt.bufPrint(&callee_buf, "{s}f{s}{s}", .{
+ .rem, .mod, .min, .max => std.fmt.bufPrint(&sym_buf, "{s}f{s}{s}", .{
floatLibcAbiPrefix(lhs_ty),
switch (air_tag) {
.rem, .mod => "mod",
@@ -171030,22 +170939,22 @@ fn genBinOp(
@tagName(air_tag), lhs_ty.fmt(pt),
}),
} catch unreachable;
- const result = try self.genCall(.{ .lib = .{
+ const result = try self.genCall(.{ .extern_func = .{
.return_type = lhs_ty.toIntern(),
.param_types = &.{ lhs_ty.toIntern(), rhs_ty.toIntern() },
- .callee = callee,
+ .sym = sym,
} }, &.{ lhs_ty, rhs_ty }, &.{ .{ .air_ref = lhs_air }, .{ .air_ref = rhs_air } }, .{});
return switch (air_tag) {
.mod => result: {
const adjusted: MCValue = if (type_needs_libcall) adjusted: {
- var add_callee_buf: ["__add?f3".len]u8 = undefined;
- break :adjusted try self.genCall(.{ .lib = .{
+ var add_sym_buf: ["__add?f3".len]u8 = undefined;
+ break :adjusted try self.genCall(.{ .extern_func = .{
.return_type = lhs_ty.toIntern(),
.param_types = &.{
lhs_ty.toIntern(),
rhs_ty.toIntern(),
},
- .callee = std.fmt.bufPrint(&add_callee_buf, "__add{c}f3", .{
+ .sym = std.fmt.bufPrint(&add_sym_buf, "__add{c}f3", .{
floatCompilerRtAbiName(float_bits),
}) catch unreachable,
} }, &.{ lhs_ty, rhs_ty }, &.{ result, .{ .air_ref = rhs_air } }, .{});
@@ -171144,10 +171053,10 @@ fn genBinOp(
}),
else => unreachable,
};
- break :result try self.genCall(.{ .lib = .{
+ break :result try self.genCall(.{ .extern_func = .{
.return_type = lhs_ty.toIntern(),
.param_types = &.{ lhs_ty.toIntern(), rhs_ty.toIntern() },
- .callee = callee,
+ .sym = sym,
} }, &.{ lhs_ty, rhs_ty }, &.{ adjusted, .{ .air_ref = rhs_air } }, .{});
},
.div_trunc, .div_floor => try self.genRoundLibcall(lhs_ty, result, .{
@@ -171430,13 +171339,15 @@ fn genBinOp(
.immediate,
.eflags,
.register_offset,
- .load_symbol,
- .lea_symbol,
- .load_direct,
- .lea_direct,
- .load_got,
- .lea_got,
.lea_frame,
+ .load_nav,
+ .lea_nav,
+ .load_uav,
+ .lea_uav,
+ .load_lazy_sym,
+ .lea_lazy_sym,
+ .load_extern_func,
+ .lea_extern_func,
=> true,
.memory => |addr| std.math.cast(i32, @as(i64, @bitCast(addr))) == null,
else => false,
@@ -171489,15 +171400,15 @@ fn genBinOp(
.register_offset,
.register_overflow,
.register_mask,
- .load_symbol,
- .lea_symbol,
- .load_pcrel,
- .lea_pcrel,
- .load_direct,
- .lea_direct,
- .load_got,
- .lea_got,
.lea_frame,
+ .load_nav,
+ .lea_nav,
+ .load_uav,
+ .lea_uav,
+ .load_lazy_sym,
+ .lea_lazy_sym,
+ .load_extern_func,
+ .lea_extern_func,
.elementwise_args,
.reserved_frame,
.air_ref,
@@ -172595,7 +172506,7 @@ fn genBinOp(
.cmp_neq,
=> {
const unsigned_ty = try lhs_ty.toUnsigned(pt);
- const not_mcv = try self.genTypedValue(try unsigned_ty.maxInt(pt, unsigned_ty));
+ const not_mcv = try self.lowerValue(try unsigned_ty.maxInt(pt, unsigned_ty));
const not_mem: Memory = if (not_mcv.isBase())
try not_mcv.mem(self, .{ .size = .fromSize(abi_size) })
else
@@ -172677,11 +172588,11 @@ fn genBinOpMir(
.eflags,
.register_overflow,
.register_mask,
- .lea_direct,
- .lea_got,
.lea_frame,
- .lea_symbol,
- .lea_pcrel,
+ .lea_nav,
+ .lea_uav,
+ .lea_lazy_sym,
+ .lea_extern_func,
.elementwise_args,
.reserved_frame,
.air_ref,
@@ -172771,16 +172682,16 @@ fn genBinOpMir(
.register_offset,
.memory,
.indirect,
- .load_symbol,
- .lea_symbol,
- .load_pcrel,
- .lea_pcrel,
- .load_direct,
- .lea_direct,
- .load_got,
- .lea_got,
.load_frame,
.lea_frame,
+ .load_nav,
+ .lea_nav,
+ .load_uav,
+ .lea_uav,
+ .load_lazy_sym,
+ .lea_lazy_sym,
+ .load_extern_func,
+ .lea_extern_func,
=> {
direct: {
try self.asmRegisterMemory(mir_limb_tag, dst_alias, switch (src_mcv) {
@@ -172813,10 +172724,11 @@ fn genBinOpMir(
switch (src_mcv) {
.eflags,
.register_offset,
- .lea_symbol,
- .lea_direct,
- .lea_got,
.lea_frame,
+ .lea_nav,
+ .lea_uav,
+ .lea_lazy_sym,
+ .lea_extern_func,
=> {
assert(off == 0);
const reg = try self.copyToTmpRegister(ty, src_mcv);
@@ -172828,9 +172740,10 @@ fn genBinOpMir(
);
},
.memory,
- .load_symbol,
- .load_direct,
- .load_got,
+ .load_nav,
+ .load_uav,
+ .load_lazy_sym,
+ .load_extern_func,
=> {
const ptr_ty = try pt.singleConstPtrType(ty);
const addr_reg = try self.copyToTmpRegister(ptr_ty, src_mcv.address());
@@ -172850,13 +172763,20 @@ fn genBinOpMir(
}
}
},
- .memory, .indirect, .load_symbol, .load_pcrel, .load_got, .load_direct, .load_frame => {
+ .memory,
+ .indirect,
+ .load_frame,
+ .load_nav,
+ .load_uav,
+ .load_lazy_sym,
+ .load_extern_func,
+ => {
const OpInfo = ?struct { addr_reg: Register, addr_lock: RegisterLock };
const limb_abi_size: u32 = @min(abi_size, 8);
const dst_info: OpInfo = switch (dst_mcv) {
else => unreachable,
- .memory, .load_symbol, .load_got, .load_direct => dst: {
+ .memory, .load_nav, .load_uav, .load_lazy_sym, .load_extern_func => dst: {
const dst_addr_reg =
(try self.register_manager.allocReg(null, abi.RegisterClass.gp)).to64();
const dst_addr_lock = self.register_manager.lockRegAssumeUnused(dst_addr_reg);
@@ -172892,19 +172812,24 @@ fn genBinOpMir(
.register_quadruple,
.register_offset,
.indirect,
- .lea_direct,
- .lea_got,
.load_frame,
.lea_frame,
- .lea_symbol,
- .lea_pcrel,
+ .lea_nav,
+ .lea_uav,
+ .lea_lazy_sym,
+ .lea_extern_func,
=> null,
- .memory, .load_symbol, .load_pcrel, .load_got, .load_direct => src: {
+ .memory,
+ .load_nav,
+ .load_uav,
+ .load_lazy_sym,
+ .load_extern_func,
+ => src: {
switch (resolved_src_mcv) {
.memory => |addr| if (std.math.cast(i32, @as(i64, @bitCast(addr))) != null and
std.math.cast(i32, @as(i64, @bitCast(addr)) + abi_size - limb_abi_size) != null)
break :src null,
- .load_symbol, .load_got, .load_direct => {},
+ .load_nav, .load_uav, .load_lazy_sym, .load_extern_func => {},
else => unreachable,
}
@@ -172944,9 +172869,10 @@ fn genBinOpMir(
};
const dst_limb_mem: Memory = switch (dst_mcv) {
.memory,
- .load_symbol,
- .load_got,
- .load_direct,
+ .load_nav,
+ .load_uav,
+ .load_lazy_sym,
+ .load_extern_func,
=> .{
.base = .{ .reg = dst_info.?.addr_reg },
.mod = .{ .rm = .{
@@ -173036,16 +172962,16 @@ fn genBinOpMir(
.eflags,
.memory,
.indirect,
- .load_symbol,
- .lea_symbol,
- .load_pcrel,
- .lea_pcrel,
- .load_direct,
- .lea_direct,
- .load_got,
- .lea_got,
.load_frame,
.lea_frame,
+ .load_nav,
+ .lea_nav,
+ .load_uav,
+ .lea_uav,
+ .load_lazy_sym,
+ .lea_lazy_sym,
+ .load_extern_func,
+ .lea_extern_func,
=> {
const src_limb_mcv: MCValue = if (src_info) |info| .{
.indirect = .{ .reg = info.addr_reg, .off = off },
@@ -173055,10 +172981,11 @@ fn genBinOpMir(
},
.eflags,
.register_offset,
- .lea_symbol,
- .lea_direct,
- .lea_got,
.lea_frame,
+ .lea_nav,
+ .lea_uav,
+ .lea_lazy_sym,
+ .lea_extern_func,
=> switch (limb_i) {
0 => resolved_src_mcv,
else => .{ .immediate = 0 },
@@ -173106,11 +173033,11 @@ fn genIntMulComplexOpMir(self: *CodeGen, dst_ty: Type, dst_mcv: MCValue, src_mcv
.register_offset,
.register_overflow,
.register_mask,
- .lea_symbol,
- .lea_pcrel,
- .lea_direct,
- .lea_got,
.lea_frame,
+ .lea_nav,
+ .lea_uav,
+ .lea_lazy_sym,
+ .lea_extern_func,
.elementwise_args,
.reserved_frame,
.air_ref,
@@ -173168,15 +173095,15 @@ fn genIntMulComplexOpMir(self: *CodeGen, dst_ty: Type, dst_mcv: MCValue, src_mcv
},
.register_offset,
.eflags,
- .load_symbol,
- .lea_symbol,
- .load_pcrel,
- .lea_pcrel,
- .load_direct,
- .lea_direct,
- .load_got,
- .lea_got,
.lea_frame,
+ .load_nav,
+ .lea_nav,
+ .load_uav,
+ .lea_uav,
+ .load_lazy_sym,
+ .lea_lazy_sym,
+ .load_extern_func,
+ .lea_extern_func,
=> {
const src_reg = try self.copyToTmpRegister(dst_ty, resolved_src_mcv);
switch (abi_size) {
@@ -173231,7 +173158,14 @@ fn genIntMulComplexOpMir(self: *CodeGen, dst_ty: Type, dst_mcv: MCValue, src_mcv
}
},
.register_pair, .register_triple, .register_quadruple => unreachable, // unimplemented
- .memory, .indirect, .load_symbol, .load_pcrel, .load_direct, .load_got, .load_frame => {
+ .memory,
+ .indirect,
+ .load_frame,
+ .load_nav,
+ .load_uav,
+ .load_lazy_sym,
+ .load_extern_func,
+ => {
const tmp_reg = try self.copyToTmpRegister(dst_ty, dst_mcv);
const tmp_mcv = MCValue{ .register = tmp_reg };
const tmp_lock = self.register_manager.lockRegAssumeUnused(tmp_reg);
@@ -173382,15 +173316,6 @@ fn genLocalDebugInfo(cg: *CodeGen, air_tag: Air.Inst.Tag, ty: Type, mcv: MCValue
},
.data = .{ .fa = frame_addr },
}),
- .lea_symbol => |sym_off| try cg.addInst(.{
- .tag = .pseudo,
- .ops = switch (air_tag) {
- else => unreachable,
- .arg, .dbg_arg_inline => .pseudo_dbg_arg_reloc,
- .dbg_var_val => .pseudo_dbg_var_reloc,
- },
- .data = .{ .reloc = sym_off },
- }),
else => {
const frame_index = try cg.allocFrameIndex(.initSpill(ty, cg.pt.zcu));
try cg.genSetMem(.{ .frame = frame_index }, 0, ty, mcv, .{});
@@ -173426,26 +173351,42 @@ fn genLocalDebugInfo(cg: *CodeGen, air_tag: Air.Inst.Tag, ty: Type, mcv: MCValue
})),
} },
}),
- // debug info should explicitly ignore pcrel requirements
- .lea_symbol, .lea_pcrel => |sym_off| try cg.addInst(.{
+ .lea_nav => |nav| try cg.addInst(.{
.tag = .pseudo,
.ops = .pseudo_dbg_var_m,
.data = .{ .x = .{
.payload = try cg.addExtra(Mir.Memory.encode(.{
- .base = .{ .reloc = sym_off.sym_index },
- .mod = .{ .rm = .{
- .size = .qword,
- .disp = sym_off.off,
- } },
+ .base = .{ .nav = nav },
+ .mod = .{ .rm = .{ .size = .qword } },
})),
} },
}),
- .lea_direct, .lea_got => |sym_index| try cg.addInst(.{
+ .lea_uav => |uav| try cg.addInst(.{
.tag = .pseudo,
.ops = .pseudo_dbg_var_m,
.data = .{ .x = .{
.payload = try cg.addExtra(Mir.Memory.encode(.{
- .base = .{ .reloc = sym_index },
+ .base = .{ .uav = uav },
+ .mod = .{ .rm = .{ .size = .qword } },
+ })),
+ } },
+ }),
+ .lea_lazy_sym => |lazy_sym| try cg.addInst(.{
+ .tag = .pseudo,
+ .ops = .pseudo_dbg_var_m,
+ .data = .{ .x = .{
+ .payload = try cg.addExtra(Mir.Memory.encode(.{
+ .base = .{ .lazy_sym = lazy_sym },
+ .mod = .{ .rm = .{ .size = .qword } },
+ })),
+ } },
+ }),
+ .lea_extern_func => |extern_func| try cg.addInst(.{
+ .tag = .pseudo,
+ .ops = .pseudo_dbg_var_m,
+ .data = .{ .x = .{
+ .payload = try cg.addExtra(Mir.Memory.encode(.{
+ .base = .{ .extern_func = extern_func },
.mod = .{ .rm = .{ .size = .qword } },
})),
} },
@@ -173502,11 +173443,10 @@ fn airCall(self: *CodeGen, inst: Air.Inst.Index, modifier: std.builtin.CallModif
fn genCall(self: *CodeGen, info: union(enum) {
air: Air.Inst.Ref,
- lib: struct {
+ extern_func: struct {
return_type: InternPool.Index,
param_types: []const InternPool.Index,
- lib: ?[]const u8 = null,
- callee: []const u8,
+ sym: []const u8,
},
}, arg_types: []const Type, args: []const MCValue, opts: CopyOptions) !MCValue {
const pt = self.pt;
@@ -173522,9 +173462,9 @@ fn genCall(self: *CodeGen, info: union(enum) {
else => unreachable,
};
},
- .lib => |lib| try pt.funcType(.{
- .param_types = lib.param_types,
- .return_type = lib.return_type,
+ .extern_func => |extern_func| try pt.funcType(.{
+ .param_types = extern_func.param_types,
+ .return_type = extern_func.return_type,
.cc = self.target.cCallingConvention().?,
}),
};
@@ -173753,52 +173693,9 @@ fn genCall(self: *CodeGen, info: union(enum) {
else => func_key,
} else func_key,
}) {
- .func => |func| {
- if (self.bin_file.cast(.elf)) |elf_file| {
- const zo = elf_file.zigObjectPtr().?;
- const sym_index = try zo.getOrCreateMetadataForNav(zcu, func.owner_nav);
- try self.asmImmediate(.{ ._, .call }, .rel(.{ .sym_index = sym_index }));
- } else if (self.bin_file.cast(.coff)) |coff_file| {
- const atom = try coff_file.getOrCreateAtomForNav(func.owner_nav);
- const sym_index = coff_file.getAtom(atom).getSymbolIndex().?;
- const scratch_reg = abi.getCAbiLinkerScratchReg(fn_info.cc);
- try self.genSetReg(scratch_reg, .usize, .{ .lea_got = sym_index }, .{});
- try self.asmRegister(.{ ._, .call }, scratch_reg);
- } else if (self.bin_file.cast(.macho)) |macho_file| {
- const zo = macho_file.getZigObject().?;
- const sym_index = try zo.getOrCreateMetadataForNav(macho_file, func.owner_nav);
- const sym = zo.symbols.items[sym_index];
- try self.asmImmediate(.{ ._, .call }, .rel(.{ .sym_index = sym.nlist_idx }));
- } else if (self.bin_file.cast(.plan9)) |p9| {
- const atom_index = try p9.seeNav(pt, func.owner_nav);
- const atom = p9.getAtom(atom_index);
- try self.asmMemory(.{ ._, .call }, .{
- .base = .{ .reg = .ds },
- .mod = .{ .rm = .{
- .size = .qword,
- .disp = @intCast(atom.getOffsetTableAddress(p9)),
- } },
- });
- } else unreachable;
- },
- .@"extern" => |@"extern"| if (self.bin_file.cast(.elf)) |elf_file| {
- const target_sym_index = try elf_file.getGlobalSymbol(
- @"extern".name.toSlice(ip),
- @"extern".lib_name.toSlice(ip),
- );
- try self.asmImmediate(.{ ._, .call }, .rel(.{ .sym_index = target_sym_index }));
- } else if (self.bin_file.cast(.macho)) |macho_file| {
- const target_sym_index = try macho_file.getGlobalSymbol(
- @"extern".name.toSlice(ip),
- @"extern".lib_name.toSlice(ip),
- );
- try self.asmImmediate(.{ ._, .call }, .rel(.{ .sym_index = target_sym_index }));
- } else try self.genExternSymbolRef(
- .call,
- @"extern".lib_name.toSlice(ip),
- @"extern".name.toSlice(ip),
- ),
- else => return self.fail("TODO implement calling bitcasted functions", .{}),
+ else => unreachable,
+ .func => |func| try self.asmImmediate(.{ ._, .call }, .{ .nav = .{ .index = func.owner_nav } }),
+ .@"extern" => |@"extern"| try self.asmImmediate(.{ ._, .call }, .{ .nav = .{ .index = @"extern".owner_nav } }),
}
} else {
assert(self.typeOf(callee).zigTypeTag(zcu) == .pointer);
@@ -173806,13 +173703,7 @@ fn genCall(self: *CodeGen, info: union(enum) {
try self.genSetReg(scratch_reg, .usize, .{ .air_ref = callee }, .{});
try self.asmRegister(.{ ._, .call }, scratch_reg);
},
- .lib => |lib| if (self.bin_file.cast(.elf)) |elf_file| {
- const target_sym_index = try elf_file.getGlobalSymbol(lib.callee, lib.lib);
- try self.asmImmediate(.{ ._, .call }, .rel(.{ .sym_index = target_sym_index }));
- } else if (self.bin_file.cast(.macho)) |macho_file| {
- const target_sym_index = try macho_file.getGlobalSymbol(lib.callee, lib.lib);
- try self.asmImmediate(.{ ._, .call }, .rel(.{ .sym_index = target_sym_index }));
- } else try self.genExternSymbolRef(.call, lib.lib, lib.callee),
+ .extern_func => |extern_func| try self.asmImmediate(.{ ._, .call }, .{ .extern_func = try self.addString(extern_func.sym) }),
}
return call_info.return_value.short;
}
@@ -173946,11 +173837,11 @@ fn airCmp(self: *CodeGen, inst: Air.Inst.Index, op: std.math.CompareOperator) !v
80, 128 => false,
else => unreachable,
}) {
- var callee_buf: ["__???f2".len]u8 = undefined;
- const ret = try self.genCall(.{ .lib = .{
+ var sym_buf: ["__???f2".len]u8 = undefined;
+ const ret = try self.genCall(.{ .extern_func = .{
.return_type = .i32_type,
.param_types = &.{ ty.toIntern(), ty.toIntern() },
- .callee = std.fmt.bufPrint(&callee_buf, "__{s}{c}f2", .{
+ .sym = std.fmt.bufPrint(&sym_buf, "__{s}{c}f2", .{
switch (op) {
.eq => "eq",
.neq => "ne",
@@ -174093,17 +173984,27 @@ fn airCmp(self: *CodeGen, inst: Air.Inst.Index, op: std.math.CompareOperator) !v
.register_overflow,
.register_mask,
.indirect,
- .lea_direct,
- .lea_got,
.lea_frame,
- .lea_symbol,
- .lea_pcrel,
+ .lea_nav,
+ .lea_uav,
+ .lea_lazy_sym,
+ .lea_extern_func,
.elementwise_args,
.reserved_frame,
.air_ref,
=> unreachable,
- .register, .register_pair, .register_triple, .register_quadruple, .load_frame => null,
- .memory, .load_symbol, .load_pcrel, .load_got, .load_direct => dst: {
+ .register,
+ .register_pair,
+ .register_triple,
+ .register_quadruple,
+ .load_frame,
+ => null,
+ .memory,
+ .load_nav,
+ .load_uav,
+ .load_lazy_sym,
+ .load_extern_func,
+ => dst: {
switch (resolved_dst_mcv) {
.memory => |addr| if (std.math.cast(
i32,
@@ -174112,7 +174013,7 @@ fn airCmp(self: *CodeGen, inst: Air.Inst.Index, op: std.math.CompareOperator) !v
i32,
@as(i64, @bitCast(addr)) + abi_size - 8,
) != null) break :dst null,
- .load_symbol, .load_pcrel, .load_got, .load_direct => {},
+ .load_nav, .load_uav, .load_lazy_sym, .load_extern_func => {},
else => unreachable,
}
@@ -174149,17 +174050,26 @@ fn airCmp(self: *CodeGen, inst: Air.Inst.Index, op: std.math.CompareOperator) !v
.register_overflow,
.register_mask,
.indirect,
- .lea_symbol,
- .lea_pcrel,
- .lea_direct,
- .lea_got,
.lea_frame,
+ .lea_nav,
+ .lea_uav,
+ .lea_lazy_sym,
+ .lea_extern_func,
.elementwise_args,
.reserved_frame,
.air_ref,
=> unreachable,
- .register_pair, .register_triple, .register_quadruple, .load_frame => null,
- .memory, .load_symbol, .load_pcrel, .load_got, .load_direct => src: {
+ .register_pair,
+ .register_triple,
+ .register_quadruple,
+ .load_frame,
+ => null,
+ .memory,
+ .load_nav,
+ .load_uav,
+ .load_lazy_sym,
+ .load_extern_func,
+ => src: {
switch (resolved_src_mcv) {
.memory => |addr| if (std.math.cast(
i32,
@@ -174168,7 +174078,7 @@ fn airCmp(self: *CodeGen, inst: Air.Inst.Index, op: std.math.CompareOperator) !v
i32,
@as(i64, @bitCast(addr)) + abi_size - 8,
) != null) break :src null,
- .load_symbol, .load_pcrel, .load_got, .load_direct => {},
+ .load_nav, .load_uav, .load_lazy_sym, .load_extern_func => {},
else => unreachable,
}
@@ -174453,14 +174363,19 @@ fn airDbgVar(cg: *CodeGen, inst: Air.Inst.Index) !void {
if (cg.mod.strip) return;
const air_tag = cg.air.instructions.items(.tag)[@intFromEnum(inst)];
const pl_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
-
- const name_nts: Air.NullTerminatedString = @enumFromInt(pl_op.payload);
- assert(name_nts != .none);
- const name = name_nts.toSlice(cg.air);
- try cg.mir_local_name_bytes.appendSlice(cg.gpa, name[0 .. name.len + 1]);
-
+ const air_name: Air.NullTerminatedString = @enumFromInt(pl_op.payload);
const ty = cg.typeOf(pl_op.operand);
- try cg.mir_local_types.append(cg.gpa, ty.toIntern());
+
+ try cg.mir_locals.append(cg.gpa, .{
+ .name = switch (air_name) {
+ .none => switch (air_tag) {
+ else => unreachable,
+ .dbg_arg_inline => .none,
+ },
+ else => try cg.addString(air_name.toSlice(cg.air)),
+ },
+ .type = ty.toIntern(),
+ });
try cg.genLocalDebugInfo(air_tag, ty, try cg.resolveInst(pl_op.operand));
return cg.finishAir(inst, .unreach, .{ pl_op.operand, .none, .none });
@@ -174567,10 +174482,10 @@ fn isNull(self: *CodeGen, inst: Air.Inst.Index, opt_ty: Type, opt_mcv: MCValue)
.register_offset,
.register_overflow,
.register_mask,
- .lea_direct,
- .lea_got,
- .lea_symbol,
- .lea_pcrel,
+ .lea_nav,
+ .lea_uav,
+ .lea_lazy_sym,
+ .lea_extern_func,
.elementwise_args,
.reserved_frame,
.air_ref,
@@ -174618,10 +174533,10 @@ fn isNull(self: *CodeGen, inst: Air.Inst.Index, opt_ty: Type, opt_mcv: MCValue)
},
.memory,
- .load_symbol,
- .load_pcrel,
- .load_got,
- .load_direct,
+ .load_nav,
+ .load_uav,
+ .load_lazy_sym,
+ .load_extern_func,
=> {
const addr_reg = (try self.register_manager.allocReg(null, abi.RegisterClass.gp)).to64();
const addr_reg_lock = self.register_manager.lockRegAssumeUnused(addr_reg);
@@ -175655,7 +175570,7 @@ fn airAsm(self: *CodeGen, inst: Air.Inst.Index) !void {
.memory => |addr| if (std.math.cast(i32, @as(i64, @bitCast(addr)))) |_|
break :arg input_mcv,
.indirect, .load_frame => break :arg input_mcv,
- .load_symbol, .load_direct, .load_got => {},
+ .load_nav, .load_uav, .load_lazy_sym, .load_extern_func => {},
else => {
const temp_mcv = try self.allocTempRegOrMem(ty, false);
try self.genCopy(ty, temp_mcv, input_mcv, .{});
@@ -175934,12 +175849,20 @@ fn airAsm(self: *CodeGen, inst: Air.Inst.Index) !void {
} }
else
return self.fail("invalid modifier: '{s}'", .{modifier}),
- .lea_got => |sym_index| if (std.mem.eql(u8, modifier, "P"))
- .{ .reg = try self.copyToTmpRegister(.usize, .{ .lea_got = sym_index }) }
+ .lea_nav => |nav| if (std.mem.eql(u8, modifier, "P"))
+ .{ .reg = try self.copyToTmpRegister(.usize, .{ .lea_nav = nav }) }
+ else
+ return self.fail("invalid modifier: '{s}'", .{modifier}),
+ .lea_uav => |uav| if (std.mem.eql(u8, modifier, "P"))
+ .{ .reg = try self.copyToTmpRegister(.usize, .{ .lea_uav = uav }) }
+ else
+ return self.fail("invalid modifier: '{s}'", .{modifier}),
+ .lea_lazy_sym => |lazy_sym| if (std.mem.eql(u8, modifier, "P"))
+ .{ .reg = try self.copyToTmpRegister(.usize, .{ .lea_lazy_sym = lazy_sym }) }
else
return self.fail("invalid modifier: '{s}'", .{modifier}),
- .lea_symbol => |sym_off| if (std.mem.eql(u8, modifier, "P"))
- .{ .reg = try self.copyToTmpRegister(.usize, .{ .lea_symbol = sym_off }) }
+ .lea_extern_func => |extern_func| if (std.mem.eql(u8, modifier, "P"))
+ .{ .reg = try self.copyToTmpRegister(.usize, .{ .lea_extern_func = extern_func }) }
else
return self.fail("invalid modifier: '{s}'", .{modifier}),
else => return self.fail("invalid constraint: '{s}'", .{op_str}),
@@ -176623,11 +176546,11 @@ fn genCopy(self: *CodeGen, ty: Type, dst_mcv: MCValue, src_mcv: MCValue, opts: C
.eflags,
.register_overflow,
.register_mask,
- .lea_direct,
- .lea_got,
.lea_frame,
- .lea_symbol,
- .lea_pcrel,
+ .lea_nav,
+ .lea_uav,
+ .lea_lazy_sym,
+ .lea_extern_func,
.elementwise_args,
.reserved_frame,
.air_ref,
@@ -176722,7 +176645,7 @@ fn genCopy(self: *CodeGen, ty: Type, dst_mcv: MCValue, src_mcv: MCValue, opts: C
}
return;
},
- .load_symbol, .load_pcrel, .load_direct, .load_got => {
+ .load_nav, .load_uav, .load_lazy_sym, .load_extern_func => {
const src_addr_reg =
(try self.register_manager.allocReg(null, abi.RegisterClass.gp)).to64();
const src_addr_lock = self.register_manager.lockRegAssumeUnused(src_addr_reg);
@@ -176755,7 +176678,11 @@ fn genCopy(self: *CodeGen, ty: Type, dst_mcv: MCValue, src_mcv: MCValue, opts: C
.undef => if (opts.safety and part_i > 0) .{ .register = dst_regs[0] } else .undef,
dst_tag => |src_regs| .{ .register = src_regs[part_i] },
.memory, .indirect, .load_frame => src_mcv.address().offset(part_disp).deref(),
- .load_symbol, .load_pcrel, .load_direct, .load_got => .{ .indirect = .{
+ .load_nav,
+ .load_uav,
+ .load_lazy_sym,
+ .load_extern_func,
+ => .{ .indirect = .{
.reg = src_info.?.addr_reg,
.off = part_disp,
} },
@@ -176776,11 +176703,11 @@ fn genCopy(self: *CodeGen, ty: Type, dst_mcv: MCValue, src_mcv: MCValue, opts: C
src_mcv,
opts,
),
- .memory, .load_symbol, .load_pcrel, .load_direct, .load_got => {
+ .memory => {
switch (dst_mcv) {
.memory => |addr| if (std.math.cast(i32, @as(i64, @bitCast(addr)))) |small_addr|
return self.genSetMem(.{ .reg = .ds }, small_addr, ty, src_mcv, opts),
- .load_symbol, .load_pcrel, .load_direct, .load_got => {},
+ .load_nav, .load_uav, .load_lazy_sym, .load_extern_func => {},
else => unreachable,
}
@@ -176797,6 +176724,10 @@ fn genCopy(self: *CodeGen, ty: Type, dst_mcv: MCValue, src_mcv: MCValue, opts: C
src_mcv,
opts,
),
+ .load_nav => |nav| try self.genSetMem(.{ .nav = nav }, 0, ty, src_mcv, opts),
+ .load_uav => |uav| try self.genSetMem(.{ .uav = uav }, 0, ty, src_mcv, opts),
+ .load_lazy_sym => |lazy_sym| try self.genSetMem(.{ .lazy_sym = lazy_sym }, 0, ty, src_mcv, opts),
+ .load_extern_func => |extern_func| try self.genSetMem(.{ .extern_func = extern_func }, 0, ty, src_mcv, opts),
}
}
@@ -176841,14 +176772,14 @@ fn genSetReg(
.len = self.vectorSize(.float),
.child = .u8_type,
});
- try self.genSetReg(dst_reg, full_ty, try self.genTypedValue(
+ try self.genSetReg(dst_reg, full_ty, try self.lowerValue(
.fromInterned(try pt.intern(.{ .aggregate = .{
.ty = full_ty.toIntern(),
.storage = .{ .repeated_elem = (try pt.intValue(.u8, 0xaa)).toIntern() },
} })),
), opts);
},
- .x87 => try self.genSetReg(dst_reg, .f80, try self.genTypedValue(
+ .x87 => try self.genSetReg(dst_reg, .f80, try self.lowerValue(
try pt.floatValue(.f80, @as(f80, @bitCast(@as(u80, 0xaaaaaaaaaaaaaaaaaaaa)))),
), opts),
.ip, .cr, .dr => unreachable,
@@ -176878,12 +176809,24 @@ fn genSetReg(
}
},
.register => |src_reg| if (dst_reg.id() != src_reg.id()) switch (dst_reg.class()) {
- .general_purpose, .gphi => switch (src_reg.class()) {
- .general_purpose, .gphi => try self.asmRegisterRegister(
+ .general_purpose => switch (src_reg.class()) {
+ .general_purpose => try self.asmRegisterRegister(
.{ ._, .mov },
dst_alias,
registerAlias(src_reg, abi_size),
),
+ .gphi => if (dst_reg.isClass(.gphi)) try self.asmRegisterRegister(
+ .{ ._, .mov },
+ dst_alias,
+ registerAlias(src_reg, abi_size),
+ ) else {
+ const src_lock = self.register_manager.lockReg(src_reg);
+ defer if (src_lock) |lock| self.register_manager.unlockReg(lock);
+ const tmp_reg = try self.register_manager.allocReg(null, abi.RegisterClass.gphi);
+
+ try self.asmRegisterRegister(.{ ._, .mov }, tmp_reg.to8(), src_reg);
+ try self.asmRegisterRegister(.{ ._, .mov }, dst_alias, tmp_reg.to8());
+ },
.segment => try self.asmRegisterRegister(
.{ ._, .mov },
dst_alias,
@@ -176919,6 +176862,26 @@ fn genSetReg(
});
},
},
+ .gphi => switch (src_reg.class()) {
+ .general_purpose => if (src_reg.isClass(.gphi)) try self.asmRegisterRegister(
+ .{ ._, .mov },
+ dst_alias,
+ registerAlias(src_reg, abi_size),
+ ) else {
+ const dst_lock = self.register_manager.lockReg(dst_reg);
+ defer if (dst_lock) |lock| self.register_manager.unlockReg(lock);
+ const tmp_reg = try self.register_manager.allocReg(null, abi.RegisterClass.gphi);
+
+ try self.asmRegisterRegister(.{ ._, .mov }, tmp_reg.to8(), src_reg.to8());
+ try self.asmRegisterRegister(.{ ._, .mov }, dst_reg, tmp_reg.to8());
+ },
+ .gphi => try self.asmRegisterRegister(
+ .{ ._, .mov },
+ dst_alias,
+ registerAlias(src_reg, abi_size),
+ ),
+ .segment, .x87, .mmx, .ip, .cr, .dr, .sse => unreachable,
+ },
.segment => try self.asmRegisterRegister(
.{ ._, .mov },
dst_reg,
@@ -177237,7 +177200,7 @@ fn genSetReg(
if (src_reg_mask.info.inverted) try self.asmRegister(.{ ._, .not }, registerAlias(bits_reg, abi_size));
try self.genSetReg(dst_reg, ty, .{ .register = bits_reg }, .{});
},
- .memory, .load_symbol, .load_pcrel, .load_direct, .load_got => {
+ .memory, .load_nav, .load_uav, .load_lazy_sym, .load_extern_func => {
switch (src_mcv) {
.memory => |addr| if (std.math.cast(i32, @as(i64, @bitCast(addr)))) |small_addr|
return (try self.moveStrategy(
@@ -177251,52 +177214,50 @@ fn genSetReg(
.disp = small_addr,
} },
}),
- .load_symbol => |sym_off| switch (dst_reg.class()) {
+ .load_nav => |nav| switch (dst_reg.class()) {
.general_purpose, .gphi => {
- assert(sym_off.off == 0);
try self.asmRegisterMemory(.{ ._, .mov }, dst_alias, .{
- .base = .{ .reloc = sym_off.sym_index },
- .mod = .{ .rm = .{
- .size = self.memSize(ty),
- .disp = sym_off.off,
- } },
+ .base = .{ .nav = nav },
+ .mod = .{ .rm = .{ .size = self.memSize(ty) } },
});
return;
},
.segment, .mmx, .ip, .cr, .dr => unreachable,
.x87, .sse => {},
},
- .load_pcrel => |sym_off| switch (dst_reg.class()) {
+ .load_uav => |uav| switch (dst_reg.class()) {
.general_purpose, .gphi => {
- assert(sym_off.off == 0);
try self.asmRegisterMemory(.{ ._, .mov }, dst_alias, .{
- .base = .{ .pcrel = sym_off.sym_index },
- .mod = .{ .rm = .{
- .size = self.memSize(ty),
- .disp = sym_off.off,
- } },
+ .base = .{ .uav = uav },
+ .mod = .{ .rm = .{ .size = self.memSize(ty) } },
});
return;
},
.segment, .mmx, .ip, .cr, .dr => unreachable,
.x87, .sse => {},
},
- .load_direct => |sym_index| switch (dst_reg.class()) {
+ .load_lazy_sym => |lazy_sym| switch (dst_reg.class()) {
.general_purpose, .gphi => {
- _ = try self.addInst(.{
- .tag = .mov,
- .ops = .direct_reloc,
- .data = .{ .rx = .{
- .r1 = dst_alias,
- .payload = try self.addExtra(bits.SymbolOffset{ .sym_index = sym_index }),
- } },
+ try self.asmRegisterMemory(.{ ._, .mov }, dst_alias, .{
+ .base = .{ .lazy_sym = lazy_sym },
+ .mod = .{ .rm = .{ .size = self.memSize(ty) } },
+ });
+ return;
+ },
+ .segment, .mmx, .ip, .cr, .dr => unreachable,
+ .x87, .sse => {},
+ },
+ .load_extern_func => |extern_func| switch (dst_reg.class()) {
+ .general_purpose, .gphi => {
+ try self.asmRegisterMemory(.{ ._, .mov }, dst_alias, .{
+ .base = .{ .extern_func = extern_func },
+ .mod = .{ .rm = .{ .size = self.memSize(ty) } },
});
return;
},
.segment, .mmx, .ip, .cr, .dr => unreachable,
.x87, .sse => {},
},
- .load_got => {},
else => unreachable,
}
@@ -177309,65 +177270,17 @@ fn genSetReg(
.mod = .{ .rm = .{ .size = self.memSize(ty) } },
});
},
- .lea_symbol => |sym_off| switch (self.bin_file.tag) {
- .elf, .macho => {
- try self.asmRegisterMemory(
- .{ ._, .lea },
- dst_reg.to64(),
- .{
- .base = .{ .reloc = sym_off.sym_index },
- },
- );
- if (sym_off.off != 0) try self.asmRegisterMemory(
- .{ ._, .lea },
- dst_reg.to64(),
- .{
- .base = .{ .reg = dst_reg.to64() },
- .mod = .{ .rm = .{ .disp = sym_off.off } },
- },
- );
- },
- else => return self.fail("TODO emit symbol sequence on {s}", .{
- @tagName(self.bin_file.tag),
- }),
- },
- .lea_pcrel => |sym_off| switch (self.bin_file.tag) {
- .elf, .macho => {
- try self.asmRegisterMemory(
- .{ ._, .lea },
- dst_reg.to64(),
- .{
- .base = .{ .pcrel = sym_off.sym_index },
- },
- );
- if (sym_off.off != 0) try self.asmRegisterMemory(
- .{ ._, .lea },
- dst_reg.to64(),
- .{
- .base = .{ .reg = dst_reg.to64() },
- .mod = .{ .rm = .{ .disp = sym_off.off } },
- },
- );
- },
- else => return self.fail("TODO emit symbol sequence on {s}", .{
- @tagName(self.bin_file.tag),
- }),
- },
- .lea_direct, .lea_got => |sym_index| _ = try self.addInst(.{
- .tag = switch (src_mcv) {
- .lea_direct => .lea,
- .lea_got => .mov,
- else => unreachable,
- },
- .ops = switch (src_mcv) {
- .lea_direct => .direct_reloc,
- .lea_got => .got_reloc,
- else => unreachable,
- },
- .data = .{ .rx = .{
- .r1 = dst_reg.to64(),
- .payload = try self.addExtra(bits.SymbolOffset{ .sym_index = sym_index }),
- } },
+ .lea_nav => |nav| try self.asmRegisterMemory(.{ ._, .lea }, dst_reg.to64(), .{
+ .base = .{ .nav = nav },
+ }),
+ .lea_uav => |uav| try self.asmRegisterMemory(.{ ._, .lea }, dst_reg.to64(), .{
+ .base = .{ .uav = uav },
+ }),
+ .lea_lazy_sym => |lazy_sym| try self.asmRegisterMemory(.{ ._, .lea }, dst_reg.to64(), .{
+ .base = .{ .lazy_sym = lazy_sym },
+ }),
+ .lea_extern_func => |lazy_sym| try self.asmRegisterMemory(.{ ._, .lea }, dst_reg.to64(), .{
+ .base = .{ .extern_func = lazy_sym },
}),
.air_ref => |src_ref| try self.genSetReg(dst_reg, ty, try self.resolveInst(src_ref), opts),
}
@@ -177388,9 +177301,10 @@ fn genSetMem(
.none => .{ .immediate = @bitCast(@as(i64, disp)) },
.reg => |base_reg| .{ .register_offset = .{ .reg = base_reg, .off = disp } },
.frame => |base_frame_index| .{ .lea_frame = .{ .index = base_frame_index, .off = disp } },
- .table, .rip_inst => unreachable,
- .reloc => |sym_index| .{ .lea_symbol = .{ .sym_index = sym_index, .off = disp } },
- .pcrel => |sym_index| .{ .lea_pcrel = .{ .sym_index = sym_index, .off = disp } },
+ .table, .rip_inst, .lazy_sym => unreachable,
+ .nav => |nav| .{ .lea_nav = nav },
+ .uav => |uav| .{ .lea_uav = uav },
+ .extern_func => |extern_func| .{ .lea_extern_func = extern_func },
};
switch (src_mcv) {
.none,
@@ -177453,6 +177367,7 @@ fn genSetMem(
.rm = .{ .size = .byte, .disp = disp },
} }),
.register => |src_reg| {
+ const ip = &zcu.intern_pool;
const mem_size = switch (base) {
.frame => |base_fi| mem_size: {
assert(disp >= 0);
@@ -177506,8 +177421,9 @@ fn genSetMem(
.index = frame_index,
.off = disp,
}).compare(.gte, src_align),
- .table, .rip_inst => unreachable,
- .reloc, .pcrel => false,
+ .table, .rip_inst, .lazy_sym, .extern_func => unreachable,
+ .nav => |nav| ip.getNav(nav).getAlignment().compare(.gte, src_align),
+ .uav => |uav| Type.fromInterned(uav.orig_ty).ptrAlignment(zcu).compare(.gte, src_align),
})).write(
self,
.{ .base = base, .mod = .{ .rm = .{
@@ -177590,16 +177506,16 @@ fn genSetMem(
},
.memory,
.indirect,
- .load_direct,
- .lea_direct,
- .load_got,
- .lea_got,
.load_frame,
.lea_frame,
- .load_symbol,
- .lea_symbol,
- .load_pcrel,
- .lea_pcrel,
+ .load_nav,
+ .lea_nav,
+ .load_uav,
+ .lea_uav,
+ .load_lazy_sym,
+ .lea_lazy_sym,
+ .load_extern_func,
+ .lea_extern_func,
=> switch (abi_size) {
0 => {},
1, 2, 4, 8 => {
@@ -177693,119 +177609,19 @@ fn genInlineMemset(
try self.asmOpOnly(.{ .@"rep _sb", .sto });
}
-fn genExternSymbolRef(
- self: *CodeGen,
- comptime tag: Mir.Inst.Tag,
- lib: ?[]const u8,
- callee: []const u8,
-) InnerError!void {
- if (self.bin_file.cast(.coff)) |coff_file| {
- const global_index = try coff_file.getGlobalSymbol(callee, lib);
- const scratch_reg = abi.getCAbiLinkerScratchReg(self.target.cCallingConvention().?);
- _ = try self.addInst(.{
- .tag = .mov,
- .ops = .import_reloc,
- .data = .{ .rx = .{
- .r1 = scratch_reg,
- .payload = try self.addExtra(bits.SymbolOffset{
- .sym_index = link.File.Coff.global_symbol_bit | global_index,
- }),
- } },
- });
- switch (tag) {
- .mov => {},
- .call => try self.asmRegister(.{ ._, .call }, scratch_reg),
- else => unreachable,
- }
- } else return self.fail("TODO implement calling extern functions", .{});
-}
-
fn genLazySymbolRef(
self: *CodeGen,
comptime tag: Mir.Inst.Tag,
reg: Register,
lazy_sym: link.File.LazySymbol,
) InnerError!void {
- const pt = self.pt;
- if (self.bin_file.cast(.elf)) |elf_file| {
- const zo = elf_file.zigObjectPtr().?;
- const sym_index = zo.getOrCreateMetadataForLazySymbol(elf_file, pt, lazy_sym) catch |err|
- return self.fail("{s} creating lazy symbol", .{@errorName(err)});
- if (self.mod.pic) {
- switch (tag) {
- .lea, .call => try self.genSetReg(reg, .usize, .{
- .lea_symbol = .{ .sym_index = sym_index },
- }, .{}),
- .mov => try self.genSetReg(reg, .usize, .{
- .load_symbol = .{ .sym_index = sym_index },
- }, .{}),
- else => unreachable,
- }
- switch (tag) {
- .lea, .mov => {},
- .call => try self.asmRegister(.{ ._, .call }, reg),
- else => unreachable,
- }
- } else switch (tag) {
- .lea, .mov => try self.asmRegisterMemory(.{ ._, tag }, reg.to64(), .{
- .base = .{ .reloc = sym_index },
- .mod = .{ .rm = .{ .size = .qword } },
- }),
- .call => try self.asmImmediate(.{ ._, .call }, .rel(.{ .sym_index = sym_index })),
- else => unreachable,
- }
- } else if (self.bin_file.cast(.plan9)) |p9_file| {
- const atom_index = p9_file.getOrCreateAtomForLazySymbol(pt, lazy_sym) catch |err|
- return self.fail("{s} creating lazy symbol", .{@errorName(err)});
- var atom = p9_file.getAtom(atom_index);
- _ = atom.getOrCreateOffsetTableEntry(p9_file);
- const got_addr = atom.getOffsetTableAddress(p9_file);
- const got_mem: Memory = .{
- .base = .{ .reg = .ds },
- .mod = .{ .rm = .{
- .size = .qword,
- .disp = @intCast(got_addr),
- } },
- };
- switch (tag) {
- .lea, .mov => try self.asmRegisterMemory(.{ ._, .mov }, reg.to64(), got_mem),
- .call => try self.asmMemory(.{ ._, .call }, got_mem),
- else => unreachable,
- }
- switch (tag) {
- .lea, .call => {},
- .mov => try self.asmRegisterMemory(
- .{ ._, tag },
- reg.to64(),
- .initSib(.qword, .{ .base = .{ .reg = reg.to64() } }),
- ),
- else => unreachable,
- }
- } else if (self.bin_file.cast(.coff)) |coff_file| {
- const atom_index = coff_file.getOrCreateAtomForLazySymbol(pt, lazy_sym) catch |err|
- return self.fail("{s} creating lazy symbol", .{@errorName(err)});
- const sym_index = coff_file.getAtom(atom_index).getSymbolIndex().?;
- switch (tag) {
- .lea, .call => try self.genSetReg(reg, .usize, .{ .lea_got = sym_index }, .{}),
- .mov => try self.genSetReg(reg, .usize, .{ .load_got = sym_index }, .{}),
- else => unreachable,
- }
- switch (tag) {
- .lea, .mov => {},
- .call => try self.asmRegister(.{ ._, .call }, reg),
- else => unreachable,
- }
- } else if (self.bin_file.cast(.macho)) |macho_file| {
- const zo = macho_file.getZigObject().?;
- const sym_index = zo.getOrCreateMetadataForLazySymbol(macho_file, pt, lazy_sym) catch |err|
- return self.fail("{s} creating lazy symbol", .{@errorName(err)});
- const sym = zo.symbols.items[sym_index];
+ if (self.mod.pic) {
switch (tag) {
.lea, .call => try self.genSetReg(reg, .usize, .{
- .lea_symbol = .{ .sym_index = sym.nlist_idx },
+ .lea_lazy_sym = lazy_sym,
}, .{}),
.mov => try self.genSetReg(reg, .usize, .{
- .load_symbol = .{ .sym_index = sym.nlist_idx },
+ .lea_lazy_sym = lazy_sym,
}, .{}),
else => unreachable,
}
@@ -177814,8 +177630,13 @@ fn genLazySymbolRef(
.call => try self.asmRegister(.{ ._, .call }, reg),
else => unreachable,
}
- } else {
- return self.fail("TODO implement genLazySymbol for x86_64 {s}", .{@tagName(self.bin_file.tag)});
+ } else switch (tag) {
+ .lea, .mov => try self.asmRegisterMemory(.{ ._, tag }, reg.to64(), .{
+ .base = .{ .lazy_sym = lazy_sym },
+ .mod = .{ .rm = .{ .size = .qword } },
+ }),
+ .call => try self.asmImmediate(.{ ._, .call }, .{ .lazy_sym = lazy_sym }),
+ else => unreachable,
}
}
@@ -177968,11 +177789,11 @@ fn airFloatFromInt(self: *CodeGen, inst: Air.Inst.Index) !void {
src_ty.fmt(pt), dst_ty.fmt(pt),
});
- var callee_buf: ["__floatun?i?f".len]u8 = undefined;
- break :result try self.genCall(.{ .lib = .{
+ var sym_buf: ["__floatun?i?f".len]u8 = undefined;
+ break :result try self.genCall(.{ .extern_func = .{
.return_type = dst_ty.toIntern(),
.param_types = &.{src_ty.toIntern()},
- .callee = std.fmt.bufPrint(&callee_buf, "__float{s}{c}i{c}f", .{
+ .sym = std.fmt.bufPrint(&sym_buf, "__float{s}{c}i{c}f", .{
switch (src_signedness) {
.signed => "",
.unsigned => "un",
@@ -178048,11 +177869,11 @@ fn airIntFromFloat(self: *CodeGen, inst: Air.Inst.Index) !void {
src_ty.fmt(pt), dst_ty.fmt(pt),
});
- var callee_buf: ["__fixuns?f?i".len]u8 = undefined;
- break :result try self.genCall(.{ .lib = .{
+ var sym_buf: ["__fixuns?f?i".len]u8 = undefined;
+ break :result try self.genCall(.{ .extern_func = .{
.return_type = dst_ty.toIntern(),
.param_types = &.{src_ty.toIntern()},
- .callee = std.fmt.bufPrint(&callee_buf, "__fix{s}{c}f{c}i", .{
+ .sym = std.fmt.bufPrint(&sym_buf, "__fix{s}{c}f{c}i", .{
switch (dst_signedness) {
.signed => "",
.unsigned => "uns",
@@ -178153,9 +177974,9 @@ fn airCmpxchg(self: *CodeGen, inst: Air.Inst.Index) !void {
.off => return self.fail("TODO airCmpxchg with {s}", .{@tagName(ptr_mcv)}),
}
const ptr_lock = switch (ptr_mem.base) {
- .none, .frame, .reloc, .pcrel => null,
+ .none, .frame, .nav, .uav => null,
.reg => |reg| self.register_manager.lockReg(reg),
- .table, .rip_inst => unreachable,
+ .table, .rip_inst, .lazy_sym, .extern_func => unreachable,
};
defer if (ptr_lock) |lock| self.register_manager.unlockReg(lock);
@@ -178236,9 +178057,9 @@ fn atomicOp(
.off => return self.fail("TODO airCmpxchg with {s}", .{@tagName(ptr_mcv)}),
}
const mem_lock = switch (ptr_mem.base) {
- .none, .frame, .reloc, .pcrel => null,
+ .none, .frame, .nav, .uav => null,
.reg => |reg| self.register_manager.lockReg(reg),
- .table, .rip_inst => unreachable,
+ .table, .rip_inst, .lazy_sym, .extern_func => unreachable,
};
defer if (mem_lock) |lock| self.register_manager.unlockReg(lock);
@@ -179627,7 +179448,7 @@ fn airSelect(self: *CodeGen, inst: Air.Inst.Index) !void {
var mask_elems_buf: [32]u8 = undefined;
const mask_elems = mask_elems_buf[0..mask_len];
for (mask_elems, 0..) |*elem, bit| elem.* = @intCast(bit / elem_bits);
- const mask_mcv = try self.genTypedValue(.fromInterned(try pt.intern(.{ .aggregate = .{
+ const mask_mcv = try self.lowerValue(.fromInterned(try pt.intern(.{ .aggregate = .{
.ty = mask_ty.toIntern(),
.storage = .{ .bytes = try zcu.intern_pool.getOrPutString(zcu.gpa, pt.tid, mask_elems, .maybe_embedded_nulls) },
} })));
@@ -179655,7 +179476,7 @@ fn airSelect(self: *CodeGen, inst: Air.Inst.Index) !void {
mask_elem_ty,
@as(u8, 1) << @truncate(bit),
)).toIntern();
- const mask_mcv = try self.genTypedValue(.fromInterned(try pt.intern(.{ .aggregate = .{
+ const mask_mcv = try self.lowerValue(.fromInterned(try pt.intern(.{ .aggregate = .{
.ty = mask_ty.toIntern(),
.storage = .{ .elems = mask_elems },
} })));
@@ -180386,7 +180207,7 @@ fn airShuffle(self: *CodeGen, inst: Air.Inst.Index) !void {
else
try select_mask_elem_ty.minIntScalar(pt, select_mask_elem_ty)).toIntern();
}
- const select_mask_mcv = try self.genTypedValue(.fromInterned(try pt.intern(.{ .aggregate = .{
+ const select_mask_mcv = try self.lowerValue(.fromInterned(try pt.intern(.{ .aggregate = .{
.ty = select_mask_ty.toIntern(),
.storage = .{ .elems = select_mask_elems[0..mask_elems.len] },
} })));
@@ -180531,7 +180352,7 @@ fn airShuffle(self: *CodeGen, inst: Air.Inst.Index) !void {
})).toIntern();
}
const lhs_mask_ty = try pt.vectorType(.{ .len = max_abi_size, .child = .u8_type });
- const lhs_mask_mcv = try self.genTypedValue(.fromInterned(try pt.intern(.{ .aggregate = .{
+ const lhs_mask_mcv = try self.lowerValue(.fromInterned(try pt.intern(.{ .aggregate = .{
.ty = lhs_mask_ty.toIntern(),
.storage = .{ .elems = lhs_mask_elems[0..max_abi_size] },
} })));
@@ -180562,7 +180383,7 @@ fn airShuffle(self: *CodeGen, inst: Air.Inst.Index) !void {
})).toIntern();
}
const rhs_mask_ty = try pt.vectorType(.{ .len = max_abi_size, .child = .u8_type });
- const rhs_mask_mcv = try self.genTypedValue(.fromInterned(try pt.intern(.{ .aggregate = .{
+ const rhs_mask_mcv = try self.lowerValue(.fromInterned(try pt.intern(.{ .aggregate = .{
.ty = rhs_mask_ty.toIntern(),
.storage = .{ .elems = rhs_mask_elems[0..max_abi_size] },
} })));
@@ -180896,7 +180717,7 @@ fn airAggregateInit(self: *CodeGen, inst: Air.Inst.Index) !void {
.{ .frame = frame_index },
@intCast(elem_size * elements.len),
elem_ty,
- try self.genTypedValue(sentinel),
+ try self.lowerValue(sentinel),
.{},
);
break :result .{ .load_frame = .{ .index = frame_index } };
@@ -180980,11 +180801,11 @@ fn airMulAdd(self: *CodeGen, inst: Air.Inst.Index) !void {
ty.fmt(pt),
});
- var callee_buf: ["__fma?".len]u8 = undefined;
- break :result try self.genCall(.{ .lib = .{
+ var sym_buf: ["__fma?".len]u8 = undefined;
+ break :result try self.genCall(.{ .extern_func = .{
.return_type = ty.toIntern(),
.param_types = &.{ ty.toIntern(), ty.toIntern(), ty.toIntern() },
- .callee = std.fmt.bufPrint(&callee_buf, "{s}fma{s}", .{
+ .sym = std.fmt.bufPrint(&sym_buf, "{s}fma{s}", .{
floatLibcAbiPrefix(ty),
floatLibcAbiSuffix(ty),
}) catch unreachable,
@@ -181384,7 +181205,7 @@ fn resolveInst(self: *CodeGen, ref: Air.Inst.Ref) InnerError!MCValue {
const mcv: MCValue = if (ref.toIndex()) |inst| mcv: {
break :mcv self.inst_tracking.getPtr(inst).?.short;
} else mcv: {
- break :mcv try self.genTypedValue(.fromInterned(ref.toInterned().?));
+ break :mcv try self.lowerValue(.fromInterned(ref.toInterned().?));
};
switch (mcv) {
@@ -181422,31 +181243,17 @@ fn limitImmediateType(self: *CodeGen, operand: Air.Inst.Ref, comptime T: type) !
return mcv;
}
-fn genResult(self: *CodeGen, res: codegen.GenResult) InnerError!MCValue {
- return switch (res) {
- .mcv => |mcv| switch (mcv) {
- .none => .none,
- .undef => .undef,
- .immediate => |imm| .{ .immediate = imm },
- .memory => |addr| .{ .memory = addr },
- .load_symbol => |sym_index| .{ .load_symbol = .{ .sym_index = sym_index } },
- .lea_symbol => |sym_index| .{ .lea_symbol = .{ .sym_index = sym_index } },
- .load_direct => |sym_index| .{ .load_direct = sym_index },
- .lea_direct => |sym_index| .{ .lea_direct = sym_index },
- .load_got => |sym_index| .{ .lea_got = sym_index },
- },
- .fail => |msg| return self.failMsg(msg),
+fn lowerValue(cg: *CodeGen, val: Value) Allocator.Error!MCValue {
+ return switch (try codegen.lowerValue(cg.pt, val, cg.target)) {
+ .none => .none,
+ .undef => .undef,
+ .immediate => |imm| .{ .immediate = imm },
+ .lea_nav => |nav| .{ .lea_nav = nav },
+ .lea_uav => |uav| .{ .lea_uav = uav },
+ .load_uav => |uav| .{ .load_uav = uav },
};
}
-fn genTypedValue(self: *CodeGen, val: Value) InnerError!MCValue {
- return self.genResult(try codegen.genTypedValue(self.bin_file, self.pt, self.src_loc, val, self.target.*));
-}
-
-fn lowerUav(self: *CodeGen, val: Value, alignment: InternPool.Alignment) InnerError!MCValue {
- return self.genResult(try self.bin_file.lowerUav(self.pt, val.toIntern(), alignment, self.src_loc));
-}
-
const CallMCValues = struct {
args: []MCValue,
air_arg_count: u32,
@@ -182311,16 +182118,16 @@ const Temp = struct {
.register_offset,
.register_mask,
.memory,
- .load_symbol,
- .lea_symbol,
- .load_pcrel,
- .lea_pcrel,
.indirect,
- .load_direct,
- .lea_direct,
- .load_got,
- .lea_got,
.lea_frame,
+ .load_nav,
+ .lea_nav,
+ .load_uav,
+ .lea_uav,
+ .load_lazy_sym,
+ .lea_lazy_sym,
+ .lea_extern_func,
+ .load_extern_func,
.elementwise_args,
.reserved_frame,
.air_ref,
@@ -182363,15 +182170,11 @@ const Temp = struct {
.mod = .{ .rm = .{ .disp = reg_off.off + off } },
});
},
- .load_symbol, .load_frame => {
+ .load_frame, .load_nav, .lea_nav, .load_uav, .lea_uav, .load_lazy_sym, .lea_lazy_sym => {
const new_reg = try cg.register_manager.allocReg(new_temp_index.toIndex(), abi.RegisterClass.gp);
new_temp_index.tracking(cg).* = .init(.{ .register_offset = .{ .reg = new_reg, .off = off } });
try cg.genSetReg(new_reg, .usize, mcv, .{});
},
- .lea_symbol => |sym_off| new_temp_index.tracking(cg).* = .init(.{ .lea_symbol = .{
- .sym_index = sym_off.sym_index,
- .off = sym_off.off + off,
- } }),
.lea_frame => |frame_addr| new_temp_index.tracking(cg).* = .init(.{ .lea_frame = .{
.index = frame_addr.index,
.off = frame_addr.off + off,
@@ -182404,14 +182207,6 @@ const Temp = struct {
} });
return;
},
- .lea_symbol => |sym_off| {
- assert(std.meta.eql(temp_tracking.long.lea_symbol, sym_off));
- temp_tracking.* = .init(.{ .lea_symbol = .{
- .sym_index = sym_off.sym_index,
- .off = sym_off.off + off,
- } });
- return;
- },
.lea_frame => |frame_addr| {
assert(std.meta.eql(temp_tracking.long.lea_frame, frame_addr));
temp_tracking.* = .init(.{ .lea_frame = .{
@@ -182460,53 +182255,85 @@ const Temp = struct {
.mod = .{ .rm = .{ .disp = reg_off.off + @as(u31, limb_index) * 8 } },
});
},
- .load_symbol => |sym_off| {
+ .load_frame => |frame_addr| {
const new_reg =
try cg.register_manager.allocReg(new_temp_index.toIndex(), abi.RegisterClass.gp);
new_temp_index.tracking(cg).* = .init(.{ .register = new_reg });
try cg.asmRegisterMemory(.{ ._, .mov }, new_reg.to64(), .{
- .base = .{ .reloc = sym_off.sym_index },
+ .base = .{ .frame = frame_addr.index },
.mod = .{ .rm = .{
.size = .qword,
- .disp = sym_off.off + @as(u31, limb_index) * 8,
+ .disp = frame_addr.off + @as(u31, limb_index) * 8,
} },
});
},
- .lea_symbol => |sym_off| {
+ .lea_frame => |frame_addr| {
assert(limb_index == 0);
- new_temp_index.tracking(cg).* = .init(.{ .lea_symbol = sym_off });
+ new_temp_index.tracking(cg).* = .init(.{ .lea_frame = frame_addr });
},
- .load_pcrel => |sym_off| {
+ .load_nav => |nav| {
const new_reg =
try cg.register_manager.allocReg(new_temp_index.toIndex(), abi.RegisterClass.gp);
new_temp_index.tracking(cg).* = .init(.{ .register = new_reg });
try cg.asmRegisterMemory(.{ ._, .mov }, new_reg.to64(), .{
- .base = .{ .pcrel = sym_off.sym_index },
+ .base = .{ .nav = nav },
.mod = .{ .rm = .{
.size = .qword,
- .disp = sym_off.off + @as(u31, limb_index) * 8,
+ .disp = @as(u31, limb_index) * 8,
} },
});
},
- .lea_pcrel => |sym_off| {
+ .lea_nav => |nav| {
assert(limb_index == 0);
- new_temp_index.tracking(cg).* = .init(.{ .lea_pcrel = sym_off });
+ new_temp_index.tracking(cg).* = .init(.{ .lea_nav = nav });
},
- .load_frame => |frame_addr| {
+ .load_uav => |uav| {
const new_reg =
try cg.register_manager.allocReg(new_temp_index.toIndex(), abi.RegisterClass.gp);
new_temp_index.tracking(cg).* = .init(.{ .register = new_reg });
try cg.asmRegisterMemory(.{ ._, .mov }, new_reg.to64(), .{
- .base = .{ .frame = frame_addr.index },
+ .base = .{ .uav = uav },
.mod = .{ .rm = .{
.size = .qword,
- .disp = frame_addr.off + @as(u31, limb_index) * 8,
+ .disp = @as(u31, limb_index) * 8,
} },
});
},
- .lea_frame => |frame_addr| {
+ .lea_uav => |uav| {
assert(limb_index == 0);
- new_temp_index.tracking(cg).* = .init(.{ .lea_frame = frame_addr });
+ new_temp_index.tracking(cg).* = .init(.{ .lea_uav = uav });
+ },
+ .load_lazy_sym => |lazy_sym| {
+ const new_reg =
+ try cg.register_manager.allocReg(new_temp_index.toIndex(), abi.RegisterClass.gp);
+ new_temp_index.tracking(cg).* = .init(.{ .register = new_reg });
+ try cg.asmRegisterMemory(.{ ._, .mov }, new_reg.to64(), .{
+ .base = .{ .lazy_sym = lazy_sym },
+ .mod = .{ .rm = .{
+ .size = .qword,
+ .disp = @as(u31, limb_index) * 8,
+ } },
+ });
+ },
+ .lea_lazy_sym => |lazy_sym| {
+ assert(limb_index == 0);
+ new_temp_index.tracking(cg).* = .init(.{ .lea_lazy_sym = lazy_sym });
+ },
+ .load_extern_func => |extern_func| {
+ const new_reg =
+ try cg.register_manager.allocReg(new_temp_index.toIndex(), abi.RegisterClass.gp);
+ new_temp_index.tracking(cg).* = .init(.{ .register = new_reg });
+ try cg.asmRegisterMemory(.{ ._, .mov }, new_reg.to64(), .{
+ .base = .{ .extern_func = extern_func },
+ .mod = .{ .rm = .{
+ .size = .qword,
+ .disp = @as(u31, limb_index) * 8,
+ } },
+ });
+ },
+ .lea_extern_func => |extern_func| {
+ assert(limb_index == 0);
+ new_temp_index.tracking(cg).* = .init(.{ .lea_extern_func = extern_func });
},
}
cg.next_temp_index = @enumFromInt(@intFromEnum(new_temp_index) + 1);
@@ -182563,7 +182390,7 @@ const Temp = struct {
const temp_tracking = temp_index.tracking(cg);
switch (temp_tracking.short) {
else => {},
- .register, .lea_symbol, .lea_frame => {
+ .register, .lea_frame, .lea_nav, .lea_uav, .lea_lazy_sym => {
assert(limb_index == 0);
cg.temp_type[@intFromEnum(temp_index)] = limb_ty;
return;
@@ -182580,15 +182407,6 @@ const Temp = struct {
cg.temp_type[@intFromEnum(temp_index)] = limb_ty;
return;
},
- .load_symbol => |sym_off| {
- assert(std.meta.eql(temp_tracking.long.load_symbol, sym_off));
- temp_tracking.* = .init(.{ .load_symbol = .{
- .sym_index = sym_off.sym_index,
- .off = sym_off.off + @as(u31, limb_index) * 8,
- } });
- cg.temp_type[@intFromEnum(temp_index)] = limb_ty;
- return;
- },
.load_frame => |frame_addr| if (!frame_addr.index.isNamed()) {
assert(std.meta.eql(temp_tracking.long.load_frame, frame_addr));
temp_tracking.* = .init(.{ .load_frame = .{
@@ -182779,27 +182597,20 @@ const Temp = struct {
.immediate,
.register,
.register_offset,
- .lea_direct,
- .lea_got,
.lea_frame,
=> return false,
.memory,
.indirect,
- .load_symbol,
- .load_pcrel,
- .load_direct,
- .load_got,
.load_frame,
+ .load_nav,
+ .lea_nav,
+ .load_uav,
+ .lea_uav,
+ .load_lazy_sym,
+ .lea_lazy_sym,
+ .load_extern_func,
+ .lea_extern_func,
=> return temp.toRegClass(true, .general_purpose, cg),
- .lea_symbol, .lea_pcrel => |sym_off| {
- const off = sym_off.off;
- // hack around linker relocation bugs
- if (false and off == 0) return false;
- try temp.toOffset(-off, cg);
- while (try temp.toRegClass(true, .general_purpose, cg)) {}
- try temp.toOffset(off, cg);
- return true;
- },
}
}
@@ -182866,7 +182677,7 @@ const Temp = struct {
), cg),
else => unreachable,
},
- .memory, .indirect, .load_frame, .load_symbol => {
+ .memory, .indirect, .load_frame, .load_nav, .load_uav, .load_lazy_sym => {
var val_ptr = try cg.tempInit(.usize, val_mcv.address());
var len = try cg.tempInit(.usize, .{ .immediate = val_ty.abiSize(cg.pt.zcu) });
try val_ptr.memcpy(ptr, &len, cg);
@@ -182904,7 +182715,11 @@ const Temp = struct {
// hack around linker relocation bugs
switch (ptr.tracking(cg).short) {
else => {},
- .lea_symbol => while (try ptr.toRegClass(false, .general_purpose, cg)) {},
+ .lea_nav,
+ .lea_uav,
+ .lea_lazy_sym,
+ .lea_extern_func,
+ => while (try ptr.toRegClass(false, .general_purpose, cg)) {},
}
try cg.asmMemoryImmediate(
.{ ._, .mov },
@@ -182918,7 +182733,11 @@ const Temp = struct {
// hack around linker relocation bugs
switch (ptr.tracking(cg).short) {
else => {},
- .lea_symbol => while (try ptr.toRegClass(false, .general_purpose, cg)) {},
+ .lea_nav,
+ .lea_uav,
+ .lea_lazy_sym,
+ .lea_extern_func,
+ => while (try ptr.toRegClass(false, .general_purpose, cg)) {},
}
try cg.asmSetccMemory(
cc,
@@ -182962,8 +182781,8 @@ const Temp = struct {
try ptr.tracking(cg).short.deref().mem(cg, .{ .size = .byte }),
);
},
- .lea_frame, .lea_symbol => continue :val_to_gpr,
- .memory, .indirect, .load_frame, .load_symbol => {
+ .lea_frame, .lea_nav, .lea_uav, .lea_lazy_sym => continue :val_to_gpr,
+ .memory, .indirect, .load_frame, .load_nav, .load_uav, .load_lazy_sym => {
var val_ptr = try cg.tempInit(.usize, val_mcv.address());
var len = try cg.tempInit(.usize, .{ .immediate = val_ty.abiSize(cg.pt.zcu) });
try ptr.memcpy(&val_ptr, &len, cg);
@@ -183003,7 +182822,7 @@ const Temp = struct {
), cg),
else => unreachable,
},
- .memory, .indirect, .load_frame, .load_symbol => {
+ .memory, .indirect, .load_frame, .load_nav, .load_uav, .load_lazy_sym => {
var val_ptr = try cg.tempInit(.usize, val_mcv.address());
var src_ptr =
try cg.tempInit(.usize, src.tracking(cg).short.address().offset(opts.disp));
@@ -183097,8 +182916,8 @@ const Temp = struct {
}),
);
},
- .lea_frame, .lea_symbol => continue :val_to_gpr,
- .memory, .indirect, .load_frame, .load_symbol => {
+ .lea_frame, .lea_nav, .lea_uav, .lea_lazy_sym => continue :val_to_gpr,
+ .memory, .indirect, .load_frame, .load_nav, .load_uav, .load_lazy_sym => {
var dst_ptr =
try cg.tempInit(.usize, dst.tracking(cg).short.address().offset(opts.disp));
var val_ptr = try cg.tempInit(.usize, val_mcv.address());
@@ -183119,7 +182938,7 @@ const Temp = struct {
// hack around linker relocation bugs
switch (ptr.tracking(cg).short) {
else => {},
- .lea_symbol => |sym_off| if (dst_rc != .general_purpose or sym_off.off != 0)
+ .lea_nav, .lea_uav, .lea_lazy_sym => if (dst_rc != .general_purpose)
while (try ptr.toRegClass(false, .general_purpose, cg)) {},
}
try strat.read(cg, dst_reg, try ptr.tracking(cg).short.deref().mem(cg, .{
@@ -183139,7 +182958,7 @@ const Temp = struct {
// hack around linker relocation bugs
switch (ptr.tracking(cg).short) {
else => {},
- .lea_symbol => while (try ptr.toRegClass(false, .general_purpose, cg)) {},
+ .lea_nav, .lea_uav, .lea_lazy_sym => while (try ptr.toRegClass(false, .general_purpose, cg)) {},
}
const strat = try cg.moveStrategy(src_ty, src_rc, false);
try strat.write(cg, try ptr.tracking(cg).short.deref().mem(cg, .{
@@ -186902,7 +186721,7 @@ const Temp = struct {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divti3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divti3" } },
.unused,
.unused,
.unused,
@@ -186931,7 +186750,7 @@ const Temp = struct {
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__udivti3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__udivti3" } },
.unused,
.unused,
.unused,
@@ -186964,7 +186783,7 @@ const Temp = struct {
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 1 } } },
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 2 } } },
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 3 } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divei4" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divei4" } },
.unused,
.unused,
.unused,
@@ -186997,7 +186816,7 @@ const Temp = struct {
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 1 } } },
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 2 } } },
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 3 } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__udivei4" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__udivei4" } },
.unused,
.unused,
.unused,
@@ -187361,7 +187180,7 @@ const Temp = struct {
.{ .type = .i64, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 1 } } },
.{ .type = .u64, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 2 } } },
.{ .type = .i64, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 3 } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divti3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divti3" } },
.{ .type = .u64, .kind = .{ .ret_gpr = .{ .cc = .ccc, .at = 0 } } },
.unused,
.unused,
@@ -187399,7 +187218,7 @@ const Temp = struct {
.{ .type = .u64, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 1 } } },
.{ .type = .u64, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 2 } } },
.{ .type = .u64, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 3 } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__udivti3" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__udivti3" } },
.{ .type = .u64, .kind = .{ .ret_gpr = .{ .cc = .ccc, .at = 0 } } },
.unused,
.unused,
@@ -187437,7 +187256,7 @@ const Temp = struct {
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 1 } } },
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 2 } } },
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 3 } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__divei4" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__divei4" } },
.unused,
.unused,
.unused,
@@ -187473,7 +187292,7 @@ const Temp = struct {
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 1 } } },
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 2 } } },
.{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .ccc, .at = 3 } } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__udivei4" } } },
+ .{ .type = .usize, .kind = .{ .extern_func = "__udivei4" } },
.unused,
.unused,
.unused,
@@ -187528,16 +187347,16 @@ const Temp = struct {
.register_overflow,
.register_mask,
.memory,
- .load_symbol,
- .lea_symbol,
- .load_pcrel,
- .lea_pcrel,
.indirect,
- .load_direct,
- .lea_direct,
- .load_got,
- .lea_got,
.load_frame,
+ .load_nav,
+ .lea_nav,
+ .load_uav,
+ .lea_uav,
+ .load_lazy_sym,
+ .lea_lazy_sym,
+ .load_extern_func,
+ .lea_extern_func,
=> {
const result = try cg.allocRegOrMem(inst, true);
try cg.genCopy(cg.typeOfIndex(inst), result, temp_mcv, .{});
@@ -187714,7 +187533,7 @@ fn tempInit(cg: *CodeGen, ty: Type, value: MCValue) InnerError!Temp {
}
fn tempFromValue(cg: *CodeGen, value: Value) InnerError!Temp {
- return cg.tempInit(value.typeOf(cg.pt.zcu), try cg.genTypedValue(value));
+ return cg.tempInit(value.typeOf(cg.pt.zcu), try cg.lowerValue(value));
}
fn tempMemFromValue(cg: *CodeGen, value: Value) InnerError!Temp {
@@ -187722,13 +187541,20 @@ fn tempMemFromValue(cg: *CodeGen, value: Value) InnerError!Temp {
}
fn tempMemFromAlignedValue(cg: *CodeGen, alignment: InternPool.Alignment, value: Value) InnerError!Temp {
- return cg.tempInit(value.typeOf(cg.pt.zcu), try cg.lowerUav(value, alignment));
+ const ty = value.typeOf(cg.pt.zcu);
+ return cg.tempInit(ty, .{ .load_uav = .{
+ .val = value.toIntern(),
+ .orig_ty = (try cg.pt.ptrType(.{
+ .child = ty.toIntern(),
+ .flags = .{
+ .is_const = true,
+ .alignment = alignment,
+ },
+ })).toIntern(),
+ } });
}
fn tempFromOperand(cg: *CodeGen, op_ref: Air.Inst.Ref, op_dies: bool) InnerError!Temp {
- const zcu = cg.pt.zcu;
- const ip = &zcu.intern_pool;
-
if (op_dies) {
const temp_index = cg.next_temp_index;
const temp: Temp = .{ .index = temp_index.toIndex() };
@@ -187742,8 +187568,7 @@ fn tempFromOperand(cg: *CodeGen, op_ref: Air.Inst.Ref, op_dies: bool) InnerError
}
if (op_ref.toIndex()) |op_inst| return .{ .index = op_inst };
- const val = op_ref.toInterned().?;
- return cg.tempInit(.fromInterned(ip.typeOf(val)), try cg.genTypedValue(.fromInterned(val)));
+ return cg.tempFromValue(.fromInterned(op_ref.toInterned().?));
}
fn tempsFromOperandsInner(
@@ -188578,8 +188403,8 @@ const Select = struct {
splat_int_mem: struct { ref: Select.Operand.Ref, inside: enum { umin, smin, smax } = .umin, outside: enum { smin, smax } },
splat_float_mem: struct { ref: Select.Operand.Ref, inside: enum { zero } = .zero, outside: f16 },
frame: FrameIndex,
- lazy_symbol: struct { kind: link.File.LazySymbol.Kind, ref: Select.Operand.Ref = .none },
- symbol: *const struct { lib: ?[]const u8 = null, name: []const u8 },
+ lazy_sym: struct { kind: link.File.LazySymbol.Kind, ref: Select.Operand.Ref = .none },
+ extern_func: [*:0]const u8,
const ConstSpec = struct {
ref: Select.Operand.Ref = .none,
@@ -189010,43 +188835,21 @@ const Select = struct {
} }))), true };
},
.frame => |frame_index| .{ try cg.tempInit(spec.type, .{ .load_frame = .{ .index = frame_index } }), true },
- .lazy_symbol => |lazy_symbol_spec| {
+ .lazy_sym => |lazy_symbol_spec| {
const ip = &pt.zcu.intern_pool;
const ty = if (lazy_symbol_spec.ref == .none) spec.type else lazy_symbol_spec.ref.typeOf(s);
- const lazy_symbol: link.File.LazySymbol = .{
+ return .{ try cg.tempInit(.usize, .{ .lea_lazy_sym = .{
.kind = lazy_symbol_spec.kind,
.ty = switch (ip.indexToKey(ty.toIntern())) {
.inferred_error_set_type => |func_index| switch (ip.funcIesResolvedUnordered(func_index)) {
- .none => unreachable, // unresolved inferred error set
+ .none => unreachable,
else => |ty_index| ty_index,
},
else => ty.toIntern(),
},
- };
- return .{ try cg.tempInit(.usize, .{ .lea_symbol = .{
- .sym_index = if (cg.bin_file.cast(.elf)) |elf_file|
- elf_file.zigObjectPtr().?.getOrCreateMetadataForLazySymbol(elf_file, pt, lazy_symbol) catch |err|
- return cg.fail("{s} creating lazy symbol", .{@errorName(err)})
- else if (cg.bin_file.cast(.macho)) |macho_file|
- macho_file.getZigObject().?.getOrCreateMetadataForLazySymbol(macho_file, pt, lazy_symbol) catch |err|
- return cg.fail("{s} creating lazy symbol", .{@errorName(err)})
- else if (cg.bin_file.cast(.coff)) |coff_file|
- coff_file.getAtom(coff_file.getOrCreateAtomForLazySymbol(pt, lazy_symbol) catch |err|
- return cg.fail("{s} creating lazy symbol", .{@errorName(err)})).getSymbolIndex().?
- else
- return cg.fail("external symbols unimplemented for {s}", .{@tagName(cg.bin_file.tag)}),
} }), true };
},
- .symbol => |symbol_spec| .{ try cg.tempInit(spec.type, .{ .lea_symbol = .{
- .sym_index = if (cg.bin_file.cast(.elf)) |elf_file|
- try elf_file.getGlobalSymbol(symbol_spec.name, symbol_spec.lib)
- else if (cg.bin_file.cast(.macho)) |macho_file|
- try macho_file.getGlobalSymbol(symbol_spec.name, symbol_spec.lib)
- else if (cg.bin_file.cast(.coff)) |coff_file|
- link.File.Coff.global_symbol_bit | try coff_file.getGlobalSymbol(symbol_spec.name, symbol_spec.lib)
- else
- return cg.fail("external symbols unimplemented for {s}", .{@tagName(cg.bin_file.tag)}),
- } }), true },
+ .extern_func => |extern_func_spec| .{ try cg.tempInit(spec.type, .{ .lea_extern_func = try cg.addString(std.mem.span(extern_func_spec)) }), true },
};
}
@@ -190089,9 +189892,12 @@ const Select = struct {
.register => |reg| .{ .reg = s.lowerReg(reg.toSize(op.flags.base.size, s.cg.target)) },
.register_pair, .register_triple, .register_quadruple, .register_offset, .register_overflow => unreachable,
.register_mask => |reg_mask| .{ .reg = s.lowerReg(reg_mask.reg.toSize(op.flags.base.size, s.cg.target)) },
+ .lea_nav => |nav| .{ .imm = .{ .nav = .{ .index = nav } } },
+ .lea_uav => |uav| .{ .imm = .{ .uav = uav } },
+ .lea_lazy_sym => |lazy_sym| .{ .imm = .{ .lazy_sym = lazy_sym } },
+ .lea_extern_func => |extern_func| .{ .imm = .{ .extern_func = extern_func } },
else => |mcv| .{ .mem = try mcv.mem(s.cg, .{ .size = op.flags.base.size }) },
- .lea_symbol => |sym_off| .{ .imm = .rel(sym_off) },
- .load_direct, .lea_direct, .load_got, .lea_got, .lea_frame, .elementwise_args, .reserved_frame, .air_ref => unreachable,
+ .lea_frame, .elementwise_args, .reserved_frame, .air_ref => unreachable,
},
1...2 => |imm| switch (op.flags.base.ref.valueOf(s)) {
inline .register_pair, .register_triple, .register_quadruple => |regs| .{
@@ -190105,37 +189911,20 @@ const Select = struct {
},
.simm => .{ .imm = .s(op.adjustedImm(i32, s)) },
.uimm => .{ .imm = .u(@bitCast(op.adjustedImm(i64, s))) },
- .lea => .{ .mem = .{
- .base = switch (op.flags.base.ref.valueOf(s)) {
+ .lea => .{ .mem = try op.flags.base.ref.valueOf(s).deref().mem(s.cg, .{
+ .size = op.flags.base.size,
+ .index = switch (op.flags.index.ref.valueOf(s)) {
else => unreachable,
.none => .none,
- .register => |base_reg| .{ .reg = base_reg.toSize(.ptr, s.cg.target) },
- .register_offset => |base_reg_off| .{ .reg = base_reg_off.reg.toSize(.ptr, s.cg.target) },
- .lea_symbol => |base_sym_off| .{ .reloc = base_sym_off.sym_index },
- .lea_pcrel => |base_sym_off| .{ .pcrel = base_sym_off.sym_index },
+ .register => |index_reg| index_reg.toSize(.ptr, s.cg.target),
},
- .mod = .{ .rm = .{
- .size = op.flags.base.size,
- .index = switch (op.flags.index.ref.valueOf(s)) {
- else => unreachable,
- .none => .none,
- .register => |index_reg| index_reg.toSize(.ptr, s.cg.target),
- .register_offset => |index_reg_off| index_reg_off.reg.toSize(.ptr, s.cg.target),
- },
- .scale = op.flags.index.scale,
- .disp = op.adjustedImm(i32, s) + switch (op.flags.base.ref.valueOf(s)) {
- else => unreachable,
- .none, .register => 0,
- .register_offset => |base_reg_off| base_reg_off.off,
- .lea_symbol => |base_sym_off| base_sym_off.off,
- } + switch (op.flags.index.ref.valueOf(s)) {
- else => unreachable,
- .none, .register => 0,
- .register_offset => |base_reg_off| base_reg_off.off,
- .lea_symbol => |base_sym_off| base_sym_off.off,
- },
- } },
- } },
+ .scale = op.flags.index.scale,
+ .disp = op.adjustedImm(i32, s) + switch (op.flags.index.ref.valueOf(s)) {
+ else => unreachable,
+ .none, .register, .lea_nav, .lea_uav, .lea_lazy_sym, .lea_extern_func => 0,
+ .register_offset => |base_reg_off| base_reg_off.off,
+ },
+ }) },
.mem => .{ .mem = try op.flags.base.ref.valueOf(s).mem(s.cg, .{
.size = op.flags.base.size,
.index = switch (op.flags.index.ref.valueOf(s)) {
src/arch/x86_64/Emit.zig
@@ -1,6 +1,9 @@
//! This file contains the functionality for emitting x86_64 MIR as machine code
lower: Lower,
+bin_file: *link.File,
+pt: Zcu.PerThread,
+pic: bool,
atom_index: u32,
debug_output: link.File.DebugInfoOutput,
code: *std.ArrayListUnmanaged(u8),
@@ -9,28 +12,28 @@ prev_di_loc: Loc,
/// Relative to the beginning of `code`.
prev_di_pc: usize,
+code_offset_mapping: std.ArrayListUnmanaged(u32),
+relocs: std.ArrayListUnmanaged(Reloc),
+table_relocs: std.ArrayListUnmanaged(TableReloc),
+
pub const Error = Lower.Error || error{
EmitFail,
} || link.File.UpdateDebugInfoError;
pub fn emitMir(emit: *Emit) Error!void {
- const gpa = emit.lower.bin_file.comp.gpa;
- const code_offset_mapping = try emit.lower.allocator.alloc(u32, emit.lower.mir.instructions.len);
- defer emit.lower.allocator.free(code_offset_mapping);
- var relocs: std.ArrayListUnmanaged(Reloc) = .empty;
- defer relocs.deinit(emit.lower.allocator);
- var table_relocs: std.ArrayListUnmanaged(TableReloc) = .empty;
- defer table_relocs.deinit(emit.lower.allocator);
- var local_name_index: usize = 0;
+ const gpa = emit.bin_file.comp.gpa;
+ try emit.code_offset_mapping.resize(gpa, emit.lower.mir.instructions.len);
+ emit.relocs.clearRetainingCapacity();
+ emit.table_relocs.clearRetainingCapacity();
var local_index: usize = 0;
for (0..emit.lower.mir.instructions.len) |mir_i| {
const mir_index: Mir.Inst.Index = @intCast(mir_i);
- code_offset_mapping[mir_index] = @intCast(emit.code.items.len);
+ emit.code_offset_mapping.items[mir_index] = @intCast(emit.code.items.len);
const lowered = try emit.lower.lowerMir(mir_index);
var lowered_relocs = lowered.relocs;
- for (lowered.insts, 0..) |lowered_inst, lowered_index| {
- const start_offset: u32 = @intCast(emit.code.items.len);
+ lowered_inst: for (lowered.insts, 0..) |lowered_inst, lowered_index| {
if (lowered_inst.prefix == .directive) {
+ const start_offset: u32 = @intCast(emit.code.items.len);
switch (emit.debug_output) {
.dwarf => |dwarf| switch (lowered_inst.encoding.mnemonic) {
.@".cfi_def_cfa" => try dwarf.genDebugFrame(start_offset, .{ .def_cfa = .{
@@ -83,204 +86,305 @@ pub fn emitMir(emit: *Emit) Error!void {
}
continue;
}
- try lowered_inst.encode(emit.code.writer(gpa), .{});
- const end_offset: u32 = @intCast(emit.code.items.len);
+ var reloc_info_buf: [2]RelocInfo = undefined;
+ var reloc_info_index: usize = 0;
while (lowered_relocs.len > 0 and
lowered_relocs[0].lowered_inst_index == lowered_index) : ({
lowered_relocs = lowered_relocs[1..];
- }) switch (lowered_relocs[0].target) {
- .inst => |target| {
- const inst_length: u4 = @intCast(end_offset - start_offset);
- const reloc_offset, const reloc_length = reloc_offset_length: {
- var reloc_offset = inst_length;
- var op_index: usize = lowered_inst.ops.len;
- while (true) {
- op_index -= 1;
- const op = lowered_inst.encoding.data.ops[op_index];
- if (op == .none) continue;
- const is_mem = op.isMemory();
- const enc_length: u4 = if (is_mem) switch (lowered_inst.ops[op_index].mem.sib.base) {
- .rip_inst => 4,
- else => unreachable,
- } else @intCast(std.math.divCeil(u7, @intCast(op.immBitSize()), 8) catch unreachable);
- reloc_offset -= enc_length;
- if (op_index == lowered_relocs[0].op_index) break :reloc_offset_length .{ reloc_offset, enc_length };
- std.debug.assert(!is_mem);
- }
- };
- try relocs.append(emit.lower.allocator, .{
- .inst_offset = start_offset,
- .inst_length = inst_length,
- .source_offset = reloc_offset,
- .source_length = reloc_length,
- .target = target,
- .target_offset = lowered_relocs[0].off,
- });
- },
- .table => try table_relocs.append(emit.lower.allocator, .{
- .source_offset = end_offset - 4,
- .target_offset = lowered_relocs[0].off,
- }),
- .linker_extern_fn => |sym_index| if (emit.lower.bin_file.cast(.elf)) |elf_file| {
- // Add relocation to the decl.
- const zo = elf_file.zigObjectPtr().?;
- const atom_ptr = zo.symbol(emit.atom_index).atom(elf_file).?;
- const r_type = @intFromEnum(std.elf.R_X86_64.PLT32);
- try atom_ptr.addReloc(gpa, .{
- .r_offset = end_offset - 4,
- .r_info = @as(u64, sym_index) << 32 | r_type,
- .r_addend = lowered_relocs[0].off - 4,
- }, zo);
- } else if (emit.lower.bin_file.cast(.macho)) |macho_file| {
- // Add relocation to the decl.
- const zo = macho_file.getZigObject().?;
- const atom = zo.symbols.items[emit.atom_index].getAtom(macho_file).?;
- try atom.addReloc(macho_file, .{
- .tag = .@"extern",
- .offset = end_offset - 4,
- .target = sym_index,
- .addend = lowered_relocs[0].off,
- .type = .branch,
- .meta = .{
- .pcrel = true,
- .has_subtractor = false,
- .length = 2,
- .symbolnum = @intCast(sym_index),
+ reloc_info_index += 1;
+ }) reloc_info_buf[reloc_info_index] = .{
+ .op_index = lowered_relocs[0].op_index,
+ .off = lowered_relocs[0].off,
+ .target = target: switch (lowered_relocs[0].target) {
+ .inst => |inst| .{ .index = inst, .is_extern = false, .type = .inst },
+ .table => .{ .index = undefined, .is_extern = false, .type = .table },
+ .nav => |nav| {
+ const ip = &emit.pt.zcu.intern_pool;
+ const sym_index = switch (try codegen.genNavRef(
+ emit.bin_file,
+ emit.pt,
+ emit.lower.src_loc,
+ .fromInterned(ip.getNav(nav).typeOf(ip)),
+ nav,
+ emit.lower.target.*,
+ )) {
+ .mcv => |mcv| switch (mcv) {
+ else => std.debug.panic("{s}: {}\n", .{ @src().fn_name, mcv }),
+ .lea_symbol => |sym_index| sym_index,
+ },
+ .fail => |em| {
+ assert(emit.lower.err_msg == null);
+ emit.lower.err_msg = em;
+ return error.EmitFail;
+ },
+ };
+ break :target switch (ip.getNav(nav).status) {
+ .unresolved => unreachable,
+ .type_resolved => |type_resolved| .{
+ .index = sym_index,
+ .is_extern = false,
+ .type = if (type_resolved.is_threadlocal) .tlv else .symbol,
+ },
+ .fully_resolved => |fully_resolved| switch (ip.indexToKey(fully_resolved.val)) {
+ .@"extern" => |@"extern"| .{
+ .index = sym_index,
+ .is_extern = switch (@"extern".visibility) {
+ .default => true,
+ .hidden, .protected => false,
+ },
+ .type = if (@"extern".is_threadlocal) .tlv else .symbol,
+ .force_pcrel_direct = switch (@"extern".relocation) {
+ .any => false,
+ .pcrel => true,
+ },
+ },
+ .variable => |variable| .{
+ .index = sym_index,
+ .is_extern = false,
+ .type = if (variable.is_threadlocal) .tlv else .symbol,
+ },
+ else => .{ .index = sym_index, .is_extern = false, .type = .symbol },
+ },
+ };
+ },
+ .uav => |uav| .{
+ .index = switch (try emit.bin_file.lowerUav(
+ emit.pt,
+ uav.val,
+ Type.fromInterned(uav.orig_ty).ptrAlignment(emit.pt.zcu),
+ emit.lower.src_loc,
+ )) {
+ .mcv => |mcv| switch (mcv) {
+ else => std.debug.panic("{s}: {}\n", .{ @src().fn_name, mcv }),
+ .load_direct, .load_symbol => |sym_index| sym_index,
+ },
+ .fail => |em| {
+ assert(emit.lower.err_msg == null);
+ emit.lower.err_msg = em;
+ return error.EmitFail;
+ },
},
- });
- } else if (emit.lower.bin_file.cast(.coff)) |coff_file| {
- // Add relocation to the decl.
- const atom_index = coff_file.getAtomIndexForSymbol(
- .{ .sym_index = emit.atom_index, .file = null },
- ).?;
- const target = if (link.File.Coff.global_symbol_bit & sym_index != 0)
- coff_file.getGlobalByIndex(link.File.Coff.global_symbol_mask & sym_index)
- else
- link.File.Coff.SymbolWithLoc{ .sym_index = sym_index, .file = null };
- try coff_file.addRelocation(atom_index, .{
- .type = .direct,
- .target = target,
- .offset = end_offset - 4,
- .addend = @intCast(lowered_relocs[0].off),
- .pcrel = true,
- .length = 2,
- });
- } else return emit.fail("TODO implement extern reloc for {s}", .{
- @tagName(emit.lower.bin_file.tag),
- }),
- .linker_tlsld => |sym_index| {
- const elf_file = emit.lower.bin_file.cast(.elf).?;
- const zo = elf_file.zigObjectPtr().?;
- const atom = zo.symbol(emit.atom_index).atom(elf_file).?;
- const r_type = @intFromEnum(std.elf.R_X86_64.TLSLD);
- try atom.addReloc(gpa, .{
- .r_offset = end_offset - 4,
- .r_info = @as(u64, sym_index) << 32 | r_type,
- .r_addend = lowered_relocs[0].off - 4,
- }, zo);
- },
- .linker_dtpoff => |sym_index| {
- const elf_file = emit.lower.bin_file.cast(.elf).?;
- const zo = elf_file.zigObjectPtr().?;
- const atom = zo.symbol(emit.atom_index).atom(elf_file).?;
- const r_type = @intFromEnum(std.elf.R_X86_64.DTPOFF32);
- try atom.addReloc(gpa, .{
- .r_offset = end_offset - 4,
- .r_info = @as(u64, sym_index) << 32 | r_type,
- .r_addend = lowered_relocs[0].off,
- }, zo);
- },
- .linker_reloc, .linker_pcrel => |sym_index| if (emit.lower.bin_file.cast(.elf)) |elf_file| {
- const zo = elf_file.zigObjectPtr().?;
- const atom = zo.symbol(emit.atom_index).atom(elf_file).?;
- const sym = zo.symbol(sym_index);
- if (emit.lower.pic) {
- const r_type: u32 = if (sym.flags.is_extern_ptr and lowered_relocs[0].target != .linker_pcrel)
- @intFromEnum(std.elf.R_X86_64.GOTPCREL)
+ .is_extern = false,
+ .type = .symbol,
+ },
+ .lazy_sym => |lazy_sym| .{
+ .index = if (emit.bin_file.cast(.elf)) |elf_file|
+ elf_file.zigObjectPtr().?.getOrCreateMetadataForLazySymbol(elf_file, emit.pt, lazy_sym) catch |err|
+ return emit.fail("{s} creating lazy symbol", .{@errorName(err)})
+ else if (emit.bin_file.cast(.macho)) |macho_file|
+ macho_file.getZigObject().?.getOrCreateMetadataForLazySymbol(macho_file, emit.pt, lazy_sym) catch |err|
+ return emit.fail("{s} creating lazy symbol", .{@errorName(err)})
+ else if (emit.bin_file.cast(.coff)) |coff_file| sym_index: {
+ const atom = coff_file.getOrCreateAtomForLazySymbol(emit.pt, lazy_sym) catch |err|
+ return emit.fail("{s} creating lazy symbol", .{@errorName(err)});
+ break :sym_index coff_file.getAtom(atom).getSymbolIndex().?;
+ } else if (emit.bin_file.cast(.plan9)) |p9_file|
+ p9_file.getOrCreateAtomForLazySymbol(emit.pt, lazy_sym) catch |err|
+ return emit.fail("{s} creating lazy symbol", .{@errorName(err)})
else
- @intFromEnum(std.elf.R_X86_64.PC32);
- try atom.addReloc(gpa, .{
- .r_offset = end_offset - 4,
- .r_info = @as(u64, sym_index) << 32 | r_type,
- .r_addend = lowered_relocs[0].off - 4,
- }, zo);
- } else {
- const r_type: u32 = if (sym.flags.is_tls)
- @intFromEnum(std.elf.R_X86_64.TPOFF32)
+ return emit.fail("lazy symbols unimplemented for {s}", .{@tagName(emit.bin_file.tag)}),
+ .is_extern = false,
+ .type = .symbol,
+ },
+ .extern_func => |extern_func| .{
+ .index = if (emit.bin_file.cast(.elf)) |elf_file|
+ try elf_file.getGlobalSymbol(extern_func.toSlice(&emit.lower.mir).?, null)
+ else if (emit.bin_file.cast(.macho)) |macho_file|
+ try macho_file.getGlobalSymbol(extern_func.toSlice(&emit.lower.mir).?, null)
+ else if (emit.bin_file.cast(.coff)) |coff_file|
+ link.File.Coff.global_symbol_bit | try coff_file.getGlobalSymbol(extern_func.toSlice(&emit.lower.mir).?, null)
else
- @intFromEnum(std.elf.R_X86_64.@"32");
- try atom.addReloc(gpa, .{
- .r_offset = end_offset - 4,
- .r_info = @as(u64, sym_index) << 32 | r_type,
- .r_addend = lowered_relocs[0].off,
- }, zo);
- }
- } else if (emit.lower.bin_file.cast(.macho)) |macho_file| {
- const zo = macho_file.getZigObject().?;
- const atom = zo.symbols.items[emit.atom_index].getAtom(macho_file).?;
- const sym = &zo.symbols.items[sym_index];
- const @"type": link.File.MachO.Relocation.Type = if (sym.flags.is_extern_ptr and lowered_relocs[0].target != .linker_pcrel)
- .got_load
- else if (sym.flags.tlv)
- .tlv
- else
- .signed;
- try atom.addReloc(macho_file, .{
- .tag = .@"extern",
- .offset = @intCast(end_offset - 4),
- .target = sym_index,
- .addend = lowered_relocs[0].off,
- .type = @"type",
- .meta = .{
- .pcrel = true,
- .has_subtractor = false,
- .length = 2,
- .symbolnum = @intCast(sym_index),
+ return emit.fail("external symbols unimplemented for {s}", .{@tagName(emit.bin_file.tag)}),
+ .is_extern = true,
+ .type = .symbol,
+ },
+ },
+ };
+ const reloc_info = reloc_info_buf[0..reloc_info_index];
+ for (reloc_info) |*reloc| switch (reloc.target.type) {
+ .inst, .table => {},
+ .symbol => {
+ switch (lowered_inst.encoding.mnemonic) {
+ .call => {
+ reloc.target.type = .branch;
+ try emit.encodeInst(lowered_inst, reloc_info);
+ continue :lowered_inst;
},
+ else => {},
+ }
+ if (emit.bin_file.cast(.elf)) |_| {
+ if (!emit.pic) switch (lowered_inst.encoding.mnemonic) {
+ .lea => try emit.encodeInst(try .new(.none, .mov, &.{
+ lowered_inst.ops[0],
+ .{ .imm = .s(0) },
+ }, emit.lower.target), reloc_info),
+ .mov => try emit.encodeInst(try .new(.none, .mov, &.{
+ lowered_inst.ops[0],
+ .{ .mem = .initSib(lowered_inst.ops[reloc.op_index].mem.sib.ptr_size, .{
+ .base = .{ .reg = .ds },
+ }) },
+ }, emit.lower.target), reloc_info),
+ else => unreachable,
+ } else if (reloc.target.is_extern) switch (lowered_inst.encoding.mnemonic) {
+ .lea => try emit.encodeInst(try .new(.none, .mov, &.{
+ lowered_inst.ops[0],
+ .{ .mem = .initRip(.ptr, 0) },
+ }, emit.lower.target), reloc_info),
+ .mov => {
+ try emit.encodeInst(try .new(.none, .mov, &.{
+ lowered_inst.ops[0],
+ .{ .mem = .initRip(.ptr, 0) },
+ }, emit.lower.target), reloc_info);
+ try emit.encodeInst(try .new(.none, .mov, &.{
+ lowered_inst.ops[0],
+ .{ .mem = .initSib(lowered_inst.ops[reloc.op_index].mem.sib.ptr_size, .{ .base = .{
+ .reg = lowered_inst.ops[0].reg.to64(),
+ } }) },
+ }, emit.lower.target), &.{});
+ },
+ else => unreachable,
+ } else switch (lowered_inst.encoding.mnemonic) {
+ .lea => try emit.encodeInst(try .new(.none, .lea, &.{
+ lowered_inst.ops[0],
+ .{ .mem = .initRip(.none, 0) },
+ }, emit.lower.target), reloc_info),
+ .mov => try emit.encodeInst(try .new(.none, .mov, &.{
+ lowered_inst.ops[0],
+ .{ .mem = .initRip(lowered_inst.ops[reloc.op_index].mem.sib.ptr_size, 0) },
+ }, emit.lower.target), reloc_info),
+ else => unreachable,
+ }
+ } else if (emit.bin_file.cast(.macho)) |_| {
+ if (reloc.target.is_extern) switch (lowered_inst.encoding.mnemonic) {
+ .lea => try emit.encodeInst(try .new(.none, .mov, &.{
+ lowered_inst.ops[0],
+ .{ .mem = .initRip(.ptr, 0) },
+ }, emit.lower.target), reloc_info),
+ .mov => {
+ try emit.encodeInst(try .new(.none, .mov, &.{
+ lowered_inst.ops[0],
+ .{ .mem = .initRip(.ptr, 0) },
+ }, emit.lower.target), reloc_info);
+ try emit.encodeInst(try .new(.none, .mov, &.{
+ lowered_inst.ops[0],
+ .{ .mem = .initSib(lowered_inst.ops[reloc.op_index].mem.sib.ptr_size, .{ .base = .{
+ .reg = lowered_inst.ops[0].reg.to64(),
+ } }) },
+ }, emit.lower.target), &.{});
+ },
+ else => unreachable,
+ } else switch (lowered_inst.encoding.mnemonic) {
+ .lea => try emit.encodeInst(try .new(.none, .lea, &.{
+ lowered_inst.ops[0],
+ .{ .mem = .initRip(.none, 0) },
+ }, emit.lower.target), reloc_info),
+ .mov => try emit.encodeInst(try .new(.none, .mov, &.{
+ lowered_inst.ops[0],
+ .{ .mem = .initRip(lowered_inst.ops[reloc.op_index].mem.sib.ptr_size, 0) },
+ }, emit.lower.target), reloc_info),
+ else => unreachable,
+ }
+ } else return emit.fail("TODO implement relocs for {s}", .{
+ @tagName(emit.bin_file.tag),
});
- } else unreachable,
- .linker_got,
- .linker_direct,
- .linker_import,
- => |sym_index| if (emit.lower.bin_file.cast(.elf)) |_| {
- unreachable;
- } else if (emit.lower.bin_file.cast(.macho)) |_| {
- unreachable;
- } else if (emit.lower.bin_file.cast(.coff)) |coff_file| {
- const atom_index = coff_file.getAtomIndexForSymbol(.{
- .sym_index = emit.atom_index,
- .file = null,
- }).?;
- const target = if (link.File.Coff.global_symbol_bit & sym_index != 0)
- coff_file.getGlobalByIndex(link.File.Coff.global_symbol_mask & sym_index)
- else
- link.File.Coff.SymbolWithLoc{ .sym_index = sym_index, .file = null };
- try coff_file.addRelocation(atom_index, .{
- .type = switch (lowered_relocs[0].target) {
- .linker_got => .got,
- .linker_direct => .direct,
- .linker_import => .import,
+ continue :lowered_inst;
+ },
+ .branch, .tls => unreachable,
+ .tlv => {
+ if (emit.bin_file.cast(.elf)) |elf_file| {
+ if (reloc.target.is_extern) {
+ // TODO handle extern TLS vars, i.e., emit GD model
+ return emit.fail("TODO implement extern {s} reloc for {s}", .{
+ @tagName(reloc.target.type), @tagName(emit.bin_file.tag),
+ });
+ } else if (emit.pic) switch (lowered_inst.encoding.mnemonic) {
+ .lea, .mov => {
+ // Here, we currently assume local dynamic TLS vars, and so
+ // we emit LD model.
+ try emit.encodeInst(try .new(.none, .lea, &.{
+ .{ .reg = .rdi },
+ .{ .mem = .initRip(.none, 0) },
+ }, emit.lower.target), &.{.{
+ .op_index = 1,
+ .target = .{
+ .index = reloc.target.index,
+ .is_extern = false,
+ .type = .tls,
+ },
+ }});
+ try emit.encodeInst(try .new(.none, .call, &.{
+ .{ .imm = .s(0) },
+ }, emit.lower.target), &.{.{
+ .op_index = 0,
+ .target = .{
+ .index = try elf_file.getGlobalSymbol("__tls_get_addr", null),
+ .is_extern = true,
+ .type = .branch,
+ },
+ }});
+ try emit.encodeInst(try .new(.none, lowered_inst.encoding.mnemonic, &.{
+ lowered_inst.ops[0],
+ .{ .mem = .initSib(.none, .{
+ .base = .{ .reg = .rax },
+ .disp = std.math.minInt(i32),
+ }) },
+ }, emit.lower.target), reloc_info);
+ },
else => unreachable,
+ } else switch (lowered_inst.encoding.mnemonic) {
+ .lea, .mov => {
+ // Since we are linking statically, we emit LE model directly.
+ try emit.encodeInst(try .new(.none, .mov, &.{
+ .{ .reg = .rax },
+ .{ .mem = .initSib(.qword, .{ .base = .{ .reg = .fs } }) },
+ }, emit.lower.target), &.{});
+ try emit.encodeInst(try .new(.none, lowered_inst.encoding.mnemonic, &.{
+ lowered_inst.ops[0],
+ .{ .mem = .initSib(.none, .{
+ .base = .{ .reg = .rax },
+ .disp = std.math.minInt(i32),
+ }) },
+ }, emit.lower.target), reloc_info);
+ },
+ else => unreachable,
+ }
+ } else if (emit.bin_file.cast(.macho)) |_| switch (lowered_inst.encoding.mnemonic) {
+ .lea => {
+ try emit.encodeInst(try .new(.none, .mov, &.{
+ .{ .reg = .rdi },
+ .{ .mem = .initRip(.ptr, 0) },
+ }, emit.lower.target), reloc_info);
+ try emit.encodeInst(try .new(.none, .call, &.{
+ .{ .mem = .initSib(.qword, .{ .base = .{ .reg = .rdi } }) },
+ }, emit.lower.target), &.{});
+ try emit.encodeInst(try .new(.none, .mov, &.{
+ lowered_inst.ops[0],
+ .{ .reg = .rax },
+ }, emit.lower.target), &.{});
},
- .target = target,
- .offset = @intCast(end_offset - 4),
- .addend = @intCast(lowered_relocs[0].off),
- .pcrel = true,
- .length = 2,
- });
- } else if (emit.lower.bin_file.cast(.plan9)) |p9_file| {
- try p9_file.addReloc(emit.atom_index, .{ // TODO we may need to add a .type field to the relocs if they are .linker_got instead of just .linker_direct
- .target = sym_index, // we set sym_index to just be the atom index
- .offset = @intCast(end_offset - 4),
- .addend = @intCast(lowered_relocs[0].off),
- .type = .pcrel,
+ .mov => {
+ try emit.encodeInst(try .new(.none, .mov, &.{
+ .{ .reg = .rdi },
+ .{ .mem = .initRip(.ptr, 0) },
+ }, emit.lower.target), reloc_info);
+ try emit.encodeInst(try .new(.none, .call, &.{
+ .{ .mem = .initSib(.qword, .{ .base = .{ .reg = .rdi } }) },
+ }, emit.lower.target), &.{});
+ try emit.encodeInst(try .new(.none, .mov, &.{
+ lowered_inst.ops[0],
+ .{ .mem = .initSib(.qword, .{ .base = .{ .reg = .rax } }) },
+ }, emit.lower.target), &.{});
+ },
+ else => unreachable,
+ } else return emit.fail("TODO implement relocs for {s}", .{
+ @tagName(emit.bin_file.tag),
});
- } else return emit.fail("TODO implement linker reloc for {s}", .{
- @tagName(emit.lower.bin_file.tag),
- }),
+ continue :lowered_inst;
+ },
};
+ try emit.encodeInst(lowered_inst, reloc_info);
}
- std.debug.assert(lowered_relocs.len == 0);
+ assert(lowered_relocs.len == 0);
if (lowered.insts.len == 0) {
const mir_inst = emit.lower.mir.instructions.get(mir_index);
@@ -358,7 +462,6 @@ pub fn emitMir(emit: *Emit) Error!void {
.pseudo_dbg_arg_i_s,
.pseudo_dbg_arg_i_u,
.pseudo_dbg_arg_i_64,
- .pseudo_dbg_arg_reloc,
.pseudo_dbg_arg_ro,
.pseudo_dbg_arg_fa,
.pseudo_dbg_arg_m,
@@ -366,7 +469,6 @@ pub fn emitMir(emit: *Emit) Error!void {
.pseudo_dbg_var_i_s,
.pseudo_dbg_var_i_u,
.pseudo_dbg_var_i_64,
- .pseudo_dbg_var_reloc,
.pseudo_dbg_var_ro,
.pseudo_dbg_var_fa,
.pseudo_dbg_var_m,
@@ -391,16 +493,6 @@ pub fn emitMir(emit: *Emit) Error!void {
loc_buf[0] = .{ .constu = mir_inst.data.i64 };
break :stack_value &loc_buf[0];
} },
- .pseudo_dbg_arg_reloc, .pseudo_dbg_var_reloc => .{ .plus = .{
- sym: {
- loc_buf[0] = .{ .addr_reloc = mir_inst.data.reloc.sym_index };
- break :sym &loc_buf[0];
- },
- off: {
- loc_buf[1] = .{ .consts = mir_inst.data.reloc.off };
- break :off &loc_buf[1];
- },
- } },
.pseudo_dbg_arg_fa, .pseudo_dbg_var_fa => {
const reg_off = emit.lower.mir.resolveFrameAddr(mir_inst.data.fa);
break :loc .{ .plus = .{
@@ -415,15 +507,53 @@ pub fn emitMir(emit: *Emit) Error!void {
} };
},
.pseudo_dbg_arg_m, .pseudo_dbg_var_m => {
- const mem = emit.lower.mem(undefined, mir_inst.data.x.payload);
+ const ip = &emit.pt.zcu.intern_pool;
+ const mem = emit.lower.mir.resolveMemoryExtra(mir_inst.data.x.payload).decode();
break :loc .{ .plus = .{
base: {
loc_buf[0] = switch (mem.base()) {
.none => .{ .constu = 0 },
.reg => |reg| .{ .breg = reg.dwarfNum() },
.frame, .table, .rip_inst => unreachable,
- .reloc => |sym_index| .{ .addr_reloc = sym_index },
- .pcrel => unreachable,
+ .nav => |nav| .{ .addr_reloc = switch (codegen.genNavRef(
+ emit.bin_file,
+ emit.pt,
+ emit.lower.src_loc,
+ .fromInterned(ip.getNav(nav).typeOf(ip)),
+ nav,
+ emit.lower.target.*,
+ ) catch |err| switch (err) {
+ error.CodegenFail,
+ => return emit.fail("unable to codegen: {s}", .{@errorName(err)}),
+ else => |e| return e,
+ }) {
+ .mcv => |mcv| switch (mcv) {
+ else => unreachable,
+ .load_direct, .load_symbol => |sym_index| sym_index,
+ },
+ .fail => |em| {
+ assert(emit.lower.err_msg == null);
+ emit.lower.err_msg = em;
+ return error.EmitFail;
+ },
+ } },
+ .uav => |uav| .{ .addr_reloc = switch (try emit.bin_file.lowerUav(
+ emit.pt,
+ uav.val,
+ Type.fromInterned(uav.orig_ty).ptrAlignment(emit.pt.zcu),
+ emit.lower.src_loc,
+ )) {
+ .mcv => |mcv| switch (mcv) {
+ else => unreachable,
+ .load_direct, .load_symbol => |sym_index| sym_index,
+ },
+ .fail => |em| {
+ assert(emit.lower.err_msg == null);
+ emit.lower.err_msg = em;
+ return error.EmitFail;
+ },
+ } },
+ .lazy_sym, .extern_func => unreachable,
};
break :base &loc_buf[0];
},
@@ -438,13 +568,8 @@ pub fn emitMir(emit: *Emit) Error!void {
},
};
- const local_name_bytes = emit.lower.mir.local_name_bytes[local_name_index..];
- const local_name = local_name_bytes[0..std.mem.indexOfScalar(u8, local_name_bytes, 0).? :0];
- local_name_index += local_name.len + 1;
-
- const local_type = emit.lower.mir.local_types[local_index];
+ const local = &emit.lower.mir.locals[local_index];
local_index += 1;
-
try dwarf.genLocalVarDebugInfo(
switch (mir_inst.ops) {
else => unreachable,
@@ -452,7 +577,6 @@ pub fn emitMir(emit: *Emit) Error!void {
.pseudo_dbg_arg_i_s,
.pseudo_dbg_arg_i_u,
.pseudo_dbg_arg_i_64,
- .pseudo_dbg_arg_reloc,
.pseudo_dbg_arg_ro,
.pseudo_dbg_arg_fa,
.pseudo_dbg_arg_m,
@@ -462,27 +586,23 @@ pub fn emitMir(emit: *Emit) Error!void {
.pseudo_dbg_var_i_s,
.pseudo_dbg_var_i_u,
.pseudo_dbg_var_i_64,
- .pseudo_dbg_var_reloc,
.pseudo_dbg_var_ro,
.pseudo_dbg_var_fa,
.pseudo_dbg_var_m,
.pseudo_dbg_var_val,
=> .local_var,
},
- local_name,
- .fromInterned(local_type),
+ local.name.toSlice(&emit.lower.mir),
+ .fromInterned(local.type),
loc,
);
},
- .plan9 => {},
- .none => {},
+ .plan9, .none => local_index += 1,
},
.pseudo_dbg_arg_val, .pseudo_dbg_var_val => switch (emit.debug_output) {
.dwarf => |dwarf| {
- const local_name_bytes = emit.lower.mir.local_name_bytes[local_name_index..];
- const local_name = local_name_bytes[0..std.mem.indexOfScalar(u8, local_name_bytes, 0).? :0];
- local_name_index += local_name.len + 1;
-
+ const local = &emit.lower.mir.locals[local_index];
+ local_index += 1;
try dwarf.genLocalConstDebugInfo(
emit.lower.src_loc,
switch (mir_inst.ops) {
@@ -490,12 +610,11 @@ pub fn emitMir(emit: *Emit) Error!void {
.pseudo_dbg_arg_val => .comptime_arg,
.pseudo_dbg_var_val => .local_const,
},
- local_name,
+ local.name.toSlice(&emit.lower.mir),
.fromInterned(mir_inst.data.ip_index),
);
},
- .plan9 => {},
- .none => {},
+ .plan9, .none => local_index += 1,
},
.pseudo_dbg_var_args_none => switch (emit.debug_output) {
.dwarf => |dwarf| try dwarf.genVarArgsDebugInfo(),
@@ -507,8 +626,8 @@ pub fn emitMir(emit: *Emit) Error!void {
}
}
}
- for (relocs.items) |reloc| {
- const target = code_offset_mapping[reloc.target];
+ for (emit.relocs.items) |reloc| {
+ const target = emit.code_offset_mapping.items[reloc.target];
const disp = @as(i64, @intCast(target)) - @as(i64, @intCast(reloc.inst_offset + reloc.inst_length)) + reloc.target_offset;
const inst_bytes = emit.code.items[reloc.inst_offset..][0..reloc.inst_length];
switch (reloc.source_length) {
@@ -522,13 +641,13 @@ pub fn emitMir(emit: *Emit) Error!void {
}
}
if (emit.lower.mir.table.len > 0) {
- if (emit.lower.bin_file.cast(.elf)) |elf_file| {
+ if (emit.bin_file.cast(.elf)) |elf_file| {
const zo = elf_file.zigObjectPtr().?;
const atom = zo.symbol(emit.atom_index).atom(elf_file).?;
const ptr_size = @divExact(emit.lower.target.ptrBitWidth(), 8);
var table_offset = std.mem.alignForward(u32, @intCast(emit.code.items.len), ptr_size);
- for (table_relocs.items) |table_reloc| try atom.addReloc(gpa, .{
+ for (emit.table_relocs.items) |table_reloc| try atom.addReloc(gpa, .{
.r_offset = table_reloc.source_offset,
.r_info = @as(u64, emit.atom_index) << 32 | @intFromEnum(std.elf.R_X86_64.@"32"),
.r_addend = @as(i64, table_offset) + table_reloc.target_offset,
@@ -537,7 +656,7 @@ pub fn emitMir(emit: *Emit) Error!void {
try atom.addReloc(gpa, .{
.r_offset = table_offset,
.r_info = @as(u64, emit.atom_index) << 32 | @intFromEnum(std.elf.R_X86_64.@"64"),
- .r_addend = code_offset_mapping[entry],
+ .r_addend = emit.code_offset_mapping.items[entry],
}, zo);
table_offset += ptr_size;
}
@@ -546,6 +665,192 @@ pub fn emitMir(emit: *Emit) Error!void {
}
}
+pub fn deinit(emit: *Emit) void {
+ const gpa = emit.bin_file.comp.gpa;
+ emit.code_offset_mapping.deinit(gpa);
+ emit.relocs.deinit(gpa);
+ emit.table_relocs.deinit(gpa);
+ emit.* = undefined;
+}
+
+const RelocInfo = struct {
+ op_index: Lower.InstOpIndex,
+ off: i32 = 0,
+ target: Target,
+
+ const Target = struct {
+ index: u32,
+ is_extern: bool,
+ type: Target.Type,
+ force_pcrel_direct: bool = false,
+
+ const Type = enum { inst, table, symbol, branch, tls, tlv };
+ };
+};
+
+fn encodeInst(emit: *Emit, lowered_inst: Instruction, reloc_info: []const RelocInfo) Error!void {
+ const comp = emit.bin_file.comp;
+ const gpa = comp.gpa;
+ const start_offset: u32 = @intCast(emit.code.items.len);
+ try lowered_inst.encode(emit.code.writer(gpa), .{});
+ const end_offset: u32 = @intCast(emit.code.items.len);
+ for (reloc_info) |reloc| switch (reloc.target.type) {
+ .inst => {
+ const inst_length: u4 = @intCast(end_offset - start_offset);
+ const reloc_offset, const reloc_length = reloc_offset_length: {
+ var reloc_offset = inst_length;
+ var op_index: usize = lowered_inst.ops.len;
+ while (true) {
+ op_index -= 1;
+ const op = lowered_inst.encoding.data.ops[op_index];
+ if (op == .none) continue;
+ const is_mem = op.isMemory();
+ const enc_length: u4 = if (is_mem) switch (lowered_inst.ops[op_index].mem.sib.base) {
+ .rip_inst => 4,
+ else => unreachable,
+ } else @intCast(std.math.divCeil(u7, @intCast(op.immBitSize()), 8) catch unreachable);
+ reloc_offset -= enc_length;
+ if (op_index == reloc.op_index) break :reloc_offset_length .{ reloc_offset, enc_length };
+ assert(!is_mem);
+ }
+ };
+ try emit.relocs.append(emit.lower.allocator, .{
+ .inst_offset = start_offset,
+ .inst_length = inst_length,
+ .source_offset = reloc_offset,
+ .source_length = reloc_length,
+ .target = reloc.target.index,
+ .target_offset = reloc.off,
+ });
+ },
+ .table => try emit.table_relocs.append(emit.lower.allocator, .{
+ .source_offset = end_offset - 4,
+ .target_offset = reloc.off,
+ }),
+ .symbol => if (emit.bin_file.cast(.elf)) |elf_file| {
+ const zo = elf_file.zigObjectPtr().?;
+ const atom = zo.symbol(emit.atom_index).atom(elf_file).?;
+ const r_type: std.elf.R_X86_64 = if (!emit.pic)
+ .@"32"
+ else if (reloc.target.is_extern and !reloc.target.force_pcrel_direct)
+ .GOTPCREL
+ else
+ .PC32;
+ try atom.addReloc(gpa, .{
+ .r_offset = end_offset - 4,
+ .r_info = @as(u64, reloc.target.index) << 32 | @intFromEnum(r_type),
+ .r_addend = if (emit.pic) reloc.off - 4 else reloc.off,
+ }, zo);
+ } else if (emit.bin_file.cast(.macho)) |macho_file| {
+ const zo = macho_file.getZigObject().?;
+ const atom = zo.symbols.items[emit.atom_index].getAtom(macho_file).?;
+ try atom.addReloc(macho_file, .{
+ .tag = .@"extern",
+ .offset = end_offset - 4,
+ .target = reloc.target.index,
+ .addend = reloc.off,
+ .type = if (reloc.target.is_extern and !reloc.target.force_pcrel_direct) .got_load else .signed,
+ .meta = .{
+ .pcrel = true,
+ .has_subtractor = false,
+ .length = 2,
+ .symbolnum = @intCast(reloc.target.index),
+ },
+ });
+ } else unreachable,
+ .branch => if (emit.bin_file.cast(.elf)) |elf_file| {
+ const zo = elf_file.zigObjectPtr().?;
+ const atom = zo.symbol(emit.atom_index).atom(elf_file).?;
+ const r_type: std.elf.R_X86_64 = .PLT32;
+ try atom.addReloc(gpa, .{
+ .r_offset = end_offset - 4,
+ .r_info = @as(u64, reloc.target.index) << 32 | @intFromEnum(r_type),
+ .r_addend = reloc.off - 4,
+ }, zo);
+ } else if (emit.bin_file.cast(.macho)) |macho_file| {
+ const zo = macho_file.getZigObject().?;
+ const atom = zo.symbols.items[emit.atom_index].getAtom(macho_file).?;
+ try atom.addReloc(macho_file, .{
+ .tag = .@"extern",
+ .offset = end_offset - 4,
+ .target = reloc.target.index,
+ .addend = reloc.off,
+ .type = .branch,
+ .meta = .{
+ .pcrel = true,
+ .has_subtractor = false,
+ .length = 2,
+ .symbolnum = @intCast(reloc.target.index),
+ },
+ });
+ } else if (emit.bin_file.cast(.coff)) |coff_file| {
+ const atom_index = coff_file.getAtomIndexForSymbol(
+ .{ .sym_index = emit.atom_index, .file = null },
+ ).?;
+ const target: link.File.Coff.SymbolWithLoc = if (link.File.Coff.global_symbol_bit & reloc.target.index != 0)
+ coff_file.getGlobalByIndex(link.File.Coff.global_symbol_mask & reloc.target.index)
+ else
+ .{ .sym_index = reloc.target.index, .file = null };
+ try coff_file.addRelocation(atom_index, .{
+ .type = .direct,
+ .target = target,
+ .offset = end_offset - 4,
+ .addend = @intCast(reloc.off),
+ .pcrel = true,
+ .length = 2,
+ });
+ } else return emit.fail("TODO implement {s} reloc for {s}", .{
+ @tagName(reloc.target.type), @tagName(emit.bin_file.tag),
+ }),
+ .tls => if (emit.bin_file.cast(.elf)) |elf_file| {
+ if (reloc.target.is_extern) return emit.fail("TODO implement extern {s} reloc for {s}", .{
+ @tagName(reloc.target.type), @tagName(emit.bin_file.tag),
+ });
+ const zo = elf_file.zigObjectPtr().?;
+ const atom = zo.symbol(emit.atom_index).atom(elf_file).?;
+ const r_type: std.elf.R_X86_64 = if (emit.pic) .TLSLD else unreachable;
+ try atom.addReloc(gpa, .{
+ .r_offset = end_offset - 4,
+ .r_info = @as(u64, reloc.target.index) << 32 | @intFromEnum(r_type),
+ .r_addend = reloc.off - 4,
+ }, zo);
+ } else return emit.fail("TODO implement {s} reloc for {s}", .{
+ @tagName(reloc.target.type), @tagName(emit.bin_file.tag),
+ }),
+ .tlv => if (emit.bin_file.cast(.elf)) |elf_file| {
+ if (reloc.target.is_extern) return emit.fail("TODO implement extern {s} reloc for {s}", .{
+ @tagName(reloc.target.type), @tagName(emit.bin_file.tag),
+ });
+ const zo = elf_file.zigObjectPtr().?;
+ const atom = zo.symbol(emit.atom_index).atom(elf_file).?;
+ const r_type: std.elf.R_X86_64 = if (emit.pic) .DTPOFF32 else .TPOFF32;
+ try atom.addReloc(gpa, .{
+ .r_offset = end_offset - 4,
+ .r_info = @as(u64, reloc.target.index) << 32 | @intFromEnum(r_type),
+ .r_addend = reloc.off,
+ }, zo);
+ } else if (emit.bin_file.cast(.macho)) |macho_file| {
+ const zo = macho_file.getZigObject().?;
+ const atom = zo.symbols.items[emit.atom_index].getAtom(macho_file).?;
+ try atom.addReloc(macho_file, .{
+ .tag = .@"extern",
+ .offset = end_offset - 4,
+ .target = reloc.target.index,
+ .addend = reloc.off,
+ .type = .tlv,
+ .meta = .{
+ .pcrel = true,
+ .has_subtractor = false,
+ .length = 2,
+ .symbolnum = @intCast(reloc.target.index),
+ },
+ });
+ } else return emit.fail("TODO implement {s} reloc for {s}", .{
+ @tagName(reloc.target.type), @tagName(emit.bin_file.tag),
+ }),
+ };
+}
+
fn fail(emit: *Emit, comptime format: []const u8, args: anytype) Error {
return switch (emit.lower.fail(format, args)) {
error.LowerFail => error.EmitFail,
@@ -629,11 +934,17 @@ fn dbgAdvancePCAndLine(emit: *Emit, loc: Loc) Error!void {
}
}
+const assert = std.debug.assert;
const bits = @import("bits.zig");
+const codegen = @import("../../codegen.zig");
const Emit = @This();
+const encoder = @import("encoder.zig");
+const Instruction = encoder.Instruction;
const InternPool = @import("../../InternPool.zig");
const link = @import("../../link.zig");
const log = std.log.scoped(.emit);
const Lower = @import("Lower.zig");
const Mir = @import("Mir.zig");
const std = @import("std");
+const Type = @import("../../Type.zig");
+const Zcu = @import("../../Zcu.zig");
src/arch/x86_64/encoder.zig
@@ -138,7 +138,7 @@ pub const Instruction = struct {
.moffs => true,
.rip => false,
.sib => |s| switch (s.base) {
- .none, .frame, .table, .reloc, .pcrel, .rip_inst => false,
+ .none, .frame, .table, .rip_inst, .nav, .uav, .lazy_sym, .extern_func => false,
.reg => |reg| reg.isClass(.segment),
},
};
@@ -211,7 +211,7 @@ pub const Instruction = struct {
.none, .imm => 0b00,
.reg => |reg| @truncate(reg.enc() >> 3),
.mem => |mem| switch (mem.base()) {
- .none, .frame, .table, .reloc, .pcrel, .rip_inst => 0b00, // rsp, rbp, and rip are not extended
+ .none, .frame, .table, .rip_inst, .nav, .uav, .lazy_sym, .extern_func => 0b00, // rsp, rbp, and rip are not extended
.reg => |reg| @truncate(reg.enc() >> 3),
},
.bytes => unreachable,
@@ -281,9 +281,14 @@ pub const Instruction = struct {
.reg => |reg| try writer.print("{s}", .{@tagName(reg)}),
.frame => |frame_index| try writer.print("{}", .{frame_index}),
.table => try writer.print("Table", .{}),
- .reloc => |sym_index| try writer.print("Symbol({d})", .{sym_index}),
- .pcrel => |sym_index| try writer.print("PcRelSymbol({d})", .{sym_index}),
.rip_inst => |inst_index| try writer.print("RipInst({d})", .{inst_index}),
+ .nav => |nav| try writer.print("Nav({d})", .{@intFromEnum(nav)}),
+ .uav => |uav| try writer.print("Uav({d})", .{@intFromEnum(uav.val)}),
+ .lazy_sym => |lazy_sym| try writer.print("LazySym({s}, {d})", .{
+ @tagName(lazy_sym.kind),
+ @intFromEnum(lazy_sym.ty),
+ }),
+ .extern_func => |extern_func| try writer.print("ExternFunc({d})", .{@intFromEnum(extern_func)}),
}
if (mem.scaleIndex()) |si| {
if (any) try writer.writeAll(" + ");
@@ -718,11 +723,11 @@ pub const Instruction = struct {
try encoder.modRm_indirectDisp32(operand_enc, 0);
try encoder.disp32(undefined);
} else return error.CannotEncode,
- .reloc => if (@TypeOf(encoder).options.allow_symbols) {
+ .nav, .uav, .lazy_sym, .extern_func => if (@TypeOf(encoder).options.allow_symbols) {
try encoder.modRm_indirectDisp32(operand_enc, 0);
try encoder.disp32(undefined);
} else return error.CannotEncode,
- .pcrel, .rip_inst => {
+ .rip_inst => {
try encoder.modRm_RIPDisp32(operand_enc);
try encoder.disp32(sib.disp);
},
src/arch/x86_64/Lower.zig
@@ -1,10 +1,6 @@
//! This file contains the functionality for lowering x86_64 MIR to Instructions
-bin_file: *link.File,
target: *const std.Target,
-output_mode: std.builtin.OutputMode,
-link_mode: std.builtin.LinkMode,
-pic: bool,
allocator: std.mem.Allocator,
mir: Mir,
cc: std.builtin.CallingConvention,
@@ -17,7 +13,6 @@ result_relocs: [max_result_relocs]Reloc = undefined,
const max_result_insts = @max(
1, // non-pseudo instructions
- 3, // (ELF only) TLS local dynamic (LD) sequence in PIC mode
2, // cmovcc: cmovcc \ cmovcc
3, // setcc: setcc \ setcc \ logicop
2, // jcc: jcc \ jcc
@@ -25,6 +20,7 @@ const max_result_insts = @max(
pseudo_probe_adjust_unrolled_max_insts,
pseudo_probe_adjust_setup_insts,
pseudo_probe_adjust_loop_insts,
+ abi.zigcc.callee_preserved_regs.len * 2, // push_regs/pop_regs
abi.Win64.callee_preserved_regs.len * 2, // push_regs/pop_regs
abi.SysV.callee_preserved_regs.len * 2, // push_regs/pop_regs
);
@@ -33,14 +29,13 @@ const max_result_relocs = @max(
2, // jcc: jcc \ jcc
2, // test \ jcc \ probe \ sub \ jmp
1, // probe \ sub \ jcc
- 3, // (ELF only) TLS local dynamic (LD) sequence in PIC mode
);
-const ResultInstIndex = std.math.IntFittingRange(0, max_result_insts - 1);
-const ResultRelocIndex = std.math.IntFittingRange(0, max_result_relocs - 1);
-const InstOpIndex = std.math.IntFittingRange(
+const ResultInstIndex = std.math.IntFittingRange(0, max_result_insts);
+const ResultRelocIndex = std.math.IntFittingRange(0, max_result_relocs);
+pub const InstOpIndex = std.math.IntFittingRange(
0,
- @typeInfo(@FieldType(Instruction, "ops")).array.len - 1,
+ @typeInfo(@FieldType(Instruction, "ops")).array.len,
);
pub const pseudo_probe_align_insts = 5; // test \ jcc \ probe \ sub \ jmp
@@ -54,7 +49,8 @@ pub const Error = error{
LowerFail,
InvalidInstruction,
CannotEncode,
-};
+ CodegenFail,
+} || codegen.GenerateSymbolError;
pub const Reloc = struct {
lowered_inst_index: ResultInstIndex,
@@ -65,14 +61,10 @@ pub const Reloc = struct {
const Target = union(enum) {
inst: Mir.Inst.Index,
table,
- linker_reloc: u32,
- linker_pcrel: u32,
- linker_tlsld: u32,
- linker_dtpoff: u32,
- linker_extern_fn: u32,
- linker_got: u32,
- linker_direct: u32,
- linker_import: u32,
+ nav: InternPool.Nav.Index,
+ uav: InternPool.Key.Ptr.BaseAddr.Uav,
+ lazy_sym: link.File.LazySymbol,
+ extern_func: Mir.NullTerminatedString,
};
};
@@ -80,7 +72,7 @@ const Options = struct { allow_frame_locs: bool };
/// The returned slice is overwritten by the next call to lowerMir.
pub fn lowerMir(lower: *Lower, index: Mir.Inst.Index) Error!struct {
- insts: []const Instruction,
+ insts: []Instruction,
relocs: []const Reloc,
} {
lower.result_insts = undefined;
@@ -98,130 +90,130 @@ pub fn lowerMir(lower: *Lower, index: Mir.Inst.Index) Error!struct {
.pseudo => switch (inst.ops) {
.pseudo_cmov_z_and_np_rr => {
assert(inst.data.rr.fixes == ._);
- try lower.emit(.none, .cmovnz, &.{
+ try lower.encode(.none, .cmovnz, &.{
.{ .reg = inst.data.rr.r2 },
.{ .reg = inst.data.rr.r1 },
});
- try lower.emit(.none, .cmovnp, &.{
+ try lower.encode(.none, .cmovnp, &.{
.{ .reg = inst.data.rr.r1 },
.{ .reg = inst.data.rr.r2 },
});
},
.pseudo_cmov_nz_or_p_rr => {
assert(inst.data.rr.fixes == ._);
- try lower.emit(.none, .cmovnz, &.{
+ try lower.encode(.none, .cmovnz, &.{
.{ .reg = inst.data.rr.r1 },
.{ .reg = inst.data.rr.r2 },
});
- try lower.emit(.none, .cmovp, &.{
+ try lower.encode(.none, .cmovp, &.{
.{ .reg = inst.data.rr.r1 },
.{ .reg = inst.data.rr.r2 },
});
},
.pseudo_cmov_nz_or_p_rm => {
assert(inst.data.rx.fixes == ._);
- try lower.emit(.none, .cmovnz, &.{
+ try lower.encode(.none, .cmovnz, &.{
.{ .reg = inst.data.rx.r1 },
.{ .mem = lower.mem(1, inst.data.rx.payload) },
});
- try lower.emit(.none, .cmovp, &.{
+ try lower.encode(.none, .cmovp, &.{
.{ .reg = inst.data.rx.r1 },
.{ .mem = lower.mem(1, inst.data.rx.payload) },
});
},
.pseudo_set_z_and_np_r => {
assert(inst.data.rr.fixes == ._);
- try lower.emit(.none, .setz, &.{
+ try lower.encode(.none, .setz, &.{
.{ .reg = inst.data.rr.r1 },
});
- try lower.emit(.none, .setnp, &.{
+ try lower.encode(.none, .setnp, &.{
.{ .reg = inst.data.rr.r2 },
});
- try lower.emit(.none, .@"and", &.{
+ try lower.encode(.none, .@"and", &.{
.{ .reg = inst.data.rr.r1 },
.{ .reg = inst.data.rr.r2 },
});
},
.pseudo_set_z_and_np_m => {
assert(inst.data.rx.fixes == ._);
- try lower.emit(.none, .setz, &.{
+ try lower.encode(.none, .setz, &.{
.{ .mem = lower.mem(0, inst.data.rx.payload) },
});
- try lower.emit(.none, .setnp, &.{
+ try lower.encode(.none, .setnp, &.{
.{ .reg = inst.data.rx.r1 },
});
- try lower.emit(.none, .@"and", &.{
+ try lower.encode(.none, .@"and", &.{
.{ .mem = lower.mem(0, inst.data.rx.payload) },
.{ .reg = inst.data.rx.r1 },
});
},
.pseudo_set_nz_or_p_r => {
assert(inst.data.rr.fixes == ._);
- try lower.emit(.none, .setnz, &.{
+ try lower.encode(.none, .setnz, &.{
.{ .reg = inst.data.rr.r1 },
});
- try lower.emit(.none, .setp, &.{
+ try lower.encode(.none, .setp, &.{
.{ .reg = inst.data.rr.r2 },
});
- try lower.emit(.none, .@"or", &.{
+ try lower.encode(.none, .@"or", &.{
.{ .reg = inst.data.rr.r1 },
.{ .reg = inst.data.rr.r2 },
});
},
.pseudo_set_nz_or_p_m => {
assert(inst.data.rx.fixes == ._);
- try lower.emit(.none, .setnz, &.{
+ try lower.encode(.none, .setnz, &.{
.{ .mem = lower.mem(0, inst.data.rx.payload) },
});
- try lower.emit(.none, .setp, &.{
+ try lower.encode(.none, .setp, &.{
.{ .reg = inst.data.rx.r1 },
});
- try lower.emit(.none, .@"or", &.{
+ try lower.encode(.none, .@"or", &.{
.{ .mem = lower.mem(0, inst.data.rx.payload) },
.{ .reg = inst.data.rx.r1 },
});
},
.pseudo_j_z_and_np_inst => {
assert(inst.data.inst.fixes == ._);
- try lower.emit(.none, .jnz, &.{
+ try lower.encode(.none, .jnz, &.{
.{ .imm = lower.reloc(0, .{ .inst = index + 1 }, 0) },
});
- try lower.emit(.none, .jnp, &.{
+ try lower.encode(.none, .jnp, &.{
.{ .imm = lower.reloc(0, .{ .inst = inst.data.inst.inst }, 0) },
});
},
.pseudo_j_nz_or_p_inst => {
assert(inst.data.inst.fixes == ._);
- try lower.emit(.none, .jnz, &.{
+ try lower.encode(.none, .jnz, &.{
.{ .imm = lower.reloc(0, .{ .inst = inst.data.inst.inst }, 0) },
});
- try lower.emit(.none, .jp, &.{
+ try lower.encode(.none, .jp, &.{
.{ .imm = lower.reloc(0, .{ .inst = inst.data.inst.inst }, 0) },
});
},
.pseudo_probe_align_ri_s => {
- try lower.emit(.none, .@"test", &.{
+ try lower.encode(.none, .@"test", &.{
.{ .reg = inst.data.ri.r1 },
.{ .imm = .s(@bitCast(inst.data.ri.i)) },
});
- try lower.emit(.none, .jz, &.{
+ try lower.encode(.none, .jz, &.{
.{ .imm = lower.reloc(0, .{ .inst = index + 1 }, 0) },
});
- try lower.emit(.none, .lea, &.{
+ try lower.encode(.none, .lea, &.{
.{ .reg = inst.data.ri.r1 },
.{ .mem = Memory.initSib(.qword, .{
.base = .{ .reg = inst.data.ri.r1 },
.disp = -page_size,
}) },
});
- try lower.emit(.none, .@"test", &.{
+ try lower.encode(.none, .@"test", &.{
.{ .mem = Memory.initSib(.dword, .{
.base = .{ .reg = inst.data.ri.r1 },
}) },
.{ .reg = inst.data.ri.r1.to32() },
});
- try lower.emit(.none, .jmp, &.{
+ try lower.encode(.none, .jmp, &.{
.{ .imm = lower.reloc(0, .{ .inst = index }, 0) },
});
assert(lower.result_insts_len == pseudo_probe_align_insts);
@@ -229,7 +221,7 @@ pub fn lowerMir(lower: *Lower, index: Mir.Inst.Index) Error!struct {
.pseudo_probe_adjust_unrolled_ri_s => {
var offset = page_size;
while (offset < @as(i32, @bitCast(inst.data.ri.i))) : (offset += page_size) {
- try lower.emit(.none, .@"test", &.{
+ try lower.encode(.none, .@"test", &.{
.{ .mem = Memory.initSib(.dword, .{
.base = .{ .reg = inst.data.ri.r1 },
.disp = -offset,
@@ -237,25 +229,25 @@ pub fn lowerMir(lower: *Lower, index: Mir.Inst.Index) Error!struct {
.{ .reg = inst.data.ri.r1.to32() },
});
}
- try lower.emit(.none, .sub, &.{
+ try lower.encode(.none, .sub, &.{
.{ .reg = inst.data.ri.r1 },
.{ .imm = .s(@bitCast(inst.data.ri.i)) },
});
assert(lower.result_insts_len <= pseudo_probe_adjust_unrolled_max_insts);
},
.pseudo_probe_adjust_setup_rri_s => {
- try lower.emit(.none, .mov, &.{
+ try lower.encode(.none, .mov, &.{
.{ .reg = inst.data.rri.r2.to32() },
.{ .imm = .s(@bitCast(inst.data.rri.i)) },
});
- try lower.emit(.none, .sub, &.{
+ try lower.encode(.none, .sub, &.{
.{ .reg = inst.data.rri.r1 },
.{ .reg = inst.data.rri.r2 },
});
assert(lower.result_insts_len == pseudo_probe_adjust_setup_insts);
},
.pseudo_probe_adjust_loop_rr => {
- try lower.emit(.none, .@"test", &.{
+ try lower.encode(.none, .@"test", &.{
.{ .mem = Memory.initSib(.dword, .{
.base = .{ .reg = inst.data.rr.r1 },
.scale_index = .{ .scale = 1, .index = inst.data.rr.r2 },
@@ -263,11 +255,11 @@ pub fn lowerMir(lower: *Lower, index: Mir.Inst.Index) Error!struct {
}) },
.{ .reg = inst.data.rr.r1.to32() },
});
- try lower.emit(.none, .sub, &.{
+ try lower.encode(.none, .sub, &.{
.{ .reg = inst.data.rr.r2 },
.{ .imm = .s(page_size) },
});
- try lower.emit(.none, .jae, &.{
+ try lower.encode(.none, .jae, &.{
.{ .imm = lower.reloc(0, .{ .inst = index }, 0) },
});
assert(lower.result_insts_len == pseudo_probe_adjust_loop_insts);
@@ -275,47 +267,47 @@ pub fn lowerMir(lower: *Lower, index: Mir.Inst.Index) Error!struct {
.pseudo_push_reg_list => try lower.pushPopRegList(.push, inst),
.pseudo_pop_reg_list => try lower.pushPopRegList(.pop, inst),
- .pseudo_cfi_def_cfa_ri_s => try lower.emit(.directive, .@".cfi_def_cfa", &.{
+ .pseudo_cfi_def_cfa_ri_s => try lower.encode(.directive, .@".cfi_def_cfa", &.{
.{ .reg = inst.data.ri.r1 },
.{ .imm = lower.imm(.ri_s, inst.data.ri.i) },
}),
- .pseudo_cfi_def_cfa_register_r => try lower.emit(.directive, .@".cfi_def_cfa_register", &.{
+ .pseudo_cfi_def_cfa_register_r => try lower.encode(.directive, .@".cfi_def_cfa_register", &.{
.{ .reg = inst.data.r.r1 },
}),
- .pseudo_cfi_def_cfa_offset_i_s => try lower.emit(.directive, .@".cfi_def_cfa_offset", &.{
+ .pseudo_cfi_def_cfa_offset_i_s => try lower.encode(.directive, .@".cfi_def_cfa_offset", &.{
.{ .imm = lower.imm(.i_s, inst.data.i.i) },
}),
- .pseudo_cfi_adjust_cfa_offset_i_s => try lower.emit(.directive, .@".cfi_adjust_cfa_offset", &.{
+ .pseudo_cfi_adjust_cfa_offset_i_s => try lower.encode(.directive, .@".cfi_adjust_cfa_offset", &.{
.{ .imm = lower.imm(.i_s, inst.data.i.i) },
}),
- .pseudo_cfi_offset_ri_s => try lower.emit(.directive, .@".cfi_offset", &.{
+ .pseudo_cfi_offset_ri_s => try lower.encode(.directive, .@".cfi_offset", &.{
.{ .reg = inst.data.ri.r1 },
.{ .imm = lower.imm(.ri_s, inst.data.ri.i) },
}),
- .pseudo_cfi_val_offset_ri_s => try lower.emit(.directive, .@".cfi_val_offset", &.{
+ .pseudo_cfi_val_offset_ri_s => try lower.encode(.directive, .@".cfi_val_offset", &.{
.{ .reg = inst.data.ri.r1 },
.{ .imm = lower.imm(.ri_s, inst.data.ri.i) },
}),
- .pseudo_cfi_rel_offset_ri_s => try lower.emit(.directive, .@".cfi_rel_offset", &.{
+ .pseudo_cfi_rel_offset_ri_s => try lower.encode(.directive, .@".cfi_rel_offset", &.{
.{ .reg = inst.data.ri.r1 },
.{ .imm = lower.imm(.ri_s, inst.data.ri.i) },
}),
- .pseudo_cfi_register_rr => try lower.emit(.directive, .@".cfi_register", &.{
+ .pseudo_cfi_register_rr => try lower.encode(.directive, .@".cfi_register", &.{
.{ .reg = inst.data.rr.r1 },
.{ .reg = inst.data.rr.r2 },
}),
- .pseudo_cfi_restore_r => try lower.emit(.directive, .@".cfi_restore", &.{
+ .pseudo_cfi_restore_r => try lower.encode(.directive, .@".cfi_restore", &.{
.{ .reg = inst.data.r.r1 },
}),
- .pseudo_cfi_undefined_r => try lower.emit(.directive, .@".cfi_undefined", &.{
+ .pseudo_cfi_undefined_r => try lower.encode(.directive, .@".cfi_undefined", &.{
.{ .reg = inst.data.r.r1 },
}),
- .pseudo_cfi_same_value_r => try lower.emit(.directive, .@".cfi_same_value", &.{
+ .pseudo_cfi_same_value_r => try lower.encode(.directive, .@".cfi_same_value", &.{
.{ .reg = inst.data.r.r1 },
}),
- .pseudo_cfi_remember_state_none => try lower.emit(.directive, .@".cfi_remember_state", &.{}),
- .pseudo_cfi_restore_state_none => try lower.emit(.directive, .@".cfi_restore_state", &.{}),
- .pseudo_cfi_escape_bytes => try lower.emit(.directive, .@".cfi_escape", &.{
+ .pseudo_cfi_remember_state_none => try lower.encode(.directive, .@".cfi_remember_state", &.{}),
+ .pseudo_cfi_restore_state_none => try lower.encode(.directive, .@".cfi_restore_state", &.{}),
+ .pseudo_cfi_escape_bytes => try lower.encode(.directive, .@".cfi_escape", &.{
.{ .bytes = inst.data.bytes.get(lower.mir) },
}),
@@ -331,7 +323,6 @@ pub fn lowerMir(lower: *Lower, index: Mir.Inst.Index) Error!struct {
.pseudo_dbg_arg_i_s,
.pseudo_dbg_arg_i_u,
.pseudo_dbg_arg_i_64,
- .pseudo_dbg_arg_reloc,
.pseudo_dbg_arg_ro,
.pseudo_dbg_arg_fa,
.pseudo_dbg_arg_m,
@@ -341,7 +332,6 @@ pub fn lowerMir(lower: *Lower, index: Mir.Inst.Index) Error!struct {
.pseudo_dbg_var_i_s,
.pseudo_dbg_var_i_u,
.pseudo_dbg_var_i_64,
- .pseudo_dbg_var_reloc,
.pseudo_dbg_var_ro,
.pseudo_dbg_var_fa,
.pseudo_dbg_var_m,
@@ -362,7 +352,7 @@ pub fn lowerMir(lower: *Lower, index: Mir.Inst.Index) Error!struct {
pub fn fail(lower: *Lower, comptime format: []const u8, args: anytype) Error {
@branchHint(.cold);
assert(lower.err_msg == null);
- lower.err_msg = try Zcu.ErrorMsg.create(lower.allocator, lower.src_loc, format, args);
+ lower.err_msg = try .create(lower.allocator, lower.src_loc, format, args);
return error.LowerFail;
}
@@ -404,13 +394,17 @@ pub fn imm(lower: *const Lower, ops: Mir.Inst.Ops, i: u32) Immediate {
};
}
-pub fn mem(lower: *Lower, op_index: InstOpIndex, payload: u32) Memory {
- var m = lower.mir.resolveFrameLoc(lower.mir.extraData(Mir.Memory, payload).data).decode();
+fn mem(lower: *Lower, op_index: InstOpIndex, payload: u32) Memory {
+ var m = lower.mir.resolveMemoryExtra(payload).decode();
switch (m) {
.sib => |*sib| switch (sib.base) {
- else => {},
+ .none, .reg, .frame => {},
.table => sib.disp = lower.reloc(op_index, .table, sib.disp).signed,
.rip_inst => |inst_index| sib.disp = lower.reloc(op_index, .{ .inst = inst_index }, sib.disp).signed,
+ .nav => |nav| sib.disp = lower.reloc(op_index, .{ .nav = nav }, sib.disp).signed,
+ .uav => |uav| sib.disp = lower.reloc(op_index, .{ .uav = uav }, sib.disp).signed,
+ .lazy_sym => |lazy_sym| sib.disp = lower.reloc(op_index, .{ .lazy_sym = lazy_sym }, sib.disp).signed,
+ .extern_func => |extern_func| sib.disp = lower.reloc(op_index, .{ .extern_func = extern_func }, sib.disp).signed,
},
else => {},
}
@@ -428,172 +422,8 @@ fn reloc(lower: *Lower, op_index: InstOpIndex, target: Reloc.Target, off: i32) I
return .s(0);
}
-fn emit(lower: *Lower, prefix: Prefix, mnemonic: Mnemonic, ops: []const Operand) Error!void {
- const emit_prefix = prefix;
- var emit_mnemonic = mnemonic;
- var emit_ops_storage: [4]Operand = undefined;
- const emit_ops = emit_ops_storage[0..ops.len];
- for (emit_ops, ops, 0..) |*emit_op, op, op_index| {
- emit_op.* = switch (op) {
- else => op,
- .mem => |mem_op| op: switch (mem_op.base()) {
- else => op,
- .reloc => |sym_index| {
- assert(prefix == .none);
- assert(mem_op.sib.disp == 0);
- assert(mem_op.sib.scale_index.scale == 0);
-
- if (lower.bin_file.cast(.elf)) |elf_file| {
- const zo = elf_file.zigObjectPtr().?;
- const elf_sym = zo.symbol(sym_index);
-
- if (elf_sym.flags.is_tls) {
- // TODO handle extern TLS vars, i.e., emit GD model
- if (lower.pic) {
- // Here, we currently assume local dynamic TLS vars, and so
- // we emit LD model.
- _ = lower.reloc(1, .{ .linker_tlsld = sym_index }, 0);
- lower.result_insts[lower.result_insts_len] = try .new(.none, .lea, &.{
- .{ .reg = .rdi },
- .{ .mem = Memory.initRip(.none, 0) },
- }, lower.target);
- lower.result_insts_len += 1;
- _ = lower.reloc(0, .{
- .linker_extern_fn = try elf_file.getGlobalSymbol("__tls_get_addr", null),
- }, 0);
- lower.result_insts[lower.result_insts_len] = try .new(.none, .call, &.{
- .{ .imm = .s(0) },
- }, lower.target);
- lower.result_insts_len += 1;
- _ = lower.reloc(@intCast(op_index), .{ .linker_dtpoff = sym_index }, 0);
- emit_mnemonic = .lea;
- break :op .{ .mem = Memory.initSib(.none, .{
- .base = .{ .reg = .rax },
- .disp = std.math.minInt(i32),
- }) };
- } else {
- // Since we are linking statically, we emit LE model directly.
- lower.result_insts[lower.result_insts_len] = try .new(.none, .mov, &.{
- .{ .reg = .rax },
- .{ .mem = Memory.initSib(.qword, .{ .base = .{ .reg = .fs } }) },
- }, lower.target);
- lower.result_insts_len += 1;
- _ = lower.reloc(@intCast(op_index), .{ .linker_reloc = sym_index }, 0);
- emit_mnemonic = .lea;
- break :op .{ .mem = Memory.initSib(.none, .{
- .base = .{ .reg = .rax },
- .disp = std.math.minInt(i32),
- }) };
- }
- }
-
- if (lower.pic) switch (mnemonic) {
- .lea => {
- _ = lower.reloc(@intCast(op_index), .{ .linker_reloc = sym_index }, 0);
- if (!elf_sym.flags.is_extern_ptr) break :op .{ .mem = Memory.initRip(.none, 0) };
- emit_mnemonic = .mov;
- break :op .{ .mem = Memory.initRip(.ptr, 0) };
- },
- .mov => {
- if (elf_sym.flags.is_extern_ptr) {
- const reg = ops[0].reg;
- _ = lower.reloc(1, .{ .linker_reloc = sym_index }, 0);
- lower.result_insts[lower.result_insts_len] = try .new(.none, .mov, &.{
- .{ .reg = reg.to64() },
- .{ .mem = Memory.initRip(.qword, 0) },
- }, lower.target);
- lower.result_insts_len += 1;
- break :op .{ .mem = Memory.initSib(mem_op.sib.ptr_size, .{ .base = .{
- .reg = reg.to64(),
- } }) };
- }
- _ = lower.reloc(@intCast(op_index), .{ .linker_reloc = sym_index }, 0);
- break :op .{ .mem = Memory.initRip(mem_op.sib.ptr_size, 0) };
- },
- else => unreachable,
- };
- _ = lower.reloc(@intCast(op_index), .{ .linker_reloc = sym_index }, 0);
- switch (mnemonic) {
- .call => break :op .{ .mem = Memory.initSib(mem_op.sib.ptr_size, .{
- .base = .{ .reg = .ds },
- }) },
- .lea => {
- emit_mnemonic = .mov;
- break :op .{ .imm = .s(0) };
- },
- .mov => break :op .{ .mem = Memory.initSib(mem_op.sib.ptr_size, .{
- .base = .{ .reg = .ds },
- }) },
- else => unreachable,
- }
- } else if (lower.bin_file.cast(.macho)) |macho_file| {
- const zo = macho_file.getZigObject().?;
- const macho_sym = zo.symbols.items[sym_index];
-
- if (macho_sym.flags.tlv) {
- _ = lower.reloc(1, .{ .linker_reloc = sym_index }, 0);
- lower.result_insts[lower.result_insts_len] = try .new(.none, .mov, &.{
- .{ .reg = .rdi },
- .{ .mem = Memory.initRip(.ptr, 0) },
- }, lower.target);
- lower.result_insts_len += 1;
- lower.result_insts[lower.result_insts_len] = try .new(.none, .call, &.{
- .{ .mem = Memory.initSib(.qword, .{ .base = .{ .reg = .rdi } }) },
- }, lower.target);
- lower.result_insts_len += 1;
- emit_mnemonic = .mov;
- break :op .{ .reg = .rax };
- }
-
- break :op switch (mnemonic) {
- .lea => {
- _ = lower.reloc(@intCast(op_index), .{ .linker_reloc = sym_index }, 0);
- if (!macho_sym.flags.is_extern_ptr) break :op .{ .mem = Memory.initRip(.none, 0) };
- emit_mnemonic = .mov;
- break :op .{ .mem = Memory.initRip(.ptr, 0) };
- },
- .mov => {
- if (macho_sym.flags.is_extern_ptr) {
- const reg = ops[0].reg;
- _ = lower.reloc(1, .{ .linker_reloc = sym_index }, 0);
- lower.result_insts[lower.result_insts_len] = try .new(.none, .mov, &.{
- .{ .reg = reg.to64() },
- .{ .mem = Memory.initRip(.qword, 0) },
- }, lower.target);
- lower.result_insts_len += 1;
- break :op .{ .mem = Memory.initSib(mem_op.sib.ptr_size, .{ .base = .{
- .reg = reg.to64(),
- } }) };
- }
- _ = lower.reloc(@intCast(op_index), .{ .linker_reloc = sym_index }, 0);
- break :op .{ .mem = Memory.initRip(mem_op.sib.ptr_size, 0) };
- },
- else => unreachable,
- };
- } else {
- return lower.fail("TODO: bin format '{s}'", .{@tagName(lower.bin_file.tag)});
- }
- },
- .pcrel => |sym_index| {
- assert(prefix == .none);
- assert(mem_op.sib.disp == 0);
- assert(mem_op.sib.scale_index.scale == 0);
-
- _ = lower.reloc(@intCast(op_index), .{ .linker_pcrel = sym_index }, 0);
- break :op switch (lower.bin_file.tag) {
- .elf => op,
- .macho => switch (mnemonic) {
- .lea => .{ .mem = Memory.initRip(.none, 0) },
- .mov => .{ .mem = Memory.initRip(mem_op.sib.ptr_size, 0) },
- else => unreachable,
- },
- else => |tag| return lower.fail("TODO: bin format '{s}'", .{@tagName(tag)}),
- };
- },
- },
- };
- }
- lower.result_insts[lower.result_insts_len] = try .new(emit_prefix, emit_mnemonic, emit_ops, lower.target);
+fn encode(lower: *Lower, prefix: Prefix, mnemonic: Mnemonic, ops: []const Operand) Error!void {
+ lower.result_insts[lower.result_insts_len] = try .new(prefix, mnemonic, ops, lower.target);
lower.result_insts_len += 1;
}
@@ -618,10 +448,10 @@ fn generic(lower: *Lower, inst: Mir.Inst) Error!void {
.rrmi => inst.data.rrix.fixes,
.mi_u, .mi_s => inst.data.x.fixes,
.m => inst.data.x.fixes,
- .extern_fn_reloc, .got_reloc, .direct_reloc, .import_reloc, .tlv_reloc, .rel => ._,
+ .nav, .uav, .lazy_sym, .extern_func => ._,
else => return lower.fail("TODO lower .{s}", .{@tagName(inst.ops)}),
};
- try lower.emit(switch (fixes) {
+ try lower.encode(switch (fixes) {
inline else => |tag| comptime if (std.mem.indexOfScalar(u8, @tagName(tag), ' ')) |space|
@field(Prefix, @tagName(tag)[0..space])
else
@@ -752,22 +582,17 @@ fn generic(lower: *Lower, inst: Mir.Inst) Error!void {
.{ .mem = lower.mem(2, inst.data.rrix.payload) },
.{ .imm = lower.imm(inst.ops, inst.data.rrix.i) },
},
- .extern_fn_reloc, .rel => &.{
- .{ .imm = lower.reloc(0, .{ .linker_extern_fn = inst.data.reloc.sym_index }, inst.data.reloc.off) },
+ .nav => &.{
+ .{ .imm = lower.reloc(0, .{ .nav = inst.data.nav.index }, inst.data.nav.off) },
},
- .got_reloc, .direct_reloc, .import_reloc => ops: {
- const reg = inst.data.rx.r1;
- const extra = lower.mir.extraData(bits.SymbolOffset, inst.data.rx.payload).data;
- _ = lower.reloc(1, switch (inst.ops) {
- .got_reloc => .{ .linker_got = extra.sym_index },
- .direct_reloc => .{ .linker_direct = extra.sym_index },
- .import_reloc => .{ .linker_import = extra.sym_index },
- else => unreachable,
- }, extra.off);
- break :ops &.{
- .{ .reg = reg },
- .{ .mem = Memory.initRip(Memory.PtrSize.fromBitSize(reg.bitSize()), 0) },
- };
+ .uav => &.{
+ .{ .imm = lower.reloc(0, .{ .uav = inst.data.uav }, 0) },
+ },
+ .lazy_sym => &.{
+ .{ .imm = lower.reloc(0, .{ .lazy_sym = inst.data.lazy_sym }, 0) },
+ },
+ .extern_func => &.{
+ .{ .imm = lower.reloc(0, .{ .extern_func = inst.data.extern_func }, 0) },
},
else => return lower.fail("TODO lower {s} {s}", .{ @tagName(inst.tag), @tagName(inst.ops) }),
});
@@ -787,7 +612,7 @@ fn pushPopRegList(lower: *Lower, comptime mnemonic: Mnemonic, inst: Mir.Inst) Er
else => unreachable,
} });
while (it.next()) |i| {
- try lower.emit(.none, mnemonic, &.{.{
+ try lower.encode(.none, mnemonic, &.{.{
.reg = callee_preserved_regs[i],
}});
switch (mnemonic) {
@@ -801,7 +626,7 @@ fn pushPopRegList(lower: *Lower, comptime mnemonic: Mnemonic, inst: Mir.Inst) Er
.push => {
var it = inst.data.reg_list.iterator(.{});
while (it.next()) |i| {
- try lower.emit(.directive, .@".cfi_rel_offset", &.{
+ try lower.encode(.directive, .@".cfi_rel_offset", &.{
.{ .reg = callee_preserved_regs[i] },
.{ .imm = .s(off) },
});
@@ -819,12 +644,14 @@ const page_size: i32 = 1 << 12;
const abi = @import("abi.zig");
const assert = std.debug.assert;
const bits = @import("bits.zig");
+const codegen = @import("../../codegen.zig");
const encoder = @import("encoder.zig");
const link = @import("../../link.zig");
const std = @import("std");
const Immediate = Instruction.Immediate;
const Instruction = encoder.Instruction;
+const InternPool = @import("../../InternPool.zig");
const Lower = @This();
const Memory = Instruction.Memory;
const Mir = @import("Mir.zig");
@@ -833,3 +660,4 @@ const Zcu = @import("../../Zcu.zig");
const Operand = Instruction.Operand;
const Prefix = Instruction.Prefix;
const Register = bits.Register;
+const Type = @import("../../Type.zig");
src/arch/x86_64/Mir.zig
@@ -9,8 +9,8 @@
instructions: std.MultiArrayList(Inst).Slice,
/// The meaning of this data is determined by `Inst.Tag` value.
extra: []const u32,
-local_name_bytes: []const u8,
-local_types: []const InternPool.Index,
+string_bytes: []const u8,
+locals: []const Local,
table: []const Inst.Index,
frame_locs: std.MultiArrayList(FrameLoc).Slice,
@@ -1363,9 +1363,6 @@ pub const Inst = struct {
/// Immediate (byte), register operands.
/// Uses `ri` payload.
ir,
- /// Relative displacement operand.
- /// Uses `reloc` payload.
- rel,
/// Register, memory operands.
/// Uses `rx` payload with extra data of type `Memory`.
rm,
@@ -1411,21 +1408,18 @@ pub const Inst = struct {
/// References another Mir instruction directly.
/// Uses `inst` payload.
inst,
- /// Linker relocation - external function.
- /// Uses `reloc` payload.
- extern_fn_reloc,
- /// Linker relocation - GOT indirection.
- /// Uses `rx` payload with extra data of type `bits.SymbolOffset`.
- got_reloc,
- /// Linker relocation - direct reference.
- /// Uses `rx` payload with extra data of type `bits.SymbolOffset`.
- direct_reloc,
- /// Linker relocation - imports table indirection (binding).
- /// Uses `rx` payload with extra data of type `bits.SymbolOffset`.
- import_reloc,
- /// Linker relocation - threadlocal variable via GOT indirection.
- /// Uses `rx` payload with extra data of type `bits.SymbolOffset`.
- tlv_reloc,
+ /// References a nav.
+ /// Uses `nav` payload.
+ nav,
+ /// References an uav.
+ /// Uses `uav` payload.
+ uav,
+ /// References a lazy symbol.
+ /// Uses `lazy_sym` payload.
+ lazy_sym,
+ /// References an external symbol.
+ /// Uses `extern_func` payload.
+ extern_func,
// Pseudo instructions:
@@ -1560,9 +1554,6 @@ pub const Inst = struct {
/// Uses `i64` payload.
pseudo_dbg_arg_i_64,
/// Local argument.
- /// Uses `reloc` payload.
- pseudo_dbg_arg_reloc,
- /// Local argument.
/// Uses `ro` payload.
pseudo_dbg_arg_ro,
/// Local argument.
@@ -1589,9 +1580,6 @@ pub const Inst = struct {
/// Uses `i64` payload.
pseudo_dbg_var_i_64,
/// Local variable.
- /// Uses `reloc` payload.
- pseudo_dbg_var_reloc,
- /// Local variable.
/// Uses `ro` payload.
pseudo_dbg_var_ro,
/// Local variable.
@@ -1719,12 +1707,12 @@ pub const Inst = struct {
return std.mem.sliceAsBytes(mir.extra[bytes.payload..])[0..bytes.len];
}
},
- /// Relocation for the linker where:
- /// * `sym_index` is the index of the target
- /// * `off` is the offset from the target
- reloc: bits.SymbolOffset,
fa: bits.FrameAddr,
ro: bits.RegisterOffset,
+ nav: bits.NavOffset,
+ uav: InternPool.Key.Ptr.BaseAddr.Uav,
+ lazy_sym: link.File.LazySymbol,
+ extern_func: Mir.NullTerminatedString,
/// Debug line and column position
line_column: struct {
line: u32,
@@ -1787,7 +1775,7 @@ pub const Inst = struct {
pub const RegisterList = struct {
bitset: BitSet,
- const BitSet = IntegerBitSet(32);
+ const BitSet = std.bit_set.IntegerBitSet(32);
const Self = @This();
pub const empty: RegisterList = .{ .bitset = .initEmpty() };
@@ -1826,6 +1814,22 @@ pub const RegisterList = struct {
}
};
+pub const NullTerminatedString = enum(u32) {
+ none = std.math.maxInt(u32),
+ _,
+
+ pub fn toSlice(nts: NullTerminatedString, mir: *const Mir) ?[:0]const u8 {
+ if (nts == .none) return null;
+ const string_bytes = mir.string_bytes[@intFromEnum(nts)..];
+ return string_bytes[0..std.mem.indexOfScalar(u8, string_bytes, 0).? :0];
+ }
+};
+
+pub const Local = struct {
+ name: NullTerminatedString,
+ type: InternPool.Index,
+};
+
pub const Imm32 = struct {
imm: u32,
};
@@ -1861,11 +1865,10 @@ pub const Memory = struct {
size: bits.Memory.Size,
index: Register,
scale: bits.Memory.Scale,
- _: u14 = undefined,
+ _: u13 = undefined,
};
pub fn encode(mem: bits.Memory) Memory {
- assert(mem.base != .reloc or mem.mod != .off);
return .{
.info = .{
.base = mem.base,
@@ -1887,17 +1890,27 @@ pub const Memory = struct {
.none, .table => undefined,
.reg => |reg| @intFromEnum(reg),
.frame => |frame_index| @intFromEnum(frame_index),
- .reloc, .pcrel => |sym_index| sym_index,
.rip_inst => |inst_index| inst_index,
+ .nav => |nav| @intFromEnum(nav),
+ .uav => |uav| @intFromEnum(uav.val),
+ .lazy_sym => |lazy_sym| @intFromEnum(lazy_sym.ty),
+ .extern_func => |extern_func| @intFromEnum(extern_func),
},
.off = switch (mem.mod) {
.rm => |rm| @bitCast(rm.disp),
.off => |off| @truncate(off),
},
- .extra = if (mem.mod == .off)
- @intCast(mem.mod.off >> 32)
- else
- undefined,
+ .extra = switch (mem.mod) {
+ .rm => switch (mem.base) {
+ else => undefined,
+ .uav => |uav| @intFromEnum(uav.orig_ty),
+ .lazy_sym => |lazy_sym| @intFromEnum(lazy_sym.kind),
+ },
+ .off => switch (mem.base) {
+ .reg => @intCast(mem.mod.off >> 32),
+ else => unreachable,
+ },
+ },
};
}
@@ -1915,9 +1928,11 @@ pub const Memory = struct {
.reg => .{ .reg = @enumFromInt(mem.base) },
.frame => .{ .frame = @enumFromInt(mem.base) },
.table => .table,
- .reloc => .{ .reloc = mem.base },
- .pcrel => .{ .pcrel = mem.base },
.rip_inst => .{ .rip_inst = mem.base },
+ .nav => .{ .nav = @enumFromInt(mem.base) },
+ .uav => .{ .uav = .{ .val = @enumFromInt(mem.base), .orig_ty = @enumFromInt(mem.extra) } },
+ .lazy_sym => .{ .lazy_sym = .{ .kind = @enumFromInt(mem.extra), .ty = @enumFromInt(mem.base) } },
+ .extern_func => .{ .extern_func = @enumFromInt(mem.base) },
},
.scale_index = switch (mem.info.index) {
.none => null,
@@ -1945,8 +1960,8 @@ pub const Memory = struct {
pub fn deinit(mir: *Mir, gpa: std.mem.Allocator) void {
mir.instructions.deinit(gpa);
gpa.free(mir.extra);
- gpa.free(mir.local_name_bytes);
- gpa.free(mir.local_types);
+ gpa.free(mir.string_bytes);
+ gpa.free(mir.locals);
gpa.free(mir.table);
mir.frame_locs.deinit(gpa);
mir.* = undefined;
@@ -1970,16 +1985,15 @@ pub fn emit(
const mod = zcu.navFileScope(nav).mod.?;
var e: Emit = .{
.lower = .{
- .bin_file = lf,
.target = &mod.resolved_target.result,
.allocator = gpa,
.mir = mir,
.cc = fn_info.cc,
.src_loc = src_loc,
- .output_mode = comp.config.output_mode,
- .link_mode = comp.config.link_mode,
- .pic = mod.pic,
},
+ .bin_file = lf,
+ .pt = pt,
+ .pic = mod.pic,
.atom_index = sym: {
if (lf.cast(.elf)) |ef| break :sym try ef.zigObjectPtr().?.getOrCreateMetadataForNav(zcu, nav);
if (lf.cast(.macho)) |mf| break :sym try mf.getZigObject().?.getOrCreateMetadataForNav(mf, nav);
@@ -1992,6 +2006,7 @@ pub fn emit(
},
.debug_output = debug_output,
.code = code,
+
.prev_di_loc = .{
.line = func.lbrace_line,
.column = func.lbrace_column,
@@ -2002,7 +2017,12 @@ pub fn emit(
},
},
.prev_di_pc = 0,
+
+ .code_offset_mapping = .empty,
+ .relocs = .empty,
+ .table_relocs = .empty,
};
+ defer e.deinit();
e.emitMir() catch |err| switch (err) {
error.LowerFail, error.EmitFail => return zcu.codegenFailMsg(nav, e.lower.err_msg.?),
error.InvalidInstruction, error.CannotEncode => return zcu.codegenFail(nav, "emit MIR failed: {s} (Zig compiler bug)", .{@errorName(err)}),
@@ -2010,6 +2030,62 @@ pub fn emit(
};
}
+pub fn emitLazy(
+ mir: Mir,
+ lf: *link.File,
+ pt: Zcu.PerThread,
+ src_loc: Zcu.LazySrcLoc,
+ lazy_sym: link.File.LazySymbol,
+ code: *std.ArrayListUnmanaged(u8),
+ debug_output: link.File.DebugInfoOutput,
+) codegen.CodeGenError!void {
+ const zcu = pt.zcu;
+ const comp = zcu.comp;
+ const gpa = comp.gpa;
+ const mod = comp.root_mod;
+ var e: Emit = .{
+ .lower = .{
+ .target = &mod.resolved_target.result,
+ .allocator = gpa,
+ .mir = mir,
+ .cc = .auto,
+ .src_loc = src_loc,
+ },
+ .bin_file = lf,
+ .pt = pt,
+ .pic = mod.pic,
+ .atom_index = sym: {
+ if (lf.cast(.elf)) |ef| break :sym ef.zigObjectPtr().?.getOrCreateMetadataForLazySymbol(ef, pt, lazy_sym) catch |err|
+ return zcu.codegenFailType(lazy_sym.ty, "{s} creating lazy symbol", .{@errorName(err)});
+ if (lf.cast(.macho)) |mf| break :sym mf.getZigObject().?.getOrCreateMetadataForLazySymbol(mf, pt, lazy_sym) catch |err|
+ return zcu.codegenFailType(lazy_sym.ty, "{s} creating lazy symbol", .{@errorName(err)});
+ if (lf.cast(.coff)) |cf| {
+ const atom = cf.getOrCreateAtomForLazySymbol(pt, lazy_sym) catch |err|
+ return zcu.codegenFailType(lazy_sym.ty, "{s} creating lazy symbol", .{@errorName(err)});
+ break :sym cf.getAtom(atom).getSymbolIndex().?;
+ }
+ if (lf.cast(.plan9)) |p9f| break :sym p9f.getOrCreateAtomForLazySymbol(pt, lazy_sym) catch |err|
+ return zcu.codegenFailType(lazy_sym.ty, "{s} creating lazy symbol", .{@errorName(err)});
+ unreachable;
+ },
+ .debug_output = debug_output,
+ .code = code,
+
+ .prev_di_loc = undefined,
+ .prev_di_pc = undefined,
+
+ .code_offset_mapping = .empty,
+ .relocs = .empty,
+ .table_relocs = .empty,
+ };
+ defer e.deinit();
+ e.emitMir() catch |err| switch (err) {
+ error.LowerFail, error.EmitFail => return zcu.codegenFailTypeMsg(lazy_sym.ty, e.lower.err_msg.?),
+ error.InvalidInstruction, error.CannotEncode => return zcu.codegenFailType(lazy_sym.ty, "emit MIR failed: {s} (Zig compiler bug)", .{@errorName(err)}),
+ else => return zcu.codegenFailType(lazy_sym.ty, "emit MIR failed: {s}", .{@errorName(err)}),
+ };
+}
+
pub fn extraData(mir: Mir, comptime T: type, index: u32) struct { data: T, end: u32 } {
const fields = std.meta.fields(T);
var i: u32 = index;
@@ -2039,9 +2115,10 @@ pub fn resolveFrameAddr(mir: Mir, frame_addr: bits.FrameAddr) bits.RegisterOffse
return .{ .reg = frame_loc.base, .off = frame_loc.disp + frame_addr.off };
}
-pub fn resolveFrameLoc(mir: Mir, mem: Memory) Memory {
+pub fn resolveMemoryExtra(mir: Mir, payload: u32) Memory {
+ const mem = mir.extraData(Mir.Memory, payload).data;
return switch (mem.info.base) {
- .none, .reg, .table, .reloc, .pcrel, .rip_inst => mem,
+ .none, .reg, .table, .rip_inst, .nav, .uav, .lazy_sym, .extern_func => mem,
.frame => if (mir.frame_locs.len > 0) .{
.info = .{
.base = .reg,
@@ -2063,7 +2140,6 @@ const builtin = @import("builtin");
const encoder = @import("encoder.zig");
const std = @import("std");
-const IntegerBitSet = std.bit_set.IntegerBitSet;
const InternPool = @import("../../InternPool.zig");
const Mir = @This();
const Register = bits.Register;
src/link/Elf/Symbol.zig
@@ -462,9 +462,6 @@ pub const Flags = packed struct {
/// Whether the symbol is a TLS variable.
is_tls: bool = false,
-
- /// Whether the symbol is an extern pointer (as opposed to function).
- is_extern_ptr: bool = false,
};
pub const Extra = struct {
src/link/Elf/ZigObject.zig
@@ -1542,11 +1542,7 @@ pub fn updateNav(
nav.name.toSlice(ip),
@"extern".lib_name.toSlice(ip),
);
- if (!ip.isFunctionType(@"extern".ty)) {
- const sym = self.symbol(sym_index);
- sym.flags.is_extern_ptr = true;
- if (@"extern".is_threadlocal) sym.flags.is_tls = true;
- }
+ if (@"extern".is_threadlocal) self.symbol(sym_index).flags.is_tls = true;
if (self.dwarf) |*dwarf| dwarf: {
var debug_wip_nav = try dwarf.initWipNav(pt, nav_index, sym_index) orelse break :dwarf;
defer debug_wip_nav.deinit();
src/link/MachO/Symbol.zig
@@ -389,9 +389,6 @@ pub const Flags = packed struct {
/// ZigObject specific flags
/// Whether the symbol has a trampoline
trampoline: bool = false,
-
- /// Whether the symbol is an extern pointer (as opposed to function).
- is_extern_ptr: bool = false,
};
pub const SectionFlags = packed struct(u8) {
src/link/MachO/ZigObject.zig
@@ -881,11 +881,7 @@ pub fn updateNav(
const name = @"extern".name.toSlice(ip);
const lib_name = @"extern".lib_name.toSlice(ip);
const sym_index = try self.getGlobalSymbol(macho_file, name, lib_name);
- if (!ip.isFunctionType(@"extern".ty)) {
- const sym = &self.symbols.items[sym_index];
- sym.flags.is_extern_ptr = true;
- if (@"extern".is_threadlocal) sym.flags.tlv = true;
- }
+ if (@"extern".is_threadlocal) self.symbols.items[sym_index].flags.tlv = true;
if (self.dwarf) |*dwarf| dwarf: {
var debug_wip_nav = try dwarf.initWipNav(pt, nav_index, sym_index) orelse break :dwarf;
defer debug_wip_nav.deinit();
src/link/Dwarf.zig
@@ -1478,16 +1478,16 @@ pub const WipNav = struct {
pub fn genLocalVarDebugInfo(
wip_nav: *WipNav,
tag: LocalVarTag,
- name: []const u8,
+ opt_name: ?[]const u8,
ty: Type,
loc: Loc,
) UpdateError!void {
assert(wip_nav.func != .none);
try wip_nav.abbrevCode(switch (tag) {
- .arg => .arg,
- .local_var => .local_var,
+ .arg => if (opt_name) |_| .arg else .unnamed_arg,
+ .local_var => if (opt_name) |_| .local_var else unreachable,
});
- try wip_nav.strp(name);
+ if (opt_name) |name| try wip_nav.strp(name);
try wip_nav.refType(ty);
try wip_nav.infoExprLoc(loc);
wip_nav.any_children = true;
@@ -1498,7 +1498,7 @@ pub const WipNav = struct {
wip_nav: *WipNav,
src_loc: Zcu.LazySrcLoc,
tag: LocalConstTag,
- name: []const u8,
+ opt_name: ?[]const u8,
val: Value,
) UpdateError!void {
assert(wip_nav.func != .none);
@@ -1508,19 +1508,19 @@ pub const WipNav = struct {
const has_runtime_bits = ty.hasRuntimeBits(zcu);
const has_comptime_state = ty.comptimeOnly(zcu) and try ty.onePossibleValue(pt) == null;
try wip_nav.abbrevCode(if (has_runtime_bits and has_comptime_state) switch (tag) {
- .comptime_arg => .comptime_arg_runtime_bits_comptime_state,
- .local_const => .local_const_runtime_bits_comptime_state,
+ .comptime_arg => if (opt_name) |_| .comptime_arg_runtime_bits_comptime_state else .unnamed_comptime_arg_runtime_bits_comptime_state,
+ .local_const => if (opt_name) |_| .local_const_runtime_bits_comptime_state else unreachable,
} else if (has_comptime_state) switch (tag) {
- .comptime_arg => .comptime_arg_comptime_state,
- .local_const => .local_const_comptime_state,
+ .comptime_arg => if (opt_name) |_| .comptime_arg_comptime_state else .unnamed_comptime_arg_comptime_state,
+ .local_const => if (opt_name) |_| .local_const_comptime_state else unreachable,
} else if (has_runtime_bits) switch (tag) {
- .comptime_arg => .comptime_arg_runtime_bits,
- .local_const => .local_const_runtime_bits,
+ .comptime_arg => if (opt_name) |_| .comptime_arg_runtime_bits else .unnamed_comptime_arg_runtime_bits,
+ .local_const => if (opt_name) |_| .local_const_runtime_bits else unreachable,
} else switch (tag) {
- .comptime_arg => .comptime_arg,
- .local_const => .local_const,
+ .comptime_arg => if (opt_name) |_| .comptime_arg else .unnamed_comptime_arg,
+ .local_const => if (opt_name) |_| .local_const else unreachable,
});
- try wip_nav.strp(name);
+ if (opt_name) |name| try wip_nav.strp(name);
try wip_nav.refType(ty);
if (has_runtime_bits) try wip_nav.blockValue(src_loc, val);
if (has_comptime_state) try wip_nav.refValue(val);
@@ -4945,10 +4945,15 @@ const AbbrevCode = enum {
empty_inlined_func,
inlined_func,
arg,
+ unnamed_arg,
comptime_arg,
+ unnamed_comptime_arg,
comptime_arg_runtime_bits,
+ unnamed_comptime_arg_runtime_bits,
comptime_arg_comptime_state,
+ unnamed_comptime_arg_comptime_state,
comptime_arg_runtime_bits_comptime_state,
+ unnamed_comptime_arg_runtime_bits_comptime_state,
local_var,
local_const,
local_const_runtime_bits,
@@ -5734,6 +5739,13 @@ const AbbrevCode = enum {
.{ .location, .exprloc },
},
},
+ .unnamed_arg = .{
+ .tag = .formal_parameter,
+ .attrs = &.{
+ .{ .type, .ref_addr },
+ .{ .location, .exprloc },
+ },
+ },
.comptime_arg = .{
.tag = .formal_parameter,
.attrs = &.{
@@ -5742,6 +5754,13 @@ const AbbrevCode = enum {
.{ .type, .ref_addr },
},
},
+ .unnamed_comptime_arg = .{
+ .tag = .formal_parameter,
+ .attrs = &.{
+ .{ .const_expr, .flag_present },
+ .{ .type, .ref_addr },
+ },
+ },
.comptime_arg_runtime_bits = .{
.tag = .formal_parameter,
.attrs = &.{
@@ -5751,6 +5770,14 @@ const AbbrevCode = enum {
.{ .const_value, .block },
},
},
+ .unnamed_comptime_arg_runtime_bits = .{
+ .tag = .formal_parameter,
+ .attrs = &.{
+ .{ .const_expr, .flag_present },
+ .{ .type, .ref_addr },
+ .{ .const_value, .block },
+ },
+ },
.comptime_arg_comptime_state = .{
.tag = .formal_parameter,
.attrs = &.{
@@ -5760,6 +5787,14 @@ const AbbrevCode = enum {
.{ .ZIG_comptime_value, .ref_addr },
},
},
+ .unnamed_comptime_arg_comptime_state = .{
+ .tag = .formal_parameter,
+ .attrs = &.{
+ .{ .const_expr, .flag_present },
+ .{ .type, .ref_addr },
+ .{ .ZIG_comptime_value, .ref_addr },
+ },
+ },
.comptime_arg_runtime_bits_comptime_state = .{
.tag = .formal_parameter,
.attrs = &.{
@@ -5770,6 +5805,15 @@ const AbbrevCode = enum {
.{ .ZIG_comptime_value, .ref_addr },
},
},
+ .unnamed_comptime_arg_runtime_bits_comptime_state = .{
+ .tag = .formal_parameter,
+ .attrs = &.{
+ .{ .const_expr, .flag_present },
+ .{ .type, .ref_addr },
+ .{ .const_value, .block },
+ .{ .ZIG_comptime_value, .ref_addr },
+ },
+ },
.local_var = .{
.tag = .variable,
.attrs = &.{
src/codegen.zig
@@ -951,18 +951,17 @@ pub const GenResult = union(enum) {
};
};
-fn genNavRef(
+pub fn genNavRef(
lf: *link.File,
pt: Zcu.PerThread,
src_loc: Zcu.LazySrcLoc,
- val: Value,
+ ty: Type,
nav_index: InternPool.Nav.Index,
target: std.Target,
) CodeGenError!GenResult {
const zcu = pt.zcu;
const ip = &zcu.intern_pool;
- const ty = val.typeOf(zcu);
- log.debug("genNavRef: val = {}", .{val.fmtValue(pt)});
+ log.debug("genNavRef: ty = {}", .{ty.fmt(pt)});
if (!ty.isFnOrHasRuntimeBitsIgnoreComptime(zcu)) {
const imm: u64 = switch (@divExact(target.ptrBitWidth(), 8)) {
@@ -991,12 +990,10 @@ fn genNavRef(
}
const nav = ip.getNav(nav_index);
- assert(!nav.isThreadlocal(ip));
-
- const lib_name, const linkage, const visibility = if (nav.getExtern(ip)) |e|
- .{ e.lib_name, e.linkage, e.visibility }
+ const lib_name, const linkage, const is_threadlocal = if (nav.getExtern(ip)) |e|
+ .{ e.lib_name, e.linkage, e.is_threadlocal and !zcu.navFileScope(nav_index).mod.?.single_threaded }
else
- .{ .none, .internal, .default };
+ .{ .none, .internal, false };
const name = nav.name;
if (lf.cast(.elf)) |elf_file| {
@@ -1004,6 +1001,7 @@ fn genNavRef(
switch (linkage) {
.internal => {
const sym_index = try zo.getOrCreateMetadataForNav(zcu, nav_index);
+ if (is_threadlocal) zo.symbol(sym_index).flags.is_tls = true;
return .{ .mcv = .{ .lea_symbol = sym_index } };
},
.strong, .weak => {
@@ -1014,10 +1012,7 @@ fn genNavRef(
.weak => zo.symbol(sym_index).flags.weak = true,
.link_once => unreachable,
}
- switch (visibility) {
- .default => zo.symbol(sym_index).flags.is_extern_ptr = true,
- .hidden, .protected => {},
- }
+ if (is_threadlocal) zo.symbol(sym_index).flags.is_tls = true;
return .{ .mcv = .{ .lea_symbol = sym_index } };
},
.link_once => unreachable,
@@ -1027,8 +1022,8 @@ fn genNavRef(
switch (linkage) {
.internal => {
const sym_index = try zo.getOrCreateMetadataForNav(macho_file, nav_index);
- const sym = zo.symbols.items[sym_index];
- return .{ .mcv = .{ .lea_symbol = sym.nlist_idx } };
+ if (is_threadlocal) zo.symbols.items[sym_index].flags.tlv = true;
+ return .{ .mcv = .{ .lea_symbol = sym_index } };
},
.strong, .weak => {
const sym_index = try macho_file.getGlobalSymbol(name.toSlice(ip), lib_name.toSlice(ip));
@@ -1038,10 +1033,7 @@ fn genNavRef(
.weak => zo.symbols.items[sym_index].flags.weak = true,
.link_once => unreachable,
}
- switch (visibility) {
- .default => zo.symbols.items[sym_index].flags.is_extern_ptr = true,
- .hidden, .protected => {},
- }
+ if (is_threadlocal) zo.symbols.items[sym_index].flags.tlv = true;
return .{ .mcv = .{ .lea_symbol = sym_index } };
},
.link_once => unreachable,
@@ -1071,6 +1063,7 @@ fn genNavRef(
}
}
+/// deprecated legacy code path
pub fn genTypedValue(
lf: *link.File,
pt: Zcu.PerThread,
@@ -1078,45 +1071,97 @@ pub fn genTypedValue(
val: Value,
target: std.Target,
) CodeGenError!GenResult {
+ const ip = &pt.zcu.intern_pool;
+ return switch (try lowerValue(pt, val, &target)) {
+ .none => .{ .mcv = .none },
+ .undef => .{ .mcv = .undef },
+ .immediate => |imm| .{ .mcv = .{ .immediate = imm } },
+ .lea_nav => |nav| genNavRef(lf, pt, src_loc, .fromInterned(ip.getNav(nav).typeOf(ip)), nav, target),
+ .lea_uav => |uav| switch (try lf.lowerUav(
+ pt,
+ uav.val,
+ Type.fromInterned(uav.orig_ty).ptrAlignment(pt.zcu),
+ src_loc,
+ )) {
+ .mcv => |mcv| .{ .mcv = switch (mcv) {
+ else => unreachable,
+ .load_direct => |sym_index| .{ .lea_direct = sym_index },
+ .load_symbol => |sym_index| .{ .lea_symbol = sym_index },
+ } },
+ .fail => |em| .{ .fail = em },
+ },
+ .load_uav => |uav| lf.lowerUav(
+ pt,
+ uav.val,
+ Type.fromInterned(uav.orig_ty).ptrAlignment(pt.zcu),
+ src_loc,
+ ),
+ };
+}
+
+const LowerResult = union(enum) {
+ none,
+ undef,
+ /// The bit-width of the immediate may be smaller than `u64`. For example, on 32-bit targets
+ /// such as ARM, the immediate will never exceed 32-bits.
+ immediate: u64,
+ lea_nav: InternPool.Nav.Index,
+ lea_uav: InternPool.Key.Ptr.BaseAddr.Uav,
+ load_uav: InternPool.Key.Ptr.BaseAddr.Uav,
+};
+
+pub fn lowerValue(pt: Zcu.PerThread, val: Value, target: *const std.Target) Allocator.Error!LowerResult {
const zcu = pt.zcu;
const ip = &zcu.intern_pool;
const ty = val.typeOf(zcu);
- log.debug("genTypedValue: val = {}", .{val.fmtValue(pt)});
+ log.debug("lowerValue(@as({}, {}))", .{ ty.fmt(pt), val.fmtValue(pt) });
- if (val.isUndef(zcu)) return .{ .mcv = .undef };
+ if (val.isUndef(zcu)) return .undef;
switch (ty.zigTypeTag(zcu)) {
- .void => return .{ .mcv = .none },
+ .void => return .none,
.pointer => switch (ty.ptrSize(zcu)) {
.slice => {},
else => switch (val.toIntern()) {
.null_value => {
- return .{ .mcv = .{ .immediate = 0 } };
+ return .{ .immediate = 0 };
},
else => switch (ip.indexToKey(val.toIntern())) {
.int => {
- return .{ .mcv = .{ .immediate = val.toUnsignedInt(zcu) } };
+ return .{ .immediate = val.toUnsignedInt(zcu) };
},
.ptr => |ptr| if (ptr.byte_offset == 0) switch (ptr.base_addr) {
- .nav => |nav| return genNavRef(lf, pt, src_loc, val, nav, target),
- .uav => |uav| if (Value.fromInterned(uav.val).typeOf(zcu).hasRuntimeBits(zcu))
- return switch (try lf.lowerUav(
- pt,
- uav.val,
- Type.fromInterned(uav.orig_ty).ptrAlignment(zcu),
- src_loc,
- )) {
- .mcv => |mcv| return .{ .mcv = switch (mcv) {
- .load_direct => |sym_index| .{ .lea_direct = sym_index },
- .load_symbol => |sym_index| .{ .lea_symbol = sym_index },
+ .nav => |nav| {
+ if (!ty.isFnOrHasRuntimeBitsIgnoreComptime(zcu)) {
+ const imm: u64 = switch (@divExact(target.ptrBitWidth(), 8)) {
+ 1 => 0xaa,
+ 2 => 0xaaaa,
+ 4 => 0xaaaaaaaa,
+ 8 => 0xaaaaaaaaaaaaaaaa,
else => unreachable,
- } },
- .fail => |em| return .{ .fail = em },
+ };
+ return .{ .immediate = imm };
}
+
+ if (ty.castPtrToFn(zcu)) |fn_ty| {
+ if (zcu.typeToFunc(fn_ty).?.is_generic) {
+ return .{ .immediate = fn_ty.abiAlignment(zcu).toByteUnits().? };
+ }
+ } else if (ty.zigTypeTag(zcu) == .pointer) {
+ const elem_ty = ty.elemType2(zcu);
+ if (!elem_ty.hasRuntimeBits(zcu)) {
+ return .{ .immediate = elem_ty.abiAlignment(zcu).toByteUnits().? };
+ }
+ }
+
+ return .{ .lea_nav = nav };
+ },
+ .uav => |uav| if (Value.fromInterned(uav.val).typeOf(zcu).hasRuntimeBits(zcu))
+ return .{ .lea_uav = uav }
else
- return .{ .mcv = .{ .immediate = Type.fromInterned(uav.orig_ty).ptrAlignment(zcu)
- .forward(@intCast((@as(u66, 1) << @intCast(target.ptrBitWidth() | 1)) / 3)) } },
+ return .{ .immediate = Type.fromInterned(uav.orig_ty).ptrAlignment(zcu)
+ .forward(@intCast((@as(u66, 1) << @intCast(target.ptrBitWidth() | 1)) / 3)) },
else => {},
},
else => {},
@@ -1130,39 +1175,35 @@ pub fn genTypedValue(
.signed => @bitCast(val.toSignedInt(zcu)),
.unsigned => val.toUnsignedInt(zcu),
};
- return .{ .mcv = .{ .immediate = unsigned } };
+ return .{ .immediate = unsigned };
}
},
.bool => {
- return .{ .mcv = .{ .immediate = @intFromBool(val.toBool()) } };
+ return .{ .immediate = @intFromBool(val.toBool()) };
},
.optional => {
if (ty.isPtrLikeOptional(zcu)) {
- return genTypedValue(
- lf,
+ return lowerValue(
pt,
- src_loc,
- val.optionalValue(zcu) orelse return .{ .mcv = .{ .immediate = 0 } },
+ val.optionalValue(zcu) orelse return .{ .immediate = 0 },
target,
);
} else if (ty.abiSize(zcu) == 1) {
- return .{ .mcv = .{ .immediate = @intFromBool(!val.isNull(zcu)) } };
+ return .{ .immediate = @intFromBool(!val.isNull(zcu)) };
}
},
.@"enum" => {
const enum_tag = ip.indexToKey(val.toIntern()).enum_tag;
- return genTypedValue(
- lf,
+ return lowerValue(
pt,
- src_loc,
Value.fromInterned(enum_tag.int),
target,
);
},
.error_set => {
const err_name = ip.indexToKey(val.toIntern()).err.name;
- const error_index = try pt.getErrorValue(err_name);
- return .{ .mcv = .{ .immediate = error_index } };
+ const error_index = ip.getErrorValueIfExists(err_name).?;
+ return .{ .immediate = error_index };
},
.error_union => {
const err_type = ty.errorUnionSet(zcu);
@@ -1171,20 +1212,16 @@ pub fn genTypedValue(
// We use the error type directly as the type.
const err_int_ty = try pt.errorIntType();
switch (ip.indexToKey(val.toIntern()).error_union.val) {
- .err_name => |err_name| return genTypedValue(
- lf,
+ .err_name => |err_name| return lowerValue(
pt,
- src_loc,
Value.fromInterned(try pt.intern(.{ .err = .{
.ty = err_type.toIntern(),
.name = err_name,
} })),
target,
),
- .payload => return genTypedValue(
- lf,
+ .payload => return lowerValue(
pt,
- src_loc,
try pt.intValue(err_int_ty, 0),
target,
),
@@ -1204,7 +1241,10 @@ pub fn genTypedValue(
else => {},
}
- return lf.lowerUav(pt, val.toIntern(), .none, src_loc);
+ return .{ .load_uav = .{
+ .val = val.toIntern(),
+ .orig_ty = (try pt.singleConstPtrType(ty)).toIntern(),
+ } };
}
pub fn errUnionPayloadOffset(payload_ty: Type, zcu: *Zcu) u64 {
src/target.zig
@@ -850,7 +850,7 @@ pub inline fn backendSupportsFeature(backend: std.builtin.CompilerBackend, compt
},
.separate_thread => switch (backend) {
.stage2_llvm => false,
- .stage2_c, .stage2_wasm => true,
+ .stage2_c, .stage2_wasm, .stage2_x86_64 => true,
// TODO: most self-hosted backends should be able to support this without too much work.
else => false,
},