| ... | @@ -195,9 +195,9 @@ pub const MCValue = union(enum) { | ... | @@ -195,9 +195,9 @@ pub const MCValue = union(enum) { |
| 195 | memory: u64, | 195 | memory: u64, |
| 196 | /// The value is in memory at an address not-yet-allocated by the linker. | 196 | /// The value is in memory at an address not-yet-allocated by the linker. |
| 197 | /// This traditionally corresponds to a relocation emitted in a relocatable object file. | 197 | /// This traditionally corresponds to a relocation emitted in a relocatable object file. |
| 198 | load_memory: u32, | 198 | load_symbol: u32, |
| 199 | /// The address of the memory location not-yet-allocated by the linker. | 199 | /// The address of the memory location not-yet-allocated by the linker. |
| 200 | lea_memory: u32, | 200 | lea_symbol: u32, |
| 201 | /// The value is in memory at a constant offset from the address in a register. | 201 | /// The value is in memory at a constant offset from the address in a register. |
| 202 | indirect: RegisterOffset, | 202 | indirect: RegisterOffset, |
| 203 | /// The value is in memory. | 203 | /// The value is in memory. |
| ... | @@ -298,7 +298,7 @@ pub const MCValue = union(enum) { | ... | @@ -298,7 +298,7 @@ pub const MCValue = union(enum) { |
| 298 | .register_pair, | 298 | .register_pair, |
| 299 | .register_offset, | 299 | .register_offset, |
| 300 | .register_overflow, | 300 | .register_overflow, |
| 301 | .lea_memory, | 301 | .lea_symbol, |
| 302 | .lea_direct, | 302 | .lea_direct, |
| 303 | .lea_got, | 303 | .lea_got, |
| 304 | .lea_tlv, | 304 | .lea_tlv, |
| ... | @@ -315,7 +315,7 @@ pub const MCValue = union(enum) { | ... | @@ -315,7 +315,7 @@ pub const MCValue = union(enum) { |
| 315 | .load_got => |sym_index| .{ .lea_got = sym_index }, | 315 | .load_got => |sym_index| .{ .lea_got = sym_index }, |
| 316 | .load_tlv => |sym_index| .{ .lea_tlv = sym_index }, | 316 | .load_tlv => |sym_index| .{ .lea_tlv = sym_index }, |
| 317 | .load_frame => |frame_addr| .{ .lea_frame = frame_addr }, | 317 | .load_frame => |frame_addr| .{ .lea_frame = frame_addr }, |
| 318 | .load_memory => |sym_index| .{ .lea_memory = sym_index }, | 318 | .load_symbol => |sym_index| .{ .lea_symbol = sym_index }, |
| 319 | }; | 319 | }; |
| 320 | } | 320 | } |
| 321 | | 321 | |
| ... | @@ -334,7 +334,7 @@ pub const MCValue = union(enum) { | ... | @@ -334,7 +334,7 @@ pub const MCValue = union(enum) { |
| 334 | .load_got, | 334 | .load_got, |
| 335 | .load_tlv, | 335 | .load_tlv, |
| 336 | .load_frame, | 336 | .load_frame, |
| 337 | .load_memory, | 337 | .load_symbol, |
| 338 | .reserved_frame, | 338 | .reserved_frame, |
| 339 | .air_ref, | 339 | .air_ref, |
| 340 | => unreachable, // not dereferenceable | 340 | => unreachable, // not dereferenceable |
| ... | @@ -345,7 +345,7 @@ pub const MCValue = union(enum) { | ... | @@ -345,7 +345,7 @@ pub const MCValue = union(enum) { |
| 345 | .lea_got => |sym_index| .{ .load_got = sym_index }, | 345 | .lea_got => |sym_index| .{ .load_got = sym_index }, |
| 346 | .lea_tlv => |sym_index| .{ .load_tlv = sym_index }, | 346 | .lea_tlv => |sym_index| .{ .load_tlv = sym_index }, |
| 347 | .lea_frame => |frame_addr| .{ .load_frame = frame_addr }, | 347 | .lea_frame => |frame_addr| .{ .load_frame = frame_addr }, |
| 348 | .lea_memory => |sym_index| .{ .load_memory = sym_index }, | 348 | .lea_symbol => |sym_index| .{ .load_symbol = sym_index }, |
| 349 | }; | 349 | }; |
| 350 | } | 350 | } |
| 351 | | 351 | |
| ... | @@ -370,8 +370,8 @@ pub const MCValue = union(enum) { | ... | @@ -370,8 +370,8 @@ pub const MCValue = union(enum) { |
| 370 | .load_tlv, | 370 | .load_tlv, |
| 371 | .lea_tlv, | 371 | .lea_tlv, |
| 372 | .load_frame, | 372 | .load_frame, |
| 373 | .load_memory, | 373 | .load_symbol, |
| 374 | .lea_memory, | 374 | .lea_symbol, |
| 375 | => switch (off) { | 375 | => switch (off) { |
| 376 | 0 => mcv, | 376 | 0 => mcv, |
| 377 | else => unreachable, // not offsettable | 377 | else => unreachable, // not offsettable |
| ... | @@ -408,8 +408,8 @@ pub const MCValue = union(enum) { | ... | @@ -408,8 +408,8 @@ pub const MCValue = union(enum) { |
| 408 | .lea_frame, | 408 | .lea_frame, |
| 409 | .reserved_frame, | 409 | .reserved_frame, |
| 410 | .air_ref, | 410 | .air_ref, |
| 411 | .load_memory, | 411 | .load_symbol, |
| 412 | .lea_memory, | 412 | .lea_symbol, |
| 413 | => unreachable, | 413 | => unreachable, |
| 414 | .memory => |addr| if (math.cast(i32, @as(i64, @bitCast(addr)))) |small_addr| | 414 | .memory => |addr| if (math.cast(i32, @as(i64, @bitCast(addr)))) |small_addr| |
| 415 | Memory.sib(ptr_size, .{ .base = .{ .reg = .ds }, .disp = small_addr }) | 415 | Memory.sib(ptr_size, .{ .base = .{ .reg = .ds }, .disp = small_addr }) |
| ... | @@ -453,8 +453,8 @@ pub const MCValue = union(enum) { | ... | @@ -453,8 +453,8 @@ pub const MCValue = union(enum) { |
| 453 | .lea_frame => |pl| try writer.print("{} + 0x{x}", .{ pl.index, pl.off }), | 453 | .lea_frame => |pl| try writer.print("{} + 0x{x}", .{ pl.index, pl.off }), |
| 454 | .reserved_frame => |pl| try writer.print("(dead:{})", .{pl}), | 454 | .reserved_frame => |pl| try writer.print("(dead:{})", .{pl}), |
| 455 | .air_ref => |pl| try writer.print("(air:0x{x})", .{@intFromEnum(pl)}), | 455 | .air_ref => |pl| try writer.print("(air:0x{x})", .{@intFromEnum(pl)}), |
| 456 | .load_memory => |pl| try writer.print("[mem:{d}]", .{pl}), | 456 | .load_symbol => |pl| try writer.print("[mem:{d}]", .{pl}), |
| 457 | .lea_memory => |pl| try writer.print("mem:{d}", .{pl}), | 457 | .lea_symbol => |pl| try writer.print("mem:{d}", .{pl}), |
| 458 | } | 458 | } |
| 459 | } | 459 | } |
| 460 | }; | 460 | }; |
| ... | @@ -480,8 +480,8 @@ const InstTracking = struct { | ... | @@ -480,8 +480,8 @@ const InstTracking = struct { |
| 480 | .lea_tlv, | 480 | .lea_tlv, |
| 481 | .load_frame, | 481 | .load_frame, |
| 482 | .lea_frame, | 482 | .lea_frame, |
| 483 | .load_memory, | 483 | .load_symbol, |
| 484 | .lea_memory, | 484 | .lea_symbol, |
| 485 | => result, | 485 | => result, |
| 486 | .dead, | 486 | .dead, |
| 487 | .reserved_frame, | 487 | .reserved_frame, |
| ... | @@ -541,8 +541,8 @@ const InstTracking = struct { | ... | @@ -541,8 +541,8 @@ const InstTracking = struct { |
| 541 | .lea_tlv, | 541 | .lea_tlv, |
| 542 | .load_frame, | 542 | .load_frame, |
| 543 | .lea_frame, | 543 | .lea_frame, |
| 544 | .load_memory, | 544 | .load_symbol, |
| 545 | .lea_memory, | 545 | .lea_symbol, |
| 546 | => self.long, | 546 | => self.long, |
| 547 | .dead, | 547 | .dead, |
| 548 | .eflags, | 548 | .eflags, |
| ... | @@ -577,8 +577,8 @@ const InstTracking = struct { | ... | @@ -577,8 +577,8 @@ const InstTracking = struct { |
| 577 | .load_tlv, | 577 | .load_tlv, |
| 578 | .lea_tlv, | 578 | .lea_tlv, |
| 579 | .lea_frame, | 579 | .lea_frame, |
| 580 | .load_memory, | 580 | .load_symbol, |
| 581 | .lea_memory, | 581 | .lea_symbol, |
| 582 | => assert(std.meta.eql(self.long, target.long)), | 582 | => assert(std.meta.eql(self.long, target.long)), |
| 583 | .load_frame, | 583 | .load_frame, |
| 584 | .reserved_frame, | 584 | .reserved_frame, |
| ... | @@ -4731,12 +4731,12 @@ fn airArrayElemVal(self: *Self, inst: Air.Inst.Index) !void { | ... | @@ -4731,12 +4731,12 @@ fn airArrayElemVal(self: *Self, inst: Air.Inst.Index) !void { |
| 4731 | Memory.sib(.qword, .{ .base = .{ .frame = frame_addr.index }, .disp = frame_addr.off }), | 4731 | Memory.sib(.qword, .{ .base = .{ .frame = frame_addr.index }, .disp = frame_addr.off }), |
| 4732 | ), | 4732 | ), |
| 4733 | .memory, | 4733 | .memory, |
| 4734 | .load_memory, | 4734 | .load_symbol, |
| 4735 | .load_direct, | 4735 | .load_direct, |
| 4736 | .load_got, | 4736 | .load_got, |
| 4737 | .load_tlv, | 4737 | .load_tlv, |
| 4738 | => try self.genSetReg(addr_reg, Type.usize, array.address()), | 4738 | => try self.genSetReg(addr_reg, Type.usize, array.address()), |
| 4739 | .lea_memory, .lea_direct, .lea_tlv => unreachable, | 4739 | .lea_symbol, .lea_direct, .lea_tlv => unreachable, |
| 4740 | else => return self.fail("TODO implement array_elem_val when array is {}", .{array}), | 4740 | else => return self.fail("TODO implement array_elem_val when array is {}", .{array}), |
| 4741 | } | 4741 | } |
| 4742 | | 4742 | |
| ... | @@ -6329,7 +6329,7 @@ fn load(self: *Self, dst_mcv: MCValue, ptr_ty: Type, ptr_mcv: MCValue) InnerErro | ... | @@ -6329,7 +6329,7 @@ fn load(self: *Self, dst_mcv: MCValue, ptr_ty: Type, ptr_mcv: MCValue) InnerErro |
| 6329 | .immediate, | 6329 | .immediate, |
| 6330 | .register, | 6330 | .register, |
| 6331 | .register_offset, | 6331 | .register_offset, |
| 6332 | .lea_memory, | 6332 | .lea_symbol, |
| 6333 | .lea_direct, | 6333 | .lea_direct, |
| 6334 | .lea_got, | 6334 | .lea_got, |
| 6335 | .lea_tlv, | 6335 | .lea_tlv, |
| ... | @@ -6337,7 +6337,7 @@ fn load(self: *Self, dst_mcv: MCValue, ptr_ty: Type, ptr_mcv: MCValue) InnerErro | ... | @@ -6337,7 +6337,7 @@ fn load(self: *Self, dst_mcv: MCValue, ptr_ty: Type, ptr_mcv: MCValue) InnerErro |
| 6337 | => try self.genCopy(dst_ty, dst_mcv, ptr_mcv.deref()), | 6337 | => try self.genCopy(dst_ty, dst_mcv, ptr_mcv.deref()), |
| 6338 | .memory, | 6338 | .memory, |
| 6339 | .indirect, | 6339 | .indirect, |
| 6340 | .load_memory, | 6340 | .load_symbol, |
| 6341 | .load_direct, | 6341 | .load_direct, |
| 6342 | .load_got, | 6342 | .load_got, |
| 6343 | .load_tlv, | 6343 | .load_tlv, |
| ... | @@ -6478,7 +6478,7 @@ fn store(self: *Self, ptr_ty: Type, ptr_mcv: MCValue, src_mcv: MCValue) InnerErr | ... | @@ -6478,7 +6478,7 @@ fn store(self: *Self, ptr_ty: Type, ptr_mcv: MCValue, src_mcv: MCValue) InnerErr |
| 6478 | .immediate, | 6478 | .immediate, |
| 6479 | .register, | 6479 | .register, |
| 6480 | .register_offset, | 6480 | .register_offset, |
| 6481 | .lea_memory, | 6481 | .lea_symbol, |
| 6482 | .lea_direct, | 6482 | .lea_direct, |
| 6483 | .lea_got, | 6483 | .lea_got, |
| 6484 | .lea_tlv, | 6484 | .lea_tlv, |
| ... | @@ -6486,7 +6486,7 @@ fn store(self: *Self, ptr_ty: Type, ptr_mcv: MCValue, src_mcv: MCValue) InnerErr | ... | @@ -6486,7 +6486,7 @@ fn store(self: *Self, ptr_ty: Type, ptr_mcv: MCValue, src_mcv: MCValue) InnerErr |
| 6486 | => try self.genCopy(src_ty, ptr_mcv.deref(), src_mcv), | 6486 | => try self.genCopy(src_ty, ptr_mcv.deref(), src_mcv), |
| 6487 | .memory, | 6487 | .memory, |
| 6488 | .indirect, | 6488 | .indirect, |
| 6489 | .load_memory, | 6489 | .load_symbol, |
| 6490 | .load_direct, | 6490 | .load_direct, |
| 6491 | .load_got, | 6491 | .load_got, |
| 6492 | .load_tlv, | 6492 | .load_tlv, |
| ... | @@ -6919,11 +6919,11 @@ fn genUnOpMir(self: *Self, mir_tag: Mir.Inst.FixedTag, dst_ty: Type, dst_mcv: MC | ... | @@ -6919,11 +6919,11 @@ fn genUnOpMir(self: *Self, mir_tag: Mir.Inst.FixedTag, dst_ty: Type, dst_mcv: MC |
| 6919 | .lea_frame, | 6919 | .lea_frame, |
| 6920 | .reserved_frame, | 6920 | .reserved_frame, |
| 6921 | .air_ref, | 6921 | .air_ref, |
| 6922 | .lea_memory, | 6922 | .lea_symbol, |
| 6923 | => unreachable, // unmodifiable destination | 6923 | => unreachable, // unmodifiable destination |
| 6924 | .register => |dst_reg| try self.asmRegister(mir_tag, registerAlias(dst_reg, abi_size)), | 6924 | .register => |dst_reg| try self.asmRegister(mir_tag, registerAlias(dst_reg, abi_size)), |
| 6925 | .register_pair => unreachable, // unimplemented | 6925 | .register_pair => unreachable, // unimplemented |
| 6926 | .memory, .load_memory, .load_got, .load_direct, .load_tlv => { | 6926 | .memory, .load_symbol, .load_got, .load_direct, .load_tlv => { |
| 6927 | const addr_reg = try self.register_manager.allocReg(null, abi.RegisterClass.gp); | 6927 | const addr_reg = try self.register_manager.allocReg(null, abi.RegisterClass.gp); |
| 6928 | const addr_reg_lock = self.register_manager.lockRegAssumeUnused(addr_reg); | 6928 | const addr_reg_lock = self.register_manager.lockRegAssumeUnused(addr_reg); |
| 6929 | defer self.register_manager.unlockReg(addr_reg_lock); | 6929 | defer self.register_manager.unlockReg(addr_reg_lock); |
| ... | @@ -7975,8 +7975,8 @@ fn genBinOp( | ... | @@ -7975,8 +7975,8 @@ fn genBinOp( |
| 7975 | .immediate, | 7975 | .immediate, |
| 7976 | .eflags, | 7976 | .eflags, |
| 7977 | .register_offset, | 7977 | .register_offset, |
| 7978 | .load_memory, | 7978 | .load_symbol, |
| 7979 | .lea_memory, | 7979 | .lea_symbol, |
| 7980 | .load_direct, | 7980 | .load_direct, |
| 7981 | .lea_direct, | 7981 | .lea_direct, |
| 7982 | .load_got, | 7982 | .load_got, |
| ... | @@ -8033,8 +8033,8 @@ fn genBinOp( | ... | @@ -8033,8 +8033,8 @@ fn genBinOp( |
| 8033 | .register_pair, | 8033 | .register_pair, |
| 8034 | .register_offset, | 8034 | .register_offset, |
| 8035 | .register_overflow, | 8035 | .register_overflow, |
| 8036 | .load_memory, | 8036 | .load_symbol, |
| 8037 | .lea_memory, | 8037 | .lea_symbol, |
| 8038 | .load_direct, | 8038 | .load_direct, |
| 8039 | .lea_direct, | 8039 | .lea_direct, |
| 8040 | .load_got, | 8040 | .load_got, |
| ... | @@ -9168,7 +9168,7 @@ fn genBinOpMir( | ... | @@ -9168,7 +9168,7 @@ fn genBinOpMir( |
| 9168 | .lea_got, | 9168 | .lea_got, |
| 9169 | .lea_tlv, | 9169 | .lea_tlv, |
| 9170 | .lea_frame, | 9170 | .lea_frame, |
| 9171 | .lea_memory, | 9171 | .lea_symbol, |
| 9172 | .reserved_frame, | 9172 | .reserved_frame, |
| 9173 | .air_ref, | 9173 | .air_ref, |
| 9174 | => unreachable, // unmodifiable destination | 9174 | => unreachable, // unmodifiable destination |
| ... | @@ -9251,8 +9251,8 @@ fn genBinOpMir( | ... | @@ -9251,8 +9251,8 @@ fn genBinOpMir( |
| 9251 | .register_offset, | 9251 | .register_offset, |
| 9252 | .memory, | 9252 | .memory, |
| 9253 | .indirect, | 9253 | .indirect, |
| 9254 | .load_memory, | 9254 | .load_symbol, |
| 9255 | .lea_memory, | 9255 | .lea_symbol, |
| 9256 | .load_direct, | 9256 | .load_direct, |
| 9257 | .lea_direct, | 9257 | .lea_direct, |
| 9258 | .load_got, | 9258 | .load_got, |
| ... | @@ -9287,7 +9287,7 @@ fn genBinOpMir( | ... | @@ -9287,7 +9287,7 @@ fn genBinOpMir( |
| 9287 | switch (src_mcv) { | 9287 | switch (src_mcv) { |
| 9288 | .eflags, | 9288 | .eflags, |
| 9289 | .register_offset, | 9289 | .register_offset, |
| 9290 | .lea_memory, | 9290 | .lea_symbol, |
| 9291 | .lea_direct, | 9291 | .lea_direct, |
| 9292 | .lea_got, | 9292 | .lea_got, |
| 9293 | .lea_tlv, | 9293 | .lea_tlv, |
| ... | @@ -9303,7 +9303,7 @@ fn genBinOpMir( | ... | @@ -9303,7 +9303,7 @@ fn genBinOpMir( |
| 9303 | ); | 9303 | ); |
| 9304 | }, | 9304 | }, |
| 9305 | .memory, | 9305 | .memory, |
| 9306 | .load_memory, | 9306 | .load_symbol, |
| 9307 | .load_direct, | 9307 | .load_direct, |
| 9308 | .load_got, | 9308 | .load_got, |
| 9309 | .load_tlv, | 9309 | .load_tlv, |
| ... | @@ -9326,13 +9326,13 @@ fn genBinOpMir( | ... | @@ -9326,13 +9326,13 @@ fn genBinOpMir( |
| 9326 | } | 9326 | } |
| 9327 | } | 9327 | } |
| 9328 | }, | 9328 | }, |
| 9329 | .memory, .indirect, .load_memory, .load_got, .load_direct, .load_tlv, .load_frame => { | 9329 | .memory, .indirect, .load_symbol, .load_got, .load_direct, .load_tlv, .load_frame => { |
| 9330 | const OpInfo = ?struct { addr_reg: Register, addr_lock: RegisterLock }; | 9330 | const OpInfo = ?struct { addr_reg: Register, addr_lock: RegisterLock }; |
| 9331 | const limb_abi_size: u32 = @min(abi_size, 8); | 9331 | const limb_abi_size: u32 = @min(abi_size, 8); |
| 9332 | | 9332 | |
| 9333 | const dst_info: OpInfo = switch (dst_mcv) { | 9333 | const dst_info: OpInfo = switch (dst_mcv) { |
| 9334 | else => unreachable, | 9334 | else => unreachable, |
| 9335 | .memory, .load_memory, .load_got, .load_direct, .load_tlv => dst: { | 9335 | .memory, .load_symbol, .load_got, .load_direct, .load_tlv => dst: { |
| 9336 | const dst_addr_reg = | 9336 | const dst_addr_reg = |
| 9337 | (try self.register_manager.allocReg(null, abi.RegisterClass.gp)).to64(); | 9337 | (try self.register_manager.allocReg(null, abi.RegisterClass.gp)).to64(); |
| 9338 | const dst_addr_lock = self.register_manager.lockRegAssumeUnused(dst_addr_reg); | 9338 | const dst_addr_lock = self.register_manager.lockRegAssumeUnused(dst_addr_reg); |
| ... | @@ -9369,14 +9369,14 @@ fn genBinOpMir( | ... | @@ -9369,14 +9369,14 @@ fn genBinOpMir( |
| 9369 | .lea_tlv, | 9369 | .lea_tlv, |
| 9370 | .load_frame, | 9370 | .load_frame, |
| 9371 | .lea_frame, | 9371 | .lea_frame, |
| 9372 | .lea_memory, | 9372 | .lea_symbol, |
| 9373 | => null, | 9373 | => null, |
| 9374 | .memory, .load_memory, .load_got, .load_direct, .load_tlv => src: { | 9374 | .memory, .load_symbol, .load_got, .load_direct, .load_tlv => src: { |
| 9375 | switch (resolved_src_mcv) { | 9375 | switch (resolved_src_mcv) { |
| 9376 | .memory => |addr| if (math.cast(i32, @as(i64, @bitCast(addr))) != null and | 9376 | .memory => |addr| if (math.cast(i32, @as(i64, @bitCast(addr))) != null and |
| 9377 | math.cast(i32, @as(i64, @bitCast(addr)) + abi_size - limb_abi_size) != null) | 9377 | math.cast(i32, @as(i64, @bitCast(addr)) + abi_size - limb_abi_size) != null) |
| 9378 | break :src null, | 9378 | break :src null, |
| 9379 | .load_memory, .load_got, .load_direct, .load_tlv => {}, | 9379 | .load_symbol, .load_got, .load_direct, .load_tlv => {}, |
| 9380 | else => unreachable, | 9380 | else => unreachable, |
| 9381 | } | 9381 | } |
| 9382 | | 9382 | |
| ... | @@ -9418,7 +9418,7 @@ fn genBinOpMir( | ... | @@ -9418,7 +9418,7 @@ fn genBinOpMir( |
| 9418 | Memory.PtrSize.fromSize(limb_abi_size), | 9418 | Memory.PtrSize.fromSize(limb_abi_size), |
| 9419 | switch (dst_mcv) { | 9419 | switch (dst_mcv) { |
| 9420 | .memory, | 9420 | .memory, |
| 9421 | .load_memory, | 9421 | .load_symbol, |
| 9422 | .load_got, | 9422 | .load_got, |
| 9423 | .load_direct, | 9423 | .load_direct, |
| 9424 | .load_tlv, | 9424 | .load_tlv, |
| ... | @@ -9500,8 +9500,8 @@ fn genBinOpMir( | ... | @@ -9500,8 +9500,8 @@ fn genBinOpMir( |
| 9500 | .eflags, | 9500 | .eflags, |
| 9501 | .memory, | 9501 | .memory, |
| 9502 | .indirect, | 9502 | .indirect, |
| 9503 | .load_memory, | 9503 | .load_symbol, |
| 9504 | .lea_memory, | 9504 | .lea_symbol, |
| 9505 | .load_direct, | 9505 | .load_direct, |
| 9506 | .lea_direct, | 9506 | .lea_direct, |
| 9507 | .load_got, | 9507 | .load_got, |
| ... | @@ -9519,7 +9519,7 @@ fn genBinOpMir( | ... | @@ -9519,7 +9519,7 @@ fn genBinOpMir( |
| 9519 | }, | 9519 | }, |
| 9520 | .eflags, | 9520 | .eflags, |
| 9521 | .register_offset, | 9521 | .register_offset, |
| 9522 | .lea_memory, | 9522 | .lea_symbol, |
| 9523 | .lea_direct, | 9523 | .lea_direct, |
| 9524 | .lea_got, | 9524 | .lea_got, |
| 9525 | .lea_tlv, | 9525 | .lea_tlv, |
| ... | @@ -9570,7 +9570,7 @@ fn genIntMulComplexOpMir(self: *Self, dst_ty: Type, dst_mcv: MCValue, src_mcv: M | ... | @@ -9570,7 +9570,7 @@ fn genIntMulComplexOpMir(self: *Self, dst_ty: Type, dst_mcv: MCValue, src_mcv: M |
| 9570 | .eflags, | 9570 | .eflags, |
| 9571 | .register_offset, | 9571 | .register_offset, |
| 9572 | .register_overflow, | 9572 | .register_overflow, |
| 9573 | .lea_memory, | 9573 | .lea_symbol, |
| 9574 | .lea_direct, | 9574 | .lea_direct, |
| 9575 | .lea_got, | 9575 | .lea_got, |
| 9576 | .lea_tlv, | 9576 | .lea_tlv, |
| ... | @@ -9617,8 +9617,8 @@ fn genIntMulComplexOpMir(self: *Self, dst_ty: Type, dst_mcv: MCValue, src_mcv: M | ... | @@ -9617,8 +9617,8 @@ fn genIntMulComplexOpMir(self: *Self, dst_ty: Type, dst_mcv: MCValue, src_mcv: M |
| 9617 | }, | 9617 | }, |
| 9618 | .register_offset, | 9618 | .register_offset, |
| 9619 | .eflags, | 9619 | .eflags, |
| 9620 | .load_memory, | 9620 | .load_symbol, |
| 9621 | .lea_memory, | 9621 | .lea_symbol, |
| 9622 | .load_direct, | 9622 | .load_direct, |
| 9623 | .lea_direct, | 9623 | .lea_direct, |
| 9624 | .load_got, | 9624 | .load_got, |
| ... | @@ -9661,7 +9661,7 @@ fn genIntMulComplexOpMir(self: *Self, dst_ty: Type, dst_mcv: MCValue, src_mcv: M | ... | @@ -9661,7 +9661,7 @@ fn genIntMulComplexOpMir(self: *Self, dst_ty: Type, dst_mcv: MCValue, src_mcv: M |
| 9661 | } | 9661 | } |
| 9662 | }, | 9662 | }, |
| 9663 | .register_pair => unreachable, // unimplemented | 9663 | .register_pair => unreachable, // unimplemented |
| 9664 | .memory, .indirect, .load_memory, .load_direct, .load_got, .load_tlv, .load_frame => { | 9664 | .memory, .indirect, .load_symbol, .load_direct, .load_got, .load_tlv, .load_frame => { |
| 9665 | const tmp_reg = try self.copyToTmpRegister(dst_ty, dst_mcv); | 9665 | const tmp_reg = try self.copyToTmpRegister(dst_ty, dst_mcv); |
| 9666 | const tmp_mcv = MCValue{ .register = tmp_reg }; | 9666 | const tmp_mcv = MCValue{ .register = tmp_reg }; |
| 9667 | const tmp_lock = self.register_manager.lockRegAssumeUnused(tmp_reg); | 9667 | const tmp_lock = self.register_manager.lockRegAssumeUnused(tmp_reg); |
| ... | @@ -9761,7 +9761,7 @@ fn genVarDbgInfo( | ... | @@ -9761,7 +9761,7 @@ fn genVarDbgInfo( |
| 9761 | // .offset = -off, | 9761 | // .offset = -off, |
| 9762 | //} }, | 9762 | //} }, |
| 9763 | .memory => |address| .{ .memory = address }, | 9763 | .memory => |address| .{ .memory = address }, |
| 9764 | .load_memory => |sym_index| .{ .linker_load = .{ .type = .direct, .sym_index = sym_index } }, // TODO | 9764 | .load_symbol => |sym_index| .{ .linker_load = .{ .type = .direct, .sym_index = sym_index } }, // TODO |
| 9765 | .load_got => |sym_index| .{ .linker_load = .{ .type = .got, .sym_index = sym_index } }, | 9765 | .load_got => |sym_index| .{ .linker_load = .{ .type = .got, .sym_index = sym_index } }, |
| 9766 | .load_direct => |sym_index| .{ .linker_load = .{ .type = .direct, .sym_index = sym_index } }, | 9766 | .load_direct => |sym_index| .{ .linker_load = .{ .type = .direct, .sym_index = sym_index } }, |
| 9767 | .immediate => |x| .{ .immediate = x }, | 9767 | .immediate => |x| .{ .immediate = x }, |
| ... | @@ -10013,7 +10013,7 @@ fn genCall(self: *Self, info: union(enum) { | ... | @@ -10013,7 +10013,7 @@ fn genCall(self: *Self, info: union(enum) { |
| 10013 | const sym = elf_file.symbol(sym_index); | 10013 | const sym = elf_file.symbol(sym_index); |
| 10014 | _ = try sym.getOrCreateZigGotEntry(sym_index, elf_file); | 10014 | _ = try sym.getOrCreateZigGotEntry(sym_index, elf_file); |
| 10015 | if (self.bin_file.options.pic) { | 10015 | if (self.bin_file.options.pic) { |
| 10016 | try self.genSetReg(.rax, Type.usize, .{ .lea_memory = sym.esym_index }); | 10016 | try self.genSetReg(.rax, Type.usize, .{ .lea_symbol = sym.esym_index }); |
| 10017 | try self.asmRegister(.{ ._, .call }, .rax); | 10017 | try self.asmRegister(.{ ._, .call }, .rax); |
| 10018 | } else { | 10018 | } else { |
| 10019 | _ = try self.addInst(.{ | 10019 | _ = try self.addInst(.{ |
| ... | @@ -10245,12 +10245,12 @@ fn airCmp(self: *Self, inst: Air.Inst.Index, op: math.CompareOperator) !void { | ... | @@ -10245,12 +10245,12 @@ fn airCmp(self: *Self, inst: Air.Inst.Index, op: math.CompareOperator) !void { |
| 10245 | .lea_got, | 10245 | .lea_got, |
| 10246 | .lea_tlv, | 10246 | .lea_tlv, |
| 10247 | .lea_frame, | 10247 | .lea_frame, |
| 10248 | .lea_memory, | 10248 | .lea_symbol, |
| 10249 | .reserved_frame, | 10249 | .reserved_frame, |
| 10250 | .air_ref, | 10250 | .air_ref, |
| 10251 | => unreachable, | 10251 | => unreachable, |
| 10252 | .register_pair, .load_frame => null, | 10252 | .register_pair, .load_frame => null, |
| 10253 | .memory, .load_memory, .load_got, .load_direct, .load_tlv => dst: { | 10253 | .memory, .load_symbol, .load_got, .load_direct, .load_tlv => dst: { |
| 10254 | switch (resolved_dst_mcv) { | 10254 | switch (resolved_dst_mcv) { |
| 10255 | .memory => |addr| if (math.cast( | 10255 | .memory => |addr| if (math.cast( |
| 10256 | i32, | 10256 | i32, |
| ... | @@ -10259,7 +10259,7 @@ fn airCmp(self: *Self, inst: Air.Inst.Index, op: math.CompareOperator) !void { | ... | @@ -10259,7 +10259,7 @@ fn airCmp(self: *Self, inst: Air.Inst.Index, op: math.CompareOperator) !void { |
| 10259 | i32, | 10259 | i32, |
| 10260 | @as(i64, @bitCast(addr)) + abi_size - 8, | 10260 | @as(i64, @bitCast(addr)) + abi_size - 8, |
| 10261 | ) != null) break :dst null, | 10261 | ) != null) break :dst null, |
| 10262 | .load_memory, .load_got, .load_direct, .load_tlv => {}, | 10262 | .load_symbol, .load_got, .load_direct, .load_tlv => {}, |
| 10263 | else => unreachable, | 10263 | else => unreachable, |
| 10264 | } | 10264 | } |
| 10265 | | 10265 | |
| ... | @@ -10300,7 +10300,7 @@ fn airCmp(self: *Self, inst: Air.Inst.Index, op: math.CompareOperator) !void { | ... | @@ -10300,7 +10300,7 @@ fn airCmp(self: *Self, inst: Air.Inst.Index, op: math.CompareOperator) !void { |
| 10300 | .register_offset, | 10300 | .register_offset, |
| 10301 | .register_overflow, | 10301 | .register_overflow, |
| 10302 | .indirect, | 10302 | .indirect, |
| 10303 | .lea_memory, | 10303 | .lea_symbol, |
| 10304 | .lea_direct, | 10304 | .lea_direct, |
| 10305 | .lea_got, | 10305 | .lea_got, |
| 10306 | .lea_tlv, | 10306 | .lea_tlv, |
| ... | @@ -10309,7 +10309,7 @@ fn airCmp(self: *Self, inst: Air.Inst.Index, op: math.CompareOperator) !void { | ... | @@ -10309,7 +10309,7 @@ fn airCmp(self: *Self, inst: Air.Inst.Index, op: math.CompareOperator) !void { |
| 10309 | .air_ref, | 10309 | .air_ref, |
| 10310 | => unreachable, | 10310 | => unreachable, |
| 10311 | .register_pair, .load_frame => null, | 10311 | .register_pair, .load_frame => null, |
| 10312 | .memory, .load_memory, .load_got, .load_direct, .load_tlv => src: { | 10312 | .memory, .load_symbol, .load_got, .load_direct, .load_tlv => src: { |
| 10313 | switch (resolved_src_mcv) { | 10313 | switch (resolved_src_mcv) { |
| 10314 | .memory => |addr| if (math.cast( | 10314 | .memory => |addr| if (math.cast( |
| 10315 | i32, | 10315 | i32, |
| ... | @@ -10318,7 +10318,7 @@ fn airCmp(self: *Self, inst: Air.Inst.Index, op: math.CompareOperator) !void { | ... | @@ -10318,7 +10318,7 @@ fn airCmp(self: *Self, inst: Air.Inst.Index, op: math.CompareOperator) !void { |
| 10318 | i32, | 10318 | i32, |
| 10319 | @as(i64, @bitCast(addr)) + abi_size - 8, | 10319 | @as(i64, @bitCast(addr)) + abi_size - 8, |
| 10320 | ) != null) break :src null, | 10320 | ) != null) break :src null, |
| 10321 | .load_memory, .load_got, .load_direct, .load_tlv => {}, | 10321 | .load_symbol, .load_got, .load_direct, .load_tlv => {}, |
| 10322 | else => unreachable, | 10322 | else => unreachable, |
| 10323 | } | 10323 | } |
| 10324 | | 10324 | |
| ... | @@ -10743,7 +10743,7 @@ fn isNull(self: *Self, inst: Air.Inst.Index, opt_ty: Type, opt_mcv: MCValue) !MC | ... | @@ -10743,7 +10743,7 @@ fn isNull(self: *Self, inst: Air.Inst.Index, opt_ty: Type, opt_mcv: MCValue) !MC |
| 10743 | .lea_got, | 10743 | .lea_got, |
| 10744 | .lea_tlv, | 10744 | .lea_tlv, |
| 10745 | .lea_frame, | 10745 | .lea_frame, |
| 10746 | .lea_memory, | 10746 | .lea_symbol, |
| 10747 | .reserved_frame, | 10747 | .reserved_frame, |
| 10748 | .air_ref, | 10748 | .air_ref, |
| 10749 | => unreachable, | 10749 | => unreachable, |
| ... | @@ -10767,7 +10767,7 @@ fn isNull(self: *Self, inst: Air.Inst.Index, opt_ty: Type, opt_mcv: MCValue) !MC | ... | @@ -10767,7 +10767,7 @@ fn isNull(self: *Self, inst: Air.Inst.Index, opt_ty: Type, opt_mcv: MCValue) !MC |
| 10767 | }, | 10767 | }, |
| 10768 | | 10768 | |
| 10769 | .memory, | 10769 | .memory, |
| 10770 | .load_memory, | 10770 | .load_symbol, |
| 10771 | .load_got, | 10771 | .load_got, |
| 10772 | .load_direct, | 10772 | .load_direct, |
| 10773 | .load_tlv, | 10773 | .load_tlv, |
| ... | @@ -11365,7 +11365,7 @@ fn airAsm(self: *Self, inst: Air.Inst.Index) !void { | ... | @@ -11365,7 +11365,7 @@ fn airAsm(self: *Self, inst: Air.Inst.Index) !void { |
| 11365 | .memory => |addr| if (math.cast(i32, @as(i64, @bitCast(addr)))) |_| | 11365 | .memory => |addr| if (math.cast(i32, @as(i64, @bitCast(addr)))) |_| |
| 11366 | break :arg input_mcv, | 11366 | break :arg input_mcv, |
| 11367 | .indirect, .load_frame => break :arg input_mcv, | 11367 | .indirect, .load_frame => break :arg input_mcv, |
| 11368 | .load_memory, .load_direct, .load_got, .load_tlv => {}, | 11368 | .load_symbol, .load_direct, .load_got, .load_tlv => {}, |
| 11369 | else => { | 11369 | else => { |
| 11370 | const temp_mcv = try self.allocTempRegOrMem(ty, false); | 11370 | const temp_mcv = try self.allocTempRegOrMem(ty, false); |
| 11371 | try self.genCopy(ty, temp_mcv, input_mcv); | 11371 | try self.genCopy(ty, temp_mcv, input_mcv); |
| ... | @@ -11627,8 +11627,8 @@ fn airAsm(self: *Self, inst: Air.Inst.Index) !void { | ... | @@ -11627,8 +11627,8 @@ fn airAsm(self: *Self, inst: Air.Inst.Index) !void { |
| 11627 | .{ .reg = try self.copyToTmpRegister(Type.usize, .{ .lea_got = sym_index }) } | 11627 | .{ .reg = try self.copyToTmpRegister(Type.usize, .{ .lea_got = sym_index }) } |
| 11628 | else | 11628 | else |
| 11629 | return self.fail("invalid modifier: '{s}'", .{modifier}), | 11629 | return self.fail("invalid modifier: '{s}'", .{modifier}), |
| 11630 | .lea_memory => |sym_index| if (mem.eql(u8, modifier, "P")) | 11630 | .lea_symbol => |sym_index| if (mem.eql(u8, modifier, "P")) |
| 11631 | .{ .reg = try self.copyToTmpRegister(Type.usize, .{ .lea_memory = sym_index }) } | 11631 | .{ .reg = try self.copyToTmpRegister(Type.usize, .{ .lea_symbol = sym_index }) } |
| 11632 | else | 11632 | else |
| 11633 | return self.fail("invalid modifier: '{s}'", .{modifier}), | 11633 | return self.fail("invalid modifier: '{s}'", .{modifier}), |
| 11634 | else => return self.fail("invalid constraint: '{s}'", .{op_str}), | 11634 | else => return self.fail("invalid constraint: '{s}'", .{op_str}), |
| ... | @@ -12186,7 +12186,7 @@ fn genCopy(self: *Self, ty: Type, dst_mcv: MCValue, src_mcv: MCValue) InnerError | ... | @@ -12186,7 +12186,7 @@ fn genCopy(self: *Self, ty: Type, dst_mcv: MCValue, src_mcv: MCValue) InnerError |
| 12186 | .lea_got, | 12186 | .lea_got, |
| 12187 | .lea_tlv, | 12187 | .lea_tlv, |
| 12188 | .lea_frame, | 12188 | .lea_frame, |
| 12189 | .lea_memory, | 12189 | .lea_symbol, |
| 12190 | .reserved_frame, | 12190 | .reserved_frame, |
| 12191 | .air_ref, | 12191 | .air_ref, |
| 12192 | => unreachable, // unmodifiable destination | 12192 | => unreachable, // unmodifiable destination |
| ... | @@ -12242,7 +12242,7 @@ fn genCopy(self: *Self, ty: Type, dst_mcv: MCValue, src_mcv: MCValue) InnerError | ... | @@ -12242,7 +12242,7 @@ fn genCopy(self: *Self, ty: Type, dst_mcv: MCValue, src_mcv: MCValue) InnerError |
| 12242 | class_ty, | 12242 | class_ty, |
| 12243 | .{ .register = src_regs[dst_reg_i] }, | 12243 | .{ .register = src_regs[dst_reg_i] }, |
| 12244 | ), | 12244 | ), |
| 12245 | .load_memory => { | 12245 | .load_symbol => { |
| 12246 | const addr_reg = try self.copyToTmpRegister(Type.usize, src_mcv.address()); | 12246 | const addr_reg = try self.copyToTmpRegister(Type.usize, src_mcv.address()); |
| 12247 | const addr_lock = self.register_manager.lockRegAssumeUnused(addr_reg); | 12247 | const addr_lock = self.register_manager.lockRegAssumeUnused(addr_reg); |
| 12248 | defer self.register_manager.unlockReg(addr_lock); | 12248 | defer self.register_manager.unlockReg(addr_lock); |
| ... | @@ -12263,11 +12263,11 @@ fn genCopy(self: *Self, ty: Type, dst_mcv: MCValue, src_mcv: MCValue) InnerError | ... | @@ -12263,11 +12263,11 @@ fn genCopy(self: *Self, ty: Type, dst_mcv: MCValue, src_mcv: MCValue) InnerError |
| 12263 | } | 12263 | } |
| 12264 | }, | 12264 | }, |
| 12265 | .indirect => |reg_off| try self.genSetMem(.{ .reg = reg_off.reg }, reg_off.off, ty, src_mcv), | 12265 | .indirect => |reg_off| try self.genSetMem(.{ .reg = reg_off.reg }, reg_off.off, ty, src_mcv), |
| 12266 | .memory, .load_memory, .load_direct, .load_got, .load_tlv => { | 12266 | .memory, .load_symbol, .load_direct, .load_got, .load_tlv => { |
| 12267 | switch (dst_mcv) { | 12267 | switch (dst_mcv) { |
| 12268 | .memory => |addr| if (math.cast(i32, @as(i64, @bitCast(addr)))) |small_addr| | 12268 | .memory => |addr| if (math.cast(i32, @as(i64, @bitCast(addr)))) |small_addr| |
| 12269 | return self.genSetMem(.{ .reg = .ds }, small_addr, ty, src_mcv), | 12269 | return self.genSetMem(.{ .reg = .ds }, small_addr, ty, src_mcv), |
| 12270 | .load_memory, .load_direct, .load_got, .load_tlv => {}, | 12270 | .load_symbol, .load_direct, .load_got, .load_tlv => {}, |
| 12271 | else => unreachable, | 12271 | else => unreachable, |
| 12272 | } | 12272 | } |
| 12273 | | 12273 | |
| ... | @@ -12443,7 +12443,7 @@ fn genSetReg(self: *Self, dst_reg: Register, ty: Type, src_mcv: MCValue) InnerEr | ... | @@ -12443,7 +12443,7 @@ fn genSetReg(self: *Self, dst_reg: Register, ty: Type, src_mcv: MCValue) InnerEr |
| 12443 | else => unreachable, | 12443 | else => unreachable, |
| 12444 | }, | 12444 | }, |
| 12445 | )), | 12445 | )), |
| 12446 | .memory, .load_memory, .load_direct, .load_got, .load_tlv => { | 12446 | .memory, .load_symbol, .load_direct, .load_got, .load_tlv => { |
| 12447 | switch (src_mcv) { | 12447 | switch (src_mcv) { |
| 12448 | .memory => |addr| if (math.cast(i32, @as(i64, @bitCast(addr)))) |small_addr| | 12448 | .memory => |addr| if (math.cast(i32, @as(i64, @bitCast(addr)))) |small_addr| |
| 12449 | return (try self.moveStrategy( | 12449 | return (try self.moveStrategy( |
| ... | @@ -12473,7 +12473,7 @@ fn genSetReg(self: *Self, dst_reg: Register, ty: Type, src_mcv: MCValue) InnerEr | ... | @@ -12473,7 +12473,7 @@ fn genSetReg(self: *Self, dst_reg: Register, ty: Type, src_mcv: MCValue) InnerEr |
| 12473 | .segment, .mmx => unreachable, | 12473 | .segment, .mmx => unreachable, |
| 12474 | .x87, .sse => {}, | 12474 | .x87, .sse => {}, |
| 12475 | }, | 12475 | }, |
| 12476 | .load_memory, .load_got, .load_tlv => {}, | 12476 | .load_symbol, .load_got, .load_tlv => {}, |
| 12477 | else => unreachable, | 12477 | else => unreachable, |
| 12478 | } | 12478 | } |
| 12479 | | 12479 | |
| ... | @@ -12487,7 +12487,7 @@ fn genSetReg(self: *Self, dst_reg: Register, ty: Type, src_mcv: MCValue) InnerEr | ... | @@ -12487,7 +12487,7 @@ fn genSetReg(self: *Self, dst_reg: Register, ty: Type, src_mcv: MCValue) InnerEr |
| 12487 | Memory.sib(Memory.PtrSize.fromSize(abi_size), .{ .base = .{ .reg = addr_reg } }), | 12487 | Memory.sib(Memory.PtrSize.fromSize(abi_size), .{ .base = .{ .reg = addr_reg } }), |
| 12488 | ); | 12488 | ); |
| 12489 | }, | 12489 | }, |
| 12490 | .lea_memory, .lea_direct, .lea_got => |sym_index| { | 12490 | .lea_symbol, .lea_direct, .lea_got => |sym_index| { |
| 12491 | const atom_index = try self.owner.getSymbolIndex(self); | 12491 | const atom_index = try self.owner.getSymbolIndex(self); |
| 12492 | if (self.bin_file.cast(link.File.Elf)) |elf_file| { | 12492 | if (self.bin_file.cast(link.File.Elf)) |elf_file| { |
| 12493 | const sym = elf_file.symbol(elf_file.zigModulePtr().symbol(sym_index)); | 12493 | const sym = elf_file.symbol(elf_file.zigModulePtr().symbol(sym_index)); |
| ... | @@ -12675,8 +12675,8 @@ fn genSetMem(self: *Self, base: Memory.Base, disp: i32, ty: Type, src_mcv: MCVal | ... | @@ -12675,8 +12675,8 @@ fn genSetMem(self: *Self, base: Memory.Base, disp: i32, ty: Type, src_mcv: MCVal |
| 12675 | .lea_tlv, | 12675 | .lea_tlv, |
| 12676 | .load_frame, | 12676 | .load_frame, |
| 12677 | .lea_frame, | 12677 | .lea_frame, |
| 12678 | .load_memory, | 12678 | .load_symbol, |
| 12679 | .lea_memory, | 12679 | .lea_symbol, |
| 12680 | => switch (abi_size) { | 12680 | => switch (abi_size) { |
| 12681 | 0 => {}, | 12681 | 0 => {}, |
| 12682 | 1, 2, 4, 8 => { | 12682 | 1, 2, 4, 8 => { |
| ... | @@ -12767,8 +12767,8 @@ fn genLazySymbolRef( | ... | @@ -12767,8 +12767,8 @@ fn genLazySymbolRef( |
| 12767 | | 12767 | |
| 12768 | if (self.bin_file.options.pic) { | 12768 | if (self.bin_file.options.pic) { |
| 12769 | switch (tag) { | 12769 | switch (tag) { |
| 12770 | .lea, .call => try self.genSetReg(reg, Type.usize, .{ .lea_memory = sym.esym_index }), | 12770 | .lea, .call => try self.genSetReg(reg, Type.usize, .{ .lea_symbol = sym.esym_index }), |
| 12771 | .mov => try self.genSetReg(reg, Type.usize, .{ .load_memory = sym.esym_index }), | 12771 | .mov => try self.genSetReg(reg, Type.usize, .{ .load_symbol = sym.esym_index }), |
| 12772 | else => unreachable, | 12772 | else => unreachable, |
| 12773 | } | 12773 | } |
| 12774 | switch (tag) { | 12774 | switch (tag) { |
| ... | @@ -14742,8 +14742,8 @@ fn genTypedValue(self: *Self, arg_tv: TypedValue) InnerError!MCValue { | ... | @@ -14742,8 +14742,8 @@ fn genTypedValue(self: *Self, arg_tv: TypedValue) InnerError!MCValue { |
| 14742 | .undef => .undef, | 14742 | .undef => .undef, |
| 14743 | .immediate => |imm| .{ .immediate = imm }, | 14743 | .immediate => |imm| .{ .immediate = imm }, |
| 14744 | .memory => |addr| .{ .memory = addr }, | 14744 | .memory => |addr| .{ .memory = addr }, |
| 14745 | .load_memory => |sym_index| .{ .load_memory = sym_index }, | 14745 | .load_symbol => |sym_index| .{ .load_symbol = sym_index }, |
| 14746 | .lea_memory => |sym_index| .{ .lea_memory = sym_index }, | 14746 | .lea_symbol => |sym_index| .{ .lea_symbol = sym_index }, |
| 14747 | .load_direct => |sym_index| .{ .load_direct = sym_index }, | 14747 | .load_direct => |sym_index| .{ .load_direct = sym_index }, |
| 14748 | .load_got => |sym_index| .{ .lea_got = sym_index }, | 14748 | .load_got => |sym_index| .{ .lea_got = sym_index }, |
| 14749 | .load_tlv => |sym_index| .{ .lea_tlv = sym_index }, | 14749 | .load_tlv => |sym_index| .{ .lea_tlv = sym_index }, |