aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/aarch64/Select.zig
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2025-11-09 08:08:13 -0500
committerJacob Young <jacobly0@users.noreply.github.com>2025-11-11 01:47:27 -0500
commit8647e4d3110dd269f6c377ecd8315a19e094758a (patch)
tree811e663e72965826d3cfe3e812db210b7dcbf4fe /src/codegen/aarch64/Select.zig
parentcbfa87cbea0274e1e88d6a61bba82a2099e19fd6 (diff)
downloadzig-8647e4d3110dd269f6c377ecd8315a19e094758a.tar.gz
zig-8647e4d3110dd269f6c377ecd8315a19e094758a.zip
aarch64: cleanup register lock
Diffstat (limited to 'src/codegen/aarch64/Select.zig')
-rw-r--r--src/codegen/aarch64/Select.zig23
1 files changed, 9 insertions, 14 deletions
diff --git a/src/codegen/aarch64/Select.zig b/src/codegen/aarch64/Select.zig
index 4fe798271f..aa96cf9437 100644
--- a/src/codegen/aarch64/Select.zig
+++ b/src/codegen/aarch64/Select.zig
@@ -9570,11 +9570,15 @@ pub const Value = struct {
.zr
else
return false;
- if (part_ra != .zr) {
- const live_vi = isel.live_registers.getPtr(part_ra);
- assert(live_vi.* == .free);
- live_vi.* = .allocating;
- }
+ const part_lock: RegLock = switch (part_ra) {
+ else => isel.lockReg(part_ra),
+ .zr => .empty,
+ };
+ defer switch (opts.expected_live_registers.get(part_ra)) {
+ _ => {},
+ .allocating => unreachable,
+ .free => part_lock.unlock(isel),
+ };
if (opts.wrap) |int_info| switch (int_info.bits) {
else => unreachable,
1...7, 9...15, 17...31 => |bits| try isel.emit(switch (int_info.signedness) {
@@ -9605,15 +9609,6 @@ pub const Value = struct {
64 => {},
};
try isel.loadReg(part_ra, part_size, part_vi.signedness(isel), base_ra, opts.offset);
- if (part_ra != .zr) {
- const live_vi = isel.live_registers.getPtr(part_ra);
- assert(live_vi.* == .allocating);
- switch (opts.expected_live_registers.get(part_ra)) {
- _ => {},
- .allocating => unreachable,
- .free => live_vi.* = .free,
- }
- }
return true;
}
var used = false;