| ... | @@ -1421,7 +1421,7 @@ fn asmCmovccRegisterRegister(self: *CodeGen, cc: Condition, reg1: Register, reg2 | ... | @@ -1421,7 +1421,7 @@ fn asmCmovccRegisterRegister(self: *CodeGen, cc: Condition, reg1: Register, reg2 |
| 1421 | }, | 1421 | }, |
| 1422 | .data = .{ .rr = .{ | 1422 | .data = .{ .rr = .{ |
| 1423 | .fixes = switch (cc) { | 1423 | .fixes = switch (cc) { |
| 1424 | else => .fromCondition(cc), | 1424 | else => .fromCond(cc), |
| 1425 | .z_and_np, .nz_or_p => ._, | 1425 | .z_and_np, .nz_or_p => ._, |
| 1426 | }, | 1426 | }, |
| 1427 | .r1 = reg1, | 1427 | .r1 = reg1, |
| ... | @@ -1449,7 +1449,7 @@ fn asmCmovccRegisterMemory(self: *CodeGen, cc: Condition, reg: Register, m: Memo | ... | @@ -1449,7 +1449,7 @@ fn asmCmovccRegisterMemory(self: *CodeGen, cc: Condition, reg: Register, m: Memo |
| 1449 | }, | 1449 | }, |
| 1450 | .data = .{ .rx = .{ | 1450 | .data = .{ .rx = .{ |
| 1451 | .fixes = switch (cc) { | 1451 | .fixes = switch (cc) { |
| 1452 | else => .fromCondition(cc), | 1452 | else => .fromCond(cc), |
| 1453 | .z_and_np => unreachable, | 1453 | .z_and_np => unreachable, |
| 1454 | .nz_or_p => ._, | 1454 | .nz_or_p => ._, |
| 1455 | }, | 1455 | }, |
| ... | @@ -1476,7 +1476,7 @@ fn asmSetccRegister(self: *CodeGen, cc: Condition, reg: Register) !void { | ... | @@ -1476,7 +1476,7 @@ fn asmSetccRegister(self: *CodeGen, cc: Condition, reg: Register) !void { |
| 1476 | }, | 1476 | }, |
| 1477 | .data = switch (cc) { | 1477 | .data = switch (cc) { |
| 1478 | else => .{ .r = .{ | 1478 | else => .{ .r = .{ |
| 1479 | .fixes = .fromCondition(cc), | 1479 | .fixes = .fromCond(cc), |
| 1480 | .r1 = reg, | 1480 | .r1 = reg, |
| 1481 | } }, | 1481 | } }, |
| 1482 | .z_and_np, .nz_or_p => .{ .rr = .{ | 1482 | .z_and_np, .nz_or_p => .{ .rr = .{ |
| ... | @@ -1501,7 +1501,7 @@ fn asmSetccMemory(self: *CodeGen, cc: Condition, m: Memory) !void { | ... | @@ -1501,7 +1501,7 @@ fn asmSetccMemory(self: *CodeGen, cc: Condition, m: Memory) !void { |
| 1501 | }, | 1501 | }, |
| 1502 | .data = switch (cc) { | 1502 | .data = switch (cc) { |
| 1503 | else => .{ .x = .{ | 1503 | else => .{ .x = .{ |
| 1504 | .fixes = .fromCondition(cc), | 1504 | .fixes = .fromCond(cc), |
| 1505 | .payload = payload, | 1505 | .payload = payload, |
| 1506 | } }, | 1506 | } }, |
| 1507 | .z_and_np, .nz_or_p => .{ .rx = .{ | 1507 | .z_and_np, .nz_or_p => .{ .rx = .{ |
| ... | @@ -1536,7 +1536,7 @@ fn asmJccReloc(self: *CodeGen, cc: Condition, target: Mir.Inst.Index) !Mir.Inst. | ... | @@ -1536,7 +1536,7 @@ fn asmJccReloc(self: *CodeGen, cc: Condition, target: Mir.Inst.Index) !Mir.Inst. |
| 1536 | }, | 1536 | }, |
| 1537 | .data = .{ .inst = .{ | 1537 | .data = .{ .inst = .{ |
| 1538 | .fixes = switch (cc) { | 1538 | .fixes = switch (cc) { |
| 1539 | else => .fromCondition(cc), | 1539 | else => .fromCond(cc), |
| 1540 | .z_and_np, .nz_or_p => ._, | 1540 | .z_and_np, .nz_or_p => ._, |
| 1541 | }, | 1541 | }, |
| 1542 | .inst = target, | 1542 | .inst = target, |
| ... | @@ -2224,7 +2224,7 @@ fn gen(self: *CodeGen) InnerError!void { | ... | @@ -2224,7 +2224,7 @@ fn gen(self: *CodeGen) InnerError!void { |
| 2224 | else => |cc| return self.fail("{s} does not support var args", .{@tagName(cc)}), | 2224 | else => |cc| return self.fail("{s} does not support var args", .{@tagName(cc)}), |
| 2225 | }; | 2225 | }; |
| 2226 | | 2226 | |
| 2227 | try self.asmPseudo(.pseudo_dbg_prologue_end_none); | 2227 | if (self.debug_output != .none) try self.asmPseudo(.pseudo_dbg_prologue_end_none); |
| 2228 | | 2228 | |
| 2229 | try self.genBody(self.air.getMainBody()); | 2229 | try self.genBody(self.air.getMainBody()); |
| 2230 | | 2230 | |
| ... | @@ -2235,7 +2235,7 @@ fn gen(self: *CodeGen) InnerError!void { | ... | @@ -2235,7 +2235,7 @@ fn gen(self: *CodeGen) InnerError!void { |
| 2235 | break :epilogue_relocs self.epilogue_relocs.items[0..epilogue_relocs_last_index]; | 2235 | break :epilogue_relocs self.epilogue_relocs.items[0..epilogue_relocs_last_index]; |
| 2236 | } else self.epilogue_relocs.items) |epilogue_reloc| self.performReloc(epilogue_reloc); | 2236 | } else self.epilogue_relocs.items) |epilogue_reloc| self.performReloc(epilogue_reloc); |
| 2237 | | 2237 | |
| 2238 | try self.asmPseudo(.pseudo_dbg_epilogue_begin_none); | 2238 | if (self.debug_output != .none) try self.asmPseudo(.pseudo_dbg_epilogue_begin_none); |
| 2239 | const backpatch_stack_dealloc = try self.asmPlaceholder(); | 2239 | const backpatch_stack_dealloc = try self.asmPlaceholder(); |
| 2240 | const backpatch_pop_callee_preserved_regs = try self.asmPlaceholder(); | 2240 | const backpatch_pop_callee_preserved_regs = try self.asmPlaceholder(); |
| 2241 | try self.asmRegister(.{ ._, .pop }, .rbp); | 2241 | try self.asmRegister(.{ ._, .pop }, .rbp); |
| ... | @@ -2354,15 +2354,15 @@ fn gen(self: *CodeGen) InnerError!void { | ... | @@ -2354,15 +2354,15 @@ fn gen(self: *CodeGen) InnerError!void { |
| 2354 | }); | 2354 | }); |
| 2355 | } | 2355 | } |
| 2356 | } else { | 2356 | } else { |
| 2357 | try self.asmPseudo(.pseudo_dbg_prologue_end_none); | 2357 | if (self.debug_output != .none) try self.asmPseudo(.pseudo_dbg_prologue_end_none); |
| 2358 | try self.genBody(self.air.getMainBody()); | 2358 | try self.genBody(self.air.getMainBody()); |
| 2359 | try self.asmPseudo(.pseudo_dbg_epilogue_begin_none); | 2359 | if (self.debug_output != .none) try self.asmPseudo(.pseudo_dbg_epilogue_begin_none); |
| 2360 | } | 2360 | } |
| 2361 | | 2361 | |
| 2362 | // Drop them off at the rbrace. | 2362 | // Drop them off at the rbrace. |
| 2363 | _ = try self.addInst(.{ | 2363 | if (self.debug_output != .none) _ = try self.addInst(.{ |
| 2364 | .tag = .pseudo, | 2364 | .tag = .pseudo, |
| 2365 | .ops = .pseudo_dbg_line_stmt_line_column, | 2365 | .ops = .pseudo_dbg_line_line_column, |
| 2366 | .data = .{ .line_column = .{ | 2366 | .data = .{ .line_column = .{ |
| 2367 | .line = self.end_di_line, | 2367 | .line = self.end_di_line, |
| 2368 | .column = self.end_di_column, | 2368 | .column = self.end_di_column, |
| ... | @@ -2387,13 +2387,13 @@ fn checkInvariantsAfterAirInst(self: *CodeGen) void { | ... | @@ -2387,13 +2387,13 @@ fn checkInvariantsAfterAirInst(self: *CodeGen) void { |
| 2387 | } | 2387 | } |
| 2388 | | 2388 | |
| 2389 | fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | 2389 | fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2390 | try self.asmPseudo(.pseudo_dbg_enter_block_none); | 2390 | if (self.debug_output != .none) try self.asmPseudo(.pseudo_dbg_enter_block_none); |
| 2391 | try self.genBody(body); | 2391 | try self.genBody(body); |
| 2392 | try self.asmPseudo(.pseudo_dbg_leave_block_none); | 2392 | if (self.debug_output != .none) try self.asmPseudo(.pseudo_dbg_leave_block_none); |
| 2393 | } | 2393 | } |
| 2394 | | 2394 | |
| 2395 | fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | 2395 | fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2396 | @setEvalBranchQuota(3_400); | 2396 | @setEvalBranchQuota(3_900); |
| 2397 | const pt = cg.pt; | 2397 | const pt = cg.pt; |
| 2398 | const zcu = pt.zcu; | 2398 | const zcu = pt.zcu; |
| 2399 | const ip = &zcu.intern_pool; | 2399 | const ip = &zcu.intern_pool; |
| ... | @@ -2543,7 +2543,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2543,7 +2543,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2543 | .reduce_optimized => try cg.airReduce(inst), | 2543 | .reduce_optimized => try cg.airReduce(inst), |
| 2544 | .int_from_float_optimized => try cg.airIntFromFloat(inst), | 2544 | .int_from_float_optimized => try cg.airIntFromFloat(inst), |
| 2545 | | 2545 | |
| 2546 | .arg => try cg.airDbgArg(inst), | 2546 | .arg => if (cg.debug_output != .none) { |
| | 2547 | // skip zero-bit arguments as they don't have a corresponding arg instruction |
| | 2548 | var arg_index = cg.arg_index; |
| | 2549 | while (cg.args[arg_index] == .none) arg_index += 1; |
| | 2550 | cg.arg_index = arg_index + 1; |
| | 2551 | |
| | 2552 | const name = air_datas[@intFromEnum(inst)].arg.name; |
| | 2553 | if (name != .none) try cg.genLocalDebugInfo(inst, cg.getResolvedInstValue(inst).short); |
| | 2554 | if (cg.liveness.isUnused(inst)) try cg.processDeath(inst); |
| | 2555 | |
| | 2556 | for (cg.args[arg_index + 1 ..]) |arg| { |
| | 2557 | if (arg != .none) break; |
| | 2558 | } else try cg.airDbgVarArgs(); |
| | 2559 | }, |
| 2547 | .ptr_add => |air_tag| if (use_old) try cg.airPtrArithmetic(inst, air_tag) else { | 2560 | .ptr_add => |air_tag| if (use_old) try cg.airPtrArithmetic(inst, air_tag) else { |
| 2548 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; | 2561 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; |
| 2549 | const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data; | 2562 | const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data; |
| ... | @@ -2792,9 +2805,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2792,9 +2805,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2792 | } | 2805 | } |
| 2793 | try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); | 2806 | try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); |
| 2794 | }, | 2807 | }, |
| 2795 | .max => |air_tag| if (use_old) try cg.airBinOp(inst, air_tag) else fallback: { | 2808 | .max => |air_tag| if (use_old) try cg.airBinOp(inst, air_tag) else { |
| 2796 | const bin_op = air_datas[@intFromEnum(inst)].bin_op; | 2809 | const bin_op = air_datas[@intFromEnum(inst)].bin_op; |
| 2797 | if (cg.typeOf(bin_op.lhs).scalarType(zcu).isRuntimeFloat()) break :fallback try cg.airBinOp(inst, air_tag); | | |
| 2798 | var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs }); | 2810 | var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs }); |
| 2799 | var res: [1]Temp = undefined; | 2811 | var res: [1]Temp = undefined; |
| 2800 | cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{ | 2812 | cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{ |
| ... | @@ -4496,7 +4508,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4496,7 +4508,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4496 | }, | 4508 | }, |
| 4497 | .extra_temps = .{ | 4509 | .extra_temps = .{ |
| 4498 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4510 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 4499 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, | 4511 | .{ .type = .vector_4_u32, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| 4500 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, | 4512 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 4501 | .unused, | 4513 | .unused, |
| 4502 | .unused, | 4514 | .unused, |
| ... | @@ -4633,7 +4645,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4633,7 +4645,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4633 | }, | 4645 | }, |
| 4634 | .extra_temps = .{ | 4646 | .extra_temps = .{ |
| 4635 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 4647 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4636 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, | 4648 | .{ .type = .vector_4_u32, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| 4637 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, | 4649 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 4638 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, | 4650 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 4639 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, | 4651 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| ... | @@ -4953,7 +4965,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4953,7 +4965,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4953 | }, | 4965 | }, |
| 4954 | .extra_temps = .{ | 4966 | .extra_temps = .{ |
| 4955 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4967 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 4956 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, | 4968 | .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| 4957 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, | 4969 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 4958 | .unused, | 4970 | .unused, |
| 4959 | .unused, | 4971 | .unused, |
| ... | @@ -4984,7 +4996,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4984,7 +4996,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4984 | }, | 4996 | }, |
| 4985 | .extra_temps = .{ | 4997 | .extra_temps = .{ |
| 4986 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4998 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 4987 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, | 4999 | .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| 4988 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, | 5000 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 4989 | .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } }, | 5001 | .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } }, |
| 4990 | .unused, | 5002 | .unused, |
| ... | @@ -5016,7 +5028,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5016,7 +5028,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5016 | }, | 5028 | }, |
| 5017 | .extra_temps = .{ | 5029 | .extra_temps = .{ |
| 5018 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 5030 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 5019 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, | 5031 | .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| 5020 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, | 5032 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| 5021 | .unused, | 5033 | .unused, |
| 5022 | .unused, | 5034 | .unused, |
| ... | @@ -5045,7 +5057,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5045,7 +5057,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5045 | }, | 5057 | }, |
| 5046 | .extra_temps = .{ | 5058 | .extra_temps = .{ |
| 5047 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 5059 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5048 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, | 5060 | .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| 5049 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, | 5061 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| 5050 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, | 5062 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| 5051 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, | 5063 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| ... | @@ -5081,7 +5093,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5081,7 +5093,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5081 | }, | 5093 | }, |
| 5082 | .extra_temps = .{ | 5094 | .extra_temps = .{ |
| 5083 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 5095 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5084 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, | 5096 | .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| 5085 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, | 5097 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 5086 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, | 5098 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 5087 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, | 5099 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| ... | @@ -5117,7 +5129,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5117,7 +5129,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5117 | }, | 5129 | }, |
| 5118 | .extra_temps = .{ | 5130 | .extra_temps = .{ |
| 5119 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 5131 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5120 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, | 5132 | .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| 5121 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, | 5133 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 5122 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, | 5134 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 5123 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, | 5135 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| ... | @@ -5359,255 +5371,173 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5359,255 +5371,173 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5359 | .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ }, | 5371 | .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ }, |
| 5360 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | 5372 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 5361 | } }, | 5373 | } }, |
| 5362 | } }) catch |err| switch (err) { | | |
| 5363 | error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{ | | |
| 5364 | @tagName(air_tag), | | |
| 5365 | cg.typeOf(bin_op.lhs).fmt(pt), | | |
| 5366 | ops[0].tracking(cg), | | |
| 5367 | ops[1].tracking(cg), | | |
| 5368 | }), | | |
| 5369 | else => |e| return e, | | |
| 5370 | }; | | |
| 5371 | try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); | | |
| 5372 | }, | | |
| 5373 | .min => |air_tag| if (use_old) try cg.airBinOp(inst, air_tag) else fallback: { | | |
| 5374 | const bin_op = air_datas[@intFromEnum(inst)].bin_op; | | |
| 5375 | if (cg.typeOf(bin_op.lhs).scalarType(zcu).isRuntimeFloat()) break :fallback try cg.airBinOp(inst, air_tag); | | |
| 5376 | var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs }); | | |
| 5377 | var res: [1]Temp = undefined; | | |
| 5378 | cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{ | | |
| 5379 | .required_features = .{ .cmov, null, null, null }, | | |
| 5380 | .src_constraints = .{ .{ .signed_int = .byte }, .{ .signed_int = .byte } }, | | |
| 5381 | .patterns = &.{ | | |
| 5382 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | | |
| 5383 | }, | | |
| 5384 | .dst_temps = .{.{ .ref = .src0 }}, | | |
| 5385 | .clobbers = .{ .eflags = true }, | | |
| 5386 | .each = .{ .once = &.{ | | |
| 5387 | .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ }, | | |
| 5388 | .{ ._, ._ge, .cmov, .dst0d, .src1d, ._, ._ }, | | |
| 5389 | } }, | | |
| 5390 | }, .{ | 5374 | }, .{ |
| 5391 | .src_constraints = .{ .{ .signed_int = .byte }, .{ .signed_int = .byte } }, | 5375 | .required_features = .{ .f16c, null, null, null }, |
| 5392 | .patterns = &.{ | 5376 | .src_constraints = .{ |
| 5393 | .{ .src = .{ .to_mut_gpr, .mem } }, | 5377 | .{ .scalar_float = .{ .of = .word, .is = .word } }, |
| 5394 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, | 5378 | .{ .scalar_float = .{ .of = .word, .is = .word } }, |
| 5395 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | | |
| 5396 | }, | 5379 | }, |
| 5397 | .dst_temps = .{.{ .ref = .src0 }}, | | |
| 5398 | .clobbers = .{ .eflags = true }, | | |
| 5399 | .each = .{ .once = &.{ | | |
| 5400 | .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ }, | | |
| 5401 | .{ ._, ._nge, .j, .@"0f", ._, ._, ._ }, | | |
| 5402 | .{ ._, ._, .mov, .dst0b, .src1b, ._, ._ }, | | |
| 5403 | } }, | | |
| 5404 | }, .{ | | |
| 5405 | .required_features = .{ .cmov, null, null, null }, | | |
| 5406 | .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte } }, | | |
| 5407 | .patterns = &.{ | 5380 | .patterns = &.{ |
| 5408 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | 5381 | .{ .src = .{ .to_sse, .to_sse } }, |
| 5409 | }, | 5382 | }, |
| 5410 | .dst_temps = .{.{ .ref = .src0 }}, | 5383 | .extra_temps = .{ |
| 5411 | .clobbers = .{ .eflags = true }, | 5384 | .{ .type = .f16, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } }, |
| 5412 | .each = .{ .once = &.{ | 5385 | .{ .type = .f16, .kind = .{ .rc = .sse } }, |
| 5413 | .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ }, | 5386 | .unused, |
| 5414 | .{ ._, ._ae, .cmov, .dst0d, .src1d, ._, ._ }, | 5387 | .unused, |
| 5415 | } }, | 5388 | .unused, |
| 5416 | }, .{ | 5389 | .unused, |
| 5417 | .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte } }, | 5390 | .unused, |
| 5418 | .patterns = &.{ | 5391 | .unused, |
| 5419 | .{ .src = .{ .to_mut_gpr, .mem } }, | 5392 | .unused, |
| 5420 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 5421 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | | |
| 5422 | }, | 5393 | }, |
| 5423 | .dst_temps = .{.{ .ref = .src0 }}, | 5394 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 5424 | .clobbers = .{ .eflags = true }, | | |
| 5425 | .each = .{ .once = &.{ | 5395 | .each = .{ .once = &.{ |
| 5426 | .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ }, | 5396 | .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, |
| 5427 | .{ ._, ._nae, .j, .@"0f", ._, ._, ._ }, | 5397 | .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ }, |
| 5428 | .{ ._, ._, .mov, .dst0b, .src1b, ._, ._ }, | 5398 | .{ ._, .v_ss, .cmp, .tmp1x, .dst0x, .dst0x, .vp(.unord) }, |
| | 5399 | .{ ._, .v_ss, .max, .dst0x, .tmp0x, .dst0x, ._ }, |
| | 5400 | .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp0x, .tmp1x }, |
| | 5401 | .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ }, |
| 5429 | } }, | 5402 | } }, |
| 5430 | }, .{ | 5403 | }, .{ |
| 5431 | .required_features = .{ .cmov, null, null, null }, | 5404 | .required_features = .{ .sse, null, null, null }, |
| 5432 | .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word } }, | 5405 | .src_constraints = .{ |
| 5433 | .patterns = &.{ | 5406 | .{ .scalar_float = .{ .of = .word, .is = .word } }, |
| 5434 | .{ .src = .{ .to_mut_gpr, .mem } }, | 5407 | .{ .scalar_float = .{ .of = .word, .is = .word } }, |
| 5435 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 5436 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | | |
| 5437 | }, | 5408 | }, |
| 5438 | .dst_temps = .{.{ .ref = .src0 }}, | | |
| 5439 | .clobbers = .{ .eflags = true }, | | |
| 5440 | .each = .{ .once = &.{ | | |
| 5441 | .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ }, | | |
| 5442 | .{ ._, ._ge, .cmov, .dst0w, .src1w, ._, ._ }, | | |
| 5443 | } }, | | |
| 5444 | }, .{ | | |
| 5445 | .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word } }, | | |
| 5446 | .patterns = &.{ | 5409 | .patterns = &.{ |
| 5447 | .{ .src = .{ .to_mut_gpr, .mem } }, | 5410 | .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } }, |
| 5448 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 5449 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | | |
| 5450 | }, | 5411 | }, |
| 5451 | .dst_temps = .{.{ .ref = .src0 }}, | 5412 | .call_frame = .{ .alignment = .@"16" }, |
| 5452 | .clobbers = .{ .eflags = true }, | 5413 | .extra_temps = .{ |
| 5453 | .each = .{ .once = &.{ | 5414 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } }, |
| 5454 | .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ }, | 5415 | .unused, |
| 5455 | .{ ._, ._nge, .j, .@"0f", ._, ._, ._ }, | 5416 | .unused, |
| 5456 | .{ ._, ._, .mov, .dst0w, .src1w, ._, ._ }, | 5417 | .unused, |
| 5457 | } }, | 5418 | .unused, |
| 5458 | }, .{ | 5419 | .unused, |
| 5459 | .required_features = .{ .cmov, null, null, null }, | 5420 | .unused, |
| 5460 | .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word } }, | 5421 | .unused, |
| 5461 | .patterns = &.{ | 5422 | .unused, |
| 5462 | .{ .src = .{ .to_mut_gpr, .mem } }, | | |
| 5463 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 5464 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | | |
| 5465 | }, | 5423 | }, |
| 5466 | .dst_temps = .{.{ .ref = .src0 }}, | 5424 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5467 | .clobbers = .{ .eflags = true }, | 5425 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 5468 | .each = .{ .once = &.{ | 5426 | .each = .{ .once = &.{ |
| 5469 | .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ }, | 5427 | .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, |
| 5470 | .{ ._, ._ae, .cmov, .dst0w, .src1w, ._, ._ }, | | |
| 5471 | } }, | 5428 | } }, |
| 5472 | }, .{ | 5429 | }, .{ |
| 5473 | .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word } }, | 5430 | .required_features = .{ .f16c, null, null, null }, |
| 5474 | .patterns = &.{ | 5431 | .src_constraints = .{ |
| 5475 | .{ .src = .{ .to_mut_gpr, .mem } }, | 5432 | .{ .scalar_float = .{ .of = .qword, .is = .word } }, |
| 5476 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, | 5433 | .{ .scalar_float = .{ .of = .qword, .is = .word } }, |
| 5477 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | | |
| 5478 | }, | 5434 | }, |
| 5479 | .dst_temps = .{.{ .ref = .src0 }}, | | |
| 5480 | .clobbers = .{ .eflags = true }, | | |
| 5481 | .each = .{ .once = &.{ | | |
| 5482 | .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ }, | | |
| 5483 | .{ ._, ._nae, .j, .@"0f", ._, ._, ._ }, | | |
| 5484 | .{ ._, ._, .mov, .dst0w, .src1w, ._, ._ }, | | |
| 5485 | } }, | | |
| 5486 | }, .{ | | |
| 5487 | .required_features = .{ .cmov, null, null, null }, | | |
| 5488 | .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword } }, | | |
| 5489 | .patterns = &.{ | 5435 | .patterns = &.{ |
| 5490 | .{ .src = .{ .to_mut_gpr, .mem } }, | 5436 | .{ .src = .{ .mem, .mem } }, |
| 5491 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, | 5437 | .{ .src = .{ .to_sse, .mem } }, |
| 5492 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | 5438 | .{ .src = .{ .mem, .to_sse } }, |
| | 5439 | .{ .src = .{ .to_sse, .to_sse } }, |
| 5493 | }, | 5440 | }, |
| 5494 | .dst_temps = .{.{ .ref = .src0 }}, | 5441 | .extra_temps = .{ |
| 5495 | .clobbers = .{ .eflags = true }, | 5442 | .{ .type = .vector_4_f16, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } }, |
| 5496 | .each = .{ .once = &.{ | 5443 | .{ .type = .vector_4_f16, .kind = .{ .rc = .sse } }, |
| 5497 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, | 5444 | .unused, |
| 5498 | .{ ._, ._ge, .cmov, .dst0d, .src1d, ._, ._ }, | 5445 | .unused, |
| 5499 | } }, | 5446 | .unused, |
| 5500 | }, .{ | 5447 | .unused, |
| 5501 | .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword } }, | 5448 | .unused, |
| 5502 | .patterns = &.{ | 5449 | .unused, |
| 5503 | .{ .src = .{ .to_mut_gpr, .mem } }, | 5450 | .unused, |
| 5504 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 5505 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | | |
| 5506 | }, | 5451 | }, |
| 5507 | .dst_temps = .{.{ .ref = .src0 }}, | 5452 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 5508 | .clobbers = .{ .eflags = true }, | | |
| 5509 | .each = .{ .once = &.{ | 5453 | .each = .{ .once = &.{ |
| 5510 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, | 5454 | .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, |
| 5511 | .{ ._, ._nge, .j, .@"0f", ._, ._, ._ }, | 5455 | .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ }, |
| 5512 | .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ }, | 5456 | .{ ._, .v_ps, .cmp, .tmp1x, .dst0x, .dst0x, .vp(.unord) }, |
| | 5457 | .{ ._, .v_ps, .max, .dst0x, .tmp0x, .dst0x, ._ }, |
| | 5458 | .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp0x, .tmp1x }, |
| | 5459 | .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ }, |
| 5513 | } }, | 5460 | } }, |
| 5514 | }, .{ | 5461 | }, .{ |
| 5515 | .required_features = .{ .cmov, null, null, null }, | 5462 | .required_features = .{ .f16c, null, null, null }, |
| 5516 | .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword } }, | 5463 | .src_constraints = .{ |
| 5517 | .patterns = &.{ | 5464 | .{ .scalar_float = .{ .of = .xword, .is = .word } }, |
| 5518 | .{ .src = .{ .to_mut_gpr, .mem } }, | 5465 | .{ .scalar_float = .{ .of = .xword, .is = .word } }, |
| 5519 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 5520 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | | |
| 5521 | }, | 5466 | }, |
| 5522 | .dst_temps = .{.{ .ref = .src0 }}, | | |
| 5523 | .clobbers = .{ .eflags = true }, | | |
| 5524 | .each = .{ .once = &.{ | | |
| 5525 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, | | |
| 5526 | .{ ._, ._ae, .cmov, .dst0d, .src1d, ._, ._ }, | | |
| 5527 | } }, | | |
| 5528 | }, .{ | | |
| 5529 | .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword } }, | | |
| 5530 | .patterns = &.{ | 5467 | .patterns = &.{ |
| 5531 | .{ .src = .{ .to_mut_gpr, .mem } }, | 5468 | .{ .src = .{ .mem, .mem } }, |
| 5532 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, | 5469 | .{ .src = .{ .to_sse, .mem } }, |
| 5533 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | 5470 | .{ .src = .{ .mem, .to_sse } }, |
| | 5471 | .{ .src = .{ .to_sse, .to_sse } }, |
| 5534 | }, | 5472 | }, |
| 5535 | .dst_temps = .{.{ .ref = .src0 }}, | 5473 | .extra_temps = .{ |
| 5536 | .clobbers = .{ .eflags = true }, | 5474 | .{ .type = .vector_8_f16, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } }, |
| 5537 | .each = .{ .once = &.{ | 5475 | .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } }, |
| 5538 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, | 5476 | .unused, |
| 5539 | .{ ._, ._nae, .j, .@"0f", ._, ._, ._ }, | 5477 | .unused, |
| 5540 | .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ }, | 5478 | .unused, |
| 5541 | } }, | 5479 | .unused, |
| 5542 | }, .{ | 5480 | .unused, |
| 5543 | .required_features = .{ .@"64bit", .cmov, null, null }, | 5481 | .unused, |
| 5544 | .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword } }, | 5482 | .unused, |
| 5545 | .patterns = &.{ | | |
| 5546 | .{ .src = .{ .to_mut_gpr, .mem } }, | | |
| 5547 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 5548 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | | |
| 5549 | }, | 5483 | }, |
| 5550 | .dst_temps = .{.{ .ref = .src0 }}, | 5484 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 5551 | .clobbers = .{ .eflags = true }, | | |
| 5552 | .each = .{ .once = &.{ | 5485 | .each = .{ .once = &.{ |
| 5553 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, | 5486 | .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ }, |
| 5554 | .{ ._, ._ge, .cmov, .dst0q, .src1q, ._, ._ }, | 5487 | .{ ._, .v_ps, .cvtph2, .tmp0y, .src1x, ._, ._ }, |
| | 5488 | .{ ._, .v_ps, .cmp, .tmp1y, .dst0y, .dst0y, .vp(.unord) }, |
| | 5489 | .{ ._, .v_ps, .max, .dst0y, .tmp0y, .dst0y, ._ }, |
| | 5490 | .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .tmp0y, .tmp1y }, |
| | 5491 | .{ ._, .v_, .cvtps2ph, .dst0q, .dst0y, .rm(.{}), ._ }, |
| 5555 | } }, | 5492 | } }, |
| 5556 | }, .{ | 5493 | }, .{ |
| 5557 | .required_features = .{ .@"64bit", null, null, null }, | 5494 | .required_features = .{ .f16c, null, null, null }, |
| 5558 | .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword } }, | 5495 | .src_constraints = .{ |
| 5559 | .patterns = &.{ | 5496 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, |
| 5560 | .{ .src = .{ .to_mut_gpr, .mem } }, | 5497 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, |
| 5561 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 5562 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | | |
| 5563 | }, | 5498 | }, |
| 5564 | .dst_temps = .{.{ .ref = .src0 }}, | | |
| 5565 | .clobbers = .{ .eflags = true }, | | |
| 5566 | .each = .{ .once = &.{ | | |
| 5567 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, | | |
| 5568 | .{ ._, ._nge, .j, .@"0f", ._, ._, ._ }, | | |
| 5569 | .{ ._, ._, .mov, .dst0q, .src1q, ._, ._ }, | | |
| 5570 | } }, | | |
| 5571 | }, .{ | | |
| 5572 | .required_features = .{ .@"64bit", .cmov, null, null }, | | |
| 5573 | .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword } }, | | |
| 5574 | .patterns = &.{ | 5499 | .patterns = &.{ |
| 5575 | .{ .src = .{ .to_mut_gpr, .mem } }, | 5500 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5576 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 5577 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | | |
| 5578 | }, | 5501 | }, |
| 5579 | .dst_temps = .{.{ .ref = .src0 }}, | 5502 | .extra_temps = .{ |
| 5580 | .clobbers = .{ .eflags = true }, | 5503 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5581 | .each = .{ .once = &.{ | 5504 | .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } }, |
| 5582 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, | 5505 | .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } }, |
| 5583 | .{ ._, ._ae, .cmov, .dst0q, .src1q, ._, ._ }, | 5506 | .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } }, |
| 5584 | } }, | 5507 | .unused, |
| 5585 | }, .{ | 5508 | .unused, |
| 5586 | .required_features = .{ .@"64bit", null, null, null }, | 5509 | .unused, |
| 5587 | .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword } }, | 5510 | .unused, |
| 5588 | .patterns = &.{ | 5511 | .unused, |
| 5589 | .{ .src = .{ .to_mut_gpr, .mem } }, | | |
| 5590 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 5591 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | | |
| 5592 | }, | 5512 | }, |
| 5593 | .dst_temps = .{.{ .ref = .src0 }}, | 5513 | .dst_temps = .{.mem}, |
| 5594 | .clobbers = .{ .eflags = true }, | 5514 | .clobbers = .{ .eflags = true }, |
| 5595 | .each = .{ .once = &.{ | 5515 | .each = .{ .once = &.{ |
| 5596 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, | 5516 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5597 | .{ ._, ._nae, .j, .@"0f", ._, ._, ._ }, | 5517 | .{ .@"0:", .v_ps, .cvtph2, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5598 | .{ ._, ._, .mov, .dst0q, .src1q, ._, ._ }, | 5518 | .{ ._, .v_ps, .cvtph2, .tmp2y, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 5519 | .{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) }, |
| | 5520 | .{ ._, .v_ps, .max, .tmp1y, .tmp2y, .tmp1y, ._ }, |
| | 5521 | .{ ._, .v_ps, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y }, |
| | 5522 | .{ ._, .v_, .cvtps2ph, .memia(.dst0x, .tmp0, .add_size), .tmp1y, .rm(.{}), ._ }, |
| | 5523 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 5524 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5599 | } }, | 5525 | } }, |
| 5600 | }, .{ | 5526 | }, .{ |
| 5601 | .required_features = .{ .@"64bit", .cmov, null, null }, | 5527 | .required_features = .{ .avx, null, null, null }, |
| 5602 | .src_constraints = .{ .any_signed_int, .any_signed_int }, | 5528 | .src_constraints = .{ |
| | 5529 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 5530 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 5531 | }, |
| 5603 | .patterns = &.{ | 5532 | .patterns = &.{ |
| 5604 | .{ .src = .{ .to_mem, .to_mem } }, | 5533 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5605 | }, | 5534 | }, |
| | 5535 | .call_frame = .{ .alignment = .@"16" }, |
| 5606 | .extra_temps = .{ | 5536 | .extra_temps = .{ |
| 5607 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, | 5537 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5608 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, | 5538 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 5609 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, | 5539 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| 5610 | .unused, | 5540 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } }, |
| 5611 | .unused, | 5541 | .unused, |
| 5612 | .unused, | 5542 | .unused, |
| 5613 | .unused, | 5543 | .unused, |
| ... | @@ -5615,34 +5545,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5615,34 +5545,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5615 | .unused, | 5545 | .unused, |
| 5616 | }, | 5546 | }, |
| 5617 | .dst_temps = .{.mem}, | 5547 | .dst_temps = .{.mem}, |
| 5618 | .clobbers = .{ .eflags = true }, | 5548 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 5619 | .each = .{ .once = &.{ | 5549 | .each = .{ .once = &.{ |
| 5620 | .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ }, | 5550 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 5621 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, | 5551 | .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ }, |
| 5622 | .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ }, | 5552 | .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memia(.src0w, .tmp0, .add_size), .ui(0) }, |
| 5623 | .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ }, | 5553 | .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0) }, |
| 5624 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | 5554 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 5625 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | 5555 | .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ }, |
| 5626 | .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ }, | 5556 | .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ }, |
| 5627 | .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ }, | 5557 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5628 | .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, | | |
| 5629 | .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ }, | | |
| 5630 | .{ ._, ._ge, .cmov, .tmp0p, .tmp1p, ._, ._ }, | | |
| 5631 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, | | |
| 5632 | .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ }, | | |
| 5633 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, | | |
| 5634 | } }, | 5558 | } }, |
| 5635 | }, .{ | 5559 | }, .{ |
| 5636 | .required_features = .{ .@"64bit", null, null, null }, | 5560 | .required_features = .{ .sse4_1, null, null, null }, |
| 5637 | .src_constraints = .{ .any_signed_int, .any_signed_int }, | 5561 | .src_constraints = .{ |
| | 5562 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 5563 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 5564 | }, |
| 5638 | .patterns = &.{ | 5565 | .patterns = &.{ |
| 5639 | .{ .src = .{ .to_mem, .to_mem } }, | 5566 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5640 | }, | 5567 | }, |
| | 5568 | .call_frame = .{ .alignment = .@"16" }, |
| 5641 | .extra_temps = .{ | 5569 | .extra_temps = .{ |
| 5642 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, | 5570 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5643 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, | 5571 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 5644 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, | 5572 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| 5645 | .unused, | 5573 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } }, |
| 5646 | .unused, | 5574 | .unused, |
| 5647 | .unused, | 5575 | .unused, |
| 5648 | .unused, | 5576 | .unused, |
| ... | @@ -5650,66 +5578,104 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5650,66 +5578,104 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5650 | .unused, | 5578 | .unused, |
| 5651 | }, | 5579 | }, |
| 5652 | .dst_temps = .{.mem}, | 5580 | .dst_temps = .{.mem}, |
| 5653 | .clobbers = .{ .eflags = true }, | 5581 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 5654 | .each = .{ .once = &.{ | 5582 | .each = .{ .once = &.{ |
| 5655 | .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ }, | 5583 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 5656 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, | 5584 | .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| 5657 | .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ }, | 5585 | .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ }, |
| 5658 | .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ }, | 5586 | .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ }, |
| 5659 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | 5587 | .{ ._, .p_w, .insr, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0), ._ }, |
| 5660 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | 5588 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 5661 | .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ }, | 5589 | .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ }, |
| 5662 | .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ }, | 5590 | .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ }, |
| 5663 | .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, | 5591 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5664 | .{ ._, ._nge, .j, .@"0f", ._, ._, ._ }, | | |
| 5665 | .{ ._, ._, .lea, .tmp0p, .mem(.src1), ._, ._ }, | | |
| 5666 | .{ .@"0:", ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, | | |
| 5667 | .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ }, | | |
| 5668 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, | | |
| 5669 | } }, | 5592 | } }, |
| 5670 | }, .{ | 5593 | }, .{ |
| 5671 | .required_features = .{ .@"64bit", .cmov, null, null }, | 5594 | .required_features = .{ .sse2, null, null, null }, |
| 5672 | .src_constraints = .{ .any_unsigned_int, .any_unsigned_int }, | 5595 | .src_constraints = .{ |
| | 5596 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 5597 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 5598 | }, |
| 5673 | .patterns = &.{ | 5599 | .patterns = &.{ |
| 5674 | .{ .src = .{ .to_mem, .to_mem } }, | 5600 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5675 | }, | 5601 | }, |
| | 5602 | .call_frame = .{ .alignment = .@"16" }, |
| 5676 | .extra_temps = .{ | 5603 | .extra_temps = .{ |
| 5677 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, | 5604 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5678 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, | 5605 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 5679 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, | 5606 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| | 5607 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } }, |
| | 5608 | .{ .type = .f16, .kind = .{ .reg = .ax } }, |
| | 5609 | .unused, |
| 5680 | .unused, | 5610 | .unused, |
| 5681 | .unused, | 5611 | .unused, |
| 5682 | .unused, | 5612 | .unused, |
| | 5613 | }, |
| | 5614 | .dst_temps = .{.mem}, |
| | 5615 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| | 5616 | .each = .{ .once = &.{ |
| | 5617 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| | 5618 | .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| | 5619 | .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ }, |
| | 5620 | .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ }, |
| | 5621 | .{ ._, .p_w, .insr, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0), ._ }, |
| | 5622 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| | 5623 | .{ ._, .p_w, .extr, .tmp4d, .tmp1x, .ui(0), ._ }, |
| | 5624 | .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp4w, ._, ._ }, |
| | 5625 | .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ }, |
| | 5626 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 5627 | } }, |
| | 5628 | }, .{ |
| | 5629 | .required_features = .{ .sse, null, null, null }, |
| | 5630 | .src_constraints = .{ |
| | 5631 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 5632 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 5633 | }, |
| | 5634 | .patterns = &.{ |
| | 5635 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 5636 | }, |
| | 5637 | .call_frame = .{ .alignment = .@"16" }, |
| | 5638 | .extra_temps = .{ |
| | 5639 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 5640 | .{ .type = .f16, .kind = .{ .reg = .eax } }, |
| | 5641 | .{ .type = .f32, .kind = .mem }, |
| | 5642 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| | 5643 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| | 5644 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } }, |
| 5683 | .unused, | 5645 | .unused, |
| 5684 | .unused, | 5646 | .unused, |
| 5685 | .unused, | 5647 | .unused, |
| 5686 | }, | 5648 | }, |
| 5687 | .dst_temps = .{.mem}, | 5649 | .dst_temps = .{.mem}, |
| 5688 | .clobbers = .{ .eflags = true }, | 5650 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 5689 | .each = .{ .once = &.{ | 5651 | .each = .{ .once = &.{ |
| 5690 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ }, | 5652 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 5691 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, | 5653 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 5692 | .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ }, | 5654 | .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ }, |
| 5693 | .{ ._, ._, .sbb, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ }, | 5655 | .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ }, |
| 5694 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | 5656 | .{ ._, ._, .movzx, .tmp1d, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 5695 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | 5657 | .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ }, |
| 5696 | .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, | 5658 | .{ ._, ._ss, .mov, .tmp4x, .mem(.tmp2d), ._, ._ }, |
| 5697 | .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ }, | 5659 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| 5698 | .{ ._, ._ae, .cmov, .tmp0p, .tmp1p, ._, ._ }, | 5660 | .{ ._, ._ss, .mov, .mem(.tmp2d), .tmp3x, ._, ._ }, |
| 5699 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, | 5661 | .{ ._, ._, .mov, .tmp1d, .mem(.tmp2d), ._, ._ }, |
| 5700 | .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ }, | 5662 | .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| 5701 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, | 5663 | .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ }, |
| | 5664 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5702 | } }, | 5665 | } }, |
| 5703 | }, .{ | 5666 | }, .{ |
| 5704 | .required_features = .{ .@"64bit", null, null, null }, | 5667 | .required_features = .{ .avx, null, null, null }, |
| 5705 | .src_constraints = .{ .any_unsigned_int, .any_unsigned_int }, | 5668 | .src_constraints = .{ |
| | 5669 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| | 5670 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| | 5671 | }, |
| 5706 | .patterns = &.{ | 5672 | .patterns = &.{ |
| 5707 | .{ .src = .{ .to_mem, .to_mem } }, | 5673 | .{ .src = .{ .to_sse, .to_sse } }, |
| 5708 | }, | 5674 | }, |
| 5709 | .extra_temps = .{ | 5675 | .extra_temps = .{ |
| 5710 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, | 5676 | .{ .type = .f32, .kind = .{ .rc = .sse } }, |
| 5711 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, | 5677 | .unused, |
| 5712 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, | 5678 | .unused, |
| 5713 | .unused, | 5679 | .unused, |
| 5714 | .unused, | 5680 | .unused, |
| 5715 | .unused, | 5681 | .unused, |
| ... | @@ -5717,98 +5683,115 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5717,98 +5683,115 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5717 | .unused, | 5683 | .unused, |
| 5718 | .unused, | 5684 | .unused, |
| 5719 | }, | 5685 | }, |
| 5720 | .dst_temps = .{.mem}, | 5686 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 5721 | .clobbers = .{ .eflags = true }, | | |
| 5722 | .each = .{ .once = &.{ | 5687 | .each = .{ .once = &.{ |
| 5723 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ }, | 5688 | .{ ._, .v_ss, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) }, |
| 5724 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, | 5689 | .{ ._, .v_ss, .max, .dst0x, .src1x, .src0x, ._ }, |
| 5725 | .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ }, | 5690 | .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .src1x, .tmp0x }, |
| 5726 | .{ ._, ._, .sbb, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ }, | | |
| 5727 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | | |
| 5728 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | | |
| 5729 | .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, | | |
| 5730 | .{ ._, ._nae, .j, .@"0f", ._, ._, ._ }, | | |
| 5731 | .{ ._, ._, .lea, .tmp0p, .mem(.src1), ._, ._ }, | | |
| 5732 | .{ .@"0:", ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, | | |
| 5733 | .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ }, | | |
| 5734 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, | | |
| 5735 | } }, | 5691 | } }, |
| 5736 | }, .{ | 5692 | }, .{ |
| 5737 | .required_features = .{ .avx, null, null, null }, | 5693 | .required_features = .{ .sse4_1, null, null, null }, |
| 5738 | .src_constraints = .{ | 5694 | .src_constraints = .{ |
| 5739 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, | 5695 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 5740 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, | 5696 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 5741 | }, | 5697 | }, |
| 5742 | .patterns = &.{ | 5698 | .patterns = &.{ |
| 5743 | .{ .src = .{ .to_sse, .mem } }, | 5699 | .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } }, |
| 5744 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, | | |
| 5745 | .{ .src = .{ .to_sse, .to_sse } }, | | |
| 5746 | }, | 5700 | }, |
| 5747 | .dst_temps = .{.{ .rc = .sse }}, | 5701 | .dst_temps = .{.{ .rc = .sse }}, |
| 5748 | .each = .{ .once = &.{ | 5702 | .each = .{ .once = &.{ |
| 5749 | .{ ._, .vp_b, .mins, .dst0x, .src0x, .src1x, ._ }, | 5703 | .{ ._, ._ps, .mova, .dst0x, .src1x, ._, ._ }, |
| | 5704 | .{ ._, ._ss, .max, .dst0x, .src0x, ._, ._ }, |
| | 5705 | .{ ._, ._ss, .cmp, .src0x, .src0x, .vp(.unord), ._ }, |
| | 5706 | .{ ._, ._ps, .blendv, .dst0x, .src1x, .src0x, ._ }, |
| 5750 | } }, | 5707 | } }, |
| 5751 | }, .{ | 5708 | }, .{ |
| 5752 | .required_features = .{ .sse4_1, null, null, null }, | 5709 | .required_features = .{ .sse, null, null, null }, |
| 5753 | .src_constraints = .{ | 5710 | .src_constraints = .{ |
| 5754 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, | 5711 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 5755 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, | 5712 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 5756 | }, | 5713 | }, |
| 5757 | .patterns = &.{ | 5714 | .patterns = &.{ |
| 5758 | .{ .src = .{ .to_mut_sse, .mem } }, | | |
| 5759 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, | | |
| 5760 | .{ .src = .{ .to_mut_sse, .to_sse } }, | 5715 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 5761 | }, | 5716 | }, |
| | 5717 | .extra_temps = .{ |
| | 5718 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| | 5719 | .unused, |
| | 5720 | .unused, |
| | 5721 | .unused, |
| | 5722 | .unused, |
| | 5723 | .unused, |
| | 5724 | .unused, |
| | 5725 | .unused, |
| | 5726 | .unused, |
| | 5727 | }, |
| 5762 | .dst_temps = .{.{ .ref = .src0 }}, | 5728 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5763 | .each = .{ .once = &.{ | 5729 | .each = .{ .once = &.{ |
| 5764 | .{ ._, .p_b, .mins, .dst0x, .src1x, ._, ._ }, | 5730 | .{ ._, ._ps, .mova, .tmp0x, .src1x, ._, ._ }, |
| | 5731 | .{ ._, ._ss, .max, .tmp0x, .src0x, ._, ._ }, |
| | 5732 | .{ ._, ._ss, .cmp, .dst0x, .src0x, .vp(.ord), ._ }, |
| | 5733 | .{ ._, ._ps, .@"and", .tmp0x, .dst0x, ._, ._ }, |
| | 5734 | .{ ._, ._ps, .andn, .dst0x, .src1x, ._, ._ }, |
| | 5735 | .{ ._, ._ps, .@"or", .dst0x, .tmp0x, ._, ._ }, |
| 5765 | } }, | 5736 | } }, |
| 5766 | }, .{ | 5737 | }, .{ |
| 5767 | .required_features = .{ .sse2, null, null, null }, | 5738 | .required_features = .{ .avx, null, null, null }, |
| 5768 | .src_constraints = .{ | 5739 | .src_constraints = .{ |
| 5769 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, | 5740 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 5770 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, | 5741 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 5771 | }, | 5742 | }, |
| 5772 | .patterns = &.{ | 5743 | .patterns = &.{ |
| 5773 | .{ .src = .{ .to_mut_sse, .mem } }, | 5744 | .{ .src = .{ .to_sse, .to_sse } }, |
| 5774 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, | | |
| 5775 | .{ .src = .{ .to_mut_sse, .to_sse } }, | | |
| 5776 | }, | 5745 | }, |
| 5777 | .dst_temps = .{.{ .rc = .sse }}, | 5746 | .extra_temps = .{ |
| | 5747 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| | 5748 | .unused, |
| | 5749 | .unused, |
| | 5750 | .unused, |
| | 5751 | .unused, |
| | 5752 | .unused, |
| | 5753 | .unused, |
| | 5754 | .unused, |
| | 5755 | .unused, |
| | 5756 | }, |
| | 5757 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 5778 | .each = .{ .once = &.{ | 5758 | .each = .{ .once = &.{ |
| 5779 | .{ ._, ._dqa, .mov, .dst0x, .src1x, ._, ._ }, | 5759 | .{ ._, .v_ps, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) }, |
| 5780 | .{ ._, .p_b, .cmpgt, .dst0x, .src0x, ._, ._ }, | 5760 | .{ ._, .v_ps, .max, .dst0x, .src1x, .src0x, ._ }, |
| 5781 | .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ }, | 5761 | .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .src1x, .tmp0x }, |
| 5782 | .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ }, | | |
| 5783 | .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ }, | | |
| 5784 | } }, | 5762 | } }, |
| 5785 | }, .{ | 5763 | }, .{ |
| 5786 | .required_features = .{ .avx2, null, null, null }, | 5764 | .required_features = .{ .sse4_1, null, null, null }, |
| 5787 | .src_constraints = .{ | 5765 | .src_constraints = .{ |
| 5788 | .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } }, | 5766 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 5789 | .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } }, | 5767 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 5790 | }, | 5768 | }, |
| 5791 | .patterns = &.{ | 5769 | .patterns = &.{ |
| 5792 | .{ .src = .{ .to_sse, .mem } }, | 5770 | .{ .src = .{ .{ .to_reg = .xmm0 }, .mem } }, |
| 5793 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, | 5771 | .{ .src = .{ .mem, .{ .to_reg = .xmm0 } }, .commute = .{ 0, 1 } }, |
| 5794 | .{ .src = .{ .to_sse, .to_sse } }, | 5772 | .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } }, |
| 5795 | }, | 5773 | }, |
| 5796 | .dst_temps = .{.{ .rc = .sse }}, | 5774 | .dst_temps = .{.{ .rc = .sse }}, |
| 5797 | .each = .{ .once = &.{ | 5775 | .each = .{ .once = &.{ |
| 5798 | .{ ._, .vp_b, .mins, .dst0y, .src0y, .src1y, ._ }, | 5776 | .{ ._, ._ps, .mova, .dst0x, .src1x, ._, ._ }, |
| | 5777 | .{ ._, ._ps, .max, .dst0x, .src0x, ._, ._ }, |
| | 5778 | .{ ._, ._ps, .cmp, .src0x, .src0x, .vp(.unord), ._ }, |
| | 5779 | .{ ._, ._ps, .blendv, .dst0x, .src1x, .src0x, ._ }, |
| 5799 | } }, | 5780 | } }, |
| 5800 | }, .{ | 5781 | }, .{ |
| 5801 | .required_features = .{ .avx2, null, null, null }, | 5782 | .required_features = .{ .sse, null, null, null }, |
| 5802 | .src_constraints = .{ | 5783 | .src_constraints = .{ |
| 5803 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } }, | 5784 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 5804 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } }, | 5785 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 5805 | }, | 5786 | }, |
| 5806 | .patterns = &.{ | 5787 | .patterns = &.{ |
| 5807 | .{ .src = .{ .to_mem, .to_mem } }, | 5788 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 5789 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 5790 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 5808 | }, | 5791 | }, |
| 5809 | .extra_temps = .{ | 5792 | .extra_temps = .{ |
| 5810 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 5793 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 5811 | .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } }, | 5794 | .unused, |
| 5812 | .unused, | 5795 | .unused, |
| 5813 | .unused, | 5796 | .unused, |
| 5814 | .unused, | 5797 | .unused, |
| ... | @@ -5817,28 +5800,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5817,28 +5800,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5817 | .unused, | 5800 | .unused, |
| 5818 | .unused, | 5801 | .unused, |
| 5819 | }, | 5802 | }, |
| 5820 | .dst_temps = .{.mem}, | 5803 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5821 | .clobbers = .{ .eflags = true }, | | |
| 5822 | .each = .{ .once = &.{ | 5804 | .each = .{ .once = &.{ |
| 5823 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 5805 | .{ ._, ._ps, .mova, .tmp0x, .src1x, ._, ._ }, |
| 5824 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | 5806 | .{ ._, ._ps, .max, .tmp0x, .src0x, ._, ._ }, |
| 5825 | .{ ._, .vp_b, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, | 5807 | .{ ._, ._ps, .cmp, .dst0x, .src0x, .vp(.ord), ._ }, |
| 5826 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, | 5808 | .{ ._, ._ps, .@"and", .tmp0x, .dst0x, ._, ._ }, |
| 5827 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | 5809 | .{ ._, ._ps, .andn, .dst0x, .src1x, ._, ._ }, |
| 5828 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 5810 | .{ ._, ._ps, .@"or", .dst0x, .tmp0x, ._, ._ }, |
| 5829 | } }, | 5811 | } }, |
| 5830 | }, .{ | 5812 | }, .{ |
| 5831 | .required_features = .{ .avx, null, null, null }, | 5813 | .required_features = .{ .avx, null, null, null }, |
| 5832 | .src_constraints = .{ | 5814 | .src_constraints = .{ |
| 5833 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, | 5815 | .{ .scalar_float = .{ .of = .yword, .is = .dword } }, |
| 5834 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, | 5816 | .{ .scalar_float = .{ .of = .yword, .is = .dword } }, |
| 5835 | }, | 5817 | }, |
| 5836 | .patterns = &.{ | 5818 | .patterns = &.{ |
| 5837 | .{ .src = .{ .to_mem, .to_mem } }, | 5819 | .{ .src = .{ .to_sse, .to_sse } }, |
| 5838 | }, | 5820 | }, |
| 5839 | .extra_temps = .{ | 5821 | .extra_temps = .{ |
| 5840 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 5822 | .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, |
| 5841 | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, | 5823 | .unused, |
| 5842 | .unused, | 5824 | .unused, |
| 5843 | .unused, | 5825 | .unused, |
| 5844 | .unused, | 5826 | .unused, |
| ... | @@ -5847,30 +5829,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5847,30 +5829,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5847 | .unused, | 5829 | .unused, |
| 5848 | .unused, | 5830 | .unused, |
| 5849 | }, | 5831 | }, |
| 5850 | .dst_temps = .{.mem}, | 5832 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 5851 | .clobbers = .{ .eflags = true }, | | |
| 5852 | .each = .{ .once = &.{ | 5833 | .each = .{ .once = &.{ |
| 5853 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 5834 | .{ ._, .v_ps, .cmp, .tmp0y, .src0y, .src0y, .vp(.unord) }, |
| 5854 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 5835 | .{ ._, .v_ps, .max, .dst0y, .src1y, .src0y, ._ }, |
| 5855 | .{ ._, .vp_b, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, | 5836 | .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .src1y, .tmp0y }, |
| 5856 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, | | |
| 5857 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | | |
| 5858 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 5859 | } }, | 5837 | } }, |
| 5860 | }, .{ | 5838 | }, .{ |
| 5861 | .required_features = .{ .sse4_1, null, null, null }, | 5839 | .required_features = .{ .avx, null, null, null }, |
| 5862 | .src_constraints = .{ | 5840 | .src_constraints = .{ |
| 5863 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, | 5841 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, |
| 5864 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, | 5842 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, |
| 5865 | }, | 5843 | }, |
| 5866 | .patterns = &.{ | 5844 | .patterns = &.{ |
| 5867 | .{ .src = .{ .to_mem, .to_mem } }, | 5845 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5868 | }, | 5846 | }, |
| 5869 | .extra_temps = .{ | 5847 | .extra_temps = .{ |
| 5870 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 5848 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5871 | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, | 5849 | .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, |
| 5872 | .unused, | 5850 | .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, |
| 5873 | .unused, | 5851 | .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, |
| 5874 | .unused, | 5852 | .unused, |
| 5875 | .unused, | 5853 | .unused, |
| 5876 | .unused, | 5854 | .unused, |
| ... | @@ -5880,27 +5858,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5880,27 +5858,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5880 | .dst_temps = .{.mem}, | 5858 | .dst_temps = .{.mem}, |
| 5881 | .clobbers = .{ .eflags = true }, | 5859 | .clobbers = .{ .eflags = true }, |
| 5882 | .each = .{ .once = &.{ | 5860 | .each = .{ .once = &.{ |
| 5883 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 5861 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 5884 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 5862 | .{ .@"0:", .v_ps, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 5885 | .{ ._, .p_b, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | 5863 | .{ ._, .v_ps, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, |
| 5886 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, | 5864 | .{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) }, |
| 5887 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 5865 | .{ ._, .v_ps, .max, .tmp1y, .tmp2y, .tmp1y, ._ }, |
| | 5866 | .{ ._, .v_ps, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y }, |
| | 5867 | .{ ._, .v_ps, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| | 5868 | .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ }, |
| 5888 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 5869 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5889 | } }, | 5870 | } }, |
| 5890 | }, .{ | 5871 | }, .{ |
| 5891 | .required_features = .{ .sse2, null, null, null }, | 5872 | .required_features = .{ .sse4_1, null, null, null }, |
| 5892 | .src_constraints = .{ | 5873 | .src_constraints = .{ |
| 5893 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, | 5874 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, |
| 5894 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, | 5875 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, |
| 5895 | }, | 5876 | }, |
| 5896 | .patterns = &.{ | 5877 | .patterns = &.{ |
| 5897 | .{ .src = .{ .to_mem, .to_mem } }, | 5878 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5898 | }, | 5879 | }, |
| 5899 | .extra_temps = .{ | 5880 | .extra_temps = .{ |
| 5900 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 5881 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5901 | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, | 5882 | .{ .type = .vector_4_f32, .kind = .{ .reg = .xmm0 } }, |
| 5902 | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, | 5883 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 5903 | .unused, | 5884 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 5904 | .unused, | 5885 | .unused, |
| 5905 | .unused, | 5886 | .unused, |
| 5906 | .unused, | 5887 | .unused, |
| ... | @@ -5910,31 +5891,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5910,31 +5891,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5910 | .dst_temps = .{.mem}, | 5891 | .dst_temps = .{.mem}, |
| 5911 | .clobbers = .{ .eflags = true }, | 5892 | .clobbers = .{ .eflags = true }, |
| 5912 | .each = .{ .once = &.{ | 5893 | .each = .{ .once = &.{ |
| 5913 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 5894 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 5914 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 5895 | .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5915 | .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | 5896 | .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 5916 | .{ ._, .p_b, .cmpgt, .tmp1x, .tmp2x, ._, ._ }, | 5897 | .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ }, |
| 5917 | .{ ._, .p_, .@"and", .tmp2x, .tmp1x, ._, ._ }, | 5898 | .{ ._, ._ps, .max, .tmp3x, .tmp1x, ._, ._ }, |
| 5918 | .{ ._, .p_, .andn, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 5899 | .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ }, |
| 5919 | .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ }, | 5900 | .{ ._, ._ps, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ }, |
| 5920 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, | 5901 | .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, |
| 5921 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 5902 | .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, |
| 5922 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 5903 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5923 | } }, | 5904 | } }, |
| 5924 | }, .{ | 5905 | }, .{ |
| 5925 | .required_features = .{ .cmov, .slow_incdec, null, null }, | 5906 | .required_features = .{ .sse, null, null, null }, |
| 5926 | .src_constraints = .{ | 5907 | .src_constraints = .{ |
| 5927 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, | 5908 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, |
| 5928 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, | 5909 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, |
| 5929 | }, | 5910 | }, |
| 5930 | .patterns = &.{ | 5911 | .patterns = &.{ |
| 5931 | .{ .src = .{ .to_mem, .to_mem } }, | 5912 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5932 | }, | 5913 | }, |
| 5933 | .extra_temps = .{ | 5914 | .extra_temps = .{ |
| 5934 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 5915 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5935 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, | 5916 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 5936 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, | 5917 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 5937 | .unused, | 5918 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 5938 | .unused, | 5919 | .unused, |
| 5939 | .unused, | 5920 | .unused, |
| 5940 | .unused, | 5921 | .unused, |
| ... | @@ -5944,28 +5925,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5944,28 +5925,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5944 | .dst_temps = .{.mem}, | 5925 | .dst_temps = .{.mem}, |
| 5945 | .clobbers = .{ .eflags = true }, | 5926 | .clobbers = .{ .eflags = true }, |
| 5946 | .each = .{ .once = &.{ | 5927 | .each = .{ .once = &.{ |
| 5947 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 5928 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 5948 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, | 5929 | .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5949 | .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, | 5930 | .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 5950 | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, | 5931 | .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ }, |
| 5951 | .{ ._, ._ge, .cmov, .tmp1d, .tmp2d, ._, ._ }, | 5932 | .{ ._, ._ps, .max, .tmp3x, .tmp1x, ._, ._ }, |
| 5952 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, | 5933 | .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.ord), ._ }, |
| 5953 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | 5934 | .{ ._, ._ps, .@"and", .tmp3x, .tmp1x, ._, ._ }, |
| | 5935 | .{ ._, ._ps, .andn, .tmp1x, .tmp2x, ._, ._ }, |
| | 5936 | .{ ._, ._ps, .@"or", .tmp1x, .tmp3x, ._, ._ }, |
| | 5937 | .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 5938 | .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, |
| 5954 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 5939 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5955 | } }, | 5940 | } }, |
| 5956 | }, .{ | 5941 | }, .{ |
| 5957 | .required_features = .{ .cmov, null, null, null }, | 5942 | .required_features = .{ .avx, null, null, null }, |
| 5958 | .src_constraints = .{ | 5943 | .src_constraints = .{ |
| 5959 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, | 5944 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 5960 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, | 5945 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 5961 | }, | 5946 | }, |
| 5962 | .patterns = &.{ | 5947 | .patterns = &.{ |
| 5963 | .{ .src = .{ .to_mem, .to_mem } }, | 5948 | .{ .src = .{ .to_sse, .to_sse } }, |
| 5964 | }, | 5949 | }, |
| 5965 | .extra_temps = .{ | 5950 | .extra_temps = .{ |
| 5966 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 5951 | .{ .type = .f64, .kind = .{ .rc = .sse } }, |
| 5967 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, | 5952 | .unused, |
| 5968 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, | 5953 | .unused, |
| 5969 | .unused, | 5954 | .unused, |
| 5970 | .unused, | 5955 | .unused, |
| 5971 | .unused, | 5956 | .unused, |
| ... | @@ -5973,30 +5958,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5973,30 +5958,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5973 | .unused, | 5958 | .unused, |
| 5974 | .unused, | 5959 | .unused, |
| 5975 | }, | 5960 | }, |
| 5976 | .dst_temps = .{.mem}, | 5961 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 5977 | .clobbers = .{ .eflags = true }, | | |
| 5978 | .each = .{ .once = &.{ | 5962 | .each = .{ .once = &.{ |
| 5979 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 5963 | .{ ._, .v_sd, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) }, |
| 5980 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, | 5964 | .{ ._, .v_sd, .max, .dst0x, .src1x, .src0x, ._ }, |
| 5981 | .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, | 5965 | .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .src1x, .tmp0x }, |
| 5982 | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, | | |
| 5983 | .{ ._, ._ge, .cmov, .tmp1d, .tmp2d, ._, ._ }, | | |
| 5984 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, | | |
| 5985 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | | |
| 5986 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | | |
| 5987 | } }, | 5966 | } }, |
| 5988 | }, .{ | 5967 | }, .{ |
| 5989 | .required_features = .{ .slow_incdec, null, null, null }, | 5968 | .required_features = .{ .sse4_1, null, null, null }, |
| 5990 | .src_constraints = .{ | 5969 | .src_constraints = .{ |
| 5991 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, | 5970 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 5992 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, | 5971 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 5993 | }, | 5972 | }, |
| 5994 | .patterns = &.{ | 5973 | .patterns = &.{ |
| 5995 | .{ .src = .{ .to_mem, .to_mem } }, | 5974 | .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } }, |
| | 5975 | }, |
| | 5976 | .dst_temps = .{.{ .rc = .sse }}, |
| | 5977 | .each = .{ .once = &.{ |
| | 5978 | .{ ._, ._pd, .mova, .dst0x, .src1x, ._, ._ }, |
| | 5979 | .{ ._, ._sd, .max, .dst0x, .src0x, ._, ._ }, |
| | 5980 | .{ ._, ._sd, .cmp, .src0x, .src0x, .vp(.unord), ._ }, |
| | 5981 | .{ ._, ._pd, .blendv, .dst0x, .src1x, .src0x, ._ }, |
| | 5982 | } }, |
| | 5983 | }, .{ |
| | 5984 | .required_features = .{ .sse2, null, null, null }, |
| | 5985 | .src_constraints = .{ |
| | 5986 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| | 5987 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| | 5988 | }, |
| | 5989 | .patterns = &.{ |
| | 5990 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 5996 | }, | 5991 | }, |
| 5997 | .extra_temps = .{ | 5992 | .extra_temps = .{ |
| 5998 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 5993 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 5999 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, | 5994 | .unused, |
| 6000 | .unused, | 5995 | .unused, |
| 6001 | .unused, | 5996 | .unused, |
| 6002 | .unused, | 5997 | .unused, |
| ... | @@ -6005,29 +6000,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6005,29 +6000,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6005 | .unused, | 6000 | .unused, |
| 6006 | .unused, | 6001 | .unused, |
| 6007 | }, | 6002 | }, |
| 6008 | .dst_temps = .{.mem}, | 6003 | .dst_temps = .{.{ .ref = .src0 }}, |
| 6009 | .clobbers = .{ .eflags = true }, | | |
| 6010 | .each = .{ .once = &.{ | 6004 | .each = .{ .once = &.{ |
| 6011 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 6005 | .{ ._, ._pd, .mova, .tmp0x, .src1x, ._, ._ }, |
| 6012 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, | 6006 | .{ ._, ._sd, .max, .tmp0x, .src0x, ._, ._ }, |
| 6013 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, | 6007 | .{ ._, ._sd, .cmp, .dst0x, .src0x, .vp(.ord), ._ }, |
| 6014 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, | 6008 | .{ ._, ._pd, .@"and", .tmp0x, .dst0x, ._, ._ }, |
| 6015 | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, | 6009 | .{ ._, ._pd, .andn, .dst0x, .src1x, ._, ._ }, |
| 6016 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, | 6010 | .{ ._, ._pd, .@"or", .dst0x, .tmp0x, ._, ._ }, |
| 6017 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | | |
| 6018 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 6019 | } }, | 6011 | } }, |
| 6020 | }, .{ | 6012 | }, .{ |
| | 6013 | .required_features = .{ .sse, null, null, null }, |
| 6021 | .src_constraints = .{ | 6014 | .src_constraints = .{ |
| 6022 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, | 6015 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 6023 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, | 6016 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 6024 | }, | 6017 | }, |
| 6025 | .patterns = &.{ | 6018 | .patterns = &.{ |
| 6026 | .{ .src = .{ .to_mem, .to_mem } }, | 6019 | .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } }, |
| 6027 | }, | 6020 | }, |
| | 6021 | .call_frame = .{ .alignment = .@"16" }, |
| 6028 | .extra_temps = .{ | 6022 | .extra_temps = .{ |
| 6029 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6023 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmax" } } }, |
| 6030 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, | 6024 | .unused, |
| 6031 | .unused, | 6025 | .unused, |
| 6032 | .unused, | 6026 | .unused, |
| 6033 | .unused, | 6027 | .unused, |
| ... | @@ -6036,90 +6030,98 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6036,90 +6030,98 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6036 | .unused, | 6030 | .unused, |
| 6037 | .unused, | 6031 | .unused, |
| 6038 | }, | 6032 | }, |
| 6039 | .dst_temps = .{.mem}, | 6033 | .dst_temps = .{.{ .ref = .src0 }}, |
| 6040 | .clobbers = .{ .eflags = true }, | 6034 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 6041 | .each = .{ .once = &.{ | 6035 | .each = .{ .once = &.{ |
| 6042 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 6036 | .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, |
| 6043 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, | | |
| 6044 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, | | |
| 6045 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, | | |
| 6046 | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, | | |
| 6047 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, | | |
| 6048 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | | |
| 6049 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | | |
| 6050 | } }, | 6037 | } }, |
| 6051 | }, .{ | 6038 | }, .{ |
| 6052 | .required_features = .{ .sse, .mmx, null, null }, | 6039 | .required_features = .{ .avx, null, null, null }, |
| 6053 | .src_constraints = .{ | 6040 | .src_constraints = .{ |
| 6054 | .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } }, | 6041 | .{ .scalar_float = .{ .of = .xword, .is = .qword } }, |
| 6055 | .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } }, | 6042 | .{ .scalar_float = .{ .of = .xword, .is = .qword } }, |
| 6056 | }, | 6043 | }, |
| 6057 | .patterns = &.{ | 6044 | .patterns = &.{ |
| 6058 | .{ .src = .{ .to_mut_mmx, .mem } }, | 6045 | .{ .src = .{ .to_sse, .to_sse } }, |
| 6059 | .{ .src = .{ .mem, .to_mut_mmx }, .commute = .{ 0, 1 } }, | | |
| 6060 | .{ .src = .{ .to_mut_mmx, .to_mmx } }, | | |
| 6061 | }, | 6046 | }, |
| 6062 | .dst_temps = .{.{ .ref = .src0 }}, | 6047 | .extra_temps = .{ |
| | 6048 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| | 6049 | .unused, |
| | 6050 | .unused, |
| | 6051 | .unused, |
| | 6052 | .unused, |
| | 6053 | .unused, |
| | 6054 | .unused, |
| | 6055 | .unused, |
| | 6056 | .unused, |
| | 6057 | }, |
| | 6058 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 6063 | .each = .{ .once = &.{ | 6059 | .each = .{ .once = &.{ |
| 6064 | .{ ._, .p_b, .minu, .dst0q, .src1q, ._, ._ }, | 6060 | .{ ._, .v_pd, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) }, |
| | 6061 | .{ ._, .v_pd, .max, .dst0x, .src1x, .src0x, ._ }, |
| | 6062 | .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .src1x, .tmp0x }, |
| 6065 | } }, | 6063 | } }, |
| 6066 | }, .{ | 6064 | }, .{ |
| 6067 | .required_features = .{ .avx, null, null, null }, | 6065 | .required_features = .{ .sse4_1, null, null, null }, |
| 6068 | .src_constraints = .{ | 6066 | .src_constraints = .{ |
| 6069 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, | 6067 | .{ .scalar_float = .{ .of = .xword, .is = .qword } }, |
| 6070 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, | 6068 | .{ .scalar_float = .{ .of = .xword, .is = .qword } }, |
| 6071 | }, | 6069 | }, |
| 6072 | .patterns = &.{ | 6070 | .patterns = &.{ |
| 6073 | .{ .src = .{ .to_sse, .mem } }, | 6071 | .{ .src = .{ .{ .to_reg = .xmm0 }, .mem } }, |
| 6074 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, | 6072 | .{ .src = .{ .mem, .{ .to_reg = .xmm0 } }, .commute = .{ 0, 1 } }, |
| 6075 | .{ .src = .{ .to_sse, .to_sse } }, | 6073 | .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } }, |
| 6076 | }, | 6074 | }, |
| 6077 | .dst_temps = .{.{ .rc = .sse }}, | 6075 | .dst_temps = .{.{ .rc = .sse }}, |
| 6078 | .each = .{ .once = &.{ | 6076 | .each = .{ .once = &.{ |
| 6079 | .{ ._, .vp_b, .minu, .dst0x, .src0x, .src1x, ._ }, | 6077 | .{ ._, ._pd, .mova, .dst0x, .src1x, ._, ._ }, |
| | 6078 | .{ ._, ._pd, .max, .dst0x, .src0x, ._, ._ }, |
| | 6079 | .{ ._, ._pd, .cmp, .src0x, .src0x, .vp(.unord), ._ }, |
| | 6080 | .{ ._, ._pd, .blendv, .dst0x, .src1x, .src0x, ._ }, |
| 6080 | } }, | 6081 | } }, |
| 6081 | }, .{ | 6082 | }, .{ |
| 6082 | .required_features = .{ .sse2, null, null, null }, | 6083 | .required_features = .{ .sse2, null, null, null }, |
| 6083 | .src_constraints = .{ | 6084 | .src_constraints = .{ |
| 6084 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, | 6085 | .{ .scalar_float = .{ .of = .xword, .is = .qword } }, |
| 6085 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, | 6086 | .{ .scalar_float = .{ .of = .xword, .is = .qword } }, |
| 6086 | }, | 6087 | }, |
| 6087 | .patterns = &.{ | 6088 | .patterns = &.{ |
| 6088 | .{ .src = .{ .to_mut_sse, .mem } }, | 6089 | .{ .src = .{ .to_mut_sse, .mem } }, |
| 6089 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, | 6090 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 6090 | .{ .src = .{ .to_mut_sse, .to_sse } }, | 6091 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 6091 | }, | 6092 | }, |
| | 6093 | .extra_temps = .{ |
| | 6094 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| | 6095 | .unused, |
| | 6096 | .unused, |
| | 6097 | .unused, |
| | 6098 | .unused, |
| | 6099 | .unused, |
| | 6100 | .unused, |
| | 6101 | .unused, |
| | 6102 | .unused, |
| | 6103 | }, |
| 6092 | .dst_temps = .{.{ .ref = .src0 }}, | 6104 | .dst_temps = .{.{ .ref = .src0 }}, |
| 6093 | .each = .{ .once = &.{ | 6105 | .each = .{ .once = &.{ |
| 6094 | .{ ._, .p_b, .minu, .dst0x, .src1x, ._, ._ }, | 6106 | .{ ._, ._pd, .mova, .tmp0x, .src1x, ._, ._ }, |
| | 6107 | .{ ._, ._pd, .max, .tmp0x, .src0x, ._, ._ }, |
| | 6108 | .{ ._, ._pd, .cmp, .dst0x, .src0x, .vp(.ord), ._ }, |
| | 6109 | .{ ._, ._pd, .@"and", .tmp0x, .dst0x, ._, ._ }, |
| | 6110 | .{ ._, ._pd, .andn, .dst0x, .src1x, ._, ._ }, |
| | 6111 | .{ ._, ._pd, .@"or", .dst0x, .tmp0x, ._, ._ }, |
| 6095 | } }, | 6112 | } }, |
| 6096 | }, .{ | 6113 | }, .{ |
| 6097 | .required_features = .{ .avx2, null, null, null }, | 6114 | .required_features = .{ .avx, null, null, null }, |
| 6098 | .src_constraints = .{ | 6115 | .src_constraints = .{ |
| 6099 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, | 6116 | .{ .scalar_float = .{ .of = .yword, .is = .qword } }, |
| 6100 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, | 6117 | .{ .scalar_float = .{ .of = .yword, .is = .qword } }, |
| 6101 | }, | 6118 | }, |
| 6102 | .patterns = &.{ | 6119 | .patterns = &.{ |
| 6103 | .{ .src = .{ .to_sse, .mem } }, | | |
| 6104 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, | | |
| 6105 | .{ .src = .{ .to_sse, .to_sse } }, | 6120 | .{ .src = .{ .to_sse, .to_sse } }, |
| 6106 | }, | 6121 | }, |
| 6107 | .dst_temps = .{.{ .rc = .sse }}, | | |
| 6108 | .each = .{ .once = &.{ | | |
| 6109 | .{ ._, .vp_b, .minu, .dst0y, .src0y, .src1y, ._ }, | | |
| 6110 | } }, | | |
| 6111 | }, .{ | | |
| 6112 | .required_features = .{ .avx2, null, null, null }, | | |
| 6113 | .src_constraints = .{ | | |
| 6114 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, | | |
| 6115 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, | | |
| 6116 | }, | | |
| 6117 | .patterns = &.{ | | |
| 6118 | .{ .src = .{ .to_mem, .to_mem } }, | | |
| 6119 | }, | | |
| 6120 | .extra_temps = .{ | 6122 | .extra_temps = .{ |
| 6121 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6123 | .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, |
| 6122 | .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } }, | 6124 | .unused, |
| 6123 | .unused, | 6125 | .unused, |
| 6124 | .unused, | 6126 | .unused, |
| 6125 | .unused, | 6127 | .unused, |
| ... | @@ -6128,30 +6130,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6128,30 +6130,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6128 | .unused, | 6130 | .unused, |
| 6129 | .unused, | 6131 | .unused, |
| 6130 | }, | 6132 | }, |
| 6131 | .dst_temps = .{.mem}, | 6133 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 6132 | .clobbers = .{ .eflags = true }, | | |
| 6133 | .each = .{ .once = &.{ | 6134 | .each = .{ .once = &.{ |
| 6134 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 6135 | .{ ._, .v_pd, .cmp, .tmp0y, .src0y, .src0y, .vp(.unord) }, |
| 6135 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | 6136 | .{ ._, .v_pd, .max, .dst0y, .src1y, .src0y, ._ }, |
| 6136 | .{ ._, .vp_b, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, | 6137 | .{ ._, .v_pd, .blendv, .dst0y, .dst0y, .src1y, .tmp0y }, |
| 6137 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, | | |
| 6138 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | | |
| 6139 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 6140 | } }, | 6138 | } }, |
| 6141 | }, .{ | 6139 | }, .{ |
| 6142 | .required_features = .{ .avx, null, null, null }, | 6140 | .required_features = .{ .avx, null, null, null }, |
| 6143 | .src_constraints = .{ | 6141 | .src_constraints = .{ |
| 6144 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, | 6142 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, |
| 6145 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, | 6143 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, |
| 6146 | }, | 6144 | }, |
| 6147 | .patterns = &.{ | 6145 | .patterns = &.{ |
| 6148 | .{ .src = .{ .to_mem, .to_mem } }, | 6146 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6149 | }, | 6147 | }, |
| 6150 | .extra_temps = .{ | 6148 | .extra_temps = .{ |
| 6151 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6149 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6152 | .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } }, | 6150 | .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, |
| 6153 | .unused, | 6151 | .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, |
| 6154 | .unused, | 6152 | .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, |
| 6155 | .unused, | 6153 | .unused, |
| 6156 | .unused, | 6154 | .unused, |
| 6157 | .unused, | 6155 | .unused, |
| ... | @@ -6161,27 +6159,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6161,27 +6159,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6161 | .dst_temps = .{.mem}, | 6159 | .dst_temps = .{.mem}, |
| 6162 | .clobbers = .{ .eflags = true }, | 6160 | .clobbers = .{ .eflags = true }, |
| 6163 | .each = .{ .once = &.{ | 6161 | .each = .{ .once = &.{ |
| 6164 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 6162 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 6165 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 6163 | .{ .@"0:", .v_pd, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 6166 | .{ ._, .vp_b, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, | 6164 | .{ ._, .v_pd, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, |
| 6167 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, | 6165 | .{ ._, .v_pd, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) }, |
| 6168 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 6166 | .{ ._, .v_pd, .max, .tmp1y, .tmp2y, .tmp1y, ._ }, |
| | 6167 | .{ ._, .v_pd, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y }, |
| | 6168 | .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| | 6169 | .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ }, |
| 6169 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6170 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6170 | } }, | 6171 | } }, |
| 6171 | }, .{ | 6172 | }, .{ |
| 6172 | .required_features = .{ .sse2, null, null, null }, | 6173 | .required_features = .{ .sse4_1, null, null, null }, |
| 6173 | .src_constraints = .{ | 6174 | .src_constraints = .{ |
| 6174 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, | 6175 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, |
| 6175 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, | 6176 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, |
| 6176 | }, | 6177 | }, |
| 6177 | .patterns = &.{ | 6178 | .patterns = &.{ |
| 6178 | .{ .src = .{ .to_mem, .to_mem } }, | 6179 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6179 | }, | 6180 | }, |
| 6180 | .extra_temps = .{ | 6181 | .extra_temps = .{ |
| 6181 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6182 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6182 | .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } }, | 6183 | .{ .type = .vector_2_f64, .kind = .{ .reg = .xmm0 } }, |
| 6183 | .unused, | 6184 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 6184 | .unused, | 6185 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 6185 | .unused, | 6186 | .unused, |
| 6186 | .unused, | 6187 | .unused, |
| 6187 | .unused, | 6188 | .unused, |
| ... | @@ -6191,27 +6192,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6191,27 +6192,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6191 | .dst_temps = .{.mem}, | 6192 | .dst_temps = .{.mem}, |
| 6192 | .clobbers = .{ .eflags = true }, | 6193 | .clobbers = .{ .eflags = true }, |
| 6193 | .each = .{ .once = &.{ | 6194 | .each = .{ .once = &.{ |
| 6194 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 6195 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 6195 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 6196 | .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6196 | .{ ._, .p_b, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | 6197 | .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6197 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, | 6198 | .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ }, |
| 6198 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 6199 | .{ ._, ._pd, .max, .tmp3x, .tmp1x, ._, ._ }, |
| | 6200 | .{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ }, |
| | 6201 | .{ ._, ._pd, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ }, |
| | 6202 | .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, |
| | 6203 | .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, |
| 6199 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6204 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6200 | } }, | 6205 | } }, |
| 6201 | }, .{ | 6206 | }, .{ |
| 6202 | .required_features = .{ .cmov, .slow_incdec, null, null }, | 6207 | .required_features = .{ .sse2, null, null, null }, |
| 6203 | .src_constraints = .{ | 6208 | .src_constraints = .{ |
| 6204 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, | 6209 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, |
| 6205 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, | 6210 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, |
| 6206 | }, | 6211 | }, |
| 6207 | .patterns = &.{ | 6212 | .patterns = &.{ |
| 6208 | .{ .src = .{ .to_mem, .to_mem } }, | 6213 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6209 | }, | 6214 | }, |
| 6210 | .extra_temps = .{ | 6215 | .extra_temps = .{ |
| 6211 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6216 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6212 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 6217 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 6213 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 6218 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 6214 | .unused, | 6219 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 6215 | .unused, | 6220 | .unused, |
| 6216 | .unused, | 6221 | .unused, |
| 6217 | .unused, | 6222 | .unused, |
| ... | @@ -6221,29 +6226,34 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6221,29 +6226,34 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6221 | .dst_temps = .{.mem}, | 6226 | .dst_temps = .{.mem}, |
| 6222 | .clobbers = .{ .eflags = true }, | 6227 | .clobbers = .{ .eflags = true }, |
| 6223 | .each = .{ .once = &.{ | 6228 | .each = .{ .once = &.{ |
| 6224 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 6229 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 6225 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, | 6230 | .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6226 | .{ ._, ._, .movzx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, | 6231 | .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6227 | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, | 6232 | .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ }, |
| 6228 | .{ ._, ._ae, .cmov, .tmp1d, .tmp2d, ._, ._ }, | 6233 | .{ ._, ._pd, .max, .tmp3x, .tmp1x, ._, ._ }, |
| 6229 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, | 6234 | .{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .vp(.ord), ._ }, |
| 6230 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | 6235 | .{ ._, ._pd, .@"and", .tmp3x, .tmp1x, ._, ._ }, |
| | 6236 | .{ ._, ._pd, .andn, .tmp1x, .tmp2x, ._, ._ }, |
| | 6237 | .{ ._, ._pd, .@"or", .tmp1x, .tmp3x, ._, ._ }, |
| | 6238 | .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 6239 | .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, |
| 6231 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6240 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6232 | } }, | 6241 | } }, |
| 6233 | }, .{ | 6242 | }, .{ |
| 6234 | .required_features = .{ .cmov, null, null, null }, | 6243 | .required_features = .{ .sse, null, null, null }, |
| 6235 | .src_constraints = .{ | 6244 | .src_constraints = .{ |
| 6236 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, | 6245 | .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, |
| 6237 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, | 6246 | .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, |
| 6238 | }, | 6247 | }, |
| 6239 | .patterns = &.{ | 6248 | .patterns = &.{ |
| 6240 | .{ .src = .{ .to_mem, .to_mem } }, | 6249 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6241 | }, | 6250 | }, |
| | 6251 | .call_frame = .{ .alignment = .@"16" }, |
| 6242 | .extra_temps = .{ | 6252 | .extra_temps = .{ |
| 6243 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6253 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6244 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 6254 | .{ .type = .f64, .kind = .{ .reg = .xmm0 } }, |
| 6245 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 6255 | .{ .type = .f64, .kind = .{ .reg = .xmm1 } }, |
| 6246 | .unused, | 6256 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmax" } } }, |
| 6247 | .unused, | 6257 | .unused, |
| 6248 | .unused, | 6258 | .unused, |
| 6249 | .unused, | 6259 | .unused, |
| ... | @@ -6251,29 +6261,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6251,29 +6261,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6251 | .unused, | 6261 | .unused, |
| 6252 | }, | 6262 | }, |
| 6253 | .dst_temps = .{.mem}, | 6263 | .dst_temps = .{.mem}, |
| 6254 | .clobbers = .{ .eflags = true }, | 6264 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 6255 | .each = .{ .once = &.{ | 6265 | .each = .{ .once = &.{ |
| 6256 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 6266 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 6257 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, | 6267 | .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| 6258 | .{ ._, ._, .movzx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, | 6268 | .{ ._, ._ps, .xor, .tmp2x, .tmp2x, ._, ._ }, |
| 6259 | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, | 6269 | .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 6260 | .{ ._, ._ae, .cmov, .tmp1d, .tmp2d, ._, ._ }, | 6270 | .{ ._, ._ps, .movl, .tmp2x, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 6261 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, | 6271 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 6262 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | 6272 | .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| 6263 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | 6273 | .{ ._, ._, .add, .tmp0q, .si(8), ._, ._ }, |
| | 6274 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6264 | } }, | 6275 | } }, |
| 6265 | }, .{ | 6276 | }, .{ |
| 6266 | .required_features = .{ .slow_incdec, null, null, null }, | 6277 | .required_features = .{ .x87, .cmov, null, null }, |
| 6267 | .src_constraints = .{ | 6278 | .src_constraints = .{ |
| 6268 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, | 6279 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6269 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, | 6280 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6270 | }, | 6281 | }, |
| 6271 | .patterns = &.{ | 6282 | .patterns = &.{ |
| 6272 | .{ .src = .{ .to_mem, .to_mem } }, | 6283 | .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } }, |
| | 6284 | .{ .src = .{ .mem, .to_x87 } }, |
| | 6285 | .{ .src = .{ .to_x87, .to_x87 } }, |
| 6273 | }, | 6286 | }, |
| 6274 | .extra_temps = .{ | 6287 | .extra_temps = .{ |
| 6275 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6288 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 6276 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 6289 | .unused, |
| 6277 | .unused, | 6290 | .unused, |
| 6278 | .unused, | 6291 | .unused, |
| 6279 | .unused, | 6292 | .unused, |
| ... | @@ -6282,29 +6295,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6282,29 +6295,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6282 | .unused, | 6295 | .unused, |
| 6283 | .unused, | 6296 | .unused, |
| 6284 | }, | 6297 | }, |
| 6285 | .dst_temps = .{.mem}, | 6298 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }}, |
| 6286 | .clobbers = .{ .eflags = true }, | 6299 | .clobbers = .{ .eflags = true }, |
| 6287 | .each = .{ .once = &.{ | 6300 | .each = .{ .once = &.{ |
| 6288 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 6301 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 6289 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, | 6302 | .{ ._, .f_, .ucomi, .tmp0t, .tmp0t, ._, ._ }, |
| 6290 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, | 6303 | .{ ._, .f_u, .cmov, .tmp0t, .src1t, ._, ._ }, |
| 6291 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, | 6304 | .{ ._, .f_, .xch, .src1t, ._, ._, ._ }, |
| 6292 | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, | 6305 | .{ ._, .f_, .ucomi, .tmp0t, .src1t, ._, ._ }, |
| 6293 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, | 6306 | .{ ._, .f_, .xch, .src1t, ._, ._, ._ }, |
| 6294 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | 6307 | .{ ._, .f_nb, .cmov, .tmp0t, .src1t, ._, ._ }, |
| 6295 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6308 | .{ ._, .f_p, .st, .dst0t, ._, ._, ._ }, |
| 6296 | } }, | 6309 | } }, |
| 6297 | }, .{ | 6310 | }, .{ |
| | 6311 | .required_features = .{ .sahf, .x87, null, null }, |
| 6298 | .src_constraints = .{ | 6312 | .src_constraints = .{ |
| 6299 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, | 6313 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6300 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, | 6314 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6301 | }, | 6315 | }, |
| 6302 | .patterns = &.{ | 6316 | .patterns = &.{ |
| 6303 | .{ .src = .{ .to_mem, .to_mem } }, | 6317 | .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } }, |
| | 6318 | .{ .src = .{ .mem, .to_x87 } }, |
| | 6319 | .{ .src = .{ .to_x87, .to_x87 } }, |
| 6304 | }, | 6320 | }, |
| 6305 | .extra_temps = .{ | 6321 | .extra_temps = .{ |
| 6306 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6322 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 6307 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 6323 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 6308 | .unused, | 6324 | .unused, |
| 6309 | .unused, | 6325 | .unused, |
| 6310 | .unused, | 6326 | .unused, |
| ... | @@ -6313,90 +6329,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6313,90 +6329,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6313 | .unused, | 6329 | .unused, |
| 6314 | .unused, | 6330 | .unused, |
| 6315 | }, | 6331 | }, |
| 6316 | .dst_temps = .{.mem}, | 6332 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }}, |
| 6317 | .clobbers = .{ .eflags = true }, | 6333 | .clobbers = .{ .eflags = true }, |
| 6318 | .each = .{ .once = &.{ | 6334 | .each = .{ .once = &.{ |
| 6319 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 6335 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 6320 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, | 6336 | .{ ._, .f_, .ucom, .tmp0t, ._, ._, ._ }, |
| 6321 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, | 6337 | .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ }, |
| 6322 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, | 6338 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 6323 | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, | 6339 | .{ ._, ._p, .j, .@"0f", ._, ._, ._ }, |
| 6324 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, | 6340 | .{ ._, .f_, .xch, .src1t, ._, ._, ._ }, |
| 6325 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | 6341 | .{ ._, .f_, .ucom, .src1t, ._, ._, ._ }, |
| 6326 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | 6342 | .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ }, |
| 6327 | } }, | 6343 | .{ ._, .f_, .xch, .src1t, ._, ._, ._ }, |
| 6328 | }, .{ | 6344 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 6329 | .required_features = .{ .sse, .mmx, null, null }, | 6345 | .{ ._, ._b, .j, .@"1f", ._, ._, ._ }, |
| 6330 | .src_constraints = .{ | 6346 | .{ .@"0:", .f_p, .st, .tmp0t, ._, ._, ._ }, |
| 6331 | .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, | 6347 | .{ ._, .f_, .ld, .src1t, ._, ._, ._ }, |
| 6332 | .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, | 6348 | .{ .@"1:", .f_p, .st, .dst0t, ._, ._, ._ }, |
| 6333 | }, | 6349 | } }, |
| 6334 | .patterns = &.{ | 6350 | }, .{ |
| 6335 | .{ .src = .{ .to_mut_mmx, .mem } }, | 6351 | .required_features = .{ .@"64bit", .x87, null, null }, |
| 6336 | .{ .src = .{ .mem, .to_mut_mmx }, .commute = .{ 0, 1 } }, | | |
| 6337 | .{ .src = .{ .to_mut_mmx, .to_mmx } }, | | |
| 6338 | }, | | |
| 6339 | .dst_temps = .{.{ .ref = .src0 }}, | | |
| 6340 | .each = .{ .once = &.{ | | |
| 6341 | .{ ._, .p_w, .mins, .dst0q, .src1q, ._, ._ }, | | |
| 6342 | } }, | | |
| 6343 | }, .{ | | |
| 6344 | .required_features = .{ .avx, null, null, null }, | | |
| 6345 | .src_constraints = .{ | | |
| 6346 | .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, | | |
| 6347 | .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, | | |
| 6348 | }, | | |
| 6349 | .patterns = &.{ | | |
| 6350 | .{ .src = .{ .to_sse, .mem } }, | | |
| 6351 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, | | |
| 6352 | .{ .src = .{ .to_sse, .to_sse } }, | | |
| 6353 | }, | | |
| 6354 | .dst_temps = .{.{ .rc = .sse }}, | | |
| 6355 | .each = .{ .once = &.{ | | |
| 6356 | .{ ._, .vp_w, .mins, .dst0x, .src0x, .src1x, ._ }, | | |
| 6357 | } }, | | |
| 6358 | }, .{ | | |
| 6359 | .required_features = .{ .sse2, null, null, null }, | | |
| 6360 | .src_constraints = .{ | | |
| 6361 | .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, | | |
| 6362 | .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, | | |
| 6363 | }, | | |
| 6364 | .patterns = &.{ | | |
| 6365 | .{ .src = .{ .to_mut_sse, .mem } }, | | |
| 6366 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, | | |
| 6367 | .{ .src = .{ .to_mut_sse, .to_sse } }, | | |
| 6368 | }, | | |
| 6369 | .dst_temps = .{.{ .ref = .src0 }}, | | |
| 6370 | .each = .{ .once = &.{ | | |
| 6371 | .{ ._, .p_w, .mins, .dst0x, .src1x, ._, ._ }, | | |
| 6372 | } }, | | |
| 6373 | }, .{ | | |
| 6374 | .required_features = .{ .avx2, null, null, null }, | | |
| 6375 | .src_constraints = .{ | | |
| 6376 | .{ .scalar_signed_int = .{ .of = .yword, .is = .word } }, | | |
| 6377 | .{ .scalar_signed_int = .{ .of = .yword, .is = .word } }, | | |
| 6378 | }, | | |
| 6379 | .patterns = &.{ | | |
| 6380 | .{ .src = .{ .to_sse, .mem } }, | | |
| 6381 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, | | |
| 6382 | .{ .src = .{ .to_sse, .to_sse } }, | | |
| 6383 | }, | | |
| 6384 | .dst_temps = .{.{ .rc = .sse }}, | | |
| 6385 | .each = .{ .once = &.{ | | |
| 6386 | .{ ._, .vp_w, .mins, .dst0y, .src0y, .src1y, ._ }, | | |
| 6387 | } }, | | |
| 6388 | }, .{ | | |
| 6389 | .required_features = .{ .avx2, null, null, null }, | | |
| 6390 | .src_constraints = .{ | 6352 | .src_constraints = .{ |
| 6391 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } }, | 6353 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6392 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } }, | 6354 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6393 | }, | 6355 | }, |
| 6394 | .patterns = &.{ | 6356 | .patterns = &.{ |
| 6395 | .{ .src = .{ .to_mem, .to_mem } }, | 6357 | .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } }, |
| | 6358 | .{ .src = .{ .mem, .to_x87 } }, |
| | 6359 | .{ .src = .{ .to_x87, .to_x87 } }, |
| 6396 | }, | 6360 | }, |
| 6397 | .extra_temps = .{ | 6361 | .extra_temps = .{ |
| 6398 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6362 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 6399 | .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } }, | 6363 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 6400 | .unused, | 6364 | .unused, |
| 6401 | .unused, | 6365 | .unused, |
| 6402 | .unused, | 6366 | .unused, |
| ... | @@ -6405,28 +6369,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6405,28 +6369,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6405 | .unused, | 6369 | .unused, |
| 6406 | .unused, | 6370 | .unused, |
| 6407 | }, | 6371 | }, |
| 6408 | .dst_temps = .{.mem}, | 6372 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }}, |
| 6409 | .clobbers = .{ .eflags = true }, | 6373 | .clobbers = .{ .eflags = true }, |
| 6410 | .each = .{ .once = &.{ | 6374 | .each = .{ .once = &.{ |
| 6411 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 6375 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 6412 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | 6376 | .{ ._, .f_, .xam, ._, ._, ._, ._ }, |
| 6413 | .{ ._, .vp_w, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, | 6377 | .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ }, |
| 6414 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, | 6378 | .{ ._, ._, .@"test", .tmp1b, .si(0b0_1_000_100), ._, ._ }, |
| 6415 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | 6379 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 6416 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6380 | .{ ._, .f_, .xch, .src1t, ._, ._, ._ }, |
| | 6381 | .{ ._, .f_, .ucom, .src1t, ._, ._, ._ }, |
| | 6382 | .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ }, |
| | 6383 | .{ ._, .f_, .xch, .src1t, ._, ._, ._ }, |
| | 6384 | .{ ._, ._, .@"test", .tmp1b, .si(0b0_0_000_001), ._, ._ }, |
| | 6385 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 6386 | .{ .@"0:", .f_p, .st, .tmp0t, ._, ._, ._ }, |
| | 6387 | .{ ._, .f_, .ld, .src1t, ._, ._, ._ }, |
| | 6388 | .{ .@"1:", .f_p, .st, .dst0t, ._, ._, ._ }, |
| 6417 | } }, | 6389 | } }, |
| 6418 | }, .{ | 6390 | }, .{ |
| 6419 | .required_features = .{ .avx, null, null, null }, | 6391 | .required_features = .{ .x87, null, null, null }, |
| 6420 | .src_constraints = .{ | 6392 | .src_constraints = .{ |
| 6421 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, | 6393 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6422 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, | 6394 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6423 | }, | 6395 | }, |
| 6424 | .patterns = &.{ | 6396 | .patterns = &.{ |
| 6425 | .{ .src = .{ .to_mem, .to_mem } }, | 6397 | .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } }, |
| | 6398 | .{ .src = .{ .mem, .to_x87 } }, |
| | 6399 | .{ .src = .{ .to_x87, .to_x87 } }, |
| 6426 | }, | 6400 | }, |
| 6427 | .extra_temps = .{ | 6401 | .extra_temps = .{ |
| 6428 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6402 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 6429 | .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } }, | 6403 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 6430 | .unused, | 6404 | .unused, |
| 6431 | .unused, | 6405 | .unused, |
| 6432 | .unused, | 6406 | .unused, |
| ... | @@ -6435,29 +6409,37 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6435,29 +6409,37 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6435 | .unused, | 6409 | .unused, |
| 6436 | .unused, | 6410 | .unused, |
| 6437 | }, | 6411 | }, |
| 6438 | .dst_temps = .{.mem}, | 6412 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }}, |
| 6439 | .clobbers = .{ .eflags = true }, | 6413 | .clobbers = .{ .eflags = true }, |
| 6440 | .each = .{ .once = &.{ | 6414 | .each = .{ .once = &.{ |
| 6441 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 6415 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 6442 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 6416 | .{ ._, .f_, .ucom, .tmp0t, ._, ._, ._ }, |
| 6443 | .{ ._, .vp_w, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, | 6417 | .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ }, |
| 6444 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, | 6418 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 6445 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 6419 | .{ ._, ._p, .j, .@"0f", ._, ._, ._ }, |
| 6446 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6420 | .{ ._, .f_, .xch, .src1t, ._, ._, ._ }, |
| 6447 | } }, | 6421 | .{ ._, .f_, .ucom, .src1t, ._, ._, ._ }, |
| 6448 | }, .{ | 6422 | .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ }, |
| 6449 | .required_features = .{ .sse2, null, null, null }, | 6423 | .{ ._, .f_, .xch, .src1t, ._, ._, ._ }, |
| | 6424 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| | 6425 | .{ ._, ._b, .j, .@"1f", ._, ._, ._ }, |
| | 6426 | .{ .@"0:", .f_p, .st, .tmp0t, ._, ._, ._ }, |
| | 6427 | .{ ._, .f_, .ld, .src1t, ._, ._, ._ }, |
| | 6428 | .{ .@"1:", .f_p, .st, .dst0t, ._, ._, ._ }, |
| | 6429 | } }, |
| | 6430 | }, .{ |
| | 6431 | .required_features = .{ .x87, .cmov, null, null }, |
| 6450 | .src_constraints = .{ | 6432 | .src_constraints = .{ |
| 6451 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, | 6433 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6452 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, | 6434 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6453 | }, | 6435 | }, |
| 6454 | .patterns = &.{ | 6436 | .patterns = &.{ |
| 6455 | .{ .src = .{ .to_mem, .to_mem } }, | 6437 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6456 | }, | 6438 | }, |
| 6457 | .extra_temps = .{ | 6439 | .extra_temps = .{ |
| 6458 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6440 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6459 | .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } }, | 6441 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 6460 | .unused, | 6442 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 6461 | .unused, | 6443 | .unused, |
| 6462 | .unused, | 6444 | .unused, |
| 6463 | .unused, | 6445 | .unused, |
| ... | @@ -6469,26 +6451,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6469,26 +6451,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6469 | .clobbers = .{ .eflags = true }, | 6451 | .clobbers = .{ .eflags = true }, |
| 6470 | .each = .{ .once = &.{ | 6452 | .each = .{ .once = &.{ |
| 6471 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 6453 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6472 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 6454 | .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ }, |
| 6473 | .{ ._, .p_w, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | 6455 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 6474 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, | 6456 | .{ ._, .f_, .ucomi, .tmp1t, .tmp1t, ._, ._ }, |
| | 6457 | .{ ._, .f_u, .cmov, .tmp1t, .tmp2t, ._, ._ }, |
| | 6458 | .{ ._, .f_, .xch, .tmp2t, ._, ._, ._ }, |
| | 6459 | .{ ._, .f_, .ucomi, .tmp1t, .tmp2t, ._, ._ }, |
| | 6460 | .{ ._, .f_, .xch, .tmp2t, ._, ._, ._ }, |
| | 6461 | .{ ._, .f_nb, .cmov, .tmp1t, .tmp2t, ._, ._ }, |
| | 6462 | .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_size), ._, ._, ._ }, |
| | 6463 | .{ ._, .f_p, .st, .tmp2t, ._, ._, ._ }, |
| 6475 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 6464 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6476 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6465 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6477 | } }, | 6466 | } }, |
| 6478 | }, .{ | 6467 | }, .{ |
| 6479 | .required_features = .{ .cmov, null, null, null }, | 6468 | .required_features = .{ .sahf, .x87, null, null }, |
| 6480 | .src_constraints = .{ | 6469 | .src_constraints = .{ |
| 6481 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, | 6470 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6482 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, | 6471 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6483 | }, | 6472 | }, |
| 6484 | .patterns = &.{ | 6473 | .patterns = &.{ |
| 6485 | .{ .src = .{ .to_mem, .to_mem } }, | 6474 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6486 | }, | 6475 | }, |
| 6487 | .extra_temps = .{ | 6476 | .extra_temps = .{ |
| 6488 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6477 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6489 | .{ .type = .i16, .kind = .{ .rc = .general_purpose } }, | 6478 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 6490 | .unused, | 6479 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 6491 | .unused, | 6480 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 6492 | .unused, | 6481 | .unused, |
| 6493 | .unused, | 6482 | .unused, |
| 6494 | .unused, | 6483 | .unused, |
| ... | @@ -6499,26 +6488,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6499,26 +6488,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6499 | .clobbers = .{ .eflags = true }, | 6488 | .clobbers = .{ .eflags = true }, |
| 6500 | .each = .{ .once = &.{ | 6489 | .each = .{ .once = &.{ |
| 6501 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 6490 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6502 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, | 6491 | .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ }, |
| 6503 | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, | 6492 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 6504 | .{ ._, ._ge, .cmov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, | 6493 | .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ }, |
| 6505 | .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, | 6494 | .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ }, |
| 6506 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, | 6495 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| | 6496 | .{ ._, ._p, .j, .@"1f", ._, ._, ._ }, |
| | 6497 | .{ ._, .f_, .xch, .tmp2t, ._, ._, ._ }, |
| | 6498 | .{ ._, .f_, .ucom, .tmp2t, ._, ._, ._ }, |
| | 6499 | .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ }, |
| | 6500 | .{ ._, .f_, .xch, .tmp2t, ._, ._, ._ }, |
| | 6501 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| | 6502 | .{ ._, ._b, .j, .@"2f", ._, ._, ._ }, |
| | 6503 | .{ .@"1:", .f_p, .st, .tmp1t, ._, ._, ._ }, |
| | 6504 | .{ ._, .f_, .ld, .tmp2t, ._, ._, ._ }, |
| | 6505 | .{ .@"2:", .f_p, .st, .memia(.dst0t, .tmp0, .add_size), ._, ._, ._ }, |
| | 6506 | .{ ._, .f_p, .st, .tmp2t, ._, ._, ._ }, |
| | 6507 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6507 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6508 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6508 | } }, | 6509 | } }, |
| 6509 | }, .{ | 6510 | }, .{ |
| | 6511 | .required_features = .{ .@"64bit", .x87, null, null }, |
| 6510 | .src_constraints = .{ | 6512 | .src_constraints = .{ |
| 6511 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, | 6513 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6512 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, | 6514 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6513 | }, | 6515 | }, |
| 6514 | .patterns = &.{ | 6516 | .patterns = &.{ |
| 6515 | .{ .src = .{ .to_mem, .to_mem } }, | 6517 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6516 | }, | 6518 | }, |
| 6517 | .extra_temps = .{ | 6519 | .extra_temps = .{ |
| 6518 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6520 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6519 | .{ .type = .i16, .kind = .{ .rc = .general_purpose } }, | 6521 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 6520 | .unused, | 6522 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 6521 | .unused, | 6523 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 6522 | .unused, | 6524 | .unused, |
| 6523 | .unused, | 6525 | .unused, |
| 6524 | .unused, | 6526 | .unused, |
| ... | @@ -6529,90 +6531,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6529,90 +6531,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6529 | .clobbers = .{ .eflags = true }, | 6531 | .clobbers = .{ .eflags = true }, |
| 6530 | .each = .{ .once = &.{ | 6532 | .each = .{ .once = &.{ |
| 6531 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 6533 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6532 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, | 6534 | .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ }, |
| 6533 | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, | 6535 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 6534 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, | 6536 | .{ ._, .f_, .xam, ._, ._, ._, ._ }, |
| 6535 | .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, | 6537 | .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ }, |
| 6536 | .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, | 6538 | .{ ._, ._, .@"test", .tmp3b, .si(0b0_1_000_100), ._, ._ }, |
| 6537 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, | 6539 | .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, |
| | 6540 | .{ ._, .f_, .xch, .tmp2t, ._, ._, ._ }, |
| | 6541 | .{ ._, .f_, .ucom, .tmp2t, ._, ._, ._ }, |
| | 6542 | .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ }, |
| | 6543 | .{ ._, .f_, .xch, .tmp2t, ._, ._, ._ }, |
| | 6544 | .{ ._, ._, .@"test", .tmp3b, .si(0b0_0_000_001), ._, ._ }, |
| | 6545 | .{ ._, ._nz, .j, .@"2f", ._, ._, ._ }, |
| | 6546 | .{ .@"1:", .f_p, .st, .tmp1t, ._, ._, ._ }, |
| | 6547 | .{ ._, .f_, .ld, .tmp2t, ._, ._, ._ }, |
| | 6548 | .{ .@"2:", .f_p, .st, .memia(.dst0t, .tmp0, .add_size), ._, ._, ._ }, |
| | 6549 | .{ ._, .f_p, .st, .tmp2t, ._, ._, ._ }, |
| | 6550 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6538 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6551 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6539 | } }, | 6552 | } }, |
| 6540 | }, .{ | 6553 | }, .{ |
| 6541 | .required_features = .{ .avx, null, null, null }, | 6554 | .required_features = .{ .x87, null, null, null }, |
| 6542 | .src_constraints = .{ | | |
| 6543 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, | | |
| 6544 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, | | |
| 6545 | }, | | |
| 6546 | .patterns = &.{ | | |
| 6547 | .{ .src = .{ .to_sse, .mem } }, | | |
| 6548 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, | | |
| 6549 | .{ .src = .{ .to_sse, .to_sse } }, | | |
| 6550 | }, | | |
| 6551 | .dst_temps = .{.{ .rc = .sse }}, | | |
| 6552 | .each = .{ .once = &.{ | | |
| 6553 | .{ ._, .vp_w, .minu, .dst0x, .src0x, .src1x, ._ }, | | |
| 6554 | } }, | | |
| 6555 | }, .{ | | |
| 6556 | .required_features = .{ .sse4_1, null, null, null }, | | |
| 6557 | .src_constraints = .{ | | |
| 6558 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, | | |
| 6559 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, | | |
| 6560 | }, | | |
| 6561 | .patterns = &.{ | | |
| 6562 | .{ .src = .{ .to_mut_sse, .mem } }, | | |
| 6563 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, | | |
| 6564 | .{ .src = .{ .to_mut_sse, .to_sse } }, | | |
| 6565 | }, | | |
| 6566 | .dst_temps = .{.{ .ref = .src0 }}, | | |
| 6567 | .each = .{ .once = &.{ | | |
| 6568 | .{ ._, .p_w, .minu, .dst0x, .src1x, ._, ._ }, | | |
| 6569 | } }, | | |
| 6570 | }, .{ | | |
| 6571 | .required_features = .{ .sse2, null, null, null }, | | |
| 6572 | .src_constraints = .{ | | |
| 6573 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, | | |
| 6574 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, | | |
| 6575 | }, | | |
| 6576 | .patterns = &.{ | | |
| 6577 | .{ .src = .{ .to_mut_sse, .mem } }, | | |
| 6578 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, | | |
| 6579 | .{ .src = .{ .to_mut_sse, .to_sse } }, | | |
| 6580 | }, | | |
| 6581 | .dst_temps = .{.{ .rc = .sse }}, | | |
| 6582 | .each = .{ .once = &.{ | | |
| 6583 | .{ ._, ._dqa, .mov, .dst0x, .src0x, ._, ._ }, | | |
| 6584 | .{ ._, .p_w, .subus, .src0x, .src1x, ._, ._ }, | | |
| 6585 | .{ ._, .p_w, .sub, .dst0x, .src0x, ._, ._ }, | | |
| 6586 | } }, | | |
| 6587 | }, .{ | | |
| 6588 | .required_features = .{ .avx2, null, null, null }, | | |
| 6589 | .src_constraints = .{ | | |
| 6590 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } }, | | |
| 6591 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } }, | | |
| 6592 | }, | | |
| 6593 | .patterns = &.{ | | |
| 6594 | .{ .src = .{ .to_sse, .mem } }, | | |
| 6595 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, | | |
| 6596 | .{ .src = .{ .to_sse, .to_sse } }, | | |
| 6597 | }, | | |
| 6598 | .dst_temps = .{.{ .rc = .sse }}, | | |
| 6599 | .each = .{ .once = &.{ | | |
| 6600 | .{ ._, .vp_w, .minu, .dst0y, .src0y, .src1y, ._ }, | | |
| 6601 | } }, | | |
| 6602 | }, .{ | | |
| 6603 | .required_features = .{ .avx2, null, null, null }, | | |
| 6604 | .src_constraints = .{ | 6555 | .src_constraints = .{ |
| 6605 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } }, | 6556 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6606 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } }, | 6557 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6607 | }, | 6558 | }, |
| 6608 | .patterns = &.{ | 6559 | .patterns = &.{ |
| 6609 | .{ .src = .{ .to_mem, .to_mem } }, | 6560 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6610 | }, | 6561 | }, |
| 6611 | .extra_temps = .{ | 6562 | .extra_temps = .{ |
| 6612 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6563 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6613 | .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } }, | 6564 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 6614 | .unused, | 6565 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 6615 | .unused, | 6566 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 6616 | .unused, | 6567 | .unused, |
| 6617 | .unused, | 6568 | .unused, |
| 6618 | .unused, | 6569 | .unused, |
| ... | @@ -6623,24 +6574,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6623,24 +6574,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6623 | .clobbers = .{ .eflags = true }, | 6574 | .clobbers = .{ .eflags = true }, |
| 6624 | .each = .{ .once = &.{ | 6575 | .each = .{ .once = &.{ |
| 6625 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 6576 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6626 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | 6577 | .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ }, |
| 6627 | .{ ._, .vp_w, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, | 6578 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 6628 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, | 6579 | .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ }, |
| 6629 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | 6580 | .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ }, |
| | 6581 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| | 6582 | .{ ._, ._p, .j, .@"1f", ._, ._, ._ }, |
| | 6583 | .{ ._, .f_, .xch, .tmp2t, ._, ._, ._ }, |
| | 6584 | .{ ._, .f_, .ucom, .tmp2t, ._, ._, ._ }, |
| | 6585 | .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ }, |
| | 6586 | .{ ._, .f_, .xch, .tmp2t, ._, ._, ._ }, |
| | 6587 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| | 6588 | .{ ._, ._b, .j, .@"2f", ._, ._, ._ }, |
| | 6589 | .{ .@"1:", .f_p, .st, .tmp1t, ._, ._, ._ }, |
| | 6590 | .{ ._, .f_, .ld, .tmp2t, ._, ._, ._ }, |
| | 6591 | .{ .@"2:", .f_p, .st, .memia(.dst0t, .tmp0, .add_size), ._, ._, ._ }, |
| | 6592 | .{ ._, .f_p, .st, .tmp2t, ._, ._, ._ }, |
| | 6593 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6630 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6594 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6631 | } }, | 6595 | } }, |
| 6632 | }, .{ | 6596 | }, .{ |
| 6633 | .required_features = .{ .avx, null, null, null }, | 6597 | .required_features = .{ .sse, null, null, null }, |
| 6634 | .src_constraints = .{ | 6598 | .src_constraints = .{ |
| 6635 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, | 6599 | .{ .scalar_float = .{ .of = .xword, .is = .xword } }, |
| 6636 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, | 6600 | .{ .scalar_float = .{ .of = .xword, .is = .xword } }, |
| 6637 | }, | 6601 | }, |
| 6638 | .patterns = &.{ | 6602 | .patterns = &.{ |
| 6639 | .{ .src = .{ .to_mem, .to_mem } }, | 6603 | .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } }, |
| 6640 | }, | 6604 | }, |
| | 6605 | .call_frame = .{ .alignment = .@"16" }, |
| 6641 | .extra_temps = .{ | 6606 | .extra_temps = .{ |
| 6642 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6607 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } }, |
| 6643 | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, | 6608 | .unused, |
| 6644 | .unused, | 6609 | .unused, |
| 6645 | .unused, | 6610 | .unused, |
| 6646 | .unused, | 6611 | .unused, |
| ... | @@ -6649,30 +6614,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6649,30 +6614,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6649 | .unused, | 6614 | .unused, |
| 6650 | .unused, | 6615 | .unused, |
| 6651 | }, | 6616 | }, |
| 6652 | .dst_temps = .{.mem}, | 6617 | .dst_temps = .{.{ .ref = .src0 }}, |
| 6653 | .clobbers = .{ .eflags = true }, | 6618 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 6654 | .each = .{ .once = &.{ | 6619 | .each = .{ .once = &.{ |
| 6655 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 6620 | .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, |
| 6656 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | | |
| 6657 | .{ ._, .vp_w, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, | | |
| 6658 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, | | |
| 6659 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | | |
| 6660 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 6661 | } }, | 6621 | } }, |
| 6662 | }, .{ | 6622 | }, .{ |
| 6663 | .required_features = .{ .sse4_1, null, null, null }, | 6623 | .required_features = .{ .avx, null, null, null }, |
| 6664 | .src_constraints = .{ | 6624 | .src_constraints = .{ |
| 6665 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, | 6625 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 6666 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, | 6626 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 6667 | }, | 6627 | }, |
| 6668 | .patterns = &.{ | 6628 | .patterns = &.{ |
| 6669 | .{ .src = .{ .to_mem, .to_mem } }, | 6629 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6670 | }, | 6630 | }, |
| | 6631 | .call_frame = .{ .alignment = .@"16" }, |
| 6671 | .extra_temps = .{ | 6632 | .extra_temps = .{ |
| 6672 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6633 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6673 | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, | 6634 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 6674 | .unused, | 6635 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| 6675 | .unused, | 6636 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } }, |
| 6676 | .unused, | 6637 | .unused, |
| 6677 | .unused, | 6638 | .unused, |
| 6678 | .unused, | 6639 | .unused, |
| ... | @@ -6680,29 +6641,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6680,29 +6641,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6680 | .unused, | 6641 | .unused, |
| 6681 | }, | 6642 | }, |
| 6682 | .dst_temps = .{.mem}, | 6643 | .dst_temps = .{.mem}, |
| 6683 | .clobbers = .{ .eflags = true }, | 6644 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 6684 | .each = .{ .once = &.{ | 6645 | .each = .{ .once = &.{ |
| 6685 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 6646 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 6686 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 6647 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6687 | .{ ._, .p_w, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | 6648 | .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6688 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, | 6649 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 6689 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 6650 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 6651 | .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, |
| 6690 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6652 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6691 | } }, | 6653 | } }, |
| 6692 | }, .{ | 6654 | }, .{ |
| 6693 | .required_features = .{ .sse2, null, null, null }, | 6655 | .required_features = .{ .sse2, null, null, null }, |
| 6694 | .src_constraints = .{ | 6656 | .src_constraints = .{ |
| 6695 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, | 6657 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 6696 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, | 6658 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 6697 | }, | 6659 | }, |
| 6698 | .patterns = &.{ | 6660 | .patterns = &.{ |
| 6699 | .{ .src = .{ .to_mem, .to_mem } }, | 6661 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6700 | }, | 6662 | }, |
| | 6663 | .call_frame = .{ .alignment = .@"16" }, |
| 6701 | .extra_temps = .{ | 6664 | .extra_temps = .{ |
| 6702 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6665 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6703 | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, | 6666 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 6704 | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, | 6667 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| 6705 | .unused, | 6668 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } }, |
| 6706 | .unused, | 6669 | .unused, |
| 6707 | .unused, | 6670 | .unused, |
| 6708 | .unused, | 6671 | .unused, |
| ... | @@ -6710,31 +6673,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6710,31 +6673,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6710 | .unused, | 6673 | .unused, |
| 6711 | }, | 6674 | }, |
| 6712 | .dst_temps = .{.mem}, | 6675 | .dst_temps = .{.mem}, |
| 6713 | .clobbers = .{ .eflags = true }, | 6676 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 6714 | .each = .{ .once = &.{ | 6677 | .each = .{ .once = &.{ |
| 6715 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 6678 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 6716 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 6679 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6717 | .{ ._, ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ }, | 6680 | .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6718 | .{ ._, .p_w, .subus, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | 6681 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 6719 | .{ ._, .p_w, .sub, .tmp2x, .tmp1x, ._, ._ }, | 6682 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6720 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp2x, ._, ._ }, | 6683 | .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, |
| 6721 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | | |
| 6722 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6684 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6723 | } }, | 6685 | } }, |
| 6724 | }, .{ | 6686 | }, .{ |
| 6725 | .required_features = .{ .cmov, null, null, null }, | 6687 | .required_features = .{ .sse, null, null, null }, |
| 6726 | .src_constraints = .{ | 6688 | .src_constraints = .{ |
| 6727 | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, | 6689 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 6728 | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, | 6690 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 6729 | }, | 6691 | }, |
| 6730 | .patterns = &.{ | 6692 | .patterns = &.{ |
| 6731 | .{ .src = .{ .to_mem, .to_mem } }, | 6693 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6732 | }, | 6694 | }, |
| | 6695 | .call_frame = .{ .alignment = .@"16" }, |
| 6733 | .extra_temps = .{ | 6696 | .extra_temps = .{ |
| 6734 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6697 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6735 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, | 6698 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 6736 | .unused, | 6699 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| 6737 | .unused, | 6700 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } }, |
| 6738 | .unused, | 6701 | .unused, |
| 6739 | .unused, | 6702 | .unused, |
| 6740 | .unused, | 6703 | .unused, |
| ... | @@ -6742,19 +6705,1411 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6742,19 +6705,1411 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6742 | .unused, | 6705 | .unused, |
| 6743 | }, | 6706 | }, |
| 6744 | .dst_temps = .{.mem}, | 6707 | .dst_temps = .{.mem}, |
| 6745 | .clobbers = .{ .eflags = true }, | 6708 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 6746 | .each = .{ .once = &.{ | 6709 | .each = .{ .once = &.{ |
| 6747 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 6710 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 6748 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, | 6711 | .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6749 | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, | 6712 | .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6750 | .{ ._, ._ae, .cmov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, | 6713 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 6751 | .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, | 6714 | .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6752 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, | 6715 | .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, |
| 6753 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6716 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6754 | } }, | 6717 | } }, |
| 6755 | }, .{ | 6718 | } }) catch |err| switch (err) { |
| 6756 | .src_constraints = .{ | 6719 | error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{ |
| 6757 | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, | 6720 | @tagName(air_tag), |
| | 6721 | cg.typeOf(bin_op.lhs).fmt(pt), |
| | 6722 | ops[0].tracking(cg), |
| | 6723 | ops[1].tracking(cg), |
| | 6724 | }), |
| | 6725 | else => |e| return e, |
| | 6726 | }; |
| | 6727 | try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); |
| | 6728 | }, |
| | 6729 | .min => |air_tag| if (use_old) try cg.airBinOp(inst, air_tag) else { |
| | 6730 | const bin_op = air_datas[@intFromEnum(inst)].bin_op; |
| | 6731 | var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs }); |
| | 6732 | var res: [1]Temp = undefined; |
| | 6733 | cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{ |
| | 6734 | .required_features = .{ .cmov, null, null, null }, |
| | 6735 | .src_constraints = .{ .{ .signed_int = .byte }, .{ .signed_int = .byte } }, |
| | 6736 | .patterns = &.{ |
| | 6737 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| | 6738 | }, |
| | 6739 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 6740 | .clobbers = .{ .eflags = true }, |
| | 6741 | .each = .{ .once = &.{ |
| | 6742 | .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ }, |
| | 6743 | .{ ._, ._ge, .cmov, .dst0d, .src1d, ._, ._ }, |
| | 6744 | } }, |
| | 6745 | }, .{ |
| | 6746 | .src_constraints = .{ .{ .signed_int = .byte }, .{ .signed_int = .byte } }, |
| | 6747 | .patterns = &.{ |
| | 6748 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 6749 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 6750 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| | 6751 | }, |
| | 6752 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 6753 | .clobbers = .{ .eflags = true }, |
| | 6754 | .each = .{ .once = &.{ |
| | 6755 | .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ }, |
| | 6756 | .{ ._, ._nge, .j, .@"0f", ._, ._, ._ }, |
| | 6757 | .{ ._, ._, .mov, .dst0b, .src1b, ._, ._ }, |
| | 6758 | } }, |
| | 6759 | }, .{ |
| | 6760 | .required_features = .{ .cmov, null, null, null }, |
| | 6761 | .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte } }, |
| | 6762 | .patterns = &.{ |
| | 6763 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| | 6764 | }, |
| | 6765 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 6766 | .clobbers = .{ .eflags = true }, |
| | 6767 | .each = .{ .once = &.{ |
| | 6768 | .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ }, |
| | 6769 | .{ ._, ._ae, .cmov, .dst0d, .src1d, ._, ._ }, |
| | 6770 | } }, |
| | 6771 | }, .{ |
| | 6772 | .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte } }, |
| | 6773 | .patterns = &.{ |
| | 6774 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 6775 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 6776 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| | 6777 | }, |
| | 6778 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 6779 | .clobbers = .{ .eflags = true }, |
| | 6780 | .each = .{ .once = &.{ |
| | 6781 | .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ }, |
| | 6782 | .{ ._, ._nae, .j, .@"0f", ._, ._, ._ }, |
| | 6783 | .{ ._, ._, .mov, .dst0b, .src1b, ._, ._ }, |
| | 6784 | } }, |
| | 6785 | }, .{ |
| | 6786 | .required_features = .{ .cmov, null, null, null }, |
| | 6787 | .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word } }, |
| | 6788 | .patterns = &.{ |
| | 6789 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 6790 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 6791 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| | 6792 | }, |
| | 6793 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 6794 | .clobbers = .{ .eflags = true }, |
| | 6795 | .each = .{ .once = &.{ |
| | 6796 | .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ }, |
| | 6797 | .{ ._, ._ge, .cmov, .dst0w, .src1w, ._, ._ }, |
| | 6798 | } }, |
| | 6799 | }, .{ |
| | 6800 | .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word } }, |
| | 6801 | .patterns = &.{ |
| | 6802 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 6803 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 6804 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| | 6805 | }, |
| | 6806 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 6807 | .clobbers = .{ .eflags = true }, |
| | 6808 | .each = .{ .once = &.{ |
| | 6809 | .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ }, |
| | 6810 | .{ ._, ._nge, .j, .@"0f", ._, ._, ._ }, |
| | 6811 | .{ ._, ._, .mov, .dst0w, .src1w, ._, ._ }, |
| | 6812 | } }, |
| | 6813 | }, .{ |
| | 6814 | .required_features = .{ .cmov, null, null, null }, |
| | 6815 | .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word } }, |
| | 6816 | .patterns = &.{ |
| | 6817 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 6818 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 6819 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| | 6820 | }, |
| | 6821 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 6822 | .clobbers = .{ .eflags = true }, |
| | 6823 | .each = .{ .once = &.{ |
| | 6824 | .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ }, |
| | 6825 | .{ ._, ._ae, .cmov, .dst0w, .src1w, ._, ._ }, |
| | 6826 | } }, |
| | 6827 | }, .{ |
| | 6828 | .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word } }, |
| | 6829 | .patterns = &.{ |
| | 6830 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 6831 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 6832 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| | 6833 | }, |
| | 6834 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 6835 | .clobbers = .{ .eflags = true }, |
| | 6836 | .each = .{ .once = &.{ |
| | 6837 | .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ }, |
| | 6838 | .{ ._, ._nae, .j, .@"0f", ._, ._, ._ }, |
| | 6839 | .{ ._, ._, .mov, .dst0w, .src1w, ._, ._ }, |
| | 6840 | } }, |
| | 6841 | }, .{ |
| | 6842 | .required_features = .{ .cmov, null, null, null }, |
| | 6843 | .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword } }, |
| | 6844 | .patterns = &.{ |
| | 6845 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 6846 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 6847 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| | 6848 | }, |
| | 6849 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 6850 | .clobbers = .{ .eflags = true }, |
| | 6851 | .each = .{ .once = &.{ |
| | 6852 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, |
| | 6853 | .{ ._, ._ge, .cmov, .dst0d, .src1d, ._, ._ }, |
| | 6854 | } }, |
| | 6855 | }, .{ |
| | 6856 | .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword } }, |
| | 6857 | .patterns = &.{ |
| | 6858 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 6859 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 6860 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| | 6861 | }, |
| | 6862 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 6863 | .clobbers = .{ .eflags = true }, |
| | 6864 | .each = .{ .once = &.{ |
| | 6865 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, |
| | 6866 | .{ ._, ._nge, .j, .@"0f", ._, ._, ._ }, |
| | 6867 | .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ }, |
| | 6868 | } }, |
| | 6869 | }, .{ |
| | 6870 | .required_features = .{ .cmov, null, null, null }, |
| | 6871 | .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword } }, |
| | 6872 | .patterns = &.{ |
| | 6873 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 6874 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 6875 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| | 6876 | }, |
| | 6877 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 6878 | .clobbers = .{ .eflags = true }, |
| | 6879 | .each = .{ .once = &.{ |
| | 6880 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, |
| | 6881 | .{ ._, ._ae, .cmov, .dst0d, .src1d, ._, ._ }, |
| | 6882 | } }, |
| | 6883 | }, .{ |
| | 6884 | .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword } }, |
| | 6885 | .patterns = &.{ |
| | 6886 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 6887 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 6888 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| | 6889 | }, |
| | 6890 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 6891 | .clobbers = .{ .eflags = true }, |
| | 6892 | .each = .{ .once = &.{ |
| | 6893 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, |
| | 6894 | .{ ._, ._nae, .j, .@"0f", ._, ._, ._ }, |
| | 6895 | .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ }, |
| | 6896 | } }, |
| | 6897 | }, .{ |
| | 6898 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| | 6899 | .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword } }, |
| | 6900 | .patterns = &.{ |
| | 6901 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 6902 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 6903 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| | 6904 | }, |
| | 6905 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 6906 | .clobbers = .{ .eflags = true }, |
| | 6907 | .each = .{ .once = &.{ |
| | 6908 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, |
| | 6909 | .{ ._, ._ge, .cmov, .dst0q, .src1q, ._, ._ }, |
| | 6910 | } }, |
| | 6911 | }, .{ |
| | 6912 | .required_features = .{ .@"64bit", null, null, null }, |
| | 6913 | .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword } }, |
| | 6914 | .patterns = &.{ |
| | 6915 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 6916 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 6917 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| | 6918 | }, |
| | 6919 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 6920 | .clobbers = .{ .eflags = true }, |
| | 6921 | .each = .{ .once = &.{ |
| | 6922 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, |
| | 6923 | .{ ._, ._nge, .j, .@"0f", ._, ._, ._ }, |
| | 6924 | .{ ._, ._, .mov, .dst0q, .src1q, ._, ._ }, |
| | 6925 | } }, |
| | 6926 | }, .{ |
| | 6927 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| | 6928 | .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword } }, |
| | 6929 | .patterns = &.{ |
| | 6930 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 6931 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 6932 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| | 6933 | }, |
| | 6934 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 6935 | .clobbers = .{ .eflags = true }, |
| | 6936 | .each = .{ .once = &.{ |
| | 6937 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, |
| | 6938 | .{ ._, ._ae, .cmov, .dst0q, .src1q, ._, ._ }, |
| | 6939 | } }, |
| | 6940 | }, .{ |
| | 6941 | .required_features = .{ .@"64bit", null, null, null }, |
| | 6942 | .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword } }, |
| | 6943 | .patterns = &.{ |
| | 6944 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 6945 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 6946 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| | 6947 | }, |
| | 6948 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 6949 | .clobbers = .{ .eflags = true }, |
| | 6950 | .each = .{ .once = &.{ |
| | 6951 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, |
| | 6952 | .{ ._, ._nae, .j, .@"0f", ._, ._, ._ }, |
| | 6953 | .{ ._, ._, .mov, .dst0q, .src1q, ._, ._ }, |
| | 6954 | } }, |
| | 6955 | }, .{ |
| | 6956 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| | 6957 | .src_constraints = .{ .any_signed_int, .any_signed_int }, |
| | 6958 | .patterns = &.{ |
| | 6959 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 6960 | }, |
| | 6961 | .extra_temps = .{ |
| | 6962 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| | 6963 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| | 6964 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| | 6965 | .unused, |
| | 6966 | .unused, |
| | 6967 | .unused, |
| | 6968 | .unused, |
| | 6969 | .unused, |
| | 6970 | .unused, |
| | 6971 | }, |
| | 6972 | .dst_temps = .{.mem}, |
| | 6973 | .clobbers = .{ .eflags = true }, |
| | 6974 | .each = .{ .once = &.{ |
| | 6975 | .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ }, |
| | 6976 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| | 6977 | .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ }, |
| | 6978 | .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ }, |
| | 6979 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 6980 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 6981 | .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ }, |
| | 6982 | .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ }, |
| | 6983 | .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, |
| | 6984 | .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ }, |
| | 6985 | .{ ._, ._ge, .cmov, .tmp0p, .tmp1p, ._, ._ }, |
| | 6986 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| | 6987 | .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ }, |
| | 6988 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| | 6989 | } }, |
| | 6990 | }, .{ |
| | 6991 | .required_features = .{ .@"64bit", null, null, null }, |
| | 6992 | .src_constraints = .{ .any_signed_int, .any_signed_int }, |
| | 6993 | .patterns = &.{ |
| | 6994 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 6995 | }, |
| | 6996 | .extra_temps = .{ |
| | 6997 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| | 6998 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| | 6999 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| | 7000 | .unused, |
| | 7001 | .unused, |
| | 7002 | .unused, |
| | 7003 | .unused, |
| | 7004 | .unused, |
| | 7005 | .unused, |
| | 7006 | }, |
| | 7007 | .dst_temps = .{.mem}, |
| | 7008 | .clobbers = .{ .eflags = true }, |
| | 7009 | .each = .{ .once = &.{ |
| | 7010 | .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ }, |
| | 7011 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| | 7012 | .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ }, |
| | 7013 | .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ }, |
| | 7014 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 7015 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 7016 | .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ }, |
| | 7017 | .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ }, |
| | 7018 | .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, |
| | 7019 | .{ ._, ._nge, .j, .@"0f", ._, ._, ._ }, |
| | 7020 | .{ ._, ._, .lea, .tmp0p, .mem(.src1), ._, ._ }, |
| | 7021 | .{ .@"0:", ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| | 7022 | .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ }, |
| | 7023 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| | 7024 | } }, |
| | 7025 | }, .{ |
| | 7026 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| | 7027 | .src_constraints = .{ .any_unsigned_int, .any_unsigned_int }, |
| | 7028 | .patterns = &.{ |
| | 7029 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7030 | }, |
| | 7031 | .extra_temps = .{ |
| | 7032 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| | 7033 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| | 7034 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| | 7035 | .unused, |
| | 7036 | .unused, |
| | 7037 | .unused, |
| | 7038 | .unused, |
| | 7039 | .unused, |
| | 7040 | .unused, |
| | 7041 | }, |
| | 7042 | .dst_temps = .{.mem}, |
| | 7043 | .clobbers = .{ .eflags = true }, |
| | 7044 | .each = .{ .once = &.{ |
| | 7045 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ }, |
| | 7046 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| | 7047 | .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ }, |
| | 7048 | .{ ._, ._, .sbb, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ }, |
| | 7049 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 7050 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 7051 | .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, |
| | 7052 | .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ }, |
| | 7053 | .{ ._, ._ae, .cmov, .tmp0p, .tmp1p, ._, ._ }, |
| | 7054 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| | 7055 | .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ }, |
| | 7056 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| | 7057 | } }, |
| | 7058 | }, .{ |
| | 7059 | .required_features = .{ .@"64bit", null, null, null }, |
| | 7060 | .src_constraints = .{ .any_unsigned_int, .any_unsigned_int }, |
| | 7061 | .patterns = &.{ |
| | 7062 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7063 | }, |
| | 7064 | .extra_temps = .{ |
| | 7065 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| | 7066 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| | 7067 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| | 7068 | .unused, |
| | 7069 | .unused, |
| | 7070 | .unused, |
| | 7071 | .unused, |
| | 7072 | .unused, |
| | 7073 | .unused, |
| | 7074 | }, |
| | 7075 | .dst_temps = .{.mem}, |
| | 7076 | .clobbers = .{ .eflags = true }, |
| | 7077 | .each = .{ .once = &.{ |
| | 7078 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ }, |
| | 7079 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| | 7080 | .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ }, |
| | 7081 | .{ ._, ._, .sbb, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ }, |
| | 7082 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 7083 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 7084 | .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, |
| | 7085 | .{ ._, ._nae, .j, .@"0f", ._, ._, ._ }, |
| | 7086 | .{ ._, ._, .lea, .tmp0p, .mem(.src1), ._, ._ }, |
| | 7087 | .{ .@"0:", ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| | 7088 | .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ }, |
| | 7089 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| | 7090 | } }, |
| | 7091 | }, .{ |
| | 7092 | .required_features = .{ .avx, null, null, null }, |
| | 7093 | .src_constraints = .{ |
| | 7094 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 7095 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 7096 | }, |
| | 7097 | .patterns = &.{ |
| | 7098 | .{ .src = .{ .to_sse, .mem } }, |
| | 7099 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 7100 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 7101 | }, |
| | 7102 | .dst_temps = .{.{ .rc = .sse }}, |
| | 7103 | .each = .{ .once = &.{ |
| | 7104 | .{ ._, .vp_b, .mins, .dst0x, .src0x, .src1x, ._ }, |
| | 7105 | } }, |
| | 7106 | }, .{ |
| | 7107 | .required_features = .{ .sse4_1, null, null, null }, |
| | 7108 | .src_constraints = .{ |
| | 7109 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 7110 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 7111 | }, |
| | 7112 | .patterns = &.{ |
| | 7113 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 7114 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 7115 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| | 7116 | }, |
| | 7117 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 7118 | .each = .{ .once = &.{ |
| | 7119 | .{ ._, .p_b, .mins, .dst0x, .src1x, ._, ._ }, |
| | 7120 | } }, |
| | 7121 | }, .{ |
| | 7122 | .required_features = .{ .sse2, null, null, null }, |
| | 7123 | .src_constraints = .{ |
| | 7124 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 7125 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 7126 | }, |
| | 7127 | .patterns = &.{ |
| | 7128 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 7129 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 7130 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| | 7131 | }, |
| | 7132 | .dst_temps = .{.{ .rc = .sse }}, |
| | 7133 | .each = .{ .once = &.{ |
| | 7134 | .{ ._, ._dqa, .mov, .dst0x, .src1x, ._, ._ }, |
| | 7135 | .{ ._, .p_b, .cmpgt, .dst0x, .src0x, ._, ._ }, |
| | 7136 | .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ }, |
| | 7137 | .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ }, |
| | 7138 | .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ }, |
| | 7139 | } }, |
| | 7140 | }, .{ |
| | 7141 | .required_features = .{ .avx2, null, null, null }, |
| | 7142 | .src_constraints = .{ |
| | 7143 | .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } }, |
| | 7144 | .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } }, |
| | 7145 | }, |
| | 7146 | .patterns = &.{ |
| | 7147 | .{ .src = .{ .to_sse, .mem } }, |
| | 7148 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 7149 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 7150 | }, |
| | 7151 | .dst_temps = .{.{ .rc = .sse }}, |
| | 7152 | .each = .{ .once = &.{ |
| | 7153 | .{ ._, .vp_b, .mins, .dst0y, .src0y, .src1y, ._ }, |
| | 7154 | } }, |
| | 7155 | }, .{ |
| | 7156 | .required_features = .{ .avx2, null, null, null }, |
| | 7157 | .src_constraints = .{ |
| | 7158 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } }, |
| | 7159 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } }, |
| | 7160 | }, |
| | 7161 | .patterns = &.{ |
| | 7162 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7163 | }, |
| | 7164 | .extra_temps = .{ |
| | 7165 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 7166 | .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } }, |
| | 7167 | .unused, |
| | 7168 | .unused, |
| | 7169 | .unused, |
| | 7170 | .unused, |
| | 7171 | .unused, |
| | 7172 | .unused, |
| | 7173 | .unused, |
| | 7174 | }, |
| | 7175 | .dst_temps = .{.mem}, |
| | 7176 | .clobbers = .{ .eflags = true }, |
| | 7177 | .each = .{ .once = &.{ |
| | 7178 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 7179 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 7180 | .{ ._, .vp_b, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| | 7181 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| | 7182 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 7183 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 7184 | } }, |
| | 7185 | }, .{ |
| | 7186 | .required_features = .{ .avx, null, null, null }, |
| | 7187 | .src_constraints = .{ |
| | 7188 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 7189 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 7190 | }, |
| | 7191 | .patterns = &.{ |
| | 7192 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7193 | }, |
| | 7194 | .extra_temps = .{ |
| | 7195 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 7196 | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, |
| | 7197 | .unused, |
| | 7198 | .unused, |
| | 7199 | .unused, |
| | 7200 | .unused, |
| | 7201 | .unused, |
| | 7202 | .unused, |
| | 7203 | .unused, |
| | 7204 | }, |
| | 7205 | .dst_temps = .{.mem}, |
| | 7206 | .clobbers = .{ .eflags = true }, |
| | 7207 | .each = .{ .once = &.{ |
| | 7208 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 7209 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 7210 | .{ ._, .vp_b, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 7211 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 7212 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 7213 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 7214 | } }, |
| | 7215 | }, .{ |
| | 7216 | .required_features = .{ .sse4_1, null, null, null }, |
| | 7217 | .src_constraints = .{ |
| | 7218 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 7219 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 7220 | }, |
| | 7221 | .patterns = &.{ |
| | 7222 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7223 | }, |
| | 7224 | .extra_temps = .{ |
| | 7225 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 7226 | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, |
| | 7227 | .unused, |
| | 7228 | .unused, |
| | 7229 | .unused, |
| | 7230 | .unused, |
| | 7231 | .unused, |
| | 7232 | .unused, |
| | 7233 | .unused, |
| | 7234 | }, |
| | 7235 | .dst_temps = .{.mem}, |
| | 7236 | .clobbers = .{ .eflags = true }, |
| | 7237 | .each = .{ .once = &.{ |
| | 7238 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 7239 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 7240 | .{ ._, .p_b, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 7241 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 7242 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 7243 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 7244 | } }, |
| | 7245 | }, .{ |
| | 7246 | .required_features = .{ .sse2, null, null, null }, |
| | 7247 | .src_constraints = .{ |
| | 7248 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 7249 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 7250 | }, |
| | 7251 | .patterns = &.{ |
| | 7252 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7253 | }, |
| | 7254 | .extra_temps = .{ |
| | 7255 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 7256 | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, |
| | 7257 | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, |
| | 7258 | .unused, |
| | 7259 | .unused, |
| | 7260 | .unused, |
| | 7261 | .unused, |
| | 7262 | .unused, |
| | 7263 | .unused, |
| | 7264 | }, |
| | 7265 | .dst_temps = .{.mem}, |
| | 7266 | .clobbers = .{ .eflags = true }, |
| | 7267 | .each = .{ .once = &.{ |
| | 7268 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 7269 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 7270 | .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 7271 | .{ ._, .p_b, .cmpgt, .tmp1x, .tmp2x, ._, ._ }, |
| | 7272 | .{ ._, .p_, .@"and", .tmp2x, .tmp1x, ._, ._ }, |
| | 7273 | .{ ._, .p_, .andn, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 7274 | .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ }, |
| | 7275 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 7276 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 7277 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 7278 | } }, |
| | 7279 | }, .{ |
| | 7280 | .required_features = .{ .cmov, .slow_incdec, null, null }, |
| | 7281 | .src_constraints = .{ |
| | 7282 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 7283 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 7284 | }, |
| | 7285 | .patterns = &.{ |
| | 7286 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7287 | }, |
| | 7288 | .extra_temps = .{ |
| | 7289 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 7290 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| | 7291 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| | 7292 | .unused, |
| | 7293 | .unused, |
| | 7294 | .unused, |
| | 7295 | .unused, |
| | 7296 | .unused, |
| | 7297 | .unused, |
| | 7298 | }, |
| | 7299 | .dst_temps = .{.mem}, |
| | 7300 | .clobbers = .{ .eflags = true }, |
| | 7301 | .each = .{ .once = &.{ |
| | 7302 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 7303 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| | 7304 | .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| | 7305 | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, |
| | 7306 | .{ ._, ._ge, .cmov, .tmp1d, .tmp2d, ._, ._ }, |
| | 7307 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| | 7308 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 7309 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 7310 | } }, |
| | 7311 | }, .{ |
| | 7312 | .required_features = .{ .cmov, null, null, null }, |
| | 7313 | .src_constraints = .{ |
| | 7314 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 7315 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 7316 | }, |
| | 7317 | .patterns = &.{ |
| | 7318 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7319 | }, |
| | 7320 | .extra_temps = .{ |
| | 7321 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 7322 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| | 7323 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| | 7324 | .unused, |
| | 7325 | .unused, |
| | 7326 | .unused, |
| | 7327 | .unused, |
| | 7328 | .unused, |
| | 7329 | .unused, |
| | 7330 | }, |
| | 7331 | .dst_temps = .{.mem}, |
| | 7332 | .clobbers = .{ .eflags = true }, |
| | 7333 | .each = .{ .once = &.{ |
| | 7334 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 7335 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| | 7336 | .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| | 7337 | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, |
| | 7338 | .{ ._, ._ge, .cmov, .tmp1d, .tmp2d, ._, ._ }, |
| | 7339 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| | 7340 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 7341 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 7342 | } }, |
| | 7343 | }, .{ |
| | 7344 | .required_features = .{ .slow_incdec, null, null, null }, |
| | 7345 | .src_constraints = .{ |
| | 7346 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 7347 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 7348 | }, |
| | 7349 | .patterns = &.{ |
| | 7350 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7351 | }, |
| | 7352 | .extra_temps = .{ |
| | 7353 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 7354 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| | 7355 | .unused, |
| | 7356 | .unused, |
| | 7357 | .unused, |
| | 7358 | .unused, |
| | 7359 | .unused, |
| | 7360 | .unused, |
| | 7361 | .unused, |
| | 7362 | }, |
| | 7363 | .dst_temps = .{.mem}, |
| | 7364 | .clobbers = .{ .eflags = true }, |
| | 7365 | .each = .{ .once = &.{ |
| | 7366 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 7367 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| | 7368 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| | 7369 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, |
| | 7370 | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| | 7371 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| | 7372 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 7373 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 7374 | } }, |
| | 7375 | }, .{ |
| | 7376 | .src_constraints = .{ |
| | 7377 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 7378 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 7379 | }, |
| | 7380 | .patterns = &.{ |
| | 7381 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7382 | }, |
| | 7383 | .extra_temps = .{ |
| | 7384 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 7385 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| | 7386 | .unused, |
| | 7387 | .unused, |
| | 7388 | .unused, |
| | 7389 | .unused, |
| | 7390 | .unused, |
| | 7391 | .unused, |
| | 7392 | .unused, |
| | 7393 | }, |
| | 7394 | .dst_temps = .{.mem}, |
| | 7395 | .clobbers = .{ .eflags = true }, |
| | 7396 | .each = .{ .once = &.{ |
| | 7397 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 7398 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| | 7399 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| | 7400 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, |
| | 7401 | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| | 7402 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| | 7403 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 7404 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 7405 | } }, |
| | 7406 | }, .{ |
| | 7407 | .required_features = .{ .sse, .mmx, null, null }, |
| | 7408 | .src_constraints = .{ |
| | 7409 | .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } }, |
| | 7410 | .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } }, |
| | 7411 | }, |
| | 7412 | .patterns = &.{ |
| | 7413 | .{ .src = .{ .to_mut_mmx, .mem } }, |
| | 7414 | .{ .src = .{ .mem, .to_mut_mmx }, .commute = .{ 0, 1 } }, |
| | 7415 | .{ .src = .{ .to_mut_mmx, .to_mmx } }, |
| | 7416 | }, |
| | 7417 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 7418 | .each = .{ .once = &.{ |
| | 7419 | .{ ._, .p_b, .minu, .dst0q, .src1q, ._, ._ }, |
| | 7420 | } }, |
| | 7421 | }, .{ |
| | 7422 | .required_features = .{ .avx, null, null, null }, |
| | 7423 | .src_constraints = .{ |
| | 7424 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| | 7425 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| | 7426 | }, |
| | 7427 | .patterns = &.{ |
| | 7428 | .{ .src = .{ .to_sse, .mem } }, |
| | 7429 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 7430 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 7431 | }, |
| | 7432 | .dst_temps = .{.{ .rc = .sse }}, |
| | 7433 | .each = .{ .once = &.{ |
| | 7434 | .{ ._, .vp_b, .minu, .dst0x, .src0x, .src1x, ._ }, |
| | 7435 | } }, |
| | 7436 | }, .{ |
| | 7437 | .required_features = .{ .sse2, null, null, null }, |
| | 7438 | .src_constraints = .{ |
| | 7439 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| | 7440 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| | 7441 | }, |
| | 7442 | .patterns = &.{ |
| | 7443 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 7444 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 7445 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| | 7446 | }, |
| | 7447 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 7448 | .each = .{ .once = &.{ |
| | 7449 | .{ ._, .p_b, .minu, .dst0x, .src1x, ._, ._ }, |
| | 7450 | } }, |
| | 7451 | }, .{ |
| | 7452 | .required_features = .{ .avx2, null, null, null }, |
| | 7453 | .src_constraints = .{ |
| | 7454 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, |
| | 7455 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, |
| | 7456 | }, |
| | 7457 | .patterns = &.{ |
| | 7458 | .{ .src = .{ .to_sse, .mem } }, |
| | 7459 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 7460 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 7461 | }, |
| | 7462 | .dst_temps = .{.{ .rc = .sse }}, |
| | 7463 | .each = .{ .once = &.{ |
| | 7464 | .{ ._, .vp_b, .minu, .dst0y, .src0y, .src1y, ._ }, |
| | 7465 | } }, |
| | 7466 | }, .{ |
| | 7467 | .required_features = .{ .avx2, null, null, null }, |
| | 7468 | .src_constraints = .{ |
| | 7469 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, |
| | 7470 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, |
| | 7471 | }, |
| | 7472 | .patterns = &.{ |
| | 7473 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7474 | }, |
| | 7475 | .extra_temps = .{ |
| | 7476 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 7477 | .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } }, |
| | 7478 | .unused, |
| | 7479 | .unused, |
| | 7480 | .unused, |
| | 7481 | .unused, |
| | 7482 | .unused, |
| | 7483 | .unused, |
| | 7484 | .unused, |
| | 7485 | }, |
| | 7486 | .dst_temps = .{.mem}, |
| | 7487 | .clobbers = .{ .eflags = true }, |
| | 7488 | .each = .{ .once = &.{ |
| | 7489 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 7490 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 7491 | .{ ._, .vp_b, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| | 7492 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| | 7493 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 7494 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 7495 | } }, |
| | 7496 | }, .{ |
| | 7497 | .required_features = .{ .avx, null, null, null }, |
| | 7498 | .src_constraints = .{ |
| | 7499 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| | 7500 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| | 7501 | }, |
| | 7502 | .patterns = &.{ |
| | 7503 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7504 | }, |
| | 7505 | .extra_temps = .{ |
| | 7506 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 7507 | .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } }, |
| | 7508 | .unused, |
| | 7509 | .unused, |
| | 7510 | .unused, |
| | 7511 | .unused, |
| | 7512 | .unused, |
| | 7513 | .unused, |
| | 7514 | .unused, |
| | 7515 | }, |
| | 7516 | .dst_temps = .{.mem}, |
| | 7517 | .clobbers = .{ .eflags = true }, |
| | 7518 | .each = .{ .once = &.{ |
| | 7519 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 7520 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 7521 | .{ ._, .vp_b, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 7522 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 7523 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 7524 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 7525 | } }, |
| | 7526 | }, .{ |
| | 7527 | .required_features = .{ .sse2, null, null, null }, |
| | 7528 | .src_constraints = .{ |
| | 7529 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| | 7530 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| | 7531 | }, |
| | 7532 | .patterns = &.{ |
| | 7533 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7534 | }, |
| | 7535 | .extra_temps = .{ |
| | 7536 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 7537 | .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } }, |
| | 7538 | .unused, |
| | 7539 | .unused, |
| | 7540 | .unused, |
| | 7541 | .unused, |
| | 7542 | .unused, |
| | 7543 | .unused, |
| | 7544 | .unused, |
| | 7545 | }, |
| | 7546 | .dst_temps = .{.mem}, |
| | 7547 | .clobbers = .{ .eflags = true }, |
| | 7548 | .each = .{ .once = &.{ |
| | 7549 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 7550 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 7551 | .{ ._, .p_b, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 7552 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 7553 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 7554 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 7555 | } }, |
| | 7556 | }, .{ |
| | 7557 | .required_features = .{ .cmov, .slow_incdec, null, null }, |
| | 7558 | .src_constraints = .{ |
| | 7559 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 7560 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 7561 | }, |
| | 7562 | .patterns = &.{ |
| | 7563 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7564 | }, |
| | 7565 | .extra_temps = .{ |
| | 7566 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 7567 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 7568 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 7569 | .unused, |
| | 7570 | .unused, |
| | 7571 | .unused, |
| | 7572 | .unused, |
| | 7573 | .unused, |
| | 7574 | .unused, |
| | 7575 | }, |
| | 7576 | .dst_temps = .{.mem}, |
| | 7577 | .clobbers = .{ .eflags = true }, |
| | 7578 | .each = .{ .once = &.{ |
| | 7579 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 7580 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| | 7581 | .{ ._, ._, .movzx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| | 7582 | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, |
| | 7583 | .{ ._, ._ae, .cmov, .tmp1d, .tmp2d, ._, ._ }, |
| | 7584 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| | 7585 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 7586 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 7587 | } }, |
| | 7588 | }, .{ |
| | 7589 | .required_features = .{ .cmov, null, null, null }, |
| | 7590 | .src_constraints = .{ |
| | 7591 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 7592 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 7593 | }, |
| | 7594 | .patterns = &.{ |
| | 7595 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7596 | }, |
| | 7597 | .extra_temps = .{ |
| | 7598 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 7599 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 7600 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 7601 | .unused, |
| | 7602 | .unused, |
| | 7603 | .unused, |
| | 7604 | .unused, |
| | 7605 | .unused, |
| | 7606 | .unused, |
| | 7607 | }, |
| | 7608 | .dst_temps = .{.mem}, |
| | 7609 | .clobbers = .{ .eflags = true }, |
| | 7610 | .each = .{ .once = &.{ |
| | 7611 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 7612 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| | 7613 | .{ ._, ._, .movzx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| | 7614 | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, |
| | 7615 | .{ ._, ._ae, .cmov, .tmp1d, .tmp2d, ._, ._ }, |
| | 7616 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| | 7617 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 7618 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 7619 | } }, |
| | 7620 | }, .{ |
| | 7621 | .required_features = .{ .slow_incdec, null, null, null }, |
| | 7622 | .src_constraints = .{ |
| | 7623 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 7624 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 7625 | }, |
| | 7626 | .patterns = &.{ |
| | 7627 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7628 | }, |
| | 7629 | .extra_temps = .{ |
| | 7630 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 7631 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 7632 | .unused, |
| | 7633 | .unused, |
| | 7634 | .unused, |
| | 7635 | .unused, |
| | 7636 | .unused, |
| | 7637 | .unused, |
| | 7638 | .unused, |
| | 7639 | }, |
| | 7640 | .dst_temps = .{.mem}, |
| | 7641 | .clobbers = .{ .eflags = true }, |
| | 7642 | .each = .{ .once = &.{ |
| | 7643 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 7644 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| | 7645 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| | 7646 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, |
| | 7647 | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| | 7648 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| | 7649 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 7650 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 7651 | } }, |
| | 7652 | }, .{ |
| | 7653 | .src_constraints = .{ |
| | 7654 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 7655 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 7656 | }, |
| | 7657 | .patterns = &.{ |
| | 7658 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7659 | }, |
| | 7660 | .extra_temps = .{ |
| | 7661 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 7662 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 7663 | .unused, |
| | 7664 | .unused, |
| | 7665 | .unused, |
| | 7666 | .unused, |
| | 7667 | .unused, |
| | 7668 | .unused, |
| | 7669 | .unused, |
| | 7670 | }, |
| | 7671 | .dst_temps = .{.mem}, |
| | 7672 | .clobbers = .{ .eflags = true }, |
| | 7673 | .each = .{ .once = &.{ |
| | 7674 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 7675 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| | 7676 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| | 7677 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, |
| | 7678 | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| | 7679 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| | 7680 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 7681 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 7682 | } }, |
| | 7683 | }, .{ |
| | 7684 | .required_features = .{ .sse, .mmx, null, null }, |
| | 7685 | .src_constraints = .{ |
| | 7686 | .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, |
| | 7687 | .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, |
| | 7688 | }, |
| | 7689 | .patterns = &.{ |
| | 7690 | .{ .src = .{ .to_mut_mmx, .mem } }, |
| | 7691 | .{ .src = .{ .mem, .to_mut_mmx }, .commute = .{ 0, 1 } }, |
| | 7692 | .{ .src = .{ .to_mut_mmx, .to_mmx } }, |
| | 7693 | }, |
| | 7694 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 7695 | .each = .{ .once = &.{ |
| | 7696 | .{ ._, .p_w, .mins, .dst0q, .src1q, ._, ._ }, |
| | 7697 | } }, |
| | 7698 | }, .{ |
| | 7699 | .required_features = .{ .avx, null, null, null }, |
| | 7700 | .src_constraints = .{ |
| | 7701 | .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| | 7702 | .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| | 7703 | }, |
| | 7704 | .patterns = &.{ |
| | 7705 | .{ .src = .{ .to_sse, .mem } }, |
| | 7706 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 7707 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 7708 | }, |
| | 7709 | .dst_temps = .{.{ .rc = .sse }}, |
| | 7710 | .each = .{ .once = &.{ |
| | 7711 | .{ ._, .vp_w, .mins, .dst0x, .src0x, .src1x, ._ }, |
| | 7712 | } }, |
| | 7713 | }, .{ |
| | 7714 | .required_features = .{ .sse2, null, null, null }, |
| | 7715 | .src_constraints = .{ |
| | 7716 | .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| | 7717 | .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| | 7718 | }, |
| | 7719 | .patterns = &.{ |
| | 7720 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 7721 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 7722 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| | 7723 | }, |
| | 7724 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 7725 | .each = .{ .once = &.{ |
| | 7726 | .{ ._, .p_w, .mins, .dst0x, .src1x, ._, ._ }, |
| | 7727 | } }, |
| | 7728 | }, .{ |
| | 7729 | .required_features = .{ .avx2, null, null, null }, |
| | 7730 | .src_constraints = .{ |
| | 7731 | .{ .scalar_signed_int = .{ .of = .yword, .is = .word } }, |
| | 7732 | .{ .scalar_signed_int = .{ .of = .yword, .is = .word } }, |
| | 7733 | }, |
| | 7734 | .patterns = &.{ |
| | 7735 | .{ .src = .{ .to_sse, .mem } }, |
| | 7736 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 7737 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 7738 | }, |
| | 7739 | .dst_temps = .{.{ .rc = .sse }}, |
| | 7740 | .each = .{ .once = &.{ |
| | 7741 | .{ ._, .vp_w, .mins, .dst0y, .src0y, .src1y, ._ }, |
| | 7742 | } }, |
| | 7743 | }, .{ |
| | 7744 | .required_features = .{ .avx2, null, null, null }, |
| | 7745 | .src_constraints = .{ |
| | 7746 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } }, |
| | 7747 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } }, |
| | 7748 | }, |
| | 7749 | .patterns = &.{ |
| | 7750 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7751 | }, |
| | 7752 | .extra_temps = .{ |
| | 7753 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 7754 | .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } }, |
| | 7755 | .unused, |
| | 7756 | .unused, |
| | 7757 | .unused, |
| | 7758 | .unused, |
| | 7759 | .unused, |
| | 7760 | .unused, |
| | 7761 | .unused, |
| | 7762 | }, |
| | 7763 | .dst_temps = .{.mem}, |
| | 7764 | .clobbers = .{ .eflags = true }, |
| | 7765 | .each = .{ .once = &.{ |
| | 7766 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 7767 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 7768 | .{ ._, .vp_w, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| | 7769 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| | 7770 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 7771 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 7772 | } }, |
| | 7773 | }, .{ |
| | 7774 | .required_features = .{ .avx, null, null, null }, |
| | 7775 | .src_constraints = .{ |
| | 7776 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| | 7777 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| | 7778 | }, |
| | 7779 | .patterns = &.{ |
| | 7780 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7781 | }, |
| | 7782 | .extra_temps = .{ |
| | 7783 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 7784 | .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } }, |
| | 7785 | .unused, |
| | 7786 | .unused, |
| | 7787 | .unused, |
| | 7788 | .unused, |
| | 7789 | .unused, |
| | 7790 | .unused, |
| | 7791 | .unused, |
| | 7792 | }, |
| | 7793 | .dst_temps = .{.mem}, |
| | 7794 | .clobbers = .{ .eflags = true }, |
| | 7795 | .each = .{ .once = &.{ |
| | 7796 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 7797 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 7798 | .{ ._, .vp_w, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 7799 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 7800 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 7801 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 7802 | } }, |
| | 7803 | }, .{ |
| | 7804 | .required_features = .{ .sse2, null, null, null }, |
| | 7805 | .src_constraints = .{ |
| | 7806 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| | 7807 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| | 7808 | }, |
| | 7809 | .patterns = &.{ |
| | 7810 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7811 | }, |
| | 7812 | .extra_temps = .{ |
| | 7813 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 7814 | .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } }, |
| | 7815 | .unused, |
| | 7816 | .unused, |
| | 7817 | .unused, |
| | 7818 | .unused, |
| | 7819 | .unused, |
| | 7820 | .unused, |
| | 7821 | .unused, |
| | 7822 | }, |
| | 7823 | .dst_temps = .{.mem}, |
| | 7824 | .clobbers = .{ .eflags = true }, |
| | 7825 | .each = .{ .once = &.{ |
| | 7826 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 7827 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 7828 | .{ ._, .p_w, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 7829 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 7830 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 7831 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 7832 | } }, |
| | 7833 | }, .{ |
| | 7834 | .required_features = .{ .cmov, null, null, null }, |
| | 7835 | .src_constraints = .{ |
| | 7836 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| | 7837 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| | 7838 | }, |
| | 7839 | .patterns = &.{ |
| | 7840 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7841 | }, |
| | 7842 | .extra_temps = .{ |
| | 7843 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 7844 | .{ .type = .i16, .kind = .{ .rc = .general_purpose } }, |
| | 7845 | .unused, |
| | 7846 | .unused, |
| | 7847 | .unused, |
| | 7848 | .unused, |
| | 7849 | .unused, |
| | 7850 | .unused, |
| | 7851 | .unused, |
| | 7852 | }, |
| | 7853 | .dst_temps = .{.mem}, |
| | 7854 | .clobbers = .{ .eflags = true }, |
| | 7855 | .each = .{ .once = &.{ |
| | 7856 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 7857 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| | 7858 | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| | 7859 | .{ ._, ._ge, .cmov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| | 7860 | .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| | 7861 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| | 7862 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 7863 | } }, |
| | 7864 | }, .{ |
| | 7865 | .src_constraints = .{ |
| | 7866 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| | 7867 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| | 7868 | }, |
| | 7869 | .patterns = &.{ |
| | 7870 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7871 | }, |
| | 7872 | .extra_temps = .{ |
| | 7873 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 7874 | .{ .type = .i16, .kind = .{ .rc = .general_purpose } }, |
| | 7875 | .unused, |
| | 7876 | .unused, |
| | 7877 | .unused, |
| | 7878 | .unused, |
| | 7879 | .unused, |
| | 7880 | .unused, |
| | 7881 | .unused, |
| | 7882 | }, |
| | 7883 | .dst_temps = .{.mem}, |
| | 7884 | .clobbers = .{ .eflags = true }, |
| | 7885 | .each = .{ .once = &.{ |
| | 7886 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 7887 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| | 7888 | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| | 7889 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, |
| | 7890 | .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| | 7891 | .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| | 7892 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| | 7893 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 7894 | } }, |
| | 7895 | }, .{ |
| | 7896 | .required_features = .{ .avx, null, null, null }, |
| | 7897 | .src_constraints = .{ |
| | 7898 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 7899 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 7900 | }, |
| | 7901 | .patterns = &.{ |
| | 7902 | .{ .src = .{ .to_sse, .mem } }, |
| | 7903 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 7904 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 7905 | }, |
| | 7906 | .dst_temps = .{.{ .rc = .sse }}, |
| | 7907 | .each = .{ .once = &.{ |
| | 7908 | .{ ._, .vp_w, .minu, .dst0x, .src0x, .src1x, ._ }, |
| | 7909 | } }, |
| | 7910 | }, .{ |
| | 7911 | .required_features = .{ .sse4_1, null, null, null }, |
| | 7912 | .src_constraints = .{ |
| | 7913 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 7914 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 7915 | }, |
| | 7916 | .patterns = &.{ |
| | 7917 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 7918 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 7919 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| | 7920 | }, |
| | 7921 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 7922 | .each = .{ .once = &.{ |
| | 7923 | .{ ._, .p_w, .minu, .dst0x, .src1x, ._, ._ }, |
| | 7924 | } }, |
| | 7925 | }, .{ |
| | 7926 | .required_features = .{ .sse2, null, null, null }, |
| | 7927 | .src_constraints = .{ |
| | 7928 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 7929 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 7930 | }, |
| | 7931 | .patterns = &.{ |
| | 7932 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 7933 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 7934 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| | 7935 | }, |
| | 7936 | .dst_temps = .{.{ .rc = .sse }}, |
| | 7937 | .each = .{ .once = &.{ |
| | 7938 | .{ ._, ._dqa, .mov, .dst0x, .src0x, ._, ._ }, |
| | 7939 | .{ ._, .p_w, .subus, .src0x, .src1x, ._, ._ }, |
| | 7940 | .{ ._, .p_w, .sub, .dst0x, .src0x, ._, ._ }, |
| | 7941 | } }, |
| | 7942 | }, .{ |
| | 7943 | .required_features = .{ .avx2, null, null, null }, |
| | 7944 | .src_constraints = .{ |
| | 7945 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } }, |
| | 7946 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } }, |
| | 7947 | }, |
| | 7948 | .patterns = &.{ |
| | 7949 | .{ .src = .{ .to_sse, .mem } }, |
| | 7950 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 7951 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 7952 | }, |
| | 7953 | .dst_temps = .{.{ .rc = .sse }}, |
| | 7954 | .each = .{ .once = &.{ |
| | 7955 | .{ ._, .vp_w, .minu, .dst0y, .src0y, .src1y, ._ }, |
| | 7956 | } }, |
| | 7957 | }, .{ |
| | 7958 | .required_features = .{ .avx2, null, null, null }, |
| | 7959 | .src_constraints = .{ |
| | 7960 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } }, |
| | 7961 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } }, |
| | 7962 | }, |
| | 7963 | .patterns = &.{ |
| | 7964 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7965 | }, |
| | 7966 | .extra_temps = .{ |
| | 7967 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 7968 | .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } }, |
| | 7969 | .unused, |
| | 7970 | .unused, |
| | 7971 | .unused, |
| | 7972 | .unused, |
| | 7973 | .unused, |
| | 7974 | .unused, |
| | 7975 | .unused, |
| | 7976 | }, |
| | 7977 | .dst_temps = .{.mem}, |
| | 7978 | .clobbers = .{ .eflags = true }, |
| | 7979 | .each = .{ .once = &.{ |
| | 7980 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 7981 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 7982 | .{ ._, .vp_w, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| | 7983 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| | 7984 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 7985 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 7986 | } }, |
| | 7987 | }, .{ |
| | 7988 | .required_features = .{ .avx, null, null, null }, |
| | 7989 | .src_constraints = .{ |
| | 7990 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 7991 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 7992 | }, |
| | 7993 | .patterns = &.{ |
| | 7994 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7995 | }, |
| | 7996 | .extra_temps = .{ |
| | 7997 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 7998 | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, |
| | 7999 | .unused, |
| | 8000 | .unused, |
| | 8001 | .unused, |
| | 8002 | .unused, |
| | 8003 | .unused, |
| | 8004 | .unused, |
| | 8005 | .unused, |
| | 8006 | }, |
| | 8007 | .dst_temps = .{.mem}, |
| | 8008 | .clobbers = .{ .eflags = true }, |
| | 8009 | .each = .{ .once = &.{ |
| | 8010 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8011 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 8012 | .{ ._, .vp_w, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 8013 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 8014 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 8015 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8016 | } }, |
| | 8017 | }, .{ |
| | 8018 | .required_features = .{ .sse4_1, null, null, null }, |
| | 8019 | .src_constraints = .{ |
| | 8020 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 8021 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 8022 | }, |
| | 8023 | .patterns = &.{ |
| | 8024 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8025 | }, |
| | 8026 | .extra_temps = .{ |
| | 8027 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8028 | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, |
| | 8029 | .unused, |
| | 8030 | .unused, |
| | 8031 | .unused, |
| | 8032 | .unused, |
| | 8033 | .unused, |
| | 8034 | .unused, |
| | 8035 | .unused, |
| | 8036 | }, |
| | 8037 | .dst_temps = .{.mem}, |
| | 8038 | .clobbers = .{ .eflags = true }, |
| | 8039 | .each = .{ .once = &.{ |
| | 8040 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8041 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 8042 | .{ ._, .p_w, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 8043 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 8044 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 8045 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8046 | } }, |
| | 8047 | }, .{ |
| | 8048 | .required_features = .{ .sse2, null, null, null }, |
| | 8049 | .src_constraints = .{ |
| | 8050 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 8051 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 8052 | }, |
| | 8053 | .patterns = &.{ |
| | 8054 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8055 | }, |
| | 8056 | .extra_temps = .{ |
| | 8057 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8058 | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, |
| | 8059 | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, |
| | 8060 | .unused, |
| | 8061 | .unused, |
| | 8062 | .unused, |
| | 8063 | .unused, |
| | 8064 | .unused, |
| | 8065 | .unused, |
| | 8066 | }, |
| | 8067 | .dst_temps = .{.mem}, |
| | 8068 | .clobbers = .{ .eflags = true }, |
| | 8069 | .each = .{ .once = &.{ |
| | 8070 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8071 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 8072 | .{ ._, ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ }, |
| | 8073 | .{ ._, .p_w, .subus, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 8074 | .{ ._, .p_w, .sub, .tmp2x, .tmp1x, ._, ._ }, |
| | 8075 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp2x, ._, ._ }, |
| | 8076 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 8077 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8078 | } }, |
| | 8079 | }, .{ |
| | 8080 | .required_features = .{ .cmov, null, null, null }, |
| | 8081 | .src_constraints = .{ |
| | 8082 | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, |
| | 8083 | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, |
| | 8084 | }, |
| | 8085 | .patterns = &.{ |
| | 8086 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8087 | }, |
| | 8088 | .extra_temps = .{ |
| | 8089 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8090 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| | 8091 | .unused, |
| | 8092 | .unused, |
| | 8093 | .unused, |
| | 8094 | .unused, |
| | 8095 | .unused, |
| | 8096 | .unused, |
| | 8097 | .unused, |
| | 8098 | }, |
| | 8099 | .dst_temps = .{.mem}, |
| | 8100 | .clobbers = .{ .eflags = true }, |
| | 8101 | .each = .{ .once = &.{ |
| | 8102 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8103 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| | 8104 | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| | 8105 | .{ ._, ._ae, .cmov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| | 8106 | .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| | 8107 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| | 8108 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8109 | } }, |
| | 8110 | }, .{ |
| | 8111 | .src_constraints = .{ |
| | 8112 | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, |
| 6758 | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, | 8113 | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, |
| 6759 | }, | 8114 | }, |
| 6760 | .patterns = &.{ | 8115 | .patterns = &.{ |
| ... | @@ -6762,9 +8117,1161 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6762,9 +8117,1161 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6762 | }, | 8117 | }, |
| 6763 | .extra_temps = .{ | 8118 | .extra_temps = .{ |
| 6764 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 8119 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6765 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, | 8120 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| | 8121 | .unused, |
| | 8122 | .unused, |
| | 8123 | .unused, |
| | 8124 | .unused, |
| | 8125 | .unused, |
| | 8126 | .unused, |
| | 8127 | .unused, |
| | 8128 | }, |
| | 8129 | .dst_temps = .{.mem}, |
| | 8130 | .clobbers = .{ .eflags = true }, |
| | 8131 | .each = .{ .once = &.{ |
| | 8132 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8133 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| | 8134 | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| | 8135 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, |
| | 8136 | .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| | 8137 | .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| | 8138 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| | 8139 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8140 | } }, |
| | 8141 | }, .{ |
| | 8142 | .required_features = .{ .avx, null, null, null }, |
| | 8143 | .src_constraints = .{ |
| | 8144 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 8145 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 8146 | }, |
| | 8147 | .patterns = &.{ |
| | 8148 | .{ .src = .{ .to_sse, .mem } }, |
| | 8149 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 8150 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 8151 | }, |
| | 8152 | .dst_temps = .{.{ .rc = .sse }}, |
| | 8153 | .each = .{ .once = &.{ |
| | 8154 | .{ ._, .vp_d, .mins, .dst0x, .src0x, .src1x, ._ }, |
| | 8155 | } }, |
| | 8156 | }, .{ |
| | 8157 | .required_features = .{ .sse4_1, null, null, null }, |
| | 8158 | .src_constraints = .{ |
| | 8159 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 8160 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 8161 | }, |
| | 8162 | .patterns = &.{ |
| | 8163 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 8164 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 8165 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| | 8166 | }, |
| | 8167 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8168 | .each = .{ .once = &.{ |
| | 8169 | .{ ._, .p_d, .mins, .dst0x, .src1x, ._, ._ }, |
| | 8170 | } }, |
| | 8171 | }, .{ |
| | 8172 | .required_features = .{ .sse2, null, null, null }, |
| | 8173 | .src_constraints = .{ |
| | 8174 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 8175 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 8176 | }, |
| | 8177 | .patterns = &.{ |
| | 8178 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 8179 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 8180 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| | 8181 | }, |
| | 8182 | .dst_temps = .{.{ .rc = .sse }}, |
| | 8183 | .each = .{ .once = &.{ |
| | 8184 | .{ ._, ._dqa, .mov, .dst0x, .src1x, ._, ._ }, |
| | 8185 | .{ ._, .p_d, .cmpgt, .dst0x, .src0x, ._, ._ }, |
| | 8186 | .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ }, |
| | 8187 | .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ }, |
| | 8188 | .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ }, |
| | 8189 | } }, |
| | 8190 | }, .{ |
| | 8191 | .required_features = .{ .avx2, null, null, null }, |
| | 8192 | .src_constraints = .{ |
| | 8193 | .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }, |
| | 8194 | .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }, |
| | 8195 | }, |
| | 8196 | .patterns = &.{ |
| | 8197 | .{ .src = .{ .to_sse, .mem } }, |
| | 8198 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 8199 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 8200 | }, |
| | 8201 | .dst_temps = .{.{ .rc = .sse }}, |
| | 8202 | .each = .{ .once = &.{ |
| | 8203 | .{ ._, .vp_d, .mins, .dst0y, .src0y, .src1y, ._ }, |
| | 8204 | } }, |
| | 8205 | }, .{ |
| | 8206 | .required_features = .{ .avx2, null, null, null }, |
| | 8207 | .src_constraints = .{ |
| | 8208 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }, |
| | 8209 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }, |
| | 8210 | }, |
| | 8211 | .patterns = &.{ |
| | 8212 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8213 | }, |
| | 8214 | .extra_temps = .{ |
| | 8215 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8216 | .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } }, |
| | 8217 | .unused, |
| | 8218 | .unused, |
| | 8219 | .unused, |
| | 8220 | .unused, |
| | 8221 | .unused, |
| | 8222 | .unused, |
| | 8223 | .unused, |
| | 8224 | }, |
| | 8225 | .dst_temps = .{.mem}, |
| | 8226 | .clobbers = .{ .eflags = true }, |
| | 8227 | .each = .{ .once = &.{ |
| | 8228 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8229 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 8230 | .{ ._, .vp_d, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| | 8231 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| | 8232 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 8233 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8234 | } }, |
| | 8235 | }, .{ |
| | 8236 | .required_features = .{ .avx, null, null, null }, |
| | 8237 | .src_constraints = .{ |
| | 8238 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 8239 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 8240 | }, |
| | 8241 | .patterns = &.{ |
| | 8242 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8243 | }, |
| | 8244 | .extra_temps = .{ |
| | 8245 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8246 | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, |
| | 8247 | .unused, |
| | 8248 | .unused, |
| | 8249 | .unused, |
| | 8250 | .unused, |
| | 8251 | .unused, |
| | 8252 | .unused, |
| | 8253 | .unused, |
| | 8254 | }, |
| | 8255 | .dst_temps = .{.mem}, |
| | 8256 | .clobbers = .{ .eflags = true }, |
| | 8257 | .each = .{ .once = &.{ |
| | 8258 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8259 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 8260 | .{ ._, .vp_d, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 8261 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 8262 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 8263 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8264 | } }, |
| | 8265 | }, .{ |
| | 8266 | .required_features = .{ .sse4_1, null, null, null }, |
| | 8267 | .src_constraints = .{ |
| | 8268 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 8269 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 8270 | }, |
| | 8271 | .patterns = &.{ |
| | 8272 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8273 | }, |
| | 8274 | .extra_temps = .{ |
| | 8275 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8276 | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, |
| | 8277 | .unused, |
| | 8278 | .unused, |
| | 8279 | .unused, |
| | 8280 | .unused, |
| | 8281 | .unused, |
| | 8282 | .unused, |
| | 8283 | .unused, |
| | 8284 | }, |
| | 8285 | .dst_temps = .{.mem}, |
| | 8286 | .clobbers = .{ .eflags = true }, |
| | 8287 | .each = .{ .once = &.{ |
| | 8288 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8289 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 8290 | .{ ._, .p_d, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 8291 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 8292 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 8293 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8294 | } }, |
| | 8295 | }, .{ |
| | 8296 | .required_features = .{ .sse2, null, null, null }, |
| | 8297 | .src_constraints = .{ |
| | 8298 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 8299 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 8300 | }, |
| | 8301 | .patterns = &.{ |
| | 8302 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8303 | }, |
| | 8304 | .extra_temps = .{ |
| | 8305 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8306 | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, |
| | 8307 | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, |
| | 8308 | .unused, |
| | 8309 | .unused, |
| | 8310 | .unused, |
| | 8311 | .unused, |
| | 8312 | .unused, |
| | 8313 | .unused, |
| | 8314 | }, |
| | 8315 | .dst_temps = .{.mem}, |
| | 8316 | .clobbers = .{ .eflags = true }, |
| | 8317 | .each = .{ .once = &.{ |
| | 8318 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8319 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 8320 | .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 8321 | .{ ._, .p_d, .cmpgt, .tmp1x, .tmp2x, ._, ._ }, |
| | 8322 | .{ ._, .p_, .@"and", .tmp2x, .tmp1x, ._, ._ }, |
| | 8323 | .{ ._, .p_, .andn, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 8324 | .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ }, |
| | 8325 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 8326 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 8327 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8328 | } }, |
| | 8329 | }, .{ |
| | 8330 | .required_features = .{ .cmov, null, null, null }, |
| | 8331 | .src_constraints = .{ |
| | 8332 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| | 8333 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| | 8334 | }, |
| | 8335 | .patterns = &.{ |
| | 8336 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8337 | }, |
| | 8338 | .extra_temps = .{ |
| | 8339 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8340 | .{ .type = .i32, .kind = .{ .rc = .general_purpose } }, |
| | 8341 | .unused, |
| | 8342 | .unused, |
| | 8343 | .unused, |
| | 8344 | .unused, |
| | 8345 | .unused, |
| | 8346 | .unused, |
| | 8347 | .unused, |
| | 8348 | }, |
| | 8349 | .dst_temps = .{.mem}, |
| | 8350 | .clobbers = .{ .eflags = true }, |
| | 8351 | .each = .{ .once = &.{ |
| | 8352 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8353 | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| | 8354 | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| | 8355 | .{ ._, ._ge, .cmov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| | 8356 | .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ }, |
| | 8357 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| | 8358 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8359 | } }, |
| | 8360 | }, .{ |
| | 8361 | .src_constraints = .{ |
| | 8362 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| | 8363 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| | 8364 | }, |
| | 8365 | .patterns = &.{ |
| | 8366 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8367 | }, |
| | 8368 | .extra_temps = .{ |
| | 8369 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8370 | .{ .type = .i32, .kind = .{ .rc = .general_purpose } }, |
| | 8371 | .unused, |
| | 8372 | .unused, |
| | 8373 | .unused, |
| | 8374 | .unused, |
| | 8375 | .unused, |
| | 8376 | .unused, |
| | 8377 | .unused, |
| | 8378 | }, |
| | 8379 | .dst_temps = .{.mem}, |
| | 8380 | .clobbers = .{ .eflags = true }, |
| | 8381 | .each = .{ .once = &.{ |
| | 8382 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8383 | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| | 8384 | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| | 8385 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, |
| | 8386 | .{ ._, ._, .mov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| | 8387 | .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ }, |
| | 8388 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| | 8389 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8390 | } }, |
| | 8391 | }, .{ |
| | 8392 | .required_features = .{ .avx, null, null, null }, |
| | 8393 | .src_constraints = .{ |
| | 8394 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 8395 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 8396 | }, |
| | 8397 | .patterns = &.{ |
| | 8398 | .{ .src = .{ .to_sse, .mem } }, |
| | 8399 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 8400 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 8401 | }, |
| | 8402 | .dst_temps = .{.{ .rc = .sse }}, |
| | 8403 | .each = .{ .once = &.{ |
| | 8404 | .{ ._, .vp_d, .minu, .dst0x, .src0x, .src1x, ._ }, |
| | 8405 | } }, |
| | 8406 | }, .{ |
| | 8407 | .required_features = .{ .sse4_1, null, null, null }, |
| | 8408 | .src_constraints = .{ |
| | 8409 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 8410 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 8411 | }, |
| | 8412 | .patterns = &.{ |
| | 8413 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 8414 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 8415 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| | 8416 | }, |
| | 8417 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8418 | .each = .{ .once = &.{ |
| | 8419 | .{ ._, .p_d, .minu, .dst0x, .src1x, ._, ._ }, |
| | 8420 | } }, |
| | 8421 | }, .{ |
| | 8422 | .required_features = .{ .sse2, null, null, null }, |
| | 8423 | .src_constraints = .{ |
| | 8424 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 8425 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 8426 | }, |
| | 8427 | .patterns = &.{ |
| | 8428 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 8429 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 8430 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| | 8431 | }, |
| | 8432 | .extra_temps = .{ |
| | 8433 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 8434 | .{ .type = .vector_4_u32, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| | 8435 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| | 8436 | .unused, |
| | 8437 | .unused, |
| | 8438 | .unused, |
| | 8439 | .unused, |
| | 8440 | .unused, |
| | 8441 | .unused, |
| | 8442 | }, |
| | 8443 | .dst_temps = .{.{ .rc = .sse }}, |
| | 8444 | .each = .{ .once = &.{ |
| | 8445 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 8446 | .{ ._, ._dqa, .mov, .dst0x, .lea(.xword, .tmp0), ._, ._ }, |
| | 8447 | .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ }, |
| | 8448 | .{ ._, .p_, .xor, .dst0x, .src1x, ._, ._ }, |
| | 8449 | .{ ._, .p_, .xor, .tmp2x, .src0x, ._, ._ }, |
| | 8450 | .{ ._, .p_d, .cmpgt, .dst0x, .tmp2x, ._, ._ }, |
| | 8451 | .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ }, |
| | 8452 | .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ }, |
| | 8453 | .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ }, |
| | 8454 | } }, |
| | 8455 | }, .{ |
| | 8456 | .required_features = .{ .avx2, null, null, null }, |
| | 8457 | .src_constraints = .{ |
| | 8458 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, |
| | 8459 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, |
| | 8460 | }, |
| | 8461 | .patterns = &.{ |
| | 8462 | .{ .src = .{ .to_sse, .mem } }, |
| | 8463 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 8464 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 8465 | }, |
| | 8466 | .dst_temps = .{.{ .rc = .sse }}, |
| | 8467 | .each = .{ .once = &.{ |
| | 8468 | .{ ._, .vp_d, .minu, .dst0y, .src0y, .src1y, ._ }, |
| | 8469 | } }, |
| | 8470 | }, .{ |
| | 8471 | .required_features = .{ .avx2, null, null, null }, |
| | 8472 | .src_constraints = .{ |
| | 8473 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, |
| | 8474 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, |
| | 8475 | }, |
| | 8476 | .patterns = &.{ |
| | 8477 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8478 | }, |
| | 8479 | .extra_temps = .{ |
| | 8480 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8481 | .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } }, |
| | 8482 | .unused, |
| | 8483 | .unused, |
| | 8484 | .unused, |
| | 8485 | .unused, |
| | 8486 | .unused, |
| | 8487 | .unused, |
| | 8488 | .unused, |
| | 8489 | }, |
| | 8490 | .dst_temps = .{.mem}, |
| | 8491 | .clobbers = .{ .eflags = true }, |
| | 8492 | .each = .{ .once = &.{ |
| | 8493 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8494 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 8495 | .{ ._, .vp_d, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| | 8496 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| | 8497 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 8498 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8499 | } }, |
| | 8500 | }, .{ |
| | 8501 | .required_features = .{ .avx, null, null, null }, |
| | 8502 | .src_constraints = .{ |
| | 8503 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 8504 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 8505 | }, |
| | 8506 | .patterns = &.{ |
| | 8507 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8508 | }, |
| | 8509 | .extra_temps = .{ |
| | 8510 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8511 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| | 8512 | .unused, |
| | 8513 | .unused, |
| | 8514 | .unused, |
| | 8515 | .unused, |
| | 8516 | .unused, |
| | 8517 | .unused, |
| | 8518 | .unused, |
| | 8519 | }, |
| | 8520 | .dst_temps = .{.mem}, |
| | 8521 | .clobbers = .{ .eflags = true }, |
| | 8522 | .each = .{ .once = &.{ |
| | 8523 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8524 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 8525 | .{ ._, .vp_d, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 8526 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 8527 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 8528 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8529 | } }, |
| | 8530 | }, .{ |
| | 8531 | .required_features = .{ .sse4_1, null, null, null }, |
| | 8532 | .src_constraints = .{ |
| | 8533 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 8534 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 8535 | }, |
| | 8536 | .patterns = &.{ |
| | 8537 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8538 | }, |
| | 8539 | .extra_temps = .{ |
| | 8540 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8541 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| | 8542 | .unused, |
| | 8543 | .unused, |
| | 8544 | .unused, |
| | 8545 | .unused, |
| | 8546 | .unused, |
| | 8547 | .unused, |
| | 8548 | .unused, |
| | 8549 | }, |
| | 8550 | .dst_temps = .{.mem}, |
| | 8551 | .clobbers = .{ .eflags = true }, |
| | 8552 | .each = .{ .once = &.{ |
| | 8553 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8554 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 8555 | .{ ._, .p_d, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 8556 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 8557 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 8558 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8559 | } }, |
| | 8560 | }, .{ |
| | 8561 | .required_features = .{ .sse2, null, null, null }, |
| | 8562 | .src_constraints = .{ |
| | 8563 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 8564 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 8565 | }, |
| | 8566 | .patterns = &.{ |
| | 8567 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8568 | }, |
| | 8569 | .extra_temps = .{ |
| | 8570 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8571 | .{ .type = .vector_4_u32, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| | 8572 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| | 8573 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| | 8574 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| | 8575 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| | 8576 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| | 8577 | .unused, |
| | 8578 | .unused, |
| | 8579 | }, |
| | 8580 | .dst_temps = .{.mem}, |
| | 8581 | .clobbers = .{ .eflags = true }, |
| | 8582 | .each = .{ .once = &.{ |
| | 8583 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 8584 | .{ ._, ._dqa, .mov, .tmp2x, .lea(.xword, .tmp0), ._, ._ }, |
| | 8585 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8586 | .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 8587 | .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 8588 | .{ ._, ._dqa, .mov, .tmp5x, .tmp3x, ._, ._ }, |
| | 8589 | .{ ._, ._dqa, .mov, .tmp6x, .tmp4x, ._, ._ }, |
| | 8590 | .{ ._, .p_, .xor, .tmp5x, .tmp2x, ._, ._ }, |
| | 8591 | .{ ._, .p_, .xor, .tmp6x, .tmp2x, ._, ._ }, |
| | 8592 | .{ ._, .p_d, .cmpgt, .tmp5x, .tmp6x, ._, ._ }, |
| | 8593 | .{ ._, .p_, .@"and", .tmp4x, .tmp5x, ._, ._ }, |
| | 8594 | .{ ._, .p_, .andn, .tmp5x, .tmp3x, ._, ._ }, |
| | 8595 | .{ ._, .p_, .@"or", .tmp4x, .tmp5x, ._, ._ }, |
| | 8596 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp4x, ._, ._ }, |
| | 8597 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 8598 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8599 | } }, |
| | 8600 | }, .{ |
| | 8601 | .required_features = .{ .cmov, null, null, null }, |
| | 8602 | .src_constraints = .{ |
| | 8603 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| | 8604 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| | 8605 | }, |
| | 8606 | .patterns = &.{ |
| | 8607 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8608 | }, |
| | 8609 | .extra_temps = .{ |
| | 8610 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8611 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 8612 | .unused, |
| | 8613 | .unused, |
| | 8614 | .unused, |
| | 8615 | .unused, |
| | 8616 | .unused, |
| | 8617 | .unused, |
| | 8618 | .unused, |
| | 8619 | }, |
| | 8620 | .dst_temps = .{.mem}, |
| | 8621 | .clobbers = .{ .eflags = true }, |
| | 8622 | .each = .{ .once = &.{ |
| | 8623 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8624 | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| | 8625 | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| | 8626 | .{ ._, ._ae, .cmov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| | 8627 | .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ }, |
| | 8628 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| | 8629 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8630 | } }, |
| | 8631 | }, .{ |
| | 8632 | .src_constraints = .{ |
| | 8633 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| | 8634 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| | 8635 | }, |
| | 8636 | .patterns = &.{ |
| | 8637 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8638 | }, |
| | 8639 | .extra_temps = .{ |
| | 8640 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8641 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 8642 | .unused, |
| | 8643 | .unused, |
| | 8644 | .unused, |
| | 8645 | .unused, |
| | 8646 | .unused, |
| | 8647 | .unused, |
| | 8648 | .unused, |
| | 8649 | }, |
| | 8650 | .dst_temps = .{.mem}, |
| | 8651 | .clobbers = .{ .eflags = true }, |
| | 8652 | .each = .{ .once = &.{ |
| | 8653 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8654 | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| | 8655 | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| | 8656 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, |
| | 8657 | .{ ._, ._, .mov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| | 8658 | .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ }, |
| | 8659 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| | 8660 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8661 | } }, |
| | 8662 | }, .{ |
| | 8663 | .required_features = .{ .avx, null, null, null }, |
| | 8664 | .src_constraints = .{ |
| | 8665 | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| | 8666 | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| | 8667 | }, |
| | 8668 | .patterns = &.{ |
| | 8669 | .{ .src = .{ .to_sse, .mem } }, |
| | 8670 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 8671 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 8672 | }, |
| | 8673 | .dst_temps = .{.{ .rc = .sse }}, |
| | 8674 | .each = .{ .once = &.{ |
| | 8675 | .{ ._, .vp_q, .cmpgt, .dst0x, .src0x, .src1x, ._ }, |
| | 8676 | .{ ._, .vp_b, .blendv, .dst0x, .src0x, .src1x, .dst0x }, |
| | 8677 | } }, |
| | 8678 | }, .{ |
| | 8679 | .required_features = .{ .sse4_2, null, null, null }, |
| | 8680 | .src_constraints = .{ |
| | 8681 | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| | 8682 | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| | 8683 | }, |
| | 8684 | .patterns = &.{ |
| | 8685 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 8686 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 8687 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| | 8688 | }, |
| | 8689 | .extra_temps = .{ |
| | 8690 | .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } }, |
| | 8691 | .unused, |
| | 8692 | .unused, |
| | 8693 | .unused, |
| | 8694 | .unused, |
| | 8695 | .unused, |
| | 8696 | .unused, |
| | 8697 | .unused, |
| | 8698 | .unused, |
| | 8699 | }, |
| | 8700 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8701 | .each = .{ .once = &.{ |
| | 8702 | .{ ._, ._dqa, .mov, .tmp0x, .src0x, ._, ._ }, |
| | 8703 | .{ ._, .p_q, .cmpgt, .tmp0x, .src1x, ._, ._ }, |
| | 8704 | .{ ._, .p_b, .blendv, .dst0x, .src1x, .tmp0x, ._ }, |
| | 8705 | } }, |
| | 8706 | }, .{ |
| | 8707 | .required_features = .{ .avx2, null, null, null }, |
| | 8708 | .src_constraints = .{ |
| | 8709 | .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }, |
| | 8710 | .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }, |
| | 8711 | }, |
| | 8712 | .patterns = &.{ |
| | 8713 | .{ .src = .{ .to_sse, .mem } }, |
| | 8714 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 8715 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 8716 | }, |
| | 8717 | .dst_temps = .{.{ .rc = .sse }}, |
| | 8718 | .each = .{ .once = &.{ |
| | 8719 | .{ ._, .vp_q, .cmpgt, .dst0y, .src0y, .src1y, ._ }, |
| | 8720 | .{ ._, .vp_b, .blendv, .dst0y, .src0y, .src1y, .dst0y }, |
| | 8721 | } }, |
| | 8722 | }, .{ |
| | 8723 | .required_features = .{ .avx2, null, null, null }, |
| | 8724 | .src_constraints = .{ |
| | 8725 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } }, |
| | 8726 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } }, |
| | 8727 | }, |
| | 8728 | .patterns = &.{ |
| | 8729 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8730 | }, |
| | 8731 | .extra_temps = .{ |
| | 8732 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8733 | .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } }, |
| | 8734 | .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } }, |
| | 8735 | .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } }, |
| | 8736 | .unused, |
| | 8737 | .unused, |
| | 8738 | .unused, |
| | 8739 | .unused, |
| | 8740 | .unused, |
| | 8741 | }, |
| | 8742 | .dst_temps = .{.mem}, |
| | 8743 | .clobbers = .{ .eflags = true }, |
| | 8744 | .each = .{ .once = &.{ |
| | 8745 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8746 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 8747 | .{ ._, .v_dqa, .mov, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, |
| | 8748 | .{ ._, .vp_q, .cmpgt, .tmp3y, .tmp1y, .tmp2y, ._ }, |
| | 8749 | .{ ._, .vp_b, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y }, |
| | 8750 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| | 8751 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 8752 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8753 | } }, |
| | 8754 | }, .{ |
| | 8755 | .required_features = .{ .avx, null, null, null }, |
| | 8756 | .src_constraints = .{ |
| | 8757 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| | 8758 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| | 8759 | }, |
| | 8760 | .patterns = &.{ |
| | 8761 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8762 | }, |
| | 8763 | .extra_temps = .{ |
| | 8764 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8765 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| | 8766 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| | 8767 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| | 8768 | .unused, |
| | 8769 | .unused, |
| | 8770 | .unused, |
| | 8771 | .unused, |
| | 8772 | .unused, |
| | 8773 | }, |
| | 8774 | .dst_temps = .{.mem}, |
| | 8775 | .clobbers = .{ .eflags = true }, |
| | 8776 | .each = .{ .once = &.{ |
| | 8777 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8778 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 8779 | .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 8780 | .{ ._, .vp_q, .cmpgt, .tmp3x, .tmp1x, .tmp2x, ._ }, |
| | 8781 | .{ ._, .vp_b, .blendv, .tmp1x, .tmp1x, .tmp2x, .tmp3x }, |
| | 8782 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 8783 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 8784 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8785 | } }, |
| | 8786 | }, .{ |
| | 8787 | .required_features = .{ .sse4_2, null, null, null }, |
| | 8788 | .src_constraints = .{ |
| | 8789 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| | 8790 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| | 8791 | }, |
| | 8792 | .patterns = &.{ |
| | 8793 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8794 | }, |
| | 8795 | .extra_temps = .{ |
| | 8796 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8797 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| | 8798 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| | 8799 | .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } }, |
| | 8800 | .unused, |
| | 8801 | .unused, |
| | 8802 | .unused, |
| | 8803 | .unused, |
| | 8804 | .unused, |
| | 8805 | }, |
| | 8806 | .dst_temps = .{.mem}, |
| | 8807 | .clobbers = .{ .eflags = true }, |
| | 8808 | .each = .{ .once = &.{ |
| | 8809 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8810 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 8811 | .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 8812 | .{ ._, ._dqa, .mov, .tmp3x, .tmp1x, ._, ._ }, |
| | 8813 | .{ ._, .p_q, .cmpgt, .tmp3x, .tmp2x, ._, ._ }, |
| | 8814 | .{ ._, .p_b, .blendv, .tmp1x, .tmp2x, .tmp3x, ._ }, |
| | 8815 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 8816 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 8817 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8818 | } }, |
| | 8819 | }, .{ |
| | 8820 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| | 8821 | .src_constraints = .{ |
| | 8822 | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, |
| | 8823 | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, |
| | 8824 | }, |
| | 8825 | .patterns = &.{ |
| | 8826 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8827 | }, |
| | 8828 | .extra_temps = .{ |
| | 8829 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8830 | .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, |
| | 8831 | .unused, |
| | 8832 | .unused, |
| | 8833 | .unused, |
| | 8834 | .unused, |
| | 8835 | .unused, |
| | 8836 | .unused, |
| | 8837 | .unused, |
| | 8838 | }, |
| | 8839 | .dst_temps = .{.mem}, |
| | 8840 | .clobbers = .{ .eflags = true }, |
| | 8841 | .each = .{ .once = &.{ |
| | 8842 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8843 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 8844 | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 8845 | .{ ._, ._ge, .cmov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 8846 | .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| | 8847 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 8848 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8849 | } }, |
| | 8850 | }, .{ |
| | 8851 | .required_features = .{ .@"64bit", null, null, null }, |
| | 8852 | .src_constraints = .{ |
| | 8853 | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, |
| | 8854 | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, |
| | 8855 | }, |
| | 8856 | .patterns = &.{ |
| | 8857 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8858 | }, |
| | 8859 | .extra_temps = .{ |
| | 8860 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8861 | .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, |
| | 8862 | .unused, |
| | 8863 | .unused, |
| | 8864 | .unused, |
| | 8865 | .unused, |
| | 8866 | .unused, |
| | 8867 | .unused, |
| | 8868 | .unused, |
| | 8869 | }, |
| | 8870 | .dst_temps = .{.mem}, |
| | 8871 | .clobbers = .{ .eflags = true }, |
| | 8872 | .each = .{ .once = &.{ |
| | 8873 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8874 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 8875 | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 8876 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, |
| | 8877 | .{ ._, ._, .mov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 8878 | .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| | 8879 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 8880 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8881 | } }, |
| | 8882 | }, .{ |
| | 8883 | .required_features = .{ .avx, null, null, null }, |
| | 8884 | .src_constraints = .{ |
| | 8885 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 8886 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 8887 | }, |
| | 8888 | .patterns = &.{ |
| | 8889 | .{ .src = .{ .to_sse, .mem } }, |
| | 8890 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 8891 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 8892 | }, |
| | 8893 | .extra_temps = .{ |
| | 8894 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 8895 | .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| | 8896 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 8897 | .unused, |
| | 8898 | .unused, |
| | 8899 | .unused, |
| | 8900 | .unused, |
| | 8901 | .unused, |
| | 8902 | .unused, |
| | 8903 | }, |
| | 8904 | .dst_temps = .{.{ .rc = .sse }}, |
| | 8905 | .each = .{ .once = &.{ |
| | 8906 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 8907 | .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, |
| | 8908 | .{ ._, .vp_, .xor, .dst0x, .tmp2x, .src0x, ._ }, |
| | 8909 | .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .src1x, ._ }, |
| | 8910 | .{ ._, .vp_q, .cmpgt, .dst0x, .dst0x, .tmp2x, ._ }, |
| | 8911 | .{ ._, .vp_b, .blendv, .dst0x, .src0x, .src1x, .dst0x }, |
| | 8912 | } }, |
| | 8913 | }, .{ |
| | 8914 | .required_features = .{ .sse4_2, null, null, null }, |
| | 8915 | .src_constraints = .{ |
| | 8916 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 8917 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 8918 | }, |
| | 8919 | .patterns = &.{ |
| | 8920 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 8921 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 8922 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| | 8923 | }, |
| | 8924 | .extra_temps = .{ |
| | 8925 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 8926 | .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| | 8927 | .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } }, |
| | 8928 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 8929 | .unused, |
| | 8930 | .unused, |
| | 8931 | .unused, |
| | 8932 | .unused, |
| | 8933 | .unused, |
| | 8934 | }, |
| | 8935 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8936 | .each = .{ .once = &.{ |
| | 8937 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 8938 | .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, |
| | 8939 | .{ ._, ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ }, |
| | 8940 | .{ ._, .p_, .xor, .tmp2x, .src0x, ._, ._ }, |
| | 8941 | .{ ._, .p_, .xor, .tmp3x, .src1x, ._, ._ }, |
| | 8942 | .{ ._, .p_q, .cmpgt, .tmp2x, .tmp3x, ._, ._ }, |
| | 8943 | .{ ._, .p_b, .blendv, .dst0x, .src1x, .tmp2x, ._ }, |
| | 8944 | } }, |
| | 8945 | }, .{ |
| | 8946 | .required_features = .{ .avx2, null, null, null }, |
| | 8947 | .src_constraints = .{ |
| | 8948 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, |
| | 8949 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, |
| | 8950 | }, |
| | 8951 | .patterns = &.{ |
| | 8952 | .{ .src = .{ .to_sse, .mem } }, |
| | 8953 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 8954 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 8955 | }, |
| | 8956 | .extra_temps = .{ |
| | 8957 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 8958 | .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| | 8959 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| | 8960 | .unused, |
| | 8961 | .unused, |
| | 8962 | .unused, |
| | 8963 | .unused, |
| | 8964 | .unused, |
| | 8965 | .unused, |
| | 8966 | }, |
| | 8967 | .dst_temps = .{.{ .rc = .sse }}, |
| | 8968 | .each = .{ .once = &.{ |
| | 8969 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 8970 | .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ }, |
| | 8971 | .{ ._, .vp_, .xor, .dst0y, .tmp2y, .src0y, ._ }, |
| | 8972 | .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .src1y, ._ }, |
| | 8973 | .{ ._, .vp_q, .cmpgt, .dst0y, .dst0y, .tmp2y, ._ }, |
| | 8974 | .{ ._, .vp_b, .blendv, .dst0y, .src0y, .src1y, .dst0y }, |
| | 8975 | } }, |
| | 8976 | }, .{ |
| | 8977 | .required_features = .{ .avx2, null, null, null }, |
| | 8978 | .src_constraints = .{ |
| | 8979 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, |
| | 8980 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, |
| | 8981 | }, |
| | 8982 | .patterns = &.{ |
| | 8983 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8984 | }, |
| | 8985 | .extra_temps = .{ |
| | 8986 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8987 | .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| | 8988 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| | 8989 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| | 8990 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| | 8991 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| | 8992 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| | 8993 | .unused, |
| | 8994 | .unused, |
| | 8995 | }, |
| | 8996 | .dst_temps = .{.mem}, |
| | 8997 | .clobbers = .{ .eflags = true }, |
| | 8998 | .each = .{ .once = &.{ |
| | 8999 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 9000 | .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ }, |
| | 9001 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 9002 | .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 9003 | .{ ._, .v_dqa, .mov, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, |
| | 9004 | .{ ._, .vp_, .xor, .tmp5y, .tmp3y, .tmp2y, ._ }, |
| | 9005 | .{ ._, .vp_, .xor, .tmp6y, .tmp4y, .tmp2y, ._ }, |
| | 9006 | .{ ._, .vp_q, .cmpgt, .tmp5y, .tmp5y, .tmp6y, ._ }, |
| | 9007 | .{ ._, .vp_b, .blendv, .tmp3y, .tmp3y, .tmp4y, .tmp5y }, |
| | 9008 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ }, |
| | 9009 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 9010 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 9011 | } }, |
| | 9012 | }, .{ |
| | 9013 | .required_features = .{ .avx, null, null, null }, |
| | 9014 | .src_constraints = .{ |
| | 9015 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 9016 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 9017 | }, |
| | 9018 | .patterns = &.{ |
| | 9019 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 9020 | }, |
| | 9021 | .extra_temps = .{ |
| | 9022 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 9023 | .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| | 9024 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 9025 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 9026 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 9027 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 9028 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 9029 | .unused, |
| | 9030 | .unused, |
| | 9031 | }, |
| | 9032 | .dst_temps = .{.mem}, |
| | 9033 | .clobbers = .{ .eflags = true }, |
| | 9034 | .each = .{ .once = &.{ |
| | 9035 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 9036 | .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, |
| | 9037 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 9038 | .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 9039 | .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 9040 | .{ ._, .vp_, .xor, .tmp5x, .tmp3x, .tmp2x, ._ }, |
| | 9041 | .{ ._, .vp_, .xor, .tmp6x, .tmp4x, .tmp2x, ._ }, |
| | 9042 | .{ ._, .vp_q, .cmpgt, .tmp5x, .tmp5x, .tmp6x, ._ }, |
| | 9043 | .{ ._, .vp_b, .blendv, .tmp3x, .tmp3x, .tmp4x, .tmp5x }, |
| | 9044 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, |
| | 9045 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 9046 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 9047 | } }, |
| | 9048 | }, .{ |
| | 9049 | .required_features = .{ .sse4_2, null, null, null }, |
| | 9050 | .src_constraints = .{ |
| | 9051 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 9052 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 9053 | }, |
| | 9054 | .patterns = &.{ |
| | 9055 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 9056 | }, |
| | 9057 | .extra_temps = .{ |
| | 9058 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 9059 | .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| | 9060 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 9061 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 9062 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 9063 | .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } }, |
| | 9064 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 9065 | .unused, |
| | 9066 | .unused, |
| | 9067 | }, |
| | 9068 | .dst_temps = .{.mem}, |
| | 9069 | .clobbers = .{ .eflags = true }, |
| | 9070 | .each = .{ .once = &.{ |
| | 9071 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 9072 | .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, |
| | 9073 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 9074 | .{ .@"0:", ._dqa, .mov, .tmp5x, .tmp2x, ._, ._ }, |
| | 9075 | .{ ._, ._dqa, .mov, .tmp6x, .tmp2x, ._, ._ }, |
| | 9076 | .{ ._, ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 9077 | .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 9078 | .{ ._, .p_, .xor, .tmp5x, .tmp3x, ._, ._ }, |
| | 9079 | .{ ._, .p_, .xor, .tmp6x, .tmp4x, ._, ._ }, |
| | 9080 | .{ ._, .p_q, .cmpgt, .tmp5x, .tmp6x, ._, ._ }, |
| | 9081 | .{ ._, .p_b, .blendv, .tmp3x, .tmp4x, .tmp5x, ._ }, |
| | 9082 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, |
| | 9083 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 9084 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 9085 | } }, |
| | 9086 | }, .{ |
| | 9087 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| | 9088 | .src_constraints = .{ |
| | 9089 | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, |
| | 9090 | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, |
| | 9091 | }, |
| | 9092 | .patterns = &.{ |
| | 9093 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 9094 | }, |
| | 9095 | .extra_temps = .{ |
| | 9096 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 9097 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 9098 | .unused, |
| | 9099 | .unused, |
| | 9100 | .unused, |
| | 9101 | .unused, |
| | 9102 | .unused, |
| | 9103 | .unused, |
| | 9104 | .unused, |
| | 9105 | }, |
| | 9106 | .dst_temps = .{.mem}, |
| | 9107 | .clobbers = .{ .eflags = true }, |
| | 9108 | .each = .{ .once = &.{ |
| | 9109 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 9110 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 9111 | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 9112 | .{ ._, ._ae, .cmov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 9113 | .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| | 9114 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 9115 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 9116 | } }, |
| | 9117 | }, .{ |
| | 9118 | .required_features = .{ .@"64bit", null, null, null }, |
| | 9119 | .src_constraints = .{ |
| | 9120 | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, |
| | 9121 | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, |
| | 9122 | }, |
| | 9123 | .patterns = &.{ |
| | 9124 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 9125 | }, |
| | 9126 | .extra_temps = .{ |
| | 9127 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 9128 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 9129 | .unused, |
| | 9130 | .unused, |
| | 9131 | .unused, |
| | 9132 | .unused, |
| | 9133 | .unused, |
| | 9134 | .unused, |
| | 9135 | .unused, |
| | 9136 | }, |
| | 9137 | .dst_temps = .{.mem}, |
| | 9138 | .clobbers = .{ .eflags = true }, |
| | 9139 | .each = .{ .once = &.{ |
| | 9140 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 9141 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 9142 | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 9143 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, |
| | 9144 | .{ ._, ._, .mov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 9145 | .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| | 9146 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 9147 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 9148 | } }, |
| | 9149 | }, .{ |
| | 9150 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| | 9151 | .src_constraints = .{ .any_scalar_signed_int, .any_scalar_signed_int }, |
| | 9152 | .patterns = &.{ |
| | 9153 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 9154 | }, |
| | 9155 | .extra_temps = .{ |
| | 9156 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 9157 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| | 9158 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| | 9159 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| | 9160 | .unused, |
| | 9161 | .unused, |
| | 9162 | .unused, |
| | 9163 | .unused, |
| | 9164 | .unused, |
| | 9165 | }, |
| | 9166 | .dst_temps = .{.mem}, |
| | 9167 | .clobbers = .{ .eflags = true }, |
| | 9168 | .each = .{ .once = &.{ |
| | 9169 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 9170 | .{ .@"0:", ._, .mov, .tmp1d, .sia(-1, .none, .add_src0_elem_size_div_8), ._, ._ }, |
| | 9171 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| | 9172 | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 9173 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 9174 | .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, |
| | 9175 | .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, |
| | 9176 | .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, |
| | 9177 | .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 9178 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 9179 | .{ ._, ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| | 9180 | .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| | 9181 | .{ ._, ._ge, .cmov, .tmp1p, .tmp2p, ._, ._ }, |
| | 9182 | .{ ._, ._, .lea, .tmp2p, .memiad(.dst0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| | 9183 | .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| | 9184 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| | 9185 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 9186 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 9187 | } }, |
| | 9188 | }, .{ |
| | 9189 | .required_features = .{ .@"64bit", null, null, null }, |
| | 9190 | .src_constraints = .{ .any_scalar_signed_int, .any_scalar_signed_int }, |
| | 9191 | .patterns = &.{ |
| | 9192 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 9193 | }, |
| | 9194 | .extra_temps = .{ |
| | 9195 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 9196 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| | 9197 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| | 9198 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| | 9199 | .unused, |
| | 9200 | .unused, |
| | 9201 | .unused, |
| | 9202 | .unused, |
| | 9203 | .unused, |
| | 9204 | }, |
| | 9205 | .dst_temps = .{.mem}, |
| | 9206 | .clobbers = .{ .eflags = true }, |
| | 9207 | .each = .{ .once = &.{ |
| | 9208 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 9209 | .{ .@"0:", ._, .mov, .tmp1d, .sia(-1, .none, .add_src0_elem_size_div_8), ._, ._ }, |
| | 9210 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| | 9211 | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 9212 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 9213 | .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, |
| | 9214 | .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, |
| | 9215 | .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, |
| | 9216 | .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 9217 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 9218 | .{ ._, ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| | 9219 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, |
| | 9220 | .{ ._, ._, .lea, .tmp1p, .memiad(.src1, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| | 9221 | .{ .@"1:", ._, .lea, .tmp2p, .memiad(.dst0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| | 9222 | .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| | 9223 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| | 9224 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 9225 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 9226 | } }, |
| | 9227 | }, .{ |
| | 9228 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| | 9229 | .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int }, |
| | 9230 | .patterns = &.{ |
| | 9231 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 9232 | }, |
| | 9233 | .extra_temps = .{ |
| | 9234 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 9235 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| | 9236 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| | 9237 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| | 9238 | .unused, |
| | 9239 | .unused, |
| | 9240 | .unused, |
| 6766 | .unused, | 9241 | .unused, |
| 6767 | .unused, | 9242 | .unused, |
| | 9243 | }, |
| | 9244 | .dst_temps = .{.mem}, |
| | 9245 | .clobbers = .{ .eflags = true }, |
| | 9246 | .each = .{ .once = &.{ |
| | 9247 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 9248 | .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| | 9249 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| | 9250 | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 9251 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 9252 | .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, |
| | 9253 | .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, |
| | 9254 | .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, |
| | 9255 | .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| | 9256 | .{ ._, ._, .lea, .tmp2p, .memia(.src1, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| | 9257 | .{ ._, ._ae, .cmov, .tmp1p, .tmp2p, ._, ._ }, |
| | 9258 | .{ ._, ._, .lea, .tmp2p, .memia(.dst0, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| | 9259 | .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| | 9260 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| | 9261 | .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ }, |
| | 9262 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 9263 | } }, |
| | 9264 | }, .{ |
| | 9265 | .required_features = .{ .@"64bit", null, null, null }, |
| | 9266 | .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int }, |
| | 9267 | .patterns = &.{ |
| | 9268 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 9269 | }, |
| | 9270 | .extra_temps = .{ |
| | 9271 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 9272 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| | 9273 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| | 9274 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| 6768 | .unused, | 9275 | .unused, |
| 6769 | .unused, | 9276 | .unused, |
| 6770 | .unused, | 9277 | .unused, |
| ... | @@ -6775,92 +9282,155 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6775,92 +9282,155 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6775 | .clobbers = .{ .eflags = true }, | 9282 | .clobbers = .{ .eflags = true }, |
| 6776 | .each = .{ .once = &.{ | 9283 | .each = .{ .once = &.{ |
| 6777 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 9284 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6778 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, | 9285 | .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| 6779 | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, | 9286 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| | 9287 | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 9288 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 9289 | .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, |
| | 9290 | .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, |
| | 9291 | .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, |
| | 9292 | .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| 6780 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, | 9293 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, |
| 6781 | .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, | 9294 | .{ ._, ._, .lea, .tmp1p, .memia(.src1, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| 6782 | .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, | 9295 | .{ .@"1:", ._, .lea, .tmp2p, .memia(.dst0, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| 6783 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, | 9296 | .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| 6784 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 9297 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| | 9298 | .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ }, |
| | 9299 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 6785 | } }, | 9300 | } }, |
| 6786 | }, .{ | 9301 | }, .{ |
| 6787 | .required_features = .{ .avx, null, null, null }, | 9302 | .required_features = .{ .f16c, null, null, null }, |
| 6788 | .src_constraints = .{ | 9303 | .src_constraints = .{ |
| 6789 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, | 9304 | .{ .scalar_float = .{ .of = .word, .is = .word } }, |
| 6790 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, | 9305 | .{ .scalar_float = .{ .of = .word, .is = .word } }, |
| 6791 | }, | 9306 | }, |
| 6792 | .patterns = &.{ | 9307 | .patterns = &.{ |
| 6793 | .{ .src = .{ .to_sse, .mem } }, | | |
| 6794 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, | | |
| 6795 | .{ .src = .{ .to_sse, .to_sse } }, | 9308 | .{ .src = .{ .to_sse, .to_sse } }, |
| 6796 | }, | 9309 | }, |
| 6797 | .dst_temps = .{.{ .rc = .sse }}, | 9310 | .extra_temps = .{ |
| | 9311 | .{ .type = .f16, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } }, |
| | 9312 | .{ .type = .f16, .kind = .{ .rc = .sse } }, |
| | 9313 | .unused, |
| | 9314 | .unused, |
| | 9315 | .unused, |
| | 9316 | .unused, |
| | 9317 | .unused, |
| | 9318 | .unused, |
| | 9319 | .unused, |
| | 9320 | }, |
| | 9321 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 6798 | .each = .{ .once = &.{ | 9322 | .each = .{ .once = &.{ |
| 6799 | .{ ._, .vp_d, .mins, .dst0x, .src0x, .src1x, ._ }, | 9323 | .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, |
| | 9324 | .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ }, |
| | 9325 | .{ ._, .v_ss, .cmp, .tmp1x, .dst0x, .dst0x, .vp(.unord) }, |
| | 9326 | .{ ._, .v_ss, .min, .dst0x, .tmp0x, .dst0x, ._ }, |
| | 9327 | .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp0x, .tmp1x }, |
| | 9328 | .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ }, |
| 6800 | } }, | 9329 | } }, |
| 6801 | }, .{ | 9330 | }, .{ |
| 6802 | .required_features = .{ .sse4_1, null, null, null }, | 9331 | .required_features = .{ .sse, null, null, null }, |
| 6803 | .src_constraints = .{ | 9332 | .src_constraints = .{ |
| 6804 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, | 9333 | .{ .scalar_float = .{ .of = .word, .is = .word } }, |
| 6805 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, | 9334 | .{ .scalar_float = .{ .of = .word, .is = .word } }, |
| 6806 | }, | 9335 | }, |
| 6807 | .patterns = &.{ | 9336 | .patterns = &.{ |
| 6808 | .{ .src = .{ .to_mut_sse, .mem } }, | 9337 | .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } }, |
| 6809 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, | 9338 | }, |
| 6810 | .{ .src = .{ .to_mut_sse, .to_sse } }, | 9339 | .call_frame = .{ .alignment = .@"16" }, |
| | 9340 | .extra_temps = .{ |
| | 9341 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } }, |
| | 9342 | .unused, |
| | 9343 | .unused, |
| | 9344 | .unused, |
| | 9345 | .unused, |
| | 9346 | .unused, |
| | 9347 | .unused, |
| | 9348 | .unused, |
| | 9349 | .unused, |
| 6811 | }, | 9350 | }, |
| 6812 | .dst_temps = .{.{ .ref = .src0 }}, | 9351 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 9352 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 6813 | .each = .{ .once = &.{ | 9353 | .each = .{ .once = &.{ |
| 6814 | .{ ._, .p_d, .mins, .dst0x, .src1x, ._, ._ }, | 9354 | .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, |
| 6815 | } }, | 9355 | } }, |
| 6816 | }, .{ | 9356 | }, .{ |
| 6817 | .required_features = .{ .sse2, null, null, null }, | 9357 | .required_features = .{ .f16c, null, null, null }, |
| 6818 | .src_constraints = .{ | 9358 | .src_constraints = .{ |
| 6819 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, | 9359 | .{ .scalar_float = .{ .of = .qword, .is = .word } }, |
| 6820 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, | 9360 | .{ .scalar_float = .{ .of = .qword, .is = .word } }, |
| 6821 | }, | 9361 | }, |
| 6822 | .patterns = &.{ | 9362 | .patterns = &.{ |
| 6823 | .{ .src = .{ .to_mut_sse, .mem } }, | 9363 | .{ .src = .{ .mem, .mem } }, |
| 6824 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, | 9364 | .{ .src = .{ .to_sse, .mem } }, |
| 6825 | .{ .src = .{ .to_mut_sse, .to_sse } }, | 9365 | .{ .src = .{ .mem, .to_sse } }, |
| | 9366 | .{ .src = .{ .to_sse, .to_sse } }, |
| 6826 | }, | 9367 | }, |
| 6827 | .dst_temps = .{.{ .rc = .sse }}, | 9368 | .extra_temps = .{ |
| | 9369 | .{ .type = .vector_4_f16, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } }, |
| | 9370 | .{ .type = .vector_4_f16, .kind = .{ .rc = .sse } }, |
| | 9371 | .unused, |
| | 9372 | .unused, |
| | 9373 | .unused, |
| | 9374 | .unused, |
| | 9375 | .unused, |
| | 9376 | .unused, |
| | 9377 | .unused, |
| | 9378 | }, |
| | 9379 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 6828 | .each = .{ .once = &.{ | 9380 | .each = .{ .once = &.{ |
| 6829 | .{ ._, ._dqa, .mov, .dst0x, .src1x, ._, ._ }, | 9381 | .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, |
| 6830 | .{ ._, .p_d, .cmpgt, .dst0x, .src0x, ._, ._ }, | 9382 | .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ }, |
| 6831 | .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ }, | 9383 | .{ ._, .v_ps, .cmp, .tmp1x, .dst0x, .dst0x, .vp(.unord) }, |
| 6832 | .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ }, | 9384 | .{ ._, .v_ps, .min, .dst0x, .tmp0x, .dst0x, ._ }, |
| 6833 | .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ }, | 9385 | .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp0x, .tmp1x }, |
| | 9386 | .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ }, |
| 6834 | } }, | 9387 | } }, |
| 6835 | }, .{ | 9388 | }, .{ |
| 6836 | .required_features = .{ .avx2, null, null, null }, | 9389 | .required_features = .{ .f16c, null, null, null }, |
| 6837 | .src_constraints = .{ | 9390 | .src_constraints = .{ |
| 6838 | .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }, | 9391 | .{ .scalar_float = .{ .of = .xword, .is = .word } }, |
| 6839 | .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }, | 9392 | .{ .scalar_float = .{ .of = .xword, .is = .word } }, |
| 6840 | }, | 9393 | }, |
| 6841 | .patterns = &.{ | 9394 | .patterns = &.{ |
| | 9395 | .{ .src = .{ .mem, .mem } }, |
| 6842 | .{ .src = .{ .to_sse, .mem } }, | 9396 | .{ .src = .{ .to_sse, .mem } }, |
| 6843 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, | 9397 | .{ .src = .{ .mem, .to_sse } }, |
| 6844 | .{ .src = .{ .to_sse, .to_sse } }, | 9398 | .{ .src = .{ .to_sse, .to_sse } }, |
| 6845 | }, | 9399 | }, |
| 6846 | .dst_temps = .{.{ .rc = .sse }}, | 9400 | .extra_temps = .{ |
| | 9401 | .{ .type = .vector_8_f16, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } }, |
| | 9402 | .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } }, |
| | 9403 | .unused, |
| | 9404 | .unused, |
| | 9405 | .unused, |
| | 9406 | .unused, |
| | 9407 | .unused, |
| | 9408 | .unused, |
| | 9409 | .unused, |
| | 9410 | }, |
| | 9411 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 6847 | .each = .{ .once = &.{ | 9412 | .each = .{ .once = &.{ |
| 6848 | .{ ._, .vp_d, .mins, .dst0y, .src0y, .src1y, ._ }, | 9413 | .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ }, |
| | 9414 | .{ ._, .v_ps, .cvtph2, .tmp0y, .src1x, ._, ._ }, |
| | 9415 | .{ ._, .v_ps, .cmp, .tmp1y, .dst0y, .dst0y, .vp(.unord) }, |
| | 9416 | .{ ._, .v_ps, .min, .dst0y, .tmp0y, .dst0y, ._ }, |
| | 9417 | .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .tmp0y, .tmp1y }, |
| | 9418 | .{ ._, .v_, .cvtps2ph, .dst0q, .dst0y, .rm(.{}), ._ }, |
| 6849 | } }, | 9419 | } }, |
| 6850 | }, .{ | 9420 | }, .{ |
| 6851 | .required_features = .{ .avx2, null, null, null }, | 9421 | .required_features = .{ .f16c, null, null, null }, |
| 6852 | .src_constraints = .{ | 9422 | .src_constraints = .{ |
| 6853 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }, | 9423 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, |
| 6854 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }, | 9424 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, |
| 6855 | }, | 9425 | }, |
| 6856 | .patterns = &.{ | 9426 | .patterns = &.{ |
| 6857 | .{ .src = .{ .to_mem, .to_mem } }, | 9427 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6858 | }, | 9428 | }, |
| 6859 | .extra_temps = .{ | 9429 | .extra_temps = .{ |
| 6860 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 9430 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6861 | .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } }, | 9431 | .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } }, |
| 6862 | .unused, | 9432 | .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } }, |
| 6863 | .unused, | 9433 | .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } }, |
| 6864 | .unused, | 9434 | .unused, |
| 6865 | .unused, | 9435 | .unused, |
| 6866 | .unused, | 9436 | .unused, |
| ... | @@ -6871,26 +9441,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6871,26 +9441,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6871 | .clobbers = .{ .eflags = true }, | 9441 | .clobbers = .{ .eflags = true }, |
| 6872 | .each = .{ .once = &.{ | 9442 | .each = .{ .once = &.{ |
| 6873 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 9443 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6874 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | 9444 | .{ .@"0:", .v_ps, .cvtph2, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6875 | .{ ._, .vp_d, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, | 9445 | .{ ._, .v_ps, .cvtph2, .tmp2y, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6876 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, | 9446 | .{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) }, |
| 6877 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | 9447 | .{ ._, .v_ps, .min, .tmp1y, .tmp2y, .tmp1y, ._ }, |
| | 9448 | .{ ._, .v_ps, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y }, |
| | 9449 | .{ ._, .v_, .cvtps2ph, .memia(.dst0x, .tmp0, .add_size), .tmp1y, .rm(.{}), ._ }, |
| | 9450 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6878 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 9451 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6879 | } }, | 9452 | } }, |
| 6880 | }, .{ | 9453 | }, .{ |
| 6881 | .required_features = .{ .avx, null, null, null }, | 9454 | .required_features = .{ .avx, null, null, null }, |
| 6882 | .src_constraints = .{ | 9455 | .src_constraints = .{ |
| 6883 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, | 9456 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 6884 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, | 9457 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 6885 | }, | 9458 | }, |
| 6886 | .patterns = &.{ | 9459 | .patterns = &.{ |
| 6887 | .{ .src = .{ .to_mem, .to_mem } }, | 9460 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6888 | }, | 9461 | }, |
| | 9462 | .call_frame = .{ .alignment = .@"16" }, |
| 6889 | .extra_temps = .{ | 9463 | .extra_temps = .{ |
| 6890 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 9464 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6891 | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, | 9465 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 6892 | .unused, | 9466 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| 6893 | .unused, | 9467 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } }, |
| 6894 | .unused, | 9468 | .unused, |
| 6895 | .unused, | 9469 | .unused, |
| 6896 | .unused, | 9470 | .unused, |
| ... | @@ -6898,29 +9472,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6898,29 +9472,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6898 | .unused, | 9472 | .unused, |
| 6899 | }, | 9473 | }, |
| 6900 | .dst_temps = .{.mem}, | 9474 | .dst_temps = .{.mem}, |
| 6901 | .clobbers = .{ .eflags = true }, | 9475 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 6902 | .each = .{ .once = &.{ | 9476 | .each = .{ .once = &.{ |
| 6903 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 9477 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 6904 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 9478 | .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ }, |
| 6905 | .{ ._, .vp_d, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, | 9479 | .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memia(.src0w, .tmp0, .add_size), .ui(0) }, |
| 6906 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, | 9480 | .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0) }, |
| 6907 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 9481 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| | 9482 | .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ }, |
| | 9483 | .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ }, |
| 6908 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 9484 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6909 | } }, | 9485 | } }, |
| 6910 | }, .{ | 9486 | }, .{ |
| 6911 | .required_features = .{ .sse4_1, null, null, null }, | 9487 | .required_features = .{ .sse4_1, null, null, null }, |
| 6912 | .src_constraints = .{ | 9488 | .src_constraints = .{ |
| 6913 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, | 9489 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 6914 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, | 9490 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 6915 | }, | 9491 | }, |
| 6916 | .patterns = &.{ | 9492 | .patterns = &.{ |
| 6917 | .{ .src = .{ .to_mem, .to_mem } }, | 9493 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6918 | }, | 9494 | }, |
| | 9495 | .call_frame = .{ .alignment = .@"16" }, |
| 6919 | .extra_temps = .{ | 9496 | .extra_temps = .{ |
| 6920 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 9497 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6921 | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, | 9498 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 6922 | .unused, | 9499 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| 6923 | .unused, | 9500 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } }, |
| 6924 | .unused, | 9501 | .unused, |
| 6925 | .unused, | 9502 | .unused, |
| 6926 | .unused, | 9503 | .unused, |
| ... | @@ -6928,91 +9505,103 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6928,91 +9505,103 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6928 | .unused, | 9505 | .unused, |
| 6929 | }, | 9506 | }, |
| 6930 | .dst_temps = .{.mem}, | 9507 | .dst_temps = .{.mem}, |
| 6931 | .clobbers = .{ .eflags = true }, | 9508 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 6932 | .each = .{ .once = &.{ | 9509 | .each = .{ .once = &.{ |
| 6933 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 9510 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 6934 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 9511 | .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| 6935 | .{ ._, .p_d, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | 9512 | .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ }, |
| 6936 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, | 9513 | .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ }, |
| 6937 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 9514 | .{ ._, .p_w, .insr, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0), ._ }, |
| | 9515 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| | 9516 | .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ }, |
| | 9517 | .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ }, |
| 6938 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 9518 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6939 | } }, | 9519 | } }, |
| 6940 | }, .{ | 9520 | }, .{ |
| 6941 | .required_features = .{ .sse2, null, null, null }, | 9521 | .required_features = .{ .sse2, null, null, null }, |
| 6942 | .src_constraints = .{ | 9522 | .src_constraints = .{ |
| 6943 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, | 9523 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 6944 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, | 9524 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 6945 | }, | 9525 | }, |
| 6946 | .patterns = &.{ | 9526 | .patterns = &.{ |
| 6947 | .{ .src = .{ .to_mem, .to_mem } }, | 9527 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6948 | }, | 9528 | }, |
| | 9529 | .call_frame = .{ .alignment = .@"16" }, |
| 6949 | .extra_temps = .{ | 9530 | .extra_temps = .{ |
| 6950 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 9531 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6951 | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, | 9532 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 6952 | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, | 9533 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| 6953 | .unused, | 9534 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } }, |
| 6954 | .unused, | 9535 | .{ .type = .f16, .kind = .{ .reg = .ax } }, |
| 6955 | .unused, | 9536 | .unused, |
| 6956 | .unused, | 9537 | .unused, |
| 6957 | .unused, | 9538 | .unused, |
| 6958 | .unused, | 9539 | .unused, |
| 6959 | }, | 9540 | }, |
| 6960 | .dst_temps = .{.mem}, | 9541 | .dst_temps = .{.mem}, |
| 6961 | .clobbers = .{ .eflags = true }, | 9542 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 6962 | .each = .{ .once = &.{ | 9543 | .each = .{ .once = &.{ |
| 6963 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 9544 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 6964 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 9545 | .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| 6965 | .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | 9546 | .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ }, |
| 6966 | .{ ._, .p_d, .cmpgt, .tmp1x, .tmp2x, ._, ._ }, | 9547 | .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ }, |
| 6967 | .{ ._, .p_, .@"and", .tmp2x, .tmp1x, ._, ._ }, | 9548 | .{ ._, .p_w, .insr, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0), ._ }, |
| 6968 | .{ ._, .p_, .andn, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 9549 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 6969 | .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ }, | 9550 | .{ ._, .p_w, .extr, .tmp4d, .tmp1x, .ui(0), ._ }, |
| 6970 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, | 9551 | .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp4w, ._, ._ }, |
| 6971 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 9552 | .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ }, |
| 6972 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 9553 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6973 | } }, | 9554 | } }, |
| 6974 | }, .{ | 9555 | }, .{ |
| 6975 | .required_features = .{ .cmov, null, null, null }, | 9556 | .required_features = .{ .sse, null, null, null }, |
| 6976 | .src_constraints = .{ | 9557 | .src_constraints = .{ |
| 6977 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, | 9558 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 6978 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, | 9559 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 6979 | }, | 9560 | }, |
| 6980 | .patterns = &.{ | 9561 | .patterns = &.{ |
| 6981 | .{ .src = .{ .to_mem, .to_mem } }, | 9562 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6982 | }, | 9563 | }, |
| | 9564 | .call_frame = .{ .alignment = .@"16" }, |
| 6983 | .extra_temps = .{ | 9565 | .extra_temps = .{ |
| 6984 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 9566 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6985 | .{ .type = .i32, .kind = .{ .rc = .general_purpose } }, | 9567 | .{ .type = .f16, .kind = .{ .reg = .eax } }, |
| 6986 | .unused, | 9568 | .{ .type = .f32, .kind = .mem }, |
| 6987 | .unused, | 9569 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 6988 | .unused, | 9570 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| 6989 | .unused, | 9571 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } }, |
| 6990 | .unused, | 9572 | .unused, |
| 6991 | .unused, | 9573 | .unused, |
| 6992 | .unused, | 9574 | .unused, |
| 6993 | }, | 9575 | }, |
| 6994 | .dst_temps = .{.mem}, | 9576 | .dst_temps = .{.mem}, |
| 6995 | .clobbers = .{ .eflags = true }, | 9577 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 6996 | .each = .{ .once = &.{ | 9578 | .each = .{ .once = &.{ |
| 6997 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 9579 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 6998 | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, | 9580 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 6999 | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, | 9581 | .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ }, |
| 7000 | .{ ._, ._ge, .cmov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, | 9582 | .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ }, |
| 7001 | .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ }, | 9583 | .{ ._, ._, .movzx, .tmp1d, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 7002 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, | 9584 | .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ }, |
| | 9585 | .{ ._, ._ss, .mov, .tmp4x, .mem(.tmp2d), ._, ._ }, |
| | 9586 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| | 9587 | .{ ._, ._ss, .mov, .mem(.tmp2d), .tmp3x, ._, ._ }, |
| | 9588 | .{ ._, ._, .mov, .tmp1d, .mem(.tmp2d), ._, ._ }, |
| | 9589 | .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| | 9590 | .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ }, |
| 7003 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 9591 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7004 | } }, | 9592 | } }, |
| 7005 | }, .{ | 9593 | }, .{ |
| | 9594 | .required_features = .{ .avx, null, null, null }, |
| 7006 | .src_constraints = .{ | 9595 | .src_constraints = .{ |
| 7007 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, | 9596 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 7008 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, | 9597 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 7009 | }, | 9598 | }, |
| 7010 | .patterns = &.{ | 9599 | .patterns = &.{ |
| 7011 | .{ .src = .{ .to_mem, .to_mem } }, | 9600 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7012 | }, | 9601 | }, |
| 7013 | .extra_temps = .{ | 9602 | .extra_temps = .{ |
| 7014 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 9603 | .{ .type = .f32, .kind = .{ .rc = .sse } }, |
| 7015 | .{ .type = .i32, .kind = .{ .rc = .general_purpose } }, | 9604 | .unused, |
| 7016 | .unused, | 9605 | .unused, |
| 7017 | .unused, | 9606 | .unused, |
| 7018 | .unused, | 9607 | .unused, |
| ... | @@ -7021,63 +9610,70 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -7021,63 +9610,70 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7021 | .unused, | 9610 | .unused, |
| 7022 | .unused, | 9611 | .unused, |
| 7023 | }, | 9612 | }, |
| 7024 | .dst_temps = .{.mem}, | 9613 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 7025 | .clobbers = .{ .eflags = true }, | | |
| 7026 | .each = .{ .once = &.{ | 9614 | .each = .{ .once = &.{ |
| 7027 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 9615 | .{ ._, .v_ss, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) }, |
| 7028 | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, | 9616 | .{ ._, .v_ss, .min, .dst0x, .src1x, .src0x, ._ }, |
| 7029 | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, | 9617 | .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .src1x, .tmp0x }, |
| 7030 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, | | |
| 7031 | .{ ._, ._, .mov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, | | |
| 7032 | .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ }, | | |
| 7033 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, | | |
| 7034 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 7035 | } }, | 9618 | } }, |
| 7036 | }, .{ | 9619 | }, .{ |
| 7037 | .required_features = .{ .avx, null, null, null }, | 9620 | .required_features = .{ .sse4_1, null, null, null }, |
| 7038 | .src_constraints = .{ | 9621 | .src_constraints = .{ |
| 7039 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, | 9622 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 7040 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, | 9623 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 7041 | }, | 9624 | }, |
| 7042 | .patterns = &.{ | 9625 | .patterns = &.{ |
| 7043 | .{ .src = .{ .to_sse, .mem } }, | 9626 | .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } }, |
| 7044 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, | | |
| 7045 | .{ .src = .{ .to_sse, .to_sse } }, | | |
| 7046 | }, | 9627 | }, |
| 7047 | .dst_temps = .{.{ .rc = .sse }}, | 9628 | .dst_temps = .{.{ .rc = .sse }}, |
| 7048 | .each = .{ .once = &.{ | 9629 | .each = .{ .once = &.{ |
| 7049 | .{ ._, .vp_d, .minu, .dst0x, .src0x, .src1x, ._ }, | 9630 | .{ ._, ._ps, .mova, .dst0x, .src1x, ._, ._ }, |
| | 9631 | .{ ._, ._ss, .min, .dst0x, .src0x, ._, ._ }, |
| | 9632 | .{ ._, ._ss, .cmp, .src0x, .src0x, .vp(.unord), ._ }, |
| | 9633 | .{ ._, ._ps, .blendv, .dst0x, .src1x, .src0x, ._ }, |
| 7050 | } }, | 9634 | } }, |
| 7051 | }, .{ | 9635 | }, .{ |
| 7052 | .required_features = .{ .sse4_1, null, null, null }, | 9636 | .required_features = .{ .sse, null, null, null }, |
| 7053 | .src_constraints = .{ | 9637 | .src_constraints = .{ |
| 7054 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, | 9638 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 7055 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, | 9639 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 7056 | }, | 9640 | }, |
| 7057 | .patterns = &.{ | 9641 | .patterns = &.{ |
| 7058 | .{ .src = .{ .to_mut_sse, .mem } }, | | |
| 7059 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, | | |
| 7060 | .{ .src = .{ .to_mut_sse, .to_sse } }, | 9642 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 7061 | }, | 9643 | }, |
| | 9644 | .extra_temps = .{ |
| | 9645 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| | 9646 | .unused, |
| | 9647 | .unused, |
| | 9648 | .unused, |
| | 9649 | .unused, |
| | 9650 | .unused, |
| | 9651 | .unused, |
| | 9652 | .unused, |
| | 9653 | .unused, |
| | 9654 | }, |
| 7062 | .dst_temps = .{.{ .ref = .src0 }}, | 9655 | .dst_temps = .{.{ .ref = .src0 }}, |
| 7063 | .each = .{ .once = &.{ | 9656 | .each = .{ .once = &.{ |
| 7064 | .{ ._, .p_d, .minu, .dst0x, .src1x, ._, ._ }, | 9657 | .{ ._, ._ps, .mova, .tmp0x, .src1x, ._, ._ }, |
| | 9658 | .{ ._, ._ss, .min, .tmp0x, .src0x, ._, ._ }, |
| | 9659 | .{ ._, ._ss, .cmp, .dst0x, .src0x, .vp(.ord), ._ }, |
| | 9660 | .{ ._, ._ps, .@"and", .tmp0x, .dst0x, ._, ._ }, |
| | 9661 | .{ ._, ._ps, .andn, .dst0x, .src1x, ._, ._ }, |
| | 9662 | .{ ._, ._ps, .@"or", .dst0x, .tmp0x, ._, ._ }, |
| 7065 | } }, | 9663 | } }, |
| 7066 | }, .{ | 9664 | }, .{ |
| 7067 | .required_features = .{ .sse2, null, null, null }, | 9665 | .required_features = .{ .avx, null, null, null }, |
| 7068 | .src_constraints = .{ | 9666 | .src_constraints = .{ |
| 7069 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, | 9667 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 7070 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, | 9668 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 7071 | }, | 9669 | }, |
| 7072 | .patterns = &.{ | 9670 | .patterns = &.{ |
| 7073 | .{ .src = .{ .to_mut_sse, .mem } }, | 9671 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7074 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, | | |
| 7075 | .{ .src = .{ .to_mut_sse, .to_sse } }, | | |
| 7076 | }, | 9672 | }, |
| 7077 | .extra_temps = .{ | 9673 | .extra_temps = .{ |
| 7078 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 9674 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 7079 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, | 9675 | .unused, |
| 7080 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, | 9676 | .unused, |
| 7081 | .unused, | 9677 | .unused, |
| 7082 | .unused, | 9678 | .unused, |
| 7083 | .unused, | 9679 | .unused, |
| ... | @@ -7085,45 +9681,44 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -7085,45 +9681,44 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7085 | .unused, | 9681 | .unused, |
| 7086 | .unused, | 9682 | .unused, |
| 7087 | }, | 9683 | }, |
| 7088 | .dst_temps = .{.{ .rc = .sse }}, | 9684 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 7089 | .each = .{ .once = &.{ | 9685 | .each = .{ .once = &.{ |
| 7090 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 9686 | .{ ._, .v_ps, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) }, |
| 7091 | .{ ._, ._dqa, .mov, .dst0x, .lea(.xword, .tmp0), ._, ._ }, | 9687 | .{ ._, .v_ps, .min, .dst0x, .src1x, .src0x, ._ }, |
| 7092 | .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ }, | 9688 | .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .src1x, .tmp0x }, |
| 7093 | .{ ._, .p_, .xor, .dst0x, .src1x, ._, ._ }, | | |
| 7094 | .{ ._, .p_, .xor, .tmp2x, .src0x, ._, ._ }, | | |
| 7095 | .{ ._, .p_d, .cmpgt, .dst0x, .tmp2x, ._, ._ }, | | |
| 7096 | .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ }, | | |
| 7097 | .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ }, | | |
| 7098 | .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ }, | | |
| 7099 | } }, | 9689 | } }, |
| 7100 | }, .{ | 9690 | }, .{ |
| 7101 | .required_features = .{ .avx2, null, null, null }, | 9691 | .required_features = .{ .sse4_1, null, null, null }, |
| 7102 | .src_constraints = .{ | 9692 | .src_constraints = .{ |
| 7103 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, | 9693 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 7104 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, | 9694 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 7105 | }, | 9695 | }, |
| 7106 | .patterns = &.{ | 9696 | .patterns = &.{ |
| 7107 | .{ .src = .{ .to_sse, .mem } }, | 9697 | .{ .src = .{ .{ .to_reg = .xmm0 }, .mem } }, |
| 7108 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, | 9698 | .{ .src = .{ .mem, .{ .to_reg = .xmm0 } }, .commute = .{ 0, 1 } }, |
| 7109 | .{ .src = .{ .to_sse, .to_sse } }, | 9699 | .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } }, |
| 7110 | }, | 9700 | }, |
| 7111 | .dst_temps = .{.{ .rc = .sse }}, | 9701 | .dst_temps = .{.{ .rc = .sse }}, |
| 7112 | .each = .{ .once = &.{ | 9702 | .each = .{ .once = &.{ |
| 7113 | .{ ._, .vp_d, .minu, .dst0y, .src0y, .src1y, ._ }, | 9703 | .{ ._, ._ps, .mova, .dst0x, .src1x, ._, ._ }, |
| | 9704 | .{ ._, ._ps, .min, .dst0x, .src0x, ._, ._ }, |
| | 9705 | .{ ._, ._ps, .cmp, .src0x, .src0x, .vp(.unord), ._ }, |
| | 9706 | .{ ._, ._ps, .blendv, .dst0x, .src1x, .src0x, ._ }, |
| 7114 | } }, | 9707 | } }, |
| 7115 | }, .{ | 9708 | }, .{ |
| 7116 | .required_features = .{ .avx2, null, null, null }, | 9709 | .required_features = .{ .sse, null, null, null }, |
| 7117 | .src_constraints = .{ | 9710 | .src_constraints = .{ |
| 7118 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, | 9711 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 7119 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, | 9712 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 7120 | }, | 9713 | }, |
| 7121 | .patterns = &.{ | 9714 | .patterns = &.{ |
| 7122 | .{ .src = .{ .to_mem, .to_mem } }, | 9715 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 9716 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 9717 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 7123 | }, | 9718 | }, |
| 7124 | .extra_temps = .{ | 9719 | .extra_temps = .{ |
| 7125 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 9720 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 7126 | .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } }, | 9721 | .unused, |
| 7127 | .unused, | 9722 | .unused, |
| 7128 | .unused, | 9723 | .unused, |
| 7129 | .unused, | 9724 | .unused, |
| ... | @@ -7132,28 +9727,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -7132,28 +9727,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7132 | .unused, | 9727 | .unused, |
| 7133 | .unused, | 9728 | .unused, |
| 7134 | }, | 9729 | }, |
| 7135 | .dst_temps = .{.mem}, | 9730 | .dst_temps = .{.{ .ref = .src0 }}, |
| 7136 | .clobbers = .{ .eflags = true }, | | |
| 7137 | .each = .{ .once = &.{ | 9731 | .each = .{ .once = &.{ |
| 7138 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 9732 | .{ ._, ._ps, .mova, .tmp0x, .src1x, ._, ._ }, |
| 7139 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | 9733 | .{ ._, ._ps, .min, .tmp0x, .src0x, ._, ._ }, |
| 7140 | .{ ._, .vp_d, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, | 9734 | .{ ._, ._ps, .cmp, .dst0x, .src0x, .vp(.ord), ._ }, |
| 7141 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, | 9735 | .{ ._, ._ps, .@"and", .tmp0x, .dst0x, ._, ._ }, |
| 7142 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | 9736 | .{ ._, ._ps, .andn, .dst0x, .src1x, ._, ._ }, |
| 7143 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 9737 | .{ ._, ._ps, .@"or", .dst0x, .tmp0x, ._, ._ }, |
| 7144 | } }, | 9738 | } }, |
| 7145 | }, .{ | 9739 | }, .{ |
| 7146 | .required_features = .{ .avx, null, null, null }, | 9740 | .required_features = .{ .avx, null, null, null }, |
| 7147 | .src_constraints = .{ | 9741 | .src_constraints = .{ |
| 7148 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, | 9742 | .{ .scalar_float = .{ .of = .yword, .is = .dword } }, |
| 7149 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, | 9743 | .{ .scalar_float = .{ .of = .yword, .is = .dword } }, |
| 7150 | }, | 9744 | }, |
| 7151 | .patterns = &.{ | 9745 | .patterns = &.{ |
| 7152 | .{ .src = .{ .to_mem, .to_mem } }, | 9746 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7153 | }, | 9747 | }, |
| 7154 | .extra_temps = .{ | 9748 | .extra_temps = .{ |
| 7155 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 9749 | .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, |
| 7156 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, | 9750 | .unused, |
| 7157 | .unused, | 9751 | .unused, |
| 7158 | .unused, | 9752 | .unused, |
| 7159 | .unused, | 9753 | .unused, |
| ... | @@ -7162,30 +9756,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -7162,30 +9756,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7162 | .unused, | 9756 | .unused, |
| 7163 | .unused, | 9757 | .unused, |
| 7164 | }, | 9758 | }, |
| 7165 | .dst_temps = .{.mem}, | 9759 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 7166 | .clobbers = .{ .eflags = true }, | | |
| 7167 | .each = .{ .once = &.{ | 9760 | .each = .{ .once = &.{ |
| 7168 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 9761 | .{ ._, .v_ps, .cmp, .tmp0y, .src0y, .src0y, .vp(.unord) }, |
| 7169 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 9762 | .{ ._, .v_ps, .min, .dst0y, .src1y, .src0y, ._ }, |
| 7170 | .{ ._, .vp_d, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, | 9763 | .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .src1y, .tmp0y }, |
| 7171 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, | | |
| 7172 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | | |
| 7173 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 7174 | } }, | 9764 | } }, |
| 7175 | }, .{ | 9765 | }, .{ |
| 7176 | .required_features = .{ .sse4_1, null, null, null }, | 9766 | .required_features = .{ .avx, null, null, null }, |
| 7177 | .src_constraints = .{ | 9767 | .src_constraints = .{ |
| 7178 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, | 9768 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, |
| 7179 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, | 9769 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, |
| 7180 | }, | 9770 | }, |
| 7181 | .patterns = &.{ | 9771 | .patterns = &.{ |
| 7182 | .{ .src = .{ .to_mem, .to_mem } }, | 9772 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7183 | }, | 9773 | }, |
| 7184 | .extra_temps = .{ | 9774 | .extra_temps = .{ |
| 7185 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 9775 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7186 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, | 9776 | .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, |
| 7187 | .unused, | 9777 | .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, |
| 7188 | .unused, | 9778 | .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, |
| 7189 | .unused, | 9779 | .unused, |
| 7190 | .unused, | 9780 | .unused, |
| 7191 | .unused, | 9781 | .unused, |
| ... | @@ -7195,67 +9785,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -7195,67 +9785,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7195 | .dst_temps = .{.mem}, | 9785 | .dst_temps = .{.mem}, |
| 7196 | .clobbers = .{ .eflags = true }, | 9786 | .clobbers = .{ .eflags = true }, |
| 7197 | .each = .{ .once = &.{ | 9787 | .each = .{ .once = &.{ |
| 7198 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 9788 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 7199 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 9789 | .{ .@"0:", .v_ps, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 7200 | .{ ._, .p_d, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | 9790 | .{ ._, .v_ps, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, |
| 7201 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, | 9791 | .{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) }, |
| 7202 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 9792 | .{ ._, .v_ps, .min, .tmp1y, .tmp2y, .tmp1y, ._ }, |
| | 9793 | .{ ._, .v_ps, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y }, |
| | 9794 | .{ ._, .v_ps, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| | 9795 | .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ }, |
| 7203 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 9796 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7204 | } }, | 9797 | } }, |
| 7205 | }, .{ | 9798 | }, .{ |
| 7206 | .required_features = .{ .sse2, null, null, null }, | 9799 | .required_features = .{ .sse4_1, null, null, null }, |
| 7207 | .src_constraints = .{ | 9800 | .src_constraints = .{ |
| 7208 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, | 9801 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, |
| 7209 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, | 9802 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, |
| 7210 | }, | 9803 | }, |
| 7211 | .patterns = &.{ | 9804 | .patterns = &.{ |
| 7212 | .{ .src = .{ .to_mem, .to_mem } }, | 9805 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7213 | }, | 9806 | }, |
| 7214 | .extra_temps = .{ | 9807 | .extra_temps = .{ |
| 7215 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 9808 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7216 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, | 9809 | .{ .type = .vector_4_f32, .kind = .{ .reg = .xmm0 } }, |
| 7217 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, | 9810 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 7218 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, | 9811 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 7219 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, | 9812 | .unused, |
| 7220 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, | 9813 | .unused, |
| 7221 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, | 9814 | .unused, |
| 7222 | .unused, | 9815 | .unused, |
| 7223 | .unused, | 9816 | .unused, |
| 7224 | }, | 9817 | }, |
| 7225 | .dst_temps = .{.mem}, | 9818 | .dst_temps = .{.mem}, |
| 7226 | .clobbers = .{ .eflags = true }, | 9819 | .clobbers = .{ .eflags = true }, |
| 7227 | .each = .{ .once = &.{ | 9820 | .each = .{ .once = &.{ |
| 7228 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 9821 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 7229 | .{ ._, ._dqa, .mov, .tmp2x, .lea(.xword, .tmp0), ._, ._ }, | 9822 | .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7230 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 9823 | .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7231 | .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 9824 | .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ }, |
| 7232 | .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | 9825 | .{ ._, ._ps, .min, .tmp3x, .tmp1x, ._, ._ }, |
| 7233 | .{ ._, ._dqa, .mov, .tmp5x, .tmp3x, ._, ._ }, | 9826 | .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ }, |
| 7234 | .{ ._, ._dqa, .mov, .tmp6x, .tmp4x, ._, ._ }, | 9827 | .{ ._, ._ps, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ }, |
| 7235 | .{ ._, .p_, .xor, .tmp5x, .tmp2x, ._, ._ }, | 9828 | .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, |
| 7236 | .{ ._, .p_, .xor, .tmp6x, .tmp2x, ._, ._ }, | 9829 | .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, |
| 7237 | .{ ._, .p_d, .cmpgt, .tmp5x, .tmp6x, ._, ._ }, | | |
| 7238 | .{ ._, .p_, .@"and", .tmp4x, .tmp5x, ._, ._ }, | | |
| 7239 | .{ ._, .p_, .andn, .tmp5x, .tmp3x, ._, ._ }, | | |
| 7240 | .{ ._, .p_, .@"or", .tmp4x, .tmp5x, ._, ._ }, | | |
| 7241 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp4x, ._, ._ }, | | |
| 7242 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | | |
| 7243 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 9830 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7244 | } }, | 9831 | } }, |
| 7245 | }, .{ | 9832 | }, .{ |
| 7246 | .required_features = .{ .cmov, null, null, null }, | 9833 | .required_features = .{ .sse, null, null, null }, |
| 7247 | .src_constraints = .{ | 9834 | .src_constraints = .{ |
| 7248 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, | 9835 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, |
| 7249 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, | 9836 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, |
| 7250 | }, | 9837 | }, |
| 7251 | .patterns = &.{ | 9838 | .patterns = &.{ |
| 7252 | .{ .src = .{ .to_mem, .to_mem } }, | 9839 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7253 | }, | 9840 | }, |
| 7254 | .extra_temps = .{ | 9841 | .extra_temps = .{ |
| 7255 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 9842 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7256 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 9843 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 7257 | .unused, | 9844 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 7258 | .unused, | 9845 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 7259 | .unused, | 9846 | .unused, |
| 7260 | .unused, | 9847 | .unused, |
| 7261 | .unused, | 9848 | .unused, |
| ... | @@ -7265,25 +9852,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -7265,25 +9852,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7265 | .dst_temps = .{.mem}, | 9852 | .dst_temps = .{.mem}, |
| 7266 | .clobbers = .{ .eflags = true }, | 9853 | .clobbers = .{ .eflags = true }, |
| 7267 | .each = .{ .once = &.{ | 9854 | .each = .{ .once = &.{ |
| 7268 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 9855 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 7269 | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, | 9856 | .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7270 | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, | 9857 | .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7271 | .{ ._, ._ae, .cmov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, | 9858 | .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ }, |
| 7272 | .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ }, | 9859 | .{ ._, ._ps, .min, .tmp3x, .tmp1x, ._, ._ }, |
| 7273 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, | 9860 | .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.ord), ._ }, |
| | 9861 | .{ ._, ._ps, .@"and", .tmp3x, .tmp1x, ._, ._ }, |
| | 9862 | .{ ._, ._ps, .andn, .tmp1x, .tmp2x, ._, ._ }, |
| | 9863 | .{ ._, ._ps, .@"or", .tmp1x, .tmp3x, ._, ._ }, |
| | 9864 | .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 9865 | .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, |
| 7274 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 9866 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7275 | } }, | 9867 | } }, |
| 7276 | }, .{ | 9868 | }, .{ |
| | 9869 | .required_features = .{ .avx, null, null, null }, |
| 7277 | .src_constraints = .{ | 9870 | .src_constraints = .{ |
| 7278 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, | 9871 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 7279 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, | 9872 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 7280 | }, | 9873 | }, |
| 7281 | .patterns = &.{ | 9874 | .patterns = &.{ |
| 7282 | .{ .src = .{ .to_mem, .to_mem } }, | 9875 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7283 | }, | 9876 | }, |
| 7284 | .extra_temps = .{ | 9877 | .extra_temps = .{ |
| 7285 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 9878 | .{ .type = .f64, .kind = .{ .rc = .sse } }, |
| 7286 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 9879 | .unused, |
| 7287 | .unused, | 9880 | .unused, |
| 7288 | .unused, | 9881 | .unused, |
| 7289 | .unused, | 9882 | .unused, |
| ... | @@ -7292,47 +9885,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -7292,47 +9885,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7292 | .unused, | 9885 | .unused, |
| 7293 | .unused, | 9886 | .unused, |
| 7294 | }, | 9887 | }, |
| 7295 | .dst_temps = .{.mem}, | 9888 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 7296 | .clobbers = .{ .eflags = true }, | | |
| 7297 | .each = .{ .once = &.{ | 9889 | .each = .{ .once = &.{ |
| 7298 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 9890 | .{ ._, .v_sd, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) }, |
| 7299 | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, | 9891 | .{ ._, .v_sd, .min, .dst0x, .src1x, .src0x, ._ }, |
| 7300 | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, | 9892 | .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .src1x, .tmp0x }, |
| 7301 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, | | |
| 7302 | .{ ._, ._, .mov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, | | |
| 7303 | .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ }, | | |
| 7304 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, | | |
| 7305 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 7306 | } }, | 9893 | } }, |
| 7307 | }, .{ | 9894 | }, .{ |
| 7308 | .required_features = .{ .avx, null, null, null }, | 9895 | .required_features = .{ .sse4_1, null, null, null }, |
| 7309 | .src_constraints = .{ | 9896 | .src_constraints = .{ |
| 7310 | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, | 9897 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 7311 | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, | 9898 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 7312 | }, | 9899 | }, |
| 7313 | .patterns = &.{ | 9900 | .patterns = &.{ |
| 7314 | .{ .src = .{ .to_sse, .mem } }, | 9901 | .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } }, |
| 7315 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, | | |
| 7316 | .{ .src = .{ .to_sse, .to_sse } }, | | |
| 7317 | }, | 9902 | }, |
| 7318 | .dst_temps = .{.{ .rc = .sse }}, | 9903 | .dst_temps = .{.{ .rc = .sse }}, |
| 7319 | .each = .{ .once = &.{ | 9904 | .each = .{ .once = &.{ |
| 7320 | .{ ._, .vp_q, .cmpgt, .dst0x, .src0x, .src1x, ._ }, | 9905 | .{ ._, ._pd, .mova, .dst0x, .src1x, ._, ._ }, |
| 7321 | .{ ._, .vp_b, .blendv, .dst0x, .src0x, .src1x, .dst0x }, | 9906 | .{ ._, ._sd, .min, .dst0x, .src0x, ._, ._ }, |
| | 9907 | .{ ._, ._sd, .cmp, .src0x, .src0x, .vp(.unord), ._ }, |
| | 9908 | .{ ._, ._pd, .blendv, .dst0x, .src1x, .src0x, ._ }, |
| 7322 | } }, | 9909 | } }, |
| 7323 | }, .{ | 9910 | }, .{ |
| 7324 | .required_features = .{ .sse4_2, null, null, null }, | 9911 | .required_features = .{ .sse2, null, null, null }, |
| 7325 | .src_constraints = .{ | 9912 | .src_constraints = .{ |
| 7326 | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, | 9913 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 7327 | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, | 9914 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 7328 | }, | 9915 | }, |
| 7329 | .patterns = &.{ | 9916 | .patterns = &.{ |
| 7330 | .{ .src = .{ .to_mut_sse, .mem } }, | | |
| 7331 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, | | |
| 7332 | .{ .src = .{ .to_mut_sse, .to_sse } }, | 9917 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 7333 | }, | 9918 | }, |
| 7334 | .extra_temps = .{ | 9919 | .extra_temps = .{ |
| 7335 | .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } }, | 9920 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 7336 | .unused, | 9921 | .unused, |
| 7337 | .unused, | 9922 | .unused, |
| 7338 | .unused, | 9923 | .unused, |
| ... | @@ -7344,72 +9929,154 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -7344,72 +9929,154 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7344 | }, | 9929 | }, |
| 7345 | .dst_temps = .{.{ .ref = .src0 }}, | 9930 | .dst_temps = .{.{ .ref = .src0 }}, |
| 7346 | .each = .{ .once = &.{ | 9931 | .each = .{ .once = &.{ |
| 7347 | .{ ._, ._dqa, .mov, .tmp0x, .src0x, ._, ._ }, | 9932 | .{ ._, ._pd, .mova, .tmp0x, .src1x, ._, ._ }, |
| 7348 | .{ ._, .p_q, .cmpgt, .tmp0x, .src1x, ._, ._ }, | 9933 | .{ ._, ._sd, .min, .tmp0x, .src0x, ._, ._ }, |
| 7349 | .{ ._, .p_b, .blendv, .dst0x, .src1x, .tmp0x, ._ }, | 9934 | .{ ._, ._sd, .cmp, .dst0x, .src0x, .vp(.ord), ._ }, |
| | 9935 | .{ ._, ._pd, .@"and", .tmp0x, .dst0x, ._, ._ }, |
| | 9936 | .{ ._, ._pd, .andn, .dst0x, .src1x, ._, ._ }, |
| | 9937 | .{ ._, ._pd, .@"or", .dst0x, .tmp0x, ._, ._ }, |
| 7350 | } }, | 9938 | } }, |
| 7351 | }, .{ | 9939 | }, .{ |
| 7352 | .required_features = .{ .avx2, null, null, null }, | 9940 | .required_features = .{ .sse, null, null, null }, |
| 7353 | .src_constraints = .{ | 9941 | .src_constraints = .{ |
| 7354 | .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }, | 9942 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 7355 | .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }, | 9943 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| | 9944 | }, |
| | 9945 | .patterns = &.{ |
| | 9946 | .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } }, |
| | 9947 | }, |
| | 9948 | .call_frame = .{ .alignment = .@"16" }, |
| | 9949 | .extra_temps = .{ |
| | 9950 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmin" } } }, |
| | 9951 | .unused, |
| | 9952 | .unused, |
| | 9953 | .unused, |
| | 9954 | .unused, |
| | 9955 | .unused, |
| | 9956 | .unused, |
| | 9957 | .unused, |
| | 9958 | .unused, |
| | 9959 | }, |
| | 9960 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 9961 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| | 9962 | .each = .{ .once = &.{ |
| | 9963 | .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, |
| | 9964 | } }, |
| | 9965 | }, .{ |
| | 9966 | .required_features = .{ .avx, null, null, null }, |
| | 9967 | .src_constraints = .{ |
| | 9968 | .{ .scalar_float = .{ .of = .xword, .is = .qword } }, |
| | 9969 | .{ .scalar_float = .{ .of = .xword, .is = .qword } }, |
| 7356 | }, | 9970 | }, |
| 7357 | .patterns = &.{ | 9971 | .patterns = &.{ |
| 7358 | .{ .src = .{ .to_sse, .mem } }, | | |
| 7359 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, | | |
| 7360 | .{ .src = .{ .to_sse, .to_sse } }, | 9972 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7361 | }, | 9973 | }, |
| | 9974 | .extra_temps = .{ |
| | 9975 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| | 9976 | .unused, |
| | 9977 | .unused, |
| | 9978 | .unused, |
| | 9979 | .unused, |
| | 9980 | .unused, |
| | 9981 | .unused, |
| | 9982 | .unused, |
| | 9983 | .unused, |
| | 9984 | }, |
| | 9985 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| | 9986 | .each = .{ .once = &.{ |
| | 9987 | .{ ._, .v_pd, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) }, |
| | 9988 | .{ ._, .v_pd, .min, .dst0x, .src1x, .src0x, ._ }, |
| | 9989 | .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .src1x, .tmp0x }, |
| | 9990 | } }, |
| | 9991 | }, .{ |
| | 9992 | .required_features = .{ .sse4_1, null, null, null }, |
| | 9993 | .src_constraints = .{ |
| | 9994 | .{ .scalar_float = .{ .of = .xword, .is = .qword } }, |
| | 9995 | .{ .scalar_float = .{ .of = .xword, .is = .qword } }, |
| | 9996 | }, |
| | 9997 | .patterns = &.{ |
| | 9998 | .{ .src = .{ .{ .to_reg = .xmm0 }, .mem } }, |
| | 9999 | .{ .src = .{ .mem, .{ .to_reg = .xmm0 } }, .commute = .{ 0, 1 } }, |
| | 10000 | .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } }, |
| | 10001 | }, |
| 7362 | .dst_temps = .{.{ .rc = .sse }}, | 10002 | .dst_temps = .{.{ .rc = .sse }}, |
| 7363 | .each = .{ .once = &.{ | 10003 | .each = .{ .once = &.{ |
| 7364 | .{ ._, .vp_q, .cmpgt, .dst0y, .src0y, .src1y, ._ }, | 10004 | .{ ._, ._pd, .mova, .dst0x, .src1x, ._, ._ }, |
| 7365 | .{ ._, .vp_b, .blendv, .dst0y, .src0y, .src1y, .dst0y }, | 10005 | .{ ._, ._pd, .min, .dst0x, .src0x, ._, ._ }, |
| | 10006 | .{ ._, ._pd, .cmp, .src0x, .src0x, .vp(.unord), ._ }, |
| | 10007 | .{ ._, ._pd, .blendv, .dst0x, .src1x, .src0x, ._ }, |
| | 10008 | } }, |
| | 10009 | }, .{ |
| | 10010 | .required_features = .{ .sse2, null, null, null }, |
| | 10011 | .src_constraints = .{ |
| | 10012 | .{ .scalar_float = .{ .of = .xword, .is = .qword } }, |
| | 10013 | .{ .scalar_float = .{ .of = .xword, .is = .qword } }, |
| | 10014 | }, |
| | 10015 | .patterns = &.{ |
| | 10016 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 10017 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 10018 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| | 10019 | }, |
| | 10020 | .extra_temps = .{ |
| | 10021 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| | 10022 | .unused, |
| | 10023 | .unused, |
| | 10024 | .unused, |
| | 10025 | .unused, |
| | 10026 | .unused, |
| | 10027 | .unused, |
| | 10028 | .unused, |
| | 10029 | .unused, |
| | 10030 | }, |
| | 10031 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 10032 | .each = .{ .once = &.{ |
| | 10033 | .{ ._, ._pd, .mova, .tmp0x, .src1x, ._, ._ }, |
| | 10034 | .{ ._, ._pd, .min, .tmp0x, .src0x, ._, ._ }, |
| | 10035 | .{ ._, ._pd, .cmp, .dst0x, .src0x, .vp(.ord), ._ }, |
| | 10036 | .{ ._, ._pd, .@"and", .tmp0x, .dst0x, ._, ._ }, |
| | 10037 | .{ ._, ._pd, .andn, .dst0x, .src1x, ._, ._ }, |
| | 10038 | .{ ._, ._pd, .@"or", .dst0x, .tmp0x, ._, ._ }, |
| 7366 | } }, | 10039 | } }, |
| 7367 | }, .{ | 10040 | }, .{ |
| 7368 | .required_features = .{ .avx2, null, null, null }, | 10041 | .required_features = .{ .avx, null, null, null }, |
| 7369 | .src_constraints = .{ | 10042 | .src_constraints = .{ |
| 7370 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } }, | 10043 | .{ .scalar_float = .{ .of = .yword, .is = .qword } }, |
| 7371 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } }, | 10044 | .{ .scalar_float = .{ .of = .yword, .is = .qword } }, |
| 7372 | }, | 10045 | }, |
| 7373 | .patterns = &.{ | 10046 | .patterns = &.{ |
| 7374 | .{ .src = .{ .to_mem, .to_mem } }, | 10047 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7375 | }, | 10048 | }, |
| 7376 | .extra_temps = .{ | 10049 | .extra_temps = .{ |
| 7377 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 10050 | .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, |
| 7378 | .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } }, | 10051 | .unused, |
| 7379 | .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } }, | 10052 | .unused, |
| 7380 | .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } }, | 10053 | .unused, |
| 7381 | .unused, | 10054 | .unused, |
| 7382 | .unused, | 10055 | .unused, |
| 7383 | .unused, | 10056 | .unused, |
| 7384 | .unused, | 10057 | .unused, |
| 7385 | .unused, | 10058 | .unused, |
| 7386 | }, | 10059 | }, |
| 7387 | .dst_temps = .{.mem}, | 10060 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 7388 | .clobbers = .{ .eflags = true }, | | |
| 7389 | .each = .{ .once = &.{ | 10061 | .each = .{ .once = &.{ |
| 7390 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 10062 | .{ ._, .v_pd, .cmp, .tmp0y, .src0y, .src0y, .vp(.unord) }, |
| 7391 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | 10063 | .{ ._, .v_pd, .min, .dst0y, .src1y, .src0y, ._ }, |
| 7392 | .{ ._, .v_dqa, .mov, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, | 10064 | .{ ._, .v_pd, .blendv, .dst0y, .dst0y, .src1y, .tmp0y }, |
| 7393 | .{ ._, .vp_q, .cmpgt, .tmp3y, .tmp1y, .tmp2y, ._ }, | | |
| 7394 | .{ ._, .vp_b, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y }, | | |
| 7395 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, | | |
| 7396 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | | |
| 7397 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 7398 | } }, | 10065 | } }, |
| 7399 | }, .{ | 10066 | }, .{ |
| 7400 | .required_features = .{ .avx, null, null, null }, | 10067 | .required_features = .{ .avx, null, null, null }, |
| 7401 | .src_constraints = .{ | 10068 | .src_constraints = .{ |
| 7402 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, | 10069 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, |
| 7403 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, | 10070 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, |
| 7404 | }, | 10071 | }, |
| 7405 | .patterns = &.{ | 10072 | .patterns = &.{ |
| 7406 | .{ .src = .{ .to_mem, .to_mem } }, | 10073 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7407 | }, | 10074 | }, |
| 7408 | .extra_temps = .{ | 10075 | .extra_temps = .{ |
| 7409 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 10076 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7410 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, | 10077 | .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, |
| 7411 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, | 10078 | .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, |
| 7412 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, | 10079 | .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, |
| 7413 | .unused, | 10080 | .unused, |
| 7414 | .unused, | 10081 | .unused, |
| 7415 | .unused, | 10082 | .unused, |
| ... | @@ -7419,29 +10086,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -7419,29 +10086,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7419 | .dst_temps = .{.mem}, | 10086 | .dst_temps = .{.mem}, |
| 7420 | .clobbers = .{ .eflags = true }, | 10087 | .clobbers = .{ .eflags = true }, |
| 7421 | .each = .{ .once = &.{ | 10088 | .each = .{ .once = &.{ |
| 7422 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 10089 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 7423 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 10090 | .{ .@"0:", .v_pd, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 7424 | .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | 10091 | .{ ._, .v_pd, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, |
| 7425 | .{ ._, .vp_q, .cmpgt, .tmp3x, .tmp1x, .tmp2x, ._ }, | 10092 | .{ ._, .v_pd, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) }, |
| 7426 | .{ ._, .vp_b, .blendv, .tmp1x, .tmp1x, .tmp2x, .tmp3x }, | 10093 | .{ ._, .v_pd, .min, .tmp1y, .tmp2y, .tmp1y, ._ }, |
| 7427 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, | 10094 | .{ ._, .v_pd, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y }, |
| 7428 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 10095 | .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| | 10096 | .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ }, |
| 7429 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 10097 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7430 | } }, | 10098 | } }, |
| 7431 | }, .{ | 10099 | }, .{ |
| 7432 | .required_features = .{ .sse4_2, null, null, null }, | 10100 | .required_features = .{ .sse4_1, null, null, null }, |
| 7433 | .src_constraints = .{ | 10101 | .src_constraints = .{ |
| 7434 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, | 10102 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, |
| 7435 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, | 10103 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, |
| 7436 | }, | 10104 | }, |
| 7437 | .patterns = &.{ | 10105 | .patterns = &.{ |
| 7438 | .{ .src = .{ .to_mem, .to_mem } }, | 10106 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7439 | }, | 10107 | }, |
| 7440 | .extra_temps = .{ | 10108 | .extra_temps = .{ |
| 7441 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 10109 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7442 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, | 10110 | .{ .type = .vector_2_f64, .kind = .{ .reg = .xmm0 } }, |
| 7443 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, | 10111 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 7444 | .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } }, | 10112 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 7445 | .unused, | 10113 | .unused, |
| 7446 | .unused, | 10114 | .unused, |
| 7447 | .unused, | 10115 | .unused, |
| ... | @@ -7451,30 +10119,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -7451,30 +10119,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7451 | .dst_temps = .{.mem}, | 10119 | .dst_temps = .{.mem}, |
| 7452 | .clobbers = .{ .eflags = true }, | 10120 | .clobbers = .{ .eflags = true }, |
| 7453 | .each = .{ .once = &.{ | 10121 | .each = .{ .once = &.{ |
| 7454 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 10122 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 7455 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 10123 | .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7456 | .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | 10124 | .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7457 | .{ ._, ._dqa, .mov, .tmp3x, .tmp1x, ._, ._ }, | 10125 | .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ }, |
| 7458 | .{ ._, .p_q, .cmpgt, .tmp3x, .tmp2x, ._, ._ }, | 10126 | .{ ._, ._pd, .min, .tmp3x, .tmp1x, ._, ._ }, |
| 7459 | .{ ._, .p_b, .blendv, .tmp1x, .tmp2x, .tmp3x, ._ }, | 10127 | .{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ }, |
| 7460 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, | 10128 | .{ ._, ._pd, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ }, |
| 7461 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 10129 | .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, |
| | 10130 | .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, |
| 7462 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 10131 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7463 | } }, | 10132 | } }, |
| 7464 | }, .{ | 10133 | }, .{ |
| 7465 | .required_features = .{ .@"64bit", .cmov, null, null }, | 10134 | .required_features = .{ .sse2, null, null, null }, |
| 7466 | .src_constraints = .{ | 10135 | .src_constraints = .{ |
| 7467 | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, | 10136 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, |
| 7468 | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, | 10137 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, |
| 7469 | }, | 10138 | }, |
| 7470 | .patterns = &.{ | 10139 | .patterns = &.{ |
| 7471 | .{ .src = .{ .to_mem, .to_mem } }, | 10140 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7472 | }, | 10141 | }, |
| 7473 | .extra_temps = .{ | 10142 | .extra_temps = .{ |
| 7474 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 10143 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7475 | .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, | 10144 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 7476 | .unused, | 10145 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 7477 | .unused, | 10146 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 7478 | .unused, | 10147 | .unused, |
| 7479 | .unused, | 10148 | .unused, |
| 7480 | .unused, | 10149 | .unused, |
| ... | @@ -7484,28 +10153,34 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -7484,28 +10153,34 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7484 | .dst_temps = .{.mem}, | 10153 | .dst_temps = .{.mem}, |
| 7485 | .clobbers = .{ .eflags = true }, | 10154 | .clobbers = .{ .eflags = true }, |
| 7486 | .each = .{ .once = &.{ | 10155 | .each = .{ .once = &.{ |
| 7487 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 10156 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 7488 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | 10157 | .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7489 | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | 10158 | .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7490 | .{ ._, ._ge, .cmov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | 10159 | .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ }, |
| 7491 | .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, | 10160 | .{ ._, ._pd, .min, .tmp3x, .tmp1x, ._, ._ }, |
| 7492 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, | 10161 | .{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .vp(.ord), ._ }, |
| | 10162 | .{ ._, ._pd, .@"and", .tmp3x, .tmp1x, ._, ._ }, |
| | 10163 | .{ ._, ._pd, .andn, .tmp1x, .tmp2x, ._, ._ }, |
| | 10164 | .{ ._, ._pd, .@"or", .tmp1x, .tmp3x, ._, ._ }, |
| | 10165 | .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 10166 | .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, |
| 7493 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 10167 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7494 | } }, | 10168 | } }, |
| 7495 | }, .{ | 10169 | }, .{ |
| 7496 | .required_features = .{ .@"64bit", null, null, null }, | 10170 | .required_features = .{ .sse, null, null, null }, |
| 7497 | .src_constraints = .{ | 10171 | .src_constraints = .{ |
| 7498 | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, | 10172 | .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, |
| 7499 | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, | 10173 | .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, |
| 7500 | }, | 10174 | }, |
| 7501 | .patterns = &.{ | 10175 | .patterns = &.{ |
| 7502 | .{ .src = .{ .to_mem, .to_mem } }, | 10176 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7503 | }, | 10177 | }, |
| | 10178 | .call_frame = .{ .alignment = .@"16" }, |
| 7504 | .extra_temps = .{ | 10179 | .extra_temps = .{ |
| 7505 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 10180 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7506 | .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, | 10181 | .{ .type = .f64, .kind = .{ .reg = .xmm0 } }, |
| 7507 | .unused, | 10182 | .{ .type = .f64, .kind = .{ .reg = .xmm1 } }, |
| 7508 | .unused, | 10183 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmin" } } }, |
| 7509 | .unused, | 10184 | .unused, |
| 7510 | .unused, | 10185 | .unused, |
| 7511 | .unused, | 10186 | .unused, |
| ... | @@ -7513,32 +10188,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -7513,32 +10188,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7513 | .unused, | 10188 | .unused, |
| 7514 | }, | 10189 | }, |
| 7515 | .dst_temps = .{.mem}, | 10190 | .dst_temps = .{.mem}, |
| 7516 | .clobbers = .{ .eflags = true }, | 10191 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 7517 | .each = .{ .once = &.{ | 10192 | .each = .{ .once = &.{ |
| 7518 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 10193 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 7519 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | 10194 | .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| 7520 | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | 10195 | .{ ._, ._ps, .xor, .tmp2x, .tmp2x, ._, ._ }, |
| 7521 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, | 10196 | .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 7522 | .{ ._, ._, .mov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | 10197 | .{ ._, ._ps, .movl, .tmp2x, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7523 | .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, | 10198 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 7524 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, | 10199 | .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| | 10200 | .{ ._, ._, .add, .tmp0q, .si(8), ._, ._ }, |
| 7525 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 10201 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7526 | } }, | 10202 | } }, |
| 7527 | }, .{ | 10203 | }, .{ |
| 7528 | .required_features = .{ .avx, null, null, null }, | 10204 | .required_features = .{ .x87, .cmov, null, null }, |
| 7529 | .src_constraints = .{ | 10205 | .src_constraints = .{ |
| 7530 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, | 10206 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7531 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, | 10207 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7532 | }, | 10208 | }, |
| 7533 | .patterns = &.{ | 10209 | .patterns = &.{ |
| 7534 | .{ .src = .{ .to_sse, .mem } }, | 10210 | .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } }, |
| 7535 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, | 10211 | .{ .src = .{ .mem, .to_x87 } }, |
| 7536 | .{ .src = .{ .to_sse, .to_sse } }, | 10212 | .{ .src = .{ .to_x87, .to_x87 } }, |
| 7537 | }, | 10213 | }, |
| 7538 | .extra_temps = .{ | 10214 | .extra_temps = .{ |
| 7539 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 10215 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 7540 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, | 10216 | .unused, |
| 7541 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, | 10217 | .unused, |
| 7542 | .unused, | 10218 | .unused, |
| 7543 | .unused, | 10219 | .unused, |
| 7544 | .unused, | 10220 | .unused, |
| ... | @@ -7546,62 +10222,69 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -7546,62 +10222,69 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7546 | .unused, | 10222 | .unused, |
| 7547 | .unused, | 10223 | .unused, |
| 7548 | }, | 10224 | }, |
| 7549 | .dst_temps = .{.{ .rc = .sse }}, | 10225 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }}, |
| | 10226 | .clobbers = .{ .eflags = true }, |
| 7550 | .each = .{ .once = &.{ | 10227 | .each = .{ .once = &.{ |
| 7551 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 10228 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 7552 | .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, | 10229 | .{ ._, .f_, .ucomi, .tmp0t, .tmp0t, ._, ._ }, |
| 7553 | .{ ._, .vp_, .xor, .dst0x, .tmp2x, .src0x, ._ }, | 10230 | .{ ._, .f_u, .cmov, .tmp0t, .src1t, ._, ._ }, |
| 7554 | .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .src1x, ._ }, | 10231 | .{ ._, .f_, .ucomi, .tmp0t, .src1t, ._, ._ }, |
| 7555 | .{ ._, .vp_q, .cmpgt, .dst0x, .dst0x, .tmp2x, ._ }, | 10232 | .{ ._, .f_nb, .cmov, .tmp0t, .src1t, ._, ._ }, |
| 7556 | .{ ._, .vp_b, .blendv, .dst0x, .src0x, .src1x, .dst0x }, | 10233 | .{ ._, .f_p, .st, .dst0t, ._, ._, ._ }, |
| 7557 | } }, | 10234 | } }, |
| 7558 | }, .{ | 10235 | }, .{ |
| 7559 | .required_features = .{ .sse4_2, null, null, null }, | 10236 | .required_features = .{ .sahf, .x87, null, null }, |
| 7560 | .src_constraints = .{ | 10237 | .src_constraints = .{ |
| 7561 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, | 10238 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7562 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, | 10239 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7563 | }, | 10240 | }, |
| 7564 | .patterns = &.{ | 10241 | .patterns = &.{ |
| 7565 | .{ .src = .{ .to_mut_sse, .mem } }, | 10242 | .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } }, |
| 7566 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, | 10243 | .{ .src = .{ .mem, .to_x87 } }, |
| 7567 | .{ .src = .{ .to_mut_sse, .to_sse } }, | 10244 | .{ .src = .{ .to_x87, .to_x87 } }, |
| 7568 | }, | 10245 | }, |
| 7569 | .extra_temps = .{ | 10246 | .extra_temps = .{ |
| 7570 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 10247 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 7571 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, | 10248 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 7572 | .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } }, | 10249 | .unused, |
| 7573 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, | 10250 | .unused, |
| 7574 | .unused, | 10251 | .unused, |
| 7575 | .unused, | 10252 | .unused, |
| 7576 | .unused, | 10253 | .unused, |
| 7577 | .unused, | 10254 | .unused, |
| 7578 | .unused, | 10255 | .unused, |
| 7579 | }, | 10256 | }, |
| 7580 | .dst_temps = .{.{ .ref = .src0 }}, | 10257 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }}, |
| | 10258 | .clobbers = .{ .eflags = true }, |
| 7581 | .each = .{ .once = &.{ | 10259 | .each = .{ .once = &.{ |
| 7582 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 10260 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 7583 | .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, | 10261 | .{ ._, .f_, .ucom, .tmp0t, ._, ._, ._ }, |
| 7584 | .{ ._, ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ }, | 10262 | .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ }, |
| 7585 | .{ ._, .p_, .xor, .tmp2x, .src0x, ._, ._ }, | 10263 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 7586 | .{ ._, .p_, .xor, .tmp3x, .src1x, ._, ._ }, | 10264 | .{ ._, ._p, .j, .@"0f", ._, ._, ._ }, |
| 7587 | .{ ._, .p_q, .cmpgt, .tmp2x, .tmp3x, ._, ._ }, | 10265 | .{ ._, .f_, .ucom, .src1t, ._, ._, ._ }, |
| 7588 | .{ ._, .p_b, .blendv, .dst0x, .src1x, .tmp2x, ._ }, | 10266 | .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ }, |
| 7589 | } }, | 10267 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 7590 | }, .{ | 10268 | .{ ._, ._b, .j, .@"1f", ._, ._, ._ }, |
| 7591 | .required_features = .{ .avx2, null, null, null }, | 10269 | .{ .@"0:", .f_p, .st, .tmp0t, ._, ._, ._ }, |
| | 10270 | .{ ._, .f_, .ld, .src1t, ._, ._, ._ }, |
| | 10271 | .{ .@"1:", .f_p, .st, .dst0t, ._, ._, ._ }, |
| | 10272 | } }, |
| | 10273 | }, .{ |
| | 10274 | .required_features = .{ .@"64bit", .x87, null, null }, |
| 7592 | .src_constraints = .{ | 10275 | .src_constraints = .{ |
| 7593 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, | 10276 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7594 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, | 10277 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7595 | }, | 10278 | }, |
| 7596 | .patterns = &.{ | 10279 | .patterns = &.{ |
| 7597 | .{ .src = .{ .to_sse, .mem } }, | 10280 | .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } }, |
| 7598 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, | 10281 | .{ .src = .{ .mem, .to_x87 } }, |
| 7599 | .{ .src = .{ .to_sse, .to_sse } }, | 10282 | .{ .src = .{ .to_x87, .to_x87 } }, |
| 7600 | }, | 10283 | }, |
| 7601 | .extra_temps = .{ | 10284 | .extra_temps = .{ |
| 7602 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 10285 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 7603 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, | 10286 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 7604 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, | 10287 | .unused, |
| 7605 | .unused, | 10288 | .unused, |
| 7606 | .unused, | 10289 | .unused, |
| 7607 | .unused, | 10290 | .unused, |
| ... | @@ -7609,139 +10292,150 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -7609,139 +10292,150 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7609 | .unused, | 10292 | .unused, |
| 7610 | .unused, | 10293 | .unused, |
| 7611 | }, | 10294 | }, |
| 7612 | .dst_temps = .{.{ .rc = .sse }}, | 10295 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }}, |
| | 10296 | .clobbers = .{ .eflags = true }, |
| 7613 | .each = .{ .once = &.{ | 10297 | .each = .{ .once = &.{ |
| 7614 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 10298 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 7615 | .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ }, | 10299 | .{ ._, .f_, .xam, ._, ._, ._, ._ }, |
| 7616 | .{ ._, .vp_, .xor, .dst0y, .tmp2y, .src0y, ._ }, | 10300 | .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ }, |
| 7617 | .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .src1y, ._ }, | 10301 | .{ ._, ._, .@"test", .tmp1b, .si(0b0_1_000_100), ._, ._ }, |
| 7618 | .{ ._, .vp_q, .cmpgt, .dst0y, .dst0y, .tmp2y, ._ }, | 10302 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 7619 | .{ ._, .vp_b, .blendv, .dst0y, .src0y, .src1y, .dst0y }, | 10303 | .{ ._, .f_, .ucom, .src1t, ._, ._, ._ }, |
| | 10304 | .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ }, |
| | 10305 | .{ ._, ._, .@"test", .tmp1b, .si(0b0_0_000_001), ._, ._ }, |
| | 10306 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 10307 | .{ .@"0:", .f_p, .st, .tmp0t, ._, ._, ._ }, |
| | 10308 | .{ ._, .f_, .ld, .src1t, ._, ._, ._ }, |
| | 10309 | .{ .@"1:", .f_p, .st, .dst0t, ._, ._, ._ }, |
| 7620 | } }, | 10310 | } }, |
| 7621 | }, .{ | 10311 | }, .{ |
| 7622 | .required_features = .{ .avx2, null, null, null }, | 10312 | .required_features = .{ .x87, null, null, null }, |
| 7623 | .src_constraints = .{ | 10313 | .src_constraints = .{ |
| 7624 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, | 10314 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7625 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, | 10315 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7626 | }, | 10316 | }, |
| 7627 | .patterns = &.{ | 10317 | .patterns = &.{ |
| 7628 | .{ .src = .{ .to_mem, .to_mem } }, | 10318 | .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } }, |
| | 10319 | .{ .src = .{ .mem, .to_x87 } }, |
| | 10320 | .{ .src = .{ .to_x87, .to_x87 } }, |
| 7629 | }, | 10321 | }, |
| 7630 | .extra_temps = .{ | 10322 | .extra_temps = .{ |
| 7631 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 10323 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 7632 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, | 10324 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 7633 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, | 10325 | .unused, |
| 7634 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, | 10326 | .unused, |
| 7635 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, | 10327 | .unused, |
| 7636 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, | 10328 | .unused, |
| 7637 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, | 10329 | .unused, |
| 7638 | .unused, | 10330 | .unused, |
| 7639 | .unused, | 10331 | .unused, |
| 7640 | }, | 10332 | }, |
| 7641 | .dst_temps = .{.mem}, | 10333 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }}, |
| 7642 | .clobbers = .{ .eflags = true }, | 10334 | .clobbers = .{ .eflags = true }, |
| 7643 | .each = .{ .once = &.{ | 10335 | .each = .{ .once = &.{ |
| 7644 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 10336 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 7645 | .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ }, | 10337 | .{ ._, .f_, .ucom, .tmp0t, ._, ._, ._ }, |
| 7646 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 10338 | .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ }, |
| 7647 | .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | 10339 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 7648 | .{ ._, .v_dqa, .mov, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, | 10340 | .{ ._, ._p, .j, .@"0f", ._, ._, ._ }, |
| 7649 | .{ ._, .vp_, .xor, .tmp5y, .tmp3y, .tmp2y, ._ }, | 10341 | .{ ._, .f_, .ucom, .src1t, ._, ._, ._ }, |
| 7650 | .{ ._, .vp_, .xor, .tmp6y, .tmp4y, .tmp2y, ._ }, | 10342 | .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ }, |
| 7651 | .{ ._, .vp_q, .cmpgt, .tmp5y, .tmp5y, .tmp6y, ._ }, | 10343 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 7652 | .{ ._, .vp_b, .blendv, .tmp3y, .tmp3y, .tmp4y, .tmp5y }, | 10344 | .{ ._, ._b, .j, .@"1f", ._, ._, ._ }, |
| 7653 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ }, | 10345 | .{ .@"0:", .f_p, .st, .tmp0t, ._, ._, ._ }, |
| 7654 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | 10346 | .{ ._, .f_, .ld, .src1t, ._, ._, ._ }, |
| 7655 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 10347 | .{ .@"1:", .f_p, .st, .dst0t, ._, ._, ._ }, |
| 7656 | } }, | 10348 | } }, |
| 7657 | }, .{ | 10349 | }, .{ |
| 7658 | .required_features = .{ .avx, null, null, null }, | 10350 | .required_features = .{ .x87, .cmov, null, null }, |
| 7659 | .src_constraints = .{ | 10351 | .src_constraints = .{ |
| 7660 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, | 10352 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7661 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, | 10353 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7662 | }, | 10354 | }, |
| 7663 | .patterns = &.{ | 10355 | .patterns = &.{ |
| 7664 | .{ .src = .{ .to_mem, .to_mem } }, | 10356 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7665 | }, | 10357 | }, |
| 7666 | .extra_temps = .{ | 10358 | .extra_temps = .{ |
| 7667 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 10359 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7668 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, | 10360 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 7669 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, | 10361 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 7670 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, | 10362 | .unused, |
| 7671 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, | 10363 | .unused, |
| 7672 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, | 10364 | .unused, |
| 7673 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, | 10365 | .unused, |
| 7674 | .unused, | 10366 | .unused, |
| 7675 | .unused, | 10367 | .unused, |
| 7676 | }, | 10368 | }, |
| 7677 | .dst_temps = .{.mem}, | 10369 | .dst_temps = .{.mem}, |
| 7678 | .clobbers = .{ .eflags = true }, | 10370 | .clobbers = .{ .eflags = true }, |
| 7679 | .each = .{ .once = &.{ | 10371 | .each = .{ .once = &.{ |
| 7680 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | | |
| 7681 | .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, | | |
| 7682 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 10372 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7683 | .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 10373 | .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ }, |
| 7684 | .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | 10374 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 7685 | .{ ._, .vp_, .xor, .tmp5x, .tmp3x, .tmp2x, ._ }, | 10375 | .{ ._, .f_, .ucomi, .tmp1t, .tmp1t, ._, ._ }, |
| 7686 | .{ ._, .vp_, .xor, .tmp6x, .tmp4x, .tmp2x, ._ }, | 10376 | .{ ._, .f_u, .cmov, .tmp1t, .tmp2t, ._, ._ }, |
| 7687 | .{ ._, .vp_q, .cmpgt, .tmp5x, .tmp5x, .tmp6x, ._ }, | 10377 | .{ ._, .f_, .ucomi, .tmp1t, .tmp2t, ._, ._ }, |
| 7688 | .{ ._, .vp_b, .blendv, .tmp3x, .tmp3x, .tmp4x, .tmp5x }, | 10378 | .{ ._, .f_nb, .cmov, .tmp1t, .tmp2t, ._, ._ }, |
| 7689 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, | 10379 | .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_size), ._, ._, ._ }, |
| | 10380 | .{ ._, .f_p, .st, .tmp2t, ._, ._, ._ }, |
| 7690 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 10381 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 7691 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 10382 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7692 | } }, | 10383 | } }, |
| 7693 | }, .{ | 10384 | }, .{ |
| 7694 | .required_features = .{ .sse4_2, null, null, null }, | 10385 | .required_features = .{ .sahf, .x87, null, null }, |
| 7695 | .src_constraints = .{ | 10386 | .src_constraints = .{ |
| 7696 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, | 10387 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7697 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, | 10388 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7698 | }, | 10389 | }, |
| 7699 | .patterns = &.{ | 10390 | .patterns = &.{ |
| 7700 | .{ .src = .{ .to_mem, .to_mem } }, | 10391 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7701 | }, | 10392 | }, |
| 7702 | .extra_temps = .{ | 10393 | .extra_temps = .{ |
| 7703 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 10394 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7704 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, | 10395 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 7705 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, | 10396 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 7706 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, | 10397 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 7707 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, | 10398 | .unused, |
| 7708 | .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } }, | 10399 | .unused, |
| 7709 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, | 10400 | .unused, |
| 7710 | .unused, | 10401 | .unused, |
| 7711 | .unused, | 10402 | .unused, |
| 7712 | }, | 10403 | }, |
| 7713 | .dst_temps = .{.mem}, | 10404 | .dst_temps = .{.mem}, |
| 7714 | .clobbers = .{ .eflags = true }, | 10405 | .clobbers = .{ .eflags = true }, |
| 7715 | .each = .{ .once = &.{ | 10406 | .each = .{ .once = &.{ |
| 7716 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | | |
| 7717 | .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, | | |
| 7718 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 10407 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7719 | .{ .@"0:", ._dqa, .mov, .tmp5x, .tmp2x, ._, ._ }, | 10408 | .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ }, |
| 7720 | .{ ._, ._dqa, .mov, .tmp6x, .tmp2x, ._, ._ }, | 10409 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 7721 | .{ ._, ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 10410 | .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ }, |
| 7722 | .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | 10411 | .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ }, |
| 7723 | .{ ._, .p_, .xor, .tmp5x, .tmp3x, ._, ._ }, | 10412 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 7724 | .{ ._, .p_, .xor, .tmp6x, .tmp4x, ._, ._ }, | 10413 | .{ ._, ._p, .j, .@"1f", ._, ._, ._ }, |
| 7725 | .{ ._, .p_q, .cmpgt, .tmp5x, .tmp6x, ._, ._ }, | 10414 | .{ ._, .f_, .ucom, .tmp2t, ._, ._, ._ }, |
| 7726 | .{ ._, .p_b, .blendv, .tmp3x, .tmp4x, .tmp5x, ._ }, | 10415 | .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ }, |
| 7727 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, | 10416 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| | 10417 | .{ ._, ._b, .j, .@"2f", ._, ._, ._ }, |
| | 10418 | .{ .@"1:", .f_p, .st, .tmp1t, ._, ._, ._ }, |
| | 10419 | .{ ._, .f_, .ld, .tmp2t, ._, ._, ._ }, |
| | 10420 | .{ .@"2:", .f_p, .st, .memia(.dst0t, .tmp0, .add_size), ._, ._, ._ }, |
| | 10421 | .{ ._, .f_p, .st, .tmp2t, ._, ._, ._ }, |
| 7728 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 10422 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 7729 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 10423 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7730 | } }, | 10424 | } }, |
| 7731 | }, .{ | 10425 | }, .{ |
| 7732 | .required_features = .{ .@"64bit", .cmov, null, null }, | 10426 | .required_features = .{ .@"64bit", .x87, null, null }, |
| 7733 | .src_constraints = .{ | 10427 | .src_constraints = .{ |
| 7734 | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, | 10428 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7735 | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, | 10429 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7736 | }, | 10430 | }, |
| 7737 | .patterns = &.{ | 10431 | .patterns = &.{ |
| 7738 | .{ .src = .{ .to_mem, .to_mem } }, | 10432 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7739 | }, | 10433 | }, |
| 7740 | .extra_temps = .{ | 10434 | .extra_temps = .{ |
| 7741 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 10435 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7742 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 10436 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 7743 | .unused, | 10437 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 7744 | .unused, | 10438 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 7745 | .unused, | 10439 | .unused, |
| 7746 | .unused, | 10440 | .unused, |
| 7747 | .unused, | 10441 | .unused, |
| ... | @@ -7752,27 +10446,37 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -7752,27 +10446,37 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7752 | .clobbers = .{ .eflags = true }, | 10446 | .clobbers = .{ .eflags = true }, |
| 7753 | .each = .{ .once = &.{ | 10447 | .each = .{ .once = &.{ |
| 7754 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 10448 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7755 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | 10449 | .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ }, |
| 7756 | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | 10450 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 7757 | .{ ._, ._ae, .cmov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | 10451 | .{ ._, .f_, .xam, ._, ._, ._, ._ }, |
| 7758 | .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, | 10452 | .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ }, |
| 7759 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, | 10453 | .{ ._, ._, .@"test", .tmp3b, .si(0b0_1_000_100), ._, ._ }, |
| | 10454 | .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, |
| | 10455 | .{ ._, .f_, .ucom, .tmp2t, ._, ._, ._ }, |
| | 10456 | .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ }, |
| | 10457 | .{ ._, ._, .@"test", .tmp3b, .si(0b0_0_000_001), ._, ._ }, |
| | 10458 | .{ ._, ._nz, .j, .@"2f", ._, ._, ._ }, |
| | 10459 | .{ .@"1:", .f_p, .st, .tmp1t, ._, ._, ._ }, |
| | 10460 | .{ ._, .f_, .ld, .tmp2t, ._, ._, ._ }, |
| | 10461 | .{ .@"2:", .f_p, .st, .memia(.dst0t, .tmp0, .add_size), ._, ._, ._ }, |
| | 10462 | .{ ._, .f_p, .st, .tmp2t, ._, ._, ._ }, |
| | 10463 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 7760 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 10464 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7761 | } }, | 10465 | } }, |
| 7762 | }, .{ | 10466 | }, .{ |
| 7763 | .required_features = .{ .@"64bit", null, null, null }, | 10467 | .required_features = .{ .x87, null, null, null }, |
| 7764 | .src_constraints = .{ | 10468 | .src_constraints = .{ |
| 7765 | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, | 10469 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7766 | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, | 10470 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7767 | }, | 10471 | }, |
| 7768 | .patterns = &.{ | 10472 | .patterns = &.{ |
| 7769 | .{ .src = .{ .to_mem, .to_mem } }, | 10473 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7770 | }, | 10474 | }, |
| 7771 | .extra_temps = .{ | 10475 | .extra_temps = .{ |
| 7772 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 10476 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7773 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 10477 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 7774 | .unused, | 10478 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 7775 | .unused, | 10479 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 7776 | .unused, | 10480 | .unused, |
| 7777 | .unused, | 10481 | .unused, |
| 7778 | .unused, | 10482 | .unused, |
| ... | @@ -7783,64 +10487,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -7783,64 +10487,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7783 | .clobbers = .{ .eflags = true }, | 10487 | .clobbers = .{ .eflags = true }, |
| 7784 | .each = .{ .once = &.{ | 10488 | .each = .{ .once = &.{ |
| 7785 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 10489 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7786 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | 10490 | .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ }, |
| 7787 | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | 10491 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 7788 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, | 10492 | .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ }, |
| 7789 | .{ ._, ._, .mov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | 10493 | .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ }, |
| 7790 | .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, | 10494 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 7791 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, | 10495 | .{ ._, ._p, .j, .@"1f", ._, ._, ._ }, |
| | 10496 | .{ ._, .f_, .ucom, .tmp2t, ._, ._, ._ }, |
| | 10497 | .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ }, |
| | 10498 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| | 10499 | .{ ._, ._b, .j, .@"2f", ._, ._, ._ }, |
| | 10500 | .{ .@"1:", .f_p, .st, .tmp1t, ._, ._, ._ }, |
| | 10501 | .{ ._, .f_, .ld, .tmp2t, ._, ._, ._ }, |
| | 10502 | .{ .@"2:", .f_p, .st, .memia(.dst0t, .tmp0, .add_size), ._, ._, ._ }, |
| | 10503 | .{ ._, .f_p, .st, .tmp2t, ._, ._, ._ }, |
| | 10504 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 7792 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 10505 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7793 | } }, | 10506 | } }, |
| 7794 | }, .{ | 10507 | }, .{ |
| 7795 | .required_features = .{ .@"64bit", .cmov, null, null }, | 10508 | .required_features = .{ .sse, null, null, null }, |
| 7796 | .src_constraints = .{ .any_scalar_signed_int, .any_scalar_signed_int }, | 10509 | .src_constraints = .{ |
| | 10510 | .{ .scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 10511 | .{ .scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 10512 | }, |
| 7797 | .patterns = &.{ | 10513 | .patterns = &.{ |
| 7798 | .{ .src = .{ .to_mem, .to_mem } }, | 10514 | .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } }, |
| 7799 | }, | 10515 | }, |
| | 10516 | .call_frame = .{ .alignment = .@"16" }, |
| 7800 | .extra_temps = .{ | 10517 | .extra_temps = .{ |
| 7801 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 10518 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } }, |
| 7802 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, | 10519 | .unused, |
| 7803 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, | 10520 | .unused, |
| 7804 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, | 10521 | .unused, |
| 7805 | .unused, | 10522 | .unused, |
| 7806 | .unused, | 10523 | .unused, |
| 7807 | .unused, | 10524 | .unused, |
| 7808 | .unused, | 10525 | .unused, |
| 7809 | .unused, | 10526 | .unused, |
| 7810 | }, | 10527 | }, |
| 7811 | .dst_temps = .{.mem}, | 10528 | .dst_temps = .{.{ .ref = .src0 }}, |
| 7812 | .clobbers = .{ .eflags = true }, | 10529 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 7813 | .each = .{ .once = &.{ | 10530 | .each = .{ .once = &.{ |
| 7814 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 10531 | .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, |
| 7815 | .{ .@"0:", ._, .mov, .tmp1d, .sia(-1, .none, .add_src0_elem_size_div_8), ._, ._ }, | | |
| 7816 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, | | |
| 7817 | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | | |
| 7818 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | | |
| 7819 | .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, | | |
| 7820 | .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, | | |
| 7821 | .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, | | |
| 7822 | .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | | |
| 7823 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | | |
| 7824 | .{ ._, ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, | | |
| 7825 | .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, | | |
| 7826 | .{ ._, ._ge, .cmov, .tmp1p, .tmp2p, ._, ._ }, | | |
| 7827 | .{ ._, ._, .lea, .tmp2p, .memiad(.dst0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, | | |
| 7828 | .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, | | |
| 7829 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, | | |
| 7830 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, | | |
| 7831 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 7832 | } }, | 10532 | } }, |
| 7833 | }, .{ | 10533 | }, .{ |
| 7834 | .required_features = .{ .@"64bit", null, null, null }, | 10534 | .required_features = .{ .avx, null, null, null }, |
| 7835 | .src_constraints = .{ .any_scalar_signed_int, .any_scalar_signed_int }, | 10535 | .src_constraints = .{ |
| | 10536 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 10537 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 10538 | }, |
| 7836 | .patterns = &.{ | 10539 | .patterns = &.{ |
| 7837 | .{ .src = .{ .to_mem, .to_mem } }, | 10540 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7838 | }, | 10541 | }, |
| | 10542 | .call_frame = .{ .alignment = .@"16" }, |
| 7839 | .extra_temps = .{ | 10543 | .extra_temps = .{ |
| 7840 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 10544 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7841 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, | 10545 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 7842 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, | 10546 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| 7843 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, | 10547 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } }, |
| 7844 | .unused, | 10548 | .unused, |
| 7845 | .unused, | 10549 | .unused, |
| 7846 | .unused, | 10550 | .unused, |
| ... | @@ -7848,38 +10552,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -7848,38 +10552,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7848 | .unused, | 10552 | .unused, |
| 7849 | }, | 10553 | }, |
| 7850 | .dst_temps = .{.mem}, | 10554 | .dst_temps = .{.mem}, |
| 7851 | .clobbers = .{ .eflags = true }, | 10555 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 7852 | .each = .{ .once = &.{ | 10556 | .each = .{ .once = &.{ |
| 7853 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 10557 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 7854 | .{ .@"0:", ._, .mov, .tmp1d, .sia(-1, .none, .add_src0_elem_size_div_8), ._, ._ }, | 10558 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7855 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, | 10559 | .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7856 | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | 10560 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 7857 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | 10561 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 7858 | .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, | 10562 | .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, |
| 7859 | .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, | | |
| 7860 | .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, | | |
| 7861 | .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | | |
| 7862 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | | |
| 7863 | .{ ._, ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, | | |
| 7864 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, | | |
| 7865 | .{ ._, ._, .lea, .tmp1p, .memiad(.src1, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, | | |
| 7866 | .{ .@"1:", ._, .lea, .tmp2p, .memiad(.dst0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, | | |
| 7867 | .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, | | |
| 7868 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, | | |
| 7869 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, | | |
| 7870 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 10563 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7871 | } }, | 10564 | } }, |
| 7872 | }, .{ | 10565 | }, .{ |
| 7873 | .required_features = .{ .@"64bit", .cmov, null, null }, | 10566 | .required_features = .{ .sse2, null, null, null }, |
| 7874 | .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int }, | 10567 | .src_constraints = .{ |
| | 10568 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 10569 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 10570 | }, |
| 7875 | .patterns = &.{ | 10571 | .patterns = &.{ |
| 7876 | .{ .src = .{ .to_mem, .to_mem } }, | 10572 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7877 | }, | 10573 | }, |
| | 10574 | .call_frame = .{ .alignment = .@"16" }, |
| 7878 | .extra_temps = .{ | 10575 | .extra_temps = .{ |
| 7879 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 10576 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7880 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, | 10577 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 7881 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, | 10578 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| 7882 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, | 10579 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } }, |
| 7883 | .unused, | 10580 | .unused, |
| 7884 | .unused, | 10581 | .unused, |
| 7885 | .unused, | 10582 | .unused, |
| ... | @@ -7887,36 +10584,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -7887,36 +10584,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7887 | .unused, | 10584 | .unused, |
| 7888 | }, | 10585 | }, |
| 7889 | .dst_temps = .{.mem}, | 10586 | .dst_temps = .{.mem}, |
| 7890 | .clobbers = .{ .eflags = true }, | 10587 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 7891 | .each = .{ .once = &.{ | 10588 | .each = .{ .once = &.{ |
| 7892 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 10589 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 7893 | .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, | 10590 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7894 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, | 10591 | .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7895 | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | 10592 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 7896 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | 10593 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 7897 | .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, | 10594 | .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, |
| 7898 | .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, | 10595 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7899 | .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, | | |
| 7900 | .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ }, | | |
| 7901 | .{ ._, ._, .lea, .tmp2p, .memia(.src1, .tmp0, .add_size_sub_elem_size), ._, ._ }, | | |
| 7902 | .{ ._, ._ae, .cmov, .tmp1p, .tmp2p, ._, ._ }, | | |
| 7903 | .{ ._, ._, .lea, .tmp2p, .memia(.dst0, .tmp0, .add_size_sub_elem_size), ._, ._ }, | | |
| 7904 | .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, | | |
| 7905 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, | | |
| 7906 | .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ }, | | |
| 7907 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | | |
| 7908 | } }, | 10596 | } }, |
| 7909 | }, .{ | 10597 | }, .{ |
| 7910 | .required_features = .{ .@"64bit", null, null, null }, | 10598 | .required_features = .{ .sse, null, null, null }, |
| 7911 | .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int }, | 10599 | .src_constraints = .{ |
| | 10600 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 10601 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 10602 | }, |
| 7912 | .patterns = &.{ | 10603 | .patterns = &.{ |
| 7913 | .{ .src = .{ .to_mem, .to_mem } }, | 10604 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7914 | }, | 10605 | }, |
| | 10606 | .call_frame = .{ .alignment = .@"16" }, |
| 7915 | .extra_temps = .{ | 10607 | .extra_temps = .{ |
| 7916 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 10608 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7917 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, | 10609 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 7918 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, | 10610 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| 7919 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, | 10611 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } }, |
| 7920 | .unused, | 10612 | .unused, |
| 7921 | .unused, | 10613 | .unused, |
| 7922 | .unused, | 10614 | .unused, |
| ... | @@ -7924,24 +10616,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -7924,24 +10616,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7924 | .unused, | 10616 | .unused, |
| 7925 | }, | 10617 | }, |
| 7926 | .dst_temps = .{.mem}, | 10618 | .dst_temps = .{.mem}, |
| 7927 | .clobbers = .{ .eflags = true }, | 10619 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 7928 | .each = .{ .once = &.{ | 10620 | .each = .{ .once = &.{ |
| 7929 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 10621 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 7930 | .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, | 10622 | .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7931 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, | 10623 | .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7932 | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | 10624 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 7933 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | 10625 | .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 7934 | .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, | 10626 | .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, |
| 7935 | .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, | 10627 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7936 | .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, | | |
| 7937 | .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ }, | | |
| 7938 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, | | |
| 7939 | .{ ._, ._, .lea, .tmp1p, .memia(.src1, .tmp0, .add_size_sub_elem_size), ._, ._ }, | | |
| 7940 | .{ .@"1:", ._, .lea, .tmp2p, .memia(.dst0, .tmp0, .add_size_sub_elem_size), ._, ._ }, | | |
| 7941 | .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, | | |
| 7942 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, | | |
| 7943 | .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ }, | | |
| 7944 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | | |
| 7945 | } }, | 10628 | } }, |
| 7946 | } }) catch |err| switch (err) { | 10629 | } }) catch |err| switch (err) { |
| 7947 | error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{ | 10630 | error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{ |
| ... | @@ -8142,7 +10825,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -8142,7 +10825,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 8142 | }, | 10825 | }, |
| 8143 | .extra_temps = .{ | 10826 | .extra_temps = .{ |
| 8144 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 10827 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8145 | .{ .kind = .{ .rc = .sse } }, | 10828 | .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } }, |
| 8146 | .unused, | 10829 | .unused, |
| 8147 | .unused, | 10830 | .unused, |
| 8148 | .unused, | 10831 | .unused, |
| ... | @@ -8169,7 +10852,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -8169,7 +10852,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 8169 | }, | 10852 | }, |
| 8170 | .extra_temps = .{ | 10853 | .extra_temps = .{ |
| 8171 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 10854 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8172 | .{ .kind = .{ .rc = .sse } }, | 10855 | .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } }, |
| 8173 | .unused, | 10856 | .unused, |
| 8174 | .unused, | 10857 | .unused, |
| 8175 | .unused, | 10858 | .unused, |
| ... | @@ -8196,7 +10879,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -8196,7 +10879,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 8196 | }, | 10879 | }, |
| 8197 | .extra_temps = .{ | 10880 | .extra_temps = .{ |
| 8198 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 10881 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8199 | .{ .kind = .{ .rc = .sse } }, | 10882 | .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } }, |
| 8200 | .unused, | 10883 | .unused, |
| 8201 | .unused, | 10884 | .unused, |
| 8202 | .unused, | 10885 | .unused, |
| ... | @@ -8223,7 +10906,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -8223,7 +10906,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 8223 | }, | 10906 | }, |
| 8224 | .extra_temps = .{ | 10907 | .extra_temps = .{ |
| 8225 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 10908 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8226 | .{ .kind = .{ .rc = .sse } }, | 10909 | .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } }, |
| 8227 | .unused, | 10910 | .unused, |
| 8228 | .unused, | 10911 | .unused, |
| 8229 | .unused, | 10912 | .unused, |
| ... | @@ -8250,7 +10933,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -8250,7 +10933,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 8250 | }, | 10933 | }, |
| 8251 | .extra_temps = .{ | 10934 | .extra_temps = .{ |
| 8252 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 10935 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8253 | .{ .kind = .{ .rc = .sse } }, | 10936 | .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } }, |
| 8254 | .unused, | 10937 | .unused, |
| 8255 | .unused, | 10938 | .unused, |
| 8256 | .unused, | 10939 | .unused, |
| ... | @@ -8591,7 +11274,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -8591,7 +11274,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 8591 | }, | 11274 | }, |
| 8592 | .dst_temps = .{.{ .rc = .sse }}, | 11275 | .dst_temps = .{.{ .rc = .sse }}, |
| 8593 | .each = .{ .once = &.{ | 11276 | .each = .{ .once = &.{ |
| 8594 | .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .ui(0b01111) }, | 11277 | .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .vp(.true) }, |
| 8595 | .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ }, | 11278 | .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ }, |
| 8596 | } }, | 11279 | } }, |
| 8597 | }, .{ | 11280 | }, .{ |
| ... | @@ -8693,7 +11376,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -8693,7 +11376,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 8693 | .clobbers = .{ .eflags = true }, | 11376 | .clobbers = .{ .eflags = true }, |
| 8694 | .each = .{ .once = &.{ | 11377 | .each = .{ .once = &.{ |
| 8695 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, | 11378 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| 8696 | .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .ui(0b01111) }, | 11379 | .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .vp(.true) }, |
| 8697 | .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memiad(.src0y, .tmp0, .add_size, -16), ._ }, | 11380 | .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memiad(.src0y, .tmp0, .add_size, -16), ._ }, |
| 8698 | .{ ._, .v_pd, .movu, .memiad(.dst0y, .tmp0, .add_size, -16), .tmp2y, ._, ._ }, | 11381 | .{ ._, .v_pd, .movu, .memiad(.dst0y, .tmp0, .add_size, -16), .tmp2y, ._, ._ }, |
| 8699 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | 11382 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| ... | @@ -8722,7 +11405,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -8722,7 +11405,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 8722 | .clobbers = .{ .eflags = true }, | 11405 | .clobbers = .{ .eflags = true }, |
| 8723 | .each = .{ .once = &.{ | 11406 | .each = .{ .once = &.{ |
| 8724 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 11407 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8725 | .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .ui(0b01111) }, | 11408 | .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .vp(.true) }, |
| 8726 | .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ }, | 11409 | .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ }, |
| 8727 | .{ ._, .v_pd, .movu, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ }, | 11410 | .{ ._, .v_pd, .movu, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ }, |
| 8728 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | 11411 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| ... | @@ -9406,7 +12089,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9406,7 +12089,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9406 | }, | 12089 | }, |
| 9407 | .dst_temps = .{.{ .rc = .sse }}, | 12090 | .dst_temps = .{.{ .rc = .sse }}, |
| 9408 | .each = .{ .once = &.{ | 12091 | .each = .{ .once = &.{ |
| 9409 | .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .ui(0b01111) }, | 12092 | .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .vp(.true) }, |
| 9410 | .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ }, | 12093 | .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ }, |
| 9411 | } }, | 12094 | } }, |
| 9412 | }, .{ | 12095 | }, .{ |
| ... | @@ -9493,12 +12176,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9493,12 +12176,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9493 | try res[0].finish(inst, &.{ty_op.operand}, &ops, cg); | 12176 | try res[0].finish(inst, &.{ty_op.operand}, &ops, cg); |
| 9494 | }, | 12177 | }, |
| 9495 | | 12178 | |
| 9496 | .block => if (use_old) try cg.airBlock(inst) else { | 12179 | .block => { |
| 9497 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; | 12180 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; |
| 9498 | const extra = cg.air.extraData(Air.Block, ty_pl.payload); | 12181 | const extra = cg.air.extraData(Air.Block, ty_pl.payload); |
| 9499 | try cg.asmPseudo(.pseudo_dbg_enter_block_none); | 12182 | if (cg.debug_output != .none) try cg.asmPseudo(.pseudo_dbg_enter_block_none); |
| 9500 | try cg.lowerBlock(inst, @ptrCast(cg.air.extra[extra.end..][0..extra.data.body_len])); | 12183 | try cg.lowerBlock(inst, @ptrCast(cg.air.extra[extra.end..][0..extra.data.body_len])); |
| 9501 | try cg.asmPseudo(.pseudo_dbg_leave_block_none); | 12184 | if (cg.debug_output != .none) try cg.asmPseudo(.pseudo_dbg_leave_block_none); |
| 9502 | }, | 12185 | }, |
| 9503 | .loop => if (use_old) try cg.airLoop(inst) else { | 12186 | .loop => if (use_old) try cg.airLoop(inst) else { |
| 9504 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; | 12187 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; |
| ... | @@ -13852,7 +16535,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -13852,7 +16535,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 13852 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, | 16535 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| 13853 | .{ .@"0:", ._, .mov, .tmp2b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, | 16536 | .{ .@"0:", ._, .mov, .tmp2b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 13854 | .{ ._, ._, .cmp, .tmp2b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, | 16537 | .{ ._, ._, .cmp, .tmp2b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 13855 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16538 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 13856 | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, | 16539 | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, |
| 13857 | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, | 16540 | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, |
| 13858 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16541 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | @@ -13884,7 +16567,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -13884,7 +16567,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 13884 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, | 16567 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| 13885 | .{ .@"0:", ._, .mov, .tmp2w, .memia(.src0w, .tmp0, .add_size), ._, ._ }, | 16568 | .{ .@"0:", ._, .mov, .tmp2w, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 13886 | .{ ._, ._, .cmp, .tmp2w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, | 16569 | .{ ._, ._, .cmp, .tmp2w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 13887 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16570 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 13888 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, | 16571 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| 13889 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, | 16572 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| 13890 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16573 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | @@ -13916,7 +16599,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -13916,7 +16599,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 13916 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, | 16599 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| 13917 | .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, | 16600 | .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 13918 | .{ ._, ._, .cmp, .tmp2d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, | 16601 | .{ ._, ._, .cmp, .tmp2d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 13919 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16602 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 13920 | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, | 16603 | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, |
| 13921 | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, | 16604 | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, |
| 13922 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16605 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | @@ -13949,7 +16632,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -13949,7 +16632,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 13949 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, | 16632 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| 13950 | .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | 16633 | .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 13951 | .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | 16634 | .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 13952 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16635 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 13953 | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, | 16636 | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, |
| 13954 | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, | 16637 | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, |
| 13955 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16638 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | @@ -13988,7 +16671,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -13988,7 +16671,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 13988 | .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ }, | 16671 | .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ }, |
| 13989 | .{ ._, ._b, .j, .@"1b", ._, ._, ._ }, | 16672 | .{ ._, ._b, .j, .@"1b", ._, ._, ._ }, |
| 13990 | .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ }, | 16673 | .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ }, |
| 13991 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16674 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 13992 | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, | 16675 | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, |
| 13993 | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, | 16676 | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, |
| 13994 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16677 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | @@ -14021,7 +16704,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14021,7 +16704,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14021 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 16704 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 14022 | .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, | 16705 | .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 14023 | .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, | 16706 | .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 14024 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16707 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 14025 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, | 16708 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| 14026 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, | 16709 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| 14027 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16710 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | @@ -14054,7 +16737,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14054,7 +16737,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14054 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 16737 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 14055 | .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ }, | 16738 | .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 14056 | .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, | 16739 | .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 14057 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16740 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 14058 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, | 16741 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| 14059 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, | 16742 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| 14060 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16743 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | @@ -14087,7 +16770,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14087,7 +16770,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14087 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 16770 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 14088 | .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, | 16771 | .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 14089 | .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, | 16772 | .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 14090 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16773 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 14091 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, | 16774 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| 14092 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, | 16775 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| 14093 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16776 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | @@ -14121,7 +16804,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14121,7 +16804,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14121 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 16804 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 14122 | .{ ._, ._, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | 16805 | .{ ._, ._, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 14123 | .{ ._, ._, .cmp, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | 16806 | .{ ._, ._, .cmp, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 14124 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16807 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 14125 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, | 16808 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| 14126 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, | 16809 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| 14127 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16810 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | @@ -14161,7 +16844,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14161,7 +16844,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14161 | .{ ._, ._b, .j, .@"1b", ._, ._, ._ }, | 16844 | .{ ._, ._b, .j, .@"1b", ._, ._, ._ }, |
| 14162 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 16845 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 14163 | .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ }, | 16846 | .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ }, |
| 14164 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16847 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 14165 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, | 16848 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| 14166 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, | 16849 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| 14167 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16850 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | @@ -14195,7 +16878,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14195,7 +16878,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14195 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 16878 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 14196 | .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, | 16879 | .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 14197 | .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, | 16880 | .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 14198 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16881 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 14199 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, | 16882 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, |
| 14200 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, | 16883 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, |
| 14201 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16884 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | @@ -14228,7 +16911,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14228,7 +16911,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14228 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 16911 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 14229 | .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ }, | 16912 | .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 14230 | .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, | 16913 | .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 14231 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16914 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 14232 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, | 16915 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, |
| 14233 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, | 16916 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, |
| 14234 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16917 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | @@ -14262,7 +16945,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14262,7 +16945,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14262 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 16945 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 14263 | .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, | 16946 | .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 14264 | .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, | 16947 | .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 14265 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16948 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 14266 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, | 16949 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, |
| 14267 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, | 16950 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, |
| 14268 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16951 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | @@ -14296,7 +16979,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14296,7 +16979,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14296 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 16979 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 14297 | .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | 16980 | .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 14298 | .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | 16981 | .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 14299 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16982 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 14300 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, | 16983 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, |
| 14301 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, | 16984 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, |
| 14302 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16985 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | @@ -14337,7 +17020,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14337,7 +17020,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14337 | .{ ._, ._b, .j, .@"1b", ._, ._, ._ }, | 17020 | .{ ._, ._b, .j, .@"1b", ._, ._, ._ }, |
| 14338 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 17021 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 14339 | .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ }, | 17022 | .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ }, |
| 14340 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 17023 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 14341 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, | 17024 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, |
| 14342 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, | 17025 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, |
| 14343 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 17026 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | @@ -14369,7 +17052,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14369,7 +17052,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14369 | .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ }, | 17052 | .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ }, |
| 14370 | .{ ._, ._, .mov, .tmp4b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, | 17053 | .{ ._, ._, .mov, .tmp4b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 14371 | .{ ._, ._, .cmp, .tmp4b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, | 17054 | .{ ._, ._, .cmp, .tmp4b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 14372 | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, | 17055 | .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ }, |
| 14373 | .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ }, | 17056 | .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ }, |
| 14374 | .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ }, | 17057 | .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ }, |
| 14375 | .{ ._, ._, .add, .tmp1d, .si(1), ._, ._ }, | 17058 | .{ ._, ._, .add, .tmp1d, .si(1), ._, ._ }, |
| ... | @@ -14397,7 +17080,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14397,7 +17080,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14397 | .{ .src = .{ .to_sse, .to_sse } }, | 17080 | .{ .src = .{ .to_sse, .to_sse } }, |
| 14398 | }, | 17081 | }, |
| 14399 | .extra_temps = .{ | 17082 | .extra_temps = .{ |
| 14400 | .{ .kind = .{ .rc = .sse } }, | 17083 | .{ .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } }, |
| 14401 | .unused, | 17084 | .unused, |
| 14402 | .unused, | 17085 | .unused, |
| 14403 | .unused, | 17086 | .unused, |
| ... | @@ -14413,12 +17096,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14413,12 +17096,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14413 | .info = .{ .kind = .all, .scalar = .dword }, | 17096 | .info = .{ .kind = .all, .scalar = .dword }, |
| 14414 | } }}, | 17097 | } }}, |
| 14415 | .each = .{ .once = &.{ | 17098 | .each = .{ .once = &.{ |
| 14416 | .{ ._, .v_ps, .cvtph2, .dst0x, .src0x, ._, ._ }, | 17099 | .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, |
| 14417 | .{ ._, .v_ps, .cvtph2, .tmp0x, .src1x, ._, ._ }, | 17100 | .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ }, |
| 14418 | .{ ._, .v_ss, .cmp, .dst0x, .dst0x, .tmp0x, .ui(switch (cc) { | 17101 | .{ ._, .v_ss, .cmp, .dst0x, .dst0x, .tmp0x, .vp(switch (cc) { |
| 14419 | else => unreachable, | 17102 | else => unreachable, |
| 14420 | .e => 0b00000, | 17103 | .e => .eq, |
| 14421 | .ne => 0b00100, | 17104 | .ne => .neq, |
| 14422 | }) }, | 17105 | }) }, |
| 14423 | } }, | 17106 | } }, |
| 14424 | }, .{ | 17107 | }, .{ |
| ... | @@ -14452,10 +17135,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14452,10 +17135,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14452 | .each = .{ .once = &.{ | 17135 | .each = .{ .once = &.{ |
| 14453 | .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, | 17136 | .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, |
| 14454 | .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ }, | 17137 | .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ }, |
| 14455 | .{ ._, .v_ps, .cmp, .dst0x, .dst0x, .tmp0x, .ui(switch (cc) { | 17138 | .{ ._, .v_ps, .cmp, .dst0x, .dst0x, .tmp0x, .vp(switch (cc) { |
| 14456 | else => unreachable, | 17139 | else => unreachable, |
| 14457 | .e => 0b00000, | 17140 | .e => .eq, |
| 14458 | .ne => 0b00100, | 17141 | .ne => .neq, |
| 14459 | }) }, | 17142 | }) }, |
| 14460 | } }, | 17143 | } }, |
| 14461 | }, .{ | 17144 | }, .{ |
| ... | @@ -14489,10 +17172,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14489,10 +17172,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14489 | .each = .{ .once = &.{ | 17172 | .each = .{ .once = &.{ |
| 14490 | .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ }, | 17173 | .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ }, |
| 14491 | .{ ._, .v_ps, .cvtph2, .tmp0y, .src1x, ._, ._ }, | 17174 | .{ ._, .v_ps, .cvtph2, .tmp0y, .src1x, ._, ._ }, |
| 14492 | .{ ._, .v_ps, .cmp, .dst0y, .dst0y, .tmp0y, .ui(switch (cc) { | 17175 | .{ ._, .v_ps, .cmp, .dst0y, .dst0y, .tmp0y, .vp(switch (cc) { |
| 14493 | else => unreachable, | 17176 | else => unreachable, |
| 14494 | .e => 0b00000, | 17177 | .e => .eq, |
| 14495 | .ne => 0b00100, | 17178 | .ne => .neq, |
| 14496 | }) }, | 17179 | }) }, |
| 14497 | } }, | 17180 | } }, |
| 14498 | }, .{ | 17181 | }, .{ |
| ... | @@ -14512,10 +17195,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14512,10 +17195,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14512 | .info = .{ .kind = .all, .scalar = .dword }, | 17195 | .info = .{ .kind = .all, .scalar = .dword }, |
| 14513 | } }}, | 17196 | } }}, |
| 14514 | .each = .{ .once = &.{ | 17197 | .each = .{ .once = &.{ |
| 14515 | .{ ._, .v_ss, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) { | 17198 | .{ ._, .v_ss, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) { |
| 14516 | else => unreachable, | 17199 | else => unreachable, |
| 14517 | .e => 0b00000, | 17200 | .e => .eq, |
| 14518 | .ne => 0b00100, | 17201 | .ne => .neq, |
| 14519 | }) }, | 17202 | }) }, |
| 14520 | } }, | 17203 | } }, |
| 14521 | }, .{ | 17204 | }, .{ |
| ... | @@ -14534,10 +17217,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14534,10 +17217,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14534 | .info = .{ .kind = .all, .scalar = .dword }, | 17217 | .info = .{ .kind = .all, .scalar = .dword }, |
| 14535 | } }}, | 17218 | } }}, |
| 14536 | .each = .{ .once = &.{ | 17219 | .each = .{ .once = &.{ |
| 14537 | .{ ._, ._ss, .cmp, .dst0x, .src1x, .ui(switch (cc) { | 17220 | .{ ._, ._ss, .cmp, .dst0x, .src1x, .vp(switch (cc) { |
| 14538 | else => unreachable, | 17221 | else => unreachable, |
| 14539 | .e => 0b00000, | 17222 | .e => .eq, |
| 14540 | .ne => 0b00100, | 17223 | .ne => .neq, |
| 14541 | }), ._ }, | 17224 | }), ._ }, |
| 14542 | } }, | 17225 | } }, |
| 14543 | }, .{ | 17226 | }, .{ |
| ... | @@ -14557,10 +17240,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14557,10 +17240,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14557 | .info = .{ .kind = .all, .scalar = .dword }, | 17240 | .info = .{ .kind = .all, .scalar = .dword }, |
| 14558 | } }}, | 17241 | } }}, |
| 14559 | .each = .{ .once = &.{ | 17242 | .each = .{ .once = &.{ |
| 14560 | .{ ._, .v_ps, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) { | 17243 | .{ ._, .v_ps, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) { |
| 14561 | else => unreachable, | 17244 | else => unreachable, |
| 14562 | .e => 0b00000, | 17245 | .e => .eq, |
| 14563 | .ne => 0b00100, | 17246 | .ne => .neq, |
| 14564 | }) }, | 17247 | }) }, |
| 14565 | } }, | 17248 | } }, |
| 14566 | }, .{ | 17249 | }, .{ |
| ... | @@ -14579,10 +17262,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14579,10 +17262,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14579 | .info = .{ .kind = .all, .scalar = .dword }, | 17262 | .info = .{ .kind = .all, .scalar = .dword }, |
| 14580 | } }}, | 17263 | } }}, |
| 14581 | .each = .{ .once = &.{ | 17264 | .each = .{ .once = &.{ |
| 14582 | .{ ._, ._ps, .cmp, .dst0x, .src1x, .ui(switch (cc) { | 17265 | .{ ._, ._ps, .cmp, .dst0x, .src1x, .vp(switch (cc) { |
| 14583 | else => unreachable, | 17266 | else => unreachable, |
| 14584 | .e => 0b00000, | 17267 | .e => .eq, |
| 14585 | .ne => 0b00100, | 17268 | .ne => .neq, |
| 14586 | }), ._ }, | 17269 | }), ._ }, |
| 14587 | } }, | 17270 | } }, |
| 14588 | }, .{ | 17271 | }, .{ |
| ... | @@ -14602,10 +17285,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14602,10 +17285,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14602 | .info = .{ .kind = .all, .scalar = .dword }, | 17285 | .info = .{ .kind = .all, .scalar = .dword }, |
| 14603 | } }}, | 17286 | } }}, |
| 14604 | .each = .{ .once = &.{ | 17287 | .each = .{ .once = &.{ |
| 14605 | .{ ._, .v_ps, .cmp, .dst0y, .src0y, .src1y, .ui(switch (cc) { | 17288 | .{ ._, .v_ps, .cmp, .dst0y, .src0y, .src1y, .vp(switch (cc) { |
| 14606 | else => unreachable, | 17289 | else => unreachable, |
| 14607 | .e => 0b00000, | 17290 | .e => .eq, |
| 14608 | .ne => 0b00100, | 17291 | .ne => .neq, |
| 14609 | }) }, | 17292 | }) }, |
| 14610 | } }, | 17293 | } }, |
| 14611 | }, .{ | 17294 | }, .{ |
| ... | @@ -14625,10 +17308,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14625,10 +17308,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14625 | .info = .{ .kind = .all, .scalar = .qword }, | 17308 | .info = .{ .kind = .all, .scalar = .qword }, |
| 14626 | } }}, | 17309 | } }}, |
| 14627 | .each = .{ .once = &.{ | 17310 | .each = .{ .once = &.{ |
| 14628 | .{ ._, .v_sd, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) { | 17311 | .{ ._, .v_sd, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) { |
| 14629 | else => unreachable, | 17312 | else => unreachable, |
| 14630 | .e => 0b00000, | 17313 | .e => .eq, |
| 14631 | .ne => 0b00100, | 17314 | .ne => .neq, |
| 14632 | }) }, | 17315 | }) }, |
| 14633 | } }, | 17316 | } }, |
| 14634 | }, .{ | 17317 | }, .{ |
| ... | @@ -14647,10 +17330,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14647,10 +17330,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14647 | .info = .{ .kind = .all, .scalar = .qword }, | 17330 | .info = .{ .kind = .all, .scalar = .qword }, |
| 14648 | } }}, | 17331 | } }}, |
| 14649 | .each = .{ .once = &.{ | 17332 | .each = .{ .once = &.{ |
| 14650 | .{ ._, ._sd, .cmp, .dst0x, .src1x, .ui(switch (cc) { | 17333 | .{ ._, ._sd, .cmp, .dst0x, .src1x, .vp(switch (cc) { |
| 14651 | else => unreachable, | 17334 | else => unreachable, |
| 14652 | .e => 0b00000, | 17335 | .e => .eq, |
| 14653 | .ne => 0b00100, | 17336 | .ne => .neq, |
| 14654 | }), ._ }, | 17337 | }), ._ }, |
| 14655 | } }, | 17338 | } }, |
| 14656 | }, .{ | 17339 | }, .{ |
| ... | @@ -14670,10 +17353,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14670,10 +17353,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14670 | .info = .{ .kind = .all, .scalar = .qword }, | 17353 | .info = .{ .kind = .all, .scalar = .qword }, |
| 14671 | } }}, | 17354 | } }}, |
| 14672 | .each = .{ .once = &.{ | 17355 | .each = .{ .once = &.{ |
| 14673 | .{ ._, .v_pd, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) { | 17356 | .{ ._, .v_pd, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) { |
| 14674 | else => unreachable, | 17357 | else => unreachable, |
| 14675 | .e => 0b00000, | 17358 | .e => .eq, |
| 14676 | .ne => 0b00100, | 17359 | .ne => .neq, |
| 14677 | }) }, | 17360 | }) }, |
| 14678 | } }, | 17361 | } }, |
| 14679 | }, .{ | 17362 | }, .{ |
| ... | @@ -14692,10 +17375,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14692,10 +17375,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14692 | .info = .{ .kind = .all, .scalar = .qword }, | 17375 | .info = .{ .kind = .all, .scalar = .qword }, |
| 14693 | } }}, | 17376 | } }}, |
| 14694 | .each = .{ .once = &.{ | 17377 | .each = .{ .once = &.{ |
| 14695 | .{ ._, ._pd, .cmp, .dst0x, .src1x, .ui(switch (cc) { | 17378 | .{ ._, ._pd, .cmp, .dst0x, .src1x, .vp(switch (cc) { |
| 14696 | else => unreachable, | 17379 | else => unreachable, |
| 14697 | .e => 0b00000, | 17380 | .e => .eq, |
| 14698 | .ne => 0b00100, | 17381 | .ne => .neq, |
| 14699 | }), ._ }, | 17382 | }), ._ }, |
| 14700 | } }, | 17383 | } }, |
| 14701 | }, .{ | 17384 | }, .{ |
| ... | @@ -14715,10 +17398,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14715,10 +17398,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14715 | .info = .{ .kind = .all, .scalar = .qword }, | 17398 | .info = .{ .kind = .all, .scalar = .qword }, |
| 14716 | } }}, | 17399 | } }}, |
| 14717 | .each = .{ .once = &.{ | 17400 | .each = .{ .once = &.{ |
| 14718 | .{ ._, .v_pd, .cmp, .dst0y, .src0y, .src1y, .ui(switch (cc) { | 17401 | .{ ._, .v_pd, .cmp, .dst0y, .src0y, .src1y, .vp(switch (cc) { |
| 14719 | else => unreachable, | 17402 | else => unreachable, |
| 14720 | .e => 0b00000, | 17403 | .e => .eq, |
| 14721 | .ne => 0b00100, | 17404 | .ne => .neq, |
| 14722 | }) }, | 17405 | }) }, |
| 14723 | } }, | 17406 | } }, |
| 14724 | }, .{ | 17407 | }, .{ |
| ... | @@ -14748,10 +17431,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14748,10 +17431,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14748 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, | 17431 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 14749 | .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 17432 | .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 14750 | .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | 17433 | .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 14751 | .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .ui(switch (cc) { | 17434 | .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .vp(switch (cc) { |
| 14752 | else => unreachable, | 17435 | else => unreachable, |
| 14753 | .e => 0b00000, | 17436 | .e => .eq, |
| 14754 | .ne => 0b00100, | 17437 | .ne => .neq, |
| 14755 | }) }, | 17438 | }) }, |
| 14756 | .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ }, | 17439 | .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ }, |
| 14757 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, | 17440 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, |
| ... | @@ -14786,10 +17469,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14786,10 +17469,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14786 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, | 17469 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 14787 | .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 17470 | .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 14788 | .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | 17471 | .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 14789 | .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .ui(switch (cc) { | 17472 | .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .vp(switch (cc) { |
| 14790 | else => unreachable, | 17473 | else => unreachable, |
| 14791 | .e => 0b00000, | 17474 | .e => .eq, |
| 14792 | .ne => 0b00100, | 17475 | .ne => .neq, |
| 14793 | }) }, | 17476 | }) }, |
| 14794 | .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ }, | 17477 | .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ }, |
| 14795 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, | 17478 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, |
| ... | @@ -14834,7 +17517,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14834,7 +17517,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14834 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, | 17517 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 14835 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, | 17518 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| 14836 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, | 17519 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, |
| 14837 | .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ }, | 17520 | .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ }, |
| 14838 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, | 17521 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 14839 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, | 17522 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, |
| 14840 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, | 17523 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, |
| ... | @@ -14879,7 +17562,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14879,7 +17562,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14879 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, | 17562 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 14880 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, | 17563 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| 14881 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, | 17564 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, |
| 14882 | .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ }, | 17565 | .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ }, |
| 14883 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, | 17566 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 14884 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, | 17567 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, |
| 14885 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, | 17568 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, |
| ... | @@ -14925,7 +17608,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14925,7 +17608,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14925 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, | 17608 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 14926 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, | 17609 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| 14927 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, | 17610 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, |
| 14928 | .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ }, | 17611 | .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ }, |
| 14929 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, | 17612 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 14930 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, | 17613 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, |
| 14931 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, | 17614 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, |
| ... | @@ -14971,7 +17654,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -14971,7 +17654,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14971 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, | 17654 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 14972 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, | 17655 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| 14973 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, | 17656 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, |
| 14974 | .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ }, | 17657 | .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ }, |
| 14975 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, | 17658 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 14976 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, | 17659 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, |
| 14977 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, | 17660 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, |
| ... | @@ -15002,7 +17685,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15002,7 +17685,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15002 | .{ .type = .i32, .kind = .{ .reg = .eax } }, | 17685 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| 15003 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 17686 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 15004 | .{ .type = .u32, .kind = .{ .reg = .edx } }, | 17687 | .{ .type = .u32, .kind = .{ .reg = .edx } }, |
| 15005 | .{ .type = .vector_8_f16, .kind = .mem }, | 17688 | .{ .type = .f32, .kind = .mem }, |
| 15006 | .unused, | 17689 | .unused, |
| 15007 | }, | 17690 | }, |
| 15008 | .dst_temps = .{.{ .rc = .general_purpose }}, | 17691 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| ... | @@ -15012,14 +17695,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15012,14 +17695,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15012 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, | 17695 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 15013 | .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ }, | 17696 | .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ }, |
| 15014 | .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ }, | 17697 | .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ }, |
| 15015 | .{ ._, ._ps, .mova, .tmp1x, .mem(.tmp7x), ._, ._ }, | 17698 | .{ ._, ._ss, .mov, .tmp1x, .mem(.tmp7d), ._, ._ }, |
| 15016 | .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ }, | 17699 | .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ }, |
| 15017 | .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ }, | 17700 | .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ }, |
| 15018 | .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp7x), ._, ._ }, | 17701 | .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp7d), ._, ._ }, |
| 15019 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, | 17702 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 15020 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, | 17703 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| 15021 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, | 17704 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, |
| 15022 | .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ }, | 17705 | .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ }, |
| 15023 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, | 17706 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 15024 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, | 17707 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, |
| 15025 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, | 17708 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, |
| ... | @@ -15050,7 +17733,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15050,7 +17733,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15050 | .{ .type = .i32, .kind = .{ .reg = .eax } }, | 17733 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| 15051 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 17734 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 15052 | .{ .type = .u32, .kind = .{ .reg = .edx } }, | 17735 | .{ .type = .u32, .kind = .{ .reg = .edx } }, |
| 15053 | .{ .type = .vector_8_f16, .kind = .mem }, | 17736 | .{ .type = .f32, .kind = .mem }, |
| 15054 | .unused, | 17737 | .unused, |
| 15055 | }, | 17738 | }, |
| 15056 | .dst_temps = .{.{ .rc = .general_purpose }}, | 17739 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| ... | @@ -15060,14 +17743,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15060,14 +17743,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15060 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, | 17743 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 15061 | .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ }, | 17744 | .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ }, |
| 15062 | .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ }, | 17745 | .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ }, |
| 15063 | .{ ._, ._ps, .mova, .tmp1x, .mem(.tmp7x), ._, ._ }, | 17746 | .{ ._, ._ss, .mov, .tmp1x, .mem(.tmp7d), ._, ._ }, |
| 15064 | .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ }, | 17747 | .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ }, |
| 15065 | .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ }, | 17748 | .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ }, |
| 15066 | .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp7x), ._, ._ }, | 17749 | .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp7d), ._, ._ }, |
| 15067 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, | 17750 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 15068 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, | 17751 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| 15069 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, | 17752 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, |
| 15070 | .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ }, | 17753 | .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ }, |
| 15071 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, | 17754 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 15072 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, | 17755 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, |
| 15073 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, | 17756 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, |
| ... | @@ -15111,7 +17794,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15111,7 +17794,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15111 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, | 17794 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 15112 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, | 17795 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 15113 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, | 17796 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 15114 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, | 17797 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 15115 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, | 17798 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, |
| 15116 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, | 17799 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, |
| 15117 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, | 17800 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, |
| ... | @@ -15166,7 +17849,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15166,7 +17849,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15166 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, | 17849 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 15167 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, | 17850 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 15168 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, | 17851 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 15169 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, | 17852 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 15170 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, | 17853 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, |
| 15171 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, | 17854 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, |
| 15172 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, | 17855 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, |
| ... | @@ -15222,7 +17905,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15222,7 +17905,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15222 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, | 17905 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 15223 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, | 17906 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 15224 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, | 17907 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 15225 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, | 17908 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 15226 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, | 17909 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, |
| 15227 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, | 17910 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, |
| 15228 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, | 17911 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, |
| ... | @@ -15278,7 +17961,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15278,7 +17961,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15278 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, | 17961 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 15279 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, | 17962 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 15280 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, | 17963 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 15281 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, | 17964 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 15282 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, | 17965 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, |
| 15283 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, | 17966 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, |
| 15284 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, | 17967 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, |
| ... | @@ -15320,7 +18003,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15320,7 +18003,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15320 | .{ .type = .i32, .kind = .{ .reg = .eax } }, | 18003 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| 15321 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 18004 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 15322 | .{ .type = .u64, .kind = .{ .reg = .rdx } }, | 18005 | .{ .type = .u64, .kind = .{ .reg = .rdx } }, |
| 15323 | .{ .type = .vector_8_f16, .kind = .mem }, | 18006 | .{ .type = .f32, .kind = .mem }, |
| 15324 | }, | 18007 | }, |
| 15325 | .dst_temps = .{.mem}, | 18008 | .dst_temps = .{.mem}, |
| 15326 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, | 18009 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| ... | @@ -15329,14 +18012,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15329,14 +18012,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15329 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 18012 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 15330 | .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ }, | 18013 | .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ }, |
| 15331 | .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ }, | 18014 | .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ }, |
| 15332 | .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp8x), ._, ._ }, | 18015 | .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp8d), ._, ._ }, |
| 15333 | .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ }, | 18016 | .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ }, |
| 15334 | .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ }, | 18017 | .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ }, |
| 15335 | .{ ._, ._ps, .mova, .tmp3x, .mem(.tmp8x), ._, ._ }, | 18018 | .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp8d), ._, ._ }, |
| 15336 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, | 18019 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 15337 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, | 18020 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 15338 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, | 18021 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 15339 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, | 18022 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 15340 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, | 18023 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, |
| 15341 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, | 18024 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, |
| 15342 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, | 18025 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, |
| ... | @@ -15378,7 +18061,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15378,7 +18061,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15378 | .{ .type = .i32, .kind = .{ .reg = .eax } }, | 18061 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| 15379 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 18062 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 15380 | .{ .type = .u64, .kind = .{ .reg = .rdx } }, | 18063 | .{ .type = .u64, .kind = .{ .reg = .rdx } }, |
| 15381 | .{ .type = .vector_8_f16, .kind = .mem }, | 18064 | .{ .type = .f32, .kind = .mem }, |
| 15382 | }, | 18065 | }, |
| 15383 | .dst_temps = .{.mem}, | 18066 | .dst_temps = .{.mem}, |
| 15384 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, | 18067 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| ... | @@ -15387,14 +18070,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15387,14 +18070,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15387 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 18070 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 15388 | .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ }, | 18071 | .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ }, |
| 15389 | .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ }, | 18072 | .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ }, |
| 15390 | .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp8x), ._, ._ }, | 18073 | .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp8d), ._, ._ }, |
| 15391 | .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ }, | 18074 | .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ }, |
| 15392 | .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ }, | 18075 | .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ }, |
| 15393 | .{ ._, ._ps, .mova, .tmp3x, .mem(.tmp8x), ._, ._ }, | 18076 | .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp8d), ._, ._ }, |
| 15394 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, | 18077 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 15395 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, | 18078 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 15396 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, | 18079 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 15397 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, | 18080 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 15398 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, | 18081 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, |
| 15399 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, | 18082 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, |
| 15400 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, | 18083 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, |
| ... | @@ -15439,10 +18122,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15439,10 +18122,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15439 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 18122 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 15440 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, | 18123 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 15441 | .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | 18124 | .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 15442 | .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) { | 18125 | .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) { |
| 15443 | else => unreachable, | 18126 | else => unreachable, |
| 15444 | .e => 0b00000, | 18127 | .e => .eq, |
| 15445 | .ne => 0b00100, | 18128 | .ne => .neq, |
| 15446 | }) }, | 18129 | }) }, |
| 15447 | .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ }, | 18130 | .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ }, |
| 15448 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, | 18131 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, |
| ... | @@ -15476,10 +18159,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15476,10 +18159,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15476 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 18159 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 15477 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, | 18160 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 15478 | .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | 18161 | .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 15479 | .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) { | 18162 | .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) { |
| 15480 | else => unreachable, | 18163 | else => unreachable, |
| 15481 | .e => 0b00000, | 18164 | .e => .eq, |
| 15482 | .ne => 0b00100, | 18165 | .ne => .neq, |
| 15483 | }) }, | 18166 | }) }, |
| 15484 | .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ }, | 18167 | .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ }, |
| 15485 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, | 18168 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, |
| ... | @@ -15514,15 +18197,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15514,15 +18197,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15514 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, | 18197 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 15515 | .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 18198 | .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 15516 | .{ ._, ._ps, .mova, .tmp3x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ }, | 18199 | .{ ._, ._ps, .mova, .tmp3x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ }, |
| 15517 | .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) { | 18200 | .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .vp(switch (cc) { |
| 15518 | else => unreachable, | 18201 | else => unreachable, |
| 15519 | .e => 0b00000, | 18202 | .e => .eq, |
| 15520 | .ne => 0b00100, | 18203 | .ne => .neq, |
| 15521 | }), ._ }, | 18204 | }), ._ }, |
| 15522 | .{ ._, ._ps, .cmp, .tmp3x, .memiad(.src1x, .tmp0, .add_size, 16), .ui(switch (cc) { | 18205 | .{ ._, ._ps, .cmp, .tmp3x, .memiad(.src1x, .tmp0, .add_size, 16), .vp(switch (cc) { |
| 15523 | else => unreachable, | 18206 | else => unreachable, |
| 15524 | .e => 0b00000, | 18207 | .e => .eq, |
| 15525 | .ne => 0b00100, | 18208 | .ne => .neq, |
| 15526 | }), ._ }, | 18209 | }), ._ }, |
| 15527 | .{ ._, .p_w, .ackssd, .tmp2x, .tmp3x, ._, ._ }, | 18210 | .{ ._, .p_w, .ackssd, .tmp2x, .tmp3x, ._, ._ }, |
| 15528 | .{ ._, .p_b, .ackssw, .tmp2x, .tmp2x, ._, ._ }, | 18211 | .{ ._, .p_b, .ackssw, .tmp2x, .tmp2x, ._, ._ }, |
| ... | @@ -15558,17 +18241,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15558,17 +18241,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15558 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 18241 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 15559 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, | 18242 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 15560 | .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 18243 | .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 15561 | .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) { | 18244 | .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .vp(switch (cc) { |
| 15562 | else => unreachable, | 18245 | else => unreachable, |
| 15563 | .e => 0b00000, | 18246 | .e => .eq, |
| 15564 | .ne => 0b00100, | 18247 | .ne => .neq, |
| 15565 | }), ._ }, | 18248 | }), ._ }, |
| 15566 | .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ }, | 18249 | .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ }, |
| 15567 | .{ ._, ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ }, | 18250 | .{ ._, ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ }, |
| 15568 | .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, 16), .ui(switch (cc) { | 18251 | .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, 16), .vp(switch (cc) { |
| 15569 | else => unreachable, | 18252 | else => unreachable, |
| 15570 | .e => 0b00000, | 18253 | .e => .eq, |
| 15571 | .ne => 0b00100, | 18254 | .ne => .neq, |
| 15572 | }), ._ }, | 18255 | }), ._ }, |
| 15573 | .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ }, | 18256 | .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ }, |
| 15574 | .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ }, | 18257 | .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ }, |
| ... | @@ -15605,10 +18288,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15605,10 +18288,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15605 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, | 18288 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 15606 | .{ ._, ._mp, .j, .@"1f", ._, ._, ._ }, | 18289 | .{ ._, ._mp, .j, .@"1f", ._, ._, ._ }, |
| 15607 | .{ .@"0:", ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, -16), ._, ._ }, | 18290 | .{ .@"0:", ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, -16), ._, ._ }, |
| 15608 | .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, -16), .ui(switch (cc) { | 18291 | .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, -16), .vp(switch (cc) { |
| 15609 | else => unreachable, | 18292 | else => unreachable, |
| 15610 | .e => 0b00000, | 18293 | .e => .eq, |
| 15611 | .ne => 0b00100, | 18294 | .ne => .neq, |
| 15612 | }), ._ }, | 18295 | }), ._ }, |
| 15613 | .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ }, | 18296 | .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ }, |
| 15614 | .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ }, | 18297 | .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ }, |
| ... | @@ -15616,10 +18299,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15616,10 +18299,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15616 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, | 18299 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, |
| 15617 | .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, | 18300 | .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, |
| 15618 | .{ .@"1:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 18301 | .{ .@"1:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 15619 | .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) { | 18302 | .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .vp(switch (cc) { |
| 15620 | else => unreachable, | 18303 | else => unreachable, |
| 15621 | .e => 0b00000, | 18304 | .e => .eq, |
| 15622 | .ne => 0b00100, | 18305 | .ne => .neq, |
| 15623 | }), ._ }, | 18306 | }), ._ }, |
| 15624 | .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ }, | 18307 | .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ }, |
| 15625 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | 18308 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| ... | @@ -15653,15 +18336,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15653,15 +18336,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15653 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, | 18336 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 15654 | .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | 18337 | .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 15655 | .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ }, | 18338 | .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ }, |
| 15656 | .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) { | 18339 | .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) { |
| 15657 | else => unreachable, | 18340 | else => unreachable, |
| 15658 | .e => 0b00000, | 18341 | .e => .eq, |
| 15659 | .ne => 0b00100, | 18342 | .ne => .neq, |
| 15660 | }) }, | 18343 | }) }, |
| 15661 | .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .ui(switch (cc) { | 18344 | .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .vp(switch (cc) { |
| 15662 | else => unreachable, | 18345 | else => unreachable, |
| 15663 | .e => 0b00000, | 18346 | .e => .eq, |
| 15664 | .ne => 0b00100, | 18347 | .ne => .neq, |
| 15665 | }) }, | 18348 | }) }, |
| 15666 | .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ }, | 18349 | .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ }, |
| 15667 | .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ }, | 18350 | .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ }, |
| ... | @@ -15669,7 +18352,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15669,7 +18352,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15669 | .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ }, | 18352 | .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ }, |
| 15670 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, | 18353 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, |
| 15671 | .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, | 18354 | .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, |
| 15672 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | 18355 | .{ ._, ._, .add, .tmp0p, .si(64), ._, ._ }, |
| 15673 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 18356 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 15674 | } }, | 18357 | } }, |
| 15675 | }, .{ | 18358 | }, .{ |
| ... | @@ -15699,15 +18382,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15699,15 +18382,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15699 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, | 18382 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 15700 | .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | 18383 | .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 15701 | .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ }, | 18384 | .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ }, |
| 15702 | .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) { | 18385 | .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) { |
| 15703 | else => unreachable, | 18386 | else => unreachable, |
| 15704 | .e => 0b00000, | 18387 | .e => .eq, |
| 15705 | .ne => 0b00100, | 18388 | .ne => .neq, |
| 15706 | }) }, | 18389 | }) }, |
| 15707 | .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .ui(switch (cc) { | 18390 | .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .vp(switch (cc) { |
| 15708 | else => unreachable, | 18391 | else => unreachable, |
| 15709 | .e => 0b00000, | 18392 | .e => .eq, |
| 15710 | .ne => 0b00100, | 18393 | .ne => .neq, |
| 15711 | }) }, | 18394 | }) }, |
| 15712 | .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ }, | 18395 | .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ }, |
| 15713 | .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ }, | 18396 | .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ }, |
| ... | @@ -15715,7 +18398,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15715,7 +18398,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15715 | .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ }, | 18398 | .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ }, |
| 15716 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, | 18399 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, |
| 15717 | .{ ._, ._c, .in, .tmp1q, ._, ._, ._ }, | 18400 | .{ ._, ._c, .in, .tmp1q, ._, ._, ._ }, |
| 15718 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | 18401 | .{ ._, ._, .add, .tmp0p, .si(64), ._, ._ }, |
| 15719 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 18402 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 15720 | } }, | 18403 | } }, |
| 15721 | }, .{ | 18404 | }, .{ |
| ... | @@ -15745,10 +18428,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15745,10 +18428,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15745 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 18428 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 15746 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 18429 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 15747 | .{ .@"0:", .v_pd, .mova, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | 18430 | .{ .@"0:", .v_pd, .mova, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 15748 | .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) { | 18431 | .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) { |
| 15749 | else => unreachable, | 18432 | else => unreachable, |
| 15750 | .e => 0b00000, | 18433 | .e => .eq, |
| 15751 | .ne => 0b00100, | 18434 | .ne => .neq, |
| 15752 | }) }, | 18435 | }) }, |
| 15753 | .{ ._, .v_pd, .movmsk, .tmp4d, .tmp3y, ._, ._ }, | 18436 | .{ ._, .v_pd, .movmsk, .tmp4d, .tmp3y, ._, ._ }, |
| 15754 | .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, | 18437 | .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, |
| ... | @@ -15795,10 +18478,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15795,10 +18478,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15795 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 18478 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 15796 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 18479 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 15797 | .{ .@"0:", ._pd, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 18480 | .{ .@"0:", ._pd, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 15798 | .{ ._, ._pd, .cmp, .tmp3x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) { | 18481 | .{ ._, ._pd, .cmp, .tmp3x, .memia(.src1x, .tmp0, .add_size), .vp(switch (cc) { |
| 15799 | else => unreachable, | 18482 | else => unreachable, |
| 15800 | .e => 0b00000, | 18483 | .e => .eq, |
| 15801 | .ne => 0b00100, | 18484 | .ne => .neq, |
| 15802 | }), ._ }, | 18485 | }), ._ }, |
| 15803 | .{ ._, ._pd, .movmsk, .tmp4d, .tmp3x, ._, ._ }, | 18486 | .{ ._, ._pd, .movmsk, .tmp4d, .tmp3x, ._, ._ }, |
| 15804 | .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, | 18487 | .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, |
| ... | @@ -15850,7 +18533,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15850,7 +18533,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15850 | .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ }, | 18533 | .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ }, |
| 15851 | .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ }, | 18534 | .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ }, |
| 15852 | .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ }, | 18535 | .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ }, |
| 15853 | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, | 18536 | .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ }, |
| 15854 | .{ ._, switch (cc) { | 18537 | .{ ._, switch (cc) { |
| 15855 | else => unreachable, | 18538 | else => unreachable, |
| 15856 | .e => ._np, | 18539 | .e => ._np, |
| ... | @@ -15910,7 +18593,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15910,7 +18593,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15910 | .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ }, | 18593 | .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ }, |
| 15911 | .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ }, | 18594 | .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ }, |
| 15912 | .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ }, | 18595 | .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ }, |
| 15913 | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, | 18596 | .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ }, |
| 15914 | .{ ._, switch (cc) { | 18597 | .{ ._, switch (cc) { |
| 15915 | else => unreachable, | 18598 | else => unreachable, |
| 15916 | .e => ._np, | 18599 | .e => ._np, |
| ... | @@ -15971,7 +18654,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -15971,7 +18654,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15971 | .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ }, | 18654 | .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ }, |
| 15972 | .{ ._, ._, .xor, .tmp6b, .si(0b0_1_000_000), ._, ._ }, | 18655 | .{ ._, ._, .xor, .tmp6b, .si(0b0_1_000_000), ._, ._ }, |
| 15973 | .{ ._, ._, .@"test", .tmp6b, .si(0b0_1_000_100), ._, ._ }, | 18656 | .{ ._, ._, .@"test", .tmp6b, .si(0b0_1_000_100), ._, ._ }, |
| 15974 | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, | 18657 | .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ }, |
| 15975 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | 18658 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| 15976 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | 18659 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| 15977 | .{ ._, ._c, .in, .tmp1d, ._, ._, ._ }, | 18660 | .{ ._, ._c, .in, .tmp1d, ._, ._, ._ }, |
| ... | @@ -16021,7 +18704,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -16021,7 +18704,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16021 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, | 18704 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 16022 | .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ }, | 18705 | .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ }, |
| 16023 | .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ }, | 18706 | .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ }, |
| 16024 | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, | 18707 | .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ }, |
| 16025 | .{ ._, switch (cc) { | 18708 | .{ ._, switch (cc) { |
| 16026 | else => unreachable, | 18709 | else => unreachable, |
| 16027 | .e => ._np, | 18710 | .e => ._np, |
| ... | @@ -16081,7 +18764,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -16081,7 +18764,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16081 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, | 18764 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 16082 | .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ }, | 18765 | .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ }, |
| 16083 | .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ }, | 18766 | .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ }, |
| 16084 | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, | 18767 | .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ }, |
| 16085 | .{ ._, switch (cc) { | 18768 | .{ ._, switch (cc) { |
| 16086 | else => unreachable, | 18769 | else => unreachable, |
| 16087 | .e => ._np, | 18770 | .e => ._np, |
| ... | @@ -16142,7 +18825,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -16142,7 +18825,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16142 | .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ }, | 18825 | .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ }, |
| 16143 | .{ ._, ._, .xor, .tmp6b, .si(0b0_1_000_000), ._, ._ }, | 18826 | .{ ._, ._, .xor, .tmp6b, .si(0b0_1_000_000), ._, ._ }, |
| 16144 | .{ ._, ._, .@"test", .tmp6b, .si(0b0_1_000_100), ._, ._ }, | 18827 | .{ ._, ._, .@"test", .tmp6b, .si(0b0_1_000_100), ._, ._ }, |
| 16145 | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, | 18828 | .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ }, |
| 16146 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | 18829 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| 16147 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | 18830 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| 16148 | .{ ._, ._c, .in, .tmp1d, ._, ._, ._ }, | 18831 | .{ ._, ._c, .in, .tmp1d, ._, ._, ._ }, |
| ... | @@ -16197,7 +18880,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -16197,7 +18880,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16197 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, | 18880 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 16198 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, | 18881 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 16199 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, | 18882 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 16200 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, | 18883 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 16201 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, | 18884 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 16202 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, | 18885 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| 16203 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, | 18886 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| ... | @@ -16242,7 +18925,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -16242,7 +18925,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16242 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, | 18925 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 16243 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, | 18926 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 16244 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, | 18927 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 16245 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, | 18928 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 16246 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, | 18929 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 16247 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, | 18930 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| 16248 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, | 18931 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| ... | @@ -16287,7 +18970,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -16287,7 +18970,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16287 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, | 18970 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 16288 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, | 18971 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 16289 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, | 18972 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 16290 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, | 18973 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 16291 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, | 18974 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 16292 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, | 18975 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| 16293 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, | 18976 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| ... | @@ -16332,7 +19015,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -16332,7 +19015,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16332 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, | 19015 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 16333 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, | 19016 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 16334 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, | 19017 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 16335 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, | 19018 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 16336 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, | 19019 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 16337 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, | 19020 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| 16338 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, | 19021 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| ... | @@ -16377,7 +19060,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -16377,7 +19060,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16377 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, | 19060 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 16378 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, | 19061 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 16379 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, | 19062 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 16380 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, | 19063 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 16381 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, | 19064 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 16382 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, | 19065 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| 16383 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, | 19066 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| ... | @@ -16422,7 +19105,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -16422,7 +19105,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16422 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, | 19105 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 16423 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, | 19106 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 16424 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, | 19107 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 16425 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, | 19108 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 16426 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, | 19109 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 16427 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, | 19110 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| 16428 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, | 19111 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| ... | @@ -16466,7 +19149,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -16466,7 +19149,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16466 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, | 19149 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| 16467 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, | 19150 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, |
| 16468 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, | 19151 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, |
| 16469 | .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ }, | 19152 | .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ }, |
| 16470 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, | 19153 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, |
| 16471 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, | 19154 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, |
| 16472 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, | 19155 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, |
| ... | @@ -16521,7 +19204,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -16521,7 +19204,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16521 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, | 19204 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| 16522 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, | 19205 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, |
| 16523 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, | 19206 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, |
| 16524 | .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ }, | 19207 | .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ }, |
| 16525 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, | 19208 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, |
| 16526 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, | 19209 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, |
| 16527 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, | 19210 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, |
| ... | @@ -16576,7 +19259,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -16576,7 +19259,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16576 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, | 19259 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| 16577 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, | 19260 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, |
| 16578 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, | 19261 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, |
| 16579 | .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ }, | 19262 | .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ }, |
| 16580 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, | 19263 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, |
| 16581 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, | 19264 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, |
| 16582 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, | 19265 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, |
| ... | @@ -16631,7 +19314,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -16631,7 +19314,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16631 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, | 19314 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| 16632 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, | 19315 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, |
| 16633 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, | 19316 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, |
| 16634 | .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ }, | 19317 | .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ }, |
| 16635 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, | 19318 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, |
| 16636 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, | 19319 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, |
| 16637 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, | 19320 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, |
| ... | @@ -16686,7 +19369,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -16686,7 +19369,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16686 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, | 19369 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| 16687 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, | 19370 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, |
| 16688 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, | 19371 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, |
| 16689 | .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ }, | 19372 | .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ }, |
| 16690 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, | 19373 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, |
| 16691 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, | 19374 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, |
| 16692 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, | 19375 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, |
| ... | @@ -16741,7 +19424,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -16741,7 +19424,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16741 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, | 19424 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| 16742 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, | 19425 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, |
| 16743 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, | 19426 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, |
| 16744 | .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ }, | 19427 | .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ }, |
| 16745 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, | 19428 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, |
| 16746 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, | 19429 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, |
| 16747 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, | 19430 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, |
| ... | @@ -18419,7 +21102,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -18419,7 +21102,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 18419 | .{ ._, ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ }, | 21102 | .{ ._, ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ }, |
| 18420 | .{ ._, ._, .sbb, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ }, | 21103 | .{ ._, ._, .sbb, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ }, |
| 18421 | .{ ._, ._c, .set, .tmp1b, ._, ._, ._ }, | 21104 | .{ ._, ._c, .set, .tmp1b, ._, ._, ._ }, |
| 18422 | .{ ._, .fromCondition(switch (cc) { | 21105 | .{ ._, .fromCond(switch (cc) { |
| 18423 | else => unreachable, | 21106 | else => unreachable, |
| 18424 | .l, .ge, .b, .ae => cc, | 21107 | .l, .ge, .b, .ae => cc, |
| 18425 | .le, .g, .be, .a => cc.commute(), | 21108 | .le, .g, .be, .a => cc.commute(), |
| ... | @@ -18979,8 +21662,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -18979,8 +21662,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 18979 | .{ .src = .{ .to_sse, .to_sse } }, | 21662 | .{ .src = .{ .to_sse, .to_sse } }, |
| 18980 | }, | 21663 | }, |
| 18981 | .extra_temps = .{ | 21664 | .extra_temps = .{ |
| 18982 | .{ .kind = .{ .rc = .sse } }, | 21665 | .{ .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } }, |
| 18983 | .{ .kind = .{ .rc = .sse } }, | 21666 | .{ .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } }, |
| 18984 | .unused, | 21667 | .unused, |
| 18985 | .unused, | 21668 | .unused, |
| 18986 | .unused, | 21669 | .unused, |
| ... | @@ -18996,9 +21679,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -18996,9 +21679,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 18996 | } }}, | 21679 | } }}, |
| 18997 | .clobbers = .{ .eflags = true }, | 21680 | .clobbers = .{ .eflags = true }, |
| 18998 | .each = .{ .once = &.{ | 21681 | .each = .{ .once = &.{ |
| 18999 | .{ ._, .vp_, .unpcklwd, .tmp0x, .src0x, .src1x, ._ }, | 21682 | .{ ._, .v_ps, .cvtph2, .tmp0x, .src0q, ._, ._ }, |
| 19000 | .{ ._, .v_ps, .cvtph2, .tmp0x, .tmp0x, ._, ._ }, | 21683 | .{ ._, .v_ps, .cvtph2, .tmp1x, .src1q, ._, ._ }, |
| 19001 | .{ ._, .v_, .movshdup, .tmp1x, .tmp0x, ._, ._ }, | | |
| 19002 | .{ ._, .v_ss, .ucomi, .tmp0x, .tmp1x, ._, ._ }, | 21684 | .{ ._, .v_ss, .ucomi, .tmp0x, .tmp1x, ._, ._ }, |
| 19003 | } }, | 21685 | } }, |
| 19004 | }, .{ | 21686 | }, .{ |
| ... | @@ -19197,35 +21879,6 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -19197,35 +21879,6 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 19197 | .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, | 21879 | .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, |
| 19198 | .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ }, | 21880 | .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ }, |
| 19199 | } }, | 21881 | } }, |
| 19200 | }, .{ | | |
| 19201 | .required_features = .{ .x87, .cmov, null, null }, | | |
| 19202 | .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } }, | | |
| 19203 | .patterns = &.{ | | |
| 19204 | .{ .src = .{ .mem, .mem } }, | | |
| 19205 | }, | | |
| 19206 | .extra_temps = .{ | | |
| 19207 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, | | |
| 19208 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, | | |
| 19209 | .unused, | | |
| 19210 | .unused, | | |
| 19211 | .unused, | | |
| 19212 | .unused, | | |
| 19213 | .unused, | | |
| 19214 | .unused, | | |
| 19215 | .unused, | | |
| 19216 | }, | | |
| 19217 | .dst_temps = .{.{ .cc = switch (cc) { | | |
| 19218 | else => unreachable, | | |
| 19219 | .e => .z_and_np, | | |
| 19220 | .ne => .nz_or_p, | | |
| 19221 | } }}, | | |
| 19222 | .clobbers = .{ .eflags = true }, | | |
| 19223 | .each = .{ .once = &.{ | | |
| 19224 | .{ ._, .f_, .ld, .src1t, ._, ._, ._ }, | | |
| 19225 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, | | |
| 19226 | .{ ._, .f_p, .ucomi, .tmp0t, .tmp1t, ._, ._ }, | | |
| 19227 | .{ ._, .f_p, .st, .tmp1t, ._, ._, ._ }, | | |
| 19228 | } }, | | |
| 19229 | }, .{ | 21882 | }, .{ |
| 19230 | .required_features = .{ .x87, .cmov, null, null }, | 21883 | .required_features = .{ .x87, .cmov, null, null }, |
| 19231 | .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } }, | 21884 | .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } }, |
| ... | @@ -19479,46 +22132,59 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -19479,46 +22132,59 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 19479 | .switch_dispatch => try cg.airSwitchDispatch(inst), | 22132 | .switch_dispatch => try cg.airSwitchDispatch(inst), |
| 19480 | .@"try", .try_cold => try cg.airTry(inst), | 22133 | .@"try", .try_cold => try cg.airTry(inst), |
| 19481 | .try_ptr, .try_ptr_cold => try cg.airTryPtr(inst), | 22134 | .try_ptr, .try_ptr_cold => try cg.airTryPtr(inst), |
| 19482 | .dbg_stmt => if (use_old) try cg.airDbgStmt(inst) else { | 22135 | .dbg_stmt => if (cg.debug_output != .none) { |
| 19483 | const dbg_stmt = air_datas[@intFromEnum(inst)].dbg_stmt; | 22136 | const dbg_stmt = air_datas[@intFromEnum(inst)].dbg_stmt; |
| 19484 | _ = try cg.addInst(.{ | 22137 | _ = try cg.addInst(.{ |
| 19485 | .tag = .pseudo, | 22138 | .tag = .pseudo, |
| 19486 | .ops = .pseudo_dbg_line_line_column, | 22139 | .ops = .pseudo_dbg_line_stmt_line_column, |
| 19487 | .data = .{ .line_column = .{ | 22140 | .data = .{ .line_column = .{ |
| 19488 | .line = dbg_stmt.line, | 22141 | .line = dbg_stmt.line, |
| 19489 | .column = dbg_stmt.column, | 22142 | .column = dbg_stmt.column, |
| 19490 | } }, | 22143 | } }, |
| 19491 | }); | 22144 | }); |
| 19492 | }, | 22145 | }, |
| 19493 | .dbg_empty_stmt => if (use_old) try cg.airDbgEmptyStmt() else { | 22146 | .dbg_empty_stmt => if (cg.debug_output != .none) { |
| 19494 | if (cg.mir_instructions.len > 0) { | 22147 | if (cg.mir_instructions.len > 0) { |
| 19495 | const prev_mir_op = &cg.mir_instructions.items(.ops)[cg.mir_instructions.len - 1]; | 22148 | const prev_mir_op = &cg.mir_instructions.items(.ops)[cg.mir_instructions.len - 1]; |
| 19496 | if (prev_mir_op.* == .pseudo_dbg_line_stmt_line_column) | 22149 | if (prev_mir_op.* == .pseudo_dbg_line_line_column) |
| 19497 | prev_mir_op.* = .pseudo_dbg_line_line_column; | 22150 | prev_mir_op.* = .pseudo_dbg_line_stmt_line_column; |
| 19498 | } | 22151 | } |
| 19499 | try cg.asmOpOnly(.{ ._, .nop }); | 22152 | try cg.asmOpOnly(.{ ._, .nop }); |
| 19500 | }, | 22153 | }, |
| 19501 | .dbg_inline_block => if (use_old) try cg.airDbgInlineBlock(inst) else { | 22154 | .dbg_inline_block => { |
| 19502 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; | 22155 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; |
| 19503 | const extra = cg.air.extraData(Air.DbgInlineBlock, ty_pl.payload); | 22156 | const extra = cg.air.extraData(Air.DbgInlineBlock, ty_pl.payload); |
| 19504 | const old_inline_func = cg.inline_func; | 22157 | const old_inline_func = cg.inline_func; |
| 19505 | defer cg.inline_func = old_inline_func; | 22158 | defer cg.inline_func = old_inline_func; |
| 19506 | cg.inline_func = extra.data.func; | 22159 | cg.inline_func = extra.data.func; |
| 19507 | _ = try cg.addInst(.{ | 22160 | if (cg.debug_output != .none) _ = try cg.addInst(.{ |
| 19508 | .tag = .pseudo, | 22161 | .tag = .pseudo, |
| 19509 | .ops = .pseudo_dbg_enter_inline_func, | 22162 | .ops = .pseudo_dbg_enter_inline_func, |
| 19510 | .data = .{ .func = extra.data.func }, | 22163 | .data = .{ .func = extra.data.func }, |
| 19511 | }); | 22164 | }); |
| 19512 | try cg.lowerBlock(inst, @ptrCast(cg.air.extra[extra.end..][0..extra.data.body_len])); | 22165 | try cg.lowerBlock(inst, @ptrCast(cg.air.extra[extra.end..][0..extra.data.body_len])); |
| 19513 | _ = try cg.addInst(.{ | 22166 | if (cg.debug_output != .none) _ = try cg.addInst(.{ |
| 19514 | .tag = .pseudo, | 22167 | .tag = .pseudo, |
| 19515 | .ops = .pseudo_dbg_leave_inline_func, | 22168 | .ops = .pseudo_dbg_leave_inline_func, |
| 19516 | .data = .{ .func = old_inline_func }, | 22169 | .data = .{ .func = old_inline_func }, |
| 19517 | }); | 22170 | }); |
| 19518 | }, | 22171 | }, |
| 19519 | .dbg_var_ptr, .dbg_var_val, .dbg_arg_inline => if (use_old) try cg.airDbgVar(inst) else { | 22172 | .dbg_var_ptr, .dbg_var_val, .dbg_arg_inline => if (use_old) try cg.airDbgVar(inst) else if (cg.debug_output != .none) { |
| 19520 | const pl_op = air_datas[@intFromEnum(inst)].pl_op; | 22173 | const pl_op = air_datas[@intFromEnum(inst)].pl_op; |
| 19521 | var ops = try cg.tempsFromOperands(inst, .{pl_op.operand}); | 22174 | var ops = try cg.tempsFromOperands(inst, .{pl_op.operand}); |
| | 22175 | var mcv = ops[0].tracking(cg).short; |
| | 22176 | switch (mcv) { |
| | 22177 | else => {}, |
| | 22178 | .eflags => |cc| switch (cc) { |
| | 22179 | else => {}, |
| | 22180 | // These values would self destruct. Maybe we make them use their |
| | 22181 | // turing complete dwarf expression interpreters for once? |
| | 22182 | .z_and_np, .nz_or_p => { |
| | 22183 | try cg.spillEflagsIfOccupied(); |
| | 22184 | mcv = ops[0].tracking(cg).short; |
| | 22185 | }, |
| | 22186 | }, |
| | 22187 | } |
| 19522 | try cg.genLocalDebugInfo(inst, ops[0].tracking(cg).short); | 22188 | try cg.genLocalDebugInfo(inst, ops[0].tracking(cg).short); |
| 19523 | try ops[0].die(cg); | 22189 | try ops[0].die(cg); |
| 19524 | }, | 22190 | }, |
| ... | @@ -20398,19 +23064,21 @@ fn allocRegOrMemAdvanced(self: *CodeGen, ty: Type, inst: ?Air.Inst.Index, reg_ok | ... | @@ -20398,19 +23064,21 @@ fn allocRegOrMemAdvanced(self: *CodeGen, ty: Type, inst: ?Air.Inst.Index, reg_ok |
| 20398 | }; | 23064 | }; |
| 20399 | | 23065 | |
| 20400 | if (reg_ok) need_mem: { | 23066 | if (reg_ok) need_mem: { |
| 20401 | if (std.math.isPowerOfTwo(abi_size) and abi_size <= @as(u32, switch (ty.zigTypeTag(zcu)) { | 23067 | if (std.math.isPowerOfTwo(abi_size) and abi_size <= @as(u32, max_abi_size: switch (ty.zigTypeTag(zcu)) { |
| 20402 | .float => switch (ty.floatBits(self.target.*)) { | 23068 | .float => switch (ty.floatBits(self.target.*)) { |
| 20403 | 16, 32, 64, 128 => 16, | 23069 | 16, 32, 64, 128 => 16, |
| 20404 | 80 => break :need_mem, | 23070 | 80 => break :need_mem, |
| 20405 | else => unreachable, | 23071 | else => unreachable, |
| 20406 | }, | 23072 | }, |
| 20407 | .vector => switch (ty.childType(zcu).zigTypeTag(zcu)) { | 23073 | .vector => { |
| 20408 | .float => switch (ty.childType(zcu).floatBits(self.target.*)) { | 23074 | const elem_ty = ty.childType(zcu); |
| | 23075 | break :max_abi_size if (elem_ty.toIntern() == .bool_type) |
| | 23076 | 8 |
| | 23077 | else if (self.floatBits(elem_ty)) |float_bits| switch (float_bits) { |
| 20409 | 16, 32, 64, 128 => self.vectorSize(.float), | 23078 | 16, 32, 64, 128 => self.vectorSize(.float), |
| 20410 | 80 => break :need_mem, | 23079 | 80 => break :need_mem, |
| 20411 | else => unreachable, | 23080 | else => unreachable, |
| 20412 | }, | 23081 | } else self.vectorSize(.int); |
| 20413 | else => self.vectorSize(.int), | | |
| 20414 | }, | 23082 | }, |
| 20415 | else => 8, | 23083 | else => 8, |
| 20416 | })) { | 23084 | })) { |
| ... | @@ -20427,17 +23095,18 @@ fn allocRegOrMemAdvanced(self: *CodeGen, ty: Type, inst: ?Air.Inst.Index, reg_ok | ... | @@ -20427,17 +23095,18 @@ fn allocRegOrMemAdvanced(self: *CodeGen, ty: Type, inst: ?Air.Inst.Index, reg_ok |
| 20427 | fn regClassForType(self: *CodeGen, ty: Type) Register.Class { | 23095 | fn regClassForType(self: *CodeGen, ty: Type) Register.Class { |
| 20428 | const pt = self.pt; | 23096 | const pt = self.pt; |
| 20429 | const zcu = pt.zcu; | 23097 | const zcu = pt.zcu; |
| 20430 | return switch (ty.zigTypeTag(zcu)) { | 23098 | if (self.floatBits(ty)) |float_bits| return switch (float_bits) { |
| 20431 | .float => switch (ty.floatBits(self.target.*)) { | 23099 | 80 => .x87, |
| 20432 | 80 => .x87, | 23100 | else => .sse, |
| 20433 | else => .sse, | | |
| 20434 | }, | | |
| 20435 | .vector => switch (ty.childType(zcu).toIntern()) { | | |
| 20436 | .bool_type => .general_purpose, | | |
| 20437 | else => .sse, | | |
| 20438 | }, | | |
| 20439 | else => .general_purpose, | | |
| 20440 | }; | 23101 | }; |
| | 23102 | if (!ty.isVector(zcu)) return .general_purpose; |
| | 23103 | const elem_ty = ty.childType(zcu); |
| | 23104 | return if (elem_ty.toIntern() == .bool_type) |
| | 23105 | .general_purpose |
| | 23106 | else if (self.floatBits(elem_ty) == 80) |
| | 23107 | .x87 |
| | 23108 | else |
| | 23109 | .sse; |
| 20441 | } | 23110 | } |
| 20442 | | 23111 | |
| 20443 | fn regSetForRegClass(rc: Register.Class) RegisterManager.RegisterBitSet { | 23112 | fn regSetForRegClass(rc: Register.Class) RegisterManager.RegisterBitSet { |
| ... | @@ -20725,7 +23394,7 @@ fn airFptrunc(self: *CodeGen, inst: Air.Inst.Index) !void { | ... | @@ -20725,7 +23394,7 @@ fn airFptrunc(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 20725 | .{ .v_, .cvtps2ph }, | 23394 | .{ .v_, .cvtps2ph }, |
| 20726 | dst_reg, | 23395 | dst_reg, |
| 20727 | mat_src_reg.to128(), | 23396 | mat_src_reg.to128(), |
| 20728 | .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))), | 23397 | bits.RoundMode.imm(.{}), |
| 20729 | ); | 23398 | ); |
| 20730 | }, | 23399 | }, |
| 20731 | else => unreachable, | 23400 | else => unreachable, |
| ... | @@ -24896,26 +27565,7 @@ fn airFloatSign(self: *CodeGen, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void { | ... | @@ -24896,26 +27565,7 @@ fn airFloatSign(self: *CodeGen, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void { |
| 24896 | return self.floatSign(inst, tag, un_op, ty); | 27565 | return self.floatSign(inst, tag, un_op, ty); |
| 24897 | } | 27566 | } |
| 24898 | | 27567 | |
| 24899 | const RoundMode = packed struct(u5) { | 27568 | fn airRound(self: *CodeGen, inst: Air.Inst.Index, mode: bits.RoundMode) !void { |
| 24900 | mode: enum(u4) { | | |
| 24901 | /// Round to nearest (even) | | |
| 24902 | nearest = 0b0_00, | | |
| 24903 | /// Round down (toward -∞) | | |
| 24904 | down = 0b0_01, | | |
| 24905 | /// Round up (toward +∞) | | |
| 24906 | up = 0b0_10, | | |
| 24907 | /// Round toward zero (truncate) | | |
| 24908 | zero = 0b0_11, | | |
| 24909 | /// Use current rounding mode of MXCSR.RC | | |
| 24910 | mxcsr = 0b1_00, | | |
| 24911 | }, | | |
| 24912 | precision: enum(u1) { | | |
| 24913 | normal = 0b0, | | |
| 24914 | inexact = 0b1, | | |
| 24915 | } = .normal, | | |
| 24916 | }; | | |
| 24917 | | | |
| 24918 | fn airRound(self: *CodeGen, inst: Air.Inst.Index, mode: RoundMode) !void { | | |
| 24919 | const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op; | 27569 | const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op; |
| 24920 | const ty = self.typeOf(un_op); | 27570 | const ty = self.typeOf(un_op); |
| 24921 | | 27571 | |
| ... | @@ -24972,7 +27622,7 @@ fn getRoundTag(self: *CodeGen, ty: Type) ?Mir.Inst.FixedTag { | ... | @@ -24972,7 +27622,7 @@ fn getRoundTag(self: *CodeGen, ty: Type) ?Mir.Inst.FixedTag { |
| 24972 | } else null; | 27622 | } else null; |
| 24973 | } | 27623 | } |
| 24974 | | 27624 | |
| 24975 | fn genRoundLibcall(self: *CodeGen, ty: Type, src_mcv: MCValue, mode: RoundMode) !MCValue { | 27625 | fn genRoundLibcall(self: *CodeGen, ty: Type, src_mcv: MCValue, mode: bits.RoundMode) !MCValue { |
| 24976 | const pt = self.pt; | 27626 | const pt = self.pt; |
| 24977 | const zcu = pt.zcu; | 27627 | const zcu = pt.zcu; |
| 24978 | if (self.getRoundTag(ty)) |_| return .none; | 27628 | if (self.getRoundTag(ty)) |_| return .none; |
| ... | @@ -24997,7 +27647,7 @@ fn genRoundLibcall(self: *CodeGen, ty: Type, src_mcv: MCValue, mode: RoundMode) | ... | @@ -24997,7 +27647,7 @@ fn genRoundLibcall(self: *CodeGen, ty: Type, src_mcv: MCValue, mode: RoundMode) |
| 24997 | } }, &.{ty}, &.{src_mcv}, .{}); | 27647 | } }, &.{ty}, &.{src_mcv}, .{}); |
| 24998 | } | 27648 | } |
| 24999 | | 27649 | |
| 25000 | fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode: RoundMode) !void { | 27650 | fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode: bits.RoundMode) !void { |
| 25001 | const pt = self.pt; | 27651 | const pt = self.pt; |
| 25002 | const mir_tag = self.getRoundTag(ty) orelse { | 27652 | const mir_tag = self.getRoundTag(ty) orelse { |
| 25003 | const result = try self.genRoundLibcall(ty, src_mcv, mode); | 27653 | const result = try self.genRoundLibcall(ty, src_mcv, mode); |
| ... | @@ -25011,7 +27661,7 @@ fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode: | ... | @@ -25011,7 +27661,7 @@ fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode: |
| 25011 | dst_alias, | 27661 | dst_alias, |
| 25012 | dst_alias, | 27662 | dst_alias, |
| 25013 | try src_mcv.mem(self, .{ .size = .fromSize(abi_size) }), | 27663 | try src_mcv.mem(self, .{ .size = .fromSize(abi_size) }), |
| 25014 | .u(@as(u5, @bitCast(mode))), | 27664 | mode.imm(), |
| 25015 | ) else try self.asmRegisterRegisterRegisterImmediate( | 27665 | ) else try self.asmRegisterRegisterRegisterImmediate( |
| 25016 | mir_tag, | 27666 | mir_tag, |
| 25017 | dst_alias, | 27667 | dst_alias, |
| ... | @@ -25020,13 +27670,13 @@ fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode: | ... | @@ -25020,13 +27670,13 @@ fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode: |
| 25020 | src_mcv.getReg().? | 27670 | src_mcv.getReg().? |
| 25021 | else | 27671 | else |
| 25022 | try self.copyToTmpRegister(ty, src_mcv), abi_size), | 27672 | try self.copyToTmpRegister(ty, src_mcv), abi_size), |
| 25023 | .u(@as(u5, @bitCast(mode))), | 27673 | mode.imm(), |
| 25024 | ), | 27674 | ), |
| 25025 | else => if (src_mcv.isBase()) try self.asmRegisterMemoryImmediate( | 27675 | else => if (src_mcv.isBase()) try self.asmRegisterMemoryImmediate( |
| 25026 | mir_tag, | 27676 | mir_tag, |
| 25027 | dst_alias, | 27677 | dst_alias, |
| 25028 | try src_mcv.mem(self, .{ .size = .fromSize(abi_size) }), | 27678 | try src_mcv.mem(self, .{ .size = .fromSize(abi_size) }), |
| 25029 | .u(@as(u5, @bitCast(mode))), | 27679 | mode.imm(), |
| 25030 | ) else try self.asmRegisterRegisterImmediate( | 27680 | ) else try self.asmRegisterRegisterImmediate( |
| 25031 | mir_tag, | 27681 | mir_tag, |
| 25032 | dst_alias, | 27682 | dst_alias, |
| ... | @@ -25034,7 +27684,7 @@ fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode: | ... | @@ -25034,7 +27684,7 @@ fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode: |
| 25034 | src_mcv.getReg().? | 27684 | src_mcv.getReg().? |
| 25035 | else | 27685 | else |
| 25036 | try self.copyToTmpRegister(ty, src_mcv), abi_size), | 27686 | try self.copyToTmpRegister(ty, src_mcv), abi_size), |
| 25037 | .u(@as(u5, @bitCast(mode))), | 27687 | mode.imm(), |
| 25038 | ), | 27688 | ), |
| 25039 | } | 27689 | } |
| 25040 | } | 27690 | } |
| ... | @@ -25294,7 +27944,7 @@ fn airSqrt(self: *CodeGen, inst: Air.Inst.Index) !void { | ... | @@ -25294,7 +27944,7 @@ fn airSqrt(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 25294 | .{ .v_, .cvtps2ph }, | 27944 | .{ .v_, .cvtps2ph }, |
| 25295 | dst_reg, | 27945 | dst_reg, |
| 25296 | dst_reg, | 27946 | dst_reg, |
| 25297 | .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))), | 27947 | bits.RoundMode.imm(.{}), |
| 25298 | ); | 27948 | ); |
| 25299 | break :result dst_mcv; | 27949 | break :result dst_mcv; |
| 25300 | }, | 27950 | }, |
| ... | @@ -25324,7 +27974,7 @@ fn airSqrt(self: *CodeGen, inst: Air.Inst.Index) !void { | ... | @@ -25324,7 +27974,7 @@ fn airSqrt(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 25324 | .{ .v_, .cvtps2ph }, | 27974 | .{ .v_, .cvtps2ph }, |
| 25325 | dst_reg, | 27975 | dst_reg, |
| 25326 | dst_reg, | 27976 | dst_reg, |
| 25327 | .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))), | 27977 | bits.RoundMode.imm(.{}), |
| 25328 | ); | 27978 | ); |
| 25329 | break :result dst_mcv; | 27979 | break :result dst_mcv; |
| 25330 | }, | 27980 | }, |
| ... | @@ -25349,7 +27999,7 @@ fn airSqrt(self: *CodeGen, inst: Air.Inst.Index) !void { | ... | @@ -25349,7 +27999,7 @@ fn airSqrt(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 25349 | .{ .v_, .cvtps2ph }, | 27999 | .{ .v_, .cvtps2ph }, |
| 25350 | dst_reg, | 28000 | dst_reg, |
| 25351 | wide_reg, | 28001 | wide_reg, |
| 25352 | .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))), | 28002 | bits.RoundMode.imm(.{}), |
| 25353 | ); | 28003 | ); |
| 25354 | break :result dst_mcv; | 28004 | break :result dst_mcv; |
| 25355 | }, | 28005 | }, |
| ... | @@ -27613,7 +30263,7 @@ fn genBinOp( | ... | @@ -27613,7 +30263,7 @@ fn genBinOp( |
| 27613 | .{ .v_, .cvtps2ph }, | 30263 | .{ .v_, .cvtps2ph }, |
| 27614 | dst_reg, | 30264 | dst_reg, |
| 27615 | dst_reg, | 30265 | dst_reg, |
| 27616 | .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))), | 30266 | bits.RoundMode.imm(.{}), |
| 27617 | ); | 30267 | ); |
| 27618 | break :adjusted .{ .register = dst_reg }; | 30268 | break :adjusted .{ .register = dst_reg }; |
| 27619 | }, | 30269 | }, |
| ... | @@ -28086,14 +30736,14 @@ fn genBinOp( | ... | @@ -28086,14 +30736,14 @@ fn genBinOp( |
| 28086 | dst_reg, | 30736 | dst_reg, |
| 28087 | dst_reg, | 30737 | dst_reg, |
| 28088 | dst_reg, | 30738 | dst_reg, |
| 28089 | .u(@as(u5, @bitCast(RoundMode{ | 30739 | bits.RoundMode.imm(.{ |
| 28090 | .mode = switch (air_tag) { | 30740 | .mode = switch (air_tag) { |
| 28091 | .div_trunc => .zero, | 30741 | .div_trunc => .zero, |
| 28092 | .div_floor => .down, | 30742 | .div_floor => .down, |
| 28093 | else => unreachable, | 30743 | else => unreachable, |
| 28094 | }, | 30744 | }, |
| 28095 | .precision = .inexact, | 30745 | .precision = .inexact, |
| 28096 | }))), | 30746 | }), |
| 28097 | ), | 30747 | ), |
| 28098 | else => {}, | 30748 | else => {}, |
| 28099 | } | 30749 | } |
| ... | @@ -28101,7 +30751,7 @@ fn genBinOp( | ... | @@ -28101,7 +30751,7 @@ fn genBinOp( |
| 28101 | .{ .v_, .cvtps2ph }, | 30751 | .{ .v_, .cvtps2ph }, |
| 28102 | dst_reg, | 30752 | dst_reg, |
| 28103 | dst_reg, | 30753 | dst_reg, |
| 28104 | .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))), | 30754 | bits.RoundMode.imm(.{}), |
| 28105 | ); | 30755 | ); |
| 28106 | return dst_mcv; | 30756 | return dst_mcv; |
| 28107 | }, | 30757 | }, |
| ... | @@ -28529,7 +31179,7 @@ fn genBinOp( | ... | @@ -28529,7 +31179,7 @@ fn genBinOp( |
| 28529 | .{ .v_, .cvtps2ph }, | 31179 | .{ .v_, .cvtps2ph }, |
| 28530 | dst_reg, | 31180 | dst_reg, |
| 28531 | dst_reg, | 31181 | dst_reg, |
| 28532 | .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))), | 31182 | bits.RoundMode.imm(.{}), |
| 28533 | ); | 31183 | ); |
| 28534 | return dst_mcv; | 31184 | return dst_mcv; |
| 28535 | }, | 31185 | }, |
| ... | @@ -28581,7 +31231,7 @@ fn genBinOp( | ... | @@ -28581,7 +31231,7 @@ fn genBinOp( |
| 28581 | .{ .v_, .cvtps2ph }, | 31231 | .{ .v_, .cvtps2ph }, |
| 28582 | dst_reg, | 31232 | dst_reg, |
| 28583 | dst_reg, | 31233 | dst_reg, |
| 28584 | .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))), | 31234 | bits.RoundMode.imm(.{}), |
| 28585 | ); | 31235 | ); |
| 28586 | return dst_mcv; | 31236 | return dst_mcv; |
| 28587 | }, | 31237 | }, |
| ... | @@ -28624,7 +31274,7 @@ fn genBinOp( | ... | @@ -28624,7 +31274,7 @@ fn genBinOp( |
| 28624 | .{ .v_, .cvtps2ph }, | 31274 | .{ .v_, .cvtps2ph }, |
| 28625 | dst_reg, | 31275 | dst_reg, |
| 28626 | dst_reg, | 31276 | dst_reg, |
| 28627 | .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))), | 31277 | bits.RoundMode.imm(.{}), |
| 28628 | ); | 31278 | ); |
| 28629 | return dst_mcv; | 31279 | return dst_mcv; |
| 28630 | }, | 31280 | }, |
| ... | @@ -28667,7 +31317,7 @@ fn genBinOp( | ... | @@ -28667,7 +31317,7 @@ fn genBinOp( |
| 28667 | .{ .v_, .cvtps2ph }, | 31317 | .{ .v_, .cvtps2ph }, |
| 28668 | dst_reg, | 31318 | dst_reg, |
| 28669 | dst_reg.to256(), | 31319 | dst_reg.to256(), |
| 28670 | .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))), | 31320 | bits.RoundMode.imm(.{}), |
| 28671 | ); | 31321 | ); |
| 28672 | return dst_mcv; | 31322 | return dst_mcv; |
| 28673 | }, | 31323 | }, |
| ... | @@ -28932,7 +31582,7 @@ fn genBinOp( | ... | @@ -28932,7 +31582,7 @@ fn genBinOp( |
| 28932 | mask_reg, | 31582 | mask_reg, |
| 28933 | rhs_copy_reg, | 31583 | rhs_copy_reg, |
| 28934 | rhs_copy_reg, | 31584 | rhs_copy_reg, |
| 28935 | .u(3), // unord | 31585 | bits.VexFloatPredicate.imm(.unord), |
| 28936 | ); | 31586 | ); |
| 28937 | try self.asmRegisterRegisterRegisterRegister( | 31587 | try self.asmRegisterRegisterRegisterRegister( |
| 28938 | @as(?Mir.Inst.FixedTag, switch (lhs_ty.zigTypeTag(zcu)) { | 31588 | @as(?Mir.Inst.FixedTag, switch (lhs_ty.zigTypeTag(zcu)) { |
| ... | @@ -28999,7 +31649,7 @@ fn genBinOp( | ... | @@ -28999,7 +31649,7 @@ fn genBinOp( |
| 28999 | }), | 31649 | }), |
| 29000 | mask_reg, | 31650 | mask_reg, |
| 29001 | mask_reg, | 31651 | mask_reg, |
| 29002 | .u(if (has_blend) 3 else 7), // unord, ord | 31652 | bits.SseFloatPredicate.imm(if (has_blend) .unord else .ord), |
| 29003 | ); | 31653 | ); |
| 29004 | if (has_blend) try self.asmRegisterRegisterRegister( | 31654 | if (has_blend) try self.asmRegisterRegisterRegister( |
| 29005 | @as(?Mir.Inst.FixedTag, switch (lhs_ty.zigTypeTag(zcu)) { | 31655 | @as(?Mir.Inst.FixedTag, switch (lhs_ty.zigTypeTag(zcu)) { |
| ... | @@ -29836,24 +32486,10 @@ fn airArg(self: *CodeGen, inst: Air.Inst.Index) !void { | ... | @@ -29836,24 +32486,10 @@ fn airArg(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 29836 | return self.finishAir(inst, result, .{ .none, .none, .none }); | 32486 | return self.finishAir(inst, result, .{ .none, .none, .none }); |
| 29837 | } | 32487 | } |
| 29838 | | 32488 | |
| 29839 | fn airDbgArg(self: *CodeGen, inst: Air.Inst.Index) !void { | | |
| 29840 | // skip zero-bit arguments as they don't have a corresponding arg instruction | | |
| 29841 | var arg_index = self.arg_index; | | |
| 29842 | while (self.args[arg_index] == .none) arg_index += 1; | | |
| 29843 | self.arg_index = arg_index + 1; | | |
| 29844 | | | |
| 29845 | if (self.debug_output != .none) { | | |
| 29846 | const name = self.air.instructions.items(.data)[@intFromEnum(inst)].arg.name; | | |
| 29847 | if (name != .none) try self.genLocalDebugInfo(inst, self.getResolvedInstValue(inst).short); | | |
| 29848 | if (self.liveness.isUnused(inst)) try self.processDeath(inst); | | |
| 29849 | } | | |
| 29850 | for (self.args[self.arg_index..]) |arg| { | | |
| 29851 | if (arg != .none) break; | | |
| 29852 | } else try self.airDbgVarArgs(); | | |
| 29853 | } | | |
| 29854 | | | |
| 29855 | fn airDbgVarArgs(self: *CodeGen) !void { | 32489 | fn airDbgVarArgs(self: *CodeGen) !void { |
| 29856 | if (self.pt.zcu.typeToFunc(self.fn_type).?.is_var_args) try self.asmPseudo(.pseudo_dbg_var_args_none); | 32490 | if (self.debug_output == .none) return; |
| | 32491 | if (!self.pt.zcu.typeToFunc(self.fn_type).?.is_var_args) return; |
| | 32492 | try self.asmPseudo(.pseudo_dbg_var_args_none); |
| 29857 | } | 32493 | } |
| 29858 | | 32494 | |
| 29859 | fn genLocalDebugInfo( | 32495 | fn genLocalDebugInfo( |
| ... | @@ -30909,44 +33545,6 @@ fn genTry( | ... | @@ -30909,44 +33545,6 @@ fn genTry( |
| 30909 | return result; | 33545 | return result; |
| 30910 | } | 33546 | } |
| 30911 | | 33547 | |
| 30912 | fn airDbgStmt(self: *CodeGen, inst: Air.Inst.Index) !void { | | |
| 30913 | const dbg_stmt = self.air.instructions.items(.data)[@intFromEnum(inst)].dbg_stmt; | | |
| 30914 | _ = try self.addInst(.{ | | |
| 30915 | .tag = .pseudo, | | |
| 30916 | .ops = .pseudo_dbg_line_stmt_line_column, | | |
| 30917 | .data = .{ .line_column = .{ | | |
| 30918 | .line = dbg_stmt.line, | | |
| 30919 | .column = dbg_stmt.column, | | |
| 30920 | } }, | | |
| 30921 | }); | | |
| 30922 | } | | |
| 30923 | | | |
| 30924 | fn airDbgEmptyStmt(self: *CodeGen) !void { | | |
| 30925 | if (self.mir_instructions.len > 0 and | | |
| 30926 | self.mir_instructions.items(.ops)[self.mir_instructions.len - 1] == .pseudo_dbg_line_stmt_line_column) | | |
| 30927 | self.mir_instructions.items(.ops)[self.mir_instructions.len - 1] = .pseudo_dbg_line_line_column; | | |
| 30928 | try self.asmOpOnly(.{ ._, .nop }); | | |
| 30929 | } | | |
| 30930 | | | |
| 30931 | fn airDbgInlineBlock(self: *CodeGen, inst: Air.Inst.Index) !void { | | |
| 30932 | const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl; | | |
| 30933 | const extra = self.air.extraData(Air.DbgInlineBlock, ty_pl.payload); | | |
| 30934 | const old_inline_func = self.inline_func; | | |
| 30935 | defer self.inline_func = old_inline_func; | | |
| 30936 | self.inline_func = extra.data.func; | | |
| 30937 | _ = try self.addInst(.{ | | |
| 30938 | .tag = .pseudo, | | |
| 30939 | .ops = .pseudo_dbg_enter_inline_func, | | |
| 30940 | .data = .{ .func = extra.data.func }, | | |
| 30941 | }); | | |
| 30942 | try self.lowerBlock(inst, @ptrCast(self.air.extra[extra.end..][0..extra.data.body_len])); | | |
| 30943 | _ = try self.addInst(.{ | | |
| 30944 | .tag = .pseudo, | | |
| 30945 | .ops = .pseudo_dbg_leave_inline_func, | | |
| 30946 | .data = .{ .func = old_inline_func }, | | |
| 30947 | }); | | |
| 30948 | } | | |
| 30949 | | | |
| 30950 | fn airDbgVar(self: *CodeGen, inst: Air.Inst.Index) !void { | 33548 | fn airDbgVar(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 30951 | const pl_op = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op; | 33549 | const pl_op = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op; |
| 30952 | try self.genLocalDebugInfo(inst, try self.resolveInst(pl_op.operand)); | 33550 | try self.genLocalDebugInfo(inst, try self.resolveInst(pl_op.operand)); |
| ... | @@ -31392,14 +33990,6 @@ fn airLoop(self: *CodeGen, inst: Air.Inst.Index) !void { | ... | @@ -31392,14 +33990,6 @@ fn airLoop(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 31392 | try self.genBodyBlock(body); | 33990 | try self.genBodyBlock(body); |
| 31393 | } | 33991 | } |
| 31394 | | 33992 | |
| 31395 | fn airBlock(self: *CodeGen, inst: Air.Inst.Index) !void { | | |
| 31396 | const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl; | | |
| 31397 | const extra = self.air.extraData(Air.Block, ty_pl.payload); | | |
| 31398 | try self.asmPseudo(.pseudo_dbg_enter_block_none); | | |
| 31399 | try self.lowerBlock(inst, @ptrCast(self.air.extra[extra.end..][0..extra.data.body_len])); | | |
| 31400 | try self.asmPseudo(.pseudo_dbg_leave_block_none); | | |
| 31401 | } | | |
| 31402 | | | |
| 31403 | fn lowerBlock(self: *CodeGen, inst: Air.Inst.Index, body: []const Air.Inst.Index) !void { | 33993 | fn lowerBlock(self: *CodeGen, inst: Air.Inst.Index, body: []const Air.Inst.Index) !void { |
| 31404 | // A block is a setup to be able to jump to the end. | 33994 | // A block is a setup to be able to jump to the end. |
| 31405 | const inst_tracking_i = self.inst_tracking.count(); | 33995 | const inst_tracking_i = self.inst_tracking.count(); |
| ... | @@ -32653,10 +35243,21 @@ const MoveStrategy = union(enum) { | ... | @@ -32653,10 +35243,21 @@ const MoveStrategy = union(enum) { |
| 32653 | else => dst_reg, | 35243 | else => dst_reg, |
| 32654 | .lea => if (dst_reg.bitSize() >= 32) dst_reg else dst_reg.to32(), | 35244 | .lea => if (dst_reg.bitSize() >= 32) dst_reg else dst_reg.to32(), |
| 32655 | }, src_mem), | 35245 | }, src_mem), |
| 32656 | .x87_load_store => { | 35246 | .x87_load_store => if (dst_reg != .st0 and self.register_manager.isKnownRegFree(.st7)) { |
| | 35247 | try self.asmMemory(.{ .f_, .ld }, src_mem); |
| | 35248 | switch (dst_reg) { |
| | 35249 | .st1, .st2, .st3, .st4, .st5, .st6 => try self.asmRegister(.{ .f_p, .st }, @enumFromInt(@intFromEnum(dst_reg) + 1)), |
| | 35250 | .st7 => try self.asmOpOnly(.{ .f_cstp, .in }), |
| | 35251 | else => unreachable, |
| | 35252 | } |
| | 35253 | } else { |
| | 35254 | try self.asmRegister(.{ .f_p, .st }, dst_reg); |
| 32657 | try self.asmMemory(.{ .f_, .ld }, src_mem); | 35255 | try self.asmMemory(.{ .f_, .ld }, src_mem); |
| 32658 | assert(dst_reg != .st7); | 35256 | switch (dst_reg) { |
| 32659 | try self.asmRegister(.{ .f_p, .st }, @enumFromInt(@intFromEnum(dst_reg) + 1)); | 35257 | .st0 => {}, |
| | 35258 | .st1, .st2, .st3, .st4, .st5, .st6, .st7 => try self.asmRegister(.{ .f_, .xch }, dst_reg), |
| | 35259 | else => unreachable, |
| | 35260 | } |
| 32660 | }, | 35261 | }, |
| 32661 | .insert_extract => |ie| if (ie.insert[0] != .p_w or self.hasFeature(.sse2)) | 35262 | .insert_extract => |ie| if (ie.insert[0] != .p_w or self.hasFeature(.sse2)) |
| 32662 | try self.asmRegisterMemoryImmediate(ie.insert, dst_reg, src_mem, .u(0)) | 35263 | try self.asmRegisterMemoryImmediate(ie.insert, dst_reg, src_mem, .u(0)) |
| ... | @@ -32688,9 +35289,22 @@ const MoveStrategy = union(enum) { | ... | @@ -32688,9 +35289,22 @@ const MoveStrategy = union(enum) { |
| 32688 | pub fn write(strat: MoveStrategy, self: *CodeGen, dst_mem: Memory, src_reg: Register) !void { | 35289 | pub fn write(strat: MoveStrategy, self: *CodeGen, dst_mem: Memory, src_reg: Register) !void { |
| 32689 | switch (strat) { | 35290 | switch (strat) { |
| 32690 | .move => |tag| try self.asmMemoryRegister(tag, dst_mem, src_reg), | 35291 | .move => |tag| try self.asmMemoryRegister(tag, dst_mem, src_reg), |
| 32691 | .x87_load_store => { | 35292 | .x87_load_store => if (self.register_manager.isKnownRegFree(.st7)) { |
| 32692 | try self.asmRegister(.{ .f_, .ld }, src_reg); | 35293 | try self.asmRegister(.{ .f_, .ld }, src_reg); |
| 32693 | try self.asmMemory(.{ .f_p, .st }, dst_mem); | 35294 | try self.asmMemory(.{ .f_p, .st }, dst_mem); |
| | 35295 | } else { |
| | 35296 | switch (src_reg) { |
| | 35297 | .st0 => {}, |
| | 35298 | .st1, .st2, .st3, .st4, .st5, .st6, .st7 => try self.asmRegister(.{ .f_, .xch }, src_reg), |
| | 35299 | else => unreachable, |
| | 35300 | } |
| | 35301 | try self.asmMemory(.{ .f_p, .st }, dst_mem); |
| | 35302 | try self.asmMemory(.{ .f_, .ld }, dst_mem); |
| | 35303 | switch (src_reg) { |
| | 35304 | .st0 => {}, |
| | 35305 | .st1, .st2, .st3, .st4, .st5, .st6, .st7 => try self.asmRegister(.{ .f_, .xch }, src_reg), |
| | 35306 | else => unreachable, |
| | 35307 | } |
| 32694 | }, | 35308 | }, |
| 32695 | .insert_extract, .vex_insert_extract => |ie| if (ie.extract[0] != .p_w or self.hasFeature(.sse4_1)) | 35309 | .insert_extract, .vex_insert_extract => |ie| if (ie.extract[0] != .p_w or self.hasFeature(.sse4_1)) |
| 32696 | try self.asmMemoryRegisterImmediate(ie.extract, dst_mem, src_reg, .u(0)) | 35310 | try self.asmMemoryRegisterImmediate(ie.extract, dst_mem, src_reg, .u(0)) |
| ... | @@ -33247,10 +35861,25 @@ fn genSetReg( | ... | @@ -33247,10 +35861,25 @@ fn genSetReg( |
| 33247 | .general_purpose, .segment => unreachable, | 35861 | .general_purpose, .segment => unreachable, |
| 33248 | .x87 => switch (src_reg) { | 35862 | .x87 => switch (src_reg) { |
| 33249 | .st0 => try self.asmRegister(.{ .f_, .st }, dst_reg), | 35863 | .st0 => try self.asmRegister(.{ .f_, .st }, dst_reg), |
| 33250 | .st1, .st2, .st3, .st4, .st5, .st6 => { | 35864 | .st1, .st2, .st3, .st4, .st5, .st6 => switch (dst_reg) { |
| 33251 | try self.asmRegister(.{ .f_, .ld }, src_reg); | 35865 | .st0 => { |
| 33252 | assert(dst_reg != .st7); | 35866 | try self.asmRegister(.{ .f_p, .st }, .st0); |
| 33253 | try self.asmRegister(.{ .f_p, .st }, @enumFromInt(@intFromEnum(dst_reg) + 1)); | 35867 | try self.asmRegister(.{ .f_, .ld }, @enumFromInt(@intFromEnum(src_reg) - 1)); |
| | 35868 | }, |
| | 35869 | .st2, .st3, .st4, .st5, .st6 => if (self.register_manager.isKnownRegFree(.st7)) { |
| | 35870 | try self.asmRegister(.{ .f_, .ld }, src_reg); |
| | 35871 | try self.asmRegister(.{ .f_p, .st }, @enumFromInt(@intFromEnum(dst_reg) + 1)); |
| | 35872 | } else { |
| | 35873 | try self.asmRegister(.{ .f_, .xch }, src_reg); |
| | 35874 | try self.asmRegister(.{ .f_, .xch }, dst_reg); |
| | 35875 | try self.asmRegister(.{ .f_, .xch }, src_reg); |
| | 35876 | }, |
| | 35877 | .st7 => { |
| | 35878 | if (!self.register_manager.isKnownRegFree(.st7)) try self.asmRegister(.{ .f_, .free }, dst_reg); |
| | 35879 | try self.asmRegister(.{ .f_, .ld }, src_reg); |
| | 35880 | try self.asmOpOnly(.{ .f_cstp, .in }); |
| | 35881 | }, |
| | 35882 | else => unreachable, |
| 33254 | }, | 35883 | }, |
| 33255 | else => unreachable, | 35884 | else => unreachable, |
| 33256 | }, | 35885 | }, |
| ... | @@ -33276,10 +35905,14 @@ fn genSetReg( | ... | @@ -33276,10 +35905,14 @@ fn genSetReg( |
| 33276 | .base = .{ .frame = frame_index }, | 35905 | .base = .{ .frame = frame_index }, |
| 33277 | .mod = .{ .rm = .{ .size = .fromSize(abi_size) } }, | 35906 | .mod = .{ .rm = .{ .size = .fromSize(abi_size) } }, |
| 33278 | }, registerAlias(src_reg, abi_size)); | 35907 | }, registerAlias(src_reg, abi_size)); |
| | 35908 | switch (frame_size) { |
| | 35909 | else => {}, |
| | 35910 | 8 => try self.asmRegisterRegister(.{ ._ps, .xor }, dst_reg.to128(), dst_reg.to128()), |
| | 35911 | } |
| 33279 | try self.asmRegisterMemory(switch (frame_size) { | 35912 | try self.asmRegisterMemory(switch (frame_size) { |
| 33280 | 4 => .{ ._ss, .mov }, | 35913 | 4 => .{ ._ss, .mov }, |
| 33281 | 8 => .{ ._ps, .movl }, | 35914 | 8 => .{ ._ps, .movl }, |
| 33282 | 16 => .{ ._ps, .mov }, | 35915 | 16 => .{ ._ps, .mova }, |
| 33283 | else => unreachable, | 35916 | else => unreachable, |
| 33284 | }, dst_reg.to128(), .{ | 35917 | }, dst_reg.to128(), .{ |
| 33285 | .base = .{ .frame = frame_index }, | 35918 | .base = .{ .frame = frame_index }, |
| ... | @@ -33292,7 +35925,26 @@ fn genSetReg( | ... | @@ -33292,7 +35925,26 @@ fn genSetReg( |
| 33292 | .{ .register = try self.copyToTmpRegister(ty, src_mcv) }, | 35925 | .{ .register = try self.copyToTmpRegister(ty, src_mcv) }, |
| 33293 | opts, | 35926 | opts, |
| 33294 | ), | 35927 | ), |
| 33295 | .x87, .mmx, .ip, .cr, .dr => unreachable, | 35928 | .x87 => { |
| | 35929 | const frame_index = try self.allocFrameIndex(.init(.{ |
| | 35930 | .size = 16, |
| | 35931 | .alignment = .@"16", |
| | 35932 | })); |
| | 35933 | try MoveStrategy.write(.x87_load_store, self, .{ |
| | 35934 | .base = .{ .frame = frame_index }, |
| | 35935 | .mod = .{ .rm = .{ .size = .tbyte } }, |
| | 35936 | }, src_reg); |
| | 35937 | try self.asmRegisterMemory(if (self.hasFeature(.avx)) |
| | 35938 | .{ .v_dqa, .mov } |
| | 35939 | else if (self.hasFeature(.sse2)) |
| | 35940 | .{ ._dqa, .mov } |
| | 35941 | else |
| | 35942 | .{ ._ps, .mova }, dst_reg.to128(), .{ |
| | 35943 | .base = .{ .frame = frame_index }, |
| | 35944 | .mod = .{ .rm = .{ .size = .xword } }, |
| | 35945 | }); |
| | 35946 | }, |
| | 35947 | .mmx, .ip, .cr, .dr => unreachable, |
| 33296 | .sse => try self.asmRegisterRegister( | 35948 | .sse => try self.asmRegisterRegister( |
| 33297 | @as(?Mir.Inst.FixedTag, switch (ty.scalarType(zcu).zigTypeTag(zcu)) { | 35949 | @as(?Mir.Inst.FixedTag, switch (ty.scalarType(zcu).zigTypeTag(zcu)) { |
| 33298 | else => switch (abi_size) { | 35950 | else => switch (abi_size) { |
| ... | @@ -37793,7 +40445,7 @@ fn resolveCallingConventionValues( | ... | @@ -37793,7 +40445,7 @@ fn resolveCallingConventionValues( |
| 37793 | else if (ret_gpr.len >= 2 and ret_ty.isSliceAtRuntime(zcu)) | 40445 | else if (ret_gpr.len >= 2 and ret_ty.isSliceAtRuntime(zcu)) |
| 37794 | break :return_value .init(.{ .register_pair = ret_gpr[0..2].* }), | 40446 | break :return_value .init(.{ .register_pair = ret_gpr[0..2].* }), |
| 37795 | .segment, .mmx, .ip, .cr, .dr => unreachable, | 40447 | .segment, .mmx, .ip, .cr, .dr => unreachable, |
| 37796 | .x87 => break :return_value .init(.{ .register = .st0 }), | 40448 | .x87 => if (ret_size <= 16) break :return_value .init(.{ .register = .st0 }), |
| 37797 | .sse => if (ret_size <= self.vectorSize(.float)) break :return_value .init(.{ | 40449 | .sse => if (ret_size <= self.vectorSize(.float)) break :return_value .init(.{ |
| 37798 | .register = registerAlias(abi.getCAbiSseReturnRegs(cc)[0], @max(ret_size, 16)), | 40450 | .register = registerAlias(abi.getCAbiSseReturnRegs(cc)[0], @max(ret_size, 16)), |
| 37799 | }), | 40451 | }), |
| ... | @@ -37828,7 +40480,7 @@ fn resolveCallingConventionValues( | ... | @@ -37828,7 +40480,7 @@ fn resolveCallingConventionValues( |
| 37828 | continue; | 40480 | continue; |
| 37829 | }, | 40481 | }, |
| 37830 | .segment, .mmx, .ip, .cr, .dr => unreachable, | 40482 | .segment, .mmx, .ip, .cr, .dr => unreachable, |
| 37831 | .x87 => if (param_x87.len >= 1) { | 40483 | .x87 => if (param_x87.len >= 1 and param_size <= 16) { |
| 37832 | arg.* = .{ .register = param_x87[0] }; | 40484 | arg.* = .{ .register = param_x87[0] }; |
| 37833 | param_x87 = param_x87[1..]; | 40485 | param_x87 = param_x87[1..]; |
| 37834 | continue; | 40486 | continue; |
| ... | @@ -37939,10 +40591,12 @@ fn registerAlias(reg: Register, size_bytes: u32) Register { | ... | @@ -37939,10 +40591,12 @@ fn registerAlias(reg: Register, size_bytes: u32) Register { |
| 37939 | | 40591 | |
| 37940 | fn memSize(self: *CodeGen, ty: Type) Memory.Size { | 40592 | fn memSize(self: *CodeGen, ty: Type) Memory.Size { |
| 37941 | const zcu = self.pt.zcu; | 40593 | const zcu = self.pt.zcu; |
| 37942 | return switch (ty.zigTypeTag(zcu)) { | 40594 | return if (self.floatBits(ty)) |float_bits| |
| 37943 | .float => .fromBitSize(ty.floatBits(self.target.*)), | 40595 | .fromBitSize(float_bits) |
| 37944 | else => .fromSize(@intCast(ty.abiSize(zcu))), | 40596 | else if (ty.isVector(zcu) and ty.vectorLen(zcu) == 1 and self.floatBits(ty.childType(zcu)) == 80) |
| 37945 | }; | 40597 | .tbyte |
| | 40598 | else |
| | 40599 | .fromSize(@intCast(ty.abiSize(zcu))); |
| 37946 | } | 40600 | } |
| 37947 | | 40601 | |
| 37948 | fn splitType(self: *CodeGen, comptime parts_len: usize, ty: Type) ![parts_len]Type { | 40602 | fn splitType(self: *CodeGen, comptime parts_len: usize, ty: Type) ![parts_len]Type { |
| ... | @@ -39918,46 +42572,46 @@ const Select = struct { | ... | @@ -39918,46 +42572,46 @@ const Select = struct { |
| 39918 | inline .rc_mask, .mut_rc_mask, .ref_mask => |mask| temp.asMask(mask.info, s.cg), | 42572 | inline .rc_mask, .mut_rc_mask, .ref_mask => |mask| temp.asMask(mask.info, s.cg), |
| 39919 | } | 42573 | } |
| 39920 | } | 42574 | } |
| 39921 | }; | | |
| 39922 | | 42575 | |
| 39923 | fn pass(spec: TempSpec) u2 { | 42576 | fn pass(kind: Kind) u2 { |
| 39924 | return switch (spec.kind) { | 42577 | return switch (kind) { |
| 39925 | .unused => 0, | 42578 | .unused => 0, |
| 39926 | .reg => 1, | 42579 | .reg => 1, |
| 39927 | else => 2, | 42580 | else => 2, |
| 39928 | }; | 42581 | }; |
| 39929 | } | 42582 | } |
| | 42583 | }; |
| 39930 | | 42584 | |
| 39931 | fn create(spec: TempSpec, s: *Select) !Temp { | 42585 | fn create(spec: TempSpec, s: *Select) !struct { Temp, bool } { |
| 39932 | const cg = s.cg; | 42586 | const cg = s.cg; |
| 39933 | return switch (spec.kind) { | 42587 | return switch (spec.kind) { |
| 39934 | .unused => unreachable, | 42588 | .unused => unreachable, |
| 39935 | .any => try cg.tempAlloc(spec.type), | 42589 | .any => .{ try cg.tempAlloc(spec.type), true }, |
| 39936 | .cc => |cc| try cg.tempInit(spec.type, .{ .eflags = cc }), | 42590 | .cc => |cc| .{ try cg.tempInit(spec.type, .{ .eflags = cc }), true }, |
| 39937 | .ref => |ref| ref.deref(s), | 42591 | .ref => |ref| .{ ref.deref(s), false }, |
| 39938 | .reg => |reg| try cg.tempInit(spec.type, .{ .register = reg }), | 42592 | .reg => |reg| .{ try cg.tempInit(spec.type, .{ .register = reg }), true }, |
| 39939 | .rc => |rc| try cg.tempAllocReg(spec.type, regSetForRegClass(rc)), | 42593 | .rc => |rc| .{ try cg.tempAllocReg(spec.type, regSetForRegClass(rc)), true }, |
| 39940 | .mut_rc => |ref_rc| { | 42594 | .mut_rc => |ref_rc| { |
| 39941 | const temp = ref_rc.ref.deref(s); | 42595 | const temp = ref_rc.ref.deref(s); |
| 39942 | if (temp.isMut(cg)) switch (temp.tracking(cg).short) { | 42596 | if (temp.isMut(cg)) switch (temp.tracking(cg).short) { |
| 39943 | .register => |reg| if (reg.class() == ref_rc.rc) return temp, | 42597 | .register => |reg| if (reg.class() == ref_rc.rc) return .{ temp, false }, |
| 39944 | .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc.rc) return temp, | 42598 | .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc.rc) return .{ temp, false }, |
| 39945 | else => {}, | 42599 | else => {}, |
| 39946 | }; | 42600 | }; |
| 39947 | return try cg.tempAllocReg(spec.type, regSetForRegClass(ref_rc.rc)); | 42601 | return .{ try cg.tempAllocReg(spec.type, regSetForRegClass(ref_rc.rc)), true }; |
| 39948 | }, | 42602 | }, |
| 39949 | .ref_mask => |ref_mask| ref_mask.ref.deref(s), | 42603 | .ref_mask => |ref_mask| .{ ref_mask.ref.deref(s), false }, |
| 39950 | .rc_mask => |rc_mask| try cg.tempAllocReg(spec.type, regSetForRegClass(rc_mask.rc)), | 42604 | .rc_mask => |rc_mask| .{ try cg.tempAllocReg(spec.type, regSetForRegClass(rc_mask.rc)), true }, |
| 39951 | .mut_rc_mask => |ref_rc_mask| { | 42605 | .mut_rc_mask => |ref_rc_mask| { |
| 39952 | const temp = ref_rc_mask.ref.deref(s); | 42606 | const temp = ref_rc_mask.ref.deref(s); |
| 39953 | if (temp.isMut(cg)) switch (temp.tracking(cg).short) { | 42607 | if (temp.isMut(cg)) switch (temp.tracking(cg).short) { |
| 39954 | .register => |reg| if (reg.class() == ref_rc_mask.rc) return temp, | 42608 | .register => |reg| if (reg.class() == ref_rc_mask.rc) return .{ temp, false }, |
| 39955 | .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc_mask.rc) return temp, | 42609 | .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc_mask.rc) return .{ temp, false }, |
| 39956 | else => {}, | 42610 | else => {}, |
| 39957 | }; | 42611 | }; |
| 39958 | return try cg.tempAllocReg(spec.type, regSetForRegClass(ref_rc_mask.rc)); | 42612 | return .{ try cg.tempAllocReg(spec.type, regSetForRegClass(ref_rc_mask.rc)), true }; |
| 39959 | }, | 42613 | }, |
| 39960 | .mem => try cg.tempAllocMem(spec.type), | 42614 | .mem => .{ try cg.tempAllocMem(spec.type), true }, |
| 39961 | .smin_mem, .smax_mem, .umin_mem, .umax_mem => |const_info| { | 42615 | .smin_mem, .smax_mem, .umin_mem, .umax_mem => |const_info| { |
| 39962 | const pt = cg.pt; | 42616 | const pt = cg.pt; |
| 39963 | const zcu = pt.zcu; | 42617 | const zcu = pt.zcu; |
| ... | @@ -40022,13 +42676,16 @@ const Select = struct { | ... | @@ -40022,13 +42676,16 @@ const Select = struct { |
| 40022 | })).toIntern(), | 42676 | })).toIntern(), |
| 40023 | .storage = .{ .repeated_elem = res_scalar_val.toIntern() }, | 42677 | .storage = .{ .repeated_elem = res_scalar_val.toIntern() }, |
| 40024 | } })) else res_scalar_val; | 42678 | } })) else res_scalar_val; |
| 40025 | return try cg.tempMemFromValue(res_val); | 42679 | return .{ try cg.tempMemFromValue(res_val), true }; |
| 40026 | }, | 42680 | }, |
| 40027 | .symbol => |symbol| if (cg.bin_file.cast(.elf)) |elf_file| try cg.tempInit(spec.type, .{ .lea_symbol = .{ | 42681 | .symbol => |symbol| .{ try cg.tempInit(spec.type, .{ .lea_symbol = .{ |
| 40028 | .sym_index = try elf_file.getGlobalSymbol(symbol.name, symbol.lib), | 42682 | .sym_index = if (cg.bin_file.cast(.elf)) |elf_file| |
| 40029 | } }) else if (cg.bin_file.cast(.macho)) |macho_file| try cg.tempInit(spec.type, .{ .lea_symbol = .{ | 42683 | try elf_file.getGlobalSymbol(symbol.name, symbol.lib) |
| 40030 | .sym_index = try macho_file.getGlobalSymbol(symbol.name, symbol.lib), | 42684 | else if (cg.bin_file.cast(.macho)) |macho_file| |
| 40031 | } }) else cg.fail("external symbols unimplemented for {s}", .{@tagName(cg.bin_file.tag)}), | 42685 | try macho_file.getGlobalSymbol(symbol.name, symbol.lib) |
| | 42686 | else |
| | 42687 | return cg.fail("external symbols unimplemented for {s}", .{@tagName(cg.bin_file.tag)}), |
| | 42688 | } }), true }, |
| 40032 | }; | 42689 | }; |
| 40033 | } | 42690 | } |
| 40034 | }; | 42691 | }; |
| ... | @@ -40042,7 +42699,7 @@ const Select = struct { | ... | @@ -40042,7 +42699,7 @@ const Select = struct { |
| 40042 | Select.Operand, | 42699 | Select.Operand, |
| 40043 | Select.Operand, | 42700 | Select.Operand, |
| 40044 | }; | 42701 | }; |
| 40045 | const Label = enum { @"0:", @"1:", @"_" }; | 42702 | const Label = enum { @"0:", @"1:", @"2:", @"_" }; |
| 40046 | const Operand = struct { | 42703 | const Operand = struct { |
| 40047 | tag: Tag, | 42704 | tag: Tag, |
| 40048 | base: Ref.Sized = .none, | 42705 | base: Ref.Sized = .none, |
| ... | @@ -40272,6 +42929,8 @@ const Select = struct { | ... | @@ -40272,6 +42929,8 @@ const Select = struct { |
| 40272 | const @"0f": Select.Operand = .{ .tag = .forward_label, .base = .{ .ref = .tmp0, .size = .none } }; | 42929 | const @"0f": Select.Operand = .{ .tag = .forward_label, .base = .{ .ref = .tmp0, .size = .none } }; |
| 40273 | const @"1b": Select.Operand = .{ .tag = .backward_label, .base = .{ .ref = .tmp1, .size = .none } }; | 42930 | const @"1b": Select.Operand = .{ .tag = .backward_label, .base = .{ .ref = .tmp1, .size = .none } }; |
| 40274 | const @"1f": Select.Operand = .{ .tag = .forward_label, .base = .{ .ref = .tmp1, .size = .none } }; | 42931 | const @"1f": Select.Operand = .{ .tag = .forward_label, .base = .{ .ref = .tmp1, .size = .none } }; |
| | 42932 | const @"2b": Select.Operand = .{ .tag = .backward_label, .base = .{ .ref = .tmp2, .size = .none } }; |
| | 42933 | const @"2f": Select.Operand = .{ .tag = .forward_label, .base = .{ .ref = .tmp2, .size = .none } }; |
| 40275 | | 42934 | |
| 40276 | const tmp0b: Select.Operand = .{ .tag = .ref, .base = .tmp0b }; | 42935 | const tmp0b: Select.Operand = .{ .tag = .ref, .base = .tmp0b }; |
| 40277 | const tmp0w: Select.Operand = .{ .tag = .ref, .base = .tmp0w }; | 42936 | const tmp0w: Select.Operand = .{ .tag = .ref, .base = .tmp0w }; |
| ... | @@ -40390,14 +43049,24 @@ const Select = struct { | ... | @@ -40390,14 +43049,24 @@ const Select = struct { |
| 40390 | fn sia(imm: i32, base: Ref.Sized, adjust: Adjust) Select.Operand { | 43049 | fn sia(imm: i32, base: Ref.Sized, adjust: Adjust) Select.Operand { |
| 40391 | return .{ .tag = .simm, .base = base, .adjust = adjust, .imm = imm }; | 43050 | return .{ .tag = .simm, .base = base, .adjust = adjust, .imm = imm }; |
| 40392 | } | 43051 | } |
| 40393 | fn ui(imm: i32) Select.Operand { | 43052 | fn ui(imm: u32) Select.Operand { |
| 40394 | return .{ .tag = .uimm, .imm = imm }; | 43053 | return .{ .tag = .uimm, .imm = @bitCast(imm) }; |
| 40395 | } | 43054 | } |
| 40396 | fn ua(base: Ref.Sized, adjust: Adjust) Select.Operand { | 43055 | fn ua(base: Ref.Sized, adjust: Adjust) Select.Operand { |
| 40397 | return .{ .tag = .uimm, .base = base, .adjust = adjust }; | 43056 | return .{ .tag = .uimm, .base = base, .adjust = adjust }; |
| 40398 | } | 43057 | } |
| 40399 | fn uia(imm: i32, base: Ref.Sized, adjust: Adjust) Select.Operand { | 43058 | fn uia(imm: u32, base: Ref.Sized, adjust: Adjust) Select.Operand { |
| 40400 | return .{ .tag = .uimm, .base = base, .adjust = adjust, .imm = imm }; | 43059 | return .{ .tag = .uimm, .base = base, .adjust = adjust, .imm = @bitCast(imm) }; |
| | 43060 | } |
| | 43061 | |
| | 43062 | fn rm(mode: bits.RoundMode) Select.Operand { |
| | 43063 | return .{ .tag = .uimm, .imm = @intCast(mode.imm().unsigned) }; |
| | 43064 | } |
| | 43065 | fn sp(pred: bits.SseFloatPredicate) Select.Operand { |
| | 43066 | return .{ .tag = .uimm, .imm = @intCast(pred.imm().unsigned) }; |
| | 43067 | } |
| | 43068 | fn vp(pred: bits.VexFloatPredicate) Select.Operand { |
| | 43069 | return .{ .tag = .uimm, .imm = @intCast(pred.imm().unsigned) }; |
| 40401 | } | 43070 | } |
| 40402 | | 43071 | |
| 40403 | fn lea(size: Memory.Size, base: Ref) Select.Operand { | 43072 | fn lea(size: Memory.Size, base: Ref) Select.Operand { |
| ... | @@ -40705,6 +43374,7 @@ fn select( | ... | @@ -40705,6 +43374,7 @@ fn select( |
| 40705 | .ccc => cg.target.cCallingConvention().?, | 43374 | .ccc => cg.target.cCallingConvention().?, |
| 40706 | .zigcc => .auto, | 43375 | .zigcc => .auto, |
| 40707 | }; | 43376 | }; |
| | 43377 | assert(case.clobbers.eflags); |
| 40708 | const err_ret_trace_reg = if (cc == .auto and cg.pt.zcu.comp.config.any_error_tracing) err_ret_trace_reg: { | 43378 | const err_ret_trace_reg = if (cc == .auto and cg.pt.zcu.comp.config.any_error_tracing) err_ret_trace_reg: { |
| 40709 | const param_gpr = abi.getCAbiIntParamRegs(.auto); | 43379 | const param_gpr = abi.getCAbiIntParamRegs(.auto); |
| 40710 | break :err_ret_trace_reg param_gpr[param_gpr.len - 1]; | 43380 | break :err_ret_trace_reg param_gpr[param_gpr.len - 1]; |
| ... | @@ -40722,8 +43392,14 @@ fn select( | ... | @@ -40722,8 +43392,14 @@ fn select( |
| 40722 | | 43392 | |
| 40723 | @memcpy(src_slots[0..src_temps.len], src_temps); | 43393 | @memcpy(src_slots[0..src_temps.len], src_temps); |
| 40724 | std.mem.swap(Temp, &src_slots[pattern.commute[0]], &src_slots[pattern.commute[1]]); | 43394 | std.mem.swap(Temp, &src_slots[pattern.commute[0]], &src_slots[pattern.commute[1]]); |
| 40725 | for (1..3) |pass| for (tmp_slots, case.extra_temps) |*slot, spec| if (pass == spec.pass()) { | 43395 | for (dst_temps, dst_tys, case.dst_temps[0..dst_temps.len]) |*dst_temp, dst_ty, dst_kind| { |
| 40726 | slot.* = try spec.create(&s); | 43396 | if (dst_kind.pass() != 1) continue; |
| | 43397 | dst_temp.*, _ = try Select.TempSpec.create(.{ .type = dst_ty, .kind = dst_kind }, &s); |
| | 43398 | } |
| | 43399 | var tmp_owned: [tmp_slots.len]bool = @splat(false); |
| | 43400 | for (1..3) |pass| for (tmp_slots, &tmp_owned, case.extra_temps) |*slot, *owned, spec| { |
| | 43401 | if (spec.kind.pass() != pass) continue; |
| | 43402 | slot.*, owned.* = try spec.create(&s); |
| 40727 | }; | 43403 | }; |
| 40728 | | 43404 | |
| 40729 | while (true) for (pattern.src[0..src_temps.len], src_temps) |src_pattern, *src_temp| { | 43405 | while (true) for (pattern.src[0..src_temps.len], src_temps) |src_pattern, *src_temp| { |
| ... | @@ -40734,8 +43410,10 @@ fn select( | ... | @@ -40734,8 +43410,10 @@ fn select( |
| 40734 | | 43410 | |
| 40735 | if (case.clobbers.eflags) try cg.spillEflagsIfOccupied(); | 43411 | if (case.clobbers.eflags) try cg.spillEflagsIfOccupied(); |
| 40736 | | 43412 | |
| 40737 | for (dst_temps, dst_tys, case.dst_temps[0..dst_temps.len]) |*dst_temp, dst_ty, dst_kind| | 43413 | for (dst_temps, dst_tys, case.dst_temps[0..dst_temps.len]) |*dst_temp, dst_ty, dst_kind| { |
| 40738 | dst_temp.* = (try Select.TempSpec.create(.{ .type = dst_ty, .kind = dst_kind }, &s)); | 43414 | if (dst_kind.pass() != 2) continue; |
| | 43415 | dst_temp.*, _ = try Select.TempSpec.create(.{ .type = dst_ty, .kind = dst_kind }, &s); |
| | 43416 | } |
| 40739 | @memcpy(dst_slots[0..dst_temps.len], dst_temps); | 43417 | @memcpy(dst_slots[0..dst_temps.len], dst_temps); |
| 40740 | | 43418 | |
| 40741 | switch (case.each) { | 43419 | switch (case.each) { |
| ... | @@ -40765,7 +43443,7 @@ fn select( | ... | @@ -40765,7 +43443,7 @@ fn select( |
| 40765 | } | 43443 | } |
| 40766 | } | 43444 | } |
| 40767 | for (dst_temps, case.dst_temps[0..dst_temps.len]) |dst_temp, dst_kind| dst_kind.finish(dst_temp, &s); | 43445 | for (dst_temps, case.dst_temps[0..dst_temps.len]) |dst_temp, dst_kind| dst_kind.finish(dst_temp, &s); |
| 40768 | for (case.extra_temps, tmp_slots) |spec, temp| if (spec.kind != .unused) try temp.die(cg); | 43446 | for (tmp_owned, tmp_slots) |owned, temp| if (owned) try temp.die(cg); |
| 40769 | return; | 43447 | return; |
| 40770 | } | 43448 | } |
| 40771 | } | 43449 | } |