| ... | ... | @@ -191920,18 +191920,15 @@ const Select = struct { |
| 191920 | 191920 | error.InvalidInstruction => { |
| 191921 | 191921 | const fixes = @tagName(mir_tag[0]); |
| 191922 | 191922 | const fixes_blank = std.mem.indexOfScalar(u8, fixes, '_').?; |
| 191923 | | return s.cg.fail( |
| 191924 | | "invalid instruction: '{s}{s}{s} {s} {s} {s} {s}'", |
| 191925 | | .{ |
| 191926 | | fixes[0..fixes_blank], |
| 191927 | | @tagName(mir_tag[1]), |
| 191928 | | fixes[fixes_blank + 1 ..], |
| 191929 | | @tagName(mir_ops[0]), |
| 191930 | | @tagName(mir_ops[1]), |
| 191931 | | @tagName(mir_ops[2]), |
| 191932 | | @tagName(mir_ops[3]), |
| 191933 | | }, |
| 191934 | | ); |
| 191923 | return s.cg.fail("invalid instruction: '{s}{s}{s} {s} {s} {s} {s}'", .{ |
| 191924 | fixes[0..fixes_blank], |
| 191925 | @tagName(mir_tag[1]), |
| 191926 | fixes[fixes_blank + 1 ..], |
| 191927 | @tagName(mir_ops[0]), |
| 191928 | @tagName(mir_ops[1]), |
| 191929 | @tagName(mir_ops[2]), |
| 191930 | @tagName(mir_ops[3]), |
| 191931 | }); |
| 191935 | 191932 | }, |
| 191936 | 191933 | else => |e| return e, |
| 191937 | 191934 | }; |
| ... | ... | @@ -194423,6 +194420,18 @@ fn select( |
| 194423 | 194420 | while (true) for (pattern.src[0..src_temps.len], src_temps) |src_pattern, *src_temp| { |
| 194424 | 194421 | if (try src_pattern.convert(src_temp, cg)) break; |
| 194425 | 194422 | } else break; |
| 194423 | var src_locks: [s_src_temps.len][2]?RegisterLock = @splat(@splat(null)); |
| 194424 | for (src_locks[0..src_temps.len], src_temps) |*locks, src_temp| { |
| 194425 | const regs: [2]Register = switch (src_temp.tracking(cg).short) { |
| 194426 | else => continue, |
| 194427 | .register => |reg| .{ reg, .none }, |
| 194428 | .register_pair => |regs| regs, |
| 194429 | }; |
| 194430 | for (regs, locks) |reg, *lock| { |
| 194431 | if (reg == .none) continue; |
| 194432 | lock.* = cg.register_manager.lockRegIndex(RegisterManager.indexOfRegIntoTracked(reg) orelse continue); |
| 194433 | } |
| 194434 | } |
| 194426 | 194435 | @memcpy(s_src_temps[0..src_temps.len], src_temps); |
| 194427 | 194436 | std.mem.swap(Temp, &s_src_temps[pattern.commute[0]], &s_src_temps[pattern.commute[1]]); |
| 194428 | 194437 | |
| ... | ... | @@ -194441,6 +194450,7 @@ fn select( |
| 194441 | 194450 | } |
| 194442 | 194451 | assert(s.top == 0); |
| 194443 | 194452 | |
| 194453 | for (src_locks) |locks| for (locks) |lock| if (lock) |reg| cg.register_manager.unlockReg(reg); |
| 194444 | 194454 | for (tmp_locks) |locks| for (locks) |lock| if (lock) |reg| cg.register_manager.unlockReg(reg); |
| 194445 | 194455 | for (dst_locks) |locks| for (locks) |lock| if (lock) |reg| cg.register_manager.unlockReg(reg); |
| 194446 | 194456 | caller_preserved: { |