| ... | ... | @@ -1421,7 +1421,7 @@ fn asmCmovccRegisterRegister(self: *CodeGen, cc: Condition, reg1: Register, reg2 |
| 1421 | 1421 | }, |
| 1422 | 1422 | .data = .{ .rr = .{ |
| 1423 | 1423 | .fixes = switch (cc) { |
| 1424 | | else => .fromCondition(cc), |
| 1424 | else => .fromCond(cc), |
| 1425 | 1425 | .z_and_np, .nz_or_p => ._, |
| 1426 | 1426 | }, |
| 1427 | 1427 | .r1 = reg1, |
| ... | ... | @@ -1449,7 +1449,7 @@ fn asmCmovccRegisterMemory(self: *CodeGen, cc: Condition, reg: Register, m: Memo |
| 1449 | 1449 | }, |
| 1450 | 1450 | .data = .{ .rx = .{ |
| 1451 | 1451 | .fixes = switch (cc) { |
| 1452 | | else => .fromCondition(cc), |
| 1452 | else => .fromCond(cc), |
| 1453 | 1453 | .z_and_np => unreachable, |
| 1454 | 1454 | .nz_or_p => ._, |
| 1455 | 1455 | }, |
| ... | ... | @@ -1476,7 +1476,7 @@ fn asmSetccRegister(self: *CodeGen, cc: Condition, reg: Register) !void { |
| 1476 | 1476 | }, |
| 1477 | 1477 | .data = switch (cc) { |
| 1478 | 1478 | else => .{ .r = .{ |
| 1479 | | .fixes = .fromCondition(cc), |
| 1479 | .fixes = .fromCond(cc), |
| 1480 | 1480 | .r1 = reg, |
| 1481 | 1481 | } }, |
| 1482 | 1482 | .z_and_np, .nz_or_p => .{ .rr = .{ |
| ... | ... | @@ -1501,7 +1501,7 @@ fn asmSetccMemory(self: *CodeGen, cc: Condition, m: Memory) !void { |
| 1501 | 1501 | }, |
| 1502 | 1502 | .data = switch (cc) { |
| 1503 | 1503 | else => .{ .x = .{ |
| 1504 | | .fixes = .fromCondition(cc), |
| 1504 | .fixes = .fromCond(cc), |
| 1505 | 1505 | .payload = payload, |
| 1506 | 1506 | } }, |
| 1507 | 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 | 1536 | }, |
| 1537 | 1537 | .data = .{ .inst = .{ |
| 1538 | 1538 | .fixes = switch (cc) { |
| 1539 | | else => .fromCondition(cc), |
| 1539 | else => .fromCond(cc), |
| 1540 | 1540 | .z_and_np, .nz_or_p => ._, |
| 1541 | 1541 | }, |
| 1542 | 1542 | .inst = target, |
| ... | ... | @@ -2224,7 +2224,7 @@ fn gen(self: *CodeGen) InnerError!void { |
| 2224 | 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 | 2229 | try self.genBody(self.air.getMainBody()); |
| 2230 | 2230 | |
| ... | ... | @@ -2235,7 +2235,7 @@ fn gen(self: *CodeGen) InnerError!void { |
| 2235 | 2235 | break :epilogue_relocs self.epilogue_relocs.items[0..epilogue_relocs_last_index]; |
| 2236 | 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 | 2239 | const backpatch_stack_dealloc = try self.asmPlaceholder(); |
| 2240 | 2240 | const backpatch_pop_callee_preserved_regs = try self.asmPlaceholder(); |
| 2241 | 2241 | try self.asmRegister(.{ ._, .pop }, .rbp); |
| ... | ... | @@ -2354,15 +2354,15 @@ fn gen(self: *CodeGen) InnerError!void { |
| 2354 | 2354 | }); |
| 2355 | 2355 | } |
| 2356 | 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 | 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 | 2362 | // Drop them off at the rbrace. |
| 2363 | | _ = try self.addInst(.{ |
| 2363 | if (self.debug_output != .none) _ = try self.addInst(.{ |
| 2364 | 2364 | .tag = .pseudo, |
| 2365 | | .ops = .pseudo_dbg_line_stmt_line_column, |
| 2365 | .ops = .pseudo_dbg_line_line_column, |
| 2366 | 2366 | .data = .{ .line_column = .{ |
| 2367 | 2367 | .line = self.end_di_line, |
| 2368 | 2368 | .column = self.end_di_column, |
| ... | ... | @@ -2387,13 +2387,13 @@ fn checkInvariantsAfterAirInst(self: *CodeGen) void { |
| 2387 | 2387 | } |
| 2388 | 2388 | |
| 2389 | 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 | 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 | 2395 | fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2396 | | @setEvalBranchQuota(3_400); |
| 2396 | @setEvalBranchQuota(3_900); |
| 2397 | 2397 | const pt = cg.pt; |
| 2398 | 2398 | const zcu = pt.zcu; |
| 2399 | 2399 | const ip = &zcu.intern_pool; |
| ... | ... | @@ -2543,7 +2543,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2543 | 2543 | .reduce_optimized => try cg.airReduce(inst), |
| 2544 | 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 | 2560 | .ptr_add => |air_tag| if (use_old) try cg.airPtrArithmetic(inst, air_tag) else { |
| 2548 | 2561 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; |
| 2549 | 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 | 2805 | } |
| 2793 | 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 | 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 | 2810 | var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs }); |
| 2799 | 2811 | var res: [1]Temp = undefined; |
| 2800 | 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 | 4508 | }, |
| 4497 | 4509 | .extra_temps = .{ |
| 4498 | 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 | 4512 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 4501 | 4513 | .unused, |
| 4502 | 4514 | .unused, |
| ... | ... | @@ -4633,7 +4645,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4633 | 4645 | }, |
| 4634 | 4646 | .extra_temps = .{ |
| 4635 | 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 | 4649 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 4638 | 4650 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 4639 | 4651 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| ... | ... | @@ -4953,7 +4965,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4953 | 4965 | }, |
| 4954 | 4966 | .extra_temps = .{ |
| 4955 | 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 | 4969 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 4958 | 4970 | .unused, |
| 4959 | 4971 | .unused, |
| ... | ... | @@ -4984,7 +4996,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4984 | 4996 | }, |
| 4985 | 4997 | .extra_temps = .{ |
| 4986 | 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 | 5000 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 4989 | 5001 | .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } }, |
| 4990 | 5002 | .unused, |
| ... | ... | @@ -5016,7 +5028,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5016 | 5028 | }, |
| 5017 | 5029 | .extra_temps = .{ |
| 5018 | 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 | 5032 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| 5021 | 5033 | .unused, |
| 5022 | 5034 | .unused, |
| ... | ... | @@ -5045,7 +5057,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5045 | 5057 | }, |
| 5046 | 5058 | .extra_temps = .{ |
| 5047 | 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 | 5061 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| 5050 | 5062 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| 5051 | 5063 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| ... | ... | @@ -5081,7 +5093,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5081 | 5093 | }, |
| 5082 | 5094 | .extra_temps = .{ |
| 5083 | 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 | 5097 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 5086 | 5098 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 5087 | 5099 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| ... | ... | @@ -5117,7 +5129,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5117 | 5129 | }, |
| 5118 | 5130 | .extra_temps = .{ |
| 5119 | 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 | 5133 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 5122 | 5134 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 5123 | 5135 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| ... | ... | @@ -5359,255 +5371,173 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5359 | 5371 | .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ }, |
| 5360 | 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 } }, |
| 5392 | | .patterns = &.{ |
| 5393 | | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5394 | | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 5395 | | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5375 | .required_features = .{ .f16c, null, null, null }, |
| 5376 | .src_constraints = .{ |
| 5377 | .{ .scalar_float = .{ .of = .word, .is = .word } }, |
| 5378 | .{ .scalar_float = .{ .of = .word, .is = .word } }, |
| 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 | 5380 | .patterns = &.{ |
| 5408 | | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5381 | .{ .src = .{ .to_sse, .to_sse } }, |
| 5409 | 5382 | }, |
| 5410 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 5411 | | .clobbers = .{ .eflags = true }, |
| 5412 | | .each = .{ .once = &.{ |
| 5413 | | .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ }, |
| 5414 | | .{ ._, ._ae, .cmov, .dst0d, .src1d, ._, ._ }, |
| 5415 | | } }, |
| 5416 | | }, .{ |
| 5417 | | .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte } }, |
| 5418 | | .patterns = &.{ |
| 5419 | | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5420 | | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 5421 | | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5383 | .extra_temps = .{ |
| 5384 | .{ .type = .f16, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } }, |
| 5385 | .{ .type = .f16, .kind = .{ .rc = .sse } }, |
| 5386 | .unused, |
| 5387 | .unused, |
| 5388 | .unused, |
| 5389 | .unused, |
| 5390 | .unused, |
| 5391 | .unused, |
| 5392 | .unused, |
| 5422 | 5393 | }, |
| 5423 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 5424 | | .clobbers = .{ .eflags = true }, |
| 5394 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 5425 | 5395 | .each = .{ .once = &.{ |
| 5426 | | .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ }, |
| 5427 | | .{ ._, ._nae, .j, .@"0f", ._, ._, ._ }, |
| 5428 | | .{ ._, ._, .mov, .dst0b, .src1b, ._, ._ }, |
| 5396 | .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, |
| 5397 | .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ }, |
| 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 }, |
| 5432 | | .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word } }, |
| 5433 | | .patterns = &.{ |
| 5434 | | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5435 | | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 5436 | | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5404 | .required_features = .{ .sse, null, null, null }, |
| 5405 | .src_constraints = .{ |
| 5406 | .{ .scalar_float = .{ .of = .word, .is = .word } }, |
| 5407 | .{ .scalar_float = .{ .of = .word, .is = .word } }, |
| 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 | 5409 | .patterns = &.{ |
| 5447 | | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5448 | | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 5449 | | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5410 | .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } }, |
| 5450 | 5411 | }, |
| 5451 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 5452 | | .clobbers = .{ .eflags = true }, |
| 5453 | | .each = .{ .once = &.{ |
| 5454 | | .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ }, |
| 5455 | | .{ ._, ._nge, .j, .@"0f", ._, ._, ._ }, |
| 5456 | | .{ ._, ._, .mov, .dst0w, .src1w, ._, ._ }, |
| 5457 | | } }, |
| 5458 | | }, .{ |
| 5459 | | .required_features = .{ .cmov, null, null, null }, |
| 5460 | | .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word } }, |
| 5461 | | .patterns = &.{ |
| 5462 | | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5463 | | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 5464 | | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5412 | .call_frame = .{ .alignment = .@"16" }, |
| 5413 | .extra_temps = .{ |
| 5414 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } }, |
| 5415 | .unused, |
| 5416 | .unused, |
| 5417 | .unused, |
| 5418 | .unused, |
| 5419 | .unused, |
| 5420 | .unused, |
| 5421 | .unused, |
| 5422 | .unused, |
| 5465 | 5423 | }, |
| 5466 | 5424 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5467 | | .clobbers = .{ .eflags = true }, |
| 5425 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 5468 | 5426 | .each = .{ .once = &.{ |
| 5469 | | .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ }, |
| 5470 | | .{ ._, ._ae, .cmov, .dst0w, .src1w, ._, ._ }, |
| 5427 | .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, |
| 5471 | 5428 | } }, |
| 5472 | 5429 | }, .{ |
| 5473 | | .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word } }, |
| 5474 | | .patterns = &.{ |
| 5475 | | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5476 | | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 5477 | | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5430 | .required_features = .{ .f16c, null, null, null }, |
| 5431 | .src_constraints = .{ |
| 5432 | .{ .scalar_float = .{ .of = .qword, .is = .word } }, |
| 5433 | .{ .scalar_float = .{ .of = .qword, .is = .word } }, |
| 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 | 5435 | .patterns = &.{ |
| 5490 | | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5491 | | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 5492 | | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5436 | .{ .src = .{ .mem, .mem } }, |
| 5437 | .{ .src = .{ .to_sse, .mem } }, |
| 5438 | .{ .src = .{ .mem, .to_sse } }, |
| 5439 | .{ .src = .{ .to_sse, .to_sse } }, |
| 5493 | 5440 | }, |
| 5494 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 5495 | | .clobbers = .{ .eflags = true }, |
| 5496 | | .each = .{ .once = &.{ |
| 5497 | | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, |
| 5498 | | .{ ._, ._ge, .cmov, .dst0d, .src1d, ._, ._ }, |
| 5499 | | } }, |
| 5500 | | }, .{ |
| 5501 | | .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword } }, |
| 5502 | | .patterns = &.{ |
| 5503 | | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5504 | | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 5505 | | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5441 | .extra_temps = .{ |
| 5442 | .{ .type = .vector_4_f16, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } }, |
| 5443 | .{ .type = .vector_4_f16, .kind = .{ .rc = .sse } }, |
| 5444 | .unused, |
| 5445 | .unused, |
| 5446 | .unused, |
| 5447 | .unused, |
| 5448 | .unused, |
| 5449 | .unused, |
| 5450 | .unused, |
| 5506 | 5451 | }, |
| 5507 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 5508 | | .clobbers = .{ .eflags = true }, |
| 5452 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 5509 | 5453 | .each = .{ .once = &.{ |
| 5510 | | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, |
| 5511 | | .{ ._, ._nge, .j, .@"0f", ._, ._, ._ }, |
| 5512 | | .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ }, |
| 5454 | .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, |
| 5455 | .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ }, |
| 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 }, |
| 5516 | | .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword } }, |
| 5517 | | .patterns = &.{ |
| 5518 | | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5519 | | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 5520 | | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5462 | .required_features = .{ .f16c, null, null, null }, |
| 5463 | .src_constraints = .{ |
| 5464 | .{ .scalar_float = .{ .of = .xword, .is = .word } }, |
| 5465 | .{ .scalar_float = .{ .of = .xword, .is = .word } }, |
| 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 | 5467 | .patterns = &.{ |
| 5531 | | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5532 | | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 5533 | | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5468 | .{ .src = .{ .mem, .mem } }, |
| 5469 | .{ .src = .{ .to_sse, .mem } }, |
| 5470 | .{ .src = .{ .mem, .to_sse } }, |
| 5471 | .{ .src = .{ .to_sse, .to_sse } }, |
| 5534 | 5472 | }, |
| 5535 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 5536 | | .clobbers = .{ .eflags = true }, |
| 5537 | | .each = .{ .once = &.{ |
| 5538 | | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, |
| 5539 | | .{ ._, ._nae, .j, .@"0f", ._, ._, ._ }, |
| 5540 | | .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ }, |
| 5541 | | } }, |
| 5542 | | }, .{ |
| 5543 | | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 5544 | | .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword } }, |
| 5545 | | .patterns = &.{ |
| 5546 | | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5547 | | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 5548 | | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5473 | .extra_temps = .{ |
| 5474 | .{ .type = .vector_8_f16, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } }, |
| 5475 | .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } }, |
| 5476 | .unused, |
| 5477 | .unused, |
| 5478 | .unused, |
| 5479 | .unused, |
| 5480 | .unused, |
| 5481 | .unused, |
| 5482 | .unused, |
| 5549 | 5483 | }, |
| 5550 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 5551 | | .clobbers = .{ .eflags = true }, |
| 5484 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 5552 | 5485 | .each = .{ .once = &.{ |
| 5553 | | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, |
| 5554 | | .{ ._, ._ge, .cmov, .dst0q, .src1q, ._, ._ }, |
| 5486 | .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ }, |
| 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 }, |
| 5558 | | .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword } }, |
| 5559 | | .patterns = &.{ |
| 5560 | | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5561 | | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 5562 | | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5494 | .required_features = .{ .f16c, null, null, null }, |
| 5495 | .src_constraints = .{ |
| 5496 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, |
| 5497 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, |
| 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 | 5499 | .patterns = &.{ |
| 5575 | | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5576 | | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 5577 | | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5500 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5578 | 5501 | }, |
| 5579 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 5580 | | .clobbers = .{ .eflags = true }, |
| 5581 | | .each = .{ .once = &.{ |
| 5582 | | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, |
| 5583 | | .{ ._, ._ae, .cmov, .dst0q, .src1q, ._, ._ }, |
| 5584 | | } }, |
| 5585 | | }, .{ |
| 5586 | | .required_features = .{ .@"64bit", null, null, null }, |
| 5587 | | .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword } }, |
| 5588 | | .patterns = &.{ |
| 5589 | | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5590 | | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 5591 | | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5502 | .extra_temps = .{ |
| 5503 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5504 | .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } }, |
| 5505 | .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } }, |
| 5506 | .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } }, |
| 5507 | .unused, |
| 5508 | .unused, |
| 5509 | .unused, |
| 5510 | .unused, |
| 5511 | .unused, |
| 5592 | 5512 | }, |
| 5593 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 5513 | .dst_temps = .{.mem}, |
| 5594 | 5514 | .clobbers = .{ .eflags = true }, |
| 5595 | 5515 | .each = .{ .once = &.{ |
| 5596 | | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, |
| 5597 | | .{ ._, ._nae, .j, .@"0f", ._, ._, ._ }, |
| 5598 | | .{ ._, ._, .mov, .dst0q, .src1q, ._, ._ }, |
| 5516 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5517 | .{ .@"0:", .v_ps, .cvtph2, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 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 }, |
| 5602 | | .src_constraints = .{ .any_signed_int, .any_signed_int }, |
| 5527 | .required_features = .{ .avx, null, null, null }, |
| 5528 | .src_constraints = .{ |
| 5529 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 5530 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 5531 | }, |
| 5603 | 5532 | .patterns = &.{ |
| 5604 | 5533 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5605 | 5534 | }, |
| 5535 | .call_frame = .{ .alignment = .@"16" }, |
| 5606 | 5536 | .extra_temps = .{ |
| 5607 | | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| 5608 | | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| 5609 | | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| 5610 | | .unused, |
| 5537 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5538 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 5539 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| 5540 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } }, |
| 5611 | 5541 | .unused, |
| 5612 | 5542 | .unused, |
| 5613 | 5543 | .unused, |
| ... | ... | @@ -5615,34 +5545,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5615 | 5545 | .unused, |
| 5616 | 5546 | }, |
| 5617 | 5547 | .dst_temps = .{.mem}, |
| 5618 | | .clobbers = .{ .eflags = true }, |
| 5619 | | .each = .{ .once = &.{ |
| 5620 | | .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ }, |
| 5621 | | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 5622 | | .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ }, |
| 5623 | | .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ }, |
| 5624 | | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 5625 | | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 5626 | | .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ }, |
| 5627 | | .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ }, |
| 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, ._, ._, ._, ._ }, |
| 5548 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 5549 | .each = .{ .once = &.{ |
| 5550 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 5551 | .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ }, |
| 5552 | .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memia(.src0w, .tmp0, .add_size), .ui(0) }, |
| 5553 | .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0) }, |
| 5554 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 5555 | .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ }, |
| 5556 | .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ }, |
| 5557 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5634 | 5558 | } }, |
| 5635 | 5559 | }, .{ |
| 5636 | | .required_features = .{ .@"64bit", null, null, null }, |
| 5637 | | .src_constraints = .{ .any_signed_int, .any_signed_int }, |
| 5560 | .required_features = .{ .sse4_1, null, null, null }, |
| 5561 | .src_constraints = .{ |
| 5562 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 5563 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 5564 | }, |
| 5638 | 5565 | .patterns = &.{ |
| 5639 | 5566 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5640 | 5567 | }, |
| 5568 | .call_frame = .{ .alignment = .@"16" }, |
| 5641 | 5569 | .extra_temps = .{ |
| 5642 | | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| 5643 | | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| 5644 | | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| 5645 | | .unused, |
| 5570 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5571 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 5572 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| 5573 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } }, |
| 5646 | 5574 | .unused, |
| 5647 | 5575 | .unused, |
| 5648 | 5576 | .unused, |
| ... | ... | @@ -5650,66 +5578,104 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5650 | 5578 | .unused, |
| 5651 | 5579 | }, |
| 5652 | 5580 | .dst_temps = .{.mem}, |
| 5653 | | .clobbers = .{ .eflags = true }, |
| 5654 | | .each = .{ .once = &.{ |
| 5655 | | .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ }, |
| 5656 | | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 5657 | | .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ }, |
| 5658 | | .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ }, |
| 5659 | | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 5660 | | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 5661 | | .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ }, |
| 5662 | | .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ }, |
| 5663 | | .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, |
| 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, ._, ._, ._, ._ }, |
| 5581 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 5582 | .each = .{ .once = &.{ |
| 5583 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 5584 | .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| 5585 | .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ }, |
| 5586 | .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ }, |
| 5587 | .{ ._, .p_w, .insr, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0), ._ }, |
| 5588 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 5589 | .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ }, |
| 5590 | .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ }, |
| 5591 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5669 | 5592 | } }, |
| 5670 | 5593 | }, .{ |
| 5671 | | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 5672 | | .src_constraints = .{ .any_unsigned_int, .any_unsigned_int }, |
| 5594 | .required_features = .{ .sse2, null, null, null }, |
| 5595 | .src_constraints = .{ |
| 5596 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 5597 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 5598 | }, |
| 5673 | 5599 | .patterns = &.{ |
| 5674 | 5600 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5675 | 5601 | }, |
| 5602 | .call_frame = .{ .alignment = .@"16" }, |
| 5676 | 5603 | .extra_temps = .{ |
| 5677 | | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| 5678 | | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| 5679 | | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| 5604 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5605 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 5606 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| 5607 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } }, |
| 5608 | .{ .type = .f16, .kind = .{ .reg = .ax } }, |
| 5609 | .unused, |
| 5680 | 5610 | .unused, |
| 5681 | 5611 | .unused, |
| 5682 | 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 | 5645 | .unused, |
| 5684 | 5646 | .unused, |
| 5685 | 5647 | .unused, |
| 5686 | 5648 | }, |
| 5687 | 5649 | .dst_temps = .{.mem}, |
| 5688 | | .clobbers = .{ .eflags = true }, |
| 5650 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 5689 | 5651 | .each = .{ .once = &.{ |
| 5690 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ }, |
| 5691 | | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 5692 | | .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ }, |
| 5693 | | .{ ._, ._, .sbb, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ }, |
| 5694 | | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 5695 | | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 5696 | | .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, |
| 5697 | | .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ }, |
| 5698 | | .{ ._, ._ae, .cmov, .tmp0p, .tmp1p, ._, ._ }, |
| 5699 | | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 5700 | | .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ }, |
| 5701 | | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| 5652 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 5653 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 5654 | .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ }, |
| 5655 | .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ }, |
| 5656 | .{ ._, ._, .movzx, .tmp1d, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 5657 | .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ }, |
| 5658 | .{ ._, ._ss, .mov, .tmp4x, .mem(.tmp2d), ._, ._ }, |
| 5659 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| 5660 | .{ ._, ._ss, .mov, .mem(.tmp2d), .tmp3x, ._, ._ }, |
| 5661 | .{ ._, ._, .mov, .tmp1d, .mem(.tmp2d), ._, ._ }, |
| 5662 | .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| 5663 | .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ }, |
| 5664 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5702 | 5665 | } }, |
| 5703 | 5666 | }, .{ |
| 5704 | | .required_features = .{ .@"64bit", null, null, null }, |
| 5705 | | .src_constraints = .{ .any_unsigned_int, .any_unsigned_int }, |
| 5667 | .required_features = .{ .avx, null, null, null }, |
| 5668 | .src_constraints = .{ |
| 5669 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 5670 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 5671 | }, |
| 5706 | 5672 | .patterns = &.{ |
| 5707 | | .{ .src = .{ .to_mem, .to_mem } }, |
| 5673 | .{ .src = .{ .to_sse, .to_sse } }, |
| 5708 | 5674 | }, |
| 5709 | 5675 | .extra_temps = .{ |
| 5710 | | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| 5711 | | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| 5712 | | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| 5676 | .{ .type = .f32, .kind = .{ .rc = .sse } }, |
| 5677 | .unused, |
| 5678 | .unused, |
| 5713 | 5679 | .unused, |
| 5714 | 5680 | .unused, |
| 5715 | 5681 | .unused, |
| ... | ... | @@ -5717,98 +5683,115 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5717 | 5683 | .unused, |
| 5718 | 5684 | .unused, |
| 5719 | 5685 | }, |
| 5720 | | .dst_temps = .{.mem}, |
| 5721 | | .clobbers = .{ .eflags = true }, |
| 5686 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 5722 | 5687 | .each = .{ .once = &.{ |
| 5723 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ }, |
| 5724 | | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 5725 | | .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ }, |
| 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, ._, ._, ._, ._ }, |
| 5688 | .{ ._, .v_ss, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) }, |
| 5689 | .{ ._, .v_ss, .max, .dst0x, .src1x, .src0x, ._ }, |
| 5690 | .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .src1x, .tmp0x }, |
| 5735 | 5691 | } }, |
| 5736 | 5692 | }, .{ |
| 5737 | | .required_features = .{ .avx, null, null, null }, |
| 5693 | .required_features = .{ .sse4_1, null, null, null }, |
| 5738 | 5694 | .src_constraints = .{ |
| 5739 | | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 5740 | | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 5695 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 5696 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 5741 | 5697 | }, |
| 5742 | 5698 | .patterns = &.{ |
| 5743 | | .{ .src = .{ .to_sse, .mem } }, |
| 5744 | | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 5745 | | .{ .src = .{ .to_sse, .to_sse } }, |
| 5699 | .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } }, |
| 5746 | 5700 | }, |
| 5747 | 5701 | .dst_temps = .{.{ .rc = .sse }}, |
| 5748 | 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 | 5710 | .src_constraints = .{ |
| 5754 | | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 5755 | | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 5711 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 5712 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 5756 | 5713 | }, |
| 5757 | 5714 | .patterns = &.{ |
| 5758 | | .{ .src = .{ .to_mut_sse, .mem } }, |
| 5759 | | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 5760 | 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 | 5728 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5763 | 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 | 5739 | .src_constraints = .{ |
| 5769 | | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 5770 | | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 5740 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 5741 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 5771 | 5742 | }, |
| 5772 | 5743 | .patterns = &.{ |
| 5773 | | .{ .src = .{ .to_mut_sse, .mem } }, |
| 5774 | | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 5775 | | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 5744 | .{ .src = .{ .to_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 | 5758 | .each = .{ .once = &.{ |
| 5779 | | .{ ._, ._dqa, .mov, .dst0x, .src1x, ._, ._ }, |
| 5780 | | .{ ._, .p_b, .cmpgt, .dst0x, .src0x, ._, ._ }, |
| 5781 | | .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ }, |
| 5782 | | .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ }, |
| 5783 | | .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ }, |
| 5759 | .{ ._, .v_ps, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) }, |
| 5760 | .{ ._, .v_ps, .max, .dst0x, .src1x, .src0x, ._ }, |
| 5761 | .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .src1x, .tmp0x }, |
| 5784 | 5762 | } }, |
| 5785 | 5763 | }, .{ |
| 5786 | | .required_features = .{ .avx2, null, null, null }, |
| 5764 | .required_features = .{ .sse4_1, null, null, null }, |
| 5787 | 5765 | .src_constraints = .{ |
| 5788 | | .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } }, |
| 5789 | | .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } }, |
| 5766 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 5767 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 5790 | 5768 | }, |
| 5791 | 5769 | .patterns = &.{ |
| 5792 | | .{ .src = .{ .to_sse, .mem } }, |
| 5793 | | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 5794 | | .{ .src = .{ .to_sse, .to_sse } }, |
| 5770 | .{ .src = .{ .{ .to_reg = .xmm0 }, .mem } }, |
| 5771 | .{ .src = .{ .mem, .{ .to_reg = .xmm0 } }, .commute = .{ 0, 1 } }, |
| 5772 | .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } }, |
| 5795 | 5773 | }, |
| 5796 | 5774 | .dst_temps = .{.{ .rc = .sse }}, |
| 5797 | 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 | 5783 | .src_constraints = .{ |
| 5803 | | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } }, |
| 5804 | | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } }, |
| 5784 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 5785 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 5805 | 5786 | }, |
| 5806 | 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 | 5792 | .extra_temps = .{ |
| 5810 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5811 | | .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } }, |
| 5793 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 5794 | .unused, |
| 5812 | 5795 | .unused, |
| 5813 | 5796 | .unused, |
| 5814 | 5797 | .unused, |
| ... | ... | @@ -5817,28 +5800,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5817 | 5800 | .unused, |
| 5818 | 5801 | .unused, |
| 5819 | 5802 | }, |
| 5820 | | .dst_temps = .{.mem}, |
| 5821 | | .clobbers = .{ .eflags = true }, |
| 5803 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5822 | 5804 | .each = .{ .once = &.{ |
| 5823 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5824 | | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 5825 | | .{ ._, .vp_b, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 5826 | | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 5827 | | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 5828 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5805 | .{ ._, ._ps, .mova, .tmp0x, .src1x, ._, ._ }, |
| 5806 | .{ ._, ._ps, .max, .tmp0x, .src0x, ._, ._ }, |
| 5807 | .{ ._, ._ps, .cmp, .dst0x, .src0x, .vp(.ord), ._ }, |
| 5808 | .{ ._, ._ps, .@"and", .tmp0x, .dst0x, ._, ._ }, |
| 5809 | .{ ._, ._ps, .andn, .dst0x, .src1x, ._, ._ }, |
| 5810 | .{ ._, ._ps, .@"or", .dst0x, .tmp0x, ._, ._ }, |
| 5829 | 5811 | } }, |
| 5830 | 5812 | }, .{ |
| 5831 | 5813 | .required_features = .{ .avx, null, null, null }, |
| 5832 | 5814 | .src_constraints = .{ |
| 5833 | | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 5834 | | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 5815 | .{ .scalar_float = .{ .of = .yword, .is = .dword } }, |
| 5816 | .{ .scalar_float = .{ .of = .yword, .is = .dword } }, |
| 5835 | 5817 | }, |
| 5836 | 5818 | .patterns = &.{ |
| 5837 | | .{ .src = .{ .to_mem, .to_mem } }, |
| 5819 | .{ .src = .{ .to_sse, .to_sse } }, |
| 5838 | 5820 | }, |
| 5839 | 5821 | .extra_temps = .{ |
| 5840 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5841 | | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, |
| 5822 | .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, |
| 5823 | .unused, |
| 5842 | 5824 | .unused, |
| 5843 | 5825 | .unused, |
| 5844 | 5826 | .unused, |
| ... | ... | @@ -5847,30 +5829,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5847 | 5829 | .unused, |
| 5848 | 5830 | .unused, |
| 5849 | 5831 | }, |
| 5850 | | .dst_temps = .{.mem}, |
| 5851 | | .clobbers = .{ .eflags = true }, |
| 5832 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 5852 | 5833 | .each = .{ .once = &.{ |
| 5853 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5854 | | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5855 | | .{ ._, .vp_b, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 5856 | | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 5857 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 5858 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5834 | .{ ._, .v_ps, .cmp, .tmp0y, .src0y, .src0y, .vp(.unord) }, |
| 5835 | .{ ._, .v_ps, .max, .dst0y, .src1y, .src0y, ._ }, |
| 5836 | .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .src1y, .tmp0y }, |
| 5859 | 5837 | } }, |
| 5860 | 5838 | }, .{ |
| 5861 | | .required_features = .{ .sse4_1, null, null, null }, |
| 5839 | .required_features = .{ .avx, null, null, null }, |
| 5862 | 5840 | .src_constraints = .{ |
| 5863 | | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 5864 | | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 5841 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, |
| 5842 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, |
| 5865 | 5843 | }, |
| 5866 | 5844 | .patterns = &.{ |
| 5867 | 5845 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5868 | 5846 | }, |
| 5869 | 5847 | .extra_temps = .{ |
| 5870 | 5848 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5871 | | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, |
| 5872 | | .unused, |
| 5873 | | .unused, |
| 5849 | .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, |
| 5850 | .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, |
| 5851 | .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, |
| 5874 | 5852 | .unused, |
| 5875 | 5853 | .unused, |
| 5876 | 5854 | .unused, |
| ... | ... | @@ -5880,27 +5858,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5880 | 5858 | .dst_temps = .{.mem}, |
| 5881 | 5859 | .clobbers = .{ .eflags = true }, |
| 5882 | 5860 | .each = .{ .once = &.{ |
| 5883 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5884 | | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5885 | | .{ ._, .p_b, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 5886 | | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 5887 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 5861 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 5862 | .{ .@"0:", .v_ps, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 5863 | .{ ._, .v_ps, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, |
| 5864 | .{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) }, |
| 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 | 5869 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5889 | 5870 | } }, |
| 5890 | 5871 | }, .{ |
| 5891 | | .required_features = .{ .sse2, null, null, null }, |
| 5872 | .required_features = .{ .sse4_1, null, null, null }, |
| 5892 | 5873 | .src_constraints = .{ |
| 5893 | | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 5894 | | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 5874 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, |
| 5875 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, |
| 5895 | 5876 | }, |
| 5896 | 5877 | .patterns = &.{ |
| 5897 | 5878 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5898 | 5879 | }, |
| 5899 | 5880 | .extra_temps = .{ |
| 5900 | 5881 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5901 | | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, |
| 5902 | | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, |
| 5903 | | .unused, |
| 5882 | .{ .type = .vector_4_f32, .kind = .{ .reg = .xmm0 } }, |
| 5883 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 5884 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 5904 | 5885 | .unused, |
| 5905 | 5886 | .unused, |
| 5906 | 5887 | .unused, |
| ... | ... | @@ -5910,31 +5891,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5910 | 5891 | .dst_temps = .{.mem}, |
| 5911 | 5892 | .clobbers = .{ .eflags = true }, |
| 5912 | 5893 | .each = .{ .once = &.{ |
| 5913 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5914 | | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5915 | | .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 5916 | | .{ ._, .p_b, .cmpgt, .tmp1x, .tmp2x, ._, ._ }, |
| 5917 | | .{ ._, .p_, .@"and", .tmp2x, .tmp1x, ._, ._ }, |
| 5918 | | .{ ._, .p_, .andn, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5919 | | .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ }, |
| 5920 | | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 5921 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 5894 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 5895 | .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5896 | .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 5897 | .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ }, |
| 5898 | .{ ._, ._ps, .max, .tmp3x, .tmp1x, ._, ._ }, |
| 5899 | .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ }, |
| 5900 | .{ ._, ._ps, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ }, |
| 5901 | .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, |
| 5902 | .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, |
| 5922 | 5903 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5923 | 5904 | } }, |
| 5924 | 5905 | }, .{ |
| 5925 | | .required_features = .{ .cmov, .slow_incdec, null, null }, |
| 5906 | .required_features = .{ .sse, null, null, null }, |
| 5926 | 5907 | .src_constraints = .{ |
| 5927 | | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 5928 | | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 5908 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, |
| 5909 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, |
| 5929 | 5910 | }, |
| 5930 | 5911 | .patterns = &.{ |
| 5931 | 5912 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5932 | 5913 | }, |
| 5933 | 5914 | .extra_temps = .{ |
| 5934 | 5915 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5935 | | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| 5936 | | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| 5937 | | .unused, |
| 5916 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 5917 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 5918 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 5938 | 5919 | .unused, |
| 5939 | 5920 | .unused, |
| 5940 | 5921 | .unused, |
| ... | ... | @@ -5944,28 +5925,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5944 | 5925 | .dst_temps = .{.mem}, |
| 5945 | 5926 | .clobbers = .{ .eflags = true }, |
| 5946 | 5927 | .each = .{ .once = &.{ |
| 5947 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5948 | | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 5949 | | .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 5950 | | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, |
| 5951 | | .{ ._, ._ge, .cmov, .tmp1d, .tmp2d, ._, ._ }, |
| 5952 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 5953 | | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 5928 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 5929 | .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5930 | .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 5931 | .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ }, |
| 5932 | .{ ._, ._ps, .max, .tmp3x, .tmp1x, ._, ._ }, |
| 5933 | .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.ord), ._ }, |
| 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 | 5939 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5955 | 5940 | } }, |
| 5956 | 5941 | }, .{ |
| 5957 | | .required_features = .{ .cmov, null, null, null }, |
| 5942 | .required_features = .{ .avx, null, null, null }, |
| 5958 | 5943 | .src_constraints = .{ |
| 5959 | | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 5960 | | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 5944 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 5945 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 5961 | 5946 | }, |
| 5962 | 5947 | .patterns = &.{ |
| 5963 | | .{ .src = .{ .to_mem, .to_mem } }, |
| 5948 | .{ .src = .{ .to_sse, .to_sse } }, |
| 5964 | 5949 | }, |
| 5965 | 5950 | .extra_temps = .{ |
| 5966 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5967 | | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| 5968 | | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| 5951 | .{ .type = .f64, .kind = .{ .rc = .sse } }, |
| 5952 | .unused, |
| 5953 | .unused, |
| 5969 | 5954 | .unused, |
| 5970 | 5955 | .unused, |
| 5971 | 5956 | .unused, |
| ... | ... | @@ -5973,30 +5958,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5973 | 5958 | .unused, |
| 5974 | 5959 | .unused, |
| 5975 | 5960 | }, |
| 5976 | | .dst_temps = .{.mem}, |
| 5977 | | .clobbers = .{ .eflags = true }, |
| 5961 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 5978 | 5962 | .each = .{ .once = &.{ |
| 5979 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5980 | | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 5981 | | .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 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", ._, ._, ._ }, |
| 5963 | .{ ._, .v_sd, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) }, |
| 5964 | .{ ._, .v_sd, .max, .dst0x, .src1x, .src0x, ._ }, |
| 5965 | .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .src1x, .tmp0x }, |
| 5987 | 5966 | } }, |
| 5988 | 5967 | }, .{ |
| 5989 | | .required_features = .{ .slow_incdec, null, null, null }, |
| 5968 | .required_features = .{ .sse4_1, null, null, null }, |
| 5990 | 5969 | .src_constraints = .{ |
| 5991 | | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 5992 | | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 5970 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 5971 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 5993 | 5972 | }, |
| 5994 | 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 | 5992 | .extra_temps = .{ |
| 5998 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5999 | | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| 5993 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 5994 | .unused, |
| 6000 | 5995 | .unused, |
| 6001 | 5996 | .unused, |
| 6002 | 5997 | .unused, |
| ... | ... | @@ -6005,29 +6000,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6005 | 6000 | .unused, |
| 6006 | 6001 | .unused, |
| 6007 | 6002 | }, |
| 6008 | | .dst_temps = .{.mem}, |
| 6009 | | .clobbers = .{ .eflags = true }, |
| 6003 | .dst_temps = .{.{ .ref = .src0 }}, |
| 6010 | 6004 | .each = .{ .once = &.{ |
| 6011 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6012 | | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 6013 | | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 6014 | | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, |
| 6015 | | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 6016 | | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 6017 | | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 6018 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6005 | .{ ._, ._pd, .mova, .tmp0x, .src1x, ._, ._ }, |
| 6006 | .{ ._, ._sd, .max, .tmp0x, .src0x, ._, ._ }, |
| 6007 | .{ ._, ._sd, .cmp, .dst0x, .src0x, .vp(.ord), ._ }, |
| 6008 | .{ ._, ._pd, .@"and", .tmp0x, .dst0x, ._, ._ }, |
| 6009 | .{ ._, ._pd, .andn, .dst0x, .src1x, ._, ._ }, |
| 6010 | .{ ._, ._pd, .@"or", .dst0x, .tmp0x, ._, ._ }, |
| 6019 | 6011 | } }, |
| 6020 | 6012 | }, .{ |
| 6013 | .required_features = .{ .sse, null, null, null }, |
| 6021 | 6014 | .src_constraints = .{ |
| 6022 | | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 6023 | | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 6015 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 6016 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 6024 | 6017 | }, |
| 6025 | 6018 | .patterns = &.{ |
| 6026 | | .{ .src = .{ .to_mem, .to_mem } }, |
| 6019 | .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } }, |
| 6027 | 6020 | }, |
| 6021 | .call_frame = .{ .alignment = .@"16" }, |
| 6028 | 6022 | .extra_temps = .{ |
| 6029 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6030 | | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| 6023 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmax" } } }, |
| 6024 | .unused, |
| 6031 | 6025 | .unused, |
| 6032 | 6026 | .unused, |
| 6033 | 6027 | .unused, |
| ... | ... | @@ -6036,90 +6030,98 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6036 | 6030 | .unused, |
| 6037 | 6031 | .unused, |
| 6038 | 6032 | }, |
| 6039 | | .dst_temps = .{.mem}, |
| 6040 | | .clobbers = .{ .eflags = true }, |
| 6033 | .dst_temps = .{.{ .ref = .src0 }}, |
| 6034 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 6041 | 6035 | .each = .{ .once = &.{ |
| 6042 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 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", ._, ._, ._ }, |
| 6036 | .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, |
| 6050 | 6037 | } }, |
| 6051 | 6038 | }, .{ |
| 6052 | | .required_features = .{ .sse, .mmx, null, null }, |
| 6039 | .required_features = .{ .avx, null, null, null }, |
| 6053 | 6040 | .src_constraints = .{ |
| 6054 | | .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } }, |
| 6055 | | .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } }, |
| 6041 | .{ .scalar_float = .{ .of = .xword, .is = .qword } }, |
| 6042 | .{ .scalar_float = .{ .of = .xword, .is = .qword } }, |
| 6056 | 6043 | }, |
| 6057 | 6044 | .patterns = &.{ |
| 6058 | | .{ .src = .{ .to_mut_mmx, .mem } }, |
| 6059 | | .{ .src = .{ .mem, .to_mut_mmx }, .commute = .{ 0, 1 } }, |
| 6060 | | .{ .src = .{ .to_mut_mmx, .to_mmx } }, |
| 6045 | .{ .src = .{ .to_sse, .to_sse } }, |
| 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 | 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 | 6066 | .src_constraints = .{ |
| 6069 | | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| 6070 | | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| 6067 | .{ .scalar_float = .{ .of = .xword, .is = .qword } }, |
| 6068 | .{ .scalar_float = .{ .of = .xword, .is = .qword } }, |
| 6071 | 6069 | }, |
| 6072 | 6070 | .patterns = &.{ |
| 6073 | | .{ .src = .{ .to_sse, .mem } }, |
| 6074 | | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 6075 | | .{ .src = .{ .to_sse, .to_sse } }, |
| 6071 | .{ .src = .{ .{ .to_reg = .xmm0 }, .mem } }, |
| 6072 | .{ .src = .{ .mem, .{ .to_reg = .xmm0 } }, .commute = .{ 0, 1 } }, |
| 6073 | .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } }, |
| 6076 | 6074 | }, |
| 6077 | 6075 | .dst_temps = .{.{ .rc = .sse }}, |
| 6078 | 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 | 6083 | .required_features = .{ .sse2, null, null, null }, |
| 6083 | 6084 | .src_constraints = .{ |
| 6084 | | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| 6085 | | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| 6085 | .{ .scalar_float = .{ .of = .xword, .is = .qword } }, |
| 6086 | .{ .scalar_float = .{ .of = .xword, .is = .qword } }, |
| 6086 | 6087 | }, |
| 6087 | 6088 | .patterns = &.{ |
| 6088 | 6089 | .{ .src = .{ .to_mut_sse, .mem } }, |
| 6089 | 6090 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 6090 | 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 | 6104 | .dst_temps = .{.{ .ref = .src0 }}, |
| 6093 | 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 | 6115 | .src_constraints = .{ |
| 6099 | | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, |
| 6100 | | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, |
| 6116 | .{ .scalar_float = .{ .of = .yword, .is = .qword } }, |
| 6117 | .{ .scalar_float = .{ .of = .yword, .is = .qword } }, |
| 6101 | 6118 | }, |
| 6102 | 6119 | .patterns = &.{ |
| 6103 | | .{ .src = .{ .to_sse, .mem } }, |
| 6104 | | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 6105 | 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 | 6122 | .extra_temps = .{ |
| 6121 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6122 | | .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } }, |
| 6123 | .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, |
| 6124 | .unused, |
| 6123 | 6125 | .unused, |
| 6124 | 6126 | .unused, |
| 6125 | 6127 | .unused, |
| ... | ... | @@ -6128,30 +6130,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6128 | 6130 | .unused, |
| 6129 | 6131 | .unused, |
| 6130 | 6132 | }, |
| 6131 | | .dst_temps = .{.mem}, |
| 6132 | | .clobbers = .{ .eflags = true }, |
| 6133 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 6133 | 6134 | .each = .{ .once = &.{ |
| 6134 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6135 | | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 6136 | | .{ ._, .vp_b, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 6137 | | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 6138 | | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 6139 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6135 | .{ ._, .v_pd, .cmp, .tmp0y, .src0y, .src0y, .vp(.unord) }, |
| 6136 | .{ ._, .v_pd, .max, .dst0y, .src1y, .src0y, ._ }, |
| 6137 | .{ ._, .v_pd, .blendv, .dst0y, .dst0y, .src1y, .tmp0y }, |
| 6140 | 6138 | } }, |
| 6141 | 6139 | }, .{ |
| 6142 | 6140 | .required_features = .{ .avx, null, null, null }, |
| 6143 | 6141 | .src_constraints = .{ |
| 6144 | | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| 6145 | | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| 6142 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, |
| 6143 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, |
| 6146 | 6144 | }, |
| 6147 | 6145 | .patterns = &.{ |
| 6148 | 6146 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6149 | 6147 | }, |
| 6150 | 6148 | .extra_temps = .{ |
| 6151 | 6149 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6152 | | .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } }, |
| 6153 | | .unused, |
| 6154 | | .unused, |
| 6150 | .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, |
| 6151 | .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, |
| 6152 | .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, |
| 6155 | 6153 | .unused, |
| 6156 | 6154 | .unused, |
| 6157 | 6155 | .unused, |
| ... | ... | @@ -6161,27 +6159,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6161 | 6159 | .dst_temps = .{.mem}, |
| 6162 | 6160 | .clobbers = .{ .eflags = true }, |
| 6163 | 6161 | .each = .{ .once = &.{ |
| 6164 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6165 | | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6166 | | .{ ._, .vp_b, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 6167 | | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6168 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6162 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 6163 | .{ .@"0:", .v_pd, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 6164 | .{ ._, .v_pd, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, |
| 6165 | .{ ._, .v_pd, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) }, |
| 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 | 6170 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6170 | 6171 | } }, |
| 6171 | 6172 | }, .{ |
| 6172 | | .required_features = .{ .sse2, null, null, null }, |
| 6173 | .required_features = .{ .sse4_1, null, null, null }, |
| 6173 | 6174 | .src_constraints = .{ |
| 6174 | | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| 6175 | | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| 6175 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, |
| 6176 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, |
| 6176 | 6177 | }, |
| 6177 | 6178 | .patterns = &.{ |
| 6178 | 6179 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6179 | 6180 | }, |
| 6180 | 6181 | .extra_temps = .{ |
| 6181 | 6182 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6182 | | .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } }, |
| 6183 | | .unused, |
| 6184 | | .unused, |
| 6183 | .{ .type = .vector_2_f64, .kind = .{ .reg = .xmm0 } }, |
| 6184 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 6185 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 6185 | 6186 | .unused, |
| 6186 | 6187 | .unused, |
| 6187 | 6188 | .unused, |
| ... | ... | @@ -6191,27 +6192,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6191 | 6192 | .dst_temps = .{.mem}, |
| 6192 | 6193 | .clobbers = .{ .eflags = true }, |
| 6193 | 6194 | .each = .{ .once = &.{ |
| 6194 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6195 | | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6196 | | .{ ._, .p_b, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6197 | | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6198 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6195 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 6196 | .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6197 | .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6198 | .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ }, |
| 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 | 6204 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6200 | 6205 | } }, |
| 6201 | 6206 | }, .{ |
| 6202 | | .required_features = .{ .cmov, .slow_incdec, null, null }, |
| 6207 | .required_features = .{ .sse2, null, null, null }, |
| 6203 | 6208 | .src_constraints = .{ |
| 6204 | | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 6205 | | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 6209 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, |
| 6210 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, |
| 6206 | 6211 | }, |
| 6207 | 6212 | .patterns = &.{ |
| 6208 | 6213 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6209 | 6214 | }, |
| 6210 | 6215 | .extra_temps = .{ |
| 6211 | 6216 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6212 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 6213 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 6214 | | .unused, |
| 6217 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 6218 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 6219 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 6215 | 6220 | .unused, |
| 6216 | 6221 | .unused, |
| 6217 | 6222 | .unused, |
| ... | ... | @@ -6221,29 +6226,34 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6221 | 6226 | .dst_temps = .{.mem}, |
| 6222 | 6227 | .clobbers = .{ .eflags = true }, |
| 6223 | 6228 | .each = .{ .once = &.{ |
| 6224 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6225 | | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 6226 | | .{ ._, ._, .movzx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 6227 | | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, |
| 6228 | | .{ ._, ._ae, .cmov, .tmp1d, .tmp2d, ._, ._ }, |
| 6229 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 6230 | | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 6229 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 6230 | .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6231 | .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6232 | .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ }, |
| 6233 | .{ ._, ._pd, .max, .tmp3x, .tmp1x, ._, ._ }, |
| 6234 | .{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .vp(.ord), ._ }, |
| 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 | 6240 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6232 | 6241 | } }, |
| 6233 | 6242 | }, .{ |
| 6234 | | .required_features = .{ .cmov, null, null, null }, |
| 6243 | .required_features = .{ .sse, null, null, null }, |
| 6235 | 6244 | .src_constraints = .{ |
| 6236 | | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 6237 | | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 6245 | .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, |
| 6246 | .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, |
| 6238 | 6247 | }, |
| 6239 | 6248 | .patterns = &.{ |
| 6240 | 6249 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6241 | 6250 | }, |
| 6251 | .call_frame = .{ .alignment = .@"16" }, |
| 6242 | 6252 | .extra_temps = .{ |
| 6243 | 6253 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6244 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 6245 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 6246 | | .unused, |
| 6254 | .{ .type = .f64, .kind = .{ .reg = .xmm0 } }, |
| 6255 | .{ .type = .f64, .kind = .{ .reg = .xmm1 } }, |
| 6256 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmax" } } }, |
| 6247 | 6257 | .unused, |
| 6248 | 6258 | .unused, |
| 6249 | 6259 | .unused, |
| ... | ... | @@ -6251,29 +6261,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6251 | 6261 | .unused, |
| 6252 | 6262 | }, |
| 6253 | 6263 | .dst_temps = .{.mem}, |
| 6254 | | .clobbers = .{ .eflags = true }, |
| 6255 | | .each = .{ .once = &.{ |
| 6256 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6257 | | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 6258 | | .{ ._, ._, .movzx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 6259 | | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, |
| 6260 | | .{ ._, ._ae, .cmov, .tmp1d, .tmp2d, ._, ._ }, |
| 6261 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 6262 | | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 6263 | | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 6264 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 6265 | .each = .{ .once = &.{ |
| 6266 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 6267 | .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| 6268 | .{ ._, ._ps, .xor, .tmp2x, .tmp2x, ._, ._ }, |
| 6269 | .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 6270 | .{ ._, ._ps, .movl, .tmp2x, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 6271 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 6272 | .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| 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 | 6278 | .src_constraints = .{ |
| 6268 | | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 6269 | | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 6279 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6280 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6270 | 6281 | }, |
| 6271 | 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 | 6287 | .extra_temps = .{ |
| 6275 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6276 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 6288 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 6289 | .unused, |
| 6277 | 6290 | .unused, |
| 6278 | 6291 | .unused, |
| 6279 | 6292 | .unused, |
| ... | ... | @@ -6282,29 +6295,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6282 | 6295 | .unused, |
| 6283 | 6296 | .unused, |
| 6284 | 6297 | }, |
| 6285 | | .dst_temps = .{.mem}, |
| 6298 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }}, |
| 6286 | 6299 | .clobbers = .{ .eflags = true }, |
| 6287 | 6300 | .each = .{ .once = &.{ |
| 6288 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6289 | | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 6290 | | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 6291 | | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, |
| 6292 | | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 6293 | | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 6294 | | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 6295 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6301 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 6302 | .{ ._, .f_, .ucomi, .tmp0t, .tmp0t, ._, ._ }, |
| 6303 | .{ ._, .f_u, .cmov, .tmp0t, .src1t, ._, ._ }, |
| 6304 | .{ ._, .f_, .xch, .src1t, ._, ._, ._ }, |
| 6305 | .{ ._, .f_, .ucomi, .tmp0t, .src1t, ._, ._ }, |
| 6306 | .{ ._, .f_, .xch, .src1t, ._, ._, ._ }, |
| 6307 | .{ ._, .f_nb, .cmov, .tmp0t, .src1t, ._, ._ }, |
| 6308 | .{ ._, .f_p, .st, .dst0t, ._, ._, ._ }, |
| 6296 | 6309 | } }, |
| 6297 | 6310 | }, .{ |
| 6311 | .required_features = .{ .sahf, .x87, null, null }, |
| 6298 | 6312 | .src_constraints = .{ |
| 6299 | | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 6300 | | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 6313 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6314 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6301 | 6315 | }, |
| 6302 | 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 | 6321 | .extra_temps = .{ |
| 6306 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6307 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 6322 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 6323 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 6308 | 6324 | .unused, |
| 6309 | 6325 | .unused, |
| 6310 | 6326 | .unused, |
| ... | ... | @@ -6313,90 +6329,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6313 | 6329 | .unused, |
| 6314 | 6330 | .unused, |
| 6315 | 6331 | }, |
| 6316 | | .dst_temps = .{.mem}, |
| 6332 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }}, |
| 6317 | 6333 | .clobbers = .{ .eflags = true }, |
| 6318 | 6334 | .each = .{ .once = &.{ |
| 6319 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6320 | | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 6321 | | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 6322 | | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, |
| 6323 | | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 6324 | | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 6325 | | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 6326 | | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 6327 | | } }, |
| 6328 | | }, .{ |
| 6329 | | .required_features = .{ .sse, .mmx, null, null }, |
| 6330 | | .src_constraints = .{ |
| 6331 | | .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, |
| 6332 | | .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, |
| 6333 | | }, |
| 6334 | | .patterns = &.{ |
| 6335 | | .{ .src = .{ .to_mut_mmx, .mem } }, |
| 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 }, |
| 6335 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 6336 | .{ ._, .f_, .ucom, .tmp0t, ._, ._, ._ }, |
| 6337 | .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ }, |
| 6338 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 6339 | .{ ._, ._p, .j, .@"0f", ._, ._, ._ }, |
| 6340 | .{ ._, .f_, .xch, .src1t, ._, ._, ._ }, |
| 6341 | .{ ._, .f_, .ucom, .src1t, ._, ._, ._ }, |
| 6342 | .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ }, |
| 6343 | .{ ._, .f_, .xch, .src1t, ._, ._, ._ }, |
| 6344 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 6345 | .{ ._, ._b, .j, .@"1f", ._, ._, ._ }, |
| 6346 | .{ .@"0:", .f_p, .st, .tmp0t, ._, ._, ._ }, |
| 6347 | .{ ._, .f_, .ld, .src1t, ._, ._, ._ }, |
| 6348 | .{ .@"1:", .f_p, .st, .dst0t, ._, ._, ._ }, |
| 6349 | } }, |
| 6350 | }, .{ |
| 6351 | .required_features = .{ .@"64bit", .x87, null, null }, |
| 6390 | 6352 | .src_constraints = .{ |
| 6391 | | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } }, |
| 6392 | | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } }, |
| 6353 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6354 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6393 | 6355 | }, |
| 6394 | 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 | 6361 | .extra_temps = .{ |
| 6398 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6399 | | .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } }, |
| 6362 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 6363 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 6400 | 6364 | .unused, |
| 6401 | 6365 | .unused, |
| 6402 | 6366 | .unused, |
| ... | ... | @@ -6405,28 +6369,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6405 | 6369 | .unused, |
| 6406 | 6370 | .unused, |
| 6407 | 6371 | }, |
| 6408 | | .dst_temps = .{.mem}, |
| 6372 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }}, |
| 6409 | 6373 | .clobbers = .{ .eflags = true }, |
| 6410 | 6374 | .each = .{ .once = &.{ |
| 6411 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6412 | | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 6413 | | .{ ._, .vp_w, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 6414 | | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 6415 | | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 6416 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6375 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 6376 | .{ ._, .f_, .xam, ._, ._, ._, ._ }, |
| 6377 | .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ }, |
| 6378 | .{ ._, ._, .@"test", .tmp1b, .si(0b0_1_000_100), ._, ._ }, |
| 6379 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 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 | 6392 | .src_constraints = .{ |
| 6421 | | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| 6422 | | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| 6393 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6394 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6423 | 6395 | }, |
| 6424 | 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 | 6401 | .extra_temps = .{ |
| 6428 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6429 | | .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } }, |
| 6402 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 6403 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 6430 | 6404 | .unused, |
| 6431 | 6405 | .unused, |
| 6432 | 6406 | .unused, |
| ... | ... | @@ -6435,29 +6409,37 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6435 | 6409 | .unused, |
| 6436 | 6410 | .unused, |
| 6437 | 6411 | }, |
| 6438 | | .dst_temps = .{.mem}, |
| 6412 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }}, |
| 6439 | 6413 | .clobbers = .{ .eflags = true }, |
| 6440 | 6414 | .each = .{ .once = &.{ |
| 6441 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6442 | | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6443 | | .{ ._, .vp_w, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 6444 | | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6445 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6446 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6447 | | } }, |
| 6448 | | }, .{ |
| 6449 | | .required_features = .{ .sse2, null, null, null }, |
| 6415 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 6416 | .{ ._, .f_, .ucom, .tmp0t, ._, ._, ._ }, |
| 6417 | .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ }, |
| 6418 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 6419 | .{ ._, ._p, .j, .@"0f", ._, ._, ._ }, |
| 6420 | .{ ._, .f_, .xch, .src1t, ._, ._, ._ }, |
| 6421 | .{ ._, .f_, .ucom, .src1t, ._, ._, ._ }, |
| 6422 | .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ }, |
| 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 | 6432 | .src_constraints = .{ |
| 6451 | | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| 6452 | | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| 6433 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6434 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6453 | 6435 | }, |
| 6454 | 6436 | .patterns = &.{ |
| 6455 | 6437 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6456 | 6438 | }, |
| 6457 | 6439 | .extra_temps = .{ |
| 6458 | 6440 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6459 | | .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } }, |
| 6460 | | .unused, |
| 6441 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 6442 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 6461 | 6443 | .unused, |
| 6462 | 6444 | .unused, |
| 6463 | 6445 | .unused, |
| ... | ... | @@ -6469,26 +6451,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6469 | 6451 | .clobbers = .{ .eflags = true }, |
| 6470 | 6452 | .each = .{ .once = &.{ |
| 6471 | 6453 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6472 | | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6473 | | .{ ._, .p_w, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6474 | | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6454 | .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ }, |
| 6455 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 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 | 6464 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6476 | 6465 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6477 | 6466 | } }, |
| 6478 | 6467 | }, .{ |
| 6479 | | .required_features = .{ .cmov, null, null, null }, |
| 6468 | .required_features = .{ .sahf, .x87, null, null }, |
| 6480 | 6469 | .src_constraints = .{ |
| 6481 | | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| 6482 | | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| 6470 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6471 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6483 | 6472 | }, |
| 6484 | 6473 | .patterns = &.{ |
| 6485 | 6474 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6486 | 6475 | }, |
| 6487 | 6476 | .extra_temps = .{ |
| 6488 | 6477 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6489 | | .{ .type = .i16, .kind = .{ .rc = .general_purpose } }, |
| 6490 | | .unused, |
| 6491 | | .unused, |
| 6478 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 6479 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 6480 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 6492 | 6481 | .unused, |
| 6493 | 6482 | .unused, |
| 6494 | 6483 | .unused, |
| ... | ... | @@ -6499,26 +6488,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6499 | 6488 | .clobbers = .{ .eflags = true }, |
| 6500 | 6489 | .each = .{ .once = &.{ |
| 6501 | 6490 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6502 | | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 6503 | | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 6504 | | .{ ._, ._ge, .cmov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 6505 | | .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| 6506 | | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 6491 | .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ }, |
| 6492 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 6493 | .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ }, |
| 6494 | .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ }, |
| 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 | 6508 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6508 | 6509 | } }, |
| 6509 | 6510 | }, .{ |
| 6511 | .required_features = .{ .@"64bit", .x87, null, null }, |
| 6510 | 6512 | .src_constraints = .{ |
| 6511 | | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| 6512 | | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| 6513 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6514 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6513 | 6515 | }, |
| 6514 | 6516 | .patterns = &.{ |
| 6515 | 6517 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6516 | 6518 | }, |
| 6517 | 6519 | .extra_temps = .{ |
| 6518 | 6520 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6519 | | .{ .type = .i16, .kind = .{ .rc = .general_purpose } }, |
| 6520 | | .unused, |
| 6521 | | .unused, |
| 6521 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 6522 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 6523 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 6522 | 6524 | .unused, |
| 6523 | 6525 | .unused, |
| 6524 | 6526 | .unused, |
| ... | ... | @@ -6529,90 +6531,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6529 | 6531 | .clobbers = .{ .eflags = true }, |
| 6530 | 6532 | .each = .{ .once = &.{ |
| 6531 | 6533 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6532 | | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 6533 | | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 6534 | | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, |
| 6535 | | .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 6536 | | .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| 6537 | | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 6534 | .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ }, |
| 6535 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 6536 | .{ ._, .f_, .xam, ._, ._, ._, ._ }, |
| 6537 | .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ }, |
| 6538 | .{ ._, ._, .@"test", .tmp3b, .si(0b0_1_000_100), ._, ._ }, |
| 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 | 6551 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6539 | 6552 | } }, |
| 6540 | 6553 | }, .{ |
| 6541 | | .required_features = .{ .avx, 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 }, |
| 6554 | .required_features = .{ .x87, null, null, null }, |
| 6604 | 6555 | .src_constraints = .{ |
| 6605 | | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } }, |
| 6606 | | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } }, |
| 6556 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6557 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 6607 | 6558 | }, |
| 6608 | 6559 | .patterns = &.{ |
| 6609 | 6560 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6610 | 6561 | }, |
| 6611 | 6562 | .extra_temps = .{ |
| 6612 | 6563 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6613 | | .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } }, |
| 6614 | | .unused, |
| 6615 | | .unused, |
| 6564 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 6565 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 6566 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 6616 | 6567 | .unused, |
| 6617 | 6568 | .unused, |
| 6618 | 6569 | .unused, |
| ... | ... | @@ -6623,24 +6574,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6623 | 6574 | .clobbers = .{ .eflags = true }, |
| 6624 | 6575 | .each = .{ .once = &.{ |
| 6625 | 6576 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6626 | | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 6627 | | .{ ._, .vp_w, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 6628 | | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 6629 | | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 6577 | .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ }, |
| 6578 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 6579 | .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ }, |
| 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 | 6594 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6631 | 6595 | } }, |
| 6632 | 6596 | }, .{ |
| 6633 | | .required_features = .{ .avx, null, null, null }, |
| 6597 | .required_features = .{ .sse, null, null, null }, |
| 6634 | 6598 | .src_constraints = .{ |
| 6635 | | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 6636 | | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 6599 | .{ .scalar_float = .{ .of = .xword, .is = .xword } }, |
| 6600 | .{ .scalar_float = .{ .of = .xword, .is = .xword } }, |
| 6637 | 6601 | }, |
| 6638 | 6602 | .patterns = &.{ |
| 6639 | | .{ .src = .{ .to_mem, .to_mem } }, |
| 6603 | .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } }, |
| 6640 | 6604 | }, |
| 6605 | .call_frame = .{ .alignment = .@"16" }, |
| 6641 | 6606 | .extra_temps = .{ |
| 6642 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6643 | | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, |
| 6607 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } }, |
| 6608 | .unused, |
| 6644 | 6609 | .unused, |
| 6645 | 6610 | .unused, |
| 6646 | 6611 | .unused, |
| ... | ... | @@ -6649,30 +6614,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6649 | 6614 | .unused, |
| 6650 | 6615 | .unused, |
| 6651 | 6616 | }, |
| 6652 | | .dst_temps = .{.mem}, |
| 6653 | | .clobbers = .{ .eflags = true }, |
| 6617 | .dst_temps = .{.{ .ref = .src0 }}, |
| 6618 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 6654 | 6619 | .each = .{ .once = &.{ |
| 6655 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 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", ._, ._, ._ }, |
| 6620 | .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, |
| 6661 | 6621 | } }, |
| 6662 | 6622 | }, .{ |
| 6663 | | .required_features = .{ .sse4_1, null, null, null }, |
| 6623 | .required_features = .{ .avx, null, null, null }, |
| 6664 | 6624 | .src_constraints = .{ |
| 6665 | | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 6666 | | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 6625 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 6626 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 6667 | 6627 | }, |
| 6668 | 6628 | .patterns = &.{ |
| 6669 | 6629 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6670 | 6630 | }, |
| 6631 | .call_frame = .{ .alignment = .@"16" }, |
| 6671 | 6632 | .extra_temps = .{ |
| 6672 | 6633 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6673 | | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, |
| 6674 | | .unused, |
| 6675 | | .unused, |
| 6634 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 6635 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| 6636 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } }, |
| 6676 | 6637 | .unused, |
| 6677 | 6638 | .unused, |
| 6678 | 6639 | .unused, |
| ... | ... | @@ -6680,29 +6641,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6680 | 6641 | .unused, |
| 6681 | 6642 | }, |
| 6682 | 6643 | .dst_temps = .{.mem}, |
| 6683 | | .clobbers = .{ .eflags = true }, |
| 6644 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 6684 | 6645 | .each = .{ .once = &.{ |
| 6685 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6686 | | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6687 | | .{ ._, .p_w, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6688 | | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6689 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6646 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 6647 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6648 | .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6649 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 6650 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6651 | .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, |
| 6690 | 6652 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6691 | 6653 | } }, |
| 6692 | 6654 | }, .{ |
| 6693 | 6655 | .required_features = .{ .sse2, null, null, null }, |
| 6694 | 6656 | .src_constraints = .{ |
| 6695 | | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 6696 | | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 6657 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 6658 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 6697 | 6659 | }, |
| 6698 | 6660 | .patterns = &.{ |
| 6699 | 6661 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6700 | 6662 | }, |
| 6663 | .call_frame = .{ .alignment = .@"16" }, |
| 6701 | 6664 | .extra_temps = .{ |
| 6702 | 6665 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6703 | | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, |
| 6704 | | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, |
| 6705 | | .unused, |
| 6666 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 6667 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| 6668 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } }, |
| 6706 | 6669 | .unused, |
| 6707 | 6670 | .unused, |
| 6708 | 6671 | .unused, |
| ... | ... | @@ -6710,31 +6673,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6710 | 6673 | .unused, |
| 6711 | 6674 | }, |
| 6712 | 6675 | .dst_temps = .{.mem}, |
| 6713 | | .clobbers = .{ .eflags = true }, |
| 6676 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 6714 | 6677 | .each = .{ .once = &.{ |
| 6715 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6678 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 6716 | 6679 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6717 | | .{ ._, ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ }, |
| 6718 | | .{ ._, .p_w, .subus, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6719 | | .{ ._, .p_w, .sub, .tmp2x, .tmp1x, ._, ._ }, |
| 6720 | | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp2x, ._, ._ }, |
| 6721 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6680 | .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6681 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 6682 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6683 | .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, |
| 6722 | 6684 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6723 | 6685 | } }, |
| 6724 | 6686 | }, .{ |
| 6725 | | .required_features = .{ .cmov, null, null, null }, |
| 6687 | .required_features = .{ .sse, null, null, null }, |
| 6726 | 6688 | .src_constraints = .{ |
| 6727 | | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, |
| 6728 | | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, |
| 6689 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 6690 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 6729 | 6691 | }, |
| 6730 | 6692 | .patterns = &.{ |
| 6731 | 6693 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6732 | 6694 | }, |
| 6695 | .call_frame = .{ .alignment = .@"16" }, |
| 6733 | 6696 | .extra_temps = .{ |
| 6734 | 6697 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6735 | | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| 6736 | | .unused, |
| 6737 | | .unused, |
| 6698 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 6699 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| 6700 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } }, |
| 6738 | 6701 | .unused, |
| 6739 | 6702 | .unused, |
| 6740 | 6703 | .unused, |
| ... | ... | @@ -6742,19 +6705,1411 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6742 | 6705 | .unused, |
| 6743 | 6706 | }, |
| 6744 | 6707 | .dst_temps = .{.mem}, |
| 6745 | | .clobbers = .{ .eflags = true }, |
| 6746 | | .each = .{ .once = &.{ |
| 6747 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6748 | | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 6749 | | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 6750 | | .{ ._, ._ae, .cmov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 6751 | | .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| 6752 | | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 6708 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 6709 | .each = .{ .once = &.{ |
| 6710 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 6711 | .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6712 | .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6713 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 6714 | .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6715 | .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, |
| 6753 | 6716 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6754 | 6717 | } }, |
| 6755 | | }, .{ |
| 6756 | | .src_constraints = .{ |
| 6757 | | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, |
| 6718 | } }) catch |err| switch (err) { |
| 6719 | error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{ |
| 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 | 8113 | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, |
| 6759 | 8114 | }, |
| 6760 | 8115 | .patterns = &.{ |
| ... | ... | @@ -6762,9 +8117,1161 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6762 | 8117 | }, |
| 6763 | 8118 | .extra_temps = .{ |
| 6764 | 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 | 9241 | .unused, |
| 6767 | 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 | 9275 | .unused, |
| 6769 | 9276 | .unused, |
| 6770 | 9277 | .unused, |
| ... | ... | @@ -6775,92 +9282,155 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6775 | 9282 | .clobbers = .{ .eflags = true }, |
| 6776 | 9283 | .each = .{ .once = &.{ |
| 6777 | 9284 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6778 | | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 6779 | | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 9285 | .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| 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 | 9293 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, |
| 6781 | | .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 6782 | | .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| 6783 | | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 6784 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 9294 | .{ ._, ._, .lea, .tmp1p, .memia(.src1, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| 9295 | .{ .@"1:", ._, .lea, .tmp2p, .memia(.dst0, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| 9296 | .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| 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 | 9303 | .src_constraints = .{ |
| 6789 | | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 6790 | | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 9304 | .{ .scalar_float = .{ .of = .word, .is = .word } }, |
| 9305 | .{ .scalar_float = .{ .of = .word, .is = .word } }, |
| 6791 | 9306 | }, |
| 6792 | 9307 | .patterns = &.{ |
| 6793 | | .{ .src = .{ .to_sse, .mem } }, |
| 6794 | | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 6795 | 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 | 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 | 9332 | .src_constraints = .{ |
| 6804 | | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 6805 | | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 9333 | .{ .scalar_float = .{ .of = .word, .is = .word } }, |
| 9334 | .{ .scalar_float = .{ .of = .word, .is = .word } }, |
| 6806 | 9335 | }, |
| 6807 | 9336 | .patterns = &.{ |
| 6808 | | .{ .src = .{ .to_mut_sse, .mem } }, |
| 6809 | | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 6810 | | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 9337 | .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } }, |
| 9338 | }, |
| 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 | 9351 | .dst_temps = .{.{ .ref = .src0 }}, |
| 9352 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 6813 | 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 | 9358 | .src_constraints = .{ |
| 6819 | | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 6820 | | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 9359 | .{ .scalar_float = .{ .of = .qword, .is = .word } }, |
| 9360 | .{ .scalar_float = .{ .of = .qword, .is = .word } }, |
| 6821 | 9361 | }, |
| 6822 | 9362 | .patterns = &.{ |
| 6823 | | .{ .src = .{ .to_mut_sse, .mem } }, |
| 6824 | | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 6825 | | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 9363 | .{ .src = .{ .mem, .mem } }, |
| 9364 | .{ .src = .{ .to_sse, .mem } }, |
| 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 | 9380 | .each = .{ .once = &.{ |
| 6829 | | .{ ._, ._dqa, .mov, .dst0x, .src1x, ._, ._ }, |
| 6830 | | .{ ._, .p_d, .cmpgt, .dst0x, .src0x, ._, ._ }, |
| 6831 | | .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ }, |
| 6832 | | .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ }, |
| 6833 | | .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ }, |
| 9381 | .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, |
| 9382 | .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ }, |
| 9383 | .{ ._, .v_ps, .cmp, .tmp1x, .dst0x, .dst0x, .vp(.unord) }, |
| 9384 | .{ ._, .v_ps, .min, .dst0x, .tmp0x, .dst0x, ._ }, |
| 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 | 9390 | .src_constraints = .{ |
| 6838 | | .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }, |
| 6839 | | .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }, |
| 9391 | .{ .scalar_float = .{ .of = .xword, .is = .word } }, |
| 9392 | .{ .scalar_float = .{ .of = .xword, .is = .word } }, |
| 6840 | 9393 | }, |
| 6841 | 9394 | .patterns = &.{ |
| 9395 | .{ .src = .{ .mem, .mem } }, |
| 6842 | 9396 | .{ .src = .{ .to_sse, .mem } }, |
| 6843 | | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 9397 | .{ .src = .{ .mem, .to_sse } }, |
| 6844 | 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 | 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 | 9422 | .src_constraints = .{ |
| 6853 | | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }, |
| 6854 | | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }, |
| 9423 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, |
| 9424 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, |
| 6855 | 9425 | }, |
| 6856 | 9426 | .patterns = &.{ |
| 6857 | 9427 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6858 | 9428 | }, |
| 6859 | 9429 | .extra_temps = .{ |
| 6860 | 9430 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6861 | | .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } }, |
| 6862 | | .unused, |
| 6863 | | .unused, |
| 9431 | .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } }, |
| 9432 | .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } }, |
| 9433 | .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } }, |
| 6864 | 9434 | .unused, |
| 6865 | 9435 | .unused, |
| 6866 | 9436 | .unused, |
| ... | ... | @@ -6871,26 +9441,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6871 | 9441 | .clobbers = .{ .eflags = true }, |
| 6872 | 9442 | .each = .{ .once = &.{ |
| 6873 | 9443 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6874 | | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 6875 | | .{ ._, .vp_d, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 6876 | | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 6877 | | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 9444 | .{ .@"0:", .v_ps, .cvtph2, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 9445 | .{ ._, .v_ps, .cvtph2, .tmp2y, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 9446 | .{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) }, |
| 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 | 9451 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6879 | 9452 | } }, |
| 6880 | 9453 | }, .{ |
| 6881 | 9454 | .required_features = .{ .avx, null, null, null }, |
| 6882 | 9455 | .src_constraints = .{ |
| 6883 | | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 6884 | | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 9456 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 9457 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 6885 | 9458 | }, |
| 6886 | 9459 | .patterns = &.{ |
| 6887 | 9460 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6888 | 9461 | }, |
| 9462 | .call_frame = .{ .alignment = .@"16" }, |
| 6889 | 9463 | .extra_temps = .{ |
| 6890 | 9464 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6891 | | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, |
| 6892 | | .unused, |
| 6893 | | .unused, |
| 9465 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 9466 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| 9467 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } }, |
| 6894 | 9468 | .unused, |
| 6895 | 9469 | .unused, |
| 6896 | 9470 | .unused, |
| ... | ... | @@ -6898,29 +9472,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6898 | 9472 | .unused, |
| 6899 | 9473 | }, |
| 6900 | 9474 | .dst_temps = .{.mem}, |
| 6901 | | .clobbers = .{ .eflags = true }, |
| 6902 | | .each = .{ .once = &.{ |
| 6903 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6904 | | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6905 | | .{ ._, .vp_d, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 6906 | | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6907 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 9475 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 9476 | .each = .{ .once = &.{ |
| 9477 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 9478 | .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ }, |
| 9479 | .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memia(.src0w, .tmp0, .add_size), .ui(0) }, |
| 9480 | .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0) }, |
| 9481 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 9482 | .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ }, |
| 9483 | .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ }, |
| 6908 | 9484 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6909 | 9485 | } }, |
| 6910 | 9486 | }, .{ |
| 6911 | 9487 | .required_features = .{ .sse4_1, null, null, null }, |
| 6912 | 9488 | .src_constraints = .{ |
| 6913 | | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 6914 | | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 9489 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 9490 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 6915 | 9491 | }, |
| 6916 | 9492 | .patterns = &.{ |
| 6917 | 9493 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6918 | 9494 | }, |
| 9495 | .call_frame = .{ .alignment = .@"16" }, |
| 6919 | 9496 | .extra_temps = .{ |
| 6920 | 9497 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6921 | | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, |
| 6922 | | .unused, |
| 6923 | | .unused, |
| 9498 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 9499 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| 9500 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } }, |
| 6924 | 9501 | .unused, |
| 6925 | 9502 | .unused, |
| 6926 | 9503 | .unused, |
| ... | ... | @@ -6928,91 +9505,103 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6928 | 9505 | .unused, |
| 6929 | 9506 | }, |
| 6930 | 9507 | .dst_temps = .{.mem}, |
| 6931 | | .clobbers = .{ .eflags = true }, |
| 6932 | | .each = .{ .once = &.{ |
| 6933 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6934 | | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6935 | | .{ ._, .p_d, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6936 | | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6937 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 9508 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 9509 | .each = .{ .once = &.{ |
| 9510 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 9511 | .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| 9512 | .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ }, |
| 9513 | .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ }, |
| 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 | 9518 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6939 | 9519 | } }, |
| 6940 | 9520 | }, .{ |
| 6941 | 9521 | .required_features = .{ .sse2, null, null, null }, |
| 6942 | 9522 | .src_constraints = .{ |
| 6943 | | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 6944 | | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 9523 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 9524 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 6945 | 9525 | }, |
| 6946 | 9526 | .patterns = &.{ |
| 6947 | 9527 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6948 | 9528 | }, |
| 9529 | .call_frame = .{ .alignment = .@"16" }, |
| 6949 | 9530 | .extra_temps = .{ |
| 6950 | 9531 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6951 | | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, |
| 6952 | | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, |
| 6953 | | .unused, |
| 6954 | | .unused, |
| 9532 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 9533 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| 9534 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } }, |
| 9535 | .{ .type = .f16, .kind = .{ .reg = .ax } }, |
| 6955 | 9536 | .unused, |
| 6956 | 9537 | .unused, |
| 6957 | 9538 | .unused, |
| 6958 | 9539 | .unused, |
| 6959 | 9540 | }, |
| 6960 | 9541 | .dst_temps = .{.mem}, |
| 6961 | | .clobbers = .{ .eflags = true }, |
| 6962 | | .each = .{ .once = &.{ |
| 6963 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6964 | | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6965 | | .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6966 | | .{ ._, .p_d, .cmpgt, .tmp1x, .tmp2x, ._, ._ }, |
| 6967 | | .{ ._, .p_, .@"and", .tmp2x, .tmp1x, ._, ._ }, |
| 6968 | | .{ ._, .p_, .andn, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6969 | | .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ }, |
| 6970 | | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6971 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 9542 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 9543 | .each = .{ .once = &.{ |
| 9544 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 9545 | .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| 9546 | .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ }, |
| 9547 | .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ }, |
| 9548 | .{ ._, .p_w, .insr, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0), ._ }, |
| 9549 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 9550 | .{ ._, .p_w, .extr, .tmp4d, .tmp1x, .ui(0), ._ }, |
| 9551 | .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp4w, ._, ._ }, |
| 9552 | .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ }, |
| 6972 | 9553 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6973 | 9554 | } }, |
| 6974 | 9555 | }, .{ |
| 6975 | | .required_features = .{ .cmov, null, null, null }, |
| 9556 | .required_features = .{ .sse, null, null, null }, |
| 6976 | 9557 | .src_constraints = .{ |
| 6977 | | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| 6978 | | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| 9558 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 9559 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 6979 | 9560 | }, |
| 6980 | 9561 | .patterns = &.{ |
| 6981 | 9562 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6982 | 9563 | }, |
| 9564 | .call_frame = .{ .alignment = .@"16" }, |
| 6983 | 9565 | .extra_temps = .{ |
| 6984 | 9566 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6985 | | .{ .type = .i32, .kind = .{ .rc = .general_purpose } }, |
| 6986 | | .unused, |
| 6987 | | .unused, |
| 6988 | | .unused, |
| 6989 | | .unused, |
| 9567 | .{ .type = .f16, .kind = .{ .reg = .eax } }, |
| 9568 | .{ .type = .f32, .kind = .mem }, |
| 9569 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 9570 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| 9571 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } }, |
| 6990 | 9572 | .unused, |
| 6991 | 9573 | .unused, |
| 6992 | 9574 | .unused, |
| 6993 | 9575 | }, |
| 6994 | 9576 | .dst_temps = .{.mem}, |
| 6995 | | .clobbers = .{ .eflags = true }, |
| 9577 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 6996 | 9578 | .each = .{ .once = &.{ |
| 6997 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6998 | | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 6999 | | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 7000 | | .{ ._, ._ge, .cmov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 7001 | | .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ }, |
| 7002 | | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| 9579 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 9580 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 9581 | .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ }, |
| 9582 | .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ }, |
| 9583 | .{ ._, ._, .movzx, .tmp1d, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 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 | 9591 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7004 | 9592 | } }, |
| 7005 | 9593 | }, .{ |
| 9594 | .required_features = .{ .avx, null, null, null }, |
| 7006 | 9595 | .src_constraints = .{ |
| 7007 | | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| 7008 | | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| 9596 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 9597 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 7009 | 9598 | }, |
| 7010 | 9599 | .patterns = &.{ |
| 7011 | | .{ .src = .{ .to_mem, .to_mem } }, |
| 9600 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7012 | 9601 | }, |
| 7013 | 9602 | .extra_temps = .{ |
| 7014 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7015 | | .{ .type = .i32, .kind = .{ .rc = .general_purpose } }, |
| 9603 | .{ .type = .f32, .kind = .{ .rc = .sse } }, |
| 9604 | .unused, |
| 7016 | 9605 | .unused, |
| 7017 | 9606 | .unused, |
| 7018 | 9607 | .unused, |
| ... | ... | @@ -7021,63 +9610,70 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7021 | 9610 | .unused, |
| 7022 | 9611 | .unused, |
| 7023 | 9612 | }, |
| 7024 | | .dst_temps = .{.mem}, |
| 7025 | | .clobbers = .{ .eflags = true }, |
| 9613 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 7026 | 9614 | .each = .{ .once = &.{ |
| 7027 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7028 | | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 7029 | | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 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", ._, ._, ._ }, |
| 9615 | .{ ._, .v_ss, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) }, |
| 9616 | .{ ._, .v_ss, .min, .dst0x, .src1x, .src0x, ._ }, |
| 9617 | .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .src1x, .tmp0x }, |
| 7035 | 9618 | } }, |
| 7036 | 9619 | }, .{ |
| 7037 | | .required_features = .{ .avx, null, null, null }, |
| 9620 | .required_features = .{ .sse4_1, null, null, null }, |
| 7038 | 9621 | .src_constraints = .{ |
| 7039 | | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 7040 | | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 9622 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 9623 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 7041 | 9624 | }, |
| 7042 | 9625 | .patterns = &.{ |
| 7043 | | .{ .src = .{ .to_sse, .mem } }, |
| 7044 | | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 7045 | | .{ .src = .{ .to_sse, .to_sse } }, |
| 9626 | .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } }, |
| 7046 | 9627 | }, |
| 7047 | 9628 | .dst_temps = .{.{ .rc = .sse }}, |
| 7048 | 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 | 9637 | .src_constraints = .{ |
| 7054 | | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 7055 | | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 9638 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 9639 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 7056 | 9640 | }, |
| 7057 | 9641 | .patterns = &.{ |
| 7058 | | .{ .src = .{ .to_mut_sse, .mem } }, |
| 7059 | | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 7060 | 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 | 9655 | .dst_temps = .{.{ .ref = .src0 }}, |
| 7063 | 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 | 9666 | .src_constraints = .{ |
| 7069 | | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 7070 | | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 9667 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 9668 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 7071 | 9669 | }, |
| 7072 | 9670 | .patterns = &.{ |
| 7073 | | .{ .src = .{ .to_mut_sse, .mem } }, |
| 7074 | | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 7075 | | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 9671 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7076 | 9672 | }, |
| 7077 | 9673 | .extra_temps = .{ |
| 7078 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 7079 | | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| 7080 | | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 9674 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 9675 | .unused, |
| 9676 | .unused, |
| 7081 | 9677 | .unused, |
| 7082 | 9678 | .unused, |
| 7083 | 9679 | .unused, |
| ... | ... | @@ -7085,45 +9681,44 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7085 | 9681 | .unused, |
| 7086 | 9682 | .unused, |
| 7087 | 9683 | }, |
| 7088 | | .dst_temps = .{.{ .rc = .sse }}, |
| 9684 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 7089 | 9685 | .each = .{ .once = &.{ |
| 7090 | | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 7091 | | .{ ._, ._dqa, .mov, .dst0x, .lea(.xword, .tmp0), ._, ._ }, |
| 7092 | | .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ }, |
| 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, ._, ._ }, |
| 9686 | .{ ._, .v_ps, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) }, |
| 9687 | .{ ._, .v_ps, .min, .dst0x, .src1x, .src0x, ._ }, |
| 9688 | .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .src1x, .tmp0x }, |
| 7099 | 9689 | } }, |
| 7100 | 9690 | }, .{ |
| 7101 | | .required_features = .{ .avx2, null, null, null }, |
| 9691 | .required_features = .{ .sse4_1, null, null, null }, |
| 7102 | 9692 | .src_constraints = .{ |
| 7103 | | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, |
| 7104 | | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, |
| 9693 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 9694 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 7105 | 9695 | }, |
| 7106 | 9696 | .patterns = &.{ |
| 7107 | | .{ .src = .{ .to_sse, .mem } }, |
| 7108 | | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 7109 | | .{ .src = .{ .to_sse, .to_sse } }, |
| 9697 | .{ .src = .{ .{ .to_reg = .xmm0 }, .mem } }, |
| 9698 | .{ .src = .{ .mem, .{ .to_reg = .xmm0 } }, .commute = .{ 0, 1 } }, |
| 9699 | .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } }, |
| 7110 | 9700 | }, |
| 7111 | 9701 | .dst_temps = .{.{ .rc = .sse }}, |
| 7112 | 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 | 9710 | .src_constraints = .{ |
| 7118 | | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, |
| 7119 | | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, |
| 9711 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 9712 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 7120 | 9713 | }, |
| 7121 | 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 | 9719 | .extra_temps = .{ |
| 7125 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7126 | | .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } }, |
| 9720 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 9721 | .unused, |
| 7127 | 9722 | .unused, |
| 7128 | 9723 | .unused, |
| 7129 | 9724 | .unused, |
| ... | ... | @@ -7132,28 +9727,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7132 | 9727 | .unused, |
| 7133 | 9728 | .unused, |
| 7134 | 9729 | }, |
| 7135 | | .dst_temps = .{.mem}, |
| 7136 | | .clobbers = .{ .eflags = true }, |
| 9730 | .dst_temps = .{.{ .ref = .src0 }}, |
| 7137 | 9731 | .each = .{ .once = &.{ |
| 7138 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7139 | | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 7140 | | .{ ._, .vp_d, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 7141 | | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 7142 | | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 7143 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 9732 | .{ ._, ._ps, .mova, .tmp0x, .src1x, ._, ._ }, |
| 9733 | .{ ._, ._ps, .min, .tmp0x, .src0x, ._, ._ }, |
| 9734 | .{ ._, ._ps, .cmp, .dst0x, .src0x, .vp(.ord), ._ }, |
| 9735 | .{ ._, ._ps, .@"and", .tmp0x, .dst0x, ._, ._ }, |
| 9736 | .{ ._, ._ps, .andn, .dst0x, .src1x, ._, ._ }, |
| 9737 | .{ ._, ._ps, .@"or", .dst0x, .tmp0x, ._, ._ }, |
| 7144 | 9738 | } }, |
| 7145 | 9739 | }, .{ |
| 7146 | 9740 | .required_features = .{ .avx, null, null, null }, |
| 7147 | 9741 | .src_constraints = .{ |
| 7148 | | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 7149 | | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 9742 | .{ .scalar_float = .{ .of = .yword, .is = .dword } }, |
| 9743 | .{ .scalar_float = .{ .of = .yword, .is = .dword } }, |
| 7150 | 9744 | }, |
| 7151 | 9745 | .patterns = &.{ |
| 7152 | | .{ .src = .{ .to_mem, .to_mem } }, |
| 9746 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7153 | 9747 | }, |
| 7154 | 9748 | .extra_temps = .{ |
| 7155 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7156 | | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 9749 | .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, |
| 9750 | .unused, |
| 7157 | 9751 | .unused, |
| 7158 | 9752 | .unused, |
| 7159 | 9753 | .unused, |
| ... | ... | @@ -7162,30 +9756,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7162 | 9756 | .unused, |
| 7163 | 9757 | .unused, |
| 7164 | 9758 | }, |
| 7165 | | .dst_temps = .{.mem}, |
| 7166 | | .clobbers = .{ .eflags = true }, |
| 9759 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 7167 | 9760 | .each = .{ .once = &.{ |
| 7168 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7169 | | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7170 | | .{ ._, .vp_d, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 7171 | | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 7172 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 7173 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 9761 | .{ ._, .v_ps, .cmp, .tmp0y, .src0y, .src0y, .vp(.unord) }, |
| 9762 | .{ ._, .v_ps, .min, .dst0y, .src1y, .src0y, ._ }, |
| 9763 | .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .src1y, .tmp0y }, |
| 7174 | 9764 | } }, |
| 7175 | 9765 | }, .{ |
| 7176 | | .required_features = .{ .sse4_1, null, null, null }, |
| 9766 | .required_features = .{ .avx, null, null, null }, |
| 7177 | 9767 | .src_constraints = .{ |
| 7178 | | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 7179 | | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 9768 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, |
| 9769 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, |
| 7180 | 9770 | }, |
| 7181 | 9771 | .patterns = &.{ |
| 7182 | 9772 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7183 | 9773 | }, |
| 7184 | 9774 | .extra_temps = .{ |
| 7185 | 9775 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7186 | | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 7187 | | .unused, |
| 7188 | | .unused, |
| 9776 | .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, |
| 9777 | .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, |
| 9778 | .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, |
| 7189 | 9779 | .unused, |
| 7190 | 9780 | .unused, |
| 7191 | 9781 | .unused, |
| ... | ... | @@ -7195,67 +9785,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7195 | 9785 | .dst_temps = .{.mem}, |
| 7196 | 9786 | .clobbers = .{ .eflags = true }, |
| 7197 | 9787 | .each = .{ .once = &.{ |
| 7198 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7199 | | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7200 | | .{ ._, .p_d, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7201 | | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 7202 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 9788 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 9789 | .{ .@"0:", .v_ps, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 9790 | .{ ._, .v_ps, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, |
| 9791 | .{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) }, |
| 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 | 9796 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7204 | 9797 | } }, |
| 7205 | 9798 | }, .{ |
| 7206 | | .required_features = .{ .sse2, null, null, null }, |
| 9799 | .required_features = .{ .sse4_1, null, null, null }, |
| 7207 | 9800 | .src_constraints = .{ |
| 7208 | | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 7209 | | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 9801 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, |
| 9802 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, |
| 7210 | 9803 | }, |
| 7211 | 9804 | .patterns = &.{ |
| 7212 | 9805 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7213 | 9806 | }, |
| 7214 | 9807 | .extra_temps = .{ |
| 7215 | 9808 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7216 | | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| 7217 | | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 7218 | | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 7219 | | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 7220 | | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 7221 | | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 9809 | .{ .type = .vector_4_f32, .kind = .{ .reg = .xmm0 } }, |
| 9810 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 9811 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 9812 | .unused, |
| 9813 | .unused, |
| 9814 | .unused, |
| 7222 | 9815 | .unused, |
| 7223 | 9816 | .unused, |
| 7224 | 9817 | }, |
| 7225 | 9818 | .dst_temps = .{.mem}, |
| 7226 | 9819 | .clobbers = .{ .eflags = true }, |
| 7227 | 9820 | .each = .{ .once = &.{ |
| 7228 | | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 7229 | | .{ ._, ._dqa, .mov, .tmp2x, .lea(.xword, .tmp0), ._, ._ }, |
| 7230 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7231 | | .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7232 | | .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7233 | | .{ ._, ._dqa, .mov, .tmp5x, .tmp3x, ._, ._ }, |
| 7234 | | .{ ._, ._dqa, .mov, .tmp6x, .tmp4x, ._, ._ }, |
| 7235 | | .{ ._, .p_, .xor, .tmp5x, .tmp2x, ._, ._ }, |
| 7236 | | .{ ._, .p_, .xor, .tmp6x, .tmp2x, ._, ._ }, |
| 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), ._, ._ }, |
| 9821 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 9822 | .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 9823 | .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 9824 | .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ }, |
| 9825 | .{ ._, ._ps, .min, .tmp3x, .tmp1x, ._, ._ }, |
| 9826 | .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ }, |
| 9827 | .{ ._, ._ps, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ }, |
| 9828 | .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, |
| 9829 | .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, |
| 7243 | 9830 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7244 | 9831 | } }, |
| 7245 | 9832 | }, .{ |
| 7246 | | .required_features = .{ .cmov, null, null, null }, |
| 9833 | .required_features = .{ .sse, null, null, null }, |
| 7247 | 9834 | .src_constraints = .{ |
| 7248 | | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| 7249 | | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| 9835 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, |
| 9836 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, |
| 7250 | 9837 | }, |
| 7251 | 9838 | .patterns = &.{ |
| 7252 | 9839 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7253 | 9840 | }, |
| 7254 | 9841 | .extra_temps = .{ |
| 7255 | 9842 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7256 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 7257 | | .unused, |
| 7258 | | .unused, |
| 9843 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 9844 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 9845 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 7259 | 9846 | .unused, |
| 7260 | 9847 | .unused, |
| 7261 | 9848 | .unused, |
| ... | ... | @@ -7265,25 +9852,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7265 | 9852 | .dst_temps = .{.mem}, |
| 7266 | 9853 | .clobbers = .{ .eflags = true }, |
| 7267 | 9854 | .each = .{ .once = &.{ |
| 7268 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7269 | | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 7270 | | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 7271 | | .{ ._, ._ae, .cmov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 7272 | | .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ }, |
| 7273 | | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| 9855 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 9856 | .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 9857 | .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 9858 | .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ }, |
| 9859 | .{ ._, ._ps, .min, .tmp3x, .tmp1x, ._, ._ }, |
| 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 | 9866 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7275 | 9867 | } }, |
| 7276 | 9868 | }, .{ |
| 9869 | .required_features = .{ .avx, null, null, null }, |
| 7277 | 9870 | .src_constraints = .{ |
| 7278 | | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| 7279 | | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| 9871 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 9872 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 7280 | 9873 | }, |
| 7281 | 9874 | .patterns = &.{ |
| 7282 | | .{ .src = .{ .to_mem, .to_mem } }, |
| 9875 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7283 | 9876 | }, |
| 7284 | 9877 | .extra_temps = .{ |
| 7285 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7286 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 9878 | .{ .type = .f64, .kind = .{ .rc = .sse } }, |
| 9879 | .unused, |
| 7287 | 9880 | .unused, |
| 7288 | 9881 | .unused, |
| 7289 | 9882 | .unused, |
| ... | ... | @@ -7292,47 +9885,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7292 | 9885 | .unused, |
| 7293 | 9886 | .unused, |
| 7294 | 9887 | }, |
| 7295 | | .dst_temps = .{.mem}, |
| 7296 | | .clobbers = .{ .eflags = true }, |
| 9888 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 7297 | 9889 | .each = .{ .once = &.{ |
| 7298 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7299 | | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 7300 | | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 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", ._, ._, ._ }, |
| 9890 | .{ ._, .v_sd, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) }, |
| 9891 | .{ ._, .v_sd, .min, .dst0x, .src1x, .src0x, ._ }, |
| 9892 | .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .src1x, .tmp0x }, |
| 7306 | 9893 | } }, |
| 7307 | 9894 | }, .{ |
| 7308 | | .required_features = .{ .avx, null, null, null }, |
| 9895 | .required_features = .{ .sse4_1, null, null, null }, |
| 7309 | 9896 | .src_constraints = .{ |
| 7310 | | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| 7311 | | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| 9897 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 9898 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 7312 | 9899 | }, |
| 7313 | 9900 | .patterns = &.{ |
| 7314 | | .{ .src = .{ .to_sse, .mem } }, |
| 7315 | | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 7316 | | .{ .src = .{ .to_sse, .to_sse } }, |
| 9901 | .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } }, |
| 7317 | 9902 | }, |
| 7318 | 9903 | .dst_temps = .{.{ .rc = .sse }}, |
| 7319 | 9904 | .each = .{ .once = &.{ |
| 7320 | | .{ ._, .vp_q, .cmpgt, .dst0x, .src0x, .src1x, ._ }, |
| 7321 | | .{ ._, .vp_b, .blendv, .dst0x, .src0x, .src1x, .dst0x }, |
| 9905 | .{ ._, ._pd, .mova, .dst0x, .src1x, ._, ._ }, |
| 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 | 9912 | .src_constraints = .{ |
| 7326 | | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| 7327 | | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| 9913 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 9914 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 7328 | 9915 | }, |
| 7329 | 9916 | .patterns = &.{ |
| 7330 | | .{ .src = .{ .to_mut_sse, .mem } }, |
| 7331 | | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 7332 | 9917 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 7333 | 9918 | }, |
| 7334 | 9919 | .extra_temps = .{ |
| 7335 | | .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } }, |
| 9920 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 7336 | 9921 | .unused, |
| 7337 | 9922 | .unused, |
| 7338 | 9923 | .unused, |
| ... | ... | @@ -7344,72 +9929,154 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7344 | 9929 | }, |
| 7345 | 9930 | .dst_temps = .{.{ .ref = .src0 }}, |
| 7346 | 9931 | .each = .{ .once = &.{ |
| 7347 | | .{ ._, ._dqa, .mov, .tmp0x, .src0x, ._, ._ }, |
| 7348 | | .{ ._, .p_q, .cmpgt, .tmp0x, .src1x, ._, ._ }, |
| 7349 | | .{ ._, .p_b, .blendv, .dst0x, .src1x, .tmp0x, ._ }, |
| 9932 | .{ ._, ._pd, .mova, .tmp0x, .src1x, ._, ._ }, |
| 9933 | .{ ._, ._sd, .min, .tmp0x, .src0x, ._, ._ }, |
| 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 | 9941 | .src_constraints = .{ |
| 7354 | | .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }, |
| 7355 | | .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }, |
| 9942 | .{ .scalar_float = .{ .of = .qword, .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 | 9971 | .patterns = &.{ |
| 7358 | | .{ .src = .{ .to_sse, .mem } }, |
| 7359 | | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 7360 | 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 | 10002 | .dst_temps = .{.{ .rc = .sse }}, |
| 7363 | 10003 | .each = .{ .once = &.{ |
| 7364 | | .{ ._, .vp_q, .cmpgt, .dst0y, .src0y, .src1y, ._ }, |
| 7365 | | .{ ._, .vp_b, .blendv, .dst0y, .src0y, .src1y, .dst0y }, |
| 10004 | .{ ._, ._pd, .mova, .dst0x, .src1x, ._, ._ }, |
| 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 | 10042 | .src_constraints = .{ |
| 7370 | | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } }, |
| 7371 | | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } }, |
| 10043 | .{ .scalar_float = .{ .of = .yword, .is = .qword } }, |
| 10044 | .{ .scalar_float = .{ .of = .yword, .is = .qword } }, |
| 7372 | 10045 | }, |
| 7373 | 10046 | .patterns = &.{ |
| 7374 | | .{ .src = .{ .to_mem, .to_mem } }, |
| 10047 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7375 | 10048 | }, |
| 7376 | 10049 | .extra_temps = .{ |
| 7377 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7378 | | .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } }, |
| 7379 | | .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } }, |
| 7380 | | .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } }, |
| 10050 | .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, |
| 10051 | .unused, |
| 10052 | .unused, |
| 10053 | .unused, |
| 7381 | 10054 | .unused, |
| 7382 | 10055 | .unused, |
| 7383 | 10056 | .unused, |
| 7384 | 10057 | .unused, |
| 7385 | 10058 | .unused, |
| 7386 | 10059 | }, |
| 7387 | | .dst_temps = .{.mem}, |
| 7388 | | .clobbers = .{ .eflags = true }, |
| 10060 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 7389 | 10061 | .each = .{ .once = &.{ |
| 7390 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7391 | | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 7392 | | .{ ._, .v_dqa, .mov, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, |
| 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", ._, ._, ._ }, |
| 10062 | .{ ._, .v_pd, .cmp, .tmp0y, .src0y, .src0y, .vp(.unord) }, |
| 10063 | .{ ._, .v_pd, .min, .dst0y, .src1y, .src0y, ._ }, |
| 10064 | .{ ._, .v_pd, .blendv, .dst0y, .dst0y, .src1y, .tmp0y }, |
| 7398 | 10065 | } }, |
| 7399 | 10066 | }, .{ |
| 7400 | 10067 | .required_features = .{ .avx, null, null, null }, |
| 7401 | 10068 | .src_constraints = .{ |
| 7402 | | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| 7403 | | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| 10069 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, |
| 10070 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, |
| 7404 | 10071 | }, |
| 7405 | 10072 | .patterns = &.{ |
| 7406 | 10073 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7407 | 10074 | }, |
| 7408 | 10075 | .extra_temps = .{ |
| 7409 | 10076 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7410 | | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| 7411 | | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| 7412 | | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| 10077 | .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, |
| 10078 | .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, |
| 10079 | .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, |
| 7413 | 10080 | .unused, |
| 7414 | 10081 | .unused, |
| 7415 | 10082 | .unused, |
| ... | ... | @@ -7419,29 +10086,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7419 | 10086 | .dst_temps = .{.mem}, |
| 7420 | 10087 | .clobbers = .{ .eflags = true }, |
| 7421 | 10088 | .each = .{ .once = &.{ |
| 7422 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7423 | | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7424 | | .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7425 | | .{ ._, .vp_q, .cmpgt, .tmp3x, .tmp1x, .tmp2x, ._ }, |
| 7426 | | .{ ._, .vp_b, .blendv, .tmp1x, .tmp1x, .tmp2x, .tmp3x }, |
| 7427 | | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 7428 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 10089 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 10090 | .{ .@"0:", .v_pd, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 10091 | .{ ._, .v_pd, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, |
| 10092 | .{ ._, .v_pd, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) }, |
| 10093 | .{ ._, .v_pd, .min, .tmp1y, .tmp2y, .tmp1y, ._ }, |
| 10094 | .{ ._, .v_pd, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y }, |
| 10095 | .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 10096 | .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ }, |
| 7429 | 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 | 10101 | .src_constraints = .{ |
| 7434 | | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| 7435 | | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| 10102 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, |
| 10103 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, |
| 7436 | 10104 | }, |
| 7437 | 10105 | .patterns = &.{ |
| 7438 | 10106 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7439 | 10107 | }, |
| 7440 | 10108 | .extra_temps = .{ |
| 7441 | 10109 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7442 | | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| 7443 | | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| 7444 | | .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } }, |
| 10110 | .{ .type = .vector_2_f64, .kind = .{ .reg = .xmm0 } }, |
| 10111 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 10112 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 7445 | 10113 | .unused, |
| 7446 | 10114 | .unused, |
| 7447 | 10115 | .unused, |
| ... | ... | @@ -7451,30 +10119,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7451 | 10119 | .dst_temps = .{.mem}, |
| 7452 | 10120 | .clobbers = .{ .eflags = true }, |
| 7453 | 10121 | .each = .{ .once = &.{ |
| 7454 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7455 | | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7456 | | .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7457 | | .{ ._, ._dqa, .mov, .tmp3x, .tmp1x, ._, ._ }, |
| 7458 | | .{ ._, .p_q, .cmpgt, .tmp3x, .tmp2x, ._, ._ }, |
| 7459 | | .{ ._, .p_b, .blendv, .tmp1x, .tmp2x, .tmp3x, ._ }, |
| 7460 | | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 7461 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 10122 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 10123 | .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 10124 | .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 10125 | .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ }, |
| 10126 | .{ ._, ._pd, .min, .tmp3x, .tmp1x, ._, ._ }, |
| 10127 | .{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ }, |
| 10128 | .{ ._, ._pd, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ }, |
| 10129 | .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, |
| 10130 | .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, |
| 7462 | 10131 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7463 | 10132 | } }, |
| 7464 | 10133 | }, .{ |
| 7465 | | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 10134 | .required_features = .{ .sse2, null, null, null }, |
| 7466 | 10135 | .src_constraints = .{ |
| 7467 | | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, |
| 7468 | | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, |
| 10136 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, |
| 10137 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, |
| 7469 | 10138 | }, |
| 7470 | 10139 | .patterns = &.{ |
| 7471 | 10140 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7472 | 10141 | }, |
| 7473 | 10142 | .extra_temps = .{ |
| 7474 | 10143 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7475 | | .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, |
| 7476 | | .unused, |
| 7477 | | .unused, |
| 10144 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 10145 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 10146 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| 7478 | 10147 | .unused, |
| 7479 | 10148 | .unused, |
| 7480 | 10149 | .unused, |
| ... | ... | @@ -7484,28 +10153,34 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7484 | 10153 | .dst_temps = .{.mem}, |
| 7485 | 10154 | .clobbers = .{ .eflags = true }, |
| 7486 | 10155 | .each = .{ .once = &.{ |
| 7487 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7488 | | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 7489 | | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7490 | | .{ ._, ._ge, .cmov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7491 | | .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| 7492 | | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 10156 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 10157 | .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 10158 | .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 10159 | .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ }, |
| 10160 | .{ ._, ._pd, .min, .tmp3x, .tmp1x, ._, ._ }, |
| 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 | 10167 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7494 | 10168 | } }, |
| 7495 | 10169 | }, .{ |
| 7496 | | .required_features = .{ .@"64bit", null, null, null }, |
| 10170 | .required_features = .{ .sse, null, null, null }, |
| 7497 | 10171 | .src_constraints = .{ |
| 7498 | | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, |
| 7499 | | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, |
| 10172 | .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, |
| 10173 | .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, |
| 7500 | 10174 | }, |
| 7501 | 10175 | .patterns = &.{ |
| 7502 | 10176 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7503 | 10177 | }, |
| 10178 | .call_frame = .{ .alignment = .@"16" }, |
| 7504 | 10179 | .extra_temps = .{ |
| 7505 | 10180 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7506 | | .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, |
| 7507 | | .unused, |
| 7508 | | .unused, |
| 10181 | .{ .type = .f64, .kind = .{ .reg = .xmm0 } }, |
| 10182 | .{ .type = .f64, .kind = .{ .reg = .xmm1 } }, |
| 10183 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmin" } } }, |
| 7509 | 10184 | .unused, |
| 7510 | 10185 | .unused, |
| 7511 | 10186 | .unused, |
| ... | ... | @@ -7513,32 +10188,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7513 | 10188 | .unused, |
| 7514 | 10189 | }, |
| 7515 | 10190 | .dst_temps = .{.mem}, |
| 7516 | | .clobbers = .{ .eflags = true }, |
| 7517 | | .each = .{ .once = &.{ |
| 7518 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7519 | | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 7520 | | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7521 | | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, |
| 7522 | | .{ ._, ._, .mov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7523 | | .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| 7524 | | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 10191 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 10192 | .each = .{ .once = &.{ |
| 10193 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 10194 | .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| 10195 | .{ ._, ._ps, .xor, .tmp2x, .tmp2x, ._, ._ }, |
| 10196 | .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 10197 | .{ ._, ._ps, .movl, .tmp2x, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 10198 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 10199 | .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| 10200 | .{ ._, ._, .add, .tmp0q, .si(8), ._, ._ }, |
| 7525 | 10201 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7526 | 10202 | } }, |
| 7527 | 10203 | }, .{ |
| 7528 | | .required_features = .{ .avx, null, null, null }, |
| 10204 | .required_features = .{ .x87, .cmov, null, null }, |
| 7529 | 10205 | .src_constraints = .{ |
| 7530 | | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| 7531 | | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| 10206 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 10207 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7532 | 10208 | }, |
| 7533 | 10209 | .patterns = &.{ |
| 7534 | | .{ .src = .{ .to_sse, .mem } }, |
| 7535 | | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 7536 | | .{ .src = .{ .to_sse, .to_sse } }, |
| 10210 | .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } }, |
| 10211 | .{ .src = .{ .mem, .to_x87 } }, |
| 10212 | .{ .src = .{ .to_x87, .to_x87 } }, |
| 7537 | 10213 | }, |
| 7538 | 10214 | .extra_temps = .{ |
| 7539 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 7540 | | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| 7541 | | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 10215 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 10216 | .unused, |
| 10217 | .unused, |
| 7542 | 10218 | .unused, |
| 7543 | 10219 | .unused, |
| 7544 | 10220 | .unused, |
| ... | ... | @@ -7546,62 +10222,69 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7546 | 10222 | .unused, |
| 7547 | 10223 | .unused, |
| 7548 | 10224 | }, |
| 7549 | | .dst_temps = .{.{ .rc = .sse }}, |
| 10225 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }}, |
| 10226 | .clobbers = .{ .eflags = true }, |
| 7550 | 10227 | .each = .{ .once = &.{ |
| 7551 | | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 7552 | | .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, |
| 7553 | | .{ ._, .vp_, .xor, .dst0x, .tmp2x, .src0x, ._ }, |
| 7554 | | .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .src1x, ._ }, |
| 7555 | | .{ ._, .vp_q, .cmpgt, .dst0x, .dst0x, .tmp2x, ._ }, |
| 7556 | | .{ ._, .vp_b, .blendv, .dst0x, .src0x, .src1x, .dst0x }, |
| 10228 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 10229 | .{ ._, .f_, .ucomi, .tmp0t, .tmp0t, ._, ._ }, |
| 10230 | .{ ._, .f_u, .cmov, .tmp0t, .src1t, ._, ._ }, |
| 10231 | .{ ._, .f_, .ucomi, .tmp0t, .src1t, ._, ._ }, |
| 10232 | .{ ._, .f_nb, .cmov, .tmp0t, .src1t, ._, ._ }, |
| 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 | 10237 | .src_constraints = .{ |
| 7561 | | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| 7562 | | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| 10238 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 10239 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7563 | 10240 | }, |
| 7564 | 10241 | .patterns = &.{ |
| 7565 | | .{ .src = .{ .to_mut_sse, .mem } }, |
| 7566 | | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 7567 | | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 10242 | .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } }, |
| 10243 | .{ .src = .{ .mem, .to_x87 } }, |
| 10244 | .{ .src = .{ .to_x87, .to_x87 } }, |
| 7568 | 10245 | }, |
| 7569 | 10246 | .extra_temps = .{ |
| 7570 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 7571 | | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| 7572 | | .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } }, |
| 7573 | | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 10247 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 10248 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 10249 | .unused, |
| 10250 | .unused, |
| 7574 | 10251 | .unused, |
| 7575 | 10252 | .unused, |
| 7576 | 10253 | .unused, |
| 7577 | 10254 | .unused, |
| 7578 | 10255 | .unused, |
| 7579 | 10256 | }, |
| 7580 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 10257 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }}, |
| 10258 | .clobbers = .{ .eflags = true }, |
| 7581 | 10259 | .each = .{ .once = &.{ |
| 7582 | | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 7583 | | .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, |
| 7584 | | .{ ._, ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ }, |
| 7585 | | .{ ._, .p_, .xor, .tmp2x, .src0x, ._, ._ }, |
| 7586 | | .{ ._, .p_, .xor, .tmp3x, .src1x, ._, ._ }, |
| 7587 | | .{ ._, .p_q, .cmpgt, .tmp2x, .tmp3x, ._, ._ }, |
| 7588 | | .{ ._, .p_b, .blendv, .dst0x, .src1x, .tmp2x, ._ }, |
| 7589 | | } }, |
| 7590 | | }, .{ |
| 7591 | | .required_features = .{ .avx2, null, null, null }, |
| 10260 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 10261 | .{ ._, .f_, .ucom, .tmp0t, ._, ._, ._ }, |
| 10262 | .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ }, |
| 10263 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 10264 | .{ ._, ._p, .j, .@"0f", ._, ._, ._ }, |
| 10265 | .{ ._, .f_, .ucom, .src1t, ._, ._, ._ }, |
| 10266 | .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ }, |
| 10267 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 10268 | .{ ._, ._b, .j, .@"1f", ._, ._, ._ }, |
| 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 | 10275 | .src_constraints = .{ |
| 7593 | | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, |
| 7594 | | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, |
| 10276 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 10277 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7595 | 10278 | }, |
| 7596 | 10279 | .patterns = &.{ |
| 7597 | | .{ .src = .{ .to_sse, .mem } }, |
| 7598 | | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 7599 | | .{ .src = .{ .to_sse, .to_sse } }, |
| 10280 | .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } }, |
| 10281 | .{ .src = .{ .mem, .to_x87 } }, |
| 10282 | .{ .src = .{ .to_x87, .to_x87 } }, |
| 7600 | 10283 | }, |
| 7601 | 10284 | .extra_temps = .{ |
| 7602 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 7603 | | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| 7604 | | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| 10285 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 10286 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 10287 | .unused, |
| 7605 | 10288 | .unused, |
| 7606 | 10289 | .unused, |
| 7607 | 10290 | .unused, |
| ... | ... | @@ -7609,139 +10292,150 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7609 | 10292 | .unused, |
| 7610 | 10293 | .unused, |
| 7611 | 10294 | }, |
| 7612 | | .dst_temps = .{.{ .rc = .sse }}, |
| 10295 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }}, |
| 10296 | .clobbers = .{ .eflags = true }, |
| 7613 | 10297 | .each = .{ .once = &.{ |
| 7614 | | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 7615 | | .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ }, |
| 7616 | | .{ ._, .vp_, .xor, .dst0y, .tmp2y, .src0y, ._ }, |
| 7617 | | .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .src1y, ._ }, |
| 7618 | | .{ ._, .vp_q, .cmpgt, .dst0y, .dst0y, .tmp2y, ._ }, |
| 7619 | | .{ ._, .vp_b, .blendv, .dst0y, .src0y, .src1y, .dst0y }, |
| 10298 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 10299 | .{ ._, .f_, .xam, ._, ._, ._, ._ }, |
| 10300 | .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ }, |
| 10301 | .{ ._, ._, .@"test", .tmp1b, .si(0b0_1_000_100), ._, ._ }, |
| 10302 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 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 | 10313 | .src_constraints = .{ |
| 7624 | | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, |
| 7625 | | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, |
| 10314 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 10315 | .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7626 | 10316 | }, |
| 7627 | 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 | 10322 | .extra_temps = .{ |
| 7631 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7632 | | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| 7633 | | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| 7634 | | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| 7635 | | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| 7636 | | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| 7637 | | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| 10323 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 10324 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 10325 | .unused, |
| 10326 | .unused, |
| 10327 | .unused, |
| 10328 | .unused, |
| 10329 | .unused, |
| 7638 | 10330 | .unused, |
| 7639 | 10331 | .unused, |
| 7640 | 10332 | }, |
| 7641 | | .dst_temps = .{.mem}, |
| 10333 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }}, |
| 7642 | 10334 | .clobbers = .{ .eflags = true }, |
| 7643 | 10335 | .each = .{ .once = &.{ |
| 7644 | | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 7645 | | .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ }, |
| 7646 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7647 | | .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 7648 | | .{ ._, .v_dqa, .mov, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, |
| 7649 | | .{ ._, .vp_, .xor, .tmp5y, .tmp3y, .tmp2y, ._ }, |
| 7650 | | .{ ._, .vp_, .xor, .tmp6y, .tmp4y, .tmp2y, ._ }, |
| 7651 | | .{ ._, .vp_q, .cmpgt, .tmp5y, .tmp5y, .tmp6y, ._ }, |
| 7652 | | .{ ._, .vp_b, .blendv, .tmp3y, .tmp3y, .tmp4y, .tmp5y }, |
| 7653 | | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ }, |
| 7654 | | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 7655 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7656 | | } }, |
| 7657 | | }, .{ |
| 7658 | | .required_features = .{ .avx, null, null, null }, |
| 10336 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 10337 | .{ ._, .f_, .ucom, .tmp0t, ._, ._, ._ }, |
| 10338 | .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ }, |
| 10339 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 10340 | .{ ._, ._p, .j, .@"0f", ._, ._, ._ }, |
| 10341 | .{ ._, .f_, .ucom, .src1t, ._, ._, ._ }, |
| 10342 | .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ }, |
| 10343 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 10344 | .{ ._, ._b, .j, .@"1f", ._, ._, ._ }, |
| 10345 | .{ .@"0:", .f_p, .st, .tmp0t, ._, ._, ._ }, |
| 10346 | .{ ._, .f_, .ld, .src1t, ._, ._, ._ }, |
| 10347 | .{ .@"1:", .f_p, .st, .dst0t, ._, ._, ._ }, |
| 10348 | } }, |
| 10349 | }, .{ |
| 10350 | .required_features = .{ .x87, .cmov, null, null }, |
| 7659 | 10351 | .src_constraints = .{ |
| 7660 | | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| 7661 | | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| 10352 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 10353 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7662 | 10354 | }, |
| 7663 | 10355 | .patterns = &.{ |
| 7664 | 10356 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7665 | 10357 | }, |
| 7666 | 10358 | .extra_temps = .{ |
| 7667 | 10359 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7668 | | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| 7669 | | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 7670 | | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 7671 | | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 7672 | | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 7673 | | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 10360 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 10361 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 10362 | .unused, |
| 10363 | .unused, |
| 10364 | .unused, |
| 10365 | .unused, |
| 7674 | 10366 | .unused, |
| 7675 | 10367 | .unused, |
| 7676 | 10368 | }, |
| 7677 | 10369 | .dst_temps = .{.mem}, |
| 7678 | 10370 | .clobbers = .{ .eflags = true }, |
| 7679 | 10371 | .each = .{ .once = &.{ |
| 7680 | | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 7681 | | .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, |
| 7682 | 10372 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7683 | | .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7684 | | .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7685 | | .{ ._, .vp_, .xor, .tmp5x, .tmp3x, .tmp2x, ._ }, |
| 7686 | | .{ ._, .vp_, .xor, .tmp6x, .tmp4x, .tmp2x, ._ }, |
| 7687 | | .{ ._, .vp_q, .cmpgt, .tmp5x, .tmp5x, .tmp6x, ._ }, |
| 7688 | | .{ ._, .vp_b, .blendv, .tmp3x, .tmp3x, .tmp4x, .tmp5x }, |
| 7689 | | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, |
| 10373 | .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ }, |
| 10374 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 10375 | .{ ._, .f_, .ucomi, .tmp1t, .tmp1t, ._, ._ }, |
| 10376 | .{ ._, .f_u, .cmov, .tmp1t, .tmp2t, ._, ._ }, |
| 10377 | .{ ._, .f_, .ucomi, .tmp1t, .tmp2t, ._, ._ }, |
| 10378 | .{ ._, .f_nb, .cmov, .tmp1t, .tmp2t, ._, ._ }, |
| 10379 | .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_size), ._, ._, ._ }, |
| 10380 | .{ ._, .f_p, .st, .tmp2t, ._, ._, ._ }, |
| 7690 | 10381 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 7691 | 10382 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7692 | 10383 | } }, |
| 7693 | 10384 | }, .{ |
| 7694 | | .required_features = .{ .sse4_2, null, null, null }, |
| 10385 | .required_features = .{ .sahf, .x87, null, null }, |
| 7695 | 10386 | .src_constraints = .{ |
| 7696 | | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| 7697 | | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| 10387 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 10388 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7698 | 10389 | }, |
| 7699 | 10390 | .patterns = &.{ |
| 7700 | 10391 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7701 | 10392 | }, |
| 7702 | 10393 | .extra_temps = .{ |
| 7703 | 10394 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7704 | | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| 7705 | | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 7706 | | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 7707 | | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 7708 | | .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } }, |
| 7709 | | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 10395 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 10396 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 10397 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 10398 | .unused, |
| 10399 | .unused, |
| 10400 | .unused, |
| 7710 | 10401 | .unused, |
| 7711 | 10402 | .unused, |
| 7712 | 10403 | }, |
| 7713 | 10404 | .dst_temps = .{.mem}, |
| 7714 | 10405 | .clobbers = .{ .eflags = true }, |
| 7715 | 10406 | .each = .{ .once = &.{ |
| 7716 | | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 7717 | | .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, |
| 7718 | 10407 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7719 | | .{ .@"0:", ._dqa, .mov, .tmp5x, .tmp2x, ._, ._ }, |
| 7720 | | .{ ._, ._dqa, .mov, .tmp6x, .tmp2x, ._, ._ }, |
| 7721 | | .{ ._, ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7722 | | .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7723 | | .{ ._, .p_, .xor, .tmp5x, .tmp3x, ._, ._ }, |
| 7724 | | .{ ._, .p_, .xor, .tmp6x, .tmp4x, ._, ._ }, |
| 7725 | | .{ ._, .p_q, .cmpgt, .tmp5x, .tmp6x, ._, ._ }, |
| 7726 | | .{ ._, .p_b, .blendv, .tmp3x, .tmp4x, .tmp5x, ._ }, |
| 7727 | | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, |
| 10408 | .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ }, |
| 10409 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 10410 | .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ }, |
| 10411 | .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ }, |
| 10412 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 10413 | .{ ._, ._p, .j, .@"1f", ._, ._, ._ }, |
| 10414 | .{ ._, .f_, .ucom, .tmp2t, ._, ._, ._ }, |
| 10415 | .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ }, |
| 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 | 10422 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 7729 | 10423 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7730 | 10424 | } }, |
| 7731 | 10425 | }, .{ |
| 7732 | | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 10426 | .required_features = .{ .@"64bit", .x87, null, null }, |
| 7733 | 10427 | .src_constraints = .{ |
| 7734 | | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, |
| 7735 | | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, |
| 10428 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 10429 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7736 | 10430 | }, |
| 7737 | 10431 | .patterns = &.{ |
| 7738 | 10432 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7739 | 10433 | }, |
| 7740 | 10434 | .extra_temps = .{ |
| 7741 | 10435 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7742 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 7743 | | .unused, |
| 7744 | | .unused, |
| 10436 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 10437 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 10438 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 7745 | 10439 | .unused, |
| 7746 | 10440 | .unused, |
| 7747 | 10441 | .unused, |
| ... | ... | @@ -7752,27 +10446,37 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7752 | 10446 | .clobbers = .{ .eflags = true }, |
| 7753 | 10447 | .each = .{ .once = &.{ |
| 7754 | 10448 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7755 | | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 7756 | | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7757 | | .{ ._, ._ae, .cmov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7758 | | .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| 7759 | | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 10449 | .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ }, |
| 10450 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 10451 | .{ ._, .f_, .xam, ._, ._, ._, ._ }, |
| 10452 | .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ }, |
| 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 | 10464 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7761 | 10465 | } }, |
| 7762 | 10466 | }, .{ |
| 7763 | | .required_features = .{ .@"64bit", null, null, null }, |
| 10467 | .required_features = .{ .x87, null, null, null }, |
| 7764 | 10468 | .src_constraints = .{ |
| 7765 | | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, |
| 7766 | | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, |
| 10469 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 10470 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 7767 | 10471 | }, |
| 7768 | 10472 | .patterns = &.{ |
| 7769 | 10473 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7770 | 10474 | }, |
| 7771 | 10475 | .extra_temps = .{ |
| 7772 | 10476 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7773 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 7774 | | .unused, |
| 7775 | | .unused, |
| 10477 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 10478 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 10479 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 7776 | 10480 | .unused, |
| 7777 | 10481 | .unused, |
| 7778 | 10482 | .unused, |
| ... | ... | @@ -7783,64 +10487,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7783 | 10487 | .clobbers = .{ .eflags = true }, |
| 7784 | 10488 | .each = .{ .once = &.{ |
| 7785 | 10489 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7786 | | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 7787 | | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7788 | | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, |
| 7789 | | .{ ._, ._, .mov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7790 | | .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| 7791 | | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 10490 | .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ }, |
| 10491 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 10492 | .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ }, |
| 10493 | .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ }, |
| 10494 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 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 | 10505 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7793 | 10506 | } }, |
| 7794 | 10507 | }, .{ |
| 7795 | | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 7796 | | .src_constraints = .{ .any_scalar_signed_int, .any_scalar_signed_int }, |
| 10508 | .required_features = .{ .sse, null, null, null }, |
| 10509 | .src_constraints = .{ |
| 10510 | .{ .scalar_float = .{ .of = .xword, .is = .xword } }, |
| 10511 | .{ .scalar_float = .{ .of = .xword, .is = .xword } }, |
| 10512 | }, |
| 7797 | 10513 | .patterns = &.{ |
| 7798 | | .{ .src = .{ .to_mem, .to_mem } }, |
| 10514 | .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } }, |
| 7799 | 10515 | }, |
| 10516 | .call_frame = .{ .alignment = .@"16" }, |
| 7800 | 10517 | .extra_temps = .{ |
| 7801 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7802 | | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| 7803 | | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| 7804 | | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| 10518 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } }, |
| 10519 | .unused, |
| 10520 | .unused, |
| 10521 | .unused, |
| 7805 | 10522 | .unused, |
| 7806 | 10523 | .unused, |
| 7807 | 10524 | .unused, |
| 7808 | 10525 | .unused, |
| 7809 | 10526 | .unused, |
| 7810 | 10527 | }, |
| 7811 | | .dst_temps = .{.mem}, |
| 7812 | | .clobbers = .{ .eflags = true }, |
| 10528 | .dst_temps = .{.{ .ref = .src0 }}, |
| 10529 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 7813 | 10530 | .each = .{ .once = &.{ |
| 7814 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 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", ._, ._, ._ }, |
| 10531 | .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, |
| 7832 | 10532 | } }, |
| 7833 | 10533 | }, .{ |
| 7834 | | .required_features = .{ .@"64bit", null, null, null }, |
| 7835 | | .src_constraints = .{ .any_scalar_signed_int, .any_scalar_signed_int }, |
| 10534 | .required_features = .{ .avx, null, null, null }, |
| 10535 | .src_constraints = .{ |
| 10536 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 10537 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 10538 | }, |
| 7836 | 10539 | .patterns = &.{ |
| 7837 | 10540 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7838 | 10541 | }, |
| 10542 | .call_frame = .{ .alignment = .@"16" }, |
| 7839 | 10543 | .extra_temps = .{ |
| 7840 | 10544 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7841 | | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| 7842 | | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| 7843 | | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| 10545 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 10546 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| 10547 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } }, |
| 7844 | 10548 | .unused, |
| 7845 | 10549 | .unused, |
| 7846 | 10550 | .unused, |
| ... | ... | @@ -7848,38 +10552,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7848 | 10552 | .unused, |
| 7849 | 10553 | }, |
| 7850 | 10554 | .dst_temps = .{.mem}, |
| 7851 | | .clobbers = .{ .eflags = true }, |
| 10555 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 7852 | 10556 | .each = .{ .once = &.{ |
| 7853 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7854 | | .{ .@"0:", ._, .mov, .tmp1d, .sia(-1, .none, .add_src0_elem_size_div_8), ._, ._ }, |
| 7855 | | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 7856 | | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 7857 | | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7858 | | .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, |
| 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), ._, ._ }, |
| 10557 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 10558 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 10559 | .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 10560 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 10561 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 10562 | .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, |
| 7870 | 10563 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7871 | 10564 | } }, |
| 7872 | 10565 | }, .{ |
| 7873 | | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 7874 | | .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int }, |
| 10566 | .required_features = .{ .sse2, null, null, null }, |
| 10567 | .src_constraints = .{ |
| 10568 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 10569 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 10570 | }, |
| 7875 | 10571 | .patterns = &.{ |
| 7876 | 10572 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7877 | 10573 | }, |
| 10574 | .call_frame = .{ .alignment = .@"16" }, |
| 7878 | 10575 | .extra_temps = .{ |
| 7879 | 10576 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7880 | | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| 7881 | | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| 7882 | | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| 10577 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 10578 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| 10579 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } }, |
| 7883 | 10580 | .unused, |
| 7884 | 10581 | .unused, |
| 7885 | 10582 | .unused, |
| ... | ... | @@ -7887,36 +10584,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7887 | 10584 | .unused, |
| 7888 | 10585 | }, |
| 7889 | 10586 | .dst_temps = .{.mem}, |
| 7890 | | .clobbers = .{ .eflags = true }, |
| 10587 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 7891 | 10588 | .each = .{ .once = &.{ |
| 7892 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7893 | | .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| 7894 | | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 7895 | | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 7896 | | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7897 | | .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, |
| 7898 | | .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, |
| 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", ._, ._, ._ }, |
| 10589 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 10590 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 10591 | .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 10592 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 10593 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 10594 | .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, |
| 10595 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7908 | 10596 | } }, |
| 7909 | 10597 | }, .{ |
| 7910 | | .required_features = .{ .@"64bit", null, null, null }, |
| 7911 | | .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int }, |
| 10598 | .required_features = .{ .sse, null, null, null }, |
| 10599 | .src_constraints = .{ |
| 10600 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 10601 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 10602 | }, |
| 7912 | 10603 | .patterns = &.{ |
| 7913 | 10604 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7914 | 10605 | }, |
| 10606 | .call_frame = .{ .alignment = .@"16" }, |
| 7915 | 10607 | .extra_temps = .{ |
| 7916 | 10608 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7917 | | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| 7918 | | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| 7919 | | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| 10609 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 10610 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| 10611 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } }, |
| 7920 | 10612 | .unused, |
| 7921 | 10613 | .unused, |
| 7922 | 10614 | .unused, |
| ... | ... | @@ -7924,24 +10616,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7924 | 10616 | .unused, |
| 7925 | 10617 | }, |
| 7926 | 10618 | .dst_temps = .{.mem}, |
| 7927 | | .clobbers = .{ .eflags = true }, |
| 7928 | | .each = .{ .once = &.{ |
| 7929 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7930 | | .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| 7931 | | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 7932 | | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 7933 | | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7934 | | .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, |
| 7935 | | .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, |
| 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", ._, ._, ._ }, |
| 10619 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 10620 | .each = .{ .once = &.{ |
| 10621 | .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, |
| 10622 | .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 10623 | .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 10624 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 10625 | .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 10626 | .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, |
| 10627 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7945 | 10628 | } }, |
| 7946 | 10629 | } }) catch |err| switch (err) { |
| 7947 | 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 | 10825 | }, |
| 8143 | 10826 | .extra_temps = .{ |
| 8144 | 10827 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8145 | | .{ .kind = .{ .rc = .sse } }, |
| 10828 | .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } }, |
| 8146 | 10829 | .unused, |
| 8147 | 10830 | .unused, |
| 8148 | 10831 | .unused, |
| ... | ... | @@ -8169,7 +10852,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 8169 | 10852 | }, |
| 8170 | 10853 | .extra_temps = .{ |
| 8171 | 10854 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8172 | | .{ .kind = .{ .rc = .sse } }, |
| 10855 | .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } }, |
| 8173 | 10856 | .unused, |
| 8174 | 10857 | .unused, |
| 8175 | 10858 | .unused, |
| ... | ... | @@ -8196,7 +10879,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 8196 | 10879 | }, |
| 8197 | 10880 | .extra_temps = .{ |
| 8198 | 10881 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8199 | | .{ .kind = .{ .rc = .sse } }, |
| 10882 | .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } }, |
| 8200 | 10883 | .unused, |
| 8201 | 10884 | .unused, |
| 8202 | 10885 | .unused, |
| ... | ... | @@ -8223,7 +10906,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 8223 | 10906 | }, |
| 8224 | 10907 | .extra_temps = .{ |
| 8225 | 10908 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8226 | | .{ .kind = .{ .rc = .sse } }, |
| 10909 | .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } }, |
| 8227 | 10910 | .unused, |
| 8228 | 10911 | .unused, |
| 8229 | 10912 | .unused, |
| ... | ... | @@ -8250,7 +10933,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 8250 | 10933 | }, |
| 8251 | 10934 | .extra_temps = .{ |
| 8252 | 10935 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8253 | | .{ .kind = .{ .rc = .sse } }, |
| 10936 | .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } }, |
| 8254 | 10937 | .unused, |
| 8255 | 10938 | .unused, |
| 8256 | 10939 | .unused, |
| ... | ... | @@ -8591,7 +11274,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 8591 | 11274 | }, |
| 8592 | 11275 | .dst_temps = .{.{ .rc = .sse }}, |
| 8593 | 11276 | .each = .{ .once = &.{ |
| 8594 | | .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .ui(0b01111) }, |
| 11277 | .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .vp(.true) }, |
| 8595 | 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 | 11376 | .clobbers = .{ .eflags = true }, |
| 8694 | 11377 | .each = .{ .once = &.{ |
| 8695 | 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 | 11380 | .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memiad(.src0y, .tmp0, .add_size, -16), ._ }, |
| 8698 | 11381 | .{ ._, .v_pd, .movu, .memiad(.dst0y, .tmp0, .add_size, -16), .tmp2y, ._, ._ }, |
| 8699 | 11382 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| ... | ... | @@ -8722,7 +11405,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 8722 | 11405 | .clobbers = .{ .eflags = true }, |
| 8723 | 11406 | .each = .{ .once = &.{ |
| 8724 | 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 | 11409 | .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ }, |
| 8727 | 11410 | .{ ._, .v_pd, .movu, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ }, |
| 8728 | 11411 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| ... | ... | @@ -9406,7 +12089,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9406 | 12089 | }, |
| 9407 | 12090 | .dst_temps = .{.{ .rc = .sse }}, |
| 9408 | 12091 | .each = .{ .once = &.{ |
| 9409 | | .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .ui(0b01111) }, |
| 12092 | .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .vp(.true) }, |
| 9410 | 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 | 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 | 12180 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; |
| 9498 | 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 | 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 | 12186 | .loop => if (use_old) try cg.airLoop(inst) else { |
| 9504 | 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 | 16535 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| 13853 | 16536 | .{ .@"0:", ._, .mov, .tmp2b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 13854 | 16537 | .{ ._, ._, .cmp, .tmp2b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 13855 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 16538 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 13856 | 16539 | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, |
| 13857 | 16540 | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, |
| 13858 | 16541 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | ... | @@ -13884,7 +16567,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 13884 | 16567 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| 13885 | 16568 | .{ .@"0:", ._, .mov, .tmp2w, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 13886 | 16569 | .{ ._, ._, .cmp, .tmp2w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 13887 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 16570 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 13888 | 16571 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| 13889 | 16572 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| 13890 | 16573 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | ... | @@ -13916,7 +16599,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 13916 | 16599 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| 13917 | 16600 | .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 13918 | 16601 | .{ ._, ._, .cmp, .tmp2d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 13919 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 16602 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 13920 | 16603 | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, |
| 13921 | 16604 | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, |
| 13922 | 16605 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | ... | @@ -13949,7 +16632,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 13949 | 16632 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| 13950 | 16633 | .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 13951 | 16634 | .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 13952 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 16635 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 13953 | 16636 | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, |
| 13954 | 16637 | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, |
| 13955 | 16638 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | ... | @@ -13988,7 +16671,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 13988 | 16671 | .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ }, |
| 13989 | 16672 | .{ ._, ._b, .j, .@"1b", ._, ._, ._ }, |
| 13990 | 16673 | .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ }, |
| 13991 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 16674 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 13992 | 16675 | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, |
| 13993 | 16676 | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, |
| 13994 | 16677 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | ... | @@ -14021,7 +16704,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14021 | 16704 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 14022 | 16705 | .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 14023 | 16706 | .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 14024 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 16707 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 14025 | 16708 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| 14026 | 16709 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| 14027 | 16710 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | ... | @@ -14054,7 +16737,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14054 | 16737 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 14055 | 16738 | .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 14056 | 16739 | .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 14057 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 16740 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 14058 | 16741 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| 14059 | 16742 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| 14060 | 16743 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | ... | @@ -14087,7 +16770,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14087 | 16770 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 14088 | 16771 | .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 14089 | 16772 | .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 14090 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 16773 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 14091 | 16774 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| 14092 | 16775 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| 14093 | 16776 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | ... | @@ -14121,7 +16804,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14121 | 16804 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 14122 | 16805 | .{ ._, ._, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 14123 | 16806 | .{ ._, ._, .cmp, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 14124 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 16807 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 14125 | 16808 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| 14126 | 16809 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| 14127 | 16810 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | ... | @@ -14161,7 +16844,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14161 | 16844 | .{ ._, ._b, .j, .@"1b", ._, ._, ._ }, |
| 14162 | 16845 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 14163 | 16846 | .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ }, |
| 14164 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 16847 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 14165 | 16848 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| 14166 | 16849 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| 14167 | 16850 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | ... | @@ -14195,7 +16878,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14195 | 16878 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 14196 | 16879 | .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 14197 | 16880 | .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 14198 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 16881 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 14199 | 16882 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, |
| 14200 | 16883 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, |
| 14201 | 16884 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | ... | @@ -14228,7 +16911,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14228 | 16911 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 14229 | 16912 | .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 14230 | 16913 | .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 14231 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 16914 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 14232 | 16915 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, |
| 14233 | 16916 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, |
| 14234 | 16917 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | ... | @@ -14262,7 +16945,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14262 | 16945 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 14263 | 16946 | .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 14264 | 16947 | .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 14265 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 16948 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 14266 | 16949 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, |
| 14267 | 16950 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, |
| 14268 | 16951 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | ... | @@ -14296,7 +16979,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14296 | 16979 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 14297 | 16980 | .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 14298 | 16981 | .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 14299 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 16982 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 14300 | 16983 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, |
| 14301 | 16984 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, |
| 14302 | 16985 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | ... | @@ -14337,7 +17020,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14337 | 17020 | .{ ._, ._b, .j, .@"1b", ._, ._, ._ }, |
| 14338 | 17021 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 14339 | 17022 | .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ }, |
| 14340 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 17023 | .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ }, |
| 14341 | 17024 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, |
| 14342 | 17025 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, |
| 14343 | 17026 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| ... | ... | @@ -14369,7 +17052,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14369 | 17052 | .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ }, |
| 14370 | 17053 | .{ ._, ._, .mov, .tmp4b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 14371 | 17054 | .{ ._, ._, .cmp, .tmp4b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 14372 | | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, |
| 17055 | .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ }, |
| 14373 | 17056 | .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ }, |
| 14374 | 17057 | .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ }, |
| 14375 | 17058 | .{ ._, ._, .add, .tmp1d, .si(1), ._, ._ }, |
| ... | ... | @@ -14397,7 +17080,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14397 | 17080 | .{ .src = .{ .to_sse, .to_sse } }, |
| 14398 | 17081 | }, |
| 14399 | 17082 | .extra_temps = .{ |
| 14400 | | .{ .kind = .{ .rc = .sse } }, |
| 17083 | .{ .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } }, |
| 14401 | 17084 | .unused, |
| 14402 | 17085 | .unused, |
| 14403 | 17086 | .unused, |
| ... | ... | @@ -14413,12 +17096,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14413 | 17096 | .info = .{ .kind = .all, .scalar = .dword }, |
| 14414 | 17097 | } }}, |
| 14415 | 17098 | .each = .{ .once = &.{ |
| 14416 | | .{ ._, .v_ps, .cvtph2, .dst0x, .src0x, ._, ._ }, |
| 14417 | | .{ ._, .v_ps, .cvtph2, .tmp0x, .src1x, ._, ._ }, |
| 14418 | | .{ ._, .v_ss, .cmp, .dst0x, .dst0x, .tmp0x, .ui(switch (cc) { |
| 17099 | .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, |
| 17100 | .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ }, |
| 17101 | .{ ._, .v_ss, .cmp, .dst0x, .dst0x, .tmp0x, .vp(switch (cc) { |
| 14419 | 17102 | else => unreachable, |
| 14420 | | .e => 0b00000, |
| 14421 | | .ne => 0b00100, |
| 17103 | .e => .eq, |
| 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 | 17135 | .each = .{ .once = &.{ |
| 14453 | 17136 | .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, |
| 14454 | 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 | 17139 | else => unreachable, |
| 14457 | | .e => 0b00000, |
| 14458 | | .ne => 0b00100, |
| 17140 | .e => .eq, |
| 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 | 17172 | .each = .{ .once = &.{ |
| 14490 | 17173 | .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ }, |
| 14491 | 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 | 17176 | else => unreachable, |
| 14494 | | .e => 0b00000, |
| 14495 | | .ne => 0b00100, |
| 17177 | .e => .eq, |
| 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 | 17195 | .info = .{ .kind = .all, .scalar = .dword }, |
| 14513 | 17196 | } }}, |
| 14514 | 17197 | .each = .{ .once = &.{ |
| 14515 | | .{ ._, .v_ss, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) { |
| 17198 | .{ ._, .v_ss, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) { |
| 14516 | 17199 | else => unreachable, |
| 14517 | | .e => 0b00000, |
| 14518 | | .ne => 0b00100, |
| 17200 | .e => .eq, |
| 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 | 17217 | .info = .{ .kind = .all, .scalar = .dword }, |
| 14535 | 17218 | } }}, |
| 14536 | 17219 | .each = .{ .once = &.{ |
| 14537 | | .{ ._, ._ss, .cmp, .dst0x, .src1x, .ui(switch (cc) { |
| 17220 | .{ ._, ._ss, .cmp, .dst0x, .src1x, .vp(switch (cc) { |
| 14538 | 17221 | else => unreachable, |
| 14539 | | .e => 0b00000, |
| 14540 | | .ne => 0b00100, |
| 17222 | .e => .eq, |
| 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 | 17240 | .info = .{ .kind = .all, .scalar = .dword }, |
| 14558 | 17241 | } }}, |
| 14559 | 17242 | .each = .{ .once = &.{ |
| 14560 | | .{ ._, .v_ps, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) { |
| 17243 | .{ ._, .v_ps, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) { |
| 14561 | 17244 | else => unreachable, |
| 14562 | | .e => 0b00000, |
| 14563 | | .ne => 0b00100, |
| 17245 | .e => .eq, |
| 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 | 17262 | .info = .{ .kind = .all, .scalar = .dword }, |
| 14580 | 17263 | } }}, |
| 14581 | 17264 | .each = .{ .once = &.{ |
| 14582 | | .{ ._, ._ps, .cmp, .dst0x, .src1x, .ui(switch (cc) { |
| 17265 | .{ ._, ._ps, .cmp, .dst0x, .src1x, .vp(switch (cc) { |
| 14583 | 17266 | else => unreachable, |
| 14584 | | .e => 0b00000, |
| 14585 | | .ne => 0b00100, |
| 17267 | .e => .eq, |
| 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 | 17285 | .info = .{ .kind = .all, .scalar = .dword }, |
| 14603 | 17286 | } }}, |
| 14604 | 17287 | .each = .{ .once = &.{ |
| 14605 | | .{ ._, .v_ps, .cmp, .dst0y, .src0y, .src1y, .ui(switch (cc) { |
| 17288 | .{ ._, .v_ps, .cmp, .dst0y, .src0y, .src1y, .vp(switch (cc) { |
| 14606 | 17289 | else => unreachable, |
| 14607 | | .e => 0b00000, |
| 14608 | | .ne => 0b00100, |
| 17290 | .e => .eq, |
| 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 | 17308 | .info = .{ .kind = .all, .scalar = .qword }, |
| 14626 | 17309 | } }}, |
| 14627 | 17310 | .each = .{ .once = &.{ |
| 14628 | | .{ ._, .v_sd, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) { |
| 17311 | .{ ._, .v_sd, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) { |
| 14629 | 17312 | else => unreachable, |
| 14630 | | .e => 0b00000, |
| 14631 | | .ne => 0b00100, |
| 17313 | .e => .eq, |
| 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 | 17330 | .info = .{ .kind = .all, .scalar = .qword }, |
| 14648 | 17331 | } }}, |
| 14649 | 17332 | .each = .{ .once = &.{ |
| 14650 | | .{ ._, ._sd, .cmp, .dst0x, .src1x, .ui(switch (cc) { |
| 17333 | .{ ._, ._sd, .cmp, .dst0x, .src1x, .vp(switch (cc) { |
| 14651 | 17334 | else => unreachable, |
| 14652 | | .e => 0b00000, |
| 14653 | | .ne => 0b00100, |
| 17335 | .e => .eq, |
| 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 | 17353 | .info = .{ .kind = .all, .scalar = .qword }, |
| 14671 | 17354 | } }}, |
| 14672 | 17355 | .each = .{ .once = &.{ |
| 14673 | | .{ ._, .v_pd, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) { |
| 17356 | .{ ._, .v_pd, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) { |
| 14674 | 17357 | else => unreachable, |
| 14675 | | .e => 0b00000, |
| 14676 | | .ne => 0b00100, |
| 17358 | .e => .eq, |
| 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 | 17375 | .info = .{ .kind = .all, .scalar = .qword }, |
| 14693 | 17376 | } }}, |
| 14694 | 17377 | .each = .{ .once = &.{ |
| 14695 | | .{ ._, ._pd, .cmp, .dst0x, .src1x, .ui(switch (cc) { |
| 17378 | .{ ._, ._pd, .cmp, .dst0x, .src1x, .vp(switch (cc) { |
| 14696 | 17379 | else => unreachable, |
| 14697 | | .e => 0b00000, |
| 14698 | | .ne => 0b00100, |
| 17380 | .e => .eq, |
| 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 | 17398 | .info = .{ .kind = .all, .scalar = .qword }, |
| 14716 | 17399 | } }}, |
| 14717 | 17400 | .each = .{ .once = &.{ |
| 14718 | | .{ ._, .v_pd, .cmp, .dst0y, .src0y, .src1y, .ui(switch (cc) { |
| 17401 | .{ ._, .v_pd, .cmp, .dst0y, .src0y, .src1y, .vp(switch (cc) { |
| 14719 | 17402 | else => unreachable, |
| 14720 | | .e => 0b00000, |
| 14721 | | .ne => 0b00100, |
| 17403 | .e => .eq, |
| 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 | 17431 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 14749 | 17432 | .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 14750 | 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 | 17435 | else => unreachable, |
| 14753 | | .e => 0b00000, |
| 14754 | | .ne => 0b00100, |
| 17436 | .e => .eq, |
| 17437 | .ne => .neq, |
| 14755 | 17438 | }) }, |
| 14756 | 17439 | .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ }, |
| 14757 | 17440 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, |
| ... | ... | @@ -14786,10 +17469,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14786 | 17469 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 14787 | 17470 | .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 14788 | 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 | 17473 | else => unreachable, |
| 14791 | | .e => 0b00000, |
| 14792 | | .ne => 0b00100, |
| 17474 | .e => .eq, |
| 17475 | .ne => .neq, |
| 14793 | 17476 | }) }, |
| 14794 | 17477 | .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ }, |
| 14795 | 17478 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, |
| ... | ... | @@ -14834,7 +17517,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14834 | 17517 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 14835 | 17518 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| 14836 | 17519 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, |
| 14837 | | .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ }, |
| 17520 | .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ }, |
| 14838 | 17521 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 14839 | 17522 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, |
| 14840 | 17523 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, |
| ... | ... | @@ -14879,7 +17562,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14879 | 17562 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 14880 | 17563 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| 14881 | 17564 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, |
| 14882 | | .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ }, |
| 17565 | .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ }, |
| 14883 | 17566 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 14884 | 17567 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, |
| 14885 | 17568 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, |
| ... | ... | @@ -14925,7 +17608,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14925 | 17608 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 14926 | 17609 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| 14927 | 17610 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, |
| 14928 | | .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ }, |
| 17611 | .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ }, |
| 14929 | 17612 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 14930 | 17613 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, |
| 14931 | 17614 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, |
| ... | ... | @@ -14971,7 +17654,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 14971 | 17654 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 14972 | 17655 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| 14973 | 17656 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, |
| 14974 | | .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ }, |
| 17657 | .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ }, |
| 14975 | 17658 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 14976 | 17659 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, |
| 14977 | 17660 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, |
| ... | ... | @@ -15002,7 +17685,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15002 | 17685 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| 15003 | 17686 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 15004 | 17687 | .{ .type = .u32, .kind = .{ .reg = .edx } }, |
| 15005 | | .{ .type = .vector_8_f16, .kind = .mem }, |
| 17688 | .{ .type = .f32, .kind = .mem }, |
| 15006 | 17689 | .unused, |
| 15007 | 17690 | }, |
| 15008 | 17691 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| ... | ... | @@ -15012,14 +17695,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15012 | 17695 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 15013 | 17696 | .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ }, |
| 15014 | 17697 | .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ }, |
| 15015 | | .{ ._, ._ps, .mova, .tmp1x, .mem(.tmp7x), ._, ._ }, |
| 17698 | .{ ._, ._ss, .mov, .tmp1x, .mem(.tmp7d), ._, ._ }, |
| 15016 | 17699 | .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ }, |
| 15017 | 17700 | .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ }, |
| 15018 | | .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp7x), ._, ._ }, |
| 17701 | .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp7d), ._, ._ }, |
| 15019 | 17702 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 15020 | 17703 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| 15021 | 17704 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, |
| 15022 | | .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ }, |
| 17705 | .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ }, |
| 15023 | 17706 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 15024 | 17707 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, |
| 15025 | 17708 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, |
| ... | ... | @@ -15050,7 +17733,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15050 | 17733 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| 15051 | 17734 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 15052 | 17735 | .{ .type = .u32, .kind = .{ .reg = .edx } }, |
| 15053 | | .{ .type = .vector_8_f16, .kind = .mem }, |
| 17736 | .{ .type = .f32, .kind = .mem }, |
| 15054 | 17737 | .unused, |
| 15055 | 17738 | }, |
| 15056 | 17739 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| ... | ... | @@ -15060,14 +17743,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15060 | 17743 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 15061 | 17744 | .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ }, |
| 15062 | 17745 | .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ }, |
| 15063 | | .{ ._, ._ps, .mova, .tmp1x, .mem(.tmp7x), ._, ._ }, |
| 17746 | .{ ._, ._ss, .mov, .tmp1x, .mem(.tmp7d), ._, ._ }, |
| 15064 | 17747 | .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ }, |
| 15065 | 17748 | .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ }, |
| 15066 | | .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp7x), ._, ._ }, |
| 17749 | .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp7d), ._, ._ }, |
| 15067 | 17750 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 15068 | 17751 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| 15069 | 17752 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, |
| 15070 | | .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ }, |
| 17753 | .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ }, |
| 15071 | 17754 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 15072 | 17755 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, |
| 15073 | 17756 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, |
| ... | ... | @@ -15111,7 +17794,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15111 | 17794 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 15112 | 17795 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 15113 | 17796 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 15114 | | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 17797 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 15115 | 17798 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, |
| 15116 | 17799 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, |
| 15117 | 17800 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, |
| ... | ... | @@ -15166,7 +17849,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15166 | 17849 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 15167 | 17850 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 15168 | 17851 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 15169 | | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 17852 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 15170 | 17853 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, |
| 15171 | 17854 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, |
| 15172 | 17855 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, |
| ... | ... | @@ -15222,7 +17905,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15222 | 17905 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 15223 | 17906 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 15224 | 17907 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 15225 | | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 17908 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 15226 | 17909 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, |
| 15227 | 17910 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, |
| 15228 | 17911 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, |
| ... | ... | @@ -15278,7 +17961,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15278 | 17961 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 15279 | 17962 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 15280 | 17963 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 15281 | | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 17964 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 15282 | 17965 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, |
| 15283 | 17966 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, |
| 15284 | 17967 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, |
| ... | ... | @@ -15320,7 +18003,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15320 | 18003 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| 15321 | 18004 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 15322 | 18005 | .{ .type = .u64, .kind = .{ .reg = .rdx } }, |
| 15323 | | .{ .type = .vector_8_f16, .kind = .mem }, |
| 18006 | .{ .type = .f32, .kind = .mem }, |
| 15324 | 18007 | }, |
| 15325 | 18008 | .dst_temps = .{.mem}, |
| 15326 | 18009 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| ... | ... | @@ -15329,14 +18012,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15329 | 18012 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 15330 | 18013 | .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ }, |
| 15331 | 18014 | .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ }, |
| 15332 | | .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp8x), ._, ._ }, |
| 18015 | .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp8d), ._, ._ }, |
| 15333 | 18016 | .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ }, |
| 15334 | 18017 | .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ }, |
| 15335 | | .{ ._, ._ps, .mova, .tmp3x, .mem(.tmp8x), ._, ._ }, |
| 18018 | .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp8d), ._, ._ }, |
| 15336 | 18019 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 15337 | 18020 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 15338 | 18021 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 15339 | | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 18022 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 15340 | 18023 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, |
| 15341 | 18024 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, |
| 15342 | 18025 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, |
| ... | ... | @@ -15378,7 +18061,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15378 | 18061 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| 15379 | 18062 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 15380 | 18063 | .{ .type = .u64, .kind = .{ .reg = .rdx } }, |
| 15381 | | .{ .type = .vector_8_f16, .kind = .mem }, |
| 18064 | .{ .type = .f32, .kind = .mem }, |
| 15382 | 18065 | }, |
| 15383 | 18066 | .dst_temps = .{.mem}, |
| 15384 | 18067 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| ... | ... | @@ -15387,14 +18070,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15387 | 18070 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 15388 | 18071 | .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ }, |
| 15389 | 18072 | .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ }, |
| 15390 | | .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp8x), ._, ._ }, |
| 18073 | .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp8d), ._, ._ }, |
| 15391 | 18074 | .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ }, |
| 15392 | 18075 | .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ }, |
| 15393 | | .{ ._, ._ps, .mova, .tmp3x, .mem(.tmp8x), ._, ._ }, |
| 18076 | .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp8d), ._, ._ }, |
| 15394 | 18077 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 15395 | 18078 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 15396 | 18079 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 15397 | | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 18080 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 15398 | 18081 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, |
| 15399 | 18082 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, |
| 15400 | 18083 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, |
| ... | ... | @@ -15439,10 +18122,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15439 | 18122 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 15440 | 18123 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 15441 | 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 | 18126 | else => unreachable, |
| 15444 | | .e => 0b00000, |
| 15445 | | .ne => 0b00100, |
| 18127 | .e => .eq, |
| 18128 | .ne => .neq, |
| 15446 | 18129 | }) }, |
| 15447 | 18130 | .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ }, |
| 15448 | 18131 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, |
| ... | ... | @@ -15476,10 +18159,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15476 | 18159 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 15477 | 18160 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 15478 | 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 | 18163 | else => unreachable, |
| 15481 | | .e => 0b00000, |
| 15482 | | .ne => 0b00100, |
| 18164 | .e => .eq, |
| 18165 | .ne => .neq, |
| 15483 | 18166 | }) }, |
| 15484 | 18167 | .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ }, |
| 15485 | 18168 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, |
| ... | ... | @@ -15514,15 +18197,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15514 | 18197 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 15515 | 18198 | .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 15516 | 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 | 18201 | else => unreachable, |
| 15519 | | .e => 0b00000, |
| 15520 | | .ne => 0b00100, |
| 18202 | .e => .eq, |
| 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 | 18206 | else => unreachable, |
| 15524 | | .e => 0b00000, |
| 15525 | | .ne => 0b00100, |
| 18207 | .e => .eq, |
| 18208 | .ne => .neq, |
| 15526 | 18209 | }), ._ }, |
| 15527 | 18210 | .{ ._, .p_w, .ackssd, .tmp2x, .tmp3x, ._, ._ }, |
| 15528 | 18211 | .{ ._, .p_b, .ackssw, .tmp2x, .tmp2x, ._, ._ }, |
| ... | ... | @@ -15558,17 +18241,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15558 | 18241 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 15559 | 18242 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 15560 | 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 | 18245 | else => unreachable, |
| 15563 | | .e => 0b00000, |
| 15564 | | .ne => 0b00100, |
| 18246 | .e => .eq, |
| 18247 | .ne => .neq, |
| 15565 | 18248 | }), ._ }, |
| 15566 | 18249 | .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ }, |
| 15567 | 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 | 18252 | else => unreachable, |
| 15570 | | .e => 0b00000, |
| 15571 | | .ne => 0b00100, |
| 18253 | .e => .eq, |
| 18254 | .ne => .neq, |
| 15572 | 18255 | }), ._ }, |
| 15573 | 18256 | .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ }, |
| 15574 | 18257 | .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ }, |
| ... | ... | @@ -15605,10 +18288,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15605 | 18288 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 15606 | 18289 | .{ ._, ._mp, .j, .@"1f", ._, ._, ._ }, |
| 15607 | 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 | 18292 | else => unreachable, |
| 15610 | | .e => 0b00000, |
| 15611 | | .ne => 0b00100, |
| 18293 | .e => .eq, |
| 18294 | .ne => .neq, |
| 15612 | 18295 | }), ._ }, |
| 15613 | 18296 | .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ }, |
| 15614 | 18297 | .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ }, |
| ... | ... | @@ -15616,10 +18299,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15616 | 18299 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, |
| 15617 | 18300 | .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, |
| 15618 | 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 | 18303 | else => unreachable, |
| 15621 | | .e => 0b00000, |
| 15622 | | .ne => 0b00100, |
| 18304 | .e => .eq, |
| 18305 | .ne => .neq, |
| 15623 | 18306 | }), ._ }, |
| 15624 | 18307 | .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ }, |
| 15625 | 18308 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| ... | ... | @@ -15653,15 +18336,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15653 | 18336 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 15654 | 18337 | .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 15655 | 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 | 18340 | else => unreachable, |
| 15658 | | .e => 0b00000, |
| 15659 | | .ne => 0b00100, |
| 18341 | .e => .eq, |
| 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 | 18345 | else => unreachable, |
| 15663 | | .e => 0b00000, |
| 15664 | | .ne => 0b00100, |
| 18346 | .e => .eq, |
| 18347 | .ne => .neq, |
| 15665 | 18348 | }) }, |
| 15666 | 18349 | .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ }, |
| 15667 | 18350 | .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ }, |
| ... | ... | @@ -15669,7 +18352,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15669 | 18352 | .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ }, |
| 15670 | 18353 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, |
| 15671 | 18354 | .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, |
| 15672 | | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 18355 | .{ ._, ._, .add, .tmp0p, .si(64), ._, ._ }, |
| 15673 | 18356 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 15674 | 18357 | } }, |
| 15675 | 18358 | }, .{ |
| ... | ... | @@ -15699,15 +18382,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15699 | 18382 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 15700 | 18383 | .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 15701 | 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 | 18386 | else => unreachable, |
| 15704 | | .e => 0b00000, |
| 15705 | | .ne => 0b00100, |
| 18387 | .e => .eq, |
| 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 | 18391 | else => unreachable, |
| 15709 | | .e => 0b00000, |
| 15710 | | .ne => 0b00100, |
| 18392 | .e => .eq, |
| 18393 | .ne => .neq, |
| 15711 | 18394 | }) }, |
| 15712 | 18395 | .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ }, |
| 15713 | 18396 | .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ }, |
| ... | ... | @@ -15715,7 +18398,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15715 | 18398 | .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ }, |
| 15716 | 18399 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, |
| 15717 | 18400 | .{ ._, ._c, .in, .tmp1q, ._, ._, ._ }, |
| 15718 | | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 18401 | .{ ._, ._, .add, .tmp0p, .si(64), ._, ._ }, |
| 15719 | 18402 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 15720 | 18403 | } }, |
| 15721 | 18404 | }, .{ |
| ... | ... | @@ -15745,10 +18428,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15745 | 18428 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 15746 | 18429 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 15747 | 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 | 18432 | else => unreachable, |
| 15750 | | .e => 0b00000, |
| 15751 | | .ne => 0b00100, |
| 18433 | .e => .eq, |
| 18434 | .ne => .neq, |
| 15752 | 18435 | }) }, |
| 15753 | 18436 | .{ ._, .v_pd, .movmsk, .tmp4d, .tmp3y, ._, ._ }, |
| 15754 | 18437 | .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, |
| ... | ... | @@ -15795,10 +18478,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15795 | 18478 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 15796 | 18479 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 15797 | 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 | 18482 | else => unreachable, |
| 15800 | | .e => 0b00000, |
| 15801 | | .ne => 0b00100, |
| 18483 | .e => .eq, |
| 18484 | .ne => .neq, |
| 15802 | 18485 | }), ._ }, |
| 15803 | 18486 | .{ ._, ._pd, .movmsk, .tmp4d, .tmp3x, ._, ._ }, |
| 15804 | 18487 | .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, |
| ... | ... | @@ -15850,7 +18533,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15850 | 18533 | .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ }, |
| 15851 | 18534 | .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ }, |
| 15852 | 18535 | .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ }, |
| 15853 | | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, |
| 18536 | .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ }, |
| 15854 | 18537 | .{ ._, switch (cc) { |
| 15855 | 18538 | else => unreachable, |
| 15856 | 18539 | .e => ._np, |
| ... | ... | @@ -15910,7 +18593,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15910 | 18593 | .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ }, |
| 15911 | 18594 | .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ }, |
| 15912 | 18595 | .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ }, |
| 15913 | | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, |
| 18596 | .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ }, |
| 15914 | 18597 | .{ ._, switch (cc) { |
| 15915 | 18598 | else => unreachable, |
| 15916 | 18599 | .e => ._np, |
| ... | ... | @@ -15971,7 +18654,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 15971 | 18654 | .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ }, |
| 15972 | 18655 | .{ ._, ._, .xor, .tmp6b, .si(0b0_1_000_000), ._, ._ }, |
| 15973 | 18656 | .{ ._, ._, .@"test", .tmp6b, .si(0b0_1_000_100), ._, ._ }, |
| 15974 | | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, |
| 18657 | .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ }, |
| 15975 | 18658 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| 15976 | 18659 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| 15977 | 18660 | .{ ._, ._c, .in, .tmp1d, ._, ._, ._ }, |
| ... | ... | @@ -16021,7 +18704,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16021 | 18704 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 16022 | 18705 | .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ }, |
| 16023 | 18706 | .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ }, |
| 16024 | | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, |
| 18707 | .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ }, |
| 16025 | 18708 | .{ ._, switch (cc) { |
| 16026 | 18709 | else => unreachable, |
| 16027 | 18710 | .e => ._np, |
| ... | ... | @@ -16081,7 +18764,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16081 | 18764 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 16082 | 18765 | .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ }, |
| 16083 | 18766 | .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ }, |
| 16084 | | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, |
| 18767 | .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ }, |
| 16085 | 18768 | .{ ._, switch (cc) { |
| 16086 | 18769 | else => unreachable, |
| 16087 | 18770 | .e => ._np, |
| ... | ... | @@ -16142,7 +18825,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16142 | 18825 | .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ }, |
| 16143 | 18826 | .{ ._, ._, .xor, .tmp6b, .si(0b0_1_000_000), ._, ._ }, |
| 16144 | 18827 | .{ ._, ._, .@"test", .tmp6b, .si(0b0_1_000_100), ._, ._ }, |
| 16145 | | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, |
| 18828 | .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ }, |
| 16146 | 18829 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| 16147 | 18830 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| 16148 | 18831 | .{ ._, ._c, .in, .tmp1d, ._, ._, ._ }, |
| ... | ... | @@ -16197,7 +18880,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16197 | 18880 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 16198 | 18881 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 16199 | 18882 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 16200 | | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 18883 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 16201 | 18884 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 16202 | 18885 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| 16203 | 18886 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| ... | ... | @@ -16242,7 +18925,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16242 | 18925 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 16243 | 18926 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 16244 | 18927 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 16245 | | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 18928 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 16246 | 18929 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 16247 | 18930 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| 16248 | 18931 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| ... | ... | @@ -16287,7 +18970,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16287 | 18970 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 16288 | 18971 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 16289 | 18972 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 16290 | | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 18973 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 16291 | 18974 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 16292 | 18975 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| 16293 | 18976 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| ... | ... | @@ -16332,7 +19015,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16332 | 19015 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 16333 | 19016 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 16334 | 19017 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 16335 | | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 19018 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 16336 | 19019 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 16337 | 19020 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| 16338 | 19021 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| ... | ... | @@ -16377,7 +19060,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16377 | 19060 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 16378 | 19061 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 16379 | 19062 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 16380 | | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 19063 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 16381 | 19064 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 16382 | 19065 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| 16383 | 19066 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| ... | ... | @@ -16422,7 +19105,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16422 | 19105 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 16423 | 19106 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 16424 | 19107 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 16425 | | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 19108 | .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ }, |
| 16426 | 19109 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 16427 | 19110 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| 16428 | 19111 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| ... | ... | @@ -16466,7 +19149,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16466 | 19149 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| 16467 | 19150 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, |
| 16468 | 19151 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, |
| 16469 | | .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ }, |
| 19152 | .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ }, |
| 16470 | 19153 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, |
| 16471 | 19154 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, |
| 16472 | 19155 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, |
| ... | ... | @@ -16521,7 +19204,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16521 | 19204 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| 16522 | 19205 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, |
| 16523 | 19206 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, |
| 16524 | | .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ }, |
| 19207 | .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ }, |
| 16525 | 19208 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, |
| 16526 | 19209 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, |
| 16527 | 19210 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, |
| ... | ... | @@ -16576,7 +19259,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16576 | 19259 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| 16577 | 19260 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, |
| 16578 | 19261 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, |
| 16579 | | .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ }, |
| 19262 | .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ }, |
| 16580 | 19263 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, |
| 16581 | 19264 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, |
| 16582 | 19265 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, |
| ... | ... | @@ -16631,7 +19314,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16631 | 19314 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| 16632 | 19315 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, |
| 16633 | 19316 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, |
| 16634 | | .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ }, |
| 19317 | .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ }, |
| 16635 | 19318 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, |
| 16636 | 19319 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, |
| 16637 | 19320 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, |
| ... | ... | @@ -16686,7 +19369,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16686 | 19369 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| 16687 | 19370 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, |
| 16688 | 19371 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, |
| 16689 | | .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ }, |
| 19372 | .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ }, |
| 16690 | 19373 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, |
| 16691 | 19374 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, |
| 16692 | 19375 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, |
| ... | ... | @@ -16741,7 +19424,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 16741 | 19424 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| 16742 | 19425 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, |
| 16743 | 19426 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, |
| 16744 | | .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ }, |
| 19427 | .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ }, |
| 16745 | 19428 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, |
| 16746 | 19429 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, |
| 16747 | 19430 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, |
| ... | ... | @@ -18419,7 +21102,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 18419 | 21102 | .{ ._, ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ }, |
| 18420 | 21103 | .{ ._, ._, .sbb, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ }, |
| 18421 | 21104 | .{ ._, ._c, .set, .tmp1b, ._, ._, ._ }, |
| 18422 | | .{ ._, .fromCondition(switch (cc) { |
| 21105 | .{ ._, .fromCond(switch (cc) { |
| 18423 | 21106 | else => unreachable, |
| 18424 | 21107 | .l, .ge, .b, .ae => cc, |
| 18425 | 21108 | .le, .g, .be, .a => cc.commute(), |
| ... | ... | @@ -18979,8 +21662,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 18979 | 21662 | .{ .src = .{ .to_sse, .to_sse } }, |
| 18980 | 21663 | }, |
| 18981 | 21664 | .extra_temps = .{ |
| 18982 | | .{ .kind = .{ .rc = .sse } }, |
| 18983 | | .{ .kind = .{ .rc = .sse } }, |
| 21665 | .{ .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } }, |
| 21666 | .{ .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } }, |
| 18984 | 21667 | .unused, |
| 18985 | 21668 | .unused, |
| 18986 | 21669 | .unused, |
| ... | ... | @@ -18996,9 +21679,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 18996 | 21679 | } }}, |
| 18997 | 21680 | .clobbers = .{ .eflags = true }, |
| 18998 | 21681 | .each = .{ .once = &.{ |
| 18999 | | .{ ._, .vp_, .unpcklwd, .tmp0x, .src0x, .src1x, ._ }, |
| 19000 | | .{ ._, .v_ps, .cvtph2, .tmp0x, .tmp0x, ._, ._ }, |
| 19001 | | .{ ._, .v_, .movshdup, .tmp1x, .tmp0x, ._, ._ }, |
| 21682 | .{ ._, .v_ps, .cvtph2, .tmp0x, .src0q, ._, ._ }, |
| 21683 | .{ ._, .v_ps, .cvtph2, .tmp1x, .src1q, ._, ._ }, |
| 19002 | 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 | 21879 | .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, |
| 19198 | 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 | 21883 | .required_features = .{ .x87, .cmov, null, null }, |
| 19231 | 21884 | .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } }, |
| ... | ... | @@ -19479,46 +22132,59 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 19479 | 22132 | .switch_dispatch => try cg.airSwitchDispatch(inst), |
| 19480 | 22133 | .@"try", .try_cold => try cg.airTry(inst), |
| 19481 | 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 | 22136 | const dbg_stmt = air_datas[@intFromEnum(inst)].dbg_stmt; |
| 19484 | 22137 | _ = try cg.addInst(.{ |
| 19485 | 22138 | .tag = .pseudo, |
| 19486 | | .ops = .pseudo_dbg_line_line_column, |
| 22139 | .ops = .pseudo_dbg_line_stmt_line_column, |
| 19487 | 22140 | .data = .{ .line_column = .{ |
| 19488 | 22141 | .line = dbg_stmt.line, |
| 19489 | 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 | 22147 | if (cg.mir_instructions.len > 0) { |
| 19495 | 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) |
| 19497 | | prev_mir_op.* = .pseudo_dbg_line_line_column; |
| 22149 | if (prev_mir_op.* == .pseudo_dbg_line_line_column) |
| 22150 | prev_mir_op.* = .pseudo_dbg_line_stmt_line_column; |
| 19498 | 22151 | } |
| 19499 | 22152 | try cg.asmOpOnly(.{ ._, .nop }); |
| 19500 | 22153 | }, |
| 19501 | | .dbg_inline_block => if (use_old) try cg.airDbgInlineBlock(inst) else { |
| 22154 | .dbg_inline_block => { |
| 19502 | 22155 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; |
| 19503 | 22156 | const extra = cg.air.extraData(Air.DbgInlineBlock, ty_pl.payload); |
| 19504 | 22157 | const old_inline_func = cg.inline_func; |
| 19505 | 22158 | defer cg.inline_func = old_inline_func; |
| 19506 | 22159 | cg.inline_func = extra.data.func; |
| 19507 | | _ = try cg.addInst(.{ |
| 22160 | if (cg.debug_output != .none) _ = try cg.addInst(.{ |
| 19508 | 22161 | .tag = .pseudo, |
| 19509 | 22162 | .ops = .pseudo_dbg_enter_inline_func, |
| 19510 | 22163 | .data = .{ .func = extra.data.func }, |
| 19511 | 22164 | }); |
| 19512 | 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 | 22167 | .tag = .pseudo, |
| 19515 | 22168 | .ops = .pseudo_dbg_leave_inline_func, |
| 19516 | 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 | 22173 | const pl_op = air_datas[@intFromEnum(inst)].pl_op; |
| 19521 | 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 | 22188 | try cg.genLocalDebugInfo(inst, ops[0].tracking(cg).short); |
| 19523 | 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 | 23064 | }; |
| 20399 | 23065 | |
| 20400 | 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 | 23068 | .float => switch (ty.floatBits(self.target.*)) { |
| 20403 | 23069 | 16, 32, 64, 128 => 16, |
| 20404 | 23070 | 80 => break :need_mem, |
| 20405 | 23071 | else => unreachable, |
| 20406 | 23072 | }, |
| 20407 | | .vector => switch (ty.childType(zcu).zigTypeTag(zcu)) { |
| 20408 | | .float => switch (ty.childType(zcu).floatBits(self.target.*)) { |
| 23073 | .vector => { |
| 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 | 23078 | 16, 32, 64, 128 => self.vectorSize(.float), |
| 20410 | 23079 | 80 => break :need_mem, |
| 20411 | 23080 | else => unreachable, |
| 20412 | | }, |
| 20413 | | else => self.vectorSize(.int), |
| 23081 | } else self.vectorSize(.int); |
| 20414 | 23082 | }, |
| 20415 | 23083 | else => 8, |
| 20416 | 23084 | })) { |
| ... | ... | @@ -20427,17 +23095,18 @@ fn allocRegOrMemAdvanced(self: *CodeGen, ty: Type, inst: ?Air.Inst.Index, reg_ok |
| 20427 | 23095 | fn regClassForType(self: *CodeGen, ty: Type) Register.Class { |
| 20428 | 23096 | const pt = self.pt; |
| 20429 | 23097 | const zcu = pt.zcu; |
| 20430 | | return switch (ty.zigTypeTag(zcu)) { |
| 20431 | | .float => switch (ty.floatBits(self.target.*)) { |
| 20432 | | 80 => .x87, |
| 20433 | | else => .sse, |
| 20434 | | }, |
| 20435 | | .vector => switch (ty.childType(zcu).toIntern()) { |
| 20436 | | .bool_type => .general_purpose, |
| 20437 | | else => .sse, |
| 20438 | | }, |
| 20439 | | else => .general_purpose, |
| 23098 | if (self.floatBits(ty)) |float_bits| return switch (float_bits) { |
| 23099 | 80 => .x87, |
| 23100 | else => .sse, |
| 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 | 23112 | fn regSetForRegClass(rc: Register.Class) RegisterManager.RegisterBitSet { |
| ... | ... | @@ -20725,7 +23394,7 @@ fn airFptrunc(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 20725 | 23394 | .{ .v_, .cvtps2ph }, |
| 20726 | 23395 | dst_reg, |
| 20727 | 23396 | mat_src_reg.to128(), |
| 20728 | | .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))), |
| 23397 | bits.RoundMode.imm(.{}), |
| 20729 | 23398 | ); |
| 20730 | 23399 | }, |
| 20731 | 23400 | else => unreachable, |
| ... | ... | @@ -24896,26 +27565,7 @@ fn airFloatSign(self: *CodeGen, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void { |
| 24896 | 27565 | return self.floatSign(inst, tag, un_op, ty); |
| 24897 | 27566 | } |
| 24898 | 27567 | |
| 24899 | | const RoundMode = packed struct(u5) { |
| 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 { |
| 27568 | fn airRound(self: *CodeGen, inst: Air.Inst.Index, mode: bits.RoundMode) !void { |
| 24919 | 27569 | const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op; |
| 24920 | 27570 | const ty = self.typeOf(un_op); |
| 24921 | 27571 | |
| ... | ... | @@ -24972,7 +27622,7 @@ fn getRoundTag(self: *CodeGen, ty: Type) ?Mir.Inst.FixedTag { |
| 24972 | 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 | 27626 | const pt = self.pt; |
| 24977 | 27627 | const zcu = pt.zcu; |
| 24978 | 27628 | if (self.getRoundTag(ty)) |_| return .none; |
| ... | ... | @@ -24997,7 +27647,7 @@ fn genRoundLibcall(self: *CodeGen, ty: Type, src_mcv: MCValue, mode: RoundMode) |
| 24997 | 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 | 27651 | const pt = self.pt; |
| 25002 | 27652 | const mir_tag = self.getRoundTag(ty) orelse { |
| 25003 | 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 | 27661 | dst_alias, |
| 25012 | 27662 | dst_alias, |
| 25013 | 27663 | try src_mcv.mem(self, .{ .size = .fromSize(abi_size) }), |
| 25014 | | .u(@as(u5, @bitCast(mode))), |
| 27664 | mode.imm(), |
| 25015 | 27665 | ) else try self.asmRegisterRegisterRegisterImmediate( |
| 25016 | 27666 | mir_tag, |
| 25017 | 27667 | dst_alias, |
| ... | ... | @@ -25020,13 +27670,13 @@ fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode: |
| 25020 | 27670 | src_mcv.getReg().? |
| 25021 | 27671 | else |
| 25022 | 27672 | try self.copyToTmpRegister(ty, src_mcv), abi_size), |
| 25023 | | .u(@as(u5, @bitCast(mode))), |
| 27673 | mode.imm(), |
| 25024 | 27674 | ), |
| 25025 | 27675 | else => if (src_mcv.isBase()) try self.asmRegisterMemoryImmediate( |
| 25026 | 27676 | mir_tag, |
| 25027 | 27677 | dst_alias, |
| 25028 | 27678 | try src_mcv.mem(self, .{ .size = .fromSize(abi_size) }), |
| 25029 | | .u(@as(u5, @bitCast(mode))), |
| 27679 | mode.imm(), |
| 25030 | 27680 | ) else try self.asmRegisterRegisterImmediate( |
| 25031 | 27681 | mir_tag, |
| 25032 | 27682 | dst_alias, |
| ... | ... | @@ -25034,7 +27684,7 @@ fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode: |
| 25034 | 27684 | src_mcv.getReg().? |
| 25035 | 27685 | else |
| 25036 | 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 | 27944 | .{ .v_, .cvtps2ph }, |
| 25295 | 27945 | dst_reg, |
| 25296 | 27946 | dst_reg, |
| 25297 | | .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))), |
| 27947 | bits.RoundMode.imm(.{}), |
| 25298 | 27948 | ); |
| 25299 | 27949 | break :result dst_mcv; |
| 25300 | 27950 | }, |
| ... | ... | @@ -25324,7 +27974,7 @@ fn airSqrt(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 25324 | 27974 | .{ .v_, .cvtps2ph }, |
| 25325 | 27975 | dst_reg, |
| 25326 | 27976 | dst_reg, |
| 25327 | | .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))), |
| 27977 | bits.RoundMode.imm(.{}), |
| 25328 | 27978 | ); |
| 25329 | 27979 | break :result dst_mcv; |
| 25330 | 27980 | }, |
| ... | ... | @@ -25349,7 +27999,7 @@ fn airSqrt(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 25349 | 27999 | .{ .v_, .cvtps2ph }, |
| 25350 | 28000 | dst_reg, |
| 25351 | 28001 | wide_reg, |
| 25352 | | .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))), |
| 28002 | bits.RoundMode.imm(.{}), |
| 25353 | 28003 | ); |
| 25354 | 28004 | break :result dst_mcv; |
| 25355 | 28005 | }, |
| ... | ... | @@ -27613,7 +30263,7 @@ fn genBinOp( |
| 27613 | 30263 | .{ .v_, .cvtps2ph }, |
| 27614 | 30264 | dst_reg, |
| 27615 | 30265 | dst_reg, |
| 27616 | | .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))), |
| 30266 | bits.RoundMode.imm(.{}), |
| 27617 | 30267 | ); |
| 27618 | 30268 | break :adjusted .{ .register = dst_reg }; |
| 27619 | 30269 | }, |
| ... | ... | @@ -28086,14 +30736,14 @@ fn genBinOp( |
| 28086 | 30736 | dst_reg, |
| 28087 | 30737 | dst_reg, |
| 28088 | 30738 | dst_reg, |
| 28089 | | .u(@as(u5, @bitCast(RoundMode{ |
| 30739 | bits.RoundMode.imm(.{ |
| 28090 | 30740 | .mode = switch (air_tag) { |
| 28091 | 30741 | .div_trunc => .zero, |
| 28092 | 30742 | .div_floor => .down, |
| 28093 | 30743 | else => unreachable, |
| 28094 | 30744 | }, |
| 28095 | 30745 | .precision = .inexact, |
| 28096 | | }))), |
| 30746 | }), |
| 28097 | 30747 | ), |
| 28098 | 30748 | else => {}, |
| 28099 | 30749 | } |
| ... | ... | @@ -28101,7 +30751,7 @@ fn genBinOp( |
| 28101 | 30751 | .{ .v_, .cvtps2ph }, |
| 28102 | 30752 | dst_reg, |
| 28103 | 30753 | dst_reg, |
| 28104 | | .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))), |
| 30754 | bits.RoundMode.imm(.{}), |
| 28105 | 30755 | ); |
| 28106 | 30756 | return dst_mcv; |
| 28107 | 30757 | }, |
| ... | ... | @@ -28529,7 +31179,7 @@ fn genBinOp( |
| 28529 | 31179 | .{ .v_, .cvtps2ph }, |
| 28530 | 31180 | dst_reg, |
| 28531 | 31181 | dst_reg, |
| 28532 | | .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))), |
| 31182 | bits.RoundMode.imm(.{}), |
| 28533 | 31183 | ); |
| 28534 | 31184 | return dst_mcv; |
| 28535 | 31185 | }, |
| ... | ... | @@ -28581,7 +31231,7 @@ fn genBinOp( |
| 28581 | 31231 | .{ .v_, .cvtps2ph }, |
| 28582 | 31232 | dst_reg, |
| 28583 | 31233 | dst_reg, |
| 28584 | | .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))), |
| 31234 | bits.RoundMode.imm(.{}), |
| 28585 | 31235 | ); |
| 28586 | 31236 | return dst_mcv; |
| 28587 | 31237 | }, |
| ... | ... | @@ -28624,7 +31274,7 @@ fn genBinOp( |
| 28624 | 31274 | .{ .v_, .cvtps2ph }, |
| 28625 | 31275 | dst_reg, |
| 28626 | 31276 | dst_reg, |
| 28627 | | .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))), |
| 31277 | bits.RoundMode.imm(.{}), |
| 28628 | 31278 | ); |
| 28629 | 31279 | return dst_mcv; |
| 28630 | 31280 | }, |
| ... | ... | @@ -28667,7 +31317,7 @@ fn genBinOp( |
| 28667 | 31317 | .{ .v_, .cvtps2ph }, |
| 28668 | 31318 | dst_reg, |
| 28669 | 31319 | dst_reg.to256(), |
| 28670 | | .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))), |
| 31320 | bits.RoundMode.imm(.{}), |
| 28671 | 31321 | ); |
| 28672 | 31322 | return dst_mcv; |
| 28673 | 31323 | }, |
| ... | ... | @@ -28932,7 +31582,7 @@ fn genBinOp( |
| 28932 | 31582 | mask_reg, |
| 28933 | 31583 | rhs_copy_reg, |
| 28934 | 31584 | rhs_copy_reg, |
| 28935 | | .u(3), // unord |
| 31585 | bits.VexFloatPredicate.imm(.unord), |
| 28936 | 31586 | ); |
| 28937 | 31587 | try self.asmRegisterRegisterRegisterRegister( |
| 28938 | 31588 | @as(?Mir.Inst.FixedTag, switch (lhs_ty.zigTypeTag(zcu)) { |
| ... | ... | @@ -28999,7 +31649,7 @@ fn genBinOp( |
| 28999 | 31649 | }), |
| 29000 | 31650 | mask_reg, |
| 29001 | 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 | 31654 | if (has_blend) try self.asmRegisterRegisterRegister( |
| 29005 | 31655 | @as(?Mir.Inst.FixedTag, switch (lhs_ty.zigTypeTag(zcu)) { |
| ... | ... | @@ -29836,24 +32486,10 @@ fn airArg(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 29836 | 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 | 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 | 32495 | fn genLocalDebugInfo( |
| ... | ... | @@ -30909,44 +33545,6 @@ fn genTry( |
| 30909 | 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 | 33548 | fn airDbgVar(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 30951 | 33549 | const pl_op = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op; |
| 30952 | 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 | 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 | 33993 | fn lowerBlock(self: *CodeGen, inst: Air.Inst.Index, body: []const Air.Inst.Index) !void { |
| 31404 | 33994 | // A block is a setup to be able to jump to the end. |
| 31405 | 33995 | const inst_tracking_i = self.inst_tracking.count(); |
| ... | ... | @@ -32653,10 +35243,21 @@ const MoveStrategy = union(enum) { |
| 32653 | 35243 | else => dst_reg, |
| 32654 | 35244 | .lea => if (dst_reg.bitSize() >= 32) dst_reg else dst_reg.to32(), |
| 32655 | 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 | 35255 | try self.asmMemory(.{ .f_, .ld }, src_mem); |
| 32658 | | assert(dst_reg != .st7); |
| 32659 | | try self.asmRegister(.{ .f_p, .st }, @enumFromInt(@intFromEnum(dst_reg) + 1)); |
| 35256 | switch (dst_reg) { |
| 35257 | .st0 => {}, |
| 35258 | .st1, .st2, .st3, .st4, .st5, .st6, .st7 => try self.asmRegister(.{ .f_, .xch }, dst_reg), |
| 35259 | else => unreachable, |
| 35260 | } |
| 32660 | 35261 | }, |
| 32661 | 35262 | .insert_extract => |ie| if (ie.insert[0] != .p_w or self.hasFeature(.sse2)) |
| 32662 | 35263 | try self.asmRegisterMemoryImmediate(ie.insert, dst_reg, src_mem, .u(0)) |
| ... | ... | @@ -32688,9 +35289,22 @@ const MoveStrategy = union(enum) { |
| 32688 | 35289 | pub fn write(strat: MoveStrategy, self: *CodeGen, dst_mem: Memory, src_reg: Register) !void { |
| 32689 | 35290 | switch (strat) { |
| 32690 | 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 | 35293 | try self.asmRegister(.{ .f_, .ld }, src_reg); |
| 32693 | 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 | 35309 | .insert_extract, .vex_insert_extract => |ie| if (ie.extract[0] != .p_w or self.hasFeature(.sse4_1)) |
| 32696 | 35310 | try self.asmMemoryRegisterImmediate(ie.extract, dst_mem, src_reg, .u(0)) |
| ... | ... | @@ -33247,10 +35861,25 @@ fn genSetReg( |
| 33247 | 35861 | .general_purpose, .segment => unreachable, |
| 33248 | 35862 | .x87 => switch (src_reg) { |
| 33249 | 35863 | .st0 => try self.asmRegister(.{ .f_, .st }, dst_reg), |
| 33250 | | .st1, .st2, .st3, .st4, .st5, .st6 => { |
| 33251 | | try self.asmRegister(.{ .f_, .ld }, src_reg); |
| 33252 | | assert(dst_reg != .st7); |
| 33253 | | try self.asmRegister(.{ .f_p, .st }, @enumFromInt(@intFromEnum(dst_reg) + 1)); |
| 35864 | .st1, .st2, .st3, .st4, .st5, .st6 => switch (dst_reg) { |
| 35865 | .st0 => { |
| 35866 | try self.asmRegister(.{ .f_p, .st }, .st0); |
| 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 | 35884 | else => unreachable, |
| 33256 | 35885 | }, |
| ... | ... | @@ -33276,10 +35905,14 @@ fn genSetReg( |
| 33276 | 35905 | .base = .{ .frame = frame_index }, |
| 33277 | 35906 | .mod = .{ .rm = .{ .size = .fromSize(abi_size) } }, |
| 33278 | 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 | 35912 | try self.asmRegisterMemory(switch (frame_size) { |
| 33280 | 35913 | 4 => .{ ._ss, .mov }, |
| 33281 | 35914 | 8 => .{ ._ps, .movl }, |
| 33282 | | 16 => .{ ._ps, .mov }, |
| 35915 | 16 => .{ ._ps, .mova }, |
| 33283 | 35916 | else => unreachable, |
| 33284 | 35917 | }, dst_reg.to128(), .{ |
| 33285 | 35918 | .base = .{ .frame = frame_index }, |
| ... | ... | @@ -33292,7 +35925,26 @@ fn genSetReg( |
| 33292 | 35925 | .{ .register = try self.copyToTmpRegister(ty, src_mcv) }, |
| 33293 | 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 | 35948 | .sse => try self.asmRegisterRegister( |
| 33297 | 35949 | @as(?Mir.Inst.FixedTag, switch (ty.scalarType(zcu).zigTypeTag(zcu)) { |
| 33298 | 35950 | else => switch (abi_size) { |
| ... | ... | @@ -37793,7 +40445,7 @@ fn resolveCallingConventionValues( |
| 37793 | 40445 | else if (ret_gpr.len >= 2 and ret_ty.isSliceAtRuntime(zcu)) |
| 37794 | 40446 | break :return_value .init(.{ .register_pair = ret_gpr[0..2].* }), |
| 37795 | 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 | 40449 | .sse => if (ret_size <= self.vectorSize(.float)) break :return_value .init(.{ |
| 37798 | 40450 | .register = registerAlias(abi.getCAbiSseReturnRegs(cc)[0], @max(ret_size, 16)), |
| 37799 | 40451 | }), |
| ... | ... | @@ -37828,7 +40480,7 @@ fn resolveCallingConventionValues( |
| 37828 | 40480 | continue; |
| 37829 | 40481 | }, |
| 37830 | 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 | 40484 | arg.* = .{ .register = param_x87[0] }; |
| 37833 | 40485 | param_x87 = param_x87[1..]; |
| 37834 | 40486 | continue; |
| ... | ... | @@ -37939,10 +40591,12 @@ fn registerAlias(reg: Register, size_bytes: u32) Register { |
| 37939 | 40591 | |
| 37940 | 40592 | fn memSize(self: *CodeGen, ty: Type) Memory.Size { |
| 37941 | 40593 | const zcu = self.pt.zcu; |
| 37942 | | return switch (ty.zigTypeTag(zcu)) { |
| 37943 | | .float => .fromBitSize(ty.floatBits(self.target.*)), |
| 37944 | | else => .fromSize(@intCast(ty.abiSize(zcu))), |
| 37945 | | }; |
| 40594 | return if (self.floatBits(ty)) |float_bits| |
| 40595 | .fromBitSize(float_bits) |
| 40596 | else if (ty.isVector(zcu) and ty.vectorLen(zcu) == 1 and self.floatBits(ty.childType(zcu)) == 80) |
| 40597 | .tbyte |
| 40598 | else |
| 40599 | .fromSize(@intCast(ty.abiSize(zcu))); |
| 37946 | 40600 | } |
| 37947 | 40601 | |
| 37948 | 40602 | fn splitType(self: *CodeGen, comptime parts_len: usize, ty: Type) ![parts_len]Type { |
| ... | ... | @@ -39918,46 +42572,46 @@ const Select = struct { |
| 39918 | 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 { |
| 39924 | | return switch (spec.kind) { |
| 39925 | | .unused => 0, |
| 39926 | | .reg => 1, |
| 39927 | | else => 2, |
| 39928 | | }; |
| 39929 | | } |
| 42576 | fn pass(kind: Kind) u2 { |
| 42577 | return switch (kind) { |
| 42578 | .unused => 0, |
| 42579 | .reg => 1, |
| 42580 | else => 2, |
| 42581 | }; |
| 42582 | } |
| 42583 | }; |
| 39930 | 42584 | |
| 39931 | | fn create(spec: TempSpec, s: *Select) !Temp { |
| 42585 | fn create(spec: TempSpec, s: *Select) !struct { Temp, bool } { |
| 39932 | 42586 | const cg = s.cg; |
| 39933 | 42587 | return switch (spec.kind) { |
| 39934 | 42588 | .unused => unreachable, |
| 39935 | | .any => try cg.tempAlloc(spec.type), |
| 39936 | | .cc => |cc| try cg.tempInit(spec.type, .{ .eflags = cc }), |
| 39937 | | .ref => |ref| ref.deref(s), |
| 39938 | | .reg => |reg| try cg.tempInit(spec.type, .{ .register = reg }), |
| 39939 | | .rc => |rc| try cg.tempAllocReg(spec.type, regSetForRegClass(rc)), |
| 42589 | .any => .{ try cg.tempAlloc(spec.type), true }, |
| 42590 | .cc => |cc| .{ try cg.tempInit(spec.type, .{ .eflags = cc }), true }, |
| 42591 | .ref => |ref| .{ ref.deref(s), false }, |
| 42592 | .reg => |reg| .{ try cg.tempInit(spec.type, .{ .register = reg }), true }, |
| 42593 | .rc => |rc| .{ try cg.tempAllocReg(spec.type, regSetForRegClass(rc)), true }, |
| 39940 | 42594 | .mut_rc => |ref_rc| { |
| 39941 | 42595 | const temp = ref_rc.ref.deref(s); |
| 39942 | 42596 | if (temp.isMut(cg)) switch (temp.tracking(cg).short) { |
| 39943 | | .register => |reg| if (reg.class() == ref_rc.rc) return temp, |
| 39944 | | .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc.rc) return temp, |
| 42597 | .register => |reg| if (reg.class() == ref_rc.rc) return .{ temp, false }, |
| 42598 | .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc.rc) return .{ temp, false }, |
| 39945 | 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), |
| 39950 | | .rc_mask => |rc_mask| try cg.tempAllocReg(spec.type, regSetForRegClass(rc_mask.rc)), |
| 42603 | .ref_mask => |ref_mask| .{ ref_mask.ref.deref(s), false }, |
| 42604 | .rc_mask => |rc_mask| .{ try cg.tempAllocReg(spec.type, regSetForRegClass(rc_mask.rc)), true }, |
| 39951 | 42605 | .mut_rc_mask => |ref_rc_mask| { |
| 39952 | 42606 | const temp = ref_rc_mask.ref.deref(s); |
| 39953 | 42607 | if (temp.isMut(cg)) switch (temp.tracking(cg).short) { |
| 39954 | | .register => |reg| if (reg.class() == ref_rc_mask.rc) return temp, |
| 39955 | | .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc_mask.rc) return temp, |
| 42608 | .register => |reg| if (reg.class() == ref_rc_mask.rc) return .{ temp, false }, |
| 42609 | .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc_mask.rc) return .{ temp, false }, |
| 39956 | 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 | 42615 | .smin_mem, .smax_mem, .umin_mem, .umax_mem => |const_info| { |
| 39962 | 42616 | const pt = cg.pt; |
| 39963 | 42617 | const zcu = pt.zcu; |
| ... | ... | @@ -40022,13 +42676,16 @@ const Select = struct { |
| 40022 | 42676 | })).toIntern(), |
| 40023 | 42677 | .storage = .{ .repeated_elem = res_scalar_val.toIntern() }, |
| 40024 | 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 = .{ |
| 40028 | | .sym_index = try elf_file.getGlobalSymbol(symbol.name, symbol.lib), |
| 40029 | | } }) else if (cg.bin_file.cast(.macho)) |macho_file| try cg.tempInit(spec.type, .{ .lea_symbol = .{ |
| 40030 | | .sym_index = try macho_file.getGlobalSymbol(symbol.name, symbol.lib), |
| 40031 | | } }) else cg.fail("external symbols unimplemented for {s}", .{@tagName(cg.bin_file.tag)}), |
| 42681 | .symbol => |symbol| .{ try cg.tempInit(spec.type, .{ .lea_symbol = .{ |
| 42682 | .sym_index = if (cg.bin_file.cast(.elf)) |elf_file| |
| 42683 | try elf_file.getGlobalSymbol(symbol.name, symbol.lib) |
| 42684 | else if (cg.bin_file.cast(.macho)) |macho_file| |
| 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 | 42699 | Select.Operand, |
| 40043 | 42700 | Select.Operand, |
| 40044 | 42701 | }; |
| 40045 | | const Label = enum { @"0:", @"1:", @"_" }; |
| 42702 | const Label = enum { @"0:", @"1:", @"2:", @"_" }; |
| 40046 | 42703 | const Operand = struct { |
| 40047 | 42704 | tag: Tag, |
| 40048 | 42705 | base: Ref.Sized = .none, |
| ... | ... | @@ -40272,6 +42929,8 @@ const Select = struct { |
| 40272 | 42929 | const @"0f": Select.Operand = .{ .tag = .forward_label, .base = .{ .ref = .tmp0, .size = .none } }; |
| 40273 | 42930 | const @"1b": Select.Operand = .{ .tag = .backward_label, .base = .{ .ref = .tmp1, .size = .none } }; |
| 40274 | 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 | 42935 | const tmp0b: Select.Operand = .{ .tag = .ref, .base = .tmp0b }; |
| 40277 | 42936 | const tmp0w: Select.Operand = .{ .tag = .ref, .base = .tmp0w }; |
| ... | ... | @@ -40390,14 +43049,24 @@ const Select = struct { |
| 40390 | 43049 | fn sia(imm: i32, base: Ref.Sized, adjust: Adjust) Select.Operand { |
| 40391 | 43050 | return .{ .tag = .simm, .base = base, .adjust = adjust, .imm = imm }; |
| 40392 | 43051 | } |
| 40393 | | fn ui(imm: i32) Select.Operand { |
| 40394 | | return .{ .tag = .uimm, .imm = imm }; |
| 43052 | fn ui(imm: u32) Select.Operand { |
| 43053 | return .{ .tag = .uimm, .imm = @bitCast(imm) }; |
| 40395 | 43054 | } |
| 40396 | 43055 | fn ua(base: Ref.Sized, adjust: Adjust) Select.Operand { |
| 40397 | 43056 | return .{ .tag = .uimm, .base = base, .adjust = adjust }; |
| 40398 | 43057 | } |
| 40399 | | fn uia(imm: i32, base: Ref.Sized, adjust: Adjust) Select.Operand { |
| 40400 | | return .{ .tag = .uimm, .base = base, .adjust = adjust, .imm = imm }; |
| 43058 | fn uia(imm: u32, base: Ref.Sized, adjust: Adjust) Select.Operand { |
| 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 | 43072 | fn lea(size: Memory.Size, base: Ref) Select.Operand { |
| ... | ... | @@ -40705,6 +43374,7 @@ fn select( |
| 40705 | 43374 | .ccc => cg.target.cCallingConvention().?, |
| 40706 | 43375 | .zigcc => .auto, |
| 40707 | 43376 | }; |
| 43377 | assert(case.clobbers.eflags); |
| 40708 | 43378 | const err_ret_trace_reg = if (cc == .auto and cg.pt.zcu.comp.config.any_error_tracing) err_ret_trace_reg: { |
| 40709 | 43379 | const param_gpr = abi.getCAbiIntParamRegs(.auto); |
| 40710 | 43380 | break :err_ret_trace_reg param_gpr[param_gpr.len - 1]; |
| ... | ... | @@ -40722,8 +43392,14 @@ fn select( |
| 40722 | 43392 | |
| 40723 | 43393 | @memcpy(src_slots[0..src_temps.len], src_temps); |
| 40724 | 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()) { |
| 40726 | | slot.* = try spec.create(&s); |
| 43395 | for (dst_temps, dst_tys, case.dst_temps[0..dst_temps.len]) |*dst_temp, dst_ty, dst_kind| { |
| 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 | 43405 | while (true) for (pattern.src[0..src_temps.len], src_temps) |src_pattern, *src_temp| { |
| ... | ... | @@ -40734,8 +43410,10 @@ fn select( |
| 40734 | 43410 | |
| 40735 | 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| |
| 40738 | | dst_temp.* = (try Select.TempSpec.create(.{ .type = dst_ty, .kind = dst_kind }, &s)); |
| 43413 | for (dst_temps, dst_tys, case.dst_temps[0..dst_temps.len]) |*dst_temp, dst_ty, dst_kind| { |
| 43414 | if (dst_kind.pass() != 2) continue; |
| 43415 | dst_temp.*, _ = try Select.TempSpec.create(.{ .type = dst_ty, .kind = dst_kind }, &s); |
| 43416 | } |
| 40739 | 43417 | @memcpy(dst_slots[0..dst_temps.len], dst_temps); |
| 40740 | 43418 | |
| 40741 | 43419 | switch (case.each) { |
| ... | ... | @@ -40765,7 +43443,7 @@ fn select( |
| 40765 | 43443 | } |
| 40766 | 43444 | } |
| 40767 | 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 | 43447 | return; |
| 40770 | 43448 | } |
| 40771 | 43449 | } |