mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 13:54:21 +00:00
x86_64: continue hacking around unimplemented linker logic
Closes #25666
This commit is contained in:
parent
ada9035af5
commit
52a029e503
2 changed files with 19 additions and 1 deletions
|
|
@ -179000,7 +179000,14 @@ fn genSetMem(
|
|||
.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, .lazy_sym => unreachable,
|
||||
.nav => |nav| .{ .lea_nav = nav },
|
||||
.nav => |nav| {
|
||||
// hack around linker relocation bugs
|
||||
const addr_reg = try self.copyToTmpRegister(.usize, .{ .lea_nav = nav });
|
||||
const addr_lock = self.register_manager.lockRegAssumeUnused(addr_reg);
|
||||
defer self.register_manager.unlockReg(addr_lock);
|
||||
|
||||
return self.genSetMem(.{ .reg = addr_reg }, disp, ty, src_mcv, opts);
|
||||
},
|
||||
.uav => |uav| .{ .lea_uav = uav },
|
||||
.extern_func => |extern_func| .{ .lea_extern_func = extern_func },
|
||||
};
|
||||
|
|
|
|||
|
|
@ -179,3 +179,14 @@ test "@memset with zero-length array" {
|
|||
var array: [0]usize = undefined;
|
||||
@memset(&array, 0);
|
||||
}
|
||||
|
||||
test "@memset a global array" {
|
||||
const S = struct {
|
||||
var buf: [1]u32 = .{123};
|
||||
};
|
||||
try expect(S.buf[0] == 123);
|
||||
@memset(&S.buf, 456);
|
||||
try expect(S.buf[0] == 456);
|
||||
@memset(&S.buf, S.buf[0] + 333);
|
||||
try expect(S.buf[0] == 789);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue