| ... | @@ -150,7 +150,7 @@ const Owner = union(enum) { | ... | @@ -150,7 +150,7 @@ const Owner = union(enum) { |
| 150 | }; | 150 | }; |
| 151 | | 151 | |
| 152 | const MaskKind = enum(u1) { sign, all }; | 152 | const MaskKind = enum(u1) { sign, all }; |
| 153 | const MaskInfo = packed struct { kind: MaskKind, inverted: bool, scalar: Memory.Size }; | 153 | const MaskInfo = packed struct { kind: MaskKind, inverted: bool = false, scalar: Memory.Size }; |
| 154 | | 154 | |
| 155 | pub const MCValue = union(enum) { | 155 | pub const MCValue = union(enum) { |
| 156 | /// No runtime bits. `void` types, empty structs, u0, enums with 1 tag, etc. | 156 | /// No runtime bits. `void` types, empty structs, u0, enums with 1 tag, etc. |
| ... | @@ -2393,7 +2393,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2393,7 +2393,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2393 | } | 2393 | } |
| 2394 | | 2394 | |
| 2395 | fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | 2395 | fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2396 | @setEvalBranchQuota(1_800); | 2396 | @setEvalBranchQuota(3_400); |
| 2397 | const pt = cg.pt; | 2397 | const pt = cg.pt; |
| 2398 | const zcu = pt.zcu; | 2398 | const zcu = pt.zcu; |
| 2399 | const ip = &zcu.intern_pool; | 2399 | const ip = &zcu.intern_pool; |
| ... | @@ -2433,17 +2433,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2433,17 +2433,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2433 | .add_wrap, | 2433 | .add_wrap, |
| 2434 | .sub, | 2434 | .sub, |
| 2435 | .sub_wrap, | 2435 | .sub_wrap, |
| 2436 | .min, | | |
| 2437 | .max, | | |
| 2438 | => |air_tag| try cg.airBinOp(inst, air_tag), | 2436 | => |air_tag| try cg.airBinOp(inst, air_tag), |
| 2439 | | 2437 | |
| 2440 | .shr, .shr_exact => try cg.airShlShrBinOp(inst), | 2438 | .shr, .shr_exact => try cg.airShlShrBinOp(inst), |
| 2441 | .shl, .shl_exact => try cg.airShlShrBinOp(inst), | 2439 | .shl, .shl_exact => try cg.airShlShrBinOp(inst), |
| 2442 | | 2440 | |
| 2443 | .mul => try cg.airMulDivBinOp(inst), | 2441 | .mul, |
| 2444 | .mul_wrap => try cg.airMulDivBinOp(inst), | 2442 | .mul_wrap, |
| 2445 | .rem => try cg.airMulDivBinOp(inst), | 2443 | .rem, |
| 2446 | .mod => try cg.airMulDivBinOp(inst), | 2444 | .mod, |
| | 2445 | .div_float, |
| | 2446 | .div_trunc, |
| | 2447 | .div_floor, |
| | 2448 | .div_exact, |
| | 2449 | => |air_tag| try cg.airMulDivBinOp(inst, air_tag), |
| 2447 | | 2450 | |
| 2448 | .add_sat => try cg.airAddSat(inst), | 2451 | .add_sat => try cg.airAddSat(inst), |
| 2449 | .sub_sat => try cg.airSubSat(inst), | 2452 | .sub_sat => try cg.airSubSat(inst), |
| ... | @@ -2465,15 +2468,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2465,15 +2468,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2465 | .ceil => try cg.airRound(inst, .{ .mode = .up, .precision = .inexact }), | 2468 | .ceil => try cg.airRound(inst, .{ .mode = .up, .precision = .inexact }), |
| 2466 | .trunc_float => try cg.airRound(inst, .{ .mode = .zero, .precision = .inexact }), | 2469 | .trunc_float => try cg.airRound(inst, .{ .mode = .zero, .precision = .inexact }), |
| 2467 | .sqrt => try cg.airSqrt(inst), | 2470 | .sqrt => try cg.airSqrt(inst), |
| 2468 | .neg => try cg.airFloatSign(inst), | 2471 | .neg => |air_tag| try cg.airFloatSign(inst, air_tag), |
| 2469 | | 2472 | |
| 2470 | .add_with_overflow => try cg.airAddSubWithOverflow(inst), | 2473 | .add_with_overflow => try cg.airAddSubWithOverflow(inst), |
| 2471 | .sub_with_overflow => try cg.airAddSubWithOverflow(inst), | 2474 | .sub_with_overflow => try cg.airAddSubWithOverflow(inst), |
| 2472 | .mul_with_overflow => try cg.airMulWithOverflow(inst), | 2475 | .mul_with_overflow => try cg.airMulWithOverflow(inst), |
| 2473 | .shl_with_overflow => try cg.airShlWithOverflow(inst), | 2476 | .shl_with_overflow => try cg.airShlWithOverflow(inst), |
| 2474 | | 2477 | |
| 2475 | .div_float, .div_trunc, .div_floor, .div_exact => try cg.airMulDivBinOp(inst), | | |
| 2476 | | | |
| 2477 | .cmp_lt_errors_len => try cg.airCmpLtErrorsLen(inst), | 2478 | .cmp_lt_errors_len => try cg.airCmpLtErrorsLen(inst), |
| 2478 | | 2479 | |
| 2479 | .bitcast => try cg.airBitCast(inst), | 2480 | .bitcast => try cg.airBitCast(inst), |
| ... | @@ -2528,19 +2529,19 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2528,19 +2529,19 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2528 | .sub_safe, | 2529 | .sub_safe, |
| 2529 | .mul_safe, | 2530 | .mul_safe, |
| 2530 | => return cg.fail("TODO implement safety_checked_instructions", .{}), | 2531 | => return cg.fail("TODO implement safety_checked_instructions", .{}), |
| 2531 | .add_optimized, | 2532 | |
| 2532 | .sub_optimized, | 2533 | .add_optimized => try cg.airBinOp(inst, .add), |
| 2533 | .mul_optimized, | 2534 | .sub_optimized => try cg.airBinOp(inst, .sub), |
| 2534 | .div_float_optimized, | 2535 | .mul_optimized => try cg.airBinOp(inst, .mul), |
| 2535 | .div_trunc_optimized, | 2536 | .div_float_optimized => try cg.airMulDivBinOp(inst, .div_float), |
| 2536 | .div_floor_optimized, | 2537 | .div_trunc_optimized => try cg.airMulDivBinOp(inst, .div_trunc), |
| 2537 | .div_exact_optimized, | 2538 | .div_floor_optimized => try cg.airMulDivBinOp(inst, .div_floor), |
| 2538 | .rem_optimized, | 2539 | .div_exact_optimized => try cg.airMulDivBinOp(inst, .div_exact), |
| 2539 | .mod_optimized, | 2540 | .rem_optimized => try cg.airMulDivBinOp(inst, .rem), |
| 2540 | .neg_optimized, | 2541 | .mod_optimized => try cg.airMulDivBinOp(inst, .mod), |
| 2541 | .reduce_optimized, | 2542 | .neg_optimized => try cg.airFloatSign(inst, .neg), |
| 2542 | .int_from_float_optimized, | 2543 | .reduce_optimized => try cg.airReduce(inst), |
| 2543 | => return cg.fail("TODO implement optimized float mode", .{}), | 2544 | .int_from_float_optimized => try cg.airIntFromFloat(inst), |
| 2544 | | 2545 | |
| 2545 | .arg => try cg.airDbgArg(inst), | 2546 | .arg => try cg.airDbgArg(inst), |
| 2546 | .ptr_add => |air_tag| if (use_old) try cg.airPtrArithmetic(inst, air_tag) else { | 2547 | .ptr_add => |air_tag| if (use_old) try cg.airPtrArithmetic(inst, air_tag) else { |
| ... | @@ -2657,10 +2658,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2657,10 +2658,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2657 | } else { // hack around Sema OPV bugs | 2658 | } else { // hack around Sema OPV bugs |
| 2658 | res[0] = ops[0]; | 2659 | res[0] = ops[0]; |
| 2659 | } | 2660 | } |
| 2660 | for (ops) |op| for (res) |r| { | 2661 | try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); |
| 2661 | if (op.index == r.index) break; | | |
| 2662 | } else try op.die(cg); | | |
| 2663 | try res[0].moveTo(inst, cg); | | |
| 2664 | }, | 2662 | }, |
| 2665 | .ptr_sub => |air_tag| if (use_old) try cg.airPtrArithmetic(inst, air_tag) else { | 2663 | .ptr_sub => |air_tag| if (use_old) try cg.airPtrArithmetic(inst, air_tag) else { |
| 2666 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; | 2664 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; |
| ... | @@ -2792,673 +2790,451 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2792,673 +2790,451 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2792 | // hack around Sema OPV bugs | 2790 | // hack around Sema OPV bugs |
| 2793 | res[0] = ops[0]; | 2791 | res[0] = ops[0]; |
| 2794 | } | 2792 | } |
| 2795 | for (ops) |op| for (res) |r| { | 2793 | try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); |
| 2796 | if (op.index == r.index) break; | | |
| 2797 | } else try op.die(cg); | | |
| 2798 | try res[0].moveTo(inst, cg); | | |
| 2799 | }, | | |
| 2800 | .alloc => if (use_old) try cg.airAlloc(inst) else { | | |
| 2801 | const ty = air_datas[@intFromEnum(inst)].ty; | | |
| 2802 | var slot = try cg.tempInit(ty, .{ .lea_frame = .{ | | |
| 2803 | .index = try cg.allocMemPtr(inst), | | |
| 2804 | } }); | | |
| 2805 | try slot.moveTo(inst, cg); | | |
| 2806 | }, | | |
| 2807 | .inferred_alloc, .inferred_alloc_comptime => unreachable, | | |
| 2808 | .ret_ptr => if (use_old) try cg.airRetPtr(inst) else { | | |
| 2809 | const ty = air_datas[@intFromEnum(inst)].ty; | | |
| 2810 | var slot = switch (cg.ret_mcv.long) { | | |
| 2811 | else => unreachable, | | |
| 2812 | .none => try cg.tempInit(ty, .{ .lea_frame = .{ | | |
| 2813 | .index = try cg.allocMemPtr(inst), | | |
| 2814 | } }), | | |
| 2815 | .load_frame => slot: { | | |
| 2816 | var slot = try cg.tempInit(ty, cg.ret_mcv.long); | | |
| 2817 | try slot.toOffset(cg.ret_mcv.short.indirect.off, cg); | | |
| 2818 | break :slot slot; | | |
| 2819 | }, | | |
| 2820 | }; | | |
| 2821 | try slot.moveTo(inst, cg); | | |
| 2822 | }, | 2794 | }, |
| 2823 | .assembly => try cg.airAsm(inst), | 2795 | .max => |air_tag| if (use_old) try cg.airBinOp(inst, air_tag) else fallback: { |
| 2824 | .bit_and, .bit_or, .xor, .bool_and, .bool_or => |air_tag| if (use_old) try cg.airBinOp(inst, air_tag) else { | | |
| 2825 | const bin_op = air_datas[@intFromEnum(inst)].bin_op; | 2796 | 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); |
| 2826 | var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs }); | 2798 | var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs }); |
| 2827 | var res: [1]Temp = undefined; | 2799 | var res: [1]Temp = undefined; |
| 2828 | cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, switch (@as(Mir.Inst.Tag, switch (air_tag) { | 2800 | cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{ |
| 2829 | else => unreachable, | 2801 | .required_features = .{ .cmov, null, null, null }, |
| 2830 | .bit_and, .bool_and => .@"and", | 2802 | .src_constraints = .{ .{ .signed_int = .byte }, .{ .signed_int = .byte } }, |
| 2831 | .bit_or, .bool_or => .@"or", | 2803 | .patterns = &.{ |
| 2832 | .xor => .xor, | 2804 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 2833 | })) { | 2805 | }, |
| 2834 | else => unreachable, | 2806 | .dst_temps = .{.{ .ref = .src0 }}, |
| 2835 | inline .@"and", .@"or", .xor => |mir_tag| comptime &.{ .{ | 2807 | .clobbers = .{ .eflags = true }, |
| 2836 | .src_constraints = .{ .{ .size = .byte }, .{ .size = .byte } }, | 2808 | .each = .{ .once = &.{ |
| 2837 | .patterns = &.{ | 2809 | .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ }, |
| 2838 | .{ .src = .{ .mut_mem, .imm8 } }, | 2810 | .{ ._, ._l, .cmov, .dst0d, .src1d, ._, ._ }, |
| 2839 | .{ .src = .{ .imm8, .mut_mem }, .commute = .{ 0, 1 } }, | | |
| 2840 | .{ .src = .{ .to_mut_gpr, .imm8 } }, | | |
| 2841 | .{ .src = .{ .imm8, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 2842 | .{ .src = .{ .mut_mem, .to_gpr } }, | | |
| 2843 | .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } }, | | |
| 2844 | .{ .src = .{ .to_mut_gpr, .mem } }, | | |
| 2845 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 2846 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | | |
| 2847 | }, | | |
| 2848 | .dst_temps = .{.{ .ref = .src0 }}, | | |
| 2849 | .clobbers = .{ .eflags = true }, | | |
| 2850 | .each = .{ .once = &.{ | | |
| 2851 | .{ ._, ._, mir_tag, .dst0b, .src1b, ._, ._ }, | | |
| 2852 | } }, | | |
| 2853 | }, .{ | | |
| 2854 | .src_constraints = .{ .{ .size = .word }, .{ .size = .word } }, | | |
| 2855 | .patterns = &.{ | | |
| 2856 | .{ .src = .{ .mut_mem, .imm16 } }, | | |
| 2857 | .{ .src = .{ .imm16, .mut_mem }, .commute = .{ 0, 1 } }, | | |
| 2858 | .{ .src = .{ .to_mut_gpr, .imm16 } }, | | |
| 2859 | .{ .src = .{ .imm16, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 2860 | .{ .src = .{ .mut_mem, .to_gpr } }, | | |
| 2861 | .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } }, | | |
| 2862 | .{ .src = .{ .to_mut_gpr, .mem } }, | | |
| 2863 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 2864 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | | |
| 2865 | }, | | |
| 2866 | .dst_temps = .{.{ .ref = .src0 }}, | | |
| 2867 | .clobbers = .{ .eflags = true }, | | |
| 2868 | .each = .{ .once = &.{ | | |
| 2869 | .{ ._, ._, mir_tag, .dst0w, .src1w, ._, ._ }, | | |
| 2870 | } }, | | |
| 2871 | }, .{ | | |
| 2872 | .src_constraints = .{ .{ .size = .dword }, .{ .size = .dword } }, | | |
| 2873 | .patterns = &.{ | | |
| 2874 | .{ .src = .{ .mut_mem, .imm32 } }, | | |
| 2875 | .{ .src = .{ .imm32, .mut_mem }, .commute = .{ 0, 1 } }, | | |
| 2876 | .{ .src = .{ .to_mut_gpr, .imm32 } }, | | |
| 2877 | .{ .src = .{ .imm32, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 2878 | .{ .src = .{ .mut_mem, .to_gpr } }, | | |
| 2879 | .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } }, | | |
| 2880 | .{ .src = .{ .to_mut_gpr, .mem } }, | | |
| 2881 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 2882 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | | |
| 2883 | }, | | |
| 2884 | .dst_temps = .{.{ .ref = .src0 }}, | | |
| 2885 | .clobbers = .{ .eflags = true }, | | |
| 2886 | .each = .{ .once = &.{ | | |
| 2887 | .{ ._, ._, mir_tag, .dst0d, .src1d, ._, ._ }, | | |
| 2888 | } }, | | |
| 2889 | }, .{ | | |
| 2890 | .required_features = .{ .@"64bit", null, null, null }, | | |
| 2891 | .src_constraints = .{ .{ .size = .qword }, .{ .size = .qword } }, | | |
| 2892 | .patterns = &.{ | | |
| 2893 | .{ .src = .{ .mut_mem, .simm32 } }, | | |
| 2894 | .{ .src = .{ .simm32, .mut_mem }, .commute = .{ 0, 1 } }, | | |
| 2895 | .{ .src = .{ .to_mut_gpr, .simm32 } }, | | |
| 2896 | .{ .src = .{ .simm32, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 2897 | .{ .src = .{ .mut_mem, .to_gpr } }, | | |
| 2898 | .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } }, | | |
| 2899 | .{ .src = .{ .to_mut_gpr, .mem } }, | | |
| 2900 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 2901 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | | |
| 2902 | }, | | |
| 2903 | .dst_temps = .{.{ .ref = .src0 }}, | | |
| 2904 | .clobbers = .{ .eflags = true }, | | |
| 2905 | .each = .{ .once = &.{ | | |
| 2906 | .{ ._, ._, mir_tag, .dst0q, .src1q, ._, ._ }, | | |
| 2907 | } }, | | |
| 2908 | }, .{ | | |
| 2909 | .required_features = .{ .mmx, null, null, null }, | | |
| 2910 | .src_constraints = .{ .{ .size = .qword }, .{ .size = .qword } }, | | |
| 2911 | .patterns = &.{ | | |
| 2912 | .{ .src = .{ .to_mut_mm, .mem } }, | | |
| 2913 | .{ .src = .{ .mem, .to_mut_mm }, .commute = .{ 0, 1 } }, | | |
| 2914 | .{ .src = .{ .to_mut_mm, .to_mm } }, | | |
| 2915 | }, | | |
| 2916 | .dst_temps = .{.{ .ref = .src0 }}, | | |
| 2917 | .each = .{ .once = &.{ | | |
| 2918 | .{ ._, .p_, mir_tag, .dst0q, .src1q, ._, ._ }, | | |
| 2919 | } }, | | |
| 2920 | }, .{ | | |
| 2921 | .required_features = .{ .avx, null, null, null }, | | |
| 2922 | .src_constraints = .{ .{ .size = .xword }, .{ .size = .xword } }, | | |
| 2923 | .patterns = &.{ | | |
| 2924 | .{ .src = .{ .to_xmm, .mem } }, | | |
| 2925 | .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } }, | | |
| 2926 | .{ .src = .{ .to_xmm, .to_xmm } }, | | |
| 2927 | }, | | |
| 2928 | .dst_temps = .{.{ .rc = .sse }}, | | |
| 2929 | .each = .{ .once = &.{ | | |
| 2930 | .{ ._, .vp_, mir_tag, .dst0x, .src0x, .src1x, ._ }, | | |
| 2931 | } }, | | |
| 2932 | }, .{ | | |
| 2933 | .required_features = .{ .sse2, null, null, null }, | | |
| 2934 | .src_constraints = .{ .{ .size = .xword }, .{ .size = .xword } }, | | |
| 2935 | .patterns = &.{ | | |
| 2936 | .{ .src = .{ .to_mut_xmm, .mem } }, | | |
| 2937 | .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } }, | | |
| 2938 | .{ .src = .{ .to_mut_xmm, .to_xmm } }, | | |
| 2939 | }, | | |
| 2940 | .dst_temps = .{.{ .ref = .src0 }}, | | |
| 2941 | .each = .{ .once = &.{ | | |
| 2942 | .{ ._, .p_, mir_tag, .dst0x, .src1x, ._, ._ }, | | |
| 2943 | } }, | | |
| 2944 | }, .{ | | |
| 2945 | .required_features = .{ .sse, null, null, null }, | | |
| 2946 | .src_constraints = .{ .{ .size = .xword }, .{ .size = .xword } }, | | |
| 2947 | .patterns = &.{ | | |
| 2948 | .{ .src = .{ .to_mut_xmm, .mem } }, | | |
| 2949 | .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } }, | | |
| 2950 | .{ .src = .{ .to_mut_xmm, .to_xmm } }, | | |
| 2951 | }, | | |
| 2952 | .dst_temps = .{.{ .ref = .src0 }}, | | |
| 2953 | .each = .{ .once = &.{ | | |
| 2954 | .{ ._, ._ps, mir_tag, .dst0x, .src1x, ._, ._ }, | | |
| 2955 | } }, | | |
| 2956 | }, .{ | | |
| 2957 | .required_features = .{ .avx2, null, null, null }, | | |
| 2958 | .src_constraints = .{ .{ .size = .yword }, .{ .size = .yword } }, | | |
| 2959 | .patterns = &.{ | | |
| 2960 | .{ .src = .{ .to_ymm, .mem } }, | | |
| 2961 | .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } }, | | |
| 2962 | .{ .src = .{ .to_ymm, .to_ymm } }, | | |
| 2963 | }, | | |
| 2964 | .dst_temps = .{.{ .rc = .sse }}, | | |
| 2965 | .each = .{ .once = &.{ | | |
| 2966 | .{ ._, .vp_, mir_tag, .dst0y, .src0y, .src1y, ._ }, | | |
| 2967 | } }, | | |
| 2968 | }, .{ | | |
| 2969 | .required_features = .{ .avx, null, null, null }, | | |
| 2970 | .src_constraints = .{ .{ .size = .yword }, .{ .size = .yword } }, | | |
| 2971 | .patterns = &.{ | | |
| 2972 | .{ .src = .{ .to_ymm, .mem } }, | | |
| 2973 | .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } }, | | |
| 2974 | .{ .src = .{ .to_ymm, .to_ymm } }, | | |
| 2975 | }, | | |
| 2976 | .dst_temps = .{.{ .rc = .sse }}, | | |
| 2977 | .each = .{ .once = &.{ | | |
| 2978 | .{ ._, .v_pd, mir_tag, .dst0y, .src0y, .src1y, ._ }, | | |
| 2979 | } }, | | |
| 2980 | }, .{ | | |
| 2981 | .required_features = .{ .avx2, null, null, null }, | | |
| 2982 | .src_constraints = .{ .{ .multiple_size = .yword }, .{ .multiple_size = .yword } }, | | |
| 2983 | .patterns = &.{ | | |
| 2984 | .{ .src = .{ .to_mem, .to_mem } }, | | |
| 2985 | }, | | |
| 2986 | .extra_temps = .{ | | |
| 2987 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | | |
| 2988 | .{ .kind = .{ .rc = .sse } }, | | |
| 2989 | .unused, | | |
| 2990 | .unused, | | |
| 2991 | .unused, | | |
| 2992 | .unused, | | |
| 2993 | }, | | |
| 2994 | .dst_temps = .{.mem}, | | |
| 2995 | .clobbers = .{ .eflags = true }, | | |
| 2996 | .each = .{ .once = &.{ | | |
| 2997 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | | |
| 2998 | .{ .@"0:", .v_dqu, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | | |
| 2999 | .{ ._, .vp_, mir_tag, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, | | |
| 3000 | .{ ._, .v_dqu, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, | | |
| 3001 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | | |
| 3002 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 3003 | } }, | | |
| 3004 | }, .{ | | |
| 3005 | .required_features = .{ .avx, null, null, null }, | | |
| 3006 | .src_constraints = .{ .{ .multiple_size = .yword }, .{ .multiple_size = .yword } }, | | |
| 3007 | .patterns = &.{ | | |
| 3008 | .{ .src = .{ .to_mem, .to_mem } }, | | |
| 3009 | }, | | |
| 3010 | .extra_temps = .{ | | |
| 3011 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | | |
| 3012 | .{ .kind = .{ .rc = .sse } }, | | |
| 3013 | .unused, | | |
| 3014 | .unused, | | |
| 3015 | .unused, | | |
| 3016 | .unused, | | |
| 3017 | }, | | |
| 3018 | .dst_temps = .{.mem}, | | |
| 3019 | .clobbers = .{ .eflags = true }, | | |
| 3020 | .each = .{ .once = &.{ | | |
| 3021 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | | |
| 3022 | .{ .@"0:", .v_pd, .movu, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | | |
| 3023 | .{ ._, .v_pd, mir_tag, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, | | |
| 3024 | .{ ._, .v_pd, .movu, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, | | |
| 3025 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | | |
| 3026 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 3027 | } }, | | |
| 3028 | }, .{ | | |
| 3029 | .required_features = .{ .avx, null, null, null }, | | |
| 3030 | .src_constraints = .{ .{ .multiple_size = .xword }, .{ .multiple_size = .xword } }, | | |
| 3031 | .patterns = &.{ | | |
| 3032 | .{ .src = .{ .to_mem, .to_mem } }, | | |
| 3033 | }, | | |
| 3034 | .extra_temps = .{ | | |
| 3035 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | | |
| 3036 | .{ .kind = .{ .rc = .sse } }, | | |
| 3037 | .unused, | | |
| 3038 | .unused, | | |
| 3039 | .unused, | | |
| 3040 | .unused, | | |
| 3041 | }, | | |
| 3042 | .dst_temps = .{.mem}, | | |
| 3043 | .clobbers = .{ .eflags = true }, | | |
| 3044 | .each = .{ .once = &.{ | | |
| 3045 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | | |
| 3046 | .{ .@"0:", .v_dqu, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | | |
| 3047 | .{ ._, .vp_, mir_tag, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, | | |
| 3048 | .{ ._, .v_dqu, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, | | |
| 3049 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | | |
| 3050 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 3051 | } }, | | |
| 3052 | }, .{ | | |
| 3053 | .required_features = .{ .sse2, null, null, null }, | | |
| 3054 | .src_constraints = .{ .{ .multiple_size = .xword }, .{ .multiple_size = .xword } }, | | |
| 3055 | .patterns = &.{ | | |
| 3056 | .{ .src = .{ .to_mem, .to_mem } }, | | |
| 3057 | }, | | |
| 3058 | .extra_temps = .{ | | |
| 3059 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | | |
| 3060 | .{ .kind = .{ .rc = .sse } }, | | |
| 3061 | .unused, | | |
| 3062 | .unused, | | |
| 3063 | .unused, | | |
| 3064 | .unused, | | |
| 3065 | }, | | |
| 3066 | .dst_temps = .{.mem}, | | |
| 3067 | .clobbers = .{ .eflags = true }, | | |
| 3068 | .each = .{ .once = &.{ | | |
| 3069 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | | |
| 3070 | .{ .@"0:", ._dqu, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | | |
| 3071 | .{ ._, .p_, mir_tag, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | | |
| 3072 | .{ ._, ._dqu, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, | | |
| 3073 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | | |
| 3074 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 3075 | } }, | | |
| 3076 | }, .{ | | |
| 3077 | .required_features = .{ .sse, null, null, null }, | | |
| 3078 | .src_constraints = .{ .{ .multiple_size = .xword }, .{ .multiple_size = .xword } }, | | |
| 3079 | .patterns = &.{ | | |
| 3080 | .{ .src = .{ .to_mem, .to_mem } }, | | |
| 3081 | }, | | |
| 3082 | .extra_temps = .{ | | |
| 3083 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | | |
| 3084 | .{ .kind = .{ .rc = .sse } }, | | |
| 3085 | .unused, | | |
| 3086 | .unused, | | |
| 3087 | .unused, | | |
| 3088 | .unused, | | |
| 3089 | }, | | |
| 3090 | .dst_temps = .{.mem}, | | |
| 3091 | .clobbers = .{ .eflags = true }, | | |
| 3092 | .each = .{ .once = &.{ | | |
| 3093 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | | |
| 3094 | .{ .@"0:", ._ps, .movu, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | | |
| 3095 | .{ ._, ._ps, mir_tag, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | | |
| 3096 | .{ ._, ._ps, .movu, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, | | |
| 3097 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | | |
| 3098 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 3099 | } }, | | |
| 3100 | }, .{ | | |
| 3101 | .required_features = .{ .mmx, null, null, null }, | | |
| 3102 | .src_constraints = .{ .{ .multiple_size = .qword }, .{ .multiple_size = .qword } }, | | |
| 3103 | .patterns = &.{ | | |
| 3104 | .{ .src = .{ .to_mem, .to_mem } }, | | |
| 3105 | }, | | |
| 3106 | .extra_temps = .{ | | |
| 3107 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | | |
| 3108 | .{ .kind = .{ .rc = .mmx } }, | | |
| 3109 | .unused, | | |
| 3110 | .unused, | | |
| 3111 | .unused, | | |
| 3112 | .unused, | | |
| 3113 | }, | | |
| 3114 | .dst_temps = .{.mem}, | | |
| 3115 | .clobbers = .{ .eflags = true }, | | |
| 3116 | .each = .{ .once = &.{ | | |
| 3117 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | | |
| 3118 | .{ .@"0:", ._q, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | | |
| 3119 | .{ ._, .p_, mir_tag, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | | |
| 3120 | .{ ._, ._q, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, | | |
| 3121 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, | | |
| 3122 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 3123 | } }, | | |
| 3124 | }, .{ | | |
| 3125 | .src_constraints = .{ .{ .multiple_size = .qword }, .{ .multiple_size = .qword } }, | | |
| 3126 | .patterns = &.{ | | |
| 3127 | .{ .src = .{ .to_mem, .to_mem } }, | | |
| 3128 | }, | | |
| 3129 | .extra_temps = .{ | | |
| 3130 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | | |
| 3131 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | | |
| 3132 | .unused, | | |
| 3133 | .unused, | | |
| 3134 | .unused, | | |
| 3135 | .unused, | | |
| 3136 | }, | | |
| 3137 | .dst_temps = .{.mem}, | | |
| 3138 | .clobbers = .{ .eflags = true }, | | |
| 3139 | .each = .{ .once = &.{ | | |
| 3140 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | | |
| 3141 | .{ .@"0:", ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ }, | | |
| 3142 | .{ ._, ._, mir_tag, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ }, | | |
| 3143 | .{ ._, ._, .mov, .memia(.dst0p, .tmp0, .add_size), .tmp1p, ._, ._ }, | | |
| 3144 | .{ ._, ._, .add, .tmp0p, .sa(.tmp1, .add_size), ._, ._ }, | | |
| 3145 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 3146 | } }, | | |
| 3147 | } }, | 2811 | } }, |
| 3148 | }) catch |err| switch (err) { | 2812 | }, .{ |
| 3149 | error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{ | 2813 | .src_constraints = .{ .{ .signed_int = .byte }, .{ .signed_int = .byte } }, |
| 3150 | @tagName(air_tag), | | |
| 3151 | cg.typeOf(bin_op.lhs).fmt(pt), | | |
| 3152 | ops[0].tracking(cg), | | |
| 3153 | ops[1].tracking(cg), | | |
| 3154 | }), | | |
| 3155 | else => |e| return e, | | |
| 3156 | }; | | |
| 3157 | for (ops) |op| for (res) |r| { | | |
| 3158 | if (op.index == r.index) break; | | |
| 3159 | } else try op.die(cg); | | |
| 3160 | try res[0].moveTo(inst, cg); | | |
| 3161 | }, | | |
| 3162 | .not => |air_tag| if (use_old) try cg.airUnOp(inst, air_tag) else { | | |
| 3163 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; | | |
| 3164 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); | | |
| 3165 | var res: [1]Temp = undefined; | | |
| 3166 | cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{ | | |
| 3167 | .src_constraints = .{ .{ .signed_or_exact_int = .byte }, .any }, | | |
| 3168 | .patterns = &.{ | 2814 | .patterns = &.{ |
| 3169 | .{ .src = .{ .mut_mem, .none } }, | 2815 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 3170 | .{ .src = .{ .to_mut_gpr, .none } }, | 2816 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 2817 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 3171 | }, | 2818 | }, |
| 3172 | .dst_temps = .{.{ .ref = .src0 }}, | 2819 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 2820 | .clobbers = .{ .eflags = true }, |
| 3173 | .each = .{ .once = &.{ | 2821 | .each = .{ .once = &.{ |
| 3174 | .{ ._, ._, .not, .dst0b, ._, ._, ._ }, | 2822 | .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ }, |
| | 2823 | .{ ._, ._nl, .j, .@"0f", ._, ._, ._ }, |
| | 2824 | .{ ._, ._, .mov, .dst0b, .src1b, ._, ._ }, |
| 3175 | } }, | 2825 | } }, |
| 3176 | }, .{ | 2826 | }, .{ |
| 3177 | .src_constraints = .{ .{ .unsigned_int = .byte }, .any }, | 2827 | .required_features = .{ .cmov, null, null, null }, |
| | 2828 | .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte } }, |
| 3178 | .patterns = &.{ | 2829 | .patterns = &.{ |
| 3179 | .{ .src = .{ .mut_mem, .none } }, | 2830 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 3180 | .{ .src = .{ .to_mut_gpr, .none } }, | | |
| 3181 | }, | 2831 | }, |
| 3182 | .dst_temps = .{.{ .ref = .src0 }}, | 2832 | .dst_temps = .{.{ .ref = .src0 }}, |
| 3183 | .clobbers = .{ .eflags = true }, | 2833 | .clobbers = .{ .eflags = true }, |
| 3184 | .each = .{ .once = &.{ | 2834 | .each = .{ .once = &.{ |
| 3185 | .{ ._, ._, .xor, .dst0b, .sa(.src0, .add_umax), ._, ._ }, | 2835 | .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ }, |
| | 2836 | .{ ._, ._b, .cmov, .dst0d, .src1d, ._, ._ }, |
| 3186 | } }, | 2837 | } }, |
| 3187 | }, .{ | 2838 | }, .{ |
| 3188 | .src_constraints = .{ .{ .signed_or_exact_int = .word }, .any }, | 2839 | .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte } }, |
| 3189 | .patterns = &.{ | 2840 | .patterns = &.{ |
| 3190 | .{ .src = .{ .mut_mem, .none } }, | 2841 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 3191 | .{ .src = .{ .to_mut_gpr, .none } }, | 2842 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 2843 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 3192 | }, | 2844 | }, |
| 3193 | .dst_temps = .{.{ .ref = .src0 }}, | 2845 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 2846 | .clobbers = .{ .eflags = true }, |
| 3194 | .each = .{ .once = &.{ | 2847 | .each = .{ .once = &.{ |
| 3195 | .{ ._, ._, .not, .dst0w, ._, ._, ._ }, | 2848 | .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ }, |
| | 2849 | .{ ._, ._nb, .j, .@"0f", ._, ._, ._ }, |
| | 2850 | .{ ._, ._, .mov, .dst0b, .src1b, ._, ._ }, |
| 3196 | } }, | 2851 | } }, |
| 3197 | }, .{ | 2852 | }, .{ |
| 3198 | .src_constraints = .{ .{ .unsigned_int = .word }, .any }, | 2853 | .required_features = .{ .cmov, null, null, null }, |
| | 2854 | .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word } }, |
| 3199 | .patterns = &.{ | 2855 | .patterns = &.{ |
| 3200 | .{ .src = .{ .mut_mem, .none } }, | 2856 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 3201 | .{ .src = .{ .to_mut_gpr, .none } }, | 2857 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 2858 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 3202 | }, | 2859 | }, |
| 3203 | .dst_temps = .{.{ .ref = .src0 }}, | 2860 | .dst_temps = .{.{ .ref = .src0 }}, |
| 3204 | .clobbers = .{ .eflags = true }, | 2861 | .clobbers = .{ .eflags = true }, |
| 3205 | .each = .{ .once = &.{ | 2862 | .each = .{ .once = &.{ |
| 3206 | .{ ._, ._, .xor, .dst0w, .sa(.src0, .add_umax), ._, ._ }, | 2863 | .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ }, |
| | 2864 | .{ ._, ._l, .cmov, .dst0w, .src1w, ._, ._ }, |
| 3207 | } }, | 2865 | } }, |
| 3208 | }, .{ | 2866 | }, .{ |
| 3209 | .src_constraints = .{ .{ .signed_or_exact_int = .dword }, .any }, | 2867 | .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word } }, |
| 3210 | .patterns = &.{ | 2868 | .patterns = &.{ |
| 3211 | .{ .src = .{ .mut_mem, .none } }, | 2869 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 3212 | .{ .src = .{ .to_mut_gpr, .none } }, | 2870 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 2871 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 3213 | }, | 2872 | }, |
| 3214 | .dst_temps = .{.{ .ref = .src0 }}, | 2873 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 2874 | .clobbers = .{ .eflags = true }, |
| 3215 | .each = .{ .once = &.{ | 2875 | .each = .{ .once = &.{ |
| 3216 | .{ ._, ._, .not, .dst0d, ._, ._, ._ }, | 2876 | .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ }, |
| | 2877 | .{ ._, ._nl, .j, .@"0f", ._, ._, ._ }, |
| | 2878 | .{ ._, ._, .mov, .dst0w, .src1w, ._, ._ }, |
| 3217 | } }, | 2879 | } }, |
| 3218 | }, .{ | 2880 | }, .{ |
| 3219 | .src_constraints = .{ .{ .unsigned_int = .dword }, .any }, | 2881 | .required_features = .{ .cmov, null, null, null }, |
| | 2882 | .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word } }, |
| 3220 | .patterns = &.{ | 2883 | .patterns = &.{ |
| 3221 | .{ .src = .{ .mut_mem, .none } }, | 2884 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 3222 | .{ .src = .{ .to_mut_gpr, .none } }, | 2885 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 2886 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 3223 | }, | 2887 | }, |
| 3224 | .dst_temps = .{.{ .ref = .src0 }}, | 2888 | .dst_temps = .{.{ .ref = .src0 }}, |
| 3225 | .clobbers = .{ .eflags = true }, | 2889 | .clobbers = .{ .eflags = true }, |
| 3226 | .each = .{ .once = &.{ | 2890 | .each = .{ .once = &.{ |
| 3227 | .{ ._, ._, .xor, .dst0d, .sa(.src0, .add_umax), ._, ._ }, | 2891 | .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ }, |
| | 2892 | .{ ._, ._b, .cmov, .dst0w, .src1w, ._, ._ }, |
| 3228 | } }, | 2893 | } }, |
| 3229 | }, .{ | 2894 | }, .{ |
| 3230 | .required_features = .{ .@"64bit", null, null, null }, | 2895 | .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word } }, |
| 3231 | .src_constraints = .{ .{ .signed_or_exact_int = .qword }, .any }, | | |
| 3232 | .patterns = &.{ | 2896 | .patterns = &.{ |
| 3233 | .{ .src = .{ .mut_mem, .none } }, | 2897 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 3234 | .{ .src = .{ .to_mut_gpr, .none } }, | 2898 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 2899 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 3235 | }, | 2900 | }, |
| 3236 | .dst_temps = .{.{ .ref = .src0 }}, | 2901 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 2902 | .clobbers = .{ .eflags = true }, |
| 3237 | .each = .{ .once = &.{ | 2903 | .each = .{ .once = &.{ |
| 3238 | .{ ._, ._, .not, .dst0q, ._, ._, ._ }, | 2904 | .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ }, |
| | 2905 | .{ ._, ._nb, .j, .@"0f", ._, ._, ._ }, |
| | 2906 | .{ ._, ._, .mov, .dst0w, .src1w, ._, ._ }, |
| 3239 | } }, | 2907 | } }, |
| 3240 | }, .{ | 2908 | }, .{ |
| 3241 | .required_features = .{ .@"64bit", null, null, null }, | 2909 | .required_features = .{ .cmov, null, null, null }, |
| 3242 | .src_constraints = .{ .{ .unsigned_int = .qword }, .any }, | 2910 | .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword } }, |
| 3243 | .patterns = &.{ | 2911 | .patterns = &.{ |
| 3244 | .{ .src = .{ .mem, .none } }, | 2912 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 3245 | .{ .src = .{ .to_gpr, .none } }, | 2913 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 2914 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 3246 | }, | 2915 | }, |
| 3247 | .dst_temps = .{.{ .rc = .general_purpose }}, | 2916 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 2917 | .clobbers = .{ .eflags = true }, |
| 3248 | .each = .{ .once = &.{ | 2918 | .each = .{ .once = &.{ |
| 3249 | .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ }, | 2919 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, |
| 3250 | .{ ._, ._, .xor, .dst0q, .src0q, ._, ._ }, | 2920 | .{ ._, ._l, .cmov, .dst0d, .src1d, ._, ._ }, |
| 3251 | } }, | 2921 | } }, |
| 3252 | }, .{ | 2922 | }, .{ |
| 3253 | .required_features = .{ .mmx, null, null, null }, | 2923 | .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword } }, |
| 3254 | .src_constraints = .{ .{ .signed_or_exact_int = .qword }, .any }, | | |
| 3255 | .patterns = &.{ | 2924 | .patterns = &.{ |
| 3256 | .{ .src = .{ .mem, .none } }, | 2925 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 3257 | .{ .src = .{ .to_mm, .none } }, | 2926 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 2927 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 3258 | }, | 2928 | }, |
| 3259 | .dst_temps = .{.{ .rc = .mmx }}, | 2929 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 2930 | .clobbers = .{ .eflags = true }, |
| 3260 | .each = .{ .once = &.{ | 2931 | .each = .{ .once = &.{ |
| 3261 | .{ ._, .p_d, .cmpeq, .dst0q, .dst0q, ._, ._ }, | 2932 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, |
| 3262 | .{ ._, .p_, .xor, .dst0q, .src0q, ._, ._ }, | 2933 | .{ ._, ._nl, .j, .@"0f", ._, ._, ._ }, |
| | 2934 | .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ }, |
| 3263 | } }, | 2935 | } }, |
| 3264 | }, .{ | 2936 | }, .{ |
| 3265 | .required_features = .{ .mmx, null, null, null }, | 2937 | .required_features = .{ .cmov, null, null, null }, |
| 3266 | .src_constraints = .{ .{ .unsigned_int = .qword }, .any }, | 2938 | .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword } }, |
| 3267 | .patterns = &.{ | 2939 | .patterns = &.{ |
| 3268 | .{ .src = .{ .to_mut_mm, .none } }, | 2940 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 2941 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 2942 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 3269 | }, | 2943 | }, |
| 3270 | .extra_temps = .{ | 2944 | .dst_temps = .{.{ .ref = .src0 }}, |
| 3271 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 2945 | .clobbers = .{ .eflags = true }, |
| 3272 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, | 2946 | .each = .{ .once = &.{ |
| 3273 | .unused, | 2947 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, |
| 3274 | .unused, | 2948 | .{ ._, ._b, .cmov, .dst0d, .src1d, ._, ._ }, |
| 3275 | .unused, | 2949 | } }, |
| 3276 | .unused, | 2950 | }, .{ |
| | 2951 | .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword } }, |
| | 2952 | .patterns = &.{ |
| | 2953 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 2954 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 2955 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 3277 | }, | 2956 | }, |
| 3278 | .dst_temps = .{.{ .ref = .src0 }}, | 2957 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 2958 | .clobbers = .{ .eflags = true }, |
| 3279 | .each = .{ .once = &.{ | 2959 | .each = .{ .once = &.{ |
| 3280 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 2960 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, |
| 3281 | .{ ._, .p_, .xor, .dst0q, .lea(.qword, .tmp0), ._, ._ }, | 2961 | .{ ._, ._nb, .j, .@"0f", ._, ._, ._ }, |
| | 2962 | .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ }, |
| 3282 | } }, | 2963 | } }, |
| 3283 | }, .{ | 2964 | }, .{ |
| 3284 | .required_features = .{ .avx, null, null, null }, | 2965 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 3285 | .src_constraints = .{ .{ .signed_or_exact_int = .xword }, .any }, | 2966 | .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword } }, |
| 3286 | .patterns = &.{ | 2967 | .patterns = &.{ |
| 3287 | .{ .src = .{ .mem, .none } }, | 2968 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 3288 | .{ .src = .{ .to_xmm, .none } }, | 2969 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 2970 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 3289 | }, | 2971 | }, |
| 3290 | .dst_temps = .{.{ .rc = .sse }}, | 2972 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 2973 | .clobbers = .{ .eflags = true }, |
| 3291 | .each = .{ .once = &.{ | 2974 | .each = .{ .once = &.{ |
| 3292 | .{ ._, .vp_q, .cmpeq, .dst0x, .dst0x, .dst0x, ._ }, | 2975 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, |
| 3293 | .{ ._, .vp_, .xor, .dst0x, .dst0x, .src0x, ._ }, | 2976 | .{ ._, ._l, .cmov, .dst0q, .src1q, ._, ._ }, |
| 3294 | } }, | 2977 | } }, |
| 3295 | }, .{ | 2978 | }, .{ |
| 3296 | .required_features = .{ .avx, null, null, null }, | 2979 | .required_features = .{ .@"64bit", null, null, null }, |
| 3297 | .src_constraints = .{ .{ .unsigned_int = .xword }, .any }, | 2980 | .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword } }, |
| 3298 | .patterns = &.{ | 2981 | .patterns = &.{ |
| 3299 | .{ .src = .{ .to_xmm, .none } }, | 2982 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 2983 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 2984 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 3300 | }, | 2985 | }, |
| 3301 | .extra_temps = .{ | 2986 | .dst_temps = .{.{ .ref = .src0 }}, |
| 3302 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 2987 | .clobbers = .{ .eflags = true }, |
| 3303 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, | 2988 | .each = .{ .once = &.{ |
| 3304 | .unused, | 2989 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, |
| 3305 | .unused, | 2990 | .{ ._, ._nl, .j, .@"0f", ._, ._, ._ }, |
| 3306 | .unused, | 2991 | .{ ._, ._, .mov, .dst0q, .src1q, ._, ._ }, |
| 3307 | .unused, | 2992 | } }, |
| | 2993 | }, .{ |
| | 2994 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| | 2995 | .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword } }, |
| | 2996 | .patterns = &.{ |
| | 2997 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 2998 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 2999 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 3308 | }, | 3000 | }, |
| 3309 | .dst_temps = .{.{ .rc = .sse }}, | 3001 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 3002 | .clobbers = .{ .eflags = true }, |
| 3310 | .each = .{ .once = &.{ | 3003 | .each = .{ .once = &.{ |
| 3311 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 3004 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, |
| 3312 | .{ ._, .vp_, .xor, .dst0x, .src0x, .lea(.xword, .tmp0), ._ }, | 3005 | .{ ._, ._b, .cmov, .dst0q, .src1q, ._, ._ }, |
| 3313 | } }, | 3006 | } }, |
| 3314 | }, .{ | 3007 | }, .{ |
| 3315 | .required_features = .{ .sse2, null, null, null }, | 3008 | .required_features = .{ .@"64bit", null, null, null }, |
| 3316 | .src_constraints = .{ .{ .signed_or_exact_int = .xword }, .any }, | 3009 | .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword } }, |
| 3317 | .patterns = &.{ | 3010 | .patterns = &.{ |
| 3318 | .{ .src = .{ .mem, .none } }, | 3011 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 3319 | .{ .src = .{ .to_xmm, .none } }, | 3012 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 3013 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 3320 | }, | 3014 | }, |
| 3321 | .dst_temps = .{.{ .rc = .sse }}, | 3015 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 3016 | .clobbers = .{ .eflags = true }, |
| 3322 | .each = .{ .once = &.{ | 3017 | .each = .{ .once = &.{ |
| 3323 | .{ ._, .p_d, .cmpeq, .dst0x, .dst0x, ._, ._ }, | 3018 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, |
| 3324 | .{ ._, .p_, .xor, .dst0x, .src0x, ._, ._ }, | 3019 | .{ ._, ._nb, .j, .@"0f", ._, ._, ._ }, |
| | 3020 | .{ ._, ._, .mov, .dst0q, .src1q, ._, ._ }, |
| 3325 | } }, | 3021 | } }, |
| 3326 | }, .{ | 3022 | }, .{ |
| 3327 | .required_features = .{ .sse2, null, null, null }, | 3023 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 3328 | .src_constraints = .{ .{ .unsigned_int = .xword }, .any }, | 3024 | .src_constraints = .{ .any_signed_int, .any_signed_int }, |
| 3329 | .patterns = &.{ | 3025 | .patterns = &.{ |
| 3330 | .{ .src = .{ .to_mut_xmm, .none } }, | 3026 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3331 | }, | 3027 | }, |
| 3332 | .extra_temps = .{ | 3028 | .extra_temps = .{ |
| 3333 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3029 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| 3334 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, | 3030 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| | 3031 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| | 3032 | .unused, |
| | 3033 | .unused, |
| 3335 | .unused, | 3034 | .unused, |
| 3336 | .unused, | 3035 | .unused, |
| 3337 | .unused, | 3036 | .unused, |
| 3338 | .unused, | 3037 | .unused, |
| 3339 | }, | 3038 | }, |
| 3340 | .dst_temps = .{.{ .ref = .src0 }}, | 3039 | .dst_temps = .{.mem}, |
| | 3040 | .clobbers = .{ .eflags = true }, |
| 3341 | .each = .{ .once = &.{ | 3041 | .each = .{ .once = &.{ |
| 3342 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 3042 | .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ }, |
| 3343 | .{ ._, .p_, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ }, | 3043 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| | 3044 | .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ }, |
| | 3045 | .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ }, |
| | 3046 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 3047 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 3048 | .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ }, |
| | 3049 | .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ }, |
| | 3050 | .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, |
| | 3051 | .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ }, |
| | 3052 | .{ ._, ._l, .cmov, .tmp0p, .tmp1p, ._, ._ }, |
| | 3053 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| | 3054 | .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ }, |
| | 3055 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| 3344 | } }, | 3056 | } }, |
| 3345 | }, .{ | 3057 | }, .{ |
| 3346 | .required_features = .{ .sse, null, null, null }, | 3058 | .required_features = .{ .@"64bit", null, null, null }, |
| 3347 | .src_constraints = .{ .{ .int = .xword }, .any }, | 3059 | .src_constraints = .{ .any_signed_int, .any_signed_int }, |
| 3348 | .patterns = &.{ | 3060 | .patterns = &.{ |
| 3349 | .{ .src = .{ .to_mut_xmm, .none } }, | 3061 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3350 | }, | 3062 | }, |
| 3351 | .extra_temps = .{ | 3063 | .extra_temps = .{ |
| 3352 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3064 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| 3353 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, | 3065 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| | 3066 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| | 3067 | .unused, |
| | 3068 | .unused, |
| 3354 | .unused, | 3069 | .unused, |
| 3355 | .unused, | 3070 | .unused, |
| 3356 | .unused, | 3071 | .unused, |
| 3357 | .unused, | 3072 | .unused, |
| 3358 | }, | 3073 | }, |
| 3359 | .dst_temps = .{.{ .ref = .src0 }}, | 3074 | .dst_temps = .{.mem}, |
| | 3075 | .clobbers = .{ .eflags = true }, |
| 3360 | .each = .{ .once = &.{ | 3076 | .each = .{ .once = &.{ |
| 3361 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 3077 | .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ }, |
| 3362 | .{ ._, ._ps, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ }, | 3078 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| | 3079 | .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ }, |
| | 3080 | .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ }, |
| | 3081 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 3082 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 3083 | .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ }, |
| | 3084 | .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ }, |
| | 3085 | .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, |
| | 3086 | .{ ._, ._nl, .j, .@"0f", ._, ._, ._ }, |
| | 3087 | .{ ._, ._, .lea, .tmp0p, .mem(.src1), ._, ._ }, |
| | 3088 | .{ .@"0:", ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| | 3089 | .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ }, |
| | 3090 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| 3363 | } }, | 3091 | } }, |
| 3364 | }, .{ | 3092 | }, .{ |
| 3365 | .required_features = .{ .avx2, null, null, null }, | 3093 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 3366 | .src_constraints = .{ .{ .signed_or_exact_int = .yword }, .any }, | 3094 | .src_constraints = .{ .any_unsigned_int, .any_unsigned_int }, |
| 3367 | .patterns = &.{ | 3095 | .patterns = &.{ |
| 3368 | .{ .src = .{ .mem, .none } }, | 3096 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3369 | .{ .src = .{ .to_ymm, .none } }, | | |
| 3370 | }, | 3097 | }, |
| 3371 | .dst_temps = .{.{ .rc = .sse }}, | 3098 | .extra_temps = .{ |
| | 3099 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| | 3100 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| | 3101 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| | 3102 | .unused, |
| | 3103 | .unused, |
| | 3104 | .unused, |
| | 3105 | .unused, |
| | 3106 | .unused, |
| | 3107 | .unused, |
| | 3108 | }, |
| | 3109 | .dst_temps = .{.mem}, |
| | 3110 | .clobbers = .{ .eflags = true }, |
| 3372 | .each = .{ .once = &.{ | 3111 | .each = .{ .once = &.{ |
| 3373 | .{ ._, .vp_q, .cmpeq, .dst0y, .dst0y, .dst0y, ._ }, | 3112 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ }, |
| 3374 | .{ ._, .vp_, .xor, .dst0y, .dst0y, .src0y, ._ }, | 3113 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| | 3114 | .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ }, |
| | 3115 | .{ ._, ._, .sbb, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ }, |
| | 3116 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 3117 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 3118 | .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, |
| | 3119 | .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ }, |
| | 3120 | .{ ._, ._b, .cmov, .tmp0p, .tmp1p, ._, ._ }, |
| | 3121 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| | 3122 | .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ }, |
| | 3123 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| 3375 | } }, | 3124 | } }, |
| 3376 | }, .{ | 3125 | }, .{ |
| 3377 | .required_features = .{ .avx2, null, null, null }, | 3126 | .required_features = .{ .@"64bit", null, null, null }, |
| 3378 | .src_constraints = .{ .{ .unsigned_int = .yword }, .any }, | 3127 | .src_constraints = .{ .any_unsigned_int, .any_unsigned_int }, |
| 3379 | .patterns = &.{ | 3128 | .patterns = &.{ |
| 3380 | .{ .src = .{ .to_ymm, .none } }, | 3129 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3381 | }, | 3130 | }, |
| 3382 | .extra_temps = .{ | 3131 | .extra_temps = .{ |
| 3383 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3132 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| 3384 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, | 3133 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| | 3134 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| | 3135 | .unused, |
| | 3136 | .unused, |
| 3385 | .unused, | 3137 | .unused, |
| 3386 | .unused, | 3138 | .unused, |
| 3387 | .unused, | 3139 | .unused, |
| 3388 | .unused, | 3140 | .unused, |
| 3389 | }, | 3141 | }, |
| 3390 | .dst_temps = .{.{ .rc = .sse }}, | 3142 | .dst_temps = .{.mem}, |
| | 3143 | .clobbers = .{ .eflags = true }, |
| 3391 | .each = .{ .once = &.{ | 3144 | .each = .{ .once = &.{ |
| 3392 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 3145 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ }, |
| 3393 | .{ ._, .vp_, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, | 3146 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| | 3147 | .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ }, |
| | 3148 | .{ ._, ._, .sbb, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ }, |
| | 3149 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 3150 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 3151 | .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, |
| | 3152 | .{ ._, ._nb, .j, .@"0f", ._, ._, ._ }, |
| | 3153 | .{ ._, ._, .lea, .tmp0p, .mem(.src1), ._, ._ }, |
| | 3154 | .{ .@"0:", ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| | 3155 | .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ }, |
| | 3156 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| 3394 | } }, | 3157 | } }, |
| 3395 | }, .{ | 3158 | }, .{ |
| 3396 | .required_features = .{ .avx, null, null, null }, | 3159 | .required_features = .{ .avx, null, null, null }, |
| 3397 | .src_constraints = .{ .{ .signed_or_exact_int = .yword }, .any }, | 3160 | .src_constraints = .{ |
| | 3161 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 3162 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 3163 | }, |
| 3398 | .patterns = &.{ | 3164 | .patterns = &.{ |
| 3399 | .{ .src = .{ .mem, .none } }, | 3165 | .{ .src = .{ .to_sse, .mem } }, |
| 3400 | .{ .src = .{ .to_ymm, .none } }, | 3166 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 3167 | .{ .src = .{ .to_sse, .to_sse } }, |
| 3401 | }, | 3168 | }, |
| 3402 | .dst_temps = .{.{ .rc = .sse }}, | 3169 | .dst_temps = .{.{ .rc = .sse }}, |
| 3403 | .each = .{ .once = &.{ | 3170 | .each = .{ .once = &.{ |
| 3404 | .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .si(0b01111) }, | 3171 | .{ ._, .vp_b, .maxs, .dst0x, .src0x, .src1x, ._ }, |
| 3405 | .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ }, | | |
| 3406 | } }, | 3172 | } }, |
| 3407 | }, .{ | 3173 | }, .{ |
| 3408 | .required_features = .{ .avx, null, null, null }, | 3174 | .required_features = .{ .sse4_1, null, null, null }, |
| 3409 | .src_constraints = .{ .{ .unsigned_int = .yword }, .any }, | 3175 | .src_constraints = .{ |
| | 3176 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 3177 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 3178 | }, |
| 3410 | .patterns = &.{ | 3179 | .patterns = &.{ |
| 3411 | .{ .src = .{ .to_ymm, .none } }, | 3180 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 3181 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 3182 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 3412 | }, | 3183 | }, |
| 3413 | .extra_temps = .{ | 3184 | .dst_temps = .{.{ .ref = .src0 }}, |
| 3414 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3185 | .each = .{ .once = &.{ |
| 3415 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, | 3186 | .{ ._, .p_b, .maxs, .dst0x, .src1x, ._, ._ }, |
| 3416 | .unused, | 3187 | } }, |
| 3417 | .unused, | 3188 | }, .{ |
| 3418 | .unused, | 3189 | .required_features = .{ .sse2, null, null, null }, |
| 3419 | .unused, | 3190 | .src_constraints = .{ |
| | 3191 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 3192 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 3193 | }, |
| | 3194 | .patterns = &.{ |
| | 3195 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 3196 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 3197 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 3420 | }, | 3198 | }, |
| 3421 | .dst_temps = .{.{ .rc = .sse }}, | 3199 | .dst_temps = .{.{ .rc = .sse }}, |
| 3422 | .each = .{ .once = &.{ | 3200 | .each = .{ .once = &.{ |
| 3423 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 3201 | .{ ._, ._dqa, .mov, .dst0x, .src0x, ._, ._ }, |
| 3424 | .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, | 3202 | .{ ._, .p_b, .cmpgt, .dst0x, .src1x, ._, ._ }, |
| | 3203 | .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ }, |
| | 3204 | .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ }, |
| | 3205 | .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ }, |
| 3425 | } }, | 3206 | } }, |
| 3426 | }, .{ | 3207 | }, .{ |
| 3427 | .required_features = .{ .avx2, null, null, null }, | 3208 | .required_features = .{ .avx2, null, null, null }, |
| 3428 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .xword } }, .any }, | 3209 | .src_constraints = .{ |
| 3429 | .patterns = &.{ | 3210 | .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } }, |
| 3430 | .{ .src = .{ .to_mem, .none } }, | 3211 | .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } }, |
| 3431 | }, | 3212 | }, |
| 3432 | .extra_temps = .{ | 3213 | .patterns = &.{ |
| 3433 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 3214 | .{ .src = .{ .to_sse, .mem } }, |
| 3434 | .{ .kind = .{ .rc = .sse } }, | 3215 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 3435 | .{ .kind = .{ .rc = .sse } }, | 3216 | .{ .src = .{ .to_sse, .to_sse } }, |
| 3436 | .unused, | | |
| 3437 | .unused, | | |
| 3438 | .unused, | | |
| 3439 | }, | 3217 | }, |
| 3440 | .dst_temps = .{.mem}, | 3218 | .dst_temps = .{.{ .rc = .sse }}, |
| 3441 | .clobbers = .{ .eflags = true }, | | |
| 3442 | .each = .{ .once = &.{ | 3219 | .each = .{ .once = &.{ |
| 3443 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, | 3220 | .{ ._, .vp_b, .maxs, .dst0y, .src0y, .src1y, ._ }, |
| 3444 | .{ ._, .vp_q, .cmpeq, .tmp1y, .tmp1y, .tmp1y, ._ }, | | |
| 3445 | .{ .@"0:", .vp_, .xor, .tmp2y, .tmp1y, .memiad(.src0y, .tmp0, .add_size, -16), ._ }, | | |
| 3446 | .{ ._, .v_dqu, .mov, .memiad(.dst0y, .tmp0, .add_size, -16), .tmp2y, ._, ._ }, | | |
| 3447 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | | |
| 3448 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 3449 | .{ .@"0:", .vp_, .xor, .tmp2x, .tmp1x, .memad(.src0x, .add_size, -16), ._ }, | | |
| 3450 | .{ ._, .v_dqa, .mov, .memad(.dst0x, .add_size, -16), .tmp2x, ._, ._ }, | | |
| 3451 | } }, | 3221 | } }, |
| 3452 | }, .{ | 3222 | }, .{ |
| 3453 | .required_features = .{ .avx2, null, null, null }, | 3223 | .required_features = .{ .avx2, null, null, null }, |
| 3454 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .yword } }, .any }, | 3224 | .src_constraints = .{ |
| | 3225 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } }, |
| | 3226 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } }, |
| | 3227 | }, |
| 3455 | .patterns = &.{ | 3228 | .patterns = &.{ |
| 3456 | .{ .src = .{ .to_mem, .none } }, | 3229 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3457 | }, | 3230 | }, |
| 3458 | .extra_temps = .{ | 3231 | .extra_temps = .{ |
| 3459 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 3232 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3460 | .{ .kind = .{ .rc = .sse } }, | 3233 | .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } }, |
| 3461 | .{ .kind = .{ .rc = .sse } }, | 3234 | .unused, |
| | 3235 | .unused, |
| | 3236 | .unused, |
| | 3237 | .unused, |
| 3462 | .unused, | 3238 | .unused, |
| 3463 | .unused, | 3239 | .unused, |
| 3464 | .unused, | 3240 | .unused, |
| ... | @@ -3467,22 +3243,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3467,22 +3243,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3467 | .clobbers = .{ .eflags = true }, | 3243 | .clobbers = .{ .eflags = true }, |
| 3468 | .each = .{ .once = &.{ | 3244 | .each = .{ .once = &.{ |
| 3469 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 3245 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3470 | .{ ._, .vp_q, .cmpeq, .tmp1y, .tmp1y, .tmp1y, ._ }, | 3246 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 3471 | .{ .@"0:", .vp_, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ }, | 3247 | .{ ._, .vp_b, .maxs, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 3472 | .{ ._, .v_dqu, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ }, | 3248 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 3473 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | 3249 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 3474 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 3250 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3475 | } }, | 3251 | } }, |
| 3476 | }, .{ | 3252 | }, .{ |
| 3477 | .required_features = .{ .avx, null, null, null }, | 3253 | .required_features = .{ .avx, null, null, null }, |
| 3478 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .xword } }, .any }, | 3254 | .src_constraints = .{ |
| | 3255 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 3256 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 3257 | }, |
| 3479 | .patterns = &.{ | 3258 | .patterns = &.{ |
| 3480 | .{ .src = .{ .to_mem, .none } }, | 3259 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3481 | }, | 3260 | }, |
| 3482 | .extra_temps = .{ | 3261 | .extra_temps = .{ |
| 3483 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 3262 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3484 | .{ .kind = .{ .rc = .sse } }, | 3263 | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, |
| 3485 | .{ .kind = .{ .rc = .sse } }, | 3264 | .unused, |
| | 3265 | .unused, |
| | 3266 | .unused, |
| | 3267 | .unused, |
| 3486 | .unused, | 3268 | .unused, |
| 3487 | .unused, | 3269 | .unused, |
| 3488 | .unused, | 3270 | .unused, |
| ... | @@ -3490,25 +3272,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3490,25 +3272,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3490 | .dst_temps = .{.mem}, | 3272 | .dst_temps = .{.mem}, |
| 3491 | .clobbers = .{ .eflags = true }, | 3273 | .clobbers = .{ .eflags = true }, |
| 3492 | .each = .{ .once = &.{ | 3274 | .each = .{ .once = &.{ |
| 3493 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, | 3275 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3494 | .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .si(0b01111) }, | 3276 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3495 | .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memiad(.src0y, .tmp0, .add_size, -16), ._ }, | 3277 | .{ ._, .vp_b, .maxs, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 3496 | .{ ._, .v_pd, .movu, .memiad(.dst0y, .tmp0, .add_size, -16), .tmp2y, ._, ._ }, | 3278 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 3497 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | 3279 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 3498 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 3280 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3499 | .{ .@"0:", .v_pd, .xor, .tmp2x, .tmp1x, .memad(.src0x, .add_size, -16), ._ }, | | |
| 3500 | .{ ._, .v_pd, .mova, .memad(.dst0x, .add_size, -16), .tmp2x, ._, ._ }, | | |
| 3501 | } }, | 3281 | } }, |
| 3502 | }, .{ | 3282 | }, .{ |
| 3503 | .required_features = .{ .avx, null, null, null }, | 3283 | .required_features = .{ .sse4_1, null, null, null }, |
| 3504 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .yword } }, .any }, | 3284 | .src_constraints = .{ |
| | 3285 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 3286 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 3287 | }, |
| 3505 | .patterns = &.{ | 3288 | .patterns = &.{ |
| 3506 | .{ .src = .{ .to_mem, .none } }, | 3289 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3507 | }, | 3290 | }, |
| 3508 | .extra_temps = .{ | 3291 | .extra_temps = .{ |
| 3509 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 3292 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3510 | .{ .kind = .{ .rc = .sse } }, | 3293 | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, |
| 3511 | .{ .kind = .{ .rc = .sse } }, | 3294 | .unused, |
| | 3295 | .unused, |
| | 3296 | .unused, |
| | 3297 | .unused, |
| 3512 | .unused, | 3298 | .unused, |
| 3513 | .unused, | 3299 | .unused, |
| 3514 | .unused, | 3300 | .unused, |
| ... | @@ -3517,22 +3303,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3517,22 +3303,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3517 | .clobbers = .{ .eflags = true }, | 3303 | .clobbers = .{ .eflags = true }, |
| 3518 | .each = .{ .once = &.{ | 3304 | .each = .{ .once = &.{ |
| 3519 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 3305 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3520 | .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .si(0b01111) }, | 3306 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3521 | .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ }, | 3307 | .{ ._, .p_b, .maxs, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 3522 | .{ ._, .v_pd, .movu, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ }, | 3308 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 3523 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | 3309 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 3524 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 3310 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3525 | } }, | 3311 | } }, |
| 3526 | }, .{ | 3312 | }, .{ |
| 3527 | .required_features = .{ .avx, null, null, null }, | 3313 | .required_features = .{ .sse2, null, null, null }, |
| 3528 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, | 3314 | .src_constraints = .{ |
| | 3315 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 3316 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 3317 | }, |
| 3529 | .patterns = &.{ | 3318 | .patterns = &.{ |
| 3530 | .{ .src = .{ .to_mem, .none } }, | 3319 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3531 | }, | 3320 | }, |
| 3532 | .extra_temps = .{ | 3321 | .extra_temps = .{ |
| 3533 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 3322 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3534 | .{ .kind = .{ .rc = .sse } }, | 3323 | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, |
| 3535 | .{ .kind = .{ .rc = .sse } }, | 3324 | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, |
| | 3325 | .unused, |
| | 3326 | .unused, |
| | 3327 | .unused, |
| 3536 | .unused, | 3328 | .unused, |
| 3537 | .unused, | 3329 | .unused, |
| 3538 | .unused, | 3330 | .unused, |
| ... | @@ -3541,22 +3333,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3541,22 +3333,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3541 | .clobbers = .{ .eflags = true }, | 3333 | .clobbers = .{ .eflags = true }, |
| 3542 | .each = .{ .once = &.{ | 3334 | .each = .{ .once = &.{ |
| 3543 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 3335 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3544 | .{ ._, .vp_q, .cmpeq, .tmp1x, .tmp1x, .tmp1x, ._ }, | 3336 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3545 | .{ .@"0:", .v_, .xor, .tmp2x, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._ }, | 3337 | .{ ._, ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ }, |
| 3546 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp2x, ._, ._ }, | 3338 | .{ ._, .p_b, .cmpgt, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 3339 | .{ ._, .p_, .@"and", .tmp2x, .tmp1x, ._, ._ }, |
| | 3340 | .{ ._, .p_, .andn, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 3341 | .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ }, |
| | 3342 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 3547 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 3343 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 3548 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 3344 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3549 | } }, | 3345 | } }, |
| 3550 | }, .{ | 3346 | }, .{ |
| 3551 | .required_features = .{ .sse2, null, null, null }, | 3347 | .required_features = .{ .cmov, .slow_incdec, null, null }, |
| 3552 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, | 3348 | .src_constraints = .{ |
| | 3349 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 3350 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 3351 | }, |
| 3553 | .patterns = &.{ | 3352 | .patterns = &.{ |
| 3554 | .{ .src = .{ .to_mem, .none } }, | 3353 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3555 | }, | 3354 | }, |
| 3556 | .extra_temps = .{ | 3355 | .extra_temps = .{ |
| 3557 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 3356 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3558 | .{ .kind = .{ .rc = .sse } }, | 3357 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| 3559 | .{ .kind = .{ .rc = .sse } }, | 3358 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| | 3359 | .unused, |
| | 3360 | .unused, |
| | 3361 | .unused, |
| 3560 | .unused, | 3362 | .unused, |
| 3561 | .unused, | 3363 | .unused, |
| 3562 | .unused, | 3364 | .unused, |
| ... | @@ -3565,45 +3367,61 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3565,45 +3367,61 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3565 | .clobbers = .{ .eflags = true }, | 3367 | .clobbers = .{ .eflags = true }, |
| 3566 | .each = .{ .once = &.{ | 3368 | .each = .{ .once = &.{ |
| 3567 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 3369 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3568 | .{ ._, .p_d, .cmpeq, .tmp1x, .tmp1x, ._, ._ }, | 3370 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 3569 | .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 3371 | .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 3570 | .{ ._, .p_, .xor, .tmp2x, .tmp1x, ._, ._ }, | 3372 | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, |
| 3571 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp2x, ._, ._ }, | 3373 | .{ ._, ._l, .cmov, .tmp1d, .tmp2d, ._, ._ }, |
| 3572 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 3374 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| | 3375 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 3573 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 3376 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3574 | } }, | 3377 | } }, |
| 3575 | }, .{ | 3378 | }, .{ |
| 3576 | .required_features = .{ .@"64bit", null, null, null }, | 3379 | .required_features = .{ .cmov, null, null, null }, |
| 3577 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, | 3380 | .src_constraints = .{ |
| | 3381 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 3382 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 3383 | }, |
| 3578 | .patterns = &.{ | 3384 | .patterns = &.{ |
| 3579 | .{ .src = .{ .mut_mem, .none } }, | 3385 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3580 | }, | 3386 | }, |
| 3581 | .extra_temps = .{ | 3387 | .extra_temps = .{ |
| 3582 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 3388 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 3389 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| | 3390 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| | 3391 | .unused, |
| 3583 | .unused, | 3392 | .unused, |
| 3584 | .unused, | 3393 | .unused, |
| 3585 | .unused, | 3394 | .unused, |
| 3586 | .unused, | 3395 | .unused, |
| 3587 | .unused, | 3396 | .unused, |
| 3588 | }, | 3397 | }, |
| 3589 | .dst_temps = .{.{ .ref = .src0 }}, | 3398 | .dst_temps = .{.mem}, |
| 3590 | .clobbers = .{ .eflags = true }, | 3399 | .clobbers = .{ .eflags = true }, |
| 3591 | .each = .{ .once = &.{ | 3400 | .each = .{ .once = &.{ |
| 3592 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 3401 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3593 | .{ .@"0:", ._, .not, .memia(.dst0q, .tmp0, .add_size), ._, ._, ._ }, | 3402 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 3594 | .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, 8), ._, ._, ._ }, | 3403 | .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 3595 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 3404 | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, |
| 3596 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 3405 | .{ ._, ._l, .cmov, .tmp1d, .tmp2d, ._, ._ }, |
| | 3406 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| | 3407 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 3408 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 3597 | } }, | 3409 | } }, |
| 3598 | }, .{ | 3410 | }, .{ |
| 3599 | .required_features = .{ .@"64bit", null, null, null }, | 3411 | .required_features = .{ .slow_incdec, null, null, null }, |
| 3600 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, | 3412 | .src_constraints = .{ |
| | 3413 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 3414 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 3415 | }, |
| 3601 | .patterns = &.{ | 3416 | .patterns = &.{ |
| 3602 | .{ .src = .{ .to_mem, .none } }, | 3417 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3603 | }, | 3418 | }, |
| 3604 | .extra_temps = .{ | 3419 | .extra_temps = .{ |
| 3605 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 3420 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3606 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 3421 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| | 3422 | .unused, |
| | 3423 | .unused, |
| | 3424 | .unused, |
| 3607 | .unused, | 3425 | .unused, |
| 3608 | .unused, | 3426 | .unused, |
| 3609 | .unused, | 3427 | .unused, |
| ... | @@ -3613,45 +3431,120 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3613,45 +3431,120 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3613 | .clobbers = .{ .eflags = true }, | 3431 | .clobbers = .{ .eflags = true }, |
| 3614 | .each = .{ .once = &.{ | 3432 | .each = .{ .once = &.{ |
| 3615 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 3433 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3616 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | 3434 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 3617 | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, | 3435 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 3618 | .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, | 3436 | .{ ._, ._nl, .j, .@"1f", ._, ._, ._ }, |
| 3619 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, | 3437 | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| | 3438 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| | 3439 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 3620 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 3440 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3621 | } }, | 3441 | } }, |
| 3622 | }, .{ | 3442 | }, .{ |
| 3623 | .required_features = .{ .@"64bit", null, null, null }, | 3443 | .src_constraints = .{ |
| 3624 | .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .xword, .is = .dword } }, .any }, | 3444 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 3445 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 3446 | }, |
| 3625 | .patterns = &.{ | 3447 | .patterns = &.{ |
| 3626 | .{ .src = .{ .mut_mem, .none } }, | 3448 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3627 | }, | 3449 | }, |
| 3628 | .extra_temps = .{ | 3450 | .extra_temps = .{ |
| 3629 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 3451 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 3452 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| | 3453 | .unused, |
| | 3454 | .unused, |
| 3630 | .unused, | 3455 | .unused, |
| 3631 | .unused, | 3456 | .unused, |
| 3632 | .unused, | 3457 | .unused, |
| 3633 | .unused, | 3458 | .unused, |
| 3634 | .unused, | 3459 | .unused, |
| 3635 | }, | 3460 | }, |
| 3636 | .dst_temps = .{.{ .ref = .src0 }}, | 3461 | .dst_temps = .{.mem}, |
| 3637 | .clobbers = .{ .eflags = true }, | 3462 | .clobbers = .{ .eflags = true }, |
| 3638 | .each = .{ .once = &.{ | 3463 | .each = .{ .once = &.{ |
| 3639 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, | 3464 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3640 | .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16), ._, ._, ._ }, | 3465 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 3641 | .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16 + 8), ._, ._, ._ }, | 3466 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 3642 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 3467 | .{ ._, ._nl, .j, .@"1f", ._, ._, ._ }, |
| 3643 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 3468 | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 3644 | .{ ._, ._, .not, .memad(.dst0d, .add_size, -16), ._, ._, ._ }, | 3469 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| | 3470 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 3471 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 3645 | } }, | 3472 | } }, |
| 3646 | }, .{ | 3473 | }, .{ |
| 3647 | .required_features = .{ .@"64bit", null, null, null }, | 3474 | .required_features = .{ .sse, .mmx, null, null }, |
| 3648 | .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .xword, .is = .dword } }, .any }, | 3475 | .src_constraints = .{ |
| | 3476 | .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } }, |
| | 3477 | .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } }, |
| | 3478 | }, |
| 3649 | .patterns = &.{ | 3479 | .patterns = &.{ |
| 3650 | .{ .src = .{ .to_mem, .none } }, | 3480 | .{ .src = .{ .to_mut_mmx, .mem } }, |
| | 3481 | .{ .src = .{ .mem, .to_mut_mmx }, .commute = .{ 0, 1 } }, |
| | 3482 | .{ .src = .{ .to_mut_mmx, .to_mmx } }, |
| | 3483 | }, |
| | 3484 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 3485 | .each = .{ .once = &.{ |
| | 3486 | .{ ._, .p_b, .maxu, .dst0q, .src1q, ._, ._ }, |
| | 3487 | } }, |
| | 3488 | }, .{ |
| | 3489 | .required_features = .{ .avx, null, null, null }, |
| | 3490 | .src_constraints = .{ |
| | 3491 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| | 3492 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| | 3493 | }, |
| | 3494 | .patterns = &.{ |
| | 3495 | .{ .src = .{ .to_sse, .mem } }, |
| | 3496 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 3497 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 3498 | }, |
| | 3499 | .dst_temps = .{.{ .rc = .sse }}, |
| | 3500 | .each = .{ .once = &.{ |
| | 3501 | .{ ._, .vp_b, .maxu, .dst0x, .src0x, .src1x, ._ }, |
| | 3502 | } }, |
| | 3503 | }, .{ |
| | 3504 | .required_features = .{ .sse2, null, null, null }, |
| | 3505 | .src_constraints = .{ |
| | 3506 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| | 3507 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| | 3508 | }, |
| | 3509 | .patterns = &.{ |
| | 3510 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 3511 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 3512 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| | 3513 | }, |
| | 3514 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 3515 | .each = .{ .once = &.{ |
| | 3516 | .{ ._, .p_b, .maxu, .dst0x, .src1x, ._, ._ }, |
| | 3517 | } }, |
| | 3518 | }, .{ |
| | 3519 | .required_features = .{ .avx2, null, null, null }, |
| | 3520 | .src_constraints = .{ |
| | 3521 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, |
| | 3522 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, |
| | 3523 | }, |
| | 3524 | .patterns = &.{ |
| | 3525 | .{ .src = .{ .to_sse, .mem } }, |
| | 3526 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 3527 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 3528 | }, |
| | 3529 | .dst_temps = .{.{ .rc = .sse }}, |
| | 3530 | .each = .{ .once = &.{ |
| | 3531 | .{ ._, .vp_b, .maxu, .dst0y, .src0y, .src1y, ._ }, |
| | 3532 | } }, |
| | 3533 | }, .{ |
| | 3534 | .required_features = .{ .avx2, null, null, null }, |
| | 3535 | .src_constraints = .{ |
| | 3536 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, |
| | 3537 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, |
| | 3538 | }, |
| | 3539 | .patterns = &.{ |
| | 3540 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3651 | }, | 3541 | }, |
| 3652 | .extra_temps = .{ | 3542 | .extra_temps = .{ |
| 3653 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 3543 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3654 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 3544 | .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } }, |
| | 3545 | .unused, |
| | 3546 | .unused, |
| | 3547 | .unused, |
| 3655 | .unused, | 3548 | .unused, |
| 3656 | .unused, | 3549 | .unused, |
| 3657 | .unused, | 3550 | .unused, |
| ... | @@ -3660,51 +3553,58 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3660,51 +3553,58 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3660 | .dst_temps = .{.mem}, | 3553 | .dst_temps = .{.mem}, |
| 3661 | .clobbers = .{ .eflags = true }, | 3554 | .clobbers = .{ .eflags = true }, |
| 3662 | .each = .{ .once = &.{ | 3555 | .each = .{ .once = &.{ |
| 3663 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, | 3556 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3664 | .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -16), ._, ._ }, | 3557 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 3665 | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, | 3558 | .{ ._, .vp_b, .maxu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 3666 | .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -16), .tmp1q, ._, ._ }, | 3559 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 3667 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, | 3560 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 3668 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 3561 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3669 | .{ ._, ._, .mov, .tmp0d, .memad(.src0d, .add_size, -16), ._, ._ }, | | |
| 3670 | .{ ._, ._, .not, .tmp0d, ._, ._, ._ }, | | |
| 3671 | .{ ._, ._, .mov, .memad(.dst0d, .add_size, -16), .tmp0d, ._, ._ }, | | |
| 3672 | .{ ._, ._, .mov, .memad(.dst0d, .add_size, -16 + 4), .si(0), ._, ._ }, | | |
| 3673 | .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16 + 8), .si(0), ._, ._ }, | | |
| 3674 | } }, | 3562 | } }, |
| 3675 | }, .{ | 3563 | }, .{ |
| 3676 | .required_features = .{ .@"64bit", null, null, null }, | 3564 | .required_features = .{ .avx, null, null, null }, |
| 3677 | .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .qword, .is = .qword } }, .any }, | 3565 | .src_constraints = .{ |
| | 3566 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| | 3567 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| | 3568 | }, |
| 3678 | .patterns = &.{ | 3569 | .patterns = &.{ |
| 3679 | .{ .src = .{ .mut_mem, .none } }, | 3570 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3680 | }, | 3571 | }, |
| 3681 | .extra_temps = .{ | 3572 | .extra_temps = .{ |
| 3682 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 3573 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 3574 | .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } }, |
| | 3575 | .unused, |
| | 3576 | .unused, |
| 3683 | .unused, | 3577 | .unused, |
| 3684 | .unused, | 3578 | .unused, |
| 3685 | .unused, | 3579 | .unused, |
| 3686 | .unused, | 3580 | .unused, |
| 3687 | .unused, | 3581 | .unused, |
| 3688 | }, | 3582 | }, |
| 3689 | .dst_temps = .{.{ .ref = .src0 }}, | 3583 | .dst_temps = .{.mem}, |
| 3690 | .clobbers = .{ .eflags = true }, | 3584 | .clobbers = .{ .eflags = true }, |
| 3691 | .each = .{ .once = &.{ | 3585 | .each = .{ .once = &.{ |
| 3692 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, | 3586 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3693 | .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16), ._, ._, ._ }, | 3587 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3694 | .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16 + 8), ._, ._, ._ }, | 3588 | .{ ._, .vp_b, .maxu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 3589 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 3695 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 3590 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 3696 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 3591 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3697 | .{ ._, ._, .not, .memad(.dst0q, .add_size, -16), ._, ._, ._ }, | | |
| 3698 | } }, | 3592 | } }, |
| 3699 | }, .{ | 3593 | }, .{ |
| 3700 | .required_features = .{ .@"64bit", null, null, null }, | 3594 | .required_features = .{ .sse2, null, null, null }, |
| 3701 | .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .qword, .is = .qword } }, .any }, | 3595 | .src_constraints = .{ |
| | 3596 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| | 3597 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| | 3598 | }, |
| 3702 | .patterns = &.{ | 3599 | .patterns = &.{ |
| 3703 | .{ .src = .{ .to_mem, .none } }, | 3600 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3704 | }, | 3601 | }, |
| 3705 | .extra_temps = .{ | 3602 | .extra_temps = .{ |
| 3706 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 3603 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3707 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 3604 | .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } }, |
| | 3605 | .unused, |
| | 3606 | .unused, |
| | 3607 | .unused, |
| 3708 | .unused, | 3608 | .unused, |
| 3709 | .unused, | 3609 | .unused, |
| 3710 | .unused, | 3610 | .unused, |
| ... | @@ -3713,46 +3613,60 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3713,46 +3613,60 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3713 | .dst_temps = .{.mem}, | 3613 | .dst_temps = .{.mem}, |
| 3714 | .clobbers = .{ .eflags = true }, | 3614 | .clobbers = .{ .eflags = true }, |
| 3715 | .each = .{ .once = &.{ | 3615 | .each = .{ .once = &.{ |
| 3716 | .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ }, | 3616 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3717 | .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -8), ._, ._ }, | 3617 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3718 | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, | 3618 | .{ ._, .p_b, .maxu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 3719 | .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -8), .tmp1q, ._, ._ }, | 3619 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 3720 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, | 3620 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 3721 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 3621 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3722 | .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .si(0), ._, ._ }, | | |
| 3723 | } }, | 3622 | } }, |
| 3724 | }, .{ | 3623 | }, .{ |
| 3725 | .required_features = .{ .@"64bit", null, null, null }, | 3624 | .required_features = .{ .cmov, .slow_incdec, null, null }, |
| 3726 | .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .dword, .is = .dword } }, .any }, | 3625 | .src_constraints = .{ |
| | 3626 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 3627 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 3628 | }, |
| 3727 | .patterns = &.{ | 3629 | .patterns = &.{ |
| 3728 | .{ .src = .{ .mut_mem, .none } }, | 3630 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3729 | }, | 3631 | }, |
| 3730 | .extra_temps = .{ | 3632 | .extra_temps = .{ |
| 3731 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 3633 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 3634 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 3635 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 3636 | .unused, |
| 3732 | .unused, | 3637 | .unused, |
| 3733 | .unused, | 3638 | .unused, |
| 3734 | .unused, | 3639 | .unused, |
| 3735 | .unused, | 3640 | .unused, |
| 3736 | .unused, | 3641 | .unused, |
| 3737 | }, | 3642 | }, |
| 3738 | .dst_temps = .{.{ .ref = .src0 }}, | 3643 | .dst_temps = .{.mem}, |
| 3739 | .clobbers = .{ .eflags = true }, | 3644 | .clobbers = .{ .eflags = true }, |
| 3740 | .each = .{ .once = &.{ | 3645 | .each = .{ .once = &.{ |
| 3741 | .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ }, | 3646 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3742 | .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -8), ._, ._, ._ }, | 3647 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 3743 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, | 3648 | .{ ._, ._, .movzx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| | 3649 | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, |
| | 3650 | .{ ._, ._b, .cmov, .tmp1d, .tmp2d, ._, ._ }, |
| | 3651 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| | 3652 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 3744 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 3653 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3745 | .{ ._, ._, .not, .memad(.dst0d, .add_size, -8), ._, ._, ._ }, | | |
| 3746 | } }, | 3654 | } }, |
| 3747 | }, .{ | 3655 | }, .{ |
| 3748 | .required_features = .{ .@"64bit", null, null, null }, | 3656 | .required_features = .{ .cmov, null, null, null }, |
| 3749 | .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .dword, .is = .dword } }, .any }, | 3657 | .src_constraints = .{ |
| | 3658 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 3659 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 3660 | }, |
| 3750 | .patterns = &.{ | 3661 | .patterns = &.{ |
| 3751 | .{ .src = .{ .to_mem, .none } }, | 3662 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3752 | }, | 3663 | }, |
| 3753 | .extra_temps = .{ | 3664 | .extra_temps = .{ |
| 3754 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 3665 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3755 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 3666 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 3667 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 3668 | .unused, |
| | 3669 | .unused, |
| 3756 | .unused, | 3670 | .unused, |
| 3757 | .unused, | 3671 | .unused, |
| 3758 | .unused, | 3672 | .unused, |
| ... | @@ -3761,50 +3675,61 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3761,50 +3675,61 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3761 | .dst_temps = .{.mem}, | 3675 | .dst_temps = .{.mem}, |
| 3762 | .clobbers = .{ .eflags = true }, | 3676 | .clobbers = .{ .eflags = true }, |
| 3763 | .each = .{ .once = &.{ | 3677 | .each = .{ .once = &.{ |
| 3764 | .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ }, | 3678 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3765 | .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -8), ._, ._ }, | 3679 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 3766 | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, | 3680 | .{ ._, ._, .movzx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 3767 | .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -8), .tmp1q, ._, ._ }, | 3681 | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, |
| 3768 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, | 3682 | .{ ._, ._b, .cmov, .tmp1d, .tmp2d, ._, ._ }, |
| 3769 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 3683 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 3770 | .{ ._, ._, .mov, .tmp0d, .memad(.src0d, .add_size, -8), ._, ._ }, | 3684 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 3771 | .{ ._, ._, .not, .tmp0d, ._, ._, ._ }, | 3685 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 3772 | .{ ._, ._, .mov, .memad(.dst0d, .add_size, -8), .tmp0d, ._, ._ }, | | |
| 3773 | .{ ._, ._, .mov, .memad(.dst0d, .add_size, -8 + 4), .si(0), ._, ._ }, | | |
| 3774 | } }, | 3686 | } }, |
| 3775 | }, .{ | 3687 | }, .{ |
| 3776 | .required_features = .{ .@"64bit", null, null, null }, | 3688 | .required_features = .{ .slow_incdec, null, null, null }, |
| 3777 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .dword } }, .any }, | 3689 | .src_constraints = .{ |
| | 3690 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 3691 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 3692 | }, |
| 3778 | .patterns = &.{ | 3693 | .patterns = &.{ |
| 3779 | .{ .src = .{ .mut_mem, .none } }, | 3694 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3780 | }, | 3695 | }, |
| 3781 | .extra_temps = .{ | 3696 | .extra_temps = .{ |
| 3782 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 3697 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 3698 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 3699 | .unused, |
| | 3700 | .unused, |
| 3783 | .unused, | 3701 | .unused, |
| 3784 | .unused, | 3702 | .unused, |
| 3785 | .unused, | 3703 | .unused, |
| 3786 | .unused, | 3704 | .unused, |
| 3787 | .unused, | 3705 | .unused, |
| 3788 | }, | 3706 | }, |
| 3789 | .dst_temps = .{.{ .ref = .src0 }}, | 3707 | .dst_temps = .{.mem}, |
| 3790 | .clobbers = .{ .eflags = true }, | 3708 | .clobbers = .{ .eflags = true }, |
| 3791 | .each = .{ .once = &.{ | 3709 | .each = .{ .once = &.{ |
| 3792 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, | 3710 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3793 | .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16), ._, ._, ._ }, | 3711 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 3794 | .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16 + 8), ._, ._, ._ }, | 3712 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 3795 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 3713 | .{ ._, ._nb, .j, .@"1f", ._, ._, ._ }, |
| | 3714 | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| | 3715 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| | 3716 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 3796 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 3717 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3797 | .{ ._, ._, .xor, .memad(.dst0d, .add_size, -16), .sa(.src0, .add_umax), ._, ._ }, | | |
| 3798 | } }, | 3718 | } }, |
| 3799 | }, .{ | 3719 | }, .{ |
| 3800 | .required_features = .{ .@"64bit", null, null, null }, | 3720 | .src_constraints = .{ |
| 3801 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .dword } }, .any }, | 3721 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 3722 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 3723 | }, |
| 3802 | .patterns = &.{ | 3724 | .patterns = &.{ |
| 3803 | .{ .src = .{ .to_mem, .none } }, | 3725 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3804 | }, | 3726 | }, |
| 3805 | .extra_temps = .{ | 3727 | .extra_temps = .{ |
| 3806 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 3728 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3807 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 3729 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 3730 | .unused, |
| | 3731 | .unused, |
| | 3732 | .unused, |
| 3808 | .unused, | 3733 | .unused, |
| 3809 | .unused, | 3734 | .unused, |
| 3810 | .unused, | 3735 | .unused, |
| ... | @@ -3813,50 +3738,90 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3813,50 +3738,90 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3813 | .dst_temps = .{.mem}, | 3738 | .dst_temps = .{.mem}, |
| 3814 | .clobbers = .{ .eflags = true }, | 3739 | .clobbers = .{ .eflags = true }, |
| 3815 | .each = .{ .once = &.{ | 3740 | .each = .{ .once = &.{ |
| 3816 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, | 3741 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3817 | .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -16), ._, ._ }, | 3742 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 3818 | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, | 3743 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 3819 | .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -16), .tmp1q, ._, ._ }, | 3744 | .{ ._, ._nb, .j, .@"1f", ._, ._, ._ }, |
| 3820 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, | 3745 | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 3821 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 3746 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 3822 | .{ ._, ._, .mov, .tmp0d, .memad(.src0d, .add_size, -16), ._, ._ }, | 3747 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 3823 | .{ ._, ._, .xor, .tmp0d, .sa(.src0, .add_umax), ._, ._ }, | 3748 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 3824 | .{ ._, ._, .mov, .memad(.dst0d, .add_size, -16), .tmp0d, ._, ._ }, | | |
| 3825 | .{ ._, ._, .mov, .memad(.dst0d, .add_size, -16 + 4), .si(0), ._, ._ }, | | |
| 3826 | .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16 + 8), .si(0), ._, ._ }, | | |
| 3827 | } }, | 3749 | } }, |
| 3828 | }, .{ | 3750 | }, .{ |
| 3829 | .required_features = .{ .@"64bit", null, null, null }, | 3751 | .required_features = .{ .sse, .mmx, null, null }, |
| 3830 | .src_constraints = .{ .{ .remainder_int = .{ .of = .qword, .is = .dword } }, .any }, | 3752 | .src_constraints = .{ |
| | 3753 | .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, |
| | 3754 | .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, |
| | 3755 | }, |
| 3831 | .patterns = &.{ | 3756 | .patterns = &.{ |
| 3832 | .{ .src = .{ .mut_mem, .none } }, | 3757 | .{ .src = .{ .to_mut_mmx, .mem } }, |
| | 3758 | .{ .src = .{ .mem, .to_mut_mmx }, .commute = .{ 0, 1 } }, |
| | 3759 | .{ .src = .{ .to_mut_mmx, .to_mmx } }, |
| 3833 | }, | 3760 | }, |
| 3834 | .extra_temps = .{ | 3761 | .dst_temps = .{.{ .ref = .src0 }}, |
| 3835 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 3762 | .each = .{ .once = &.{ |
| 3836 | .unused, | 3763 | .{ ._, .p_w, .maxs, .dst0q, .src1q, ._, ._ }, |
| 3837 | .unused, | 3764 | } }, |
| 3838 | .unused, | 3765 | }, .{ |
| 3839 | .unused, | 3766 | .required_features = .{ .avx, null, null, null }, |
| 3840 | .unused, | 3767 | .src_constraints = .{ |
| | 3768 | .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| | 3769 | .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| | 3770 | }, |
| | 3771 | .patterns = &.{ |
| | 3772 | .{ .src = .{ .to_sse, .mem } }, |
| | 3773 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 3774 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 3775 | }, |
| | 3776 | .dst_temps = .{.{ .rc = .sse }}, |
| | 3777 | .each = .{ .once = &.{ |
| | 3778 | .{ ._, .vp_w, .maxs, .dst0x, .src0x, .src1x, ._ }, |
| | 3779 | } }, |
| | 3780 | }, .{ |
| | 3781 | .required_features = .{ .sse2, null, null, null }, |
| | 3782 | .src_constraints = .{ |
| | 3783 | .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| | 3784 | .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| | 3785 | }, |
| | 3786 | .patterns = &.{ |
| | 3787 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 3788 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 3789 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 3841 | }, | 3790 | }, |
| 3842 | .dst_temps = .{.{ .ref = .src0 }}, | 3791 | .dst_temps = .{.{ .ref = .src0 }}, |
| 3843 | .clobbers = .{ .eflags = true }, | | |
| 3844 | .each = .{ .once = &.{ | 3792 | .each = .{ .once = &.{ |
| 3845 | .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ }, | 3793 | .{ ._, .p_w, .maxs, .dst0x, .src1x, ._, ._ }, |
| 3846 | .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -8), ._, ._, ._ }, | | |
| 3847 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, | | |
| 3848 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 3849 | .{ ._, ._, .xor, .memad(.dst0d, .add_size, -8), .sa(.src0, .add_umax), ._, ._ }, | | |
| 3850 | } }, | 3794 | } }, |
| 3851 | }, .{ | 3795 | }, .{ |
| 3852 | .required_features = .{ .@"64bit", null, null, null }, | 3796 | .required_features = .{ .avx2, null, null, null }, |
| 3853 | .src_constraints = .{ .{ .remainder_int = .{ .of = .qword, .is = .dword } }, .any }, | 3797 | .src_constraints = .{ |
| | 3798 | .{ .scalar_signed_int = .{ .of = .yword, .is = .word } }, |
| | 3799 | .{ .scalar_signed_int = .{ .of = .yword, .is = .word } }, |
| | 3800 | }, |
| 3854 | .patterns = &.{ | 3801 | .patterns = &.{ |
| 3855 | .{ .src = .{ .to_mem, .none } }, | 3802 | .{ .src = .{ .to_sse, .mem } }, |
| | 3803 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 3804 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 3805 | }, |
| | 3806 | .dst_temps = .{.{ .rc = .sse }}, |
| | 3807 | .each = .{ .once = &.{ |
| | 3808 | .{ ._, .vp_w, .maxs, .dst0y, .src0y, .src1y, ._ }, |
| | 3809 | } }, |
| | 3810 | }, .{ |
| | 3811 | .required_features = .{ .avx2, null, null, null }, |
| | 3812 | .src_constraints = .{ |
| | 3813 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } }, |
| | 3814 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } }, |
| | 3815 | }, |
| | 3816 | .patterns = &.{ |
| | 3817 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3856 | }, | 3818 | }, |
| 3857 | .extra_temps = .{ | 3819 | .extra_temps = .{ |
| 3858 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 3820 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3859 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 3821 | .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } }, |
| | 3822 | .unused, |
| | 3823 | .unused, |
| | 3824 | .unused, |
| 3860 | .unused, | 3825 | .unused, |
| 3861 | .unused, | 3826 | .unused, |
| 3862 | .unused, | 3827 | .unused, |
| ... | @@ -3865,51 +3830,58 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3865,51 +3830,58 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3865 | .dst_temps = .{.mem}, | 3830 | .dst_temps = .{.mem}, |
| 3866 | .clobbers = .{ .eflags = true }, | 3831 | .clobbers = .{ .eflags = true }, |
| 3867 | .each = .{ .once = &.{ | 3832 | .each = .{ .once = &.{ |
| 3868 | .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ }, | 3833 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3869 | .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -8), ._, ._ }, | 3834 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 3870 | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, | 3835 | .{ ._, .vp_w, .maxs, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 3871 | .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -8), .tmp1q, ._, ._ }, | 3836 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 3872 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, | 3837 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 3873 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 3838 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3874 | .{ ._, ._, .mov, .tmp0d, .memad(.src0d, .add_size, -8), ._, ._ }, | | |
| 3875 | .{ ._, ._, .xor, .tmp0d, .sa(.src0, .add_umax), ._, ._ }, | | |
| 3876 | .{ ._, ._, .mov, .memad(.dst0d, .add_size, -8), .tmp0d, ._, ._ }, | | |
| 3877 | .{ ._, ._, .mov, .memad(.dst0d, .add_size, -8 + 4), .si(0), ._, ._ }, | | |
| 3878 | } }, | 3839 | } }, |
| 3879 | }, .{ | 3840 | }, .{ |
| 3880 | .required_features = .{ .@"64bit", null, null, null }, | 3841 | .required_features = .{ .avx, null, null, null }, |
| 3881 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any }, | 3842 | .src_constraints = .{ |
| | 3843 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| | 3844 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| | 3845 | }, |
| 3882 | .patterns = &.{ | 3846 | .patterns = &.{ |
| 3883 | .{ .src = .{ .mut_mem, .none } }, | 3847 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3884 | }, | 3848 | }, |
| 3885 | .extra_temps = .{ | 3849 | .extra_temps = .{ |
| 3886 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 3850 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 3851 | .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } }, |
| | 3852 | .unused, |
| | 3853 | .unused, |
| 3887 | .unused, | 3854 | .unused, |
| 3888 | .unused, | 3855 | .unused, |
| 3889 | .unused, | 3856 | .unused, |
| 3890 | .unused, | 3857 | .unused, |
| 3891 | .unused, | 3858 | .unused, |
| 3892 | }, | 3859 | }, |
| 3893 | .dst_temps = .{.{ .ref = .src0 }}, | 3860 | .dst_temps = .{.mem}, |
| 3894 | .clobbers = .{ .eflags = true }, | 3861 | .clobbers = .{ .eflags = true }, |
| 3895 | .each = .{ .once = &.{ | 3862 | .each = .{ .once = &.{ |
| 3896 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, | 3863 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3897 | .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16), ._, ._, ._ }, | 3864 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3898 | .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16 + 8), ._, ._, ._ }, | 3865 | .{ ._, .vp_w, .maxs, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 3866 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 3899 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 3867 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 3900 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 3868 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3901 | .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ }, | | |
| 3902 | .{ ._, ._, .xor, .memad(.dst0q, .add_size, -16), .tmp0q, ._, ._ }, | | |
| 3903 | } }, | 3869 | } }, |
| 3904 | }, .{ | 3870 | }, .{ |
| 3905 | .required_features = .{ .@"64bit", null, null, null }, | 3871 | .required_features = .{ .sse2, null, null, null }, |
| 3906 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any }, | 3872 | .src_constraints = .{ |
| | 3873 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| | 3874 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| | 3875 | }, |
| 3907 | .patterns = &.{ | 3876 | .patterns = &.{ |
| 3908 | .{ .src = .{ .to_mem, .none } }, | 3877 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3909 | }, | 3878 | }, |
| 3910 | .extra_temps = .{ | 3879 | .extra_temps = .{ |
| 3911 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 3880 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3912 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 3881 | .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } }, |
| | 3882 | .unused, |
| | 3883 | .unused, |
| | 3884 | .unused, |
| 3913 | .unused, | 3885 | .unused, |
| 3914 | .unused, | 3886 | .unused, |
| 3915 | .unused, | 3887 | .unused, |
| ... | @@ -3918,1746 +3890,2329 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3918,1746 +3890,2329 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3918 | .dst_temps = .{.mem}, | 3890 | .dst_temps = .{.mem}, |
| 3919 | .clobbers = .{ .eflags = true }, | 3891 | .clobbers = .{ .eflags = true }, |
| 3920 | .each = .{ .once = &.{ | 3892 | .each = .{ .once = &.{ |
| 3921 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, | 3893 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3922 | .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -16), ._, ._ }, | 3894 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3923 | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, | 3895 | .{ ._, .p_w, .maxs, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 3924 | .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -16), .tmp1q, ._, ._ }, | 3896 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 3925 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, | 3897 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 3926 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 3898 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3927 | .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ }, | | |
| 3928 | .{ ._, ._, .xor, .tmp0q, .memad(.src0q, .add_size, -16), ._, ._ }, | | |
| 3929 | .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16), .tmp0q, ._, ._ }, | | |
| 3930 | .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .si(0), ._, ._ }, | | |
| 3931 | } }, | 3899 | } }, |
| 3932 | }, .{ | 3900 | }, .{ |
| 3933 | .required_features = .{ .@"64bit", null, null, null }, | 3901 | .required_features = .{ .cmov, null, null, null }, |
| 3934 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any }, | 3902 | .src_constraints = .{ |
| | 3903 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| | 3904 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| | 3905 | }, |
| 3935 | .patterns = &.{ | 3906 | .patterns = &.{ |
| 3936 | .{ .src = .{ .mut_mem, .none } }, | 3907 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3937 | }, | 3908 | }, |
| 3938 | .extra_temps = .{ | 3909 | .extra_temps = .{ |
| 3939 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 3910 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 3911 | .{ .type = .i16, .kind = .{ .rc = .general_purpose } }, |
| | 3912 | .unused, |
| | 3913 | .unused, |
| 3940 | .unused, | 3914 | .unused, |
| 3941 | .unused, | 3915 | .unused, |
| 3942 | .unused, | 3916 | .unused, |
| 3943 | .unused, | 3917 | .unused, |
| 3944 | .unused, | 3918 | .unused, |
| 3945 | }, | 3919 | }, |
| 3946 | .dst_temps = .{.{ .ref = .src0 }}, | 3920 | .dst_temps = .{.mem}, |
| 3947 | .clobbers = .{ .eflags = true }, | 3921 | .clobbers = .{ .eflags = true }, |
| 3948 | .each = .{ .once = &.{ | 3922 | .each = .{ .once = &.{ |
| 3949 | .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ }, | 3923 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3950 | .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -8), ._, ._, ._ }, | 3924 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 3951 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, | 3925 | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| | 3926 | .{ ._, ._l, .cmov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| | 3927 | .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| | 3928 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 3952 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 3929 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3953 | .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ }, | | |
| 3954 | .{ ._, ._, .xor, .memad(.dst0q, .add_size, -8), .tmp0q, ._, ._ }, | | |
| 3955 | } }, | 3930 | } }, |
| 3956 | }, .{ | 3931 | }, .{ |
| 3957 | .required_features = .{ .@"64bit", null, null, null }, | 3932 | .src_constraints = .{ |
| 3958 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any }, | 3933 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| | 3934 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| | 3935 | }, |
| 3959 | .patterns = &.{ | 3936 | .patterns = &.{ |
| 3960 | .{ .src = .{ .to_mem, .none } }, | 3937 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3961 | }, | 3938 | }, |
| 3962 | .extra_temps = .{ | 3939 | .extra_temps = .{ |
| 3963 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 3940 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3964 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 3941 | .{ .type = .i16, .kind = .{ .rc = .general_purpose } }, |
| 3965 | .unused, | 3942 | .unused, |
| 3966 | .unused, | 3943 | .unused, |
| 3967 | .unused, | 3944 | .unused, |
| 3968 | .unused, | 3945 | .unused, |
| 3969 | }, | 3946 | .unused, |
| | 3947 | .unused, |
| | 3948 | .unused, |
| | 3949 | }, |
| 3970 | .dst_temps = .{.mem}, | 3950 | .dst_temps = .{.mem}, |
| 3971 | .clobbers = .{ .eflags = true }, | 3951 | .clobbers = .{ .eflags = true }, |
| 3972 | .each = .{ .once = &.{ | 3952 | .each = .{ .once = &.{ |
| 3973 | .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ }, | 3953 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3974 | .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -8), ._, ._ }, | 3954 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 3975 | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, | 3955 | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 3976 | .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -8), .tmp1q, ._, ._ }, | 3956 | .{ ._, ._nl, .j, .@"1f", ._, ._, ._ }, |
| 3977 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, | 3957 | .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| | 3958 | .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| | 3959 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 3978 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 3960 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3979 | .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ }, | | |
| 3980 | .{ ._, ._, .xor, .tmp0q, .memad(.src0q, .add_size, -8), ._, ._ }, | | |
| 3981 | .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp0q, ._, ._ }, | | |
| 3982 | } }, | 3961 | } }, |
| 3983 | }, .{ | 3962 | }, .{ |
| 3984 | .required_features = .{ .mmx, null, null, null }, | 3963 | .required_features = .{ .avx, null, null, null }, |
| 3985 | .src_constraints = .{ .{ .signed_int_or_full_vec = .qword }, .any }, | 3964 | .src_constraints = .{ |
| | 3965 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 3966 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 3967 | }, |
| 3986 | .patterns = &.{ | 3968 | .patterns = &.{ |
| 3987 | .{ .src = .{ .mem, .none } }, | 3969 | .{ .src = .{ .to_sse, .mem } }, |
| 3988 | .{ .src = .{ .to_mm, .none } }, | 3970 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 3971 | .{ .src = .{ .to_sse, .to_sse } }, |
| 3989 | }, | 3972 | }, |
| 3990 | .dst_temps = .{.{ .rc = .mmx }}, | 3973 | .dst_temps = .{.{ .rc = .sse }}, |
| 3991 | .each = .{ .once = &.{ | 3974 | .each = .{ .once = &.{ |
| 3992 | .{ ._, .p_d, .cmpeq, .dst0q, .dst0q, ._, ._ }, | 3975 | .{ ._, .vp_w, .maxu, .dst0x, .src0x, .src1x, ._ }, |
| 3993 | .{ ._, .p_, .xor, .dst0q, .src0q, ._, ._ }, | | |
| 3994 | } }, | 3976 | } }, |
| 3995 | }, .{ | 3977 | }, .{ |
| 3996 | .required_features = .{ .mmx, null, null, null }, | 3978 | .required_features = .{ .sse4_1, null, null, null }, |
| 3997 | .src_constraints = .{ .{ .unsigned_int_vec = .qword }, .any }, | 3979 | .src_constraints = .{ |
| 3998 | .patterns = &.{ | 3980 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 3999 | .{ .src = .{ .to_mut_mm, .none } }, | 3981 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 4000 | }, | 3982 | }, |
| 4001 | .extra_temps = .{ | 3983 | .patterns = &.{ |
| 4002 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3984 | .{ .src = .{ .to_mut_sse, .mem } }, |
| 4003 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, | 3985 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 4004 | .unused, | 3986 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 4005 | .unused, | | |
| 4006 | .unused, | | |
| 4007 | .unused, | | |
| 4008 | }, | 3987 | }, |
| 4009 | .dst_temps = .{.{ .ref = .src0 }}, | 3988 | .dst_temps = .{.{ .ref = .src0 }}, |
| 4010 | .each = .{ .once = &.{ | 3989 | .each = .{ .once = &.{ |
| 4011 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 3990 | .{ ._, .p_w, .maxu, .dst0x, .src1x, ._, ._ }, |
| 4012 | .{ ._, .p_, .xor, .dst0q, .lea(.qword, .tmp0), ._, ._ }, | | |
| 4013 | } }, | 3991 | } }, |
| 4014 | }, .{ | 3992 | }, .{ |
| 4015 | .required_features = .{ .avx, null, null, null }, | 3993 | .required_features = .{ .sse2, null, null, null }, |
| 4016 | .src_constraints = .{ .{ .signed_int_or_full_vec = .xword }, .any }, | 3994 | .src_constraints = .{ |
| 4017 | .patterns = &.{ | 3995 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 4018 | .{ .src = .{ .mem, .none } }, | 3996 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 4019 | .{ .src = .{ .to_xmm, .none } }, | | |
| 4020 | }, | 3997 | }, |
| 4021 | .dst_temps = .{.{ .rc = .sse }}, | | |
| 4022 | .each = .{ .once = &.{ | | |
| 4023 | .{ ._, .vp_q, .cmpeq, .dst0x, .dst0x, .dst0x, ._ }, | | |
| 4024 | .{ ._, .vp_, .xor, .dst0x, .dst0x, .src0x, ._ }, | | |
| 4025 | } }, | | |
| 4026 | }, .{ | | |
| 4027 | .required_features = .{ .avx, null, null, null }, | | |
| 4028 | .src_constraints = .{ .{ .unsigned_int_vec = .xword }, .any }, | | |
| 4029 | .patterns = &.{ | 3998 | .patterns = &.{ |
| 4030 | .{ .src = .{ .to_xmm, .none } }, | 3999 | .{ .src = .{ .to_mut_sse, .mem } }, |
| 4031 | }, | 4000 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 4032 | .extra_temps = .{ | 4001 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 4033 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | | |
| 4034 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, | | |
| 4035 | .unused, | | |
| 4036 | .unused, | | |
| 4037 | .unused, | | |
| 4038 | .unused, | | |
| 4039 | }, | 4002 | }, |
| 4040 | .dst_temps = .{.{ .rc = .sse }}, | 4003 | .dst_temps = .{.{ .ref = .src0 }}, |
| 4041 | .each = .{ .once = &.{ | 4004 | .each = .{ .once = &.{ |
| 4042 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 4005 | .{ ._, .p_w, .subus, .dst0x, .src1x, ._, ._ }, |
| 4043 | .{ ._, .vp_, .xor, .dst0x, .src0x, .lea(.xword, .tmp0), ._ }, | 4006 | .{ ._, .p_w, .add, .dst0x, .src1x, ._, ._ }, |
| 4044 | } }, | 4007 | } }, |
| 4045 | }, .{ | 4008 | }, .{ |
| 4046 | .required_features = .{ .sse2, null, null, null }, | 4009 | .required_features = .{ .avx2, null, null, null }, |
| 4047 | .src_constraints = .{ .{ .signed_int_or_full_vec = .xword }, .any }, | 4010 | .src_constraints = .{ |
| | 4011 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } }, |
| | 4012 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } }, |
| | 4013 | }, |
| 4048 | .patterns = &.{ | 4014 | .patterns = &.{ |
| 4049 | .{ .src = .{ .mem, .none } }, | 4015 | .{ .src = .{ .to_sse, .mem } }, |
| 4050 | .{ .src = .{ .to_xmm, .none } }, | 4016 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 4017 | .{ .src = .{ .to_sse, .to_sse } }, |
| 4051 | }, | 4018 | }, |
| 4052 | .dst_temps = .{.{ .rc = .sse }}, | 4019 | .dst_temps = .{.{ .rc = .sse }}, |
| 4053 | .each = .{ .once = &.{ | 4020 | .each = .{ .once = &.{ |
| 4054 | .{ ._, .p_d, .cmpeq, .dst0x, .dst0x, ._, ._ }, | 4021 | .{ ._, .vp_w, .maxu, .dst0y, .src0y, .src1y, ._ }, |
| 4055 | .{ ._, .p_, .xor, .dst0x, .src0x, ._, ._ }, | | |
| 4056 | } }, | 4022 | } }, |
| 4057 | }, .{ | 4023 | }, .{ |
| 4058 | .required_features = .{ .sse2, null, null, null }, | 4024 | .required_features = .{ .avx2, null, null, null }, |
| 4059 | .src_constraints = .{ .{ .unsigned_int_vec = .xword }, .any }, | 4025 | .src_constraints = .{ |
| | 4026 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } }, |
| | 4027 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } }, |
| | 4028 | }, |
| 4060 | .patterns = &.{ | 4029 | .patterns = &.{ |
| 4061 | .{ .src = .{ .to_mut_xmm, .none } }, | 4030 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4062 | }, | 4031 | }, |
| 4063 | .extra_temps = .{ | 4032 | .extra_temps = .{ |
| 4064 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4033 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4065 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, | 4034 | .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } }, |
| | 4035 | .unused, |
| | 4036 | .unused, |
| | 4037 | .unused, |
| 4066 | .unused, | 4038 | .unused, |
| 4067 | .unused, | 4039 | .unused, |
| 4068 | .unused, | 4040 | .unused, |
| 4069 | .unused, | 4041 | .unused, |
| 4070 | }, | 4042 | }, |
| 4071 | .dst_temps = .{.{ .ref = .src0 }}, | 4043 | .dst_temps = .{.mem}, |
| | 4044 | .clobbers = .{ .eflags = true }, |
| 4072 | .each = .{ .once = &.{ | 4045 | .each = .{ .once = &.{ |
| 4073 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 4046 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4074 | .{ ._, .p_, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ }, | 4047 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 4048 | .{ ._, .vp_w, .maxu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| | 4049 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| | 4050 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 4051 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4075 | } }, | 4052 | } }, |
| 4076 | }, .{ | 4053 | }, .{ |
| 4077 | .required_features = .{ .sse, null, null, null }, | 4054 | .required_features = .{ .avx, null, null, null }, |
| 4078 | .src_constraints = .{ .{ .vec = .xword }, .any }, | 4055 | .src_constraints = .{ |
| | 4056 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 4057 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 4058 | }, |
| 4079 | .patterns = &.{ | 4059 | .patterns = &.{ |
| 4080 | .{ .src = .{ .to_mut_xmm, .none } }, | 4060 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4081 | }, | 4061 | }, |
| 4082 | .extra_temps = .{ | 4062 | .extra_temps = .{ |
| 4083 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4063 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4084 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, | 4064 | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, |
| | 4065 | .unused, |
| | 4066 | .unused, |
| | 4067 | .unused, |
| 4085 | .unused, | 4068 | .unused, |
| 4086 | .unused, | 4069 | .unused, |
| 4087 | .unused, | 4070 | .unused, |
| 4088 | .unused, | 4071 | .unused, |
| 4089 | }, | 4072 | }, |
| 4090 | .dst_temps = .{.{ .ref = .src0 }}, | 4073 | .dst_temps = .{.mem}, |
| | 4074 | .clobbers = .{ .eflags = true }, |
| 4091 | .each = .{ .once = &.{ | 4075 | .each = .{ .once = &.{ |
| 4092 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 4076 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4093 | .{ ._, ._ps, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ }, | 4077 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 4078 | .{ ._, .vp_w, .maxu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 4079 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 4080 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 4081 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4094 | } }, | 4082 | } }, |
| 4095 | }, .{ | 4083 | }, .{ |
| 4096 | .required_features = .{ .avx2, null, null, null }, | 4084 | .required_features = .{ .sse4_1, null, null, null }, |
| 4097 | .src_constraints = .{ .{ .signed_int_or_full_vec = .yword }, .any }, | 4085 | .src_constraints = .{ |
| 4098 | .patterns = &.{ | 4086 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 4099 | .{ .src = .{ .mem, .none } }, | 4087 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 4100 | .{ .src = .{ .to_ymm, .none } }, | | |
| 4101 | }, | 4088 | }, |
| 4102 | .dst_temps = .{.{ .rc = .sse }}, | | |
| 4103 | .each = .{ .once = &.{ | | |
| 4104 | .{ ._, .vp_q, .cmpeq, .dst0y, .dst0y, .dst0y, ._ }, | | |
| 4105 | .{ ._, .vp_, .xor, .dst0y, .dst0y, .src0y, ._ }, | | |
| 4106 | } }, | | |
| 4107 | }, .{ | | |
| 4108 | .required_features = .{ .avx2, null, null, null }, | | |
| 4109 | .src_constraints = .{ .{ .unsigned_int_vec = .yword }, .any }, | | |
| 4110 | .patterns = &.{ | 4089 | .patterns = &.{ |
| 4111 | .{ .src = .{ .to_ymm, .none } }, | 4090 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4112 | }, | 4091 | }, |
| 4113 | .extra_temps = .{ | 4092 | .extra_temps = .{ |
| 4114 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4093 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4115 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, | 4094 | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, |
| | 4095 | .unused, |
| | 4096 | .unused, |
| | 4097 | .unused, |
| 4116 | .unused, | 4098 | .unused, |
| 4117 | .unused, | 4099 | .unused, |
| 4118 | .unused, | 4100 | .unused, |
| 4119 | .unused, | 4101 | .unused, |
| 4120 | }, | 4102 | }, |
| 4121 | .dst_temps = .{.{ .rc = .sse }}, | 4103 | .dst_temps = .{.mem}, |
| | 4104 | .clobbers = .{ .eflags = true }, |
| 4122 | .each = .{ .once = &.{ | 4105 | .each = .{ .once = &.{ |
| 4123 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 4106 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4124 | .{ ._, .vp_, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, | 4107 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 4108 | .{ ._, .p_w, .maxu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 4109 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 4110 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 4111 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4125 | } }, | 4112 | } }, |
| 4126 | }, .{ | 4113 | }, .{ |
| 4127 | .required_features = .{ .avx, null, null, null }, | 4114 | .required_features = .{ .sse2, null, null, null }, |
| 4128 | .src_constraints = .{ .{ .signed_int_or_full_vec = .yword }, .any }, | 4115 | .src_constraints = .{ |
| 4129 | .patterns = &.{ | 4116 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 4130 | .{ .src = .{ .mem, .none } }, | 4117 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 4131 | .{ .src = .{ .to_ymm, .none } }, | | |
| 4132 | }, | 4118 | }, |
| 4133 | .dst_temps = .{.{ .rc = .sse }}, | | |
| 4134 | .each = .{ .once = &.{ | | |
| 4135 | .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .si(0b01111) }, | | |
| 4136 | .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ }, | | |
| 4137 | } }, | | |
| 4138 | }, .{ | | |
| 4139 | .required_features = .{ .avx, null, null, null }, | | |
| 4140 | .src_constraints = .{ .{ .unsigned_int_vec = .yword }, .any }, | | |
| 4141 | .patterns = &.{ | 4119 | .patterns = &.{ |
| 4142 | .{ .src = .{ .to_ymm, .none } }, | 4120 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4143 | }, | 4121 | }, |
| 4144 | .extra_temps = .{ | 4122 | .extra_temps = .{ |
| 4145 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4123 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4146 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, | 4124 | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, |
| | 4125 | .unused, |
| | 4126 | .unused, |
| | 4127 | .unused, |
| 4147 | .unused, | 4128 | .unused, |
| 4148 | .unused, | 4129 | .unused, |
| 4149 | .unused, | 4130 | .unused, |
| 4150 | .unused, | 4131 | .unused, |
| 4151 | }, | 4132 | }, |
| 4152 | .dst_temps = .{.{ .rc = .sse }}, | 4133 | .dst_temps = .{.mem}, |
| | 4134 | .clobbers = .{ .eflags = true }, |
| 4153 | .each = .{ .once = &.{ | 4135 | .each = .{ .once = &.{ |
| 4154 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 4136 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4155 | .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, | 4137 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 4138 | .{ ._, .p_w, .subus, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 4139 | .{ ._, .p_w, .add, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 4140 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 4141 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 4142 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4156 | } }, | 4143 | } }, |
| 4157 | }, .{ | 4144 | }, .{ |
| 4158 | .required_features = .{ .@"64bit", null, null, null }, | 4145 | .required_features = .{ .cmov, null, null, null }, |
| | 4146 | .src_constraints = .{ |
| | 4147 | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, |
| | 4148 | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, |
| | 4149 | }, |
| 4159 | .patterns = &.{ | 4150 | .patterns = &.{ |
| 4160 | .{ .src = .{ .to_mem, .none } }, | 4151 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4161 | }, | 4152 | }, |
| 4162 | .extra_temps = .{ | 4153 | .extra_temps = .{ |
| 4163 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 4154 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4164 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4155 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| 4165 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 4156 | .unused, |
| 4166 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, | 4157 | .unused, |
| | 4158 | .unused, |
| | 4159 | .unused, |
| | 4160 | .unused, |
| 4167 | .unused, | 4161 | .unused, |
| 4168 | .unused, | 4162 | .unused, |
| 4169 | }, | 4163 | }, |
| 4170 | .dst_temps = .{.mem}, | 4164 | .dst_temps = .{.mem}, |
| | 4165 | .clobbers = .{ .eflags = true }, |
| 4171 | .each = .{ .once = &.{ | 4166 | .each = .{ .once = &.{ |
| 4172 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_src0_unaligned_size), ._, ._ }, | 4167 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4173 | .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ }, | 4168 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 4174 | .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_src0_unaligned_size), ._, ._ }, | 4169 | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 4175 | .{ ._, ._, .xor, .tmp2q, .leaia(.qword, .tmp1, .tmp0, .add_src0_unaligned_size), ._, ._ }, | 4170 | .{ ._, ._b, .cmov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 4176 | .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_src0_unaligned_size), .tmp2q, ._, ._ }, | 4171 | .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| 4177 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, | 4172 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 4178 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 4173 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4179 | } }, | 4174 | } }, |
| 4180 | }, .{ | 4175 | }, .{ |
| | 4176 | .src_constraints = .{ |
| | 4177 | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, |
| | 4178 | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, |
| | 4179 | }, |
| 4181 | .patterns = &.{ | 4180 | .patterns = &.{ |
| 4182 | .{ .src = .{ .to_mem, .none } }, | 4181 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4183 | }, | 4182 | }, |
| 4184 | .extra_temps = .{ | 4183 | .extra_temps = .{ |
| 4185 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 4184 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4186 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4185 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| 4187 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4186 | .unused, |
| 4188 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, | 4187 | .unused, |
| | 4188 | .unused, |
| | 4189 | .unused, |
| | 4190 | .unused, |
| 4189 | .unused, | 4191 | .unused, |
| 4190 | .unused, | 4192 | .unused, |
| 4191 | }, | 4193 | }, |
| 4192 | .dst_temps = .{.mem}, | 4194 | .dst_temps = .{.mem}, |
| | 4195 | .clobbers = .{ .eflags = true }, |
| 4193 | .each = .{ .once = &.{ | 4196 | .each = .{ .once = &.{ |
| 4194 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_src0_unaligned_size), ._, ._ }, | 4197 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4195 | .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ }, | 4198 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 4196 | .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_src0_unaligned_size), ._, ._ }, | 4199 | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 4197 | .{ ._, ._, .xor, .tmp2d, .leaia(.dword, .tmp1, .tmp0, .add_src0_unaligned_size), ._, ._ }, | 4200 | .{ ._, ._nb, .j, .@"1f", ._, ._, ._ }, |
| 4198 | .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_src0_unaligned_size), .tmp2d, ._, ._ }, | 4201 | .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 4199 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, | 4202 | .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| | 4203 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 4200 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 4204 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4201 | } }, | 4205 | } }, |
| 4202 | } }) catch |err| switch (err) { | 4206 | }, .{ |
| 4203 | error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{ | 4207 | .required_features = .{ .avx, null, null, null }, |
| 4204 | @tagName(air_tag), | 4208 | .src_constraints = .{ |
| 4205 | cg.typeOf(ty_op.operand).fmt(pt), | 4209 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 4206 | ops[0].tracking(cg), | 4210 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 4207 | }), | 4211 | }, |
| 4208 | else => |e| return e, | | |
| 4209 | }; | | |
| 4210 | for (ops) |op| for (res) |r| { | | |
| 4211 | if (op.index == r.index) break; | | |
| 4212 | } else try op.die(cg); | | |
| 4213 | try res[0].moveTo(inst, cg); | | |
| 4214 | }, | | |
| 4215 | | | |
| 4216 | .block => if (use_old) try cg.airBlock(inst) else { | | |
| 4217 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; | | |
| 4218 | const extra = cg.air.extraData(Air.Block, ty_pl.payload); | | |
| 4219 | try cg.asmPseudo(.pseudo_dbg_enter_block_none); | | |
| 4220 | try cg.lowerBlock(inst, @ptrCast(cg.air.extra[extra.end..][0..extra.data.body_len])); | | |
| 4221 | try cg.asmPseudo(.pseudo_dbg_leave_block_none); | | |
| 4222 | }, | | |
| 4223 | .loop => if (use_old) try cg.airLoop(inst) else { | | |
| 4224 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; | | |
| 4225 | const extra = cg.air.extraData(Air.Block, ty_pl.payload); | | |
| 4226 | cg.scope_generation += 1; | | |
| 4227 | try cg.loops.putNoClobber(cg.gpa, inst, .{ | | |
| 4228 | .state = try cg.saveState(), | | |
| 4229 | .target = @intCast(cg.mir_instructions.len), | | |
| 4230 | }); | | |
| 4231 | defer assert(cg.loops.remove(inst)); | | |
| 4232 | try cg.genBodyBlock(@ptrCast(cg.air.extra[extra.end..][0..extra.data.body_len])); | | |
| 4233 | }, | | |
| 4234 | .repeat => if (use_old) try cg.airRepeat(inst) else { | | |
| 4235 | const repeat = air_datas[@intFromEnum(inst)].repeat; | | |
| 4236 | const loop = cg.loops.get(repeat.loop_inst).?; | | |
| 4237 | try cg.restoreState(loop.state, &.{}, .{ | | |
| 4238 | .emit_instructions = true, | | |
| 4239 | .update_tracking = false, | | |
| 4240 | .resurrect = false, | | |
| 4241 | .close_scope = true, | | |
| 4242 | }); | | |
| 4243 | _ = try cg.asmJmpReloc(loop.target); | | |
| 4244 | }, | | |
| 4245 | .br => try cg.airBr(inst), | | |
| 4246 | .trap => try cg.asmOpOnly(.{ ._2, .ud }), | | |
| 4247 | .breakpoint => try cg.asmOpOnly(.{ ._3, .int }), | | |
| 4248 | .ret_addr => if (use_old) try cg.airRetAddr(inst) else { | | |
| 4249 | var slot = try cg.tempInit(.usize, .{ .load_frame = .{ | | |
| 4250 | .index = .ret_addr, | | |
| 4251 | } }); | | |
| 4252 | while (try slot.toRegClass(true, .general_purpose, cg)) {} | | |
| 4253 | try slot.moveTo(inst, cg); | | |
| 4254 | }, | | |
| 4255 | .frame_addr => if (use_old) try cg.airFrameAddress(inst) else { | | |
| 4256 | var slot = try cg.tempInit(.usize, .{ .lea_frame = .{ | | |
| 4257 | .index = .base_ptr, | | |
| 4258 | } }); | | |
| 4259 | try slot.moveTo(inst, cg); | | |
| 4260 | }, | | |
| 4261 | .call => try cg.airCall(inst, .auto, .{ .safety = true }), | | |
| 4262 | .call_always_tail => try cg.airCall(inst, .always_tail, .{ .safety = true }), | | |
| 4263 | .call_never_tail => try cg.airCall(inst, .never_tail, .{ .safety = true }), | | |
| 4264 | .call_never_inline => try cg.airCall(inst, .never_inline, .{ .safety = true }), | | |
| 4265 | | | |
| 4266 | .clz => |air_tag| if (use_old) try cg.airClz(inst) else { | | |
| 4267 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; | | |
| 4268 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); | | |
| 4269 | var res: [1]Temp = undefined; | | |
| 4270 | cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{ | | |
| 4271 | .required_features = .{ .slow_incdec, null, null, null }, | | |
| 4272 | .src_constraints = .{ .{ .exact_signed_int = 1 }, .any }, | | |
| 4273 | .patterns = &.{ | 4212 | .patterns = &.{ |
| 4274 | .{ .src = .{ .mut_mem, .none } }, | 4213 | .{ .src = .{ .to_sse, .mem } }, |
| 4275 | .{ .src = .{ .to_mut_gpr, .none } }, | 4214 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 4215 | .{ .src = .{ .to_sse, .to_sse } }, |
| 4276 | }, | 4216 | }, |
| 4277 | .dst_temps = .{.{ .ref = .src0 }}, | 4217 | .dst_temps = .{.{ .rc = .sse }}, |
| 4278 | .clobbers = .{ .eflags = true }, | | |
| 4279 | .each = .{ .once = &.{ | 4218 | .each = .{ .once = &.{ |
| 4280 | .{ ._, ._, .add, .dst0b, .si(1), ._, ._ }, | 4219 | .{ ._, .vp_d, .maxs, .dst0x, .src0x, .src1x, ._ }, |
| 4281 | } }, | 4220 | } }, |
| 4282 | }, .{ | 4221 | }, .{ |
| 4283 | .src_constraints = .{ .{ .exact_signed_int = 1 }, .any }, | 4222 | .required_features = .{ .sse4_1, null, null, null }, |
| | 4223 | .src_constraints = .{ |
| | 4224 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 4225 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 4226 | }, |
| 4284 | .patterns = &.{ | 4227 | .patterns = &.{ |
| 4285 | .{ .src = .{ .mut_mem, .none } }, | 4228 | .{ .src = .{ .to_mut_sse, .mem } }, |
| 4286 | .{ .src = .{ .to_mut_gpr, .none } }, | 4229 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 4230 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 4287 | }, | 4231 | }, |
| 4288 | .dst_temps = .{.{ .ref = .src0 }}, | 4232 | .dst_temps = .{.{ .ref = .src0 }}, |
| 4289 | .clobbers = .{ .eflags = true }, | | |
| 4290 | .each = .{ .once = &.{ | 4233 | .each = .{ .once = &.{ |
| 4291 | .{ ._, ._c, .in, .dst0b, ._, ._, ._ }, | 4234 | .{ ._, .p_d, .maxs, .dst0x, .src1x, ._, ._ }, |
| 4292 | } }, | 4235 | } }, |
| 4293 | }, .{ | 4236 | }, .{ |
| 4294 | .src_constraints = .{ .{ .exact_unsigned_int = 1 }, .any }, | 4237 | .required_features = .{ .sse2, null, null, null }, |
| | 4238 | .src_constraints = .{ |
| | 4239 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 4240 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 4241 | }, |
| 4295 | .patterns = &.{ | 4242 | .patterns = &.{ |
| 4296 | .{ .src = .{ .mut_mem, .none } }, | 4243 | .{ .src = .{ .to_mut_sse, .mem } }, |
| 4297 | .{ .src = .{ .to_mut_gpr, .none } }, | 4244 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 4245 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 4298 | }, | 4246 | }, |
| 4299 | .dst_temps = .{.{ .ref = .src0 }}, | 4247 | .dst_temps = .{.{ .rc = .sse }}, |
| 4300 | .clobbers = .{ .eflags = true }, | | |
| 4301 | .each = .{ .once = &.{ | 4248 | .each = .{ .once = &.{ |
| 4302 | .{ ._, ._, .xor, .dst0b, .si(1), ._, ._ }, | 4249 | .{ ._, ._dqa, .mov, .dst0x, .src0x, ._, ._ }, |
| | 4250 | .{ ._, .p_d, .cmpgt, .dst0x, .src1x, ._, ._ }, |
| | 4251 | .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ }, |
| | 4252 | .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ }, |
| | 4253 | .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ }, |
| 4303 | } }, | 4254 | } }, |
| 4304 | }, .{ | 4255 | }, .{ |
| 4305 | .required_features = .{ .lzcnt, null, null, null }, | 4256 | .required_features = .{ .avx2, null, null, null }, |
| 4306 | .src_constraints = .{ .{ .unsigned_or_exact_int = .byte }, .any }, | 4257 | .src_constraints = .{ |
| | 4258 | .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }, |
| | 4259 | .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }, |
| | 4260 | }, |
| 4307 | .patterns = &.{ | 4261 | .patterns = &.{ |
| 4308 | .{ .src = .{ .mem, .none } }, | 4262 | .{ .src = .{ .to_sse, .mem } }, |
| 4309 | .{ .src = .{ .to_gpr, .none } }, | 4263 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 4264 | .{ .src = .{ .to_sse, .to_sse } }, |
| 4310 | }, | 4265 | }, |
| 4311 | .dst_temps = .{.{ .rc = .general_purpose }}, | 4266 | .dst_temps = .{.{ .rc = .sse }}, |
| 4312 | .clobbers = .{ .eflags = true }, | | |
| 4313 | .each = .{ .once = &.{ | 4267 | .each = .{ .once = &.{ |
| 4314 | .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, | 4268 | .{ ._, .vp_d, .maxs, .dst0y, .src0y, .src1y, ._ }, |
| 4315 | .{ ._, ._, .lzcnt, .dst0d, .dst0d, ._, ._ }, | | |
| 4316 | .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ }, | | |
| 4317 | } }, | 4269 | } }, |
| 4318 | }, .{ | 4270 | }, .{ |
| 4319 | .required_features = .{ .lzcnt, null, null, null }, | 4271 | .required_features = .{ .avx2, null, null, null }, |
| 4320 | .src_constraints = .{ .{ .signed_int = .byte }, .any }, | 4272 | .src_constraints = .{ |
| | 4273 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }, |
| | 4274 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }, |
| | 4275 | }, |
| 4321 | .patterns = &.{ | 4276 | .patterns = &.{ |
| 4322 | .{ .src = .{ .mem, .none } }, | 4277 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4323 | .{ .src = .{ .to_gpr, .none } }, | | |
| 4324 | }, | 4278 | }, |
| 4325 | .dst_temps = .{.{ .rc = .general_purpose }}, | 4279 | .extra_temps = .{ |
| | 4280 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 4281 | .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } }, |
| | 4282 | .unused, |
| | 4283 | .unused, |
| | 4284 | .unused, |
| | 4285 | .unused, |
| | 4286 | .unused, |
| | 4287 | .unused, |
| | 4288 | .unused, |
| | 4289 | }, |
| | 4290 | .dst_temps = .{.mem}, |
| 4326 | .clobbers = .{ .eflags = true }, | 4291 | .clobbers = .{ .eflags = true }, |
| 4327 | .each = .{ .once = &.{ | 4292 | .each = .{ .once = &.{ |
| 4328 | .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, | 4293 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4329 | .{ ._, ._, .@"and", .dst0d, .sa(.src0, .add_umax), ._, ._ }, | 4294 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 4330 | .{ ._, ._, .lzcnt, .dst0d, .dst0d, ._, ._ }, | 4295 | .{ ._, .vp_d, .maxs, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 4331 | .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ }, | 4296 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| | 4297 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 4298 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4332 | } }, | 4299 | } }, |
| 4333 | }, .{ | 4300 | }, .{ |
| 4334 | .required_features = .{ .false_deps_lzcnt_tzcnt, .lzcnt, null, null }, | 4301 | .required_features = .{ .avx, null, null, null }, |
| 4335 | .src_constraints = .{ .{ .exact_int = 16 }, .any }, | 4302 | .src_constraints = .{ |
| | 4303 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 4304 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 4305 | }, |
| 4336 | .patterns = &.{ | 4306 | .patterns = &.{ |
| 4337 | .{ .src = .{ .to_mut_gpr, .none } }, | 4307 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4338 | }, | 4308 | }, |
| 4339 | .dst_temps = .{.{ .ref = .src0 }}, | 4309 | .extra_temps = .{ |
| | 4310 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 4311 | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, |
| | 4312 | .unused, |
| | 4313 | .unused, |
| | 4314 | .unused, |
| | 4315 | .unused, |
| | 4316 | .unused, |
| | 4317 | .unused, |
| | 4318 | .unused, |
| | 4319 | }, |
| | 4320 | .dst_temps = .{.mem}, |
| 4340 | .clobbers = .{ .eflags = true }, | 4321 | .clobbers = .{ .eflags = true }, |
| 4341 | .each = .{ .once = &.{ | 4322 | .each = .{ .once = &.{ |
| 4342 | .{ ._, ._, .lzcnt, .dst0w, .src0w, ._, ._ }, | 4323 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 4324 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 4325 | .{ ._, .vp_d, .maxs, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 4326 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 4327 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 4328 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4343 | } }, | 4329 | } }, |
| 4344 | }, .{ | 4330 | }, .{ |
| 4345 | .required_features = .{ .lzcnt, null, null, null }, | 4331 | .required_features = .{ .sse4_1, null, null, null }, |
| 4346 | .src_constraints = .{ .{ .exact_int = 16 }, .any }, | 4332 | .src_constraints = .{ |
| | 4333 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 4334 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 4335 | }, |
| 4347 | .patterns = &.{ | 4336 | .patterns = &.{ |
| 4348 | .{ .src = .{ .mem, .none } }, | 4337 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4349 | .{ .src = .{ .to_gpr, .none } }, | | |
| 4350 | }, | 4338 | }, |
| 4351 | .dst_temps = .{.{ .rc = .general_purpose }}, | 4339 | .extra_temps = .{ |
| | 4340 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 4341 | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, |
| | 4342 | .unused, |
| | 4343 | .unused, |
| | 4344 | .unused, |
| | 4345 | .unused, |
| | 4346 | .unused, |
| | 4347 | .unused, |
| | 4348 | .unused, |
| | 4349 | }, |
| | 4350 | .dst_temps = .{.mem}, |
| 4352 | .clobbers = .{ .eflags = true }, | 4351 | .clobbers = .{ .eflags = true }, |
| 4353 | .each = .{ .once = &.{ | 4352 | .each = .{ .once = &.{ |
| 4354 | .{ ._, ._, .lzcnt, .dst0w, .src0w, ._, ._ }, | 4353 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 4354 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 4355 | .{ ._, .p_d, .maxs, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 4356 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 4357 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 4358 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4355 | } }, | 4359 | } }, |
| 4356 | }, .{ | 4360 | }, .{ |
| 4357 | .required_features = .{ .lzcnt, null, null, null }, | 4361 | .required_features = .{ .sse2, null, null, null }, |
| 4358 | .src_constraints = .{ .{ .signed_int = .word }, .any }, | 4362 | .src_constraints = .{ |
| | 4363 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 4364 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 4365 | }, |
| 4359 | .patterns = &.{ | 4366 | .patterns = &.{ |
| 4360 | .{ .src = .{ .to_mut_gpr, .none } }, | 4367 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4361 | }, | 4368 | }, |
| 4362 | .dst_temps = .{.{ .ref = .src0 }}, | 4369 | .extra_temps = .{ |
| | 4370 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 4371 | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, |
| | 4372 | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, |
| | 4373 | .unused, |
| | 4374 | .unused, |
| | 4375 | .unused, |
| | 4376 | .unused, |
| | 4377 | .unused, |
| | 4378 | .unused, |
| | 4379 | }, |
| | 4380 | .dst_temps = .{.mem}, |
| 4363 | .clobbers = .{ .eflags = true }, | 4381 | .clobbers = .{ .eflags = true }, |
| 4364 | .each = .{ .once = &.{ | 4382 | .each = .{ .once = &.{ |
| 4365 | .{ ._, ._, .@"and", .src0w, .sa(.src0, .add_umax), ._, ._ }, | 4383 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4366 | .{ ._, ._, .lzcnt, .dst0w, .src0w, ._, ._ }, | 4384 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 4367 | .{ ._, ._, .sub, .dst0b, .sia(16, .src0, .sub_bit_size), ._, ._ }, | 4385 | .{ ._, ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ }, |
| | 4386 | .{ ._, .p_d, .cmpgt, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 4387 | .{ ._, .p_, .@"and", .tmp2x, .tmp1x, ._, ._ }, |
| | 4388 | .{ ._, .p_, .andn, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 4389 | .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ }, |
| | 4390 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 4391 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 4392 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4368 | } }, | 4393 | } }, |
| 4369 | }, .{ | 4394 | }, .{ |
| 4370 | .required_features = .{ .false_deps_lzcnt_tzcnt, .lzcnt, null, null }, | 4395 | .required_features = .{ .cmov, null, null, null }, |
| 4371 | .src_constraints = .{ .{ .unsigned_int = .word }, .any }, | 4396 | .src_constraints = .{ |
| | 4397 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| | 4398 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| | 4399 | }, |
| 4372 | .patterns = &.{ | 4400 | .patterns = &.{ |
| 4373 | .{ .src = .{ .to_mut_gpr, .none } }, | 4401 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4374 | }, | 4402 | }, |
| 4375 | .dst_temps = .{.{ .ref = .src0 }}, | 4403 | .extra_temps = .{ |
| | 4404 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 4405 | .{ .type = .i32, .kind = .{ .rc = .general_purpose } }, |
| | 4406 | .unused, |
| | 4407 | .unused, |
| | 4408 | .unused, |
| | 4409 | .unused, |
| | 4410 | .unused, |
| | 4411 | .unused, |
| | 4412 | .unused, |
| | 4413 | }, |
| | 4414 | .dst_temps = .{.mem}, |
| 4376 | .clobbers = .{ .eflags = true }, | 4415 | .clobbers = .{ .eflags = true }, |
| 4377 | .each = .{ .once = &.{ | 4416 | .each = .{ .once = &.{ |
| 4378 | .{ ._, ._, .lzcnt, .dst0w, .src0w, ._, ._ }, | 4417 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4379 | .{ ._, ._, .sub, .dst0b, .sia(16, .src0, .sub_bit_size), ._, ._ }, | 4418 | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| | 4419 | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| | 4420 | .{ ._, ._l, .cmov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| | 4421 | .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ }, |
| | 4422 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| | 4423 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4380 | } }, | 4424 | } }, |
| 4381 | }, .{ | 4425 | }, .{ |
| 4382 | .required_features = .{ .lzcnt, null, null, null }, | 4426 | .src_constraints = .{ |
| 4383 | .src_constraints = .{ .{ .unsigned_int = .word }, .any }, | 4427 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| | 4428 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| | 4429 | }, |
| 4384 | .patterns = &.{ | 4430 | .patterns = &.{ |
| 4385 | .{ .src = .{ .mem, .none } }, | 4431 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4386 | .{ .src = .{ .to_gpr, .none } }, | | |
| 4387 | }, | 4432 | }, |
| 4388 | .dst_temps = .{.{ .rc = .general_purpose }}, | 4433 | .extra_temps = .{ |
| | 4434 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 4435 | .{ .type = .i32, .kind = .{ .rc = .general_purpose } }, |
| | 4436 | .unused, |
| | 4437 | .unused, |
| | 4438 | .unused, |
| | 4439 | .unused, |
| | 4440 | .unused, |
| | 4441 | .unused, |
| | 4442 | .unused, |
| | 4443 | }, |
| | 4444 | .dst_temps = .{.mem}, |
| 4389 | .clobbers = .{ .eflags = true }, | 4445 | .clobbers = .{ .eflags = true }, |
| 4390 | .each = .{ .once = &.{ | 4446 | .each = .{ .once = &.{ |
| 4391 | .{ ._, ._, .lzcnt, .dst0w, .src0w, ._, ._ }, | 4447 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4392 | .{ ._, ._, .sub, .dst0b, .sia(16, .src0, .sub_bit_size), ._, ._ }, | 4448 | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| | 4449 | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| | 4450 | .{ ._, ._nl, .j, .@"1f", ._, ._, ._ }, |
| | 4451 | .{ ._, ._, .mov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| | 4452 | .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ }, |
| | 4453 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| | 4454 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4393 | } }, | 4455 | } }, |
| 4394 | }, .{ | 4456 | }, .{ |
| 4395 | .required_features = .{ .false_deps_lzcnt_tzcnt, .lzcnt, null, null }, | 4457 | .required_features = .{ .avx, null, null, null }, |
| 4396 | .src_constraints = .{ .{ .exact_int = 32 }, .any }, | 4458 | .src_constraints = .{ |
| | 4459 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 4460 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 4461 | }, |
| 4397 | .patterns = &.{ | 4462 | .patterns = &.{ |
| 4398 | .{ .src = .{ .to_mut_gpr, .none } }, | 4463 | .{ .src = .{ .to_sse, .mem } }, |
| | 4464 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 4465 | .{ .src = .{ .to_sse, .to_sse } }, |
| 4399 | }, | 4466 | }, |
| 4400 | .dst_temps = .{.{ .ref = .src0 }}, | 4467 | .dst_temps = .{.{ .rc = .sse }}, |
| 4401 | .clobbers = .{ .eflags = true }, | | |
| 4402 | .each = .{ .once = &.{ | 4468 | .each = .{ .once = &.{ |
| 4403 | .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ }, | 4469 | .{ ._, .vp_d, .maxu, .dst0x, .src0x, .src1x, ._ }, |
| 4404 | } }, | 4470 | } }, |
| 4405 | }, .{ | 4471 | }, .{ |
| 4406 | .required_features = .{ .lzcnt, null, null, null }, | 4472 | .required_features = .{ .sse4_1, null, null, null }, |
| 4407 | .src_constraints = .{ .{ .exact_int = 32 }, .any }, | 4473 | .src_constraints = .{ |
| | 4474 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 4475 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 4476 | }, |
| 4408 | .patterns = &.{ | 4477 | .patterns = &.{ |
| 4409 | .{ .src = .{ .mem, .none } }, | 4478 | .{ .src = .{ .to_mut_sse, .mem } }, |
| 4410 | .{ .src = .{ .to_gpr, .none } }, | 4479 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 4480 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 4411 | }, | 4481 | }, |
| 4412 | .dst_temps = .{.{ .rc = .general_purpose }}, | 4482 | .dst_temps = .{.{ .ref = .src0 }}, |
| 4413 | .clobbers = .{ .eflags = true }, | | |
| 4414 | .each = .{ .once = &.{ | 4483 | .each = .{ .once = &.{ |
| 4415 | .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ }, | 4484 | .{ ._, .p_d, .maxu, .dst0x, .src1x, ._, ._ }, |
| 4416 | } }, | 4485 | } }, |
| 4417 | }, .{ | 4486 | }, .{ |
| 4418 | .required_features = .{ .lzcnt, null, null, null }, | 4487 | .required_features = .{ .sse2, null, null, null }, |
| 4419 | .src_constraints = .{ .{ .signed_int = .dword }, .any }, | 4488 | .src_constraints = .{ |
| | 4489 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 4490 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 4491 | }, |
| 4420 | .patterns = &.{ | 4492 | .patterns = &.{ |
| 4421 | .{ .src = .{ .to_mut_gpr, .none } }, | 4493 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 4494 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 4495 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 4422 | }, | 4496 | }, |
| 4423 | .dst_temps = .{.{ .ref = .src0 }}, | 4497 | .extra_temps = .{ |
| 4424 | .clobbers = .{ .eflags = true }, | 4498 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 4499 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| | 4500 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| | 4501 | .unused, |
| | 4502 | .unused, |
| | 4503 | .unused, |
| | 4504 | .unused, |
| | 4505 | .unused, |
| | 4506 | .unused, |
| | 4507 | }, |
| | 4508 | .dst_temps = .{.{ .rc = .sse }}, |
| 4425 | .each = .{ .once = &.{ | 4509 | .each = .{ .once = &.{ |
| 4426 | .{ ._, ._, .@"and", .src0d, .sa(.src0, .add_umax), ._, ._ }, | 4510 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 4427 | .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ }, | 4511 | .{ ._, ._dqa, .mov, .dst0x, .lea(.xword, .tmp0), ._, ._ }, |
| 4428 | .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ }, | 4512 | .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ }, |
| | 4513 | .{ ._, .p_, .xor, .dst0x, .src0x, ._, ._ }, |
| | 4514 | .{ ._, .p_, .xor, .tmp2x, .src1x, ._, ._ }, |
| | 4515 | .{ ._, .p_d, .cmpgt, .dst0x, .tmp2x, ._, ._ }, |
| | 4516 | .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ }, |
| | 4517 | .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ }, |
| | 4518 | .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ }, |
| 4429 | } }, | 4519 | } }, |
| 4430 | }, .{ | 4520 | }, .{ |
| 4431 | .required_features = .{ .false_deps_lzcnt_tzcnt, .lzcnt, null, null }, | 4521 | .required_features = .{ .avx2, null, null, null }, |
| 4432 | .src_constraints = .{ .{ .unsigned_int = .dword }, .any }, | 4522 | .src_constraints = .{ |
| | 4523 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, |
| | 4524 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, |
| | 4525 | }, |
| 4433 | .patterns = &.{ | 4526 | .patterns = &.{ |
| 4434 | .{ .src = .{ .to_mut_gpr, .none } }, | 4527 | .{ .src = .{ .to_sse, .mem } }, |
| | 4528 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 4529 | .{ .src = .{ .to_sse, .to_sse } }, |
| 4435 | }, | 4530 | }, |
| 4436 | .dst_temps = .{.{ .ref = .src0 }}, | 4531 | .dst_temps = .{.{ .rc = .sse }}, |
| 4437 | .clobbers = .{ .eflags = true }, | | |
| 4438 | .each = .{ .once = &.{ | 4532 | .each = .{ .once = &.{ |
| 4439 | .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ }, | 4533 | .{ ._, .vp_d, .maxu, .dst0y, .src0y, .src1y, ._ }, |
| 4440 | .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ }, | | |
| 4441 | } }, | 4534 | } }, |
| 4442 | }, .{ | 4535 | }, .{ |
| 4443 | .required_features = .{ .lzcnt, null, null, null }, | 4536 | .required_features = .{ .avx2, null, null, null }, |
| 4444 | .src_constraints = .{ .{ .unsigned_int = .dword }, .any }, | 4537 | .src_constraints = .{ |
| | 4538 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, |
| | 4539 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, |
| | 4540 | }, |
| 4445 | .patterns = &.{ | 4541 | .patterns = &.{ |
| 4446 | .{ .src = .{ .mem, .none } }, | 4542 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4447 | .{ .src = .{ .to_gpr, .none } }, | | |
| 4448 | }, | 4543 | }, |
| 4449 | .dst_temps = .{.{ .rc = .general_purpose }}, | 4544 | .extra_temps = .{ |
| 4450 | .clobbers = .{ .eflags = true }, | 4545 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4451 | .each = .{ .once = &.{ | 4546 | .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } }, |
| 4452 | .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ }, | 4547 | .unused, |
| 4453 | .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ }, | 4548 | .unused, |
| 4454 | } }, | 4549 | .unused, |
| 4455 | }, .{ | 4550 | .unused, |
| 4456 | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, | 4551 | .unused, |
| 4457 | .src_constraints = .{ .{ .exact_int = 64 }, .any }, | 4552 | .unused, |
| 4458 | .patterns = &.{ | 4553 | .unused, |
| 4459 | .{ .src = .{ .to_mut_gpr, .none } }, | | |
| 4460 | }, | 4554 | }, |
| 4461 | .dst_temps = .{.{ .ref = .src0 }}, | 4555 | .dst_temps = .{.mem}, |
| 4462 | .clobbers = .{ .eflags = true }, | 4556 | .clobbers = .{ .eflags = true }, |
| 4463 | .each = .{ .once = &.{ | 4557 | .each = .{ .once = &.{ |
| 4464 | .{ ._, ._, .lzcnt, .dst0q, .src0q, ._, ._ }, | 4558 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 4559 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 4560 | .{ ._, .vp_d, .maxu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| | 4561 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| | 4562 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 4563 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4465 | } }, | 4564 | } }, |
| 4466 | }, .{ | 4565 | }, .{ |
| 4467 | .required_features = .{ .@"64bit", .lzcnt, null, null }, | 4566 | .required_features = .{ .avx, null, null, null }, |
| 4468 | .src_constraints = .{ .{ .exact_int = 64 }, .any }, | 4567 | .src_constraints = .{ |
| 4469 | .patterns = &.{ | 4568 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 4470 | .{ .src = .{ .mem, .none } }, | 4569 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 4471 | .{ .src = .{ .to_gpr, .none } }, | | |
| 4472 | }, | 4570 | }, |
| 4473 | .dst_temps = .{.{ .rc = .general_purpose }}, | | |
| 4474 | .clobbers = .{ .eflags = true }, | | |
| 4475 | .each = .{ .once = &.{ | | |
| 4476 | .{ ._, ._, .lzcnt, .dst0q, .src0q, ._, ._ }, | | |
| 4477 | } }, | | |
| 4478 | }, .{ | | |
| 4479 | .required_features = .{ .@"64bit", .lzcnt, null, null }, | | |
| 4480 | .src_constraints = .{ .{ .signed_int = .qword }, .any }, | | |
| 4481 | .patterns = &.{ | 4571 | .patterns = &.{ |
| 4482 | .{ .src = .{ .mem, .none } }, | 4572 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4483 | .{ .src = .{ .to_gpr, .none } }, | | |
| 4484 | }, | 4573 | }, |
| 4485 | .dst_temps = .{.{ .rc = .general_purpose }}, | 4574 | .extra_temps = .{ |
| 4486 | .clobbers = .{ .eflags = true }, | 4575 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4487 | .each = .{ .once = &.{ | 4576 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 4488 | .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ }, | 4577 | .unused, |
| 4489 | .{ ._, ._, .@"and", .dst0q, .src0q, ._, ._ }, | 4578 | .unused, |
| 4490 | .{ ._, ._, .lzcnt, .dst0q, .dst0q, ._, ._ }, | 4579 | .unused, |
| 4491 | .{ ._, ._, .sub, .dst0b, .sia(64, .src0, .sub_bit_size), ._, ._ }, | 4580 | .unused, |
| 4492 | } }, | 4581 | .unused, |
| 4493 | }, .{ | 4582 | .unused, |
| 4494 | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, | 4583 | .unused, |
| 4495 | .src_constraints = .{ .{ .unsigned_int = .qword }, .any }, | | |
| 4496 | .patterns = &.{ | | |
| 4497 | .{ .src = .{ .to_mut_gpr, .none } }, | | |
| 4498 | }, | 4584 | }, |
| 4499 | .dst_temps = .{.{ .ref = .src0 }}, | 4585 | .dst_temps = .{.mem}, |
| 4500 | .clobbers = .{ .eflags = true }, | 4586 | .clobbers = .{ .eflags = true }, |
| 4501 | .each = .{ .once = &.{ | 4587 | .each = .{ .once = &.{ |
| 4502 | .{ ._, ._, .lzcnt, .dst0q, .src0q, ._, ._ }, | 4588 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4503 | .{ ._, ._, .sub, .dst0b, .sia(64, .src0, .sub_bit_size), ._, ._ }, | 4589 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 4590 | .{ ._, .vp_d, .maxu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 4591 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 4592 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 4593 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4504 | } }, | 4594 | } }, |
| 4505 | }, .{ | 4595 | }, .{ |
| 4506 | .required_features = .{ .@"64bit", .lzcnt, null, null }, | 4596 | .required_features = .{ .sse4_1, null, null, null }, |
| 4507 | .src_constraints = .{ .{ .unsigned_int = .qword }, .any }, | 4597 | .src_constraints = .{ |
| 4508 | .patterns = &.{ | 4598 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 4509 | .{ .src = .{ .mem, .none } }, | 4599 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 4510 | .{ .src = .{ .to_gpr, .none } }, | | |
| 4511 | }, | 4600 | }, |
| 4512 | .dst_temps = .{.{ .rc = .general_purpose }}, | | |
| 4513 | .clobbers = .{ .eflags = true }, | | |
| 4514 | .each = .{ .once = &.{ | | |
| 4515 | .{ ._, ._, .lzcnt, .dst0q, .src0q, ._, ._ }, | | |
| 4516 | .{ ._, ._, .sub, .dst0b, .sia(64, .src0, .sub_bit_size), ._, ._ }, | | |
| 4517 | } }, | | |
| 4518 | }, .{ | | |
| 4519 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, | | |
| 4520 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .byte }, .any }, | | |
| 4521 | .patterns = &.{ | 4601 | .patterns = &.{ |
| 4522 | .{ .src = .{ .mem, .none } }, | 4602 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4523 | .{ .src = .{ .to_gpr, .none } }, | | |
| 4524 | }, | 4603 | }, |
| 4525 | .extra_temps = .{ | 4604 | .extra_temps = .{ |
| 4526 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4605 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 4606 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| | 4607 | .unused, |
| | 4608 | .unused, |
| 4527 | .unused, | 4609 | .unused, |
| 4528 | .unused, | 4610 | .unused, |
| 4529 | .unused, | 4611 | .unused, |
| 4530 | .unused, | 4612 | .unused, |
| 4531 | .unused, | 4613 | .unused, |
| 4532 | }, | 4614 | }, |
| 4533 | .dst_temps = .{.{ .rc = .general_purpose }}, | 4615 | .dst_temps = .{.mem}, |
| 4534 | .clobbers = .{ .eflags = true }, | 4616 | .clobbers = .{ .eflags = true }, |
| 4535 | .each = .{ .once = &.{ | 4617 | .each = .{ .once = &.{ |
| 4536 | .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, | 4618 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4537 | .{ ._, ._r, .bs, .dst0d, .dst0d, ._, ._ }, | 4619 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 4538 | .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, | 4620 | .{ ._, .p_d, .maxu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 4539 | .{ ._, ._z, .cmov, .dst0d, .tmp0d, ._, ._ }, | 4621 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 4540 | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 4622 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 4623 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4541 | } }, | 4624 | } }, |
| 4542 | }, .{ | 4625 | }, .{ |
| 4543 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, | 4626 | .required_features = .{ .sse2, null, null, null }, |
| 4544 | .src_constraints = .{ .{ .signed_po2_int = .byte }, .any }, | 4627 | .src_constraints = .{ |
| | 4628 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 4629 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 4630 | }, |
| 4545 | .patterns = &.{ | 4631 | .patterns = &.{ |
| 4546 | .{ .src = .{ .mem, .none } }, | 4632 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4547 | .{ .src = .{ .to_gpr, .none } }, | | |
| 4548 | }, | 4633 | }, |
| 4549 | .extra_temps = .{ | 4634 | .extra_temps = .{ |
| 4550 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4635 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4551 | .unused, | 4636 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| 4552 | .unused, | 4637 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 4553 | .unused, | 4638 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| | 4639 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| | 4640 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| | 4641 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 4554 | .unused, | 4642 | .unused, |
| 4555 | .unused, | 4643 | .unused, |
| 4556 | }, | 4644 | }, |
| 4557 | .dst_temps = .{.{ .rc = .general_purpose }}, | 4645 | .dst_temps = .{.mem}, |
| 4558 | .clobbers = .{ .eflags = true }, | 4646 | .clobbers = .{ .eflags = true }, |
| 4559 | .each = .{ .once = &.{ | 4647 | .each = .{ .once = &.{ |
| 4560 | .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, | 4648 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 4561 | .{ ._, ._, .@"and", .dst0d, .sa(.src0, .add_umax), ._, ._ }, | 4649 | .{ ._, ._dqa, .mov, .tmp2x, .lea(.xword, .tmp0), ._, ._ }, |
| 4562 | .{ ._, ._r, .bs, .dst0d, .dst0d, ._, ._ }, | 4650 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4563 | .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, | 4651 | .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 4564 | .{ ._, ._z, .cmov, .dst0d, .tmp0d, ._, ._ }, | 4652 | .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 4565 | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 4653 | .{ ._, ._dqa, .mov, .tmp5x, .tmp3x, ._, ._ }, |
| | 4654 | .{ ._, ._dqa, .mov, .tmp6x, .tmp4x, ._, ._ }, |
| | 4655 | .{ ._, .p_, .xor, .tmp5x, .tmp2x, ._, ._ }, |
| | 4656 | .{ ._, .p_, .xor, .tmp6x, .tmp2x, ._, ._ }, |
| | 4657 | .{ ._, .p_d, .cmpgt, .tmp5x, .tmp6x, ._, ._ }, |
| | 4658 | .{ ._, .p_, .@"and", .tmp3x, .tmp5x, ._, ._ }, |
| | 4659 | .{ ._, .p_, .andn, .tmp5x, .tmp4x, ._, ._ }, |
| | 4660 | .{ ._, .p_, .@"or", .tmp3x, .tmp5x, ._, ._ }, |
| | 4661 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, |
| | 4662 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 4663 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4566 | } }, | 4664 | } }, |
| 4567 | }, .{ | 4665 | }, .{ |
| 4568 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, | 4666 | .required_features = .{ .cmov, null, null, null }, |
| 4569 | .src_constraints = .{ .{ .signed_int = .byte }, .any }, | 4667 | .src_constraints = .{ |
| | 4668 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| | 4669 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| | 4670 | }, |
| 4570 | .patterns = &.{ | 4671 | .patterns = &.{ |
| 4571 | .{ .src = .{ .mem, .none } }, | 4672 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4572 | .{ .src = .{ .to_gpr, .none } }, | | |
| 4573 | }, | 4673 | }, |
| 4574 | .extra_temps = .{ | 4674 | .extra_temps = .{ |
| | 4675 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4575 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4676 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 4576 | .unused, | 4677 | .unused, |
| 4577 | .unused, | 4678 | .unused, |
| 4578 | .unused, | 4679 | .unused, |
| 4579 | .unused, | 4680 | .unused, |
| 4580 | .unused, | 4681 | .unused, |
| | 4682 | .unused, |
| | 4683 | .unused, |
| 4581 | }, | 4684 | }, |
| 4582 | .dst_temps = .{.{ .rc = .general_purpose }}, | 4685 | .dst_temps = .{.mem}, |
| 4583 | .clobbers = .{ .eflags = true }, | 4686 | .clobbers = .{ .eflags = true }, |
| 4584 | .each = .{ .once = &.{ | 4687 | .each = .{ .once = &.{ |
| 4585 | .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ }, | 4688 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4586 | .{ ._, ._, .@"and", .tmp0d, .sa(.src0, .add_umax), ._, ._ }, | 4689 | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 4587 | .{ ._, ._r, .bs, .tmp0d, .tmp0d, ._, ._ }, | 4690 | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 4588 | .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ }, | 4691 | .{ ._, ._b, .cmov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 4589 | .{ ._, ._z, .cmov, .tmp0d, .dst0d, ._, ._ }, | 4692 | .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ }, |
| 4590 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 4693 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| 4591 | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, | 4694 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4592 | } }, | 4695 | } }, |
| 4593 | }, .{ | 4696 | }, .{ |
| 4594 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, | 4697 | .src_constraints = .{ |
| 4595 | .src_constraints = .{ .{ .unsigned_int = .byte }, .any }, | 4698 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| | 4699 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| | 4700 | }, |
| 4596 | .patterns = &.{ | 4701 | .patterns = &.{ |
| 4597 | .{ .src = .{ .mem, .none } }, | 4702 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4598 | .{ .src = .{ .to_gpr, .none } }, | | |
| 4599 | }, | 4703 | }, |
| 4600 | .extra_temps = .{ | 4704 | .extra_temps = .{ |
| | 4705 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4601 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4706 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 4602 | .unused, | 4707 | .unused, |
| 4603 | .unused, | 4708 | .unused, |
| 4604 | .unused, | 4709 | .unused, |
| 4605 | .unused, | 4710 | .unused, |
| 4606 | .unused, | 4711 | .unused, |
| | 4712 | .unused, |
| | 4713 | .unused, |
| 4607 | }, | 4714 | }, |
| 4608 | .dst_temps = .{.{ .rc = .general_purpose }}, | 4715 | .dst_temps = .{.mem}, |
| 4609 | .clobbers = .{ .eflags = true }, | 4716 | .clobbers = .{ .eflags = true }, |
| 4610 | .each = .{ .once = &.{ | 4717 | .each = .{ .once = &.{ |
| 4611 | .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ }, | 4718 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4612 | .{ ._, ._r, .bs, .tmp0d, .tmp0d, ._, ._ }, | 4719 | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 4613 | .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ }, | 4720 | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 4614 | .{ ._, ._z, .cmov, .tmp0d, .dst0d, ._, ._ }, | 4721 | .{ ._, ._nb, .j, .@"1f", ._, ._, ._ }, |
| 4615 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 4722 | .{ ._, ._, .mov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 4616 | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, | 4723 | .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ }, |
| | 4724 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| | 4725 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4617 | } }, | 4726 | } }, |
| 4618 | }, .{ | 4727 | }, .{ |
| 4619 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, | 4728 | .required_features = .{ .avx, null, null, null }, |
| 4620 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .byte }, .any }, | 4729 | .src_constraints = .{ |
| 4621 | .patterns = &.{ | 4730 | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| 4622 | .{ .src = .{ .mem, .none } }, | 4731 | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| 4623 | .{ .src = .{ .to_gpr, .none } }, | | |
| 4624 | }, | 4732 | }, |
| 4625 | .dst_temps = .{.{ .rc = .general_purpose }}, | | |
| 4626 | .clobbers = .{ .eflags = true }, | | |
| 4627 | .each = .{ .once = &.{ | | |
| 4628 | .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, | | |
| 4629 | .{ ._, ._r, .bs, .dst0d, .dst0d, ._, ._ }, | | |
| 4630 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, | | |
| 4631 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, | | |
| 4632 | .{ .@"0:", ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | | |
| 4633 | } }, | | |
| 4634 | }, .{ | | |
| 4635 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, | | |
| 4636 | .src_constraints = .{ .{ .signed_po2_int = .byte }, .any }, | | |
| 4637 | .patterns = &.{ | 4733 | .patterns = &.{ |
| 4638 | .{ .src = .{ .mem, .none } }, | 4734 | .{ .src = .{ .to_sse, .to_sse } }, |
| 4639 | .{ .src = .{ .to_gpr, .none } }, | | |
| 4640 | }, | 4735 | }, |
| 4641 | .dst_temps = .{.{ .rc = .general_purpose }}, | 4736 | .dst_temps = .{.{ .rc = .sse }}, |
| 4642 | .clobbers = .{ .eflags = true }, | | |
| 4643 | .each = .{ .once = &.{ | 4737 | .each = .{ .once = &.{ |
| 4644 | .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, | 4738 | .{ ._, .vp_q, .cmpgt, .dst0x, .src1x, .src0x, ._ }, |
| 4645 | .{ ._, ._, .@"and", .dst0d, .sa(.src0, .add_umax), ._, ._ }, | 4739 | .{ ._, .vp_b, .blendv, .dst0x, .src0x, .src1x, .dst0x }, |
| 4646 | .{ ._, ._r, .bs, .dst0d, .dst0d, ._, ._ }, | | |
| 4647 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, | | |
| 4648 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, | | |
| 4649 | .{ .@"0:", ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | | |
| 4650 | } }, | 4740 | } }, |
| 4651 | }, .{ | 4741 | }, .{ |
| 4652 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, | 4742 | .required_features = .{ .sse4_2, null, null, null }, |
| 4653 | .src_constraints = .{ .{ .signed_int = .byte }, .any }, | 4743 | .src_constraints = .{ |
| | 4744 | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| | 4745 | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| | 4746 | }, |
| 4654 | .patterns = &.{ | 4747 | .patterns = &.{ |
| 4655 | .{ .src = .{ .mem, .none } }, | 4748 | .{ .src = .{ .to_mut_sse, .mem } }, |
| 4656 | .{ .src = .{ .to_gpr, .none } }, | 4749 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 4750 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 4657 | }, | 4751 | }, |
| 4658 | .extra_temps = .{ | 4752 | .extra_temps = .{ |
| 4659 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4753 | .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } }, |
| | 4754 | .unused, |
| | 4755 | .unused, |
| | 4756 | .unused, |
| 4660 | .unused, | 4757 | .unused, |
| 4661 | .unused, | 4758 | .unused, |
| 4662 | .unused, | 4759 | .unused, |
| 4663 | .unused, | 4760 | .unused, |
| 4664 | .unused, | 4761 | .unused, |
| 4665 | }, | 4762 | }, |
| 4666 | .dst_temps = .{.{ .rc = .general_purpose }}, | 4763 | .dst_temps = .{.{ .ref = .src0 }}, |
| 4667 | .clobbers = .{ .eflags = true }, | | |
| 4668 | .each = .{ .once = &.{ | 4764 | .each = .{ .once = &.{ |
| 4669 | .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ }, | 4765 | .{ ._, ._dqa, .mov, .tmp0x, .src1x, ._, ._ }, |
| 4670 | .{ ._, ._, .@"and", .tmp0d, .sa(.src0, .add_umax), ._, ._ }, | 4766 | .{ ._, .p_q, .cmpgt, .tmp0x, .src0x, ._, ._ }, |
| 4671 | .{ ._, ._r, .bs, .tmp0d, .tmp0d, ._, ._ }, | 4767 | .{ ._, .p_b, .blendv, .dst0x, .src1x, .tmp0x, ._ }, |
| 4672 | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, | | |
| 4673 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | | |
| 4674 | .{ ._, ._c, .st, ._, ._, ._, ._ }, | | |
| 4675 | .{ ._, ._, .sbb, .dst0b, .tmp0b, ._, ._ }, | | |
| 4676 | } }, | 4768 | } }, |
| 4677 | }, .{ | 4769 | }, .{ |
| 4678 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, | 4770 | .required_features = .{ .avx2, null, null, null }, |
| 4679 | .src_constraints = .{ .{ .unsigned_int = .byte }, .any }, | 4771 | .src_constraints = .{ |
| | 4772 | .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }, |
| | 4773 | .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }, |
| | 4774 | }, |
| 4680 | .patterns = &.{ | 4775 | .patterns = &.{ |
| 4681 | .{ .src = .{ .mem, .none } }, | 4776 | .{ .src = .{ .to_sse, .to_sse } }, |
| 4682 | .{ .src = .{ .to_gpr, .none } }, | 4777 | }, |
| | 4778 | .dst_temps = .{.{ .rc = .sse }}, |
| | 4779 | .each = .{ .once = &.{ |
| | 4780 | .{ ._, .vp_q, .cmpgt, .dst0y, .src1y, .src0y, ._ }, |
| | 4781 | .{ ._, .vp_b, .blendv, .dst0y, .src0y, .src1y, .dst0y }, |
| | 4782 | } }, |
| | 4783 | }, .{ |
| | 4784 | .required_features = .{ .avx2, null, null, null }, |
| | 4785 | .src_constraints = .{ |
| | 4786 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } }, |
| | 4787 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } }, |
| | 4788 | }, |
| | 4789 | .patterns = &.{ |
| | 4790 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4683 | }, | 4791 | }, |
| 4684 | .extra_temps = .{ | 4792 | .extra_temps = .{ |
| 4685 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4793 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 4794 | .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } }, |
| | 4795 | .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } }, |
| | 4796 | .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } }, |
| 4686 | .unused, | 4797 | .unused, |
| 4687 | .unused, | 4798 | .unused, |
| 4688 | .unused, | 4799 | .unused, |
| 4689 | .unused, | 4800 | .unused, |
| 4690 | .unused, | 4801 | .unused, |
| 4691 | }, | 4802 | }, |
| 4692 | .dst_temps = .{.{ .rc = .general_purpose }}, | 4803 | .dst_temps = .{.mem}, |
| 4693 | .clobbers = .{ .eflags = true }, | 4804 | .clobbers = .{ .eflags = true }, |
| 4694 | .each = .{ .once = &.{ | 4805 | .each = .{ .once = &.{ |
| 4695 | .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ }, | 4806 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4696 | .{ ._, ._r, .bs, .tmp0d, .tmp0d, ._, ._ }, | 4807 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 4697 | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, | 4808 | .{ ._, .v_dqa, .mov, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, |
| 4698 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | 4809 | .{ ._, .vp_q, .cmpgt, .tmp3y, .tmp2y, .tmp1y, ._ }, |
| 4699 | .{ ._, ._c, .st, ._, ._, ._, ._ }, | 4810 | .{ ._, .vp_b, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y }, |
| 4700 | .{ ._, ._, .sbb, .dst0b, .tmp0b, ._, ._ }, | 4811 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| | 4812 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 4813 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4701 | } }, | 4814 | } }, |
| 4702 | }, .{ | 4815 | }, .{ |
| 4703 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .byte }, .any }, | 4816 | .required_features = .{ .avx, null, null, null }, |
| | 4817 | .src_constraints = .{ |
| | 4818 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| | 4819 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| | 4820 | }, |
| 4704 | .patterns = &.{ | 4821 | .patterns = &.{ |
| 4705 | .{ .src = .{ .mem, .none } }, | 4822 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4706 | .{ .src = .{ .to_gpr, .none } }, | | |
| 4707 | }, | 4823 | }, |
| 4708 | .extra_temps = .{ | 4824 | .extra_temps = .{ |
| 4709 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4825 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 4826 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| | 4827 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| | 4828 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| 4710 | .unused, | 4829 | .unused, |
| 4711 | .unused, | 4830 | .unused, |
| 4712 | .unused, | 4831 | .unused, |
| 4713 | .unused, | 4832 | .unused, |
| 4714 | .unused, | 4833 | .unused, |
| 4715 | }, | 4834 | }, |
| 4716 | .dst_temps = .{.{ .rc = .general_purpose }}, | 4835 | .dst_temps = .{.mem}, |
| 4717 | .clobbers = .{ .eflags = true }, | 4836 | .clobbers = .{ .eflags = true }, |
| 4718 | .each = .{ .once = &.{ | 4837 | .each = .{ .once = &.{ |
| 4719 | .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ }, | 4838 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4720 | .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, | 4839 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 4721 | .{ ._, ._r, .bs, .dst0d, .tmp0d, ._, ._ }, | 4840 | .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 4722 | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 4841 | .{ ._, .vp_q, .cmpgt, .tmp3x, .tmp2x, .tmp1x, ._ }, |
| | 4842 | .{ ._, .vp_b, .blendv, .tmp1x, .tmp1x, .tmp2x, .tmp3x }, |
| | 4843 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 4844 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 4845 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4723 | } }, | 4846 | } }, |
| 4724 | }, .{ | 4847 | }, .{ |
| 4725 | .src_constraints = .{ .{ .signed_po2_int = .byte }, .any }, | 4848 | .required_features = .{ .sse4_2, null, null, null }, |
| | 4849 | .src_constraints = .{ |
| | 4850 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| | 4851 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| | 4852 | }, |
| 4726 | .patterns = &.{ | 4853 | .patterns = &.{ |
| 4727 | .{ .src = .{ .mem, .none } }, | 4854 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4728 | .{ .src = .{ .to_gpr, .none } }, | | |
| 4729 | }, | 4855 | }, |
| 4730 | .extra_temps = .{ | 4856 | .extra_temps = .{ |
| 4731 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4857 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 4858 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| | 4859 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| | 4860 | .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } }, |
| 4732 | .unused, | 4861 | .unused, |
| 4733 | .unused, | 4862 | .unused, |
| 4734 | .unused, | 4863 | .unused, |
| 4735 | .unused, | 4864 | .unused, |
| 4736 | .unused, | 4865 | .unused, |
| 4737 | }, | 4866 | }, |
| 4738 | .dst_temps = .{.{ .rc = .general_purpose }}, | 4867 | .dst_temps = .{.mem}, |
| 4739 | .clobbers = .{ .eflags = true }, | 4868 | .clobbers = .{ .eflags = true }, |
| 4740 | .each = .{ .once = &.{ | 4869 | .each = .{ .once = &.{ |
| 4741 | .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ }, | 4870 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4742 | .{ ._, ._, .@"and", .tmp0d, .sa(.src0, .add_umax), ._, ._ }, | 4871 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 4743 | .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, | 4872 | .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 4744 | .{ ._, ._r, .bs, .dst0d, .tmp0d, ._, ._ }, | 4873 | .{ ._, ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ }, |
| 4745 | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 4874 | .{ ._, .p_q, .cmpgt, .tmp3x, .tmp1x, ._, ._ }, |
| | 4875 | .{ ._, .p_b, .blendv, .tmp1x, .tmp2x, .tmp3x, ._ }, |
| | 4876 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 4877 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 4878 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4746 | } }, | 4879 | } }, |
| 4747 | }, .{ | 4880 | }, .{ |
| 4748 | .src_constraints = .{ .{ .signed_int = .byte }, .any }, | 4881 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| | 4882 | .src_constraints = .{ |
| | 4883 | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, |
| | 4884 | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, |
| | 4885 | }, |
| 4749 | .patterns = &.{ | 4886 | .patterns = &.{ |
| 4750 | .{ .src = .{ .mem, .none } }, | 4887 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4751 | .{ .src = .{ .to_gpr, .none } }, | | |
| 4752 | }, | 4888 | }, |
| 4753 | .extra_temps = .{ | 4889 | .extra_temps = .{ |
| 4754 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4890 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 4891 | .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, |
| | 4892 | .unused, |
| | 4893 | .unused, |
| 4755 | .unused, | 4894 | .unused, |
| 4756 | .unused, | 4895 | .unused, |
| 4757 | .unused, | 4896 | .unused, |
| 4758 | .unused, | 4897 | .unused, |
| 4759 | .unused, | 4898 | .unused, |
| 4760 | }, | 4899 | }, |
| 4761 | .dst_temps = .{.{ .rc = .general_purpose }}, | 4900 | .dst_temps = .{.mem}, |
| 4762 | .clobbers = .{ .eflags = true }, | 4901 | .clobbers = .{ .eflags = true }, |
| 4763 | .each = .{ .once = &.{ | 4902 | .each = .{ .once = &.{ |
| 4764 | .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, | 4903 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4765 | .{ ._, ._, .@"and", .dst0d, .sa(.src0, .add_umax), ._, ._ }, | 4904 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 4766 | .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ }, | 4905 | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 4767 | .{ ._, ._r, .bs, .tmp0d, .dst0d, ._, ._ }, | 4906 | .{ ._, ._l, .cmov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 4768 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 4907 | .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| 4769 | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, | 4908 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 4909 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4770 | } }, | 4910 | } }, |
| 4771 | }, .{ | 4911 | }, .{ |
| 4772 | .src_constraints = .{ .{ .unsigned_int = .byte }, .any }, | 4912 | .required_features = .{ .@"64bit", null, null, null }, |
| | 4913 | .src_constraints = .{ |
| | 4914 | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, |
| | 4915 | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, |
| | 4916 | }, |
| 4773 | .patterns = &.{ | 4917 | .patterns = &.{ |
| 4774 | .{ .src = .{ .mem, .none } }, | 4918 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4775 | .{ .src = .{ .to_gpr, .none } }, | | |
| 4776 | }, | 4919 | }, |
| 4777 | .extra_temps = .{ | 4920 | .extra_temps = .{ |
| 4778 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4921 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 4922 | .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, |
| | 4923 | .unused, |
| | 4924 | .unused, |
| 4779 | .unused, | 4925 | .unused, |
| 4780 | .unused, | 4926 | .unused, |
| 4781 | .unused, | 4927 | .unused, |
| 4782 | .unused, | 4928 | .unused, |
| 4783 | .unused, | 4929 | .unused, |
| 4784 | }, | 4930 | }, |
| 4785 | .dst_temps = .{.{ .rc = .general_purpose }}, | 4931 | .dst_temps = .{.mem}, |
| 4786 | .clobbers = .{ .eflags = true }, | 4932 | .clobbers = .{ .eflags = true }, |
| 4787 | .each = .{ .once = &.{ | 4933 | .each = .{ .once = &.{ |
| 4788 | .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, | 4934 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4789 | .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ }, | 4935 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 4790 | .{ ._, ._r, .bs, .tmp0d, .dst0d, ._, ._ }, | 4936 | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 4791 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 4937 | .{ ._, ._nl, .j, .@"1f", ._, ._, ._ }, |
| 4792 | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, | 4938 | .{ ._, ._, .mov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 4939 | .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| | 4940 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 4941 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4793 | } }, | 4942 | } }, |
| 4794 | }, .{ | 4943 | }, .{ |
| 4795 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, | 4944 | .required_features = .{ .avx, null, null, null }, |
| 4796 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .word }, .any }, | 4945 | .src_constraints = .{ |
| | 4946 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 4947 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 4948 | }, |
| 4797 | .patterns = &.{ | 4949 | .patterns = &.{ |
| 4798 | .{ .src = .{ .to_mut_gpr, .none } }, | 4950 | .{ .src = .{ .to_sse, .mem } }, |
| | 4951 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 4952 | .{ .src = .{ .to_sse, .to_sse } }, |
| 4799 | }, | 4953 | }, |
| 4800 | .dst_temps = .{.{ .rc = .general_purpose }}, | 4954 | .extra_temps = .{ |
| 4801 | .clobbers = .{ .eflags = true }, | 4955 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 4956 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| | 4957 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 4958 | .unused, |
| | 4959 | .unused, |
| | 4960 | .unused, |
| | 4961 | .unused, |
| | 4962 | .unused, |
| | 4963 | .unused, |
| | 4964 | }, |
| | 4965 | .dst_temps = .{.{ .rc = .sse }}, |
| 4802 | .each = .{ .once = &.{ | 4966 | .each = .{ .once = &.{ |
| 4803 | .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ }, | 4967 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 4804 | .{ ._, ._, .mov, .dst0w, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, | 4968 | .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, |
| 4805 | .{ ._, ._nz, .cmov, .dst0w, .src0w, ._, ._ }, | 4969 | .{ ._, .vp_, .xor, .dst0x, .tmp2x, .src0x, ._ }, |
| 4806 | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 4970 | .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .src1x, ._ }, |
| | 4971 | .{ ._, .vp_q, .cmpgt, .dst0x, .tmp2x, .dst0x, ._ }, |
| | 4972 | .{ ._, .vp_b, .blendv, .dst0x, .src0x, .src1x, .dst0x }, |
| 4807 | } }, | 4973 | } }, |
| 4808 | }, .{ | 4974 | }, .{ |
| 4809 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, | 4975 | .required_features = .{ .sse4_2, null, null, null }, |
| 4810 | .src_constraints = .{ .{ .signed_int = .word }, .any }, | 4976 | .src_constraints = .{ |
| | 4977 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 4978 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 4979 | }, |
| 4811 | .patterns = &.{ | 4980 | .patterns = &.{ |
| 4812 | .{ .src = .{ .to_mut_gpr, .none } }, | 4981 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 4982 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 4983 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 4813 | }, | 4984 | }, |
| 4814 | .dst_temps = .{.{ .rc = .general_purpose }}, | 4985 | .extra_temps = .{ |
| 4815 | .clobbers = .{ .eflags = true }, | 4986 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 4987 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| | 4988 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 4989 | .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } }, |
| | 4990 | .unused, |
| | 4991 | .unused, |
| | 4992 | .unused, |
| | 4993 | .unused, |
| | 4994 | .unused, |
| | 4995 | }, |
| | 4996 | .dst_temps = .{.{ .ref = .src0 }}, |
| 4816 | .each = .{ .once = &.{ | 4997 | .each = .{ .once = &.{ |
| 4817 | .{ ._, ._, .@"and", .src0w, .sa(.src0, .add_umax), ._, ._ }, | 4998 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 4818 | .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ }, | 4999 | .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, |
| 4819 | .{ ._, ._, .mov, .dst0w, .si(0xff), ._, ._ }, | 5000 | .{ ._, ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ }, |
| 4820 | .{ ._, ._z, .cmov, .src0w, .dst0w, ._, ._ }, | 5001 | .{ ._, .p_, .xor, .tmp2x, .src0x, ._, ._ }, |
| 4821 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 5002 | .{ ._, .p_, .xor, .tmp3x, .src1x, ._, ._ }, |
| 4822 | .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ }, | 5003 | .{ ._, .p_q, .cmpgt, .tmp3x, .tmp2x, ._, ._ }, |
| | 5004 | .{ ._, .p_b, .blendv, .dst0x, .src1x, .tmp3x, ._ }, |
| 4823 | } }, | 5005 | } }, |
| 4824 | }, .{ | 5006 | }, .{ |
| 4825 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, | 5007 | .required_features = .{ .avx2, null, null, null }, |
| 4826 | .src_constraints = .{ .{ .unsigned_int = .word }, .any }, | 5008 | .src_constraints = .{ |
| | 5009 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, |
| | 5010 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, |
| | 5011 | }, |
| 4827 | .patterns = &.{ | 5012 | .patterns = &.{ |
| 4828 | .{ .src = .{ .to_mut_gpr, .none } }, | 5013 | .{ .src = .{ .to_sse, .mem } }, |
| | 5014 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 5015 | .{ .src = .{ .to_sse, .to_sse } }, |
| 4829 | }, | 5016 | }, |
| 4830 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5017 | .extra_temps = .{ |
| 4831 | .clobbers = .{ .eflags = true }, | 5018 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 5019 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| | 5020 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| | 5021 | .unused, |
| | 5022 | .unused, |
| | 5023 | .unused, |
| | 5024 | .unused, |
| | 5025 | .unused, |
| | 5026 | .unused, |
| | 5027 | }, |
| | 5028 | .dst_temps = .{.{ .rc = .sse }}, |
| 4832 | .each = .{ .once = &.{ | 5029 | .each = .{ .once = &.{ |
| 4833 | .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ }, | 5030 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 4834 | .{ ._, ._, .mov, .dst0w, .si(0xff), ._, ._ }, | 5031 | .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ }, |
| 4835 | .{ ._, ._z, .cmov, .src0w, .dst0w, ._, ._ }, | 5032 | .{ ._, .vp_, .xor, .dst0y, .tmp2y, .src0y, ._ }, |
| 4836 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 5033 | .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .src1y, ._ }, |
| 4837 | .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ }, | 5034 | .{ ._, .vp_q, .cmpgt, .dst0y, .tmp2y, .dst0y, ._ }, |
| | 5035 | .{ ._, .vp_b, .blendv, .dst0y, .src0y, .src1y, .dst0y }, |
| 4838 | } }, | 5036 | } }, |
| 4839 | }, .{ | 5037 | }, .{ |
| 4840 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, | 5038 | .required_features = .{ .avx2, null, null, null }, |
| 4841 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .word }, .any }, | 5039 | .src_constraints = .{ |
| | 5040 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, |
| | 5041 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, |
| | 5042 | }, |
| 4842 | .patterns = &.{ | 5043 | .patterns = &.{ |
| 4843 | .{ .src = .{ .to_mut_gpr, .none } }, | 5044 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4844 | }, | 5045 | }, |
| 4845 | .dst_temps = .{.{ .ref = .src0 }}, | 5046 | .extra_temps = .{ |
| | 5047 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 5048 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| | 5049 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| | 5050 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| | 5051 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| | 5052 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| | 5053 | .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, |
| | 5054 | .unused, |
| | 5055 | .unused, |
| | 5056 | }, |
| | 5057 | .dst_temps = .{.mem}, |
| 4846 | .clobbers = .{ .eflags = true }, | 5058 | .clobbers = .{ .eflags = true }, |
| 4847 | .each = .{ .once = &.{ | 5059 | .each = .{ .once = &.{ |
| 4848 | .{ ._, ._r, .bs, .dst0w, .src0w, ._, ._ }, | 5060 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 4849 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, | 5061 | .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ }, |
| 4850 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, | 5062 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4851 | .{ .@"0:", ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 5063 | .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 5064 | .{ ._, .v_dqa, .mov, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, |
| | 5065 | .{ ._, .vp_, .xor, .tmp5y, .tmp3y, .tmp2y, ._ }, |
| | 5066 | .{ ._, .vp_, .xor, .tmp6y, .tmp4y, .tmp2y, ._ }, |
| | 5067 | .{ ._, .vp_q, .cmpgt, .tmp5y, .tmp6y, .tmp5y, ._ }, |
| | 5068 | .{ ._, .vp_b, .blendv, .tmp3y, .tmp3y, .tmp4y, .tmp5y }, |
| | 5069 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ }, |
| | 5070 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 5071 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4852 | } }, | 5072 | } }, |
| 4853 | }, .{ | 5073 | }, .{ |
| 4854 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, | 5074 | .required_features = .{ .avx, null, null, null }, |
| 4855 | .src_constraints = .{ .{ .signed_int = .word }, .any }, | 5075 | .src_constraints = .{ |
| | 5076 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 5077 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 5078 | }, |
| 4856 | .patterns = &.{ | 5079 | .patterns = &.{ |
| 4857 | .{ .src = .{ .to_mut_gpr, .none } }, | 5080 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4858 | }, | 5081 | }, |
| 4859 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5082 | .extra_temps = .{ |
| | 5083 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 5084 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| | 5085 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 5086 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 5087 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 5088 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 5089 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 5090 | .unused, |
| | 5091 | .unused, |
| | 5092 | }, |
| | 5093 | .dst_temps = .{.mem}, |
| 4860 | .clobbers = .{ .eflags = true }, | 5094 | .clobbers = .{ .eflags = true }, |
| 4861 | .each = .{ .once = &.{ | 5095 | .each = .{ .once = &.{ |
| 4862 | .{ ._, ._, .@"and", .src0w, .sa(.src0, .add_umax), ._, ._ }, | 5096 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 4863 | .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ }, | 5097 | .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, |
| 4864 | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, | 5098 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4865 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | 5099 | .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 4866 | .{ ._, ._c, .st, ._, ._, ._, ._ }, | 5100 | .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 4867 | .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ }, | 5101 | .{ ._, .vp_, .xor, .tmp5x, .tmp3x, .tmp2x, ._ }, |
| | 5102 | .{ ._, .vp_, .xor, .tmp6x, .tmp4x, .tmp2x, ._ }, |
| | 5103 | .{ ._, .vp_q, .cmpgt, .tmp5x, .tmp6x, .tmp5x, ._ }, |
| | 5104 | .{ ._, .vp_b, .blendv, .tmp3x, .tmp3x, .tmp4x, .tmp5x }, |
| | 5105 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, |
| | 5106 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 5107 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4868 | } }, | 5108 | } }, |
| 4869 | }, .{ | 5109 | }, .{ |
| 4870 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, | 5110 | .required_features = .{ .sse4_2, null, null, null }, |
| 4871 | .src_constraints = .{ .{ .unsigned_int = .word }, .any }, | 5111 | .src_constraints = .{ |
| | 5112 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 5113 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 5114 | }, |
| 4872 | .patterns = &.{ | 5115 | .patterns = &.{ |
| 4873 | .{ .src = .{ .to_mut_gpr, .none } }, | 5116 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4874 | }, | 5117 | }, |
| 4875 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5118 | .extra_temps = .{ |
| | 5119 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 5120 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| | 5121 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 5122 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 5123 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 5124 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 5125 | .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } }, |
| | 5126 | .unused, |
| | 5127 | .unused, |
| | 5128 | }, |
| | 5129 | .dst_temps = .{.mem}, |
| 4876 | .clobbers = .{ .eflags = true }, | 5130 | .clobbers = .{ .eflags = true }, |
| 4877 | .each = .{ .once = &.{ | 5131 | .each = .{ .once = &.{ |
| 4878 | .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ }, | 5132 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 4879 | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, | 5133 | .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, |
| 4880 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | 5134 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4881 | .{ ._, ._c, .st, ._, ._, ._, ._ }, | 5135 | .{ .@"0:", ._dqa, .mov, .tmp5x, .tmp2x, ._, ._ }, |
| 4882 | .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ }, | 5136 | .{ ._, ._dqa, .mov, .tmp6x, .tmp2x, ._, ._ }, |
| | 5137 | .{ ._, ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 5138 | .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 5139 | .{ ._, .p_, .xor, .tmp5x, .tmp3x, ._, ._ }, |
| | 5140 | .{ ._, .p_, .xor, .tmp6x, .tmp4x, ._, ._ }, |
| | 5141 | .{ ._, .p_q, .cmpgt, .tmp6x, .tmp5x, ._, ._ }, |
| | 5142 | .{ ._, .p_b, .blendv, .tmp3x, .tmp4x, .tmp6x, ._ }, |
| | 5143 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, |
| | 5144 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 5145 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4883 | } }, | 5146 | } }, |
| 4884 | }, .{ | 5147 | }, .{ |
| 4885 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .word }, .any }, | 5148 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| | 5149 | .src_constraints = .{ |
| | 5150 | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, |
| | 5151 | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, |
| | 5152 | }, |
| 4886 | .patterns = &.{ | 5153 | .patterns = &.{ |
| 4887 | .{ .src = .{ .mem, .none } }, | 5154 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4888 | .{ .src = .{ .to_gpr, .none } }, | | |
| 4889 | }, | 5155 | }, |
| 4890 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5156 | .extra_temps = .{ |
| | 5157 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 5158 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 5159 | .unused, |
| | 5160 | .unused, |
| | 5161 | .unused, |
| | 5162 | .unused, |
| | 5163 | .unused, |
| | 5164 | .unused, |
| | 5165 | .unused, |
| | 5166 | }, |
| | 5167 | .dst_temps = .{.mem}, |
| 4891 | .clobbers = .{ .eflags = true }, | 5168 | .clobbers = .{ .eflags = true }, |
| 4892 | .each = .{ .once = &.{ | 5169 | .each = .{ .once = &.{ |
| 4893 | .{ ._, ._, .mov, .dst0w, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, | 5170 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4894 | .{ ._, ._r, .bs, .dst0w, .src0w, ._, ._ }, | 5171 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 4895 | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 5172 | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 5173 | .{ ._, ._b, .cmov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 5174 | .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| | 5175 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 5176 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4896 | } }, | 5177 | } }, |
| 4897 | }, .{ | 5178 | }, .{ |
| 4898 | .src_constraints = .{ .{ .signed_int = .word }, .any }, | 5179 | .required_features = .{ .@"64bit", null, null, null }, |
| | 5180 | .src_constraints = .{ |
| | 5181 | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, |
| | 5182 | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, |
| | 5183 | }, |
| 4899 | .patterns = &.{ | 5184 | .patterns = &.{ |
| 4900 | .{ .src = .{ .to_mut_gpr, .none } }, | 5185 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4901 | }, | 5186 | }, |
| 4902 | .extra_temps = .{ | 5187 | .extra_temps = .{ |
| 4903 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, | 5188 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 5189 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 5190 | .unused, |
| | 5191 | .unused, |
| 4904 | .unused, | 5192 | .unused, |
| 4905 | .unused, | 5193 | .unused, |
| 4906 | .unused, | 5194 | .unused, |
| 4907 | .unused, | 5195 | .unused, |
| 4908 | .unused, | 5196 | .unused, |
| 4909 | }, | 5197 | }, |
| 4910 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5198 | .dst_temps = .{.mem}, |
| 4911 | .clobbers = .{ .eflags = true }, | 5199 | .clobbers = .{ .eflags = true }, |
| 4912 | .each = .{ .once = &.{ | 5200 | .each = .{ .once = &.{ |
| 4913 | .{ ._, ._, .@"and", .src0w, .sa(.src0, .add_umax), ._, ._ }, | 5201 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4914 | .{ ._, ._, .mov, .tmp0w, .si(0xff), ._, ._ }, | 5202 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 4915 | .{ ._, ._r, .bs, .tmp0w, .src0w, ._, ._ }, | 5203 | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 4916 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 5204 | .{ ._, ._nb, .j, .@"1f", ._, ._, ._ }, |
| 4917 | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, | 5205 | .{ ._, ._, .mov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 5206 | .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| | 5207 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 5208 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4918 | } }, | 5209 | } }, |
| 4919 | }, .{ | 5210 | }, .{ |
| 4920 | .src_constraints = .{ .{ .unsigned_int = .word }, .any }, | 5211 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| | 5212 | .src_constraints = .{ .any_scalar_signed_int, .any_scalar_signed_int }, |
| 4921 | .patterns = &.{ | 5213 | .patterns = &.{ |
| 4922 | .{ .src = .{ .mem, .none } }, | 5214 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4923 | .{ .src = .{ .to_gpr, .none } }, | | |
| 4924 | }, | 5215 | }, |
| 4925 | .extra_temps = .{ | 5216 | .extra_temps = .{ |
| 4926 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, | 5217 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 5218 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| | 5219 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| | 5220 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| 4927 | .unused, | 5221 | .unused, |
| 4928 | .unused, | 5222 | .unused, |
| 4929 | .unused, | 5223 | .unused, |
| 4930 | .unused, | 5224 | .unused, |
| 4931 | .unused, | 5225 | .unused, |
| 4932 | }, | 5226 | }, |
| 4933 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5227 | .dst_temps = .{.mem}, |
| 4934 | .clobbers = .{ .eflags = true }, | 5228 | .clobbers = .{ .eflags = true }, |
| 4935 | .each = .{ .once = &.{ | 5229 | .each = .{ .once = &.{ |
| 4936 | .{ ._, ._, .mov, .tmp0w, .si(0xff), ._, ._ }, | 5230 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4937 | .{ ._, ._r, .bs, .tmp0w, .src0w, ._, ._ }, | 5231 | .{ .@"0:", ._, .mov, .tmp1d, .sia(-1, .none, .add_src0_elem_size_div_8), ._, ._ }, |
| 4938 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 5232 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 4939 | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, | 5233 | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 5234 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 5235 | .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, |
| | 5236 | .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, |
| | 5237 | .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, |
| | 5238 | .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 5239 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 5240 | .{ ._, ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| | 5241 | .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| | 5242 | .{ ._, ._l, .cmov, .tmp1p, .tmp2p, ._, ._ }, |
| | 5243 | .{ ._, ._, .lea, .tmp2p, .memiad(.dst0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| | 5244 | .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| | 5245 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| | 5246 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 5247 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4940 | } }, | 5248 | } }, |
| 4941 | }, .{ | 5249 | }, .{ |
| 4942 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, | 5250 | .required_features = .{ .@"64bit", null, null, null }, |
| 4943 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .dword }, .any }, | 5251 | .src_constraints = .{ .any_scalar_signed_int, .any_scalar_signed_int }, |
| 4944 | .patterns = &.{ | 5252 | .patterns = &.{ |
| 4945 | .{ .src = .{ .to_mut_gpr, .none } }, | 5253 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4946 | }, | 5254 | }, |
| 4947 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5255 | .extra_temps = .{ |
| | 5256 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 5257 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| | 5258 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| | 5259 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| | 5260 | .unused, |
| | 5261 | .unused, |
| | 5262 | .unused, |
| | 5263 | .unused, |
| | 5264 | .unused, |
| | 5265 | }, |
| | 5266 | .dst_temps = .{.mem}, |
| 4948 | .clobbers = .{ .eflags = true }, | 5267 | .clobbers = .{ .eflags = true }, |
| 4949 | .each = .{ .once = &.{ | 5268 | .each = .{ .once = &.{ |
| 4950 | .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ }, | 5269 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4951 | .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, | 5270 | .{ .@"0:", ._, .mov, .tmp1d, .sia(-1, .none, .add_src0_elem_size_div_8), ._, ._ }, |
| 4952 | .{ ._, ._nz, .cmov, .dst0d, .src0d, ._, ._ }, | 5271 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 4953 | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 5272 | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 5273 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 5274 | .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, |
| | 5275 | .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, |
| | 5276 | .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, |
| | 5277 | .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 5278 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 5279 | .{ ._, ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| | 5280 | .{ ._, ._nl, .j, .@"1f", ._, ._, ._ }, |
| | 5281 | .{ ._, ._, .lea, .tmp1p, .memiad(.src1, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| | 5282 | .{ .@"1:", ._, .lea, .tmp2p, .memiad(.dst0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| | 5283 | .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| | 5284 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| | 5285 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 5286 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4954 | } }, | 5287 | } }, |
| 4955 | }, .{ | 5288 | }, .{ |
| 4956 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, | 5289 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 4957 | .src_constraints = .{ .{ .signed_int = .dword }, .any }, | 5290 | .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int }, |
| 4958 | .patterns = &.{ | 5291 | .patterns = &.{ |
| 4959 | .{ .src = .{ .to_mut_gpr, .none } }, | 5292 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4960 | }, | 5293 | }, |
| 4961 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5294 | .extra_temps = .{ |
| | 5295 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 5296 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| | 5297 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| | 5298 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| | 5299 | .unused, |
| | 5300 | .unused, |
| | 5301 | .unused, |
| | 5302 | .unused, |
| | 5303 | .unused, |
| | 5304 | }, |
| | 5305 | .dst_temps = .{.mem}, |
| 4962 | .clobbers = .{ .eflags = true }, | 5306 | .clobbers = .{ .eflags = true }, |
| 4963 | .each = .{ .once = &.{ | 5307 | .each = .{ .once = &.{ |
| 4964 | .{ ._, ._, .@"and", .src0d, .sa(.src0, .add_umax), ._, ._ }, | 5308 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4965 | .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ }, | 5309 | .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| 4966 | .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ }, | 5310 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 4967 | .{ ._, ._z, .cmov, .src0d, .dst0d, ._, ._ }, | 5311 | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 4968 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 5312 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 4969 | .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ }, | 5313 | .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, |
| | 5314 | .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, |
| | 5315 | .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, |
| | 5316 | .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| | 5317 | .{ ._, ._, .lea, .tmp2p, .memia(.src1, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| | 5318 | .{ ._, ._b, .cmov, .tmp1p, .tmp2p, ._, ._ }, |
| | 5319 | .{ ._, ._, .lea, .tmp2p, .memia(.dst0, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| | 5320 | .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| | 5321 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| | 5322 | .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ }, |
| | 5323 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 4970 | } }, | 5324 | } }, |
| 4971 | }, .{ | 5325 | }, .{ |
| 4972 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, | 5326 | .required_features = .{ .@"64bit", null, null, null }, |
| 4973 | .src_constraints = .{ .{ .unsigned_int = .dword }, .any }, | 5327 | .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int }, |
| 4974 | .patterns = &.{ | 5328 | .patterns = &.{ |
| 4975 | .{ .src = .{ .to_mut_gpr, .none } }, | 5329 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4976 | }, | 5330 | }, |
| 4977 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5331 | .extra_temps = .{ |
| | 5332 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 5333 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| | 5334 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| | 5335 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| | 5336 | .unused, |
| | 5337 | .unused, |
| | 5338 | .unused, |
| | 5339 | .unused, |
| | 5340 | .unused, |
| | 5341 | }, |
| | 5342 | .dst_temps = .{.mem}, |
| 4978 | .clobbers = .{ .eflags = true }, | 5343 | .clobbers = .{ .eflags = true }, |
| 4979 | .each = .{ .once = &.{ | 5344 | .each = .{ .once = &.{ |
| 4980 | .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ }, | 5345 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4981 | .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ }, | 5346 | .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| 4982 | .{ ._, ._z, .cmov, .src0d, .dst0d, ._, ._ }, | 5347 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 4983 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 5348 | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 4984 | .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ }, | 5349 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 5350 | .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, |
| | 5351 | .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, |
| | 5352 | .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, |
| | 5353 | .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| | 5354 | .{ ._, ._nb, .j, .@"1f", ._, ._, ._ }, |
| | 5355 | .{ ._, ._, .lea, .tmp1p, .memia(.src1, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| | 5356 | .{ .@"1:", ._, .lea, .tmp2p, .memia(.dst0, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| | 5357 | .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| | 5358 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| | 5359 | .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ }, |
| | 5360 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 4985 | } }, | 5361 | } }, |
| 4986 | }, .{ | 5362 | } }) catch |err| switch (err) { |
| 4987 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, | 5363 | error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{ |
| 4988 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .dword }, .any }, | 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 } }, |
| 4989 | .patterns = &.{ | 5381 | .patterns = &.{ |
| 4990 | .{ .src = .{ .to_mut_gpr, .none } }, | 5382 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 4991 | }, | 5383 | }, |
| 4992 | .dst_temps = .{.{ .ref = .src0 }}, | 5384 | .dst_temps = .{.{ .ref = .src0 }}, |
| 4993 | .clobbers = .{ .eflags = true }, | 5385 | .clobbers = .{ .eflags = true }, |
| 4994 | .each = .{ .once = &.{ | 5386 | .each = .{ .once = &.{ |
| 4995 | .{ ._, ._r, .bs, .dst0d, .src0d, ._, ._ }, | 5387 | .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ }, |
| 4996 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, | 5388 | .{ ._, ._ge, .cmov, .dst0d, .src1d, ._, ._ }, |
| 4997 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, | | |
| 4998 | .{ .@"0:", ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | | |
| 4999 | } }, | 5389 | } }, |
| 5000 | }, .{ | 5390 | }, .{ |
| 5001 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, | 5391 | .src_constraints = .{ .{ .signed_int = .byte }, .{ .signed_int = .byte } }, |
| 5002 | .src_constraints = .{ .{ .signed_int = .dword }, .any }, | | |
| 5003 | .patterns = &.{ | 5392 | .patterns = &.{ |
| 5004 | .{ .src = .{ .to_mut_gpr, .none } }, | 5393 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 5394 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 5395 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5005 | }, | 5396 | }, |
| 5006 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5397 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5007 | .clobbers = .{ .eflags = true }, | 5398 | .clobbers = .{ .eflags = true }, |
| 5008 | .each = .{ .once = &.{ | 5399 | .each = .{ .once = &.{ |
| 5009 | .{ ._, ._, .@"and", .src0d, .sa(.src0, .add_umax), ._, ._ }, | 5400 | .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ }, |
| 5010 | .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ }, | 5401 | .{ ._, ._nge, .j, .@"0f", ._, ._, ._ }, |
| 5011 | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, | 5402 | .{ ._, ._, .mov, .dst0b, .src1b, ._, ._ }, |
| 5012 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | | |
| 5013 | .{ ._, ._c, .st, ._, ._, ._, ._ }, | | |
| 5014 | .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ }, | | |
| 5015 | } }, | 5403 | } }, |
| 5016 | }, .{ | 5404 | }, .{ |
| 5017 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, | 5405 | .required_features = .{ .cmov, null, null, null }, |
| 5018 | .src_constraints = .{ .{ .unsigned_int = .dword }, .any }, | 5406 | .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte } }, |
| 5019 | .patterns = &.{ | 5407 | .patterns = &.{ |
| 5020 | .{ .src = .{ .to_mut_gpr, .none } }, | 5408 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5021 | }, | 5409 | }, |
| 5022 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5410 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5023 | .clobbers = .{ .eflags = true }, | 5411 | .clobbers = .{ .eflags = true }, |
| 5024 | .each = .{ .once = &.{ | 5412 | .each = .{ .once = &.{ |
| 5025 | .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ }, | 5413 | .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ }, |
| 5026 | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, | 5414 | .{ ._, ._ae, .cmov, .dst0d, .src1d, ._, ._ }, |
| 5027 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | | |
| 5028 | .{ ._, ._c, .st, ._, ._, ._, ._ }, | | |
| 5029 | .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ }, | | |
| 5030 | } }, | 5415 | } }, |
| 5031 | }, .{ | 5416 | }, .{ |
| 5032 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .dword }, .any }, | 5417 | .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte } }, |
| 5033 | .patterns = &.{ | 5418 | .patterns = &.{ |
| 5034 | .{ .src = .{ .mem, .none } }, | 5419 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5035 | .{ .src = .{ .to_gpr, .none } }, | 5420 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 5421 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5036 | }, | 5422 | }, |
| 5037 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5423 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5038 | .clobbers = .{ .eflags = true }, | 5424 | .clobbers = .{ .eflags = true }, |
| 5039 | .each = .{ .once = &.{ | 5425 | .each = .{ .once = &.{ |
| 5040 | .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, | 5426 | .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ }, |
| 5041 | .{ ._, ._r, .bs, .dst0d, .src0d, ._, ._ }, | 5427 | .{ ._, ._nae, .j, .@"0f", ._, ._, ._ }, |
| 5042 | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 5428 | .{ ._, ._, .mov, .dst0b, .src1b, ._, ._ }, |
| 5043 | } }, | 5429 | } }, |
| 5044 | }, .{ | 5430 | }, .{ |
| 5045 | .src_constraints = .{ .{ .signed_int = .dword }, .any }, | 5431 | .required_features = .{ .cmov, null, null, null }, |
| | 5432 | .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word } }, |
| 5046 | .patterns = &.{ | 5433 | .patterns = &.{ |
| 5047 | .{ .src = .{ .to_mut_gpr, .none } }, | 5434 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5048 | }, | 5435 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 5049 | .extra_temps = .{ | 5436 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5050 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | | |
| 5051 | .unused, | | |
| 5052 | .unused, | | |
| 5053 | .unused, | | |
| 5054 | .unused, | | |
| 5055 | .unused, | | |
| 5056 | }, | 5437 | }, |
| 5057 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5438 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5058 | .clobbers = .{ .eflags = true }, | 5439 | .clobbers = .{ .eflags = true }, |
| 5059 | .each = .{ .once = &.{ | 5440 | .each = .{ .once = &.{ |
| 5060 | .{ ._, ._, .@"and", .src0d, .sa(.src0, .add_umax), ._, ._ }, | 5441 | .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ }, |
| 5061 | .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ }, | 5442 | .{ ._, ._ge, .cmov, .dst0w, .src1w, ._, ._ }, |
| 5062 | .{ ._, ._r, .bs, .tmp0d, .src0d, ._, ._ }, | | |
| 5063 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | | |
| 5064 | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, | | |
| 5065 | } }, | 5443 | } }, |
| 5066 | }, .{ | 5444 | }, .{ |
| 5067 | .src_constraints = .{ .{ .unsigned_int = .dword }, .any }, | 5445 | .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word } }, |
| 5068 | .patterns = &.{ | 5446 | .patterns = &.{ |
| 5069 | .{ .src = .{ .mem, .none } }, | 5447 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5070 | .{ .src = .{ .to_gpr, .none } }, | 5448 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 5449 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5071 | }, | 5450 | }, |
| 5072 | .extra_temps = .{ | 5451 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5073 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 5452 | .clobbers = .{ .eflags = true }, |
| 5074 | .unused, | 5453 | .each = .{ .once = &.{ |
| 5075 | .unused, | 5454 | .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ }, |
| 5076 | .unused, | 5455 | .{ ._, ._nge, .j, .@"0f", ._, ._, ._ }, |
| 5077 | .unused, | 5456 | .{ ._, ._, .mov, .dst0w, .src1w, ._, ._ }, |
| 5078 | .unused, | 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 } }, |
| 5079 | }, | 5465 | }, |
| 5080 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5466 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5081 | .clobbers = .{ .eflags = true }, | 5467 | .clobbers = .{ .eflags = true }, |
| 5082 | .each = .{ .once = &.{ | 5468 | .each = .{ .once = &.{ |
| 5083 | .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ }, | 5469 | .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ }, |
| 5084 | .{ ._, ._r, .bs, .tmp0d, .src0d, ._, ._ }, | 5470 | .{ ._, ._ae, .cmov, .dst0w, .src1w, ._, ._ }, |
| 5085 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | | |
| 5086 | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, | | |
| 5087 | } }, | 5471 | } }, |
| 5088 | }, .{ | 5472 | }, .{ |
| 5089 | .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, null }, | 5473 | .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word } }, |
| 5090 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .qword }, .any }, | | |
| 5091 | .patterns = &.{ | 5474 | .patterns = &.{ |
| 5092 | .{ .src = .{ .to_mut_gpr, .none } }, | 5475 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 5476 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 5477 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5093 | }, | 5478 | }, |
| 5094 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5479 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5095 | .clobbers = .{ .eflags = true }, | 5480 | .clobbers = .{ .eflags = true }, |
| 5096 | .each = .{ .once = &.{ | 5481 | .each = .{ .once = &.{ |
| 5097 | .{ ._, ._r, .bs, .src0q, .src0q, ._, ._ }, | 5482 | .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ }, |
| 5098 | .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, | 5483 | .{ ._, ._nae, .j, .@"0f", ._, ._, ._ }, |
| 5099 | .{ ._, ._nz, .cmov, .dst0d, .src0d, ._, ._ }, | 5484 | .{ ._, ._, .mov, .dst0w, .src1w, ._, ._ }, |
| 5100 | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | | |
| 5101 | } }, | 5485 | } }, |
| 5102 | }, .{ | 5486 | }, .{ |
| 5103 | .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, null }, | 5487 | .required_features = .{ .cmov, null, null, null }, |
| 5104 | .src_constraints = .{ .{ .signed_int = .qword }, .any }, | 5488 | .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword } }, |
| 5105 | .patterns = &.{ | 5489 | .patterns = &.{ |
| 5106 | .{ .src = .{ .mem, .none } }, | 5490 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5107 | .{ .src = .{ .to_gpr, .none } }, | 5491 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 5492 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5108 | }, | 5493 | }, |
| 5109 | .extra_temps = .{ | 5494 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5110 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 5495 | .clobbers = .{ .eflags = true }, |
| 5111 | .unused, | 5496 | .each = .{ .once = &.{ |
| 5112 | .unused, | 5497 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, |
| 5113 | .unused, | 5498 | .{ ._, ._ge, .cmov, .dst0d, .src1d, ._, ._ }, |
| 5114 | .unused, | 5499 | } }, |
| 5115 | .unused, | 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 } }, |
| 5116 | }, | 5506 | }, |
| 5117 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5507 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5118 | .clobbers = .{ .eflags = true }, | 5508 | .clobbers = .{ .eflags = true }, |
| 5119 | .each = .{ .once = &.{ | 5509 | .each = .{ .once = &.{ |
| 5120 | .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ }, | 5510 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, |
| 5121 | .{ ._, ._, .@"and", .tmp0q, .src0q, ._, ._ }, | 5511 | .{ ._, ._nge, .j, .@"0f", ._, ._, ._ }, |
| 5122 | .{ ._, ._r, .bs, .tmp0q, .tmp0q, ._, ._ }, | 5512 | .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ }, |
| 5123 | .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ }, | | |
| 5124 | .{ ._, ._z, .cmov, .tmp0d, .dst0d, ._, ._ }, | | |
| 5125 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | | |
| 5126 | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, | | |
| 5127 | } }, | 5513 | } }, |
| 5128 | }, .{ | 5514 | }, .{ |
| 5129 | .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, null }, | 5515 | .required_features = .{ .cmov, null, null, null }, |
| 5130 | .src_constraints = .{ .{ .unsigned_int = .qword }, .any }, | 5516 | .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword } }, |
| 5131 | .patterns = &.{ | 5517 | .patterns = &.{ |
| 5132 | .{ .src = .{ .to_mut_gpr, .none } }, | 5518 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 5519 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 5520 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5133 | }, | 5521 | }, |
| 5134 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5522 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5135 | .clobbers = .{ .eflags = true }, | 5523 | .clobbers = .{ .eflags = true }, |
| 5136 | .each = .{ .once = &.{ | 5524 | .each = .{ .once = &.{ |
| 5137 | .{ ._, ._r, .bs, .src0q, .src0q, ._, ._ }, | 5525 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, |
| 5138 | .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ }, | 5526 | .{ ._, ._ae, .cmov, .dst0d, .src1d, ._, ._ }, |
| 5139 | .{ ._, ._z, .cmov, .src0d, .dst0d, ._, ._ }, | | |
| 5140 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | | |
| 5141 | .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ }, | | |
| 5142 | } }, | 5527 | } }, |
| 5143 | }, .{ | 5528 | }, .{ |
| 5144 | .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null }, | 5529 | .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword } }, |
| 5145 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .qword }, .any }, | | |
| 5146 | .patterns = &.{ | 5530 | .patterns = &.{ |
| 5147 | .{ .src = .{ .to_mut_gpr, .none } }, | 5531 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 5532 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 5533 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5148 | }, | 5534 | }, |
| 5149 | .dst_temps = .{.{ .ref = .src0 }}, | 5535 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5150 | .clobbers = .{ .eflags = true }, | 5536 | .clobbers = .{ .eflags = true }, |
| 5151 | .each = .{ .once = &.{ | 5537 | .each = .{ .once = &.{ |
| 5152 | .{ ._, ._r, .bs, .dst0q, .src0q, ._, ._ }, | 5538 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, |
| 5153 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, | 5539 | .{ ._, ._nae, .j, .@"0f", ._, ._, ._ }, |
| 5154 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, | 5540 | .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ }, |
| 5155 | .{ .@"0:", ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | | |
| 5156 | } }, | 5541 | } }, |
| 5157 | }, .{ | 5542 | }, .{ |
| 5158 | .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null }, | 5543 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 5159 | .src_constraints = .{ .{ .signed_int = .qword }, .any }, | 5544 | .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword } }, |
| 5160 | .patterns = &.{ | 5545 | .patterns = &.{ |
| 5161 | .{ .src = .{ .mem, .none } }, | 5546 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5162 | .{ .src = .{ .to_gpr, .none } }, | 5547 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 5548 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5163 | }, | 5549 | }, |
| 5164 | .extra_temps = .{ | 5550 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5165 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 5551 | .clobbers = .{ .eflags = true }, |
| 5166 | .unused, | 5552 | .each = .{ .once = &.{ |
| 5167 | .unused, | 5553 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, |
| 5168 | .unused, | 5554 | .{ ._, ._ge, .cmov, .dst0q, .src1q, ._, ._ }, |
| 5169 | .unused, | 5555 | } }, |
| 5170 | .unused, | 5556 | }, .{ |
| | 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 } }, |
| 5171 | }, | 5563 | }, |
| 5172 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5564 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5173 | .clobbers = .{ .eflags = true }, | 5565 | .clobbers = .{ .eflags = true }, |
| 5174 | .each = .{ .once = &.{ | 5566 | .each = .{ .once = &.{ |
| 5175 | .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ }, | 5567 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, |
| 5176 | .{ ._, ._, .@"and", .tmp0q, .src0q, ._, ._ }, | 5568 | .{ ._, ._nge, .j, .@"0f", ._, ._, ._ }, |
| 5177 | .{ ._, ._r, .bs, .tmp0q, .tmp0q, ._, ._ }, | 5569 | .{ ._, ._, .mov, .dst0q, .src1q, ._, ._ }, |
| 5178 | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, | | |
| 5179 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | | |
| 5180 | .{ ._, ._c, .st, ._, ._, ._, ._ }, | | |
| 5181 | .{ ._, ._, .sbb, .dst0b, .tmp0b, ._, ._ }, | | |
| 5182 | } }, | 5570 | } }, |
| 5183 | }, .{ | 5571 | }, .{ |
| 5184 | .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null }, | 5572 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 5185 | .src_constraints = .{ .{ .unsigned_int = .qword }, .any }, | 5573 | .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword } }, |
| 5186 | .patterns = &.{ | 5574 | .patterns = &.{ |
| 5187 | .{ .src = .{ .to_mut_gpr, .none } }, | 5575 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 5576 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 5577 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5188 | }, | 5578 | }, |
| 5189 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5579 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5190 | .clobbers = .{ .eflags = true }, | 5580 | .clobbers = .{ .eflags = true }, |
| 5191 | .each = .{ .once = &.{ | 5581 | .each = .{ .once = &.{ |
| 5192 | .{ ._, ._r, .bs, .src0q, .src0q, ._, ._ }, | 5582 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, |
| 5193 | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, | 5583 | .{ ._, ._ae, .cmov, .dst0q, .src1q, ._, ._ }, |
| 5194 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | | |
| 5195 | .{ ._, ._c, .st, ._, ._, ._, ._ }, | | |
| 5196 | .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ }, | | |
| 5197 | } }, | 5584 | } }, |
| 5198 | }, .{ | 5585 | }, .{ |
| 5199 | .required_features = .{ .@"64bit", null, null, null }, | 5586 | .required_features = .{ .@"64bit", null, null, null }, |
| 5200 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .qword }, .any }, | 5587 | .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword } }, |
| 5201 | .patterns = &.{ | 5588 | .patterns = &.{ |
| 5202 | .{ .src = .{ .mem, .none } }, | 5589 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5203 | .{ .src = .{ .to_gpr, .none } }, | 5590 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 5591 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5204 | }, | 5592 | }, |
| 5205 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5593 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5206 | .clobbers = .{ .eflags = true }, | 5594 | .clobbers = .{ .eflags = true }, |
| 5207 | .each = .{ .once = &.{ | 5595 | .each = .{ .once = &.{ |
| 5208 | .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, | 5596 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, |
| 5209 | .{ ._, ._r, .bs, .dst0q, .src0q, ._, ._ }, | 5597 | .{ ._, ._nae, .j, .@"0f", ._, ._, ._ }, |
| 5210 | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 5598 | .{ ._, ._, .mov, .dst0q, .src1q, ._, ._ }, |
| 5211 | } }, | 5599 | } }, |
| 5212 | }, .{ | 5600 | }, .{ |
| 5213 | .required_features = .{ .@"64bit", null, null, null }, | 5601 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 5214 | .src_constraints = .{ .{ .signed_int = .qword }, .any }, | 5602 | .src_constraints = .{ .any_signed_int, .any_signed_int }, |
| 5215 | .patterns = &.{ | 5603 | .patterns = &.{ |
| 5216 | .{ .src = .{ .mem, .none } }, | 5604 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5217 | .{ .src = .{ .to_gpr, .none } }, | | |
| 5218 | }, | 5605 | }, |
| 5219 | .extra_temps = .{ | 5606 | .extra_temps = .{ |
| 5220 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 5607 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| | 5608 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| | 5609 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| | 5610 | .unused, |
| 5221 | .unused, | 5611 | .unused, |
| 5222 | .unused, | 5612 | .unused, |
| 5223 | .unused, | 5613 | .unused, |
| 5224 | .unused, | 5614 | .unused, |
| 5225 | .unused, | 5615 | .unused, |
| 5226 | }, | 5616 | }, |
| 5227 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5617 | .dst_temps = .{.mem}, |
| 5228 | .clobbers = .{ .eflags = true }, | 5618 | .clobbers = .{ .eflags = true }, |
| 5229 | .each = .{ .once = &.{ | 5619 | .each = .{ .once = &.{ |
| 5230 | .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ }, | 5620 | .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ }, |
| 5231 | .{ ._, ._, .@"and", .dst0q, .src0q, ._, ._ }, | 5621 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 5232 | .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ }, | 5622 | .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ }, |
| 5233 | .{ ._, ._r, .bs, .tmp0q, .dst0q, ._, ._ }, | 5623 | .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ }, |
| 5234 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 5624 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 5235 | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, | 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, ._, ._, ._, ._ }, |
| 5236 | } }, | 5634 | } }, |
| 5237 | }, .{ | 5635 | }, .{ |
| 5238 | .required_features = .{ .@"64bit", null, null, null }, | 5636 | .required_features = .{ .@"64bit", null, null, null }, |
| 5239 | .src_constraints = .{ .{ .unsigned_int = .qword }, .any }, | 5637 | .src_constraints = .{ .any_signed_int, .any_signed_int }, |
| 5240 | .patterns = &.{ | 5638 | .patterns = &.{ |
| 5241 | .{ .src = .{ .mem, .none } }, | 5639 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5242 | .{ .src = .{ .to_gpr, .none } }, | | |
| 5243 | }, | 5640 | }, |
| 5244 | .extra_temps = .{ | 5641 | .extra_temps = .{ |
| 5245 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 5642 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| | 5643 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| | 5644 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| | 5645 | .unused, |
| 5246 | .unused, | 5646 | .unused, |
| 5247 | .unused, | 5647 | .unused, |
| 5248 | .unused, | 5648 | .unused, |
| 5249 | .unused, | 5649 | .unused, |
| 5250 | .unused, | 5650 | .unused, |
| 5251 | }, | 5651 | }, |
| 5252 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5652 | .dst_temps = .{.mem}, |
| 5253 | .clobbers = .{ .eflags = true }, | 5653 | .clobbers = .{ .eflags = true }, |
| 5254 | .each = .{ .once = &.{ | 5654 | .each = .{ .once = &.{ |
| 5255 | .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ }, | 5655 | .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ }, |
| 5256 | .{ ._, ._r, .bs, .tmp0q, .src0q, ._, ._ }, | 5656 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 5257 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 5657 | .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ }, |
| 5258 | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, | 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, ._, ._, ._, ._ }, |
| 5259 | } }, | 5669 | } }, |
| 5260 | }, .{ | 5670 | }, .{ |
| 5261 | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, | 5671 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 5262 | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, | 5672 | .src_constraints = .{ .any_unsigned_int, .any_unsigned_int }, |
| 5263 | .patterns = &.{ | 5673 | .patterns = &.{ |
| 5264 | .{ .src = .{ .to_mem, .none } }, | 5674 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5265 | }, | 5675 | }, |
| 5266 | .extra_temps = .{ | 5676 | .extra_temps = .{ |
| 5267 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 5677 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| | 5678 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| | 5679 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| | 5680 | .unused, |
| 5268 | .unused, | 5681 | .unused, |
| 5269 | .unused, | 5682 | .unused, |
| 5270 | .unused, | 5683 | .unused, |
| 5271 | .unused, | 5684 | .unused, |
| 5272 | .unused, | 5685 | .unused, |
| 5273 | }, | 5686 | }, |
| 5274 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5687 | .dst_temps = .{.mem}, |
| 5275 | .clobbers = .{ .eflags = true }, | 5688 | .clobbers = .{ .eflags = true }, |
| 5276 | .each = .{ .once = &.{ | 5689 | .each = .{ .once = &.{ |
| 5277 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, | 5690 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ }, |
| 5278 | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, | 5691 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 5279 | .{ ._, ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, | 5692 | .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ }, |
| 5280 | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, | 5693 | .{ ._, ._, .sbb, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ }, |
| 5281 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, | 5694 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 5282 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 5695 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 5283 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, | 5696 | .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, |
| 5284 | .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, | 5697 | .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ }, |
| 5285 | .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, | 5698 | .{ ._, ._ae, .cmov, .tmp0p, .tmp1p, ._, ._ }, |
| | 5699 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| | 5700 | .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ }, |
| | 5701 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| 5286 | } }, | 5702 | } }, |
| 5287 | }, .{ | 5703 | }, .{ |
| 5288 | .required_features = .{ .@"64bit", .lzcnt, null, null }, | 5704 | .required_features = .{ .@"64bit", null, null, null }, |
| 5289 | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, | 5705 | .src_constraints = .{ .any_unsigned_int, .any_unsigned_int }, |
| 5290 | .patterns = &.{ | 5706 | .patterns = &.{ |
| 5291 | .{ .src = .{ .to_mem, .none } }, | 5707 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5292 | }, | 5708 | }, |
| 5293 | .extra_temps = .{ | 5709 | .extra_temps = .{ |
| 5294 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 5710 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| | 5711 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| | 5712 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| | 5713 | .unused, |
| 5295 | .unused, | 5714 | .unused, |
| 5296 | .unused, | 5715 | .unused, |
| 5297 | .unused, | 5716 | .unused, |
| 5298 | .unused, | 5717 | .unused, |
| 5299 | .unused, | 5718 | .unused, |
| 5300 | }, | 5719 | }, |
| 5301 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5720 | .dst_temps = .{.mem}, |
| 5302 | .clobbers = .{ .eflags = true }, | 5721 | .clobbers = .{ .eflags = true }, |
| 5303 | .each = .{ .once = &.{ | 5722 | .each = .{ .once = &.{ |
| 5304 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, | 5723 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ }, |
| 5305 | .{ .@"0:", ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, | 5724 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 5306 | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, | 5725 | .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ }, |
| 5307 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, | 5726 | .{ ._, ._, .sbb, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ }, |
| 5308 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 5727 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 5309 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, | 5728 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 5310 | .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, | 5729 | .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, |
| 5311 | .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, | 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, ._, ._, ._, ._ }, |
| 5312 | } }, | 5735 | } }, |
| 5313 | }, .{ | 5736 | }, .{ |
| 5314 | .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null }, | 5737 | .required_features = .{ .avx, null, null, null }, |
| 5315 | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, | 5738 | .src_constraints = .{ |
| | 5739 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 5740 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 5741 | }, |
| 5316 | .patterns = &.{ | 5742 | .patterns = &.{ |
| 5317 | .{ .src = .{ .to_mem, .none } }, | 5743 | .{ .src = .{ .to_sse, .mem } }, |
| | 5744 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 5745 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 5746 | }, |
| | 5747 | .dst_temps = .{.{ .rc = .sse }}, |
| | 5748 | .each = .{ .once = &.{ |
| | 5749 | .{ ._, .vp_b, .mins, .dst0x, .src0x, .src1x, ._ }, |
| | 5750 | } }, |
| | 5751 | }, .{ |
| | 5752 | .required_features = .{ .sse4_1, null, null, null }, |
| | 5753 | .src_constraints = .{ |
| | 5754 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 5755 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 5756 | }, |
| | 5757 | .patterns = &.{ |
| | 5758 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 5759 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 5760 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| | 5761 | }, |
| | 5762 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 5763 | .each = .{ .once = &.{ |
| | 5764 | .{ ._, .p_b, .mins, .dst0x, .src1x, ._, ._ }, |
| | 5765 | } }, |
| | 5766 | }, .{ |
| | 5767 | .required_features = .{ .sse2, null, null, null }, |
| | 5768 | .src_constraints = .{ |
| | 5769 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 5770 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 5771 | }, |
| | 5772 | .patterns = &.{ |
| | 5773 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 5774 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 5775 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| | 5776 | }, |
| | 5777 | .dst_temps = .{.{ .rc = .sse }}, |
| | 5778 | .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, ._, ._ }, |
| | 5784 | } }, |
| | 5785 | }, .{ |
| | 5786 | .required_features = .{ .avx2, null, null, null }, |
| | 5787 | .src_constraints = .{ |
| | 5788 | .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } }, |
| | 5789 | .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } }, |
| | 5790 | }, |
| | 5791 | .patterns = &.{ |
| | 5792 | .{ .src = .{ .to_sse, .mem } }, |
| | 5793 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 5794 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 5795 | }, |
| | 5796 | .dst_temps = .{.{ .rc = .sse }}, |
| | 5797 | .each = .{ .once = &.{ |
| | 5798 | .{ ._, .vp_b, .mins, .dst0y, .src0y, .src1y, ._ }, |
| | 5799 | } }, |
| | 5800 | }, .{ |
| | 5801 | .required_features = .{ .avx2, null, null, null }, |
| | 5802 | .src_constraints = .{ |
| | 5803 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } }, |
| | 5804 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } }, |
| | 5805 | }, |
| | 5806 | .patterns = &.{ |
| | 5807 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5318 | }, | 5808 | }, |
| 5319 | .extra_temps = .{ | 5809 | .extra_temps = .{ |
| 5320 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 5810 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 5811 | .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } }, |
| | 5812 | .unused, |
| | 5813 | .unused, |
| 5321 | .unused, | 5814 | .unused, |
| 5322 | .unused, | 5815 | .unused, |
| 5323 | .unused, | 5816 | .unused, |
| 5324 | .unused, | 5817 | .unused, |
| 5325 | .unused, | 5818 | .unused, |
| 5326 | }, | 5819 | }, |
| 5327 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5820 | .dst_temps = .{.mem}, |
| 5328 | .clobbers = .{ .eflags = true }, | 5821 | .clobbers = .{ .eflags = true }, |
| 5329 | .each = .{ .once = &.{ | 5822 | .each = .{ .once = &.{ |
| 5330 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, | 5823 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5331 | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, | 5824 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 5332 | .{ ._, ._r, .bs, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, | 5825 | .{ ._, .vp_b, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 5333 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, | 5826 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 5334 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, | 5827 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 5335 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 5828 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5336 | .{ ._, ._, .mov, .dst0d, .si(-1), ._, ._ }, | | |
| 5337 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, | | |
| 5338 | .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, | | |
| 5339 | .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, | | |
| 5340 | } }, | 5829 | } }, |
| 5341 | }, .{ | 5830 | }, .{ |
| 5342 | .required_features = .{ .@"64bit", null, null, null }, | 5831 | .required_features = .{ .avx, null, null, null }, |
| 5343 | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, | 5832 | .src_constraints = .{ |
| | 5833 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 5834 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 5835 | }, |
| 5344 | .patterns = &.{ | 5836 | .patterns = &.{ |
| 5345 | .{ .src = .{ .to_mem, .none } }, | 5837 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5346 | }, | 5838 | }, |
| 5347 | .extra_temps = .{ | 5839 | .extra_temps = .{ |
| 5348 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 5840 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 5841 | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, |
| | 5842 | .unused, |
| | 5843 | .unused, |
| 5349 | .unused, | 5844 | .unused, |
| 5350 | .unused, | 5845 | .unused, |
| 5351 | .unused, | 5846 | .unused, |
| 5352 | .unused, | 5847 | .unused, |
| 5353 | .unused, | 5848 | .unused, |
| 5354 | }, | 5849 | }, |
| 5355 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5850 | .dst_temps = .{.mem}, |
| 5356 | .clobbers = .{ .eflags = true }, | 5851 | .clobbers = .{ .eflags = true }, |
| 5357 | .each = .{ .once = &.{ | 5852 | .each = .{ .once = &.{ |
| 5358 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, | 5853 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5359 | .{ .@"0:", ._, .mov, .dst0d, .si(-1), ._, ._ }, | 5854 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5360 | .{ ._, ._r, .bs, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, | 5855 | .{ ._, .vp_b, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 5361 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, | 5856 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 5362 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, | 5857 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 5363 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 5858 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5364 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, | | |
| 5365 | .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, | | |
| 5366 | .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, | | |
| 5367 | } }, | 5859 | } }, |
| 5368 | }, .{ | 5860 | }, .{ |
| 5369 | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, | 5861 | .required_features = .{ .sse4_1, null, null, null }, |
| 5370 | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, | 5862 | .src_constraints = .{ |
| | 5863 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 5864 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 5865 | }, |
| 5371 | .patterns = &.{ | 5866 | .patterns = &.{ |
| 5372 | .{ .src = .{ .to_mem, .none } }, | 5867 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5373 | }, | 5868 | }, |
| 5374 | .extra_temps = .{ | 5869 | .extra_temps = .{ |
| 5375 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 5870 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 5871 | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, |
| | 5872 | .unused, |
| | 5873 | .unused, |
| 5376 | .unused, | 5874 | .unused, |
| 5377 | .unused, | 5875 | .unused, |
| 5378 | .unused, | 5876 | .unused, |
| 5379 | .unused, | 5877 | .unused, |
| 5380 | .unused, | 5878 | .unused, |
| 5381 | }, | 5879 | }, |
| 5382 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5880 | .dst_temps = .{.mem}, |
| 5383 | .clobbers = .{ .eflags = true }, | 5881 | .clobbers = .{ .eflags = true }, |
| 5384 | .each = .{ .once = &.{ | 5882 | .each = .{ .once = &.{ |
| 5385 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, | 5883 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5386 | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, | 5884 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5387 | .{ ._, ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, | 5885 | .{ ._, .p_b, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 5388 | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, | 5886 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 5389 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, | 5887 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 5390 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 5888 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5391 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, | | |
| 5392 | .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, | | |
| 5393 | .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, | | |
| 5394 | } }, | 5889 | } }, |
| 5395 | }, .{ | 5890 | }, .{ |
| 5396 | .required_features = .{ .@"64bit", .lzcnt, null, null }, | 5891 | .required_features = .{ .sse2, null, null, null }, |
| 5397 | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, | 5892 | .src_constraints = .{ |
| | 5893 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 5894 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| | 5895 | }, |
| 5398 | .patterns = &.{ | 5896 | .patterns = &.{ |
| 5399 | .{ .src = .{ .to_mem, .none } }, | 5897 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5400 | }, | 5898 | }, |
| 5401 | .extra_temps = .{ | 5899 | .extra_temps = .{ |
| 5402 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 5900 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 5901 | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, |
| | 5902 | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, |
| | 5903 | .unused, |
| 5403 | .unused, | 5904 | .unused, |
| 5404 | .unused, | 5905 | .unused, |
| 5405 | .unused, | 5906 | .unused, |
| 5406 | .unused, | 5907 | .unused, |
| 5407 | .unused, | 5908 | .unused, |
| 5408 | }, | 5909 | }, |
| 5409 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5910 | .dst_temps = .{.mem}, |
| 5410 | .clobbers = .{ .eflags = true }, | 5911 | .clobbers = .{ .eflags = true }, |
| 5411 | .each = .{ .once = &.{ | 5912 | .each = .{ .once = &.{ |
| 5412 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, | 5913 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5413 | .{ .@"0:", ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, | 5914 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5414 | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, | 5915 | .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 5415 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, | 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), ._, ._ }, |
| 5416 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 5922 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5417 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, | | |
| 5418 | .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, | | |
| 5419 | .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, | | |
| 5420 | } }, | 5923 | } }, |
| 5421 | }, .{ | 5924 | }, .{ |
| 5422 | .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null }, | 5925 | .required_features = .{ .cmov, .slow_incdec, null, null }, |
| 5423 | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, | 5926 | .src_constraints = .{ |
| | 5927 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 5928 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 5929 | }, |
| 5424 | .patterns = &.{ | 5930 | .patterns = &.{ |
| 5425 | .{ .src = .{ .to_mem, .none } }, | 5931 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5426 | }, | 5932 | }, |
| 5427 | .extra_temps = .{ | 5933 | .extra_temps = .{ |
| 5428 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 5934 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 5935 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| | 5936 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| | 5937 | .unused, |
| 5429 | .unused, | 5938 | .unused, |
| 5430 | .unused, | 5939 | .unused, |
| 5431 | .unused, | 5940 | .unused, |
| 5432 | .unused, | 5941 | .unused, |
| 5433 | .unused, | 5942 | .unused, |
| 5434 | }, | 5943 | }, |
| 5435 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5944 | .dst_temps = .{.mem}, |
| 5436 | .clobbers = .{ .eflags = true }, | 5945 | .clobbers = .{ .eflags = true }, |
| 5437 | .each = .{ .once = &.{ | 5946 | .each = .{ .once = &.{ |
| 5438 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, | 5947 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5439 | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, | 5948 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 5440 | .{ ._, ._r, .bs, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, | 5949 | .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 5441 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, | 5950 | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, |
| 5442 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, | 5951 | .{ ._, ._ge, .cmov, .tmp1d, .tmp2d, ._, ._ }, |
| | 5952 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| | 5953 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 5443 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 5954 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5444 | .{ ._, ._, .mov, .dst0d, .si(-1), ._, ._ }, | | |
| 5445 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, | | |
| 5446 | .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, | | |
| 5447 | .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, | | |
| 5448 | } }, | 5955 | } }, |
| 5449 | }, .{ | 5956 | }, .{ |
| 5450 | .required_features = .{ .@"64bit", null, null, null }, | 5957 | .required_features = .{ .cmov, null, null, null }, |
| 5451 | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, | 5958 | .src_constraints = .{ |
| | 5959 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 5960 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 5961 | }, |
| 5452 | .patterns = &.{ | 5962 | .patterns = &.{ |
| 5453 | .{ .src = .{ .to_mem, .none } }, | 5963 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5454 | }, | 5964 | }, |
| 5455 | .extra_temps = .{ | 5965 | .extra_temps = .{ |
| 5456 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 5966 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 5967 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| | 5968 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| | 5969 | .unused, |
| 5457 | .unused, | 5970 | .unused, |
| 5458 | .unused, | 5971 | .unused, |
| 5459 | .unused, | 5972 | .unused, |
| 5460 | .unused, | 5973 | .unused, |
| 5461 | .unused, | 5974 | .unused, |
| 5462 | }, | 5975 | }, |
| 5463 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5976 | .dst_temps = .{.mem}, |
| 5464 | .clobbers = .{ .eflags = true }, | 5977 | .clobbers = .{ .eflags = true }, |
| 5465 | .each = .{ .once = &.{ | 5978 | .each = .{ .once = &.{ |
| 5466 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, | 5979 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5467 | .{ .@"0:", ._, .mov, .dst0d, .si(-1), ._, ._ }, | 5980 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 5468 | .{ ._, ._r, .bs, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, | 5981 | .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 5469 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, | 5982 | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, |
| 5470 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, | 5983 | .{ ._, ._ge, .cmov, .tmp1d, .tmp2d, ._, ._ }, |
| 5471 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 5984 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 5472 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, | 5985 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 5473 | .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, | 5986 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 5474 | .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, | | |
| 5475 | } }, | 5987 | } }, |
| 5476 | }, .{ | 5988 | }, .{ |
| 5477 | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, | 5989 | .required_features = .{ .slow_incdec, null, null, null }, |
| 5478 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any }, | 5990 | .src_constraints = .{ |
| | 5991 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 5992 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 5993 | }, |
| 5479 | .patterns = &.{ | 5994 | .patterns = &.{ |
| 5480 | .{ .src = .{ .to_mem, .none } }, | 5995 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5481 | }, | 5996 | }, |
| 5482 | .extra_temps = .{ | 5997 | .extra_temps = .{ |
| 5483 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 5998 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5484 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 5999 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| | 6000 | .unused, |
| | 6001 | .unused, |
| | 6002 | .unused, |
| 5485 | .unused, | 6003 | .unused, |
| 5486 | .unused, | 6004 | .unused, |
| 5487 | .unused, | 6005 | .unused, |
| 5488 | .unused, | 6006 | .unused, |
| 5489 | }, | 6007 | }, |
| 5490 | .dst_temps = .{.{ .rc = .general_purpose }}, | 6008 | .dst_temps = .{.mem}, |
| 5491 | .clobbers = .{ .eflags = true }, | 6009 | .clobbers = .{ .eflags = true }, |
| 5492 | .each = .{ .once = &.{ | 6010 | .each = .{ .once = &.{ |
| 5493 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, | 6011 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5494 | .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, | 6012 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 5495 | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, | 6013 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 5496 | .{ ._, ._, .@"and", .tmp1q, .memi(.src0q, .tmp0), ._, ._ }, | 6014 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, |
| 5497 | .{ ._, ._, .lzcnt, .dst0q, .tmp1q, ._, ._ }, | 6015 | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 5498 | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, | 6016 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 5499 | .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ }, | 6017 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 5500 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, | | |
| 5501 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6018 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5502 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, | | |
| 5503 | .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, | | |
| 5504 | .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, | | |
| 5505 | } }, | 6019 | } }, |
| 5506 | }, .{ | 6020 | }, .{ |
| 5507 | .required_features = .{ .@"64bit", .lzcnt, null, null }, | 6021 | .src_constraints = .{ |
| 5508 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any }, | 6022 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 6023 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| | 6024 | }, |
| 5509 | .patterns = &.{ | 6025 | .patterns = &.{ |
| 5510 | .{ .src = .{ .to_mem, .none } }, | 6026 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5511 | }, | 6027 | }, |
| 5512 | .extra_temps = .{ | 6028 | .extra_temps = .{ |
| 5513 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6029 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5514 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 6030 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| | 6031 | .unused, |
| | 6032 | .unused, |
| | 6033 | .unused, |
| 5515 | .unused, | 6034 | .unused, |
| 5516 | .unused, | 6035 | .unused, |
| 5517 | .unused, | 6036 | .unused, |
| 5518 | .unused, | 6037 | .unused, |
| 5519 | }, | 6038 | }, |
| 5520 | .dst_temps = .{.{ .rc = .general_purpose }}, | 6039 | .dst_temps = .{.mem}, |
| 5521 | .clobbers = .{ .eflags = true }, | 6040 | .clobbers = .{ .eflags = true }, |
| 5522 | .each = .{ .once = &.{ | 6041 | .each = .{ .once = &.{ |
| 5523 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, | 6042 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5524 | .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, | 6043 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 5525 | .{ .@"0:", ._, .@"and", .tmp1q, .memi(.src0q, .tmp0), ._, ._ }, | 6044 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 5526 | .{ ._, ._, .lzcnt, .dst0q, .tmp1q, ._, ._ }, | 6045 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, |
| 5527 | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, | 6046 | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 5528 | .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ }, | 6047 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 5529 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, | 6048 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 5530 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6049 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 5531 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, | | |
| 5532 | .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, | | |
| 5533 | .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, | | |
| 5534 | } }, | 6050 | } }, |
| 5535 | }, .{ | 6051 | }, .{ |
| 5536 | .required_features = .{ .@"64bit", null, null, null }, | 6052 | .required_features = .{ .sse, .mmx, null, null }, |
| 5537 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any }, | 6053 | .src_constraints = .{ |
| | 6054 | .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } }, |
| | 6055 | .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } }, |
| | 6056 | }, |
| 5538 | .patterns = &.{ | 6057 | .patterns = &.{ |
| 5539 | .{ .src = .{ .to_mem, .none } }, | 6058 | .{ .src = .{ .to_mut_mmx, .mem } }, |
| | 6059 | .{ .src = .{ .mem, .to_mut_mmx }, .commute = .{ 0, 1 } }, |
| | 6060 | .{ .src = .{ .to_mut_mmx, .to_mmx } }, |
| 5540 | }, | 6061 | }, |
| 5541 | .extra_temps = .{ | 6062 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5542 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6063 | .each = .{ .once = &.{ |
| 5543 | .unused, | 6064 | .{ ._, .p_b, .minu, .dst0q, .src1q, ._, ._ }, |
| 5544 | .unused, | 6065 | } }, |
| 5545 | .unused, | 6066 | }, .{ |
| 5546 | .unused, | 6067 | .required_features = .{ .avx, null, null, null }, |
| 5547 | .unused, | 6068 | .src_constraints = .{ |
| | 6069 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| | 6070 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| 5548 | }, | 6071 | }, |
| 5549 | .dst_temps = .{.{ .rc = .general_purpose }}, | 6072 | .patterns = &.{ |
| 5550 | .clobbers = .{ .eflags = true }, | 6073 | .{ .src = .{ .to_sse, .mem } }, |
| | 6074 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 6075 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 6076 | }, |
| | 6077 | .dst_temps = .{.{ .rc = .sse }}, |
| 5551 | .each = .{ .once = &.{ | 6078 | .each = .{ .once = &.{ |
| 5552 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, | 6079 | .{ ._, .vp_b, .minu, .dst0x, .src0x, .src1x, ._ }, |
| 5553 | .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ }, | | |
| 5554 | .{ .@"0:", ._, .@"and", .dst0q, .memi(.src0q, .tmp0), ._, ._ }, | | |
| 5555 | .{ ._, ._r, .bs, .dst0q, .dst0q, ._, ._ }, | | |
| 5556 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, | | |
| 5557 | .{ ._, ._, .mov, .dst0q, .si(-1), ._, ._ }, | | |
| 5558 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, | | |
| 5559 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 5560 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, | | |
| 5561 | .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, | | |
| 5562 | .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, | | |
| 5563 | } }, | 6080 | } }, |
| 5564 | }, .{ | 6081 | }, .{ |
| 5565 | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, | 6082 | .required_features = .{ .sse2, null, null, null }, |
| 5566 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any }, | 6083 | .src_constraints = .{ |
| | 6084 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| | 6085 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| | 6086 | }, |
| 5567 | .patterns = &.{ | 6087 | .patterns = &.{ |
| 5568 | .{ .src = .{ .to_mem, .none } }, | 6088 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 6089 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 6090 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| | 6091 | }, |
| | 6092 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 6093 | .each = .{ .once = &.{ |
| | 6094 | .{ ._, .p_b, .minu, .dst0x, .src1x, ._, ._ }, |
| | 6095 | } }, |
| | 6096 | }, .{ |
| | 6097 | .required_features = .{ .avx2, null, null, null }, |
| | 6098 | .src_constraints = .{ |
| | 6099 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, |
| | 6100 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, |
| | 6101 | }, |
| | 6102 | .patterns = &.{ |
| | 6103 | .{ .src = .{ .to_sse, .mem } }, |
| | 6104 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 6105 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 6106 | }, |
| | 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 } }, |
| 5569 | }, | 6119 | }, |
| 5570 | .extra_temps = .{ | 6120 | .extra_temps = .{ |
| 5571 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6121 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5572 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 6122 | .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } }, |
| | 6123 | .unused, |
| | 6124 | .unused, |
| | 6125 | .unused, |
| 5573 | .unused, | 6126 | .unused, |
| 5574 | .unused, | 6127 | .unused, |
| 5575 | .unused, | 6128 | .unused, |
| 5576 | .unused, | 6129 | .unused, |
| 5577 | }, | 6130 | }, |
| 5578 | .dst_temps = .{.{ .rc = .general_purpose }}, | 6131 | .dst_temps = .{.mem}, |
| 5579 | .clobbers = .{ .eflags = true }, | 6132 | .clobbers = .{ .eflags = true }, |
| 5580 | .each = .{ .once = &.{ | 6133 | .each = .{ .once = &.{ |
| 5581 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, | 6134 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5582 | .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, | 6135 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 5583 | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, | 6136 | .{ ._, .vp_b, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 5584 | .{ ._, ._, .@"and", .tmp1q, .memi(.src0q, .tmp0), ._, ._ }, | 6137 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 5585 | .{ ._, ._, .lzcnt, .dst0q, .tmp1q, ._, ._ }, | 6138 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 5586 | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, | | |
| 5587 | .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ }, | | |
| 5588 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, | | |
| 5589 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6139 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5590 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, | | |
| 5591 | .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, | | |
| 5592 | .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, | | |
| 5593 | } }, | 6140 | } }, |
| 5594 | }, .{ | 6141 | }, .{ |
| 5595 | .required_features = .{ .@"64bit", .lzcnt, null, null }, | 6142 | .required_features = .{ .avx, null, null, null }, |
| 5596 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any }, | 6143 | .src_constraints = .{ |
| | 6144 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| | 6145 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| | 6146 | }, |
| 5597 | .patterns = &.{ | 6147 | .patterns = &.{ |
| 5598 | .{ .src = .{ .to_mem, .none } }, | 6148 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5599 | }, | 6149 | }, |
| 5600 | .extra_temps = .{ | 6150 | .extra_temps = .{ |
| 5601 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6151 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5602 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 6152 | .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } }, |
| | 6153 | .unused, |
| | 6154 | .unused, |
| | 6155 | .unused, |
| 5603 | .unused, | 6156 | .unused, |
| 5604 | .unused, | 6157 | .unused, |
| 5605 | .unused, | 6158 | .unused, |
| 5606 | .unused, | 6159 | .unused, |
| 5607 | }, | 6160 | }, |
| 5608 | .dst_temps = .{.{ .rc = .general_purpose }}, | 6161 | .dst_temps = .{.mem}, |
| 5609 | .clobbers = .{ .eflags = true }, | 6162 | .clobbers = .{ .eflags = true }, |
| 5610 | .each = .{ .once = &.{ | 6163 | .each = .{ .once = &.{ |
| 5611 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, | 6164 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5612 | .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, | 6165 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5613 | .{ .@"0:", ._, .@"and", .tmp1q, .memi(.src0q, .tmp0), ._, ._ }, | 6166 | .{ ._, .vp_b, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 5614 | .{ ._, ._, .lzcnt, .dst0q, .tmp1q, ._, ._ }, | 6167 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 5615 | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, | 6168 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 5616 | .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ }, | | |
| 5617 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, | | |
| 5618 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6169 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5619 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, | | |
| 5620 | .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, | | |
| 5621 | .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, | | |
| 5622 | } }, | 6170 | } }, |
| 5623 | }, .{ | 6171 | }, .{ |
| 5624 | .required_features = .{ .@"64bit", null, null, null }, | 6172 | .required_features = .{ .sse2, null, null, null }, |
| 5625 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any }, | 6173 | .src_constraints = .{ |
| | 6174 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| | 6175 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| | 6176 | }, |
| 5626 | .patterns = &.{ | 6177 | .patterns = &.{ |
| 5627 | .{ .src = .{ .to_mem, .none } }, | 6178 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5628 | }, | 6179 | }, |
| 5629 | .extra_temps = .{ | 6180 | .extra_temps = .{ |
| 5630 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6181 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 6182 | .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } }, |
| | 6183 | .unused, |
| | 6184 | .unused, |
| 5631 | .unused, | 6185 | .unused, |
| 5632 | .unused, | 6186 | .unused, |
| 5633 | .unused, | 6187 | .unused, |
| 5634 | .unused, | 6188 | .unused, |
| 5635 | .unused, | 6189 | .unused, |
| 5636 | }, | 6190 | }, |
| 5637 | .dst_temps = .{.{ .rc = .general_purpose }}, | 6191 | .dst_temps = .{.mem}, |
| 5638 | .clobbers = .{ .eflags = true }, | 6192 | .clobbers = .{ .eflags = true }, |
| 5639 | .each = .{ .once = &.{ | 6193 | .each = .{ .once = &.{ |
| 5640 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, | 6194 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5641 | .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ }, | 6195 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5642 | .{ .@"0:", ._, .@"and", .dst0q, .memi(.src0q, .tmp0), ._, ._ }, | 6196 | .{ ._, .p_b, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 5643 | .{ ._, ._r, .bs, .dst0q, .dst0q, ._, ._ }, | 6197 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 5644 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, | 6198 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 5645 | .{ ._, ._, .mov, .dst0q, .si(-1), ._, ._ }, | | |
| 5646 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, | | |
| 5647 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6199 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5648 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, | | |
| 5649 | .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, | | |
| 5650 | .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, | | |
| 5651 | } }, | 6200 | } }, |
| 5652 | }, .{ | 6201 | }, .{ |
| 5653 | .required_features = .{ .lzcnt, .slow_incdec, null, null }, | 6202 | .required_features = .{ .cmov, .slow_incdec, null, null }, |
| 5654 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .any }, | 6203 | .src_constraints = .{ |
| | 6204 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 6205 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 6206 | }, |
| 5655 | .patterns = &.{ | 6207 | .patterns = &.{ |
| 5656 | .{ .src = .{ .to_mem, .none } }, | 6208 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5657 | }, | 6209 | }, |
| 5658 | .extra_temps = .{ | 6210 | .extra_temps = .{ |
| 5659 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6211 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5660 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6212 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 6213 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 6214 | .unused, |
| | 6215 | .unused, |
| 5661 | .unused, | 6216 | .unused, |
| 5662 | .unused, | 6217 | .unused, |
| 5663 | .unused, | 6218 | .unused, |
| ... | @@ -5666,24 +6221,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5666,24 +6221,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5666 | .dst_temps = .{.mem}, | 6221 | .dst_temps = .{.mem}, |
| 5667 | .clobbers = .{ .eflags = true }, | 6222 | .clobbers = .{ .eflags = true }, |
| 5668 | .each = .{ .once = &.{ | 6223 | .each = .{ .once = &.{ |
| 5669 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6224 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5670 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, | 6225 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 5671 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, | 6226 | .{ ._, ._, .movzx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 5672 | .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ }, | 6227 | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, |
| 5673 | .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ }, | 6228 | .{ ._, ._ae, .cmov, .tmp1d, .tmp2d, ._, ._ }, |
| 5674 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, | 6229 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 5675 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | 6230 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 5676 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6231 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5677 | } }, | 6232 | } }, |
| 5678 | }, .{ | 6233 | }, .{ |
| 5679 | .required_features = .{ .lzcnt, null, null, null }, | 6234 | .required_features = .{ .cmov, null, null, null }, |
| 5680 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .any }, | 6235 | .src_constraints = .{ |
| | 6236 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 6237 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 6238 | }, |
| 5681 | .patterns = &.{ | 6239 | .patterns = &.{ |
| 5682 | .{ .src = .{ .to_mem, .none } }, | 6240 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5683 | }, | 6241 | }, |
| 5684 | .extra_temps = .{ | 6242 | .extra_temps = .{ |
| 5685 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6243 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5686 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6244 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 6245 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 6246 | .unused, |
| | 6247 | .unused, |
| 5687 | .unused, | 6248 | .unused, |
| 5688 | .unused, | 6249 | .unused, |
| 5689 | .unused, | 6250 | .unused, |
| ... | @@ -5692,24 +6253,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5692,24 +6253,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5692 | .dst_temps = .{.mem}, | 6253 | .dst_temps = .{.mem}, |
| 5693 | .clobbers = .{ .eflags = true }, | 6254 | .clobbers = .{ .eflags = true }, |
| 5694 | .each = .{ .once = &.{ | 6255 | .each = .{ .once = &.{ |
| 5695 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6256 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5696 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, | 6257 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 5697 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, | 6258 | .{ ._, ._, .movzx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 5698 | .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ }, | 6259 | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, |
| 5699 | .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ }, | 6260 | .{ ._, ._ae, .cmov, .tmp1d, .tmp2d, ._, ._ }, |
| 5700 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, | 6261 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 5701 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | 6262 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 5702 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | 6263 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 5703 | } }, | 6264 | } }, |
| 5704 | }, .{ | 6265 | }, .{ |
| 5705 | .required_features = .{ .lzcnt, .slow_incdec, null, null }, | 6266 | .required_features = .{ .slow_incdec, null, null, null }, |
| 5706 | .src_constraints = .{ .{ .scalar_int_is = .word }, .any }, | 6267 | .src_constraints = .{ |
| | 6268 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 6269 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 6270 | }, |
| 5707 | .patterns = &.{ | 6271 | .patterns = &.{ |
| 5708 | .{ .src = .{ .to_mem, .none } }, | 6272 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5709 | }, | 6273 | }, |
| 5710 | .extra_temps = .{ | 6274 | .extra_temps = .{ |
| 5711 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6275 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5712 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6276 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 6277 | .unused, |
| | 6278 | .unused, |
| | 6279 | .unused, |
| 5713 | .unused, | 6280 | .unused, |
| 5714 | .unused, | 6281 | .unused, |
| 5715 | .unused, | 6282 | .unused, |
| ... | @@ -5718,24 +6285,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5718,24 +6285,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5718 | .dst_temps = .{.mem}, | 6285 | .dst_temps = .{.mem}, |
| 5719 | .clobbers = .{ .eflags = true }, | 6286 | .clobbers = .{ .eflags = true }, |
| 5720 | .each = .{ .once = &.{ | 6287 | .each = .{ .once = &.{ |
| 5721 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6288 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5722 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, | 6289 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 5723 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, | 6290 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 5724 | .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ }, | 6291 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, |
| 5725 | .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ }, | 6292 | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 5726 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, | 6293 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 5727 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | 6294 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 5728 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6295 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5729 | } }, | 6296 | } }, |
| 5730 | }, .{ | 6297 | }, .{ |
| 5731 | .required_features = .{ .lzcnt, null, null, null }, | 6298 | .src_constraints = .{ |
| 5732 | .src_constraints = .{ .{ .scalar_int_is = .word }, .any }, | 6299 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 6300 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| | 6301 | }, |
| 5733 | .patterns = &.{ | 6302 | .patterns = &.{ |
| 5734 | .{ .src = .{ .to_mem, .none } }, | 6303 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5735 | }, | 6304 | }, |
| 5736 | .extra_temps = .{ | 6305 | .extra_temps = .{ |
| 5737 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6306 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5738 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6307 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 6308 | .unused, |
| | 6309 | .unused, |
| | 6310 | .unused, |
| 5739 | .unused, | 6311 | .unused, |
| 5740 | .unused, | 6312 | .unused, |
| 5741 | .unused, | 6313 | .unused, |
| ... | @@ -5744,24 +6316,90 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5744,24 +6316,90 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5744 | .dst_temps = .{.mem}, | 6316 | .dst_temps = .{.mem}, |
| 5745 | .clobbers = .{ .eflags = true }, | 6317 | .clobbers = .{ .eflags = true }, |
| 5746 | .each = .{ .once = &.{ | 6318 | .each = .{ .once = &.{ |
| 5747 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6319 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5748 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, | 6320 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 5749 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, | 6321 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 5750 | .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ }, | 6322 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, |
| 5751 | .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ }, | 6323 | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 5752 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, | 6324 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 5753 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | 6325 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 5754 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | 6326 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 5755 | } }, | 6327 | } }, |
| 5756 | }, .{ | 6328 | }, .{ |
| 5757 | .required_features = .{ .lzcnt, .slow_incdec, null, null }, | 6329 | .required_features = .{ .sse, .mmx, null, null }, |
| 5758 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .any }, | 6330 | .src_constraints = .{ |
| | 6331 | .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, |
| | 6332 | .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, |
| | 6333 | }, |
| 5759 | .patterns = &.{ | 6334 | .patterns = &.{ |
| 5760 | .{ .src = .{ .to_mem, .none } }, | 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 }, |
| | 6390 | .src_constraints = .{ |
| | 6391 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } }, |
| | 6392 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } }, |
| | 6393 | }, |
| | 6394 | .patterns = &.{ |
| | 6395 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5761 | }, | 6396 | }, |
| 5762 | .extra_temps = .{ | 6397 | .extra_temps = .{ |
| 5763 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6398 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5764 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6399 | .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } }, |
| | 6400 | .unused, |
| | 6401 | .unused, |
| | 6402 | .unused, |
| 5765 | .unused, | 6403 | .unused, |
| 5766 | .unused, | 6404 | .unused, |
| 5767 | .unused, | 6405 | .unused, |
| ... | @@ -5770,24 +6408,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5770,24 +6408,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5770 | .dst_temps = .{.mem}, | 6408 | .dst_temps = .{.mem}, |
| 5771 | .clobbers = .{ .eflags = true }, | 6409 | .clobbers = .{ .eflags = true }, |
| 5772 | .each = .{ .once = &.{ | 6410 | .each = .{ .once = &.{ |
| 5773 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6411 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5774 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, | 6412 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 5775 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, | 6413 | .{ ._, .vp_w, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 5776 | .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ }, | 6414 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 5777 | .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ }, | 6415 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 5778 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, | | |
| 5779 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | | |
| 5780 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6416 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5781 | } }, | 6417 | } }, |
| 5782 | }, .{ | 6418 | }, .{ |
| 5783 | .required_features = .{ .lzcnt, null, null, null }, | 6419 | .required_features = .{ .avx, null, null, null }, |
| 5784 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .any }, | 6420 | .src_constraints = .{ |
| | 6421 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| | 6422 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| | 6423 | }, |
| 5785 | .patterns = &.{ | 6424 | .patterns = &.{ |
| 5786 | .{ .src = .{ .to_mem, .none } }, | 6425 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5787 | }, | 6426 | }, |
| 5788 | .extra_temps = .{ | 6427 | .extra_temps = .{ |
| 5789 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6428 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5790 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6429 | .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } }, |
| | 6430 | .unused, |
| | 6431 | .unused, |
| | 6432 | .unused, |
| 5791 | .unused, | 6433 | .unused, |
| 5792 | .unused, | 6434 | .unused, |
| 5793 | .unused, | 6435 | .unused, |
| ... | @@ -5796,24 +6438,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5796,24 +6438,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5796 | .dst_temps = .{.mem}, | 6438 | .dst_temps = .{.mem}, |
| 5797 | .clobbers = .{ .eflags = true }, | 6439 | .clobbers = .{ .eflags = true }, |
| 5798 | .each = .{ .once = &.{ | 6440 | .each = .{ .once = &.{ |
| 5799 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6441 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5800 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, | 6442 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5801 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, | 6443 | .{ ._, .vp_w, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 5802 | .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ }, | 6444 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 5803 | .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ }, | 6445 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 5804 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, | 6446 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5805 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | | |
| 5806 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | | |
| 5807 | } }, | 6447 | } }, |
| 5808 | }, .{ | 6448 | }, .{ |
| 5809 | .required_features = .{ .@"64bit", .lzcnt, .slow_incdec, null }, | 6449 | .required_features = .{ .sse2, null, null, null }, |
| 5810 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, | 6450 | .src_constraints = .{ |
| | 6451 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| | 6452 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| | 6453 | }, |
| 5811 | .patterns = &.{ | 6454 | .patterns = &.{ |
| 5812 | .{ .src = .{ .to_mem, .none } }, | 6455 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5813 | }, | 6456 | }, |
| 5814 | .extra_temps = .{ | 6457 | .extra_temps = .{ |
| 5815 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6458 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5816 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 6459 | .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } }, |
| | 6460 | .unused, |
| | 6461 | .unused, |
| | 6462 | .unused, |
| 5817 | .unused, | 6463 | .unused, |
| 5818 | .unused, | 6464 | .unused, |
| 5819 | .unused, | 6465 | .unused, |
| ... | @@ -5822,24 +6468,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5822,24 +6468,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5822 | .dst_temps = .{.mem}, | 6468 | .dst_temps = .{.mem}, |
| 5823 | .clobbers = .{ .eflags = true }, | 6469 | .clobbers = .{ .eflags = true }, |
| 5824 | .each = .{ .once = &.{ | 6470 | .each = .{ .once = &.{ |
| 5825 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6471 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5826 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, | 6472 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5827 | .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, | 6473 | .{ ._, .p_w, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 5828 | .{ ._, ._, .lzcnt, .tmp1q, .tmp1q, ._, ._ }, | 6474 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 5829 | .{ ._, ._, .sub, .tmp1b, .sia(64, .src0, .sub_bit_size), ._, ._ }, | 6475 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 5830 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, | | |
| 5831 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | | |
| 5832 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6476 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5833 | } }, | 6477 | } }, |
| 5834 | }, .{ | 6478 | }, .{ |
| 5835 | .required_features = .{ .@"64bit", .lzcnt, null, null }, | 6479 | .required_features = .{ .cmov, null, null, null }, |
| 5836 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, | 6480 | .src_constraints = .{ |
| | 6481 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| | 6482 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| | 6483 | }, |
| 5837 | .patterns = &.{ | 6484 | .patterns = &.{ |
| 5838 | .{ .src = .{ .to_mem, .none } }, | 6485 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5839 | }, | 6486 | }, |
| 5840 | .extra_temps = .{ | 6487 | .extra_temps = .{ |
| 5841 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6488 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5842 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 6489 | .{ .type = .i16, .kind = .{ .rc = .general_purpose } }, |
| | 6490 | .unused, |
| | 6491 | .unused, |
| | 6492 | .unused, |
| 5843 | .unused, | 6493 | .unused, |
| 5844 | .unused, | 6494 | .unused, |
| 5845 | .unused, | 6495 | .unused, |
| ... | @@ -5848,83 +6498,123 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5848,83 +6498,123 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5848 | .dst_temps = .{.mem}, | 6498 | .dst_temps = .{.mem}, |
| 5849 | .clobbers = .{ .eflags = true }, | 6499 | .clobbers = .{ .eflags = true }, |
| 5850 | .each = .{ .once = &.{ | 6500 | .each = .{ .once = &.{ |
| 5851 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6501 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5852 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, | 6502 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 5853 | .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, | 6503 | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 5854 | .{ ._, ._, .lzcnt, .tmp1q, .tmp1q, ._, ._ }, | 6504 | .{ ._, ._ge, .cmov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 5855 | .{ ._, ._, .sub, .tmp1b, .sia(64, .src0, .sub_bit_size), ._, ._ }, | 6505 | .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| 5856 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, | 6506 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 5857 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | 6507 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5858 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | | |
| 5859 | } }, | 6508 | } }, |
| 5860 | }, .{ | 6509 | }, .{ |
| 5861 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, .slow_incdec, null }, | 6510 | .src_constraints = .{ |
| 5862 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .any }, | 6511 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| | 6512 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| | 6513 | }, |
| 5863 | .patterns = &.{ | 6514 | .patterns = &.{ |
| 5864 | .{ .src = .{ .to_mem, .none } }, | 6515 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5865 | }, | 6516 | }, |
| 5866 | .extra_temps = .{ | 6517 | .extra_temps = .{ |
| 5867 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6518 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5868 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6519 | .{ .type = .i16, .kind = .{ .rc = .general_purpose } }, |
| 5869 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6520 | .unused, |
| 5870 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 6521 | .unused, |
| | 6522 | .unused, |
| | 6523 | .unused, |
| | 6524 | .unused, |
| 5871 | .unused, | 6525 | .unused, |
| 5872 | .unused, | 6526 | .unused, |
| 5873 | }, | 6527 | }, |
| 5874 | .dst_temps = .{.mem}, | 6528 | .dst_temps = .{.mem}, |
| 5875 | .clobbers = .{ .eflags = true }, | 6529 | .clobbers = .{ .eflags = true }, |
| 5876 | .each = .{ .once = &.{ | 6530 | .each = .{ .once = &.{ |
| 5877 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6531 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5878 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, | 6532 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 5879 | .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, | 6533 | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 5880 | .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ }, | 6534 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, |
| 5881 | .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ }, | 6535 | .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 5882 | .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ }, | 6536 | .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| 5883 | .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 6537 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 5884 | .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ }, | | |
| 5885 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, | | |
| 5886 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | | |
| 5887 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6538 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5888 | } }, | 6539 | } }, |
| 5889 | }, .{ | 6540 | }, .{ |
| 5890 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, | 6541 | .required_features = .{ .avx, null, null, null }, |
| 5891 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .any }, | 6542 | .src_constraints = .{ |
| | 6543 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 6544 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 6545 | }, |
| 5892 | .patterns = &.{ | 6546 | .patterns = &.{ |
| 5893 | .{ .src = .{ .to_mem, .none } }, | 6547 | .{ .src = .{ .to_sse, .mem } }, |
| | 6548 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 6549 | .{ .src = .{ .to_sse, .to_sse } }, |
| 5894 | }, | 6550 | }, |
| 5895 | .extra_temps = .{ | 6551 | .dst_temps = .{.{ .rc = .sse }}, |
| 5896 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6552 | .each = .{ .once = &.{ |
| 5897 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6553 | .{ ._, .vp_w, .minu, .dst0x, .src0x, .src1x, ._ }, |
| 5898 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6554 | } }, |
| 5899 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 6555 | }, .{ |
| 5900 | .unused, | 6556 | .required_features = .{ .sse4_1, null, null, null }, |
| 5901 | .unused, | 6557 | .src_constraints = .{ |
| | 6558 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 6559 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 5902 | }, | 6560 | }, |
| 5903 | .dst_temps = .{.mem}, | 6561 | .patterns = &.{ |
| 5904 | .clobbers = .{ .eflags = true }, | 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 }}, |
| 5905 | .each = .{ .once = &.{ | 6567 | .each = .{ .once = &.{ |
| 5906 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6568 | .{ ._, .p_w, .minu, .dst0x, .src1x, ._, ._ }, |
| 5907 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, | | |
| 5908 | .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, | | |
| 5909 | .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ }, | | |
| 5910 | .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ }, | | |
| 5911 | .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ }, | | |
| 5912 | .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | | |
| 5913 | .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ }, | | |
| 5914 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, | | |
| 5915 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | | |
| 5916 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | | |
| 5917 | } }, | 6569 | } }, |
| 5918 | }, .{ | 6570 | }, .{ |
| 5919 | .required_features = .{ .bsf_bsr_0_clobbers_result, .slow_incdec, null, null }, | 6571 | .required_features = .{ .sse2, null, null, null }, |
| 5920 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .any }, | 6572 | .src_constraints = .{ |
| | 6573 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 6574 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 6575 | }, |
| 5921 | .patterns = &.{ | 6576 | .patterns = &.{ |
| 5922 | .{ .src = .{ .to_mem, .none } }, | 6577 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 6578 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 6579 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| | 6580 | }, |
| | 6581 | .dst_temps = .{.{ .rc = .sse }}, |
| | 6582 | .each = .{ .once = &.{ |
| | 6583 | .{ ._, ._dqa, .mov, .dst0x, .src0x, ._, ._ }, |
| | 6584 | .{ ._, .p_w, .subus, .src0x, .src1x, ._, ._ }, |
| | 6585 | .{ ._, .p_w, .sub, .dst0x, .src0x, ._, ._ }, |
| | 6586 | } }, |
| | 6587 | }, .{ |
| | 6588 | .required_features = .{ .avx2, null, null, null }, |
| | 6589 | .src_constraints = .{ |
| | 6590 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } }, |
| | 6591 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } }, |
| | 6592 | }, |
| | 6593 | .patterns = &.{ |
| | 6594 | .{ .src = .{ .to_sse, .mem } }, |
| | 6595 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 6596 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 6597 | }, |
| | 6598 | .dst_temps = .{.{ .rc = .sse }}, |
| | 6599 | .each = .{ .once = &.{ |
| | 6600 | .{ ._, .vp_w, .minu, .dst0y, .src0y, .src1y, ._ }, |
| | 6601 | } }, |
| | 6602 | }, .{ |
| | 6603 | .required_features = .{ .avx2, null, null, null }, |
| | 6604 | .src_constraints = .{ |
| | 6605 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } }, |
| | 6606 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } }, |
| | 6607 | }, |
| | 6608 | .patterns = &.{ |
| | 6609 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5923 | }, | 6610 | }, |
| 5924 | .extra_temps = .{ | 6611 | .extra_temps = .{ |
| 5925 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6612 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5926 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6613 | .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } }, |
| 5927 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6614 | .unused, |
| | 6615 | .unused, |
| | 6616 | .unused, |
| | 6617 | .unused, |
| 5928 | .unused, | 6618 | .unused, |
| 5929 | .unused, | 6619 | .unused, |
| 5930 | .unused, | 6620 | .unused, |
| ... | @@ -5932,28 +6622,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5932,28 +6622,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5932 | .dst_temps = .{.mem}, | 6622 | .dst_temps = .{.mem}, |
| 5933 | .clobbers = .{ .eflags = true }, | 6623 | .clobbers = .{ .eflags = true }, |
| 5934 | .each = .{ .once = &.{ | 6624 | .each = .{ .once = &.{ |
| 5935 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6625 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5936 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, | 6626 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 5937 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, | 6627 | .{ ._, .vp_w, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 5938 | .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ }, | 6628 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 5939 | .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ }, | 6629 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 5940 | .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, | | |
| 5941 | .{ ._, ._c, .st, ._, ._, ._, ._ }, | | |
| 5942 | .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ }, | | |
| 5943 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ }, | | |
| 5944 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | | |
| 5945 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6630 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5946 | } }, | 6631 | } }, |
| 5947 | }, .{ | 6632 | }, .{ |
| 5948 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, | 6633 | .required_features = .{ .avx, null, null, null }, |
| 5949 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .any }, | 6634 | .src_constraints = .{ |
| | 6635 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 6636 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 6637 | }, |
| 5950 | .patterns = &.{ | 6638 | .patterns = &.{ |
| 5951 | .{ .src = .{ .to_mem, .none } }, | 6639 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5952 | }, | 6640 | }, |
| 5953 | .extra_temps = .{ | 6641 | .extra_temps = .{ |
| 5954 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6642 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5955 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6643 | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, |
| 5956 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6644 | .unused, |
| | 6645 | .unused, |
| | 6646 | .unused, |
| | 6647 | .unused, |
| 5957 | .unused, | 6648 | .unused, |
| 5958 | .unused, | 6649 | .unused, |
| 5959 | .unused, | 6650 | .unused, |
| ... | @@ -5961,28 +6652,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5961,28 +6652,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5961 | .dst_temps = .{.mem}, | 6652 | .dst_temps = .{.mem}, |
| 5962 | .clobbers = .{ .eflags = true }, | 6653 | .clobbers = .{ .eflags = true }, |
| 5963 | .each = .{ .once = &.{ | 6654 | .each = .{ .once = &.{ |
| 5964 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6655 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5965 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, | 6656 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5966 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, | 6657 | .{ ._, .vp_w, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 5967 | .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ }, | 6658 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 5968 | .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ }, | 6659 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 5969 | .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, | 6660 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5970 | .{ ._, ._c, .st, ._, ._, ._, ._ }, | | |
| 5971 | .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ }, | | |
| 5972 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ }, | | |
| 5973 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | | |
| 5974 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | | |
| 5975 | } }, | 6661 | } }, |
| 5976 | }, .{ | 6662 | }, .{ |
| 5977 | .required_features = .{ .slow_incdec, null, null, null }, | 6663 | .required_features = .{ .sse4_1, null, null, null }, |
| 5978 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .any }, | 6664 | .src_constraints = .{ |
| | 6665 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 6666 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 6667 | }, |
| 5979 | .patterns = &.{ | 6668 | .patterns = &.{ |
| 5980 | .{ .src = .{ .to_mem, .none } }, | 6669 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5981 | }, | 6670 | }, |
| 5982 | .extra_temps = .{ | 6671 | .extra_temps = .{ |
| 5983 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6672 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5984 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6673 | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, |
| 5985 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6674 | .unused, |
| | 6675 | .unused, |
| | 6676 | .unused, |
| | 6677 | .unused, |
| 5986 | .unused, | 6678 | .unused, |
| 5987 | .unused, | 6679 | .unused, |
| 5988 | .unused, | 6680 | .unused, |
| ... | @@ -5990,26 +6682,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5990,26 +6682,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5990 | .dst_temps = .{.mem}, | 6682 | .dst_temps = .{.mem}, |
| 5991 | .clobbers = .{ .eflags = true }, | 6683 | .clobbers = .{ .eflags = true }, |
| 5992 | .each = .{ .once = &.{ | 6684 | .each = .{ .once = &.{ |
| 5993 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6685 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5994 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, | 6686 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5995 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, | 6687 | .{ ._, .p_w, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 5996 | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, | 6688 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 5997 | .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ }, | 6689 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 5998 | .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | | |
| 5999 | .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ }, | | |
| 6000 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, | | |
| 6001 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | | |
| 6002 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6690 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6003 | } }, | 6691 | } }, |
| 6004 | }, .{ | 6692 | }, .{ |
| 6005 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .any }, | 6693 | .required_features = .{ .sse2, null, null, null }, |
| | 6694 | .src_constraints = .{ |
| | 6695 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 6696 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| | 6697 | }, |
| 6006 | .patterns = &.{ | 6698 | .patterns = &.{ |
| 6007 | .{ .src = .{ .to_mem, .none } }, | 6699 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6008 | }, | 6700 | }, |
| 6009 | .extra_temps = .{ | 6701 | .extra_temps = .{ |
| 6010 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6702 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6011 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6703 | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, |
| 6012 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6704 | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, |
| | 6705 | .unused, |
| | 6706 | .unused, |
| | 6707 | .unused, |
| 6013 | .unused, | 6708 | .unused, |
| 6014 | .unused, | 6709 | .unused, |
| 6015 | .unused, | 6710 | .unused, |
| ... | @@ -6017,85 +6712,157 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6017,85 +6712,157 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6017 | .dst_temps = .{.mem}, | 6712 | .dst_temps = .{.mem}, |
| 6018 | .clobbers = .{ .eflags = true }, | 6713 | .clobbers = .{ .eflags = true }, |
| 6019 | .each = .{ .once = &.{ | 6714 | .each = .{ .once = &.{ |
| 6020 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6715 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6021 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, | 6716 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6022 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, | 6717 | .{ ._, ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ }, |
| 6023 | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, | 6718 | .{ ._, .p_w, .subus, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6024 | .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ }, | 6719 | .{ ._, .p_w, .sub, .tmp2x, .tmp1x, ._, ._ }, |
| 6025 | .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 6720 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp2x, ._, ._ }, |
| 6026 | .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ }, | 6721 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6027 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, | 6722 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6028 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | | |
| 6029 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | | |
| 6030 | } }, | 6723 | } }, |
| 6031 | }, .{ | 6724 | }, .{ |
| 6032 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, .slow_incdec, null }, | 6725 | .required_features = .{ .cmov, null, null, null }, |
| 6033 | .src_constraints = .{ .{ .scalar_int_is = .word }, .any }, | 6726 | .src_constraints = .{ |
| | 6727 | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, |
| | 6728 | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, |
| | 6729 | }, |
| 6034 | .patterns = &.{ | 6730 | .patterns = &.{ |
| 6035 | .{ .src = .{ .to_mem, .none } }, | 6731 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6036 | }, | 6732 | }, |
| 6037 | .extra_temps = .{ | 6733 | .extra_temps = .{ |
| 6038 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6734 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6039 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6735 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| 6040 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6736 | .unused, |
| 6041 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 6737 | .unused, |
| | 6738 | .unused, |
| | 6739 | .unused, |
| | 6740 | .unused, |
| 6042 | .unused, | 6741 | .unused, |
| 6043 | .unused, | 6742 | .unused, |
| 6044 | }, | 6743 | }, |
| 6045 | .dst_temps = .{.mem}, | 6744 | .dst_temps = .{.mem}, |
| 6046 | .clobbers = .{ .eflags = true }, | 6745 | .clobbers = .{ .eflags = true }, |
| 6047 | .each = .{ .once = &.{ | 6746 | .each = .{ .once = &.{ |
| 6048 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6747 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6049 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, | 6748 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 6050 | .{ .@"0:", ._, .movzx, .tmp2d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, | 6749 | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 6051 | .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ }, | 6750 | .{ ._, ._ae, .cmov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 6052 | .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ }, | 6751 | .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| 6053 | .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ }, | 6752 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 6054 | .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | | |
| 6055 | .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ }, | | |
| 6056 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, | | |
| 6057 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | | |
| 6058 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6753 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6059 | } }, | 6754 | } }, |
| 6060 | }, .{ | 6755 | }, .{ |
| 6061 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, | 6756 | .src_constraints = .{ |
| 6062 | .src_constraints = .{ .{ .scalar_int_is = .word }, .any }, | 6757 | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, |
| | 6758 | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, |
| | 6759 | }, |
| 6063 | .patterns = &.{ | 6760 | .patterns = &.{ |
| 6064 | .{ .src = .{ .to_mem, .none } }, | 6761 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6065 | }, | 6762 | }, |
| 6066 | .extra_temps = .{ | 6763 | .extra_temps = .{ |
| 6067 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6764 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6068 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6765 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| 6069 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6766 | .unused, |
| 6070 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 6767 | .unused, |
| | 6768 | .unused, |
| | 6769 | .unused, |
| | 6770 | .unused, |
| 6071 | .unused, | 6771 | .unused, |
| 6072 | .unused, | 6772 | .unused, |
| 6073 | }, | 6773 | }, |
| 6074 | .dst_temps = .{.mem}, | 6774 | .dst_temps = .{.mem}, |
| 6075 | .clobbers = .{ .eflags = true }, | 6775 | .clobbers = .{ .eflags = true }, |
| 6076 | .each = .{ .once = &.{ | 6776 | .each = .{ .once = &.{ |
| 6077 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6777 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6078 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, | 6778 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 6079 | .{ .@"0:", ._, .movzx, .tmp2d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, | 6779 | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 6080 | .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ }, | 6780 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, |
| 6081 | .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ }, | 6781 | .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 6082 | .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ }, | 6782 | .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| 6083 | .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 6783 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 6084 | .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ }, | 6784 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6085 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, | | |
| 6086 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | | |
| 6087 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | | |
| 6088 | } }, | 6785 | } }, |
| 6089 | }, .{ | 6786 | }, .{ |
| 6090 | .required_features = .{ .bsf_bsr_0_clobbers_result, .slow_incdec, null, null }, | 6787 | .required_features = .{ .avx, null, null, null }, |
| 6091 | .src_constraints = .{ .{ .scalar_int_is = .word }, .any }, | 6788 | .src_constraints = .{ |
| | 6789 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 6790 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 6791 | }, |
| 6092 | .patterns = &.{ | 6792 | .patterns = &.{ |
| 6093 | .{ .src = .{ .to_mem, .none } }, | 6793 | .{ .src = .{ .to_sse, .mem } }, |
| | 6794 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 6795 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 6796 | }, |
| | 6797 | .dst_temps = .{.{ .rc = .sse }}, |
| | 6798 | .each = .{ .once = &.{ |
| | 6799 | .{ ._, .vp_d, .mins, .dst0x, .src0x, .src1x, ._ }, |
| | 6800 | } }, |
| | 6801 | }, .{ |
| | 6802 | .required_features = .{ .sse4_1, null, null, null }, |
| | 6803 | .src_constraints = .{ |
| | 6804 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 6805 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 6806 | }, |
| | 6807 | .patterns = &.{ |
| | 6808 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 6809 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 6810 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| | 6811 | }, |
| | 6812 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 6813 | .each = .{ .once = &.{ |
| | 6814 | .{ ._, .p_d, .mins, .dst0x, .src1x, ._, ._ }, |
| | 6815 | } }, |
| | 6816 | }, .{ |
| | 6817 | .required_features = .{ .sse2, null, null, null }, |
| | 6818 | .src_constraints = .{ |
| | 6819 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 6820 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 6821 | }, |
| | 6822 | .patterns = &.{ |
| | 6823 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 6824 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 6825 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| | 6826 | }, |
| | 6827 | .dst_temps = .{.{ .rc = .sse }}, |
| | 6828 | .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, ._, ._ }, |
| | 6834 | } }, |
| | 6835 | }, .{ |
| | 6836 | .required_features = .{ .avx2, null, null, null }, |
| | 6837 | .src_constraints = .{ |
| | 6838 | .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }, |
| | 6839 | .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }, |
| | 6840 | }, |
| | 6841 | .patterns = &.{ |
| | 6842 | .{ .src = .{ .to_sse, .mem } }, |
| | 6843 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 6844 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 6845 | }, |
| | 6846 | .dst_temps = .{.{ .rc = .sse }}, |
| | 6847 | .each = .{ .once = &.{ |
| | 6848 | .{ ._, .vp_d, .mins, .dst0y, .src0y, .src1y, ._ }, |
| | 6849 | } }, |
| | 6850 | }, .{ |
| | 6851 | .required_features = .{ .avx2, null, null, null }, |
| | 6852 | .src_constraints = .{ |
| | 6853 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }, |
| | 6854 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }, |
| | 6855 | }, |
| | 6856 | .patterns = &.{ |
| | 6857 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6094 | }, | 6858 | }, |
| 6095 | .extra_temps = .{ | 6859 | .extra_temps = .{ |
| 6096 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6860 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6097 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6861 | .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } }, |
| 6098 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6862 | .unused, |
| | 6863 | .unused, |
| | 6864 | .unused, |
| | 6865 | .unused, |
| 6099 | .unused, | 6866 | .unused, |
| 6100 | .unused, | 6867 | .unused, |
| 6101 | .unused, | 6868 | .unused, |
| ... | @@ -6103,28 +6870,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6103,28 +6870,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6103 | .dst_temps = .{.mem}, | 6870 | .dst_temps = .{.mem}, |
| 6104 | .clobbers = .{ .eflags = true }, | 6871 | .clobbers = .{ .eflags = true }, |
| 6105 | .each = .{ .once = &.{ | 6872 | .each = .{ .once = &.{ |
| 6106 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6873 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6107 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, | 6874 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 6108 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, | 6875 | .{ ._, .vp_d, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 6109 | .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ }, | 6876 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 6110 | .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ }, | 6877 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 6111 | .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, | | |
| 6112 | .{ ._, ._c, .st, ._, ._, ._, ._ }, | | |
| 6113 | .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ }, | | |
| 6114 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ }, | | |
| 6115 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | | |
| 6116 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6878 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6117 | } }, | 6879 | } }, |
| 6118 | }, .{ | 6880 | }, .{ |
| 6119 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, | 6881 | .required_features = .{ .avx, null, null, null }, |
| 6120 | .src_constraints = .{ .{ .scalar_int_is = .word }, .any }, | 6882 | .src_constraints = .{ |
| | 6883 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 6884 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 6885 | }, |
| 6121 | .patterns = &.{ | 6886 | .patterns = &.{ |
| 6122 | .{ .src = .{ .to_mem, .none } }, | 6887 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6123 | }, | 6888 | }, |
| 6124 | .extra_temps = .{ | 6889 | .extra_temps = .{ |
| 6125 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6890 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6126 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6891 | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, |
| 6127 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6892 | .unused, |
| | 6893 | .unused, |
| | 6894 | .unused, |
| | 6895 | .unused, |
| 6128 | .unused, | 6896 | .unused, |
| 6129 | .unused, | 6897 | .unused, |
| 6130 | .unused, | 6898 | .unused, |
| ... | @@ -6132,28 +6900,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6132,28 +6900,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6132 | .dst_temps = .{.mem}, | 6900 | .dst_temps = .{.mem}, |
| 6133 | .clobbers = .{ .eflags = true }, | 6901 | .clobbers = .{ .eflags = true }, |
| 6134 | .each = .{ .once = &.{ | 6902 | .each = .{ .once = &.{ |
| 6135 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6903 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6136 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, | 6904 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6137 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, | 6905 | .{ ._, .vp_d, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 6138 | .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ }, | 6906 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6139 | .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ }, | 6907 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6140 | .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, | 6908 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6141 | .{ ._, ._c, .st, ._, ._, ._, ._ }, | | |
| 6142 | .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ }, | | |
| 6143 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ }, | | |
| 6144 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | | |
| 6145 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | | |
| 6146 | } }, | 6909 | } }, |
| 6147 | }, .{ | 6910 | }, .{ |
| 6148 | .required_features = .{ .slow_incdec, null, null, null }, | 6911 | .required_features = .{ .sse4_1, null, null, null }, |
| 6149 | .src_constraints = .{ .{ .scalar_int_is = .word }, .any }, | 6912 | .src_constraints = .{ |
| | 6913 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 6914 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 6915 | }, |
| 6150 | .patterns = &.{ | 6916 | .patterns = &.{ |
| 6151 | .{ .src = .{ .to_mem, .none } }, | 6917 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6152 | }, | 6918 | }, |
| 6153 | .extra_temps = .{ | 6919 | .extra_temps = .{ |
| 6154 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6920 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6155 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6921 | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, |
| 6156 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6922 | .unused, |
| | 6923 | .unused, |
| | 6924 | .unused, |
| | 6925 | .unused, |
| 6157 | .unused, | 6926 | .unused, |
| 6158 | .unused, | 6927 | .unused, |
| 6159 | .unused, | 6928 | .unused, |
| ... | @@ -6161,26 +6930,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6161,26 +6930,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6161 | .dst_temps = .{.mem}, | 6930 | .dst_temps = .{.mem}, |
| 6162 | .clobbers = .{ .eflags = true }, | 6931 | .clobbers = .{ .eflags = true }, |
| 6163 | .each = .{ .once = &.{ | 6932 | .each = .{ .once = &.{ |
| 6164 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6933 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6165 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, | 6934 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6166 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, | 6935 | .{ ._, .p_d, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6167 | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, | 6936 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6168 | .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ }, | 6937 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6169 | .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | | |
| 6170 | .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ }, | | |
| 6171 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, | | |
| 6172 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | | |
| 6173 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 6938 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6174 | } }, | 6939 | } }, |
| 6175 | }, .{ | 6940 | }, .{ |
| 6176 | .src_constraints = .{ .{ .scalar_int_is = .word }, .any }, | 6941 | .required_features = .{ .sse2, null, null, null }, |
| | 6942 | .src_constraints = .{ |
| | 6943 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 6944 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| | 6945 | }, |
| 6177 | .patterns = &.{ | 6946 | .patterns = &.{ |
| 6178 | .{ .src = .{ .to_mem, .none } }, | 6947 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6179 | }, | 6948 | }, |
| 6180 | .extra_temps = .{ | 6949 | .extra_temps = .{ |
| 6181 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6950 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6182 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6951 | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, |
| 6183 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6952 | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, |
| | 6953 | .unused, |
| | 6954 | .unused, |
| | 6955 | .unused, |
| 6184 | .unused, | 6956 | .unused, |
| 6185 | .unused, | 6957 | .unused, |
| 6186 | .unused, | 6958 | .unused, |
| ... | @@ -6188,114 +6960,174 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6188,114 +6960,174 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6188 | .dst_temps = .{.mem}, | 6960 | .dst_temps = .{.mem}, |
| 6189 | .clobbers = .{ .eflags = true }, | 6961 | .clobbers = .{ .eflags = true }, |
| 6190 | .each = .{ .once = &.{ | 6962 | .each = .{ .once = &.{ |
| 6191 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6963 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6192 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, | 6964 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6193 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, | 6965 | .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6194 | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, | 6966 | .{ ._, .p_d, .cmpgt, .tmp1x, .tmp2x, ._, ._ }, |
| 6195 | .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ }, | 6967 | .{ ._, .p_, .@"and", .tmp2x, .tmp1x, ._, ._ }, |
| 6196 | .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 6968 | .{ ._, .p_, .andn, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6197 | .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ }, | 6969 | .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ }, |
| 6198 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, | 6970 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6199 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | 6971 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6200 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | 6972 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6201 | } }, | 6973 | } }, |
| 6202 | }, .{ | 6974 | }, .{ |
| 6203 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, .slow_incdec, null }, | 6975 | .required_features = .{ .cmov, null, null, null }, |
| 6204 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .any }, | 6976 | .src_constraints = .{ |
| | 6977 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| | 6978 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| | 6979 | }, |
| 6205 | .patterns = &.{ | 6980 | .patterns = &.{ |
| 6206 | .{ .src = .{ .to_mem, .none } }, | 6981 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6207 | }, | 6982 | }, |
| 6208 | .extra_temps = .{ | 6983 | .extra_temps = .{ |
| 6209 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 6984 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6210 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6985 | .{ .type = .i32, .kind = .{ .rc = .general_purpose } }, |
| 6211 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 6986 | .unused, |
| 6212 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 6987 | .unused, |
| | 6988 | .unused, |
| | 6989 | .unused, |
| | 6990 | .unused, |
| 6213 | .unused, | 6991 | .unused, |
| 6214 | .unused, | 6992 | .unused, |
| 6215 | }, | 6993 | }, |
| 6216 | .dst_temps = .{.mem}, | 6994 | .dst_temps = .{.mem}, |
| 6217 | .clobbers = .{ .eflags = true }, | 6995 | .clobbers = .{ .eflags = true }, |
| 6218 | .each = .{ .once = &.{ | 6996 | .each = .{ .once = &.{ |
| 6219 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6997 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6220 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, | 6998 | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 6221 | .{ .@"0:", ._, .mov, .tmp2d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, | 6999 | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 6222 | .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ }, | 7000 | .{ ._, ._ge, .cmov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 6223 | .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ }, | 7001 | .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ }, |
| 6224 | .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ }, | 7002 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| 6225 | .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | | |
| 6226 | .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ }, | | |
| 6227 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, | | |
| 6228 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | | |
| 6229 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 7003 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6230 | } }, | 7004 | } }, |
| 6231 | }, .{ | 7005 | }, .{ |
| 6232 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, | 7006 | .src_constraints = .{ |
| 6233 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .any }, | 7007 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| | 7008 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| | 7009 | }, |
| 6234 | .patterns = &.{ | 7010 | .patterns = &.{ |
| 6235 | .{ .src = .{ .to_mem, .none } }, | 7011 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6236 | }, | 7012 | }, |
| 6237 | .extra_temps = .{ | 7013 | .extra_temps = .{ |
| 6238 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 7014 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6239 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7015 | .{ .type = .i32, .kind = .{ .rc = .general_purpose } }, |
| 6240 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7016 | .unused, |
| 6241 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 7017 | .unused, |
| | 7018 | .unused, |
| | 7019 | .unused, |
| | 7020 | .unused, |
| 6242 | .unused, | 7021 | .unused, |
| 6243 | .unused, | 7022 | .unused, |
| 6244 | }, | 7023 | }, |
| 6245 | .dst_temps = .{.mem}, | 7024 | .dst_temps = .{.mem}, |
| 6246 | .clobbers = .{ .eflags = true }, | 7025 | .clobbers = .{ .eflags = true }, |
| 6247 | .each = .{ .once = &.{ | 7026 | .each = .{ .once = &.{ |
| 6248 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 7027 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6249 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, | 7028 | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 6250 | .{ .@"0:", ._, .mov, .tmp2d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, | 7029 | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 6251 | .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ }, | 7030 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, |
| 6252 | .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ }, | 7031 | .{ ._, ._, .mov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 6253 | .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ }, | 7032 | .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ }, |
| 6254 | .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 7033 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| 6255 | .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ }, | 7034 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6256 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, | | |
| 6257 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | | |
| 6258 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | | |
| 6259 | } }, | 7035 | } }, |
| 6260 | }, .{ | 7036 | }, .{ |
| 6261 | .required_features = .{ .bsf_bsr_0_clobbers_result, .slow_incdec, null, null }, | 7037 | .required_features = .{ .avx, null, null, null }, |
| 6262 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .any }, | 7038 | .src_constraints = .{ |
| | 7039 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 7040 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 7041 | }, |
| 6263 | .patterns = &.{ | 7042 | .patterns = &.{ |
| 6264 | .{ .src = .{ .to_mem, .none } }, | 7043 | .{ .src = .{ .to_sse, .mem } }, |
| | 7044 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 7045 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 7046 | }, |
| | 7047 | .dst_temps = .{.{ .rc = .sse }}, |
| | 7048 | .each = .{ .once = &.{ |
| | 7049 | .{ ._, .vp_d, .minu, .dst0x, .src0x, .src1x, ._ }, |
| | 7050 | } }, |
| | 7051 | }, .{ |
| | 7052 | .required_features = .{ .sse4_1, null, null, null }, |
| | 7053 | .src_constraints = .{ |
| | 7054 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 7055 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 7056 | }, |
| | 7057 | .patterns = &.{ |
| | 7058 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 7059 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 7060 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| | 7061 | }, |
| | 7062 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 7063 | .each = .{ .once = &.{ |
| | 7064 | .{ ._, .p_d, .minu, .dst0x, .src1x, ._, ._ }, |
| | 7065 | } }, |
| | 7066 | }, .{ |
| | 7067 | .required_features = .{ .sse2, null, null, null }, |
| | 7068 | .src_constraints = .{ |
| | 7069 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 7070 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 7071 | }, |
| | 7072 | .patterns = &.{ |
| | 7073 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 7074 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 7075 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 6265 | }, | 7076 | }, |
| 6266 | .extra_temps = .{ | 7077 | .extra_temps = .{ |
| 6267 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 7078 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 6268 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7079 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| 6269 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7080 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| | 7081 | .unused, |
| | 7082 | .unused, |
| | 7083 | .unused, |
| 6270 | .unused, | 7084 | .unused, |
| 6271 | .unused, | 7085 | .unused, |
| 6272 | .unused, | 7086 | .unused, |
| 6273 | }, | 7087 | }, |
| 6274 | .dst_temps = .{.mem}, | 7088 | .dst_temps = .{.{ .rc = .sse }}, |
| 6275 | .clobbers = .{ .eflags = true }, | | |
| 6276 | .each = .{ .once = &.{ | 7089 | .each = .{ .once = &.{ |
| 6277 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 7090 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 6278 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, | 7091 | .{ ._, ._dqa, .mov, .dst0x, .lea(.xword, .tmp0), ._, ._ }, |
| 6279 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, | 7092 | .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ }, |
| 6280 | .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ }, | 7093 | .{ ._, .p_, .xor, .dst0x, .src1x, ._, ._ }, |
| 6281 | .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ }, | 7094 | .{ ._, .p_, .xor, .tmp2x, .src0x, ._, ._ }, |
| 6282 | .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, | 7095 | .{ ._, .p_d, .cmpgt, .dst0x, .tmp2x, ._, ._ }, |
| 6283 | .{ ._, ._c, .st, ._, ._, ._, ._ }, | 7096 | .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ }, |
| 6284 | .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ }, | 7097 | .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ }, |
| 6285 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ }, | 7098 | .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ }, |
| 6286 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | | |
| 6287 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 6288 | } }, | 7099 | } }, |
| 6289 | }, .{ | 7100 | }, .{ |
| 6290 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, | 7101 | .required_features = .{ .avx2, null, null, null }, |
| 6291 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .any }, | 7102 | .src_constraints = .{ |
| | 7103 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, |
| | 7104 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, |
| | 7105 | }, |
| 6292 | .patterns = &.{ | 7106 | .patterns = &.{ |
| 6293 | .{ .src = .{ .to_mem, .none } }, | 7107 | .{ .src = .{ .to_sse, .mem } }, |
| | 7108 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 7109 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 7110 | }, |
| | 7111 | .dst_temps = .{.{ .rc = .sse }}, |
| | 7112 | .each = .{ .once = &.{ |
| | 7113 | .{ ._, .vp_d, .minu, .dst0y, .src0y, .src1y, ._ }, |
| | 7114 | } }, |
| | 7115 | }, .{ |
| | 7116 | .required_features = .{ .avx2, null, null, null }, |
| | 7117 | .src_constraints = .{ |
| | 7118 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, |
| | 7119 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, |
| | 7120 | }, |
| | 7121 | .patterns = &.{ |
| | 7122 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6294 | }, | 7123 | }, |
| 6295 | .extra_temps = .{ | 7124 | .extra_temps = .{ |
| 6296 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 7125 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6297 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7126 | .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } }, |
| 6298 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7127 | .unused, |
| | 7128 | .unused, |
| | 7129 | .unused, |
| | 7130 | .unused, |
| 6299 | .unused, | 7131 | .unused, |
| 6300 | .unused, | 7132 | .unused, |
| 6301 | .unused, | 7133 | .unused, |
| ... | @@ -6303,28 +7135,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6303,28 +7135,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6303 | .dst_temps = .{.mem}, | 7135 | .dst_temps = .{.mem}, |
| 6304 | .clobbers = .{ .eflags = true }, | 7136 | .clobbers = .{ .eflags = true }, |
| 6305 | .each = .{ .once = &.{ | 7137 | .each = .{ .once = &.{ |
| 6306 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 7138 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6307 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, | 7139 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 6308 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, | 7140 | .{ ._, .vp_d, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 6309 | .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ }, | 7141 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 6310 | .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ }, | 7142 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 6311 | .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, | 7143 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6312 | .{ ._, ._c, .st, ._, ._, ._, ._ }, | | |
| 6313 | .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ }, | | |
| 6314 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ }, | | |
| 6315 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | | |
| 6316 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | | |
| 6317 | } }, | 7144 | } }, |
| 6318 | }, .{ | 7145 | }, .{ |
| 6319 | .required_features = .{ .slow_incdec, null, null, null }, | 7146 | .required_features = .{ .avx, null, null, null }, |
| 6320 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .any }, | 7147 | .src_constraints = .{ |
| | 7148 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 7149 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 7150 | }, |
| 6321 | .patterns = &.{ | 7151 | .patterns = &.{ |
| 6322 | .{ .src = .{ .to_mem, .none } }, | 7152 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6323 | }, | 7153 | }, |
| 6324 | .extra_temps = .{ | 7154 | .extra_temps = .{ |
| 6325 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 7155 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6326 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7156 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 6327 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7157 | .unused, |
| | 7158 | .unused, |
| | 7159 | .unused, |
| | 7160 | .unused, |
| 6328 | .unused, | 7161 | .unused, |
| 6329 | .unused, | 7162 | .unused, |
| 6330 | .unused, | 7163 | .unused, |
| ... | @@ -6332,26 +7165,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6332,26 +7165,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6332 | .dst_temps = .{.mem}, | 7165 | .dst_temps = .{.mem}, |
| 6333 | .clobbers = .{ .eflags = true }, | 7166 | .clobbers = .{ .eflags = true }, |
| 6334 | .each = .{ .once = &.{ | 7167 | .each = .{ .once = &.{ |
| 6335 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 7168 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6336 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, | 7169 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6337 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, | 7170 | .{ ._, .vp_d, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 6338 | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, | 7171 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6339 | .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ }, | 7172 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6340 | .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | | |
| 6341 | .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ }, | | |
| 6342 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, | | |
| 6343 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | | |
| 6344 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 7173 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6345 | } }, | 7174 | } }, |
| 6346 | }, .{ | 7175 | }, .{ |
| 6347 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .any }, | 7176 | .required_features = .{ .sse4_1, null, null, null }, |
| | 7177 | .src_constraints = .{ |
| | 7178 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 7179 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 7180 | }, |
| 6348 | .patterns = &.{ | 7181 | .patterns = &.{ |
| 6349 | .{ .src = .{ .to_mem, .none } }, | 7182 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6350 | }, | 7183 | }, |
| 6351 | .extra_temps = .{ | 7184 | .extra_temps = .{ |
| 6352 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 7185 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6353 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7186 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 6354 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7187 | .unused, |
| | 7188 | .unused, |
| | 7189 | .unused, |
| | 7190 | .unused, |
| 6355 | .unused, | 7191 | .unused, |
| 6356 | .unused, | 7192 | .unused, |
| 6357 | .unused, | 7193 | .unused, |
| ... | @@ -6359,85 +7195,99 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6359,85 +7195,99 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6359 | .dst_temps = .{.mem}, | 7195 | .dst_temps = .{.mem}, |
| 6360 | .clobbers = .{ .eflags = true }, | 7196 | .clobbers = .{ .eflags = true }, |
| 6361 | .each = .{ .once = &.{ | 7197 | .each = .{ .once = &.{ |
| 6362 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 7198 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6363 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, | 7199 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6364 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, | 7200 | .{ ._, .p_d, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6365 | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, | 7201 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6366 | .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ }, | 7202 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6367 | .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 7203 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6368 | .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ }, | | |
| 6369 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, | | |
| 6370 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | | |
| 6371 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | | |
| 6372 | } }, | 7204 | } }, |
| 6373 | }, .{ | 7205 | }, .{ |
| 6374 | .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, .slow_incdec }, | 7206 | .required_features = .{ .sse2, null, null, null }, |
| 6375 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, | 7207 | .src_constraints = .{ |
| | 7208 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 7209 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| | 7210 | }, |
| 6376 | .patterns = &.{ | 7211 | .patterns = &.{ |
| 6377 | .{ .src = .{ .to_mem, .none } }, | 7212 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6378 | }, | 7213 | }, |
| 6379 | .extra_temps = .{ | 7214 | .extra_temps = .{ |
| 6380 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 7215 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6381 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7216 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| 6382 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7217 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 6383 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 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 } }, |
| 6384 | .unused, | 7222 | .unused, |
| 6385 | .unused, | 7223 | .unused, |
| 6386 | }, | 7224 | }, |
| 6387 | .dst_temps = .{.mem}, | 7225 | .dst_temps = .{.mem}, |
| 6388 | .clobbers = .{ .eflags = true }, | 7226 | .clobbers = .{ .eflags = true }, |
| 6389 | .each = .{ .once = &.{ | 7227 | .each = .{ .once = &.{ |
| 6390 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 7228 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 6391 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, | 7229 | .{ ._, ._dqa, .mov, .tmp2x, .lea(.xword, .tmp0), ._, ._ }, |
| 6392 | .{ .@"0:", ._, .mov, .tmp2q, .ua(.src0, .add_umax), ._, ._ }, | 7230 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6393 | .{ ._, ._, .@"and", .tmp2q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, | 7231 | .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6394 | .{ ._, ._r, .bs, .tmp2q, .tmp2q, ._, ._ }, | 7232 | .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6395 | .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ }, | 7233 | .{ ._, ._dqa, .mov, .tmp5x, .tmp3x, ._, ._ }, |
| 6396 | .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 7234 | .{ ._, ._dqa, .mov, .tmp6x, .tmp4x, ._, ._ }, |
| 6397 | .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ }, | 7235 | .{ ._, .p_, .xor, .tmp5x, .tmp2x, ._, ._ }, |
| 6398 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, | 7236 | .{ ._, .p_, .xor, .tmp6x, .tmp2x, ._, ._ }, |
| 6399 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | 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), ._, ._ }, |
| 6400 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 7243 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6401 | } }, | 7244 | } }, |
| 6402 | }, .{ | 7245 | }, .{ |
| 6403 | .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, null }, | 7246 | .required_features = .{ .cmov, null, null, null }, |
| 6404 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, | 7247 | .src_constraints = .{ |
| | 7248 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| | 7249 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| | 7250 | }, |
| 6405 | .patterns = &.{ | 7251 | .patterns = &.{ |
| 6406 | .{ .src = .{ .to_mem, .none } }, | 7252 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6407 | }, | 7253 | }, |
| 6408 | .extra_temps = .{ | 7254 | .extra_temps = .{ |
| 6409 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 7255 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6410 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7256 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6411 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7257 | .unused, |
| 6412 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 7258 | .unused, |
| | 7259 | .unused, |
| | 7260 | .unused, |
| | 7261 | .unused, |
| 6413 | .unused, | 7262 | .unused, |
| 6414 | .unused, | 7263 | .unused, |
| 6415 | }, | 7264 | }, |
| 6416 | .dst_temps = .{.mem}, | 7265 | .dst_temps = .{.mem}, |
| 6417 | .clobbers = .{ .eflags = true }, | 7266 | .clobbers = .{ .eflags = true }, |
| 6418 | .each = .{ .once = &.{ | 7267 | .each = .{ .once = &.{ |
| 6419 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 7268 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6420 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, | 7269 | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 6421 | .{ .@"0:", ._, .mov, .tmp2q, .ua(.src0, .add_umax), ._, ._ }, | 7270 | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 6422 | .{ ._, ._, .@"and", .tmp2q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, | 7271 | .{ ._, ._ae, .cmov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 6423 | .{ ._, ._r, .bs, .tmp2q, .tmp2q, ._, ._ }, | 7272 | .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ }, |
| 6424 | .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ }, | 7273 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| 6425 | .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 7274 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6426 | .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ }, | | |
| 6427 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, | | |
| 6428 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | | |
| 6429 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | | |
| 6430 | } }, | 7275 | } }, |
| 6431 | }, .{ | 7276 | }, .{ |
| 6432 | .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, .slow_incdec, null }, | 7277 | .src_constraints = .{ |
| 6433 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, | 7278 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| | 7279 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| | 7280 | }, |
| 6434 | .patterns = &.{ | 7281 | .patterns = &.{ |
| 6435 | .{ .src = .{ .to_mem, .none } }, | 7282 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6436 | }, | 7283 | }, |
| 6437 | .extra_temps = .{ | 7284 | .extra_temps = .{ |
| 6438 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 7285 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6439 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7286 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6440 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7287 | .unused, |
| | 7288 | .unused, |
| | 7289 | .unused, |
| | 7290 | .unused, |
| 6441 | .unused, | 7291 | .unused, |
| 6442 | .unused, | 7292 | .unused, |
| 6443 | .unused, | 7293 | .unused, |
| ... | @@ -6445,57 +7295,91 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6445,57 +7295,91 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6445 | .dst_temps = .{.mem}, | 7295 | .dst_temps = .{.mem}, |
| 6446 | .clobbers = .{ .eflags = true }, | 7296 | .clobbers = .{ .eflags = true }, |
| 6447 | .each = .{ .once = &.{ | 7297 | .each = .{ .once = &.{ |
| 6448 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 7298 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6449 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, | 7299 | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 6450 | .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, | 7300 | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 6451 | .{ ._, ._r, .bs, .tmp1q, .tmp1q, ._, ._ }, | 7301 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, |
| 6452 | .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ }, | 7302 | .{ ._, ._, .mov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 6453 | .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, | 7303 | .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ }, |
| 6454 | .{ ._, ._c, .st, ._, ._, ._, ._ }, | 7304 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| 6455 | .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ }, | | |
| 6456 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ }, | | |
| 6457 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | | |
| 6458 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 7305 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6459 | } }, | 7306 | } }, |
| 6460 | }, .{ | 7307 | }, .{ |
| 6461 | .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null }, | 7308 | .required_features = .{ .avx, null, null, null }, |
| 6462 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, | 7309 | .src_constraints = .{ |
| | 7310 | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| | 7311 | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| | 7312 | }, |
| 6463 | .patterns = &.{ | 7313 | .patterns = &.{ |
| 6464 | .{ .src = .{ .to_mem, .none } }, | 7314 | .{ .src = .{ .to_sse, .mem } }, |
| | 7315 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 7316 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 7317 | }, |
| | 7318 | .dst_temps = .{.{ .rc = .sse }}, |
| | 7319 | .each = .{ .once = &.{ |
| | 7320 | .{ ._, .vp_q, .cmpgt, .dst0x, .src0x, .src1x, ._ }, |
| | 7321 | .{ ._, .vp_b, .blendv, .dst0x, .src0x, .src1x, .dst0x }, |
| | 7322 | } }, |
| | 7323 | }, .{ |
| | 7324 | .required_features = .{ .sse4_2, null, null, null }, |
| | 7325 | .src_constraints = .{ |
| | 7326 | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| | 7327 | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| | 7328 | }, |
| | 7329 | .patterns = &.{ |
| | 7330 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 7331 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 7332 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 6465 | }, | 7333 | }, |
| 6466 | .extra_temps = .{ | 7334 | .extra_temps = .{ |
| 6467 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 7335 | .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } }, |
| 6468 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7336 | .unused, |
| 6469 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7337 | .unused, |
| | 7338 | .unused, |
| | 7339 | .unused, |
| | 7340 | .unused, |
| 6470 | .unused, | 7341 | .unused, |
| 6471 | .unused, | 7342 | .unused, |
| 6472 | .unused, | 7343 | .unused, |
| 6473 | }, | 7344 | }, |
| 6474 | .dst_temps = .{.mem}, | 7345 | .dst_temps = .{.{ .ref = .src0 }}, |
| 6475 | .clobbers = .{ .eflags = true }, | | |
| 6476 | .each = .{ .once = &.{ | 7346 | .each = .{ .once = &.{ |
| 6477 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 7347 | .{ ._, ._dqa, .mov, .tmp0x, .src0x, ._, ._ }, |
| 6478 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, | 7348 | .{ ._, .p_q, .cmpgt, .tmp0x, .src1x, ._, ._ }, |
| 6479 | .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, | 7349 | .{ ._, .p_b, .blendv, .dst0x, .src1x, .tmp0x, ._ }, |
| 6480 | .{ ._, ._r, .bs, .tmp1q, .tmp1q, ._, ._ }, | | |
| 6481 | .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ }, | | |
| 6482 | .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, | | |
| 6483 | .{ ._, ._c, .st, ._, ._, ._, ._ }, | | |
| 6484 | .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ }, | | |
| 6485 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ }, | | |
| 6486 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | | |
| 6487 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | | |
| 6488 | } }, | 7350 | } }, |
| 6489 | }, .{ | 7351 | }, .{ |
| 6490 | .required_features = .{ .@"64bit", .slow_incdec, null, null }, | 7352 | .required_features = .{ .avx2, null, null, null }, |
| 6491 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, | 7353 | .src_constraints = .{ |
| | 7354 | .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }, |
| | 7355 | .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }, |
| | 7356 | }, |
| 6492 | .patterns = &.{ | 7357 | .patterns = &.{ |
| 6493 | .{ .src = .{ .to_mem, .none } }, | 7358 | .{ .src = .{ .to_sse, .mem } }, |
| | 7359 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 7360 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 7361 | }, |
| | 7362 | .dst_temps = .{.{ .rc = .sse }}, |
| | 7363 | .each = .{ .once = &.{ |
| | 7364 | .{ ._, .vp_q, .cmpgt, .dst0y, .src0y, .src1y, ._ }, |
| | 7365 | .{ ._, .vp_b, .blendv, .dst0y, .src0y, .src1y, .dst0y }, |
| | 7366 | } }, |
| | 7367 | }, .{ |
| | 7368 | .required_features = .{ .avx2, null, null, null }, |
| | 7369 | .src_constraints = .{ |
| | 7370 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } }, |
| | 7371 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } }, |
| | 7372 | }, |
| | 7373 | .patterns = &.{ |
| | 7374 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6494 | }, | 7375 | }, |
| 6495 | .extra_temps = .{ | 7376 | .extra_temps = .{ |
| 6496 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 7377 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6497 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7378 | .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } }, |
| 6498 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7379 | .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } }, |
| | 7380 | .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } }, |
| | 7381 | .unused, |
| | 7382 | .unused, |
| 6499 | .unused, | 7383 | .unused, |
| 6500 | .unused, | 7384 | .unused, |
| 6501 | .unused, | 7385 | .unused, |
| ... | @@ -6503,27 +7387,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6503,27 +7387,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6503 | .dst_temps = .{.mem}, | 7387 | .dst_temps = .{.mem}, |
| 6504 | .clobbers = .{ .eflags = true }, | 7388 | .clobbers = .{ .eflags = true }, |
| 6505 | .each = .{ .once = &.{ | 7389 | .each = .{ .once = &.{ |
| 6506 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 7390 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6507 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, | 7391 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 6508 | .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, | 7392 | .{ ._, .v_dqa, .mov, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, |
| 6509 | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, | 7393 | .{ ._, .vp_q, .cmpgt, .tmp3y, .tmp1y, .tmp2y, ._ }, |
| 6510 | .{ ._, ._r, .bs, .tmp2q, .tmp1q, ._, ._ }, | 7394 | .{ ._, .vp_b, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y }, |
| 6511 | .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 7395 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 6512 | .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ }, | 7396 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 6513 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, | | |
| 6514 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | | |
| 6515 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 7397 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6516 | } }, | 7398 | } }, |
| 6517 | }, .{ | 7399 | }, .{ |
| 6518 | .required_features = .{ .@"64bit", null, null, null }, | 7400 | .required_features = .{ .avx, null, null, null }, |
| 6519 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, | 7401 | .src_constraints = .{ |
| | 7402 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| | 7403 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| | 7404 | }, |
| 6520 | .patterns = &.{ | 7405 | .patterns = &.{ |
| 6521 | .{ .src = .{ .to_mem, .none } }, | 7406 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6522 | }, | 7407 | }, |
| 6523 | .extra_temps = .{ | 7408 | .extra_temps = .{ |
| 6524 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 7409 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6525 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7410 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| 6526 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7411 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| | 7412 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| | 7413 | .unused, |
| | 7414 | .unused, |
| 6527 | .unused, | 7415 | .unused, |
| 6528 | .unused, | 7416 | .unused, |
| 6529 | .unused, | 7417 | .unused, |
| ... | @@ -6531,895 +7419,7323 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6531,895 +7419,7323 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6531 | .dst_temps = .{.mem}, | 7419 | .dst_temps = .{.mem}, |
| 6532 | .clobbers = .{ .eflags = true }, | 7420 | .clobbers = .{ .eflags = true }, |
| 6533 | .each = .{ .once = &.{ | 7421 | .each = .{ .once = &.{ |
| 6534 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 7422 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6535 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, | 7423 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6536 | .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, | 7424 | .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6537 | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, | 7425 | .{ ._, .vp_q, .cmpgt, .tmp3x, .tmp1x, .tmp2x, ._ }, |
| 6538 | .{ ._, ._r, .bs, .tmp2q, .tmp1q, ._, ._ }, | 7426 | .{ ._, .vp_b, .blendv, .tmp1x, .tmp1x, .tmp2x, .tmp3x }, |
| 6539 | .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ }, | 7427 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6540 | .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ }, | 7428 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6541 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, | 7429 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6542 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, | | |
| 6543 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | | |
| 6544 | } }, | 7430 | } }, |
| 6545 | }, .{ | 7431 | }, .{ |
| 6546 | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, | 7432 | .required_features = .{ .sse4_2, null, null, null }, |
| 6547 | .dst_constraints = .{.{ .scalar_int_is = .byte }}, | 7433 | .src_constraints = .{ |
| 6548 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, | 7434 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| | 7435 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| | 7436 | }, |
| 6549 | .patterns = &.{ | 7437 | .patterns = &.{ |
| 6550 | .{ .src = .{ .to_mem, .none } }, | 7438 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6551 | }, | 7439 | }, |
| 6552 | .extra_temps = .{ | 7440 | .extra_temps = .{ |
| 6553 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 7441 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6554 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 7442 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| 6555 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7443 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| 6556 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7444 | .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } }, |
| 6557 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7445 | .unused, |
| | 7446 | .unused, |
| | 7447 | .unused, |
| | 7448 | .unused, |
| 6558 | .unused, | 7449 | .unused, |
| 6559 | }, | 7450 | }, |
| 6560 | .dst_temps = .{.mem}, | 7451 | .dst_temps = .{.mem}, |
| 6561 | .clobbers = .{ .eflags = true }, | 7452 | .clobbers = .{ .eflags = true }, |
| 6562 | .each = .{ .once = &.{ | 7453 | .each = .{ .once = &.{ |
| 6563 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 7454 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6564 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 7455 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6565 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, | 7456 | .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6566 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, | 7457 | .{ ._, ._dqa, .mov, .tmp3x, .tmp1x, ._, ._ }, |
| 6567 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, | 7458 | .{ ._, .p_q, .cmpgt, .tmp3x, .tmp2x, ._, ._ }, |
| 6568 | .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, | 7459 | .{ ._, .p_b, .blendv, .tmp1x, .tmp2x, .tmp3x, ._ }, |
| 6569 | .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, | 7460 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6570 | .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, | 7461 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6571 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, | | |
| 6572 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, | | |
| 6573 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, | | |
| 6574 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | | |
| 6575 | .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, | | |
| 6576 | .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, | | |
| 6577 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, | | |
| 6578 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, | | |
| 6579 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | | |
| 6580 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 7462 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6581 | } }, | 7463 | } }, |
| 6582 | }, .{ | 7464 | }, .{ |
| 6583 | .required_features = .{ .@"64bit", .lzcnt, null, null }, | 7465 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 6584 | .dst_constraints = .{.{ .scalar_int_is = .byte }}, | 7466 | .src_constraints = .{ |
| 6585 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, | 7467 | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, |
| | 7468 | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, |
| | 7469 | }, |
| 6586 | .patterns = &.{ | 7470 | .patterns = &.{ |
| 6587 | .{ .src = .{ .to_mem, .none } }, | 7471 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6588 | }, | 7472 | }, |
| 6589 | .extra_temps = .{ | 7473 | .extra_temps = .{ |
| 6590 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 7474 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6591 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 7475 | .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, |
| 6592 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7476 | .unused, |
| 6593 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7477 | .unused, |
| 6594 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7478 | .unused, |
| | 7479 | .unused, |
| | 7480 | .unused, |
| | 7481 | .unused, |
| 6595 | .unused, | 7482 | .unused, |
| 6596 | }, | 7483 | }, |
| 6597 | .dst_temps = .{.mem}, | 7484 | .dst_temps = .{.mem}, |
| 6598 | .clobbers = .{ .eflags = true }, | 7485 | .clobbers = .{ .eflags = true }, |
| 6599 | .each = .{ .once = &.{ | 7486 | .each = .{ .once = &.{ |
| 6600 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 7487 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6601 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 7488 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 6602 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, | 7489 | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 6603 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, | 7490 | .{ ._, ._ge, .cmov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 6604 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, | 7491 | .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| 6605 | .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, | 7492 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 6606 | .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, | | |
| 6607 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, | | |
| 6608 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, | | |
| 6609 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, | | |
| 6610 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | | |
| 6611 | .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, | | |
| 6612 | .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, | | |
| 6613 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, | | |
| 6614 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, | | |
| 6615 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | | |
| 6616 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 7493 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6617 | } }, | 7494 | } }, |
| 6618 | }, .{ | 7495 | }, .{ |
| 6619 | .required_features = .{ .@"64bit", null, null, null }, | 7496 | .required_features = .{ .@"64bit", null, null, null }, |
| 6620 | .dst_constraints = .{.{ .scalar_int_is = .byte }}, | 7497 | .src_constraints = .{ |
| 6621 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, | 7498 | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, |
| | 7499 | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, |
| | 7500 | }, |
| 6622 | .patterns = &.{ | 7501 | .patterns = &.{ |
| 6623 | .{ .src = .{ .to_mem, .none } }, | 7502 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6624 | }, | 7503 | }, |
| 6625 | .extra_temps = .{ | 7504 | .extra_temps = .{ |
| 6626 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 7505 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6627 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 7506 | .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, |
| 6628 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7507 | .unused, |
| 6629 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7508 | .unused, |
| | 7509 | .unused, |
| | 7510 | .unused, |
| | 7511 | .unused, |
| 6630 | .unused, | 7512 | .unused, |
| 6631 | .unused, | 7513 | .unused, |
| 6632 | }, | 7514 | }, |
| 6633 | .dst_temps = .{.mem}, | 7515 | .dst_temps = .{.mem}, |
| 6634 | .clobbers = .{ .eflags = true }, | 7516 | .clobbers = .{ .eflags = true }, |
| 6635 | .each = .{ .once = &.{ | 7517 | .each = .{ .once = &.{ |
| 6636 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 7518 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6637 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 7519 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 6638 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, | 7520 | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 6639 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, | 7521 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, |
| 6640 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, | 7522 | .{ ._, ._, .mov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 6641 | .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ }, | 7523 | .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| 6642 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, | 7524 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 6643 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, | | |
| 6644 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, | | |
| 6645 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, | | |
| 6646 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | | |
| 6647 | .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, | | |
| 6648 | .{ ._, ._, .neg, .tmp3b, ._, ._, ._ }, | | |
| 6649 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, | | |
| 6650 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, | | |
| 6651 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | | |
| 6652 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 7525 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6653 | } }, | 7526 | } }, |
| 6654 | }, .{ | 7527 | }, .{ |
| 6655 | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, | 7528 | .required_features = .{ .avx, null, null, null }, |
| 6656 | .dst_constraints = .{.{ .scalar_int_is = .byte }}, | 7529 | .src_constraints = .{ |
| 6657 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, | 7530 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 7531 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 7532 | }, |
| 6658 | .patterns = &.{ | 7533 | .patterns = &.{ |
| 6659 | .{ .src = .{ .to_mem, .none } }, | 7534 | .{ .src = .{ .to_sse, .mem } }, |
| | 7535 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 7536 | .{ .src = .{ .to_sse, .to_sse } }, |
| 6660 | }, | 7537 | }, |
| 6661 | .extra_temps = .{ | 7538 | .extra_temps = .{ |
| 6662 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | | |
| 6663 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 7539 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 6664 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7540 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| 6665 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7541 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 6666 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7542 | .unused, |
| | 7543 | .unused, |
| | 7544 | .unused, |
| | 7545 | .unused, |
| | 7546 | .unused, |
| | 7547 | .unused, |
| | 7548 | }, |
| | 7549 | .dst_temps = .{.{ .rc = .sse }}, |
| | 7550 | .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 }, |
| | 7557 | } }, |
| | 7558 | }, .{ |
| | 7559 | .required_features = .{ .sse4_2, null, null, null }, |
| | 7560 | .src_constraints = .{ |
| | 7561 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 7562 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 7563 | }, |
| | 7564 | .patterns = &.{ |
| | 7565 | .{ .src = .{ .to_mut_sse, .mem } }, |
| | 7566 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| | 7567 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| | 7568 | }, |
| | 7569 | .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 } }, |
| | 7574 | .unused, |
| | 7575 | .unused, |
| | 7576 | .unused, |
| | 7577 | .unused, |
| | 7578 | .unused, |
| | 7579 | }, |
| | 7580 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 7581 | .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 }, |
| | 7592 | .src_constraints = .{ |
| | 7593 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, |
| | 7594 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, |
| | 7595 | }, |
| | 7596 | .patterns = &.{ |
| | 7597 | .{ .src = .{ .to_sse, .mem } }, |
| | 7598 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 7599 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 7600 | }, |
| | 7601 | .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 } }, |
| | 7605 | .unused, |
| | 7606 | .unused, |
| | 7607 | .unused, |
| | 7608 | .unused, |
| | 7609 | .unused, |
| | 7610 | .unused, |
| | 7611 | }, |
| | 7612 | .dst_temps = .{.{ .rc = .sse }}, |
| | 7613 | .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 }, |
| | 7620 | } }, |
| | 7621 | }, .{ |
| | 7622 | .required_features = .{ .avx2, null, null, null }, |
| | 7623 | .src_constraints = .{ |
| | 7624 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, |
| | 7625 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, |
| | 7626 | }, |
| | 7627 | .patterns = &.{ |
| | 7628 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 7629 | }, |
| | 7630 | .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 } }, |
| | 7638 | .unused, |
| 6667 | .unused, | 7639 | .unused, |
| 6668 | }, | 7640 | }, |
| 6669 | .dst_temps = .{.mem}, | 7641 | .dst_temps = .{.mem}, |
| 6670 | .clobbers = .{ .eflags = true }, | 7642 | .clobbers = .{ .eflags = true }, |
| 6671 | .each = .{ .once = &.{ | 7643 | .each = .{ .once = &.{ |
| 6672 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 7644 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 6673 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 7645 | .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ }, |
| 6674 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, | 7646 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6675 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, | 7647 | .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 6676 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, | 7648 | .{ ._, .v_dqa, .mov, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, |
| 6677 | .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, | 7649 | .{ ._, .vp_, .xor, .tmp5y, .tmp3y, .tmp2y, ._ }, |
| 6678 | .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, | 7650 | .{ ._, .vp_, .xor, .tmp6y, .tmp4y, .tmp2y, ._ }, |
| 6679 | .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, | 7651 | .{ ._, .vp_q, .cmpgt, .tmp5y, .tmp5y, .tmp6y, ._ }, |
| 6680 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, | 7652 | .{ ._, .vp_b, .blendv, .tmp3y, .tmp3y, .tmp4y, .tmp5y }, |
| 6681 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, | 7653 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ }, |
| 6682 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, | 7654 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 6683 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | | |
| 6684 | .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, | | |
| 6685 | .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, | | |
| 6686 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, | | |
| 6687 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, | | |
| 6688 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | | |
| 6689 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 7655 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6690 | } }, | 7656 | } }, |
| 6691 | }, .{ | 7657 | }, .{ |
| 6692 | .required_features = .{ .@"64bit", .lzcnt, null, null }, | 7658 | .required_features = .{ .avx, null, null, null }, |
| 6693 | .dst_constraints = .{.{ .scalar_int_is = .byte }}, | 7659 | .src_constraints = .{ |
| 6694 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, | 7660 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 7661 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 7662 | }, |
| 6695 | .patterns = &.{ | 7663 | .patterns = &.{ |
| 6696 | .{ .src = .{ .to_mem, .none } }, | 7664 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6697 | }, | 7665 | }, |
| 6698 | .extra_temps = .{ | 7666 | .extra_temps = .{ |
| 6699 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 7667 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6700 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 7668 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| 6701 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7669 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 6702 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7670 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 6703 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7671 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 7672 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 7673 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| | 7674 | .unused, |
| 6704 | .unused, | 7675 | .unused, |
| 6705 | }, | 7676 | }, |
| 6706 | .dst_temps = .{.mem}, | 7677 | .dst_temps = .{.mem}, |
| 6707 | .clobbers = .{ .eflags = true }, | 7678 | .clobbers = .{ .eflags = true }, |
| 6708 | .each = .{ .once = &.{ | 7679 | .each = .{ .once = &.{ |
| 6709 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 7680 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 6710 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 7681 | .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, |
| 6711 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, | 7682 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6712 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, | 7683 | .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6713 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, | 7684 | .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6714 | .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, | 7685 | .{ ._, .vp_, .xor, .tmp5x, .tmp3x, .tmp2x, ._ }, |
| 6715 | .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, | 7686 | .{ ._, .vp_, .xor, .tmp6x, .tmp4x, .tmp2x, ._ }, |
| 6716 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, | 7687 | .{ ._, .vp_q, .cmpgt, .tmp5x, .tmp5x, .tmp6x, ._ }, |
| 6717 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, | 7688 | .{ ._, .vp_b, .blendv, .tmp3x, .tmp3x, .tmp4x, .tmp5x }, |
| 6718 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, | 7689 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, |
| 6719 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 7690 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6720 | .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, | | |
| 6721 | .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, | | |
| 6722 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, | | |
| 6723 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, | | |
| 6724 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | | |
| 6725 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 7691 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6726 | } }, | 7692 | } }, |
| 6727 | }, .{ | 7693 | }, .{ |
| 6728 | .required_features = .{ .@"64bit", null, null, null }, | 7694 | .required_features = .{ .sse4_2, null, null, null }, |
| 6729 | .dst_constraints = .{.{ .scalar_int_is = .byte }}, | 7695 | .src_constraints = .{ |
| 6730 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, | 7696 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 7697 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| | 7698 | }, |
| 6731 | .patterns = &.{ | 7699 | .patterns = &.{ |
| 6732 | .{ .src = .{ .to_mem, .none } }, | 7700 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6733 | }, | 7701 | }, |
| 6734 | .extra_temps = .{ | 7702 | .extra_temps = .{ |
| 6735 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 7703 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6736 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 7704 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| 6737 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7705 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 6738 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 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 } }, |
| 6739 | .unused, | 7710 | .unused, |
| 6740 | .unused, | 7711 | .unused, |
| 6741 | }, | 7712 | }, |
| 6742 | .dst_temps = .{.mem}, | 7713 | .dst_temps = .{.mem}, |
| 6743 | .clobbers = .{ .eflags = true }, | 7714 | .clobbers = .{ .eflags = true }, |
| 6744 | .each = .{ .once = &.{ | 7715 | .each = .{ .once = &.{ |
| 6745 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 7716 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 6746 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 7717 | .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, |
| 6747 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, | 7718 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6748 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, | 7719 | .{ .@"0:", ._dqa, .mov, .tmp5x, .tmp2x, ._, ._ }, |
| 6749 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, | 7720 | .{ ._, ._dqa, .mov, .tmp6x, .tmp2x, ._, ._ }, |
| 6750 | .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ }, | 7721 | .{ ._, ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6751 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, | 7722 | .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6752 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, | 7723 | .{ ._, .p_, .xor, .tmp5x, .tmp3x, ._, ._ }, |
| 6753 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, | 7724 | .{ ._, .p_, .xor, .tmp6x, .tmp4x, ._, ._ }, |
| 6754 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, | 7725 | .{ ._, .p_q, .cmpgt, .tmp5x, .tmp6x, ._, ._ }, |
| 6755 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 7726 | .{ ._, .p_b, .blendv, .tmp3x, .tmp4x, .tmp5x, ._ }, |
| 6756 | .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, | 7727 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, |
| 6757 | .{ ._, ._, .neg, .tmp3b, ._, ._, ._ }, | 7728 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6758 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, | | |
| 6759 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, | | |
| 6760 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | | |
| 6761 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 7729 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6762 | } }, | 7730 | } }, |
| 6763 | }, .{ | 7731 | }, .{ |
| 6764 | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, | 7732 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 6765 | .dst_constraints = .{.{ .scalar_int_is = .word }}, | 7733 | .src_constraints = .{ |
| 6766 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, | 7734 | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, |
| | 7735 | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, |
| | 7736 | }, |
| 6767 | .patterns = &.{ | 7737 | .patterns = &.{ |
| 6768 | .{ .src = .{ .to_mem, .none } }, | 7738 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6769 | }, | 7739 | }, |
| 6770 | .extra_temps = .{ | 7740 | .extra_temps = .{ |
| 6771 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 7741 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6772 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | | |
| 6773 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | | |
| 6774 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | | |
| 6775 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7742 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 6776 | .unused, | 7743 | .unused, |
| | 7744 | .unused, |
| | 7745 | .unused, |
| | 7746 | .unused, |
| | 7747 | .unused, |
| | 7748 | .unused, |
| | 7749 | .unused, |
| 6777 | }, | 7750 | }, |
| 6778 | .dst_temps = .{.mem}, | 7751 | .dst_temps = .{.mem}, |
| 6779 | .clobbers = .{ .eflags = true }, | 7752 | .clobbers = .{ .eflags = true }, |
| 6780 | .each = .{ .once = &.{ | 7753 | .each = .{ .once = &.{ |
| 6781 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 7754 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6782 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 7755 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 6783 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, | 7756 | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 6784 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, | 7757 | .{ ._, ._ae, .cmov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 6785 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, | 7758 | .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| 6786 | .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, | 7759 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 6787 | .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, | | |
| 6788 | .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, | | |
| 6789 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, | | |
| 6790 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, | | |
| 6791 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, | | |
| 6792 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | | |
| 6793 | .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, | | |
| 6794 | .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, | | |
| 6795 | .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, | | |
| 6796 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, | | |
| 6797 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | | |
| 6798 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 7760 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6799 | } }, | 7761 | } }, |
| 6800 | }, .{ | 7762 | }, .{ |
| 6801 | .required_features = .{ .@"64bit", .lzcnt, null, null }, | 7763 | .required_features = .{ .@"64bit", null, null, null }, |
| 6802 | .dst_constraints = .{.{ .scalar_int_is = .word }}, | 7764 | .src_constraints = .{ |
| 6803 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, | 7765 | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, |
| | 7766 | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, |
| | 7767 | }, |
| 6804 | .patterns = &.{ | 7768 | .patterns = &.{ |
| 6805 | .{ .src = .{ .to_mem, .none } }, | 7769 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6806 | }, | 7770 | }, |
| 6807 | .extra_temps = .{ | 7771 | .extra_temps = .{ |
| 6808 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 7772 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6809 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | | |
| 6810 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | | |
| 6811 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | | |
| 6812 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7773 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 6813 | .unused, | 7774 | .unused, |
| | 7775 | .unused, |
| | 7776 | .unused, |
| | 7777 | .unused, |
| | 7778 | .unused, |
| | 7779 | .unused, |
| | 7780 | .unused, |
| 6814 | }, | 7781 | }, |
| 6815 | .dst_temps = .{.mem}, | 7782 | .dst_temps = .{.mem}, |
| 6816 | .clobbers = .{ .eflags = true }, | 7783 | .clobbers = .{ .eflags = true }, |
| 6817 | .each = .{ .once = &.{ | 7784 | .each = .{ .once = &.{ |
| 6818 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 7785 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6819 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 7786 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 6820 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, | 7787 | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 6821 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, | 7788 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, |
| 6822 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, | 7789 | .{ ._, ._, .mov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 6823 | .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, | 7790 | .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| 6824 | .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, | 7791 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 6825 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, | | |
| 6826 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, | | |
| 6827 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, | | |
| 6828 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | | |
| 6829 | .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, | | |
| 6830 | .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, | | |
| 6831 | .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, | | |
| 6832 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, | | |
| 6833 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | | |
| 6834 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 7792 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6835 | } }, | 7793 | } }, |
| 6836 | }, .{ | 7794 | }, .{ |
| 6837 | .required_features = .{ .@"64bit", null, null, null }, | 7795 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 6838 | .dst_constraints = .{.{ .scalar_int_is = .word }}, | 7796 | .src_constraints = .{ .any_scalar_signed_int, .any_scalar_signed_int }, |
| 6839 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, | | |
| 6840 | .patterns = &.{ | 7797 | .patterns = &.{ |
| 6841 | .{ .src = .{ .to_mem, .none } }, | 7798 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6842 | }, | 7799 | }, |
| 6843 | .extra_temps = .{ | 7800 | .extra_temps = .{ |
| 6844 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 7801 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6845 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 7802 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| 6846 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7803 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| 6847 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7804 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| | 7805 | .unused, |
| | 7806 | .unused, |
| | 7807 | .unused, |
| 6848 | .unused, | 7808 | .unused, |
| 6849 | .unused, | 7809 | .unused, |
| 6850 | }, | 7810 | }, |
| 6851 | .dst_temps = .{.mem}, | 7811 | .dst_temps = .{.mem}, |
| 6852 | .clobbers = .{ .eflags = true }, | 7812 | .clobbers = .{ .eflags = true }, |
| 6853 | .each = .{ .once = &.{ | 7813 | .each = .{ .once = &.{ |
| 6854 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 7814 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6855 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 7815 | .{ .@"0:", ._, .mov, .tmp1d, .sia(-1, .none, .add_src0_elem_size_div_8), ._, ._ }, |
| 6856 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, | 7816 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 6857 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, | 7817 | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 6858 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, | 7818 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 6859 | .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ }, | 7819 | .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, |
| 6860 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, | 7820 | .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, |
| 6861 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, | 7821 | .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, |
| 6862 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, | 7822 | .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 6863 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, | 7823 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 6864 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 7824 | .{ ._, ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| 6865 | .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, | 7825 | .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| 6866 | .{ ._, ._, .neg, .tmp3d, ._, ._, ._ }, | 7826 | .{ ._, ._ge, .cmov, .tmp1p, .tmp2p, ._, ._ }, |
| 6867 | .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, | 7827 | .{ ._, ._, .lea, .tmp2p, .memiad(.dst0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| 6868 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, | 7828 | .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| 6869 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | 7829 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| | 7830 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 6870 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 7831 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6871 | } }, | 7832 | } }, |
| 6872 | }, .{ | 7833 | }, .{ |
| 6873 | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, | 7834 | .required_features = .{ .@"64bit", null, null, null }, |
| 6874 | .dst_constraints = .{.{ .scalar_int_is = .word }}, | 7835 | .src_constraints = .{ .any_scalar_signed_int, .any_scalar_signed_int }, |
| 6875 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, | | |
| 6876 | .patterns = &.{ | 7836 | .patterns = &.{ |
| 6877 | .{ .src = .{ .to_mem, .none } }, | 7837 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6878 | }, | 7838 | }, |
| 6879 | .extra_temps = .{ | 7839 | .extra_temps = .{ |
| 6880 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 7840 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6881 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 7841 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| 6882 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7842 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| 6883 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7843 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| 6884 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7844 | .unused, |
| | 7845 | .unused, |
| | 7846 | .unused, |
| | 7847 | .unused, |
| 6885 | .unused, | 7848 | .unused, |
| 6886 | }, | 7849 | }, |
| 6887 | .dst_temps = .{.mem}, | 7850 | .dst_temps = .{.mem}, |
| 6888 | .clobbers = .{ .eflags = true }, | 7851 | .clobbers = .{ .eflags = true }, |
| 6889 | .each = .{ .once = &.{ | 7852 | .each = .{ .once = &.{ |
| 6890 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 7853 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6891 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 7854 | .{ .@"0:", ._, .mov, .tmp1d, .sia(-1, .none, .add_src0_elem_size_div_8), ._, ._ }, |
| 6892 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, | 7855 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 6893 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, | 7856 | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 6894 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, | 7857 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 6895 | .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, | 7858 | .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, |
| 6896 | .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, | 7859 | .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, |
| 6897 | .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, | 7860 | .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, |
| 6898 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, | 7861 | .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 6899 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, | 7862 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 6900 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, | 7863 | .{ ._, ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| 6901 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 7864 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, |
| 6902 | .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, | 7865 | .{ ._, ._, .lea, .tmp1p, .memiad(.src1, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| 6903 | .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, | 7866 | .{ .@"1:", ._, .lea, .tmp2p, .memiad(.dst0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| 6904 | .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, | 7867 | .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| 6905 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, | 7868 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| 6906 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | 7869 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 6907 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 7870 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6908 | } }, | 7871 | } }, |
| 6909 | }, .{ | 7872 | }, .{ |
| 6910 | .required_features = .{ .@"64bit", .lzcnt, null, null }, | 7873 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 6911 | .dst_constraints = .{.{ .scalar_int_is = .word }}, | 7874 | .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int }, |
| 6912 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, | | |
| 6913 | .patterns = &.{ | 7875 | .patterns = &.{ |
| 6914 | .{ .src = .{ .to_mem, .none } }, | 7876 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6915 | }, | 7877 | }, |
| 6916 | .extra_temps = .{ | 7878 | .extra_temps = .{ |
| 6917 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 7879 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6918 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 7880 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| 6919 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7881 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| 6920 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7882 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| 6921 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7883 | .unused, |
| | 7884 | .unused, |
| | 7885 | .unused, |
| | 7886 | .unused, |
| 6922 | .unused, | 7887 | .unused, |
| 6923 | }, | 7888 | }, |
| 6924 | .dst_temps = .{.mem}, | 7889 | .dst_temps = .{.mem}, |
| 6925 | .clobbers = .{ .eflags = true }, | 7890 | .clobbers = .{ .eflags = true }, |
| 6926 | .each = .{ .once = &.{ | 7891 | .each = .{ .once = &.{ |
| 6927 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 7892 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6928 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 7893 | .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| 6929 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, | 7894 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 6930 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, | 7895 | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 6931 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, | 7896 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 6932 | .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, | 7897 | .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, |
| 6933 | .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, | 7898 | .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, |
| 6934 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, | 7899 | .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, |
| 6935 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, | 7900 | .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| 6936 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, | 7901 | .{ ._, ._, .lea, .tmp2p, .memia(.src1, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| 6937 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 7902 | .{ ._, ._ae, .cmov, .tmp1p, .tmp2p, ._, ._ }, |
| 6938 | .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, | 7903 | .{ ._, ._, .lea, .tmp2p, .memia(.dst0, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| 6939 | .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, | 7904 | .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| 6940 | .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, | 7905 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| 6941 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, | 7906 | .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ }, |
| 6942 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | 7907 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 6943 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 6944 | } }, | 7908 | } }, |
| 6945 | }, .{ | 7909 | }, .{ |
| 6946 | .required_features = .{ .@"64bit", null, null, null }, | 7910 | .required_features = .{ .@"64bit", null, null, null }, |
| 6947 | .dst_constraints = .{.{ .scalar_int_is = .word }}, | 7911 | .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int }, |
| 6948 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, | | |
| 6949 | .patterns = &.{ | 7912 | .patterns = &.{ |
| 6950 | .{ .src = .{ .to_mem, .none } }, | 7913 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6951 | }, | 7914 | }, |
| 6952 | .extra_temps = .{ | 7915 | .extra_temps = .{ |
| 6953 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 7916 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6954 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 7917 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| 6955 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 7918 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| 6956 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 7919 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| | 7920 | .unused, |
| | 7921 | .unused, |
| | 7922 | .unused, |
| 6957 | .unused, | 7923 | .unused, |
| 6958 | .unused, | 7924 | .unused, |
| 6959 | }, | 7925 | }, |
| 6960 | .dst_temps = .{.mem}, | 7926 | .dst_temps = .{.mem}, |
| 6961 | .clobbers = .{ .eflags = true }, | 7927 | .clobbers = .{ .eflags = true }, |
| 6962 | .each = .{ .once = &.{ | 7928 | .each = .{ .once = &.{ |
| 6963 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 7929 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6964 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 7930 | .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| 6965 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, | 7931 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 6966 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, | 7932 | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 6967 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, | 7933 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 6968 | .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ }, | 7934 | .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, |
| 6969 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, | 7935 | .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, |
| 6970 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, | 7936 | .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, |
| 6971 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, | 7937 | .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| 6972 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, | 7938 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, |
| 6973 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 7939 | .{ ._, ._, .lea, .tmp1p, .memia(.src1, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| 6974 | .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, | 7940 | .{ .@"1:", ._, .lea, .tmp2p, .memia(.dst0, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| 6975 | .{ ._, ._, .neg, .tmp3d, ._, ._, ._ }, | 7941 | .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| 6976 | .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, | 7942 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| 6977 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, | 7943 | .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ }, |
| 6978 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | 7944 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 6979 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 6980 | } }, | 7945 | } }, |
| 6981 | } }) catch |err| switch (err) { | 7946 | } }) catch |err| switch (err) { |
| 6982 | error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{ | 7947 | error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{ |
| 6983 | @tagName(air_tag), | 7948 | @tagName(air_tag), |
| 6984 | cg.typeOf(ty_op.operand).fmt(pt), | 7949 | cg.typeOf(bin_op.lhs).fmt(pt), |
| 6985 | ops[0].tracking(cg), | 7950 | ops[0].tracking(cg), |
| | 7951 | ops[1].tracking(cg), |
| 6986 | }), | 7952 | }), |
| 6987 | else => |e| return e, | 7953 | else => |e| return e, |
| 6988 | }; | 7954 | }; |
| 6989 | for (ops) |op| for (res) |r| { | 7955 | try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); |
| 6990 | if (op.index == r.index) break; | | |
| 6991 | } else try op.die(cg); | | |
| 6992 | try res[0].moveTo(inst, cg); | | |
| 6993 | }, | 7956 | }, |
| 6994 | | 7957 | .alloc => if (use_old) try cg.airAlloc(inst) else { |
| 6995 | .cmp_vector, .cmp_vector_optimized => |air_tag| if (use_old) try cg.airCmpVector(inst) else fallback: { | 7958 | const ty = air_datas[@intFromEnum(inst)].ty; |
| 6996 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; | 7959 | const slot = try cg.tempInit(ty, .{ .lea_frame = .{ |
| 6997 | const extra = cg.air.extraData(Air.VectorCmp, ty_pl.payload).data; | 7960 | .index = try cg.allocMemPtr(inst), |
| 6998 | switch (extra.compareOperator()) { | 7961 | } }); |
| 6999 | .eq, .neq => if (cg.typeOf(extra.lhs).scalarType(zcu).isRuntimeFloat()) | 7962 | try slot.finish(inst, &.{}, &.{}, cg); |
| 7000 | break :fallback try cg.airCmpVector(inst), | 7963 | }, |
| 7001 | else => break :fallback try cg.airCmpVector(inst), | 7964 | .inferred_alloc, .inferred_alloc_comptime => unreachable, |
| 7002 | } | 7965 | .ret_ptr => if (use_old) try cg.airRetPtr(inst) else { |
| 7003 | var ops = try cg.tempsFromOperands(inst, .{ extra.lhs, extra.rhs }); | 7966 | const ty = air_datas[@intFromEnum(inst)].ty; |
| | 7967 | var slot = switch (cg.ret_mcv.long) { |
| | 7968 | else => unreachable, |
| | 7969 | .none => try cg.tempInit(ty, .{ .lea_frame = .{ |
| | 7970 | .index = try cg.allocMemPtr(inst), |
| | 7971 | } }), |
| | 7972 | .load_frame => slot: { |
| | 7973 | var slot = try cg.tempInit(ty, cg.ret_mcv.long); |
| | 7974 | try slot.toOffset(cg.ret_mcv.short.indirect.off, cg); |
| | 7975 | break :slot slot; |
| | 7976 | }, |
| | 7977 | }; |
| | 7978 | try slot.finish(inst, &.{}, &.{}, cg); |
| | 7979 | }, |
| | 7980 | .assembly => try cg.airAsm(inst), |
| | 7981 | .bit_and, .bit_or, .xor, .bool_and, .bool_or => |air_tag| if (use_old) try cg.airBinOp(inst, air_tag) else { |
| | 7982 | const bin_op = air_datas[@intFromEnum(inst)].bin_op; |
| | 7983 | var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs }); |
| 7004 | var res: [1]Temp = undefined; | 7984 | var res: [1]Temp = undefined; |
| 7005 | switch (extra.compareOperator()) { | 7985 | cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, switch (@as(Mir.Inst.Tag, switch (air_tag) { |
| 7006 | .lt => unreachable, | 7986 | else => unreachable, |
| 7007 | .lte => unreachable, | 7987 | .bit_and, .bool_and => .@"and", |
| 7008 | .eq, .neq => |cmp_op| cg.select(&res, &.{ty_pl.ty.toType()}, &ops, switch (@as(Condition, switch (cmp_op) { | 7988 | .bit_or, .bool_or => .@"or", |
| 7009 | else => unreachable, | 7989 | .xor => .xor, |
| 7010 | .eq => .e, | 7990 | })) { |
| 7011 | .neq => .ne, | 7991 | else => unreachable, |
| 7012 | })) { | 7992 | inline .@"and", .@"or", .xor => |mir_tag| comptime &.{ .{ |
| 7013 | else => unreachable, | 7993 | .src_constraints = .{ .{ .size = .byte }, .{ .size = .byte } }, |
| 7014 | inline .e, .ne => |cc| comptime &.{ .{ | 7994 | .patterns = &.{ |
| 7015 | .required_features = .{ .avx2, null, null, null }, | 7995 | .{ .src = .{ .mut_mem, .imm8 } }, |
| 7016 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, | 7996 | .{ .src = .{ .imm8, .mut_mem }, .commute = .{ 0, 1 } }, |
| 7017 | .patterns = &.{ | 7997 | .{ .src = .{ .to_mut_gpr, .imm8 } }, |
| 7018 | .{ .src = .{ .to_ymm, .mem } }, | 7998 | .{ .src = .{ .imm8, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 7019 | .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } }, | 7999 | .{ .src = .{ .mut_mem, .to_gpr } }, |
| 7020 | .{ .src = .{ .to_ymm, .to_ymm } }, | 8000 | .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } }, |
| 7021 | }, | 8001 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 7022 | .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{ | 8002 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 7023 | .kind = .all, | 8003 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 7024 | .inverted = switch (cc) { | 8004 | }, |
| 7025 | else => unreachable, | 8005 | .dst_temps = .{.{ .ref = .src0 }}, |
| 7026 | .e => false, | 8006 | .clobbers = .{ .eflags = true }, |
| 7027 | .ne => true, | 8007 | .each = .{ .once = &.{ |
| 7028 | }, | 8008 | .{ ._, ._, mir_tag, .dst0b, .src1b, ._, ._ }, |
| 7029 | .scalar = .byte, | 8009 | } }, |
| 7030 | } } }}, | 8010 | }, .{ |
| 7031 | .each = .{ .once = &.{ | 8011 | .src_constraints = .{ .{ .size = .word }, .{ .size = .word } }, |
| 7032 | .{ ._, .vp_b, .cmpeq, .dst0y, .src0y, .src1y, ._ }, | 8012 | .patterns = &.{ |
| | 8013 | .{ .src = .{ .mut_mem, .imm16 } }, |
| | 8014 | .{ .src = .{ .imm16, .mut_mem }, .commute = .{ 0, 1 } }, |
| | 8015 | .{ .src = .{ .to_mut_gpr, .imm16 } }, |
| | 8016 | .{ .src = .{ .imm16, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 8017 | .{ .src = .{ .mut_mem, .to_gpr } }, |
| | 8018 | .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } }, |
| | 8019 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 8020 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 8021 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| | 8022 | }, |
| | 8023 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8024 | .clobbers = .{ .eflags = true }, |
| | 8025 | .each = .{ .once = &.{ |
| | 8026 | .{ ._, ._, mir_tag, .dst0w, .src1w, ._, ._ }, |
| | 8027 | } }, |
| | 8028 | }, .{ |
| | 8029 | .src_constraints = .{ .{ .size = .dword }, .{ .size = .dword } }, |
| | 8030 | .patterns = &.{ |
| | 8031 | .{ .src = .{ .mut_mem, .imm32 } }, |
| | 8032 | .{ .src = .{ .imm32, .mut_mem }, .commute = .{ 0, 1 } }, |
| | 8033 | .{ .src = .{ .to_mut_gpr, .imm32 } }, |
| | 8034 | .{ .src = .{ .imm32, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 8035 | .{ .src = .{ .mut_mem, .to_gpr } }, |
| | 8036 | .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } }, |
| | 8037 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 8038 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 8039 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| | 8040 | }, |
| | 8041 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8042 | .clobbers = .{ .eflags = true }, |
| | 8043 | .each = .{ .once = &.{ |
| | 8044 | .{ ._, ._, mir_tag, .dst0d, .src1d, ._, ._ }, |
| | 8045 | } }, |
| | 8046 | }, .{ |
| | 8047 | .required_features = .{ .@"64bit", null, null, null }, |
| | 8048 | .src_constraints = .{ .{ .size = .qword }, .{ .size = .qword } }, |
| | 8049 | .patterns = &.{ |
| | 8050 | .{ .src = .{ .mut_mem, .simm32 } }, |
| | 8051 | .{ .src = .{ .simm32, .mut_mem }, .commute = .{ 0, 1 } }, |
| | 8052 | .{ .src = .{ .to_mut_gpr, .simm32 } }, |
| | 8053 | .{ .src = .{ .simm32, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 8054 | .{ .src = .{ .mut_mem, .to_gpr } }, |
| | 8055 | .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } }, |
| | 8056 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 8057 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 8058 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| | 8059 | }, |
| | 8060 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8061 | .clobbers = .{ .eflags = true }, |
| | 8062 | .each = .{ .once = &.{ |
| | 8063 | .{ ._, ._, mir_tag, .dst0q, .src1q, ._, ._ }, |
| | 8064 | } }, |
| | 8065 | }, .{ |
| | 8066 | .required_features = .{ .mmx, null, null, null }, |
| | 8067 | .src_constraints = .{ .{ .size = .qword }, .{ .size = .qword } }, |
| | 8068 | .patterns = &.{ |
| | 8069 | .{ .src = .{ .to_mut_mm, .mem } }, |
| | 8070 | .{ .src = .{ .mem, .to_mut_mm }, .commute = .{ 0, 1 } }, |
| | 8071 | .{ .src = .{ .to_mut_mm, .to_mm } }, |
| | 8072 | }, |
| | 8073 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8074 | .each = .{ .once = &.{ |
| | 8075 | .{ ._, .p_, mir_tag, .dst0q, .src1q, ._, ._ }, |
| | 8076 | } }, |
| | 8077 | }, .{ |
| | 8078 | .required_features = .{ .avx, null, null, null }, |
| | 8079 | .src_constraints = .{ .{ .size = .xword }, .{ .size = .xword } }, |
| | 8080 | .patterns = &.{ |
| | 8081 | .{ .src = .{ .to_xmm, .mem } }, |
| | 8082 | .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } }, |
| | 8083 | .{ .src = .{ .to_xmm, .to_xmm } }, |
| | 8084 | }, |
| | 8085 | .dst_temps = .{.{ .rc = .sse }}, |
| | 8086 | .each = .{ .once = &.{ |
| | 8087 | .{ ._, .vp_, mir_tag, .dst0x, .src0x, .src1x, ._ }, |
| | 8088 | } }, |
| | 8089 | }, .{ |
| | 8090 | .required_features = .{ .sse2, null, null, null }, |
| | 8091 | .src_constraints = .{ .{ .size = .xword }, .{ .size = .xword } }, |
| | 8092 | .patterns = &.{ |
| | 8093 | .{ .src = .{ .to_mut_xmm, .mem } }, |
| | 8094 | .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } }, |
| | 8095 | .{ .src = .{ .to_mut_xmm, .to_xmm } }, |
| | 8096 | }, |
| | 8097 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8098 | .each = .{ .once = &.{ |
| | 8099 | .{ ._, .p_, mir_tag, .dst0x, .src1x, ._, ._ }, |
| | 8100 | } }, |
| | 8101 | }, .{ |
| | 8102 | .required_features = .{ .sse, null, null, null }, |
| | 8103 | .src_constraints = .{ .{ .size = .xword }, .{ .size = .xword } }, |
| | 8104 | .patterns = &.{ |
| | 8105 | .{ .src = .{ .to_mut_xmm, .mem } }, |
| | 8106 | .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } }, |
| | 8107 | .{ .src = .{ .to_mut_xmm, .to_xmm } }, |
| | 8108 | }, |
| | 8109 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8110 | .each = .{ .once = &.{ |
| | 8111 | .{ ._, ._ps, mir_tag, .dst0x, .src1x, ._, ._ }, |
| | 8112 | } }, |
| | 8113 | }, .{ |
| | 8114 | .required_features = .{ .avx2, null, null, null }, |
| | 8115 | .src_constraints = .{ .{ .size = .yword }, .{ .size = .yword } }, |
| | 8116 | .patterns = &.{ |
| | 8117 | .{ .src = .{ .to_ymm, .mem } }, |
| | 8118 | .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } }, |
| | 8119 | .{ .src = .{ .to_ymm, .to_ymm } }, |
| | 8120 | }, |
| | 8121 | .dst_temps = .{.{ .rc = .sse }}, |
| | 8122 | .each = .{ .once = &.{ |
| | 8123 | .{ ._, .vp_, mir_tag, .dst0y, .src0y, .src1y, ._ }, |
| | 8124 | } }, |
| | 8125 | }, .{ |
| | 8126 | .required_features = .{ .avx, null, null, null }, |
| | 8127 | .src_constraints = .{ .{ .size = .yword }, .{ .size = .yword } }, |
| | 8128 | .patterns = &.{ |
| | 8129 | .{ .src = .{ .to_ymm, .mem } }, |
| | 8130 | .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } }, |
| | 8131 | .{ .src = .{ .to_ymm, .to_ymm } }, |
| | 8132 | }, |
| | 8133 | .dst_temps = .{.{ .rc = .sse }}, |
| | 8134 | .each = .{ .once = &.{ |
| | 8135 | .{ ._, .v_pd, mir_tag, .dst0y, .src0y, .src1y, ._ }, |
| | 8136 | } }, |
| | 8137 | }, .{ |
| | 8138 | .required_features = .{ .avx2, null, null, null }, |
| | 8139 | .src_constraints = .{ .{ .multiple_size = .yword }, .{ .multiple_size = .yword } }, |
| | 8140 | .patterns = &.{ |
| | 8141 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8142 | }, |
| | 8143 | .extra_temps = .{ |
| | 8144 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8145 | .{ .kind = .{ .rc = .sse } }, |
| | 8146 | .unused, |
| | 8147 | .unused, |
| | 8148 | .unused, |
| | 8149 | .unused, |
| | 8150 | .unused, |
| | 8151 | .unused, |
| | 8152 | .unused, |
| | 8153 | }, |
| | 8154 | .dst_temps = .{.mem}, |
| | 8155 | .clobbers = .{ .eflags = true }, |
| | 8156 | .each = .{ .once = &.{ |
| | 8157 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8158 | .{ .@"0:", .v_dqu, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 8159 | .{ ._, .vp_, mir_tag, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| | 8160 | .{ ._, .v_dqu, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| | 8161 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 8162 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8163 | } }, |
| | 8164 | }, .{ |
| | 8165 | .required_features = .{ .avx, null, null, null }, |
| | 8166 | .src_constraints = .{ .{ .multiple_size = .yword }, .{ .multiple_size = .yword } }, |
| | 8167 | .patterns = &.{ |
| | 8168 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8169 | }, |
| | 8170 | .extra_temps = .{ |
| | 8171 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8172 | .{ .kind = .{ .rc = .sse } }, |
| | 8173 | .unused, |
| | 8174 | .unused, |
| | 8175 | .unused, |
| | 8176 | .unused, |
| | 8177 | .unused, |
| | 8178 | .unused, |
| | 8179 | .unused, |
| | 8180 | }, |
| | 8181 | .dst_temps = .{.mem}, |
| | 8182 | .clobbers = .{ .eflags = true }, |
| | 8183 | .each = .{ .once = &.{ |
| | 8184 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8185 | .{ .@"0:", .v_pd, .movu, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 8186 | .{ ._, .v_pd, mir_tag, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| | 8187 | .{ ._, .v_pd, .movu, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| | 8188 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 8189 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8190 | } }, |
| | 8191 | }, .{ |
| | 8192 | .required_features = .{ .avx, null, null, null }, |
| | 8193 | .src_constraints = .{ .{ .multiple_size = .xword }, .{ .multiple_size = .xword } }, |
| | 8194 | .patterns = &.{ |
| | 8195 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8196 | }, |
| | 8197 | .extra_temps = .{ |
| | 8198 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8199 | .{ .kind = .{ .rc = .sse } }, |
| | 8200 | .unused, |
| | 8201 | .unused, |
| | 8202 | .unused, |
| | 8203 | .unused, |
| | 8204 | .unused, |
| | 8205 | .unused, |
| | 8206 | .unused, |
| | 8207 | }, |
| | 8208 | .dst_temps = .{.mem}, |
| | 8209 | .clobbers = .{ .eflags = true }, |
| | 8210 | .each = .{ .once = &.{ |
| | 8211 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8212 | .{ .@"0:", .v_dqu, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 8213 | .{ ._, .vp_, mir_tag, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 8214 | .{ ._, .v_dqu, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 8215 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 8216 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8217 | } }, |
| | 8218 | }, .{ |
| | 8219 | .required_features = .{ .sse2, null, null, null }, |
| | 8220 | .src_constraints = .{ .{ .multiple_size = .xword }, .{ .multiple_size = .xword } }, |
| | 8221 | .patterns = &.{ |
| | 8222 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8223 | }, |
| | 8224 | .extra_temps = .{ |
| | 8225 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8226 | .{ .kind = .{ .rc = .sse } }, |
| | 8227 | .unused, |
| | 8228 | .unused, |
| | 8229 | .unused, |
| | 8230 | .unused, |
| | 8231 | .unused, |
| | 8232 | .unused, |
| | 8233 | .unused, |
| | 8234 | }, |
| | 8235 | .dst_temps = .{.mem}, |
| | 8236 | .clobbers = .{ .eflags = true }, |
| | 8237 | .each = .{ .once = &.{ |
| | 8238 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8239 | .{ .@"0:", ._dqu, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 8240 | .{ ._, .p_, mir_tag, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 8241 | .{ ._, ._dqu, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 8242 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 8243 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8244 | } }, |
| | 8245 | }, .{ |
| | 8246 | .required_features = .{ .sse, null, null, null }, |
| | 8247 | .src_constraints = .{ .{ .multiple_size = .xword }, .{ .multiple_size = .xword } }, |
| | 8248 | .patterns = &.{ |
| | 8249 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8250 | }, |
| | 8251 | .extra_temps = .{ |
| | 8252 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8253 | .{ .kind = .{ .rc = .sse } }, |
| | 8254 | .unused, |
| | 8255 | .unused, |
| | 8256 | .unused, |
| | 8257 | .unused, |
| | 8258 | .unused, |
| | 8259 | .unused, |
| | 8260 | .unused, |
| | 8261 | }, |
| | 8262 | .dst_temps = .{.mem}, |
| | 8263 | .clobbers = .{ .eflags = true }, |
| | 8264 | .each = .{ .once = &.{ |
| | 8265 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8266 | .{ .@"0:", ._ps, .movu, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 8267 | .{ ._, ._ps, mir_tag, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 8268 | .{ ._, ._ps, .movu, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| | 8269 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 8270 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8271 | } }, |
| | 8272 | }, .{ |
| | 8273 | .required_features = .{ .mmx, null, null, null }, |
| | 8274 | .src_constraints = .{ .{ .multiple_size = .qword }, .{ .multiple_size = .qword } }, |
| | 8275 | .patterns = &.{ |
| | 8276 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8277 | }, |
| | 8278 | .extra_temps = .{ |
| | 8279 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8280 | .{ .kind = .{ .rc = .mmx } }, |
| | 8281 | .unused, |
| | 8282 | .unused, |
| | 8283 | .unused, |
| | 8284 | .unused, |
| | 8285 | .unused, |
| | 8286 | .unused, |
| | 8287 | .unused, |
| | 8288 | }, |
| | 8289 | .dst_temps = .{.mem}, |
| | 8290 | .clobbers = .{ .eflags = true }, |
| | 8291 | .each = .{ .once = &.{ |
| | 8292 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8293 | .{ .@"0:", ._q, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 8294 | .{ ._, .p_, mir_tag, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 8295 | .{ ._, ._q, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| | 8296 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 8297 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8298 | } }, |
| | 8299 | }, .{ |
| | 8300 | .src_constraints = .{ .{ .multiple_size = .qword }, .{ .multiple_size = .qword } }, |
| | 8301 | .patterns = &.{ |
| | 8302 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 8303 | }, |
| | 8304 | .extra_temps = .{ |
| | 8305 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8306 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 8307 | .unused, |
| | 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:", ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ }, |
| | 8320 | .{ ._, ._, mir_tag, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ }, |
| | 8321 | .{ ._, ._, .mov, .memia(.dst0p, .tmp0, .add_size), .tmp1p, ._, ._ }, |
| | 8322 | .{ ._, ._, .add, .tmp0p, .sa(.tmp1, .add_size), ._, ._ }, |
| | 8323 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8324 | } }, |
| | 8325 | } }, |
| | 8326 | }) catch |err| switch (err) { |
| | 8327 | error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{ |
| | 8328 | @tagName(air_tag), |
| | 8329 | cg.typeOf(bin_op.lhs).fmt(pt), |
| | 8330 | ops[0].tracking(cg), |
| | 8331 | ops[1].tracking(cg), |
| | 8332 | }), |
| | 8333 | else => |e| return e, |
| | 8334 | }; |
| | 8335 | try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); |
| | 8336 | }, |
| | 8337 | .not => |air_tag| if (use_old) try cg.airUnOp(inst, air_tag) else { |
| | 8338 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| | 8339 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| | 8340 | var res: [1]Temp = undefined; |
| | 8341 | cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{ |
| | 8342 | .src_constraints = .{ .{ .signed_or_exact_int = .byte }, .any }, |
| | 8343 | .patterns = &.{ |
| | 8344 | .{ .src = .{ .mut_mem, .none } }, |
| | 8345 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 8346 | }, |
| | 8347 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8348 | .each = .{ .once = &.{ |
| | 8349 | .{ ._, ._, .not, .dst0b, ._, ._, ._ }, |
| | 8350 | } }, |
| | 8351 | }, .{ |
| | 8352 | .src_constraints = .{ .{ .unsigned_int = .byte }, .any }, |
| | 8353 | .patterns = &.{ |
| | 8354 | .{ .src = .{ .mut_mem, .none } }, |
| | 8355 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 8356 | }, |
| | 8357 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8358 | .clobbers = .{ .eflags = true }, |
| | 8359 | .each = .{ .once = &.{ |
| | 8360 | .{ ._, ._, .xor, .dst0b, .sa(.src0, .add_umax), ._, ._ }, |
| | 8361 | } }, |
| | 8362 | }, .{ |
| | 8363 | .src_constraints = .{ .{ .signed_or_exact_int = .word }, .any }, |
| | 8364 | .patterns = &.{ |
| | 8365 | .{ .src = .{ .mut_mem, .none } }, |
| | 8366 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 8367 | }, |
| | 8368 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8369 | .each = .{ .once = &.{ |
| | 8370 | .{ ._, ._, .not, .dst0w, ._, ._, ._ }, |
| | 8371 | } }, |
| | 8372 | }, .{ |
| | 8373 | .src_constraints = .{ .{ .unsigned_int = .word }, .any }, |
| | 8374 | .patterns = &.{ |
| | 8375 | .{ .src = .{ .mut_mem, .none } }, |
| | 8376 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 8377 | }, |
| | 8378 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8379 | .clobbers = .{ .eflags = true }, |
| | 8380 | .each = .{ .once = &.{ |
| | 8381 | .{ ._, ._, .xor, .dst0w, .sa(.src0, .add_umax), ._, ._ }, |
| | 8382 | } }, |
| | 8383 | }, .{ |
| | 8384 | .src_constraints = .{ .{ .signed_or_exact_int = .dword }, .any }, |
| | 8385 | .patterns = &.{ |
| | 8386 | .{ .src = .{ .mut_mem, .none } }, |
| | 8387 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 8388 | }, |
| | 8389 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8390 | .each = .{ .once = &.{ |
| | 8391 | .{ ._, ._, .not, .dst0d, ._, ._, ._ }, |
| | 8392 | } }, |
| | 8393 | }, .{ |
| | 8394 | .src_constraints = .{ .{ .unsigned_int = .dword }, .any }, |
| | 8395 | .patterns = &.{ |
| | 8396 | .{ .src = .{ .mut_mem, .none } }, |
| | 8397 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 8398 | }, |
| | 8399 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8400 | .clobbers = .{ .eflags = true }, |
| | 8401 | .each = .{ .once = &.{ |
| | 8402 | .{ ._, ._, .xor, .dst0d, .sa(.src0, .add_umax), ._, ._ }, |
| | 8403 | } }, |
| | 8404 | }, .{ |
| | 8405 | .required_features = .{ .@"64bit", null, null, null }, |
| | 8406 | .src_constraints = .{ .{ .signed_or_exact_int = .qword }, .any }, |
| | 8407 | .patterns = &.{ |
| | 8408 | .{ .src = .{ .mut_mem, .none } }, |
| | 8409 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 8410 | }, |
| | 8411 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8412 | .each = .{ .once = &.{ |
| | 8413 | .{ ._, ._, .not, .dst0q, ._, ._, ._ }, |
| | 8414 | } }, |
| | 8415 | }, .{ |
| | 8416 | .required_features = .{ .@"64bit", null, null, null }, |
| | 8417 | .src_constraints = .{ .{ .unsigned_int = .qword }, .any }, |
| | 8418 | .patterns = &.{ |
| | 8419 | .{ .src = .{ .mem, .none } }, |
| | 8420 | .{ .src = .{ .to_gpr, .none } }, |
| | 8421 | }, |
| | 8422 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 8423 | .each = .{ .once = &.{ |
| | 8424 | .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ }, |
| | 8425 | .{ ._, ._, .xor, .dst0q, .src0q, ._, ._ }, |
| | 8426 | } }, |
| | 8427 | }, .{ |
| | 8428 | .required_features = .{ .mmx, null, null, null }, |
| | 8429 | .src_constraints = .{ .{ .signed_or_exact_int = .qword }, .any }, |
| | 8430 | .patterns = &.{ |
| | 8431 | .{ .src = .{ .mem, .none } }, |
| | 8432 | .{ .src = .{ .to_mm, .none } }, |
| | 8433 | }, |
| | 8434 | .dst_temps = .{.{ .rc = .mmx }}, |
| | 8435 | .each = .{ .once = &.{ |
| | 8436 | .{ ._, .p_d, .cmpeq, .dst0q, .dst0q, ._, ._ }, |
| | 8437 | .{ ._, .p_, .xor, .dst0q, .src0q, ._, ._ }, |
| | 8438 | } }, |
| | 8439 | }, .{ |
| | 8440 | .required_features = .{ .mmx, null, null, null }, |
| | 8441 | .src_constraints = .{ .{ .unsigned_int = .qword }, .any }, |
| | 8442 | .patterns = &.{ |
| | 8443 | .{ .src = .{ .to_mut_mm, .none } }, |
| | 8444 | }, |
| | 8445 | .extra_temps = .{ |
| | 8446 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 8447 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| | 8448 | .unused, |
| | 8449 | .unused, |
| | 8450 | .unused, |
| | 8451 | .unused, |
| | 8452 | .unused, |
| | 8453 | .unused, |
| | 8454 | .unused, |
| | 8455 | }, |
| | 8456 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8457 | .each = .{ .once = &.{ |
| | 8458 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 8459 | .{ ._, .p_, .xor, .dst0q, .lea(.qword, .tmp0), ._, ._ }, |
| | 8460 | } }, |
| | 8461 | }, .{ |
| | 8462 | .required_features = .{ .avx, null, null, null }, |
| | 8463 | .src_constraints = .{ .{ .signed_or_exact_int = .xword }, .any }, |
| | 8464 | .patterns = &.{ |
| | 8465 | .{ .src = .{ .mem, .none } }, |
| | 8466 | .{ .src = .{ .to_xmm, .none } }, |
| | 8467 | }, |
| | 8468 | .dst_temps = .{.{ .rc = .sse }}, |
| | 8469 | .each = .{ .once = &.{ |
| | 8470 | .{ ._, .vp_q, .cmpeq, .dst0x, .dst0x, .dst0x, ._ }, |
| | 8471 | .{ ._, .vp_, .xor, .dst0x, .dst0x, .src0x, ._ }, |
| | 8472 | } }, |
| | 8473 | }, .{ |
| | 8474 | .required_features = .{ .avx, null, null, null }, |
| | 8475 | .src_constraints = .{ .{ .unsigned_int = .xword }, .any }, |
| | 8476 | .patterns = &.{ |
| | 8477 | .{ .src = .{ .to_xmm, .none } }, |
| | 8478 | }, |
| | 8479 | .extra_temps = .{ |
| | 8480 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 8481 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| | 8482 | .unused, |
| | 8483 | .unused, |
| | 8484 | .unused, |
| | 8485 | .unused, |
| | 8486 | .unused, |
| | 8487 | .unused, |
| | 8488 | .unused, |
| | 8489 | }, |
| | 8490 | .dst_temps = .{.{ .rc = .sse }}, |
| | 8491 | .each = .{ .once = &.{ |
| | 8492 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 8493 | .{ ._, .vp_, .xor, .dst0x, .src0x, .lea(.xword, .tmp0), ._ }, |
| | 8494 | } }, |
| | 8495 | }, .{ |
| | 8496 | .required_features = .{ .sse2, null, null, null }, |
| | 8497 | .src_constraints = .{ .{ .signed_or_exact_int = .xword }, .any }, |
| | 8498 | .patterns = &.{ |
| | 8499 | .{ .src = .{ .mem, .none } }, |
| | 8500 | .{ .src = .{ .to_xmm, .none } }, |
| | 8501 | }, |
| | 8502 | .dst_temps = .{.{ .rc = .sse }}, |
| | 8503 | .each = .{ .once = &.{ |
| | 8504 | .{ ._, .p_d, .cmpeq, .dst0x, .dst0x, ._, ._ }, |
| | 8505 | .{ ._, .p_, .xor, .dst0x, .src0x, ._, ._ }, |
| | 8506 | } }, |
| | 8507 | }, .{ |
| | 8508 | .required_features = .{ .sse2, null, null, null }, |
| | 8509 | .src_constraints = .{ .{ .unsigned_int = .xword }, .any }, |
| | 8510 | .patterns = &.{ |
| | 8511 | .{ .src = .{ .to_mut_xmm, .none } }, |
| | 8512 | }, |
| | 8513 | .extra_temps = .{ |
| | 8514 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 8515 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| | 8516 | .unused, |
| | 8517 | .unused, |
| | 8518 | .unused, |
| | 8519 | .unused, |
| | 8520 | .unused, |
| | 8521 | .unused, |
| | 8522 | .unused, |
| | 8523 | }, |
| | 8524 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8525 | .each = .{ .once = &.{ |
| | 8526 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 8527 | .{ ._, .p_, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ }, |
| | 8528 | } }, |
| | 8529 | }, .{ |
| | 8530 | .required_features = .{ .sse, null, null, null }, |
| | 8531 | .src_constraints = .{ .{ .int = .xword }, .any }, |
| | 8532 | .patterns = &.{ |
| | 8533 | .{ .src = .{ .to_mut_xmm, .none } }, |
| | 8534 | }, |
| | 8535 | .extra_temps = .{ |
| | 8536 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 8537 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| | 8538 | .unused, |
| | 8539 | .unused, |
| | 8540 | .unused, |
| | 8541 | .unused, |
| | 8542 | .unused, |
| | 8543 | .unused, |
| | 8544 | .unused, |
| | 8545 | }, |
| | 8546 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8547 | .each = .{ .once = &.{ |
| | 8548 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 8549 | .{ ._, ._ps, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ }, |
| | 8550 | } }, |
| | 8551 | }, .{ |
| | 8552 | .required_features = .{ .avx2, null, null, null }, |
| | 8553 | .src_constraints = .{ .{ .signed_or_exact_int = .yword }, .any }, |
| | 8554 | .patterns = &.{ |
| | 8555 | .{ .src = .{ .mem, .none } }, |
| | 8556 | .{ .src = .{ .to_ymm, .none } }, |
| | 8557 | }, |
| | 8558 | .dst_temps = .{.{ .rc = .sse }}, |
| | 8559 | .each = .{ .once = &.{ |
| | 8560 | .{ ._, .vp_q, .cmpeq, .dst0y, .dst0y, .dst0y, ._ }, |
| | 8561 | .{ ._, .vp_, .xor, .dst0y, .dst0y, .src0y, ._ }, |
| | 8562 | } }, |
| | 8563 | }, .{ |
| | 8564 | .required_features = .{ .avx2, null, null, null }, |
| | 8565 | .src_constraints = .{ .{ .unsigned_int = .yword }, .any }, |
| | 8566 | .patterns = &.{ |
| | 8567 | .{ .src = .{ .to_ymm, .none } }, |
| | 8568 | }, |
| | 8569 | .extra_temps = .{ |
| | 8570 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 8571 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| | 8572 | .unused, |
| | 8573 | .unused, |
| | 8574 | .unused, |
| | 8575 | .unused, |
| | 8576 | .unused, |
| | 8577 | .unused, |
| | 8578 | .unused, |
| | 8579 | }, |
| | 8580 | .dst_temps = .{.{ .rc = .sse }}, |
| | 8581 | .each = .{ .once = &.{ |
| | 8582 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 8583 | .{ ._, .vp_, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, |
| | 8584 | } }, |
| | 8585 | }, .{ |
| | 8586 | .required_features = .{ .avx, null, null, null }, |
| | 8587 | .src_constraints = .{ .{ .signed_or_exact_int = .yword }, .any }, |
| | 8588 | .patterns = &.{ |
| | 8589 | .{ .src = .{ .mem, .none } }, |
| | 8590 | .{ .src = .{ .to_ymm, .none } }, |
| | 8591 | }, |
| | 8592 | .dst_temps = .{.{ .rc = .sse }}, |
| | 8593 | .each = .{ .once = &.{ |
| | 8594 | .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .ui(0b01111) }, |
| | 8595 | .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ }, |
| | 8596 | } }, |
| | 8597 | }, .{ |
| | 8598 | .required_features = .{ .avx, null, null, null }, |
| | 8599 | .src_constraints = .{ .{ .unsigned_int = .yword }, .any }, |
| | 8600 | .patterns = &.{ |
| | 8601 | .{ .src = .{ .to_ymm, .none } }, |
| | 8602 | }, |
| | 8603 | .extra_temps = .{ |
| | 8604 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 8605 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| | 8606 | .unused, |
| | 8607 | .unused, |
| | 8608 | .unused, |
| | 8609 | .unused, |
| | 8610 | .unused, |
| | 8611 | .unused, |
| | 8612 | .unused, |
| | 8613 | }, |
| | 8614 | .dst_temps = .{.{ .rc = .sse }}, |
| | 8615 | .each = .{ .once = &.{ |
| | 8616 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 8617 | .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, |
| | 8618 | } }, |
| | 8619 | }, .{ |
| | 8620 | .required_features = .{ .avx2, null, null, null }, |
| | 8621 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .xword } }, .any }, |
| | 8622 | .patterns = &.{ |
| | 8623 | .{ .src = .{ .to_mem, .none } }, |
| | 8624 | }, |
| | 8625 | .extra_temps = .{ |
| | 8626 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8627 | .{ .kind = .{ .rc = .sse } }, |
| | 8628 | .{ .kind = .{ .rc = .sse } }, |
| | 8629 | .unused, |
| | 8630 | .unused, |
| | 8631 | .unused, |
| | 8632 | .unused, |
| | 8633 | .unused, |
| | 8634 | .unused, |
| | 8635 | }, |
| | 8636 | .dst_temps = .{.mem}, |
| | 8637 | .clobbers = .{ .eflags = true }, |
| | 8638 | .each = .{ .once = &.{ |
| | 8639 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| | 8640 | .{ ._, .vp_q, .cmpeq, .tmp1y, .tmp1y, .tmp1y, ._ }, |
| | 8641 | .{ .@"0:", .vp_, .xor, .tmp2y, .tmp1y, .memiad(.src0y, .tmp0, .add_size, -16), ._ }, |
| | 8642 | .{ ._, .v_dqu, .mov, .memiad(.dst0y, .tmp0, .add_size, -16), .tmp2y, ._, ._ }, |
| | 8643 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 8644 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8645 | .{ .@"0:", .vp_, .xor, .tmp2x, .tmp1x, .memad(.src0x, .add_size, -16), ._ }, |
| | 8646 | .{ ._, .v_dqa, .mov, .memad(.dst0x, .add_size, -16), .tmp2x, ._, ._ }, |
| | 8647 | } }, |
| | 8648 | }, .{ |
| | 8649 | .required_features = .{ .avx2, null, null, null }, |
| | 8650 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .yword } }, .any }, |
| | 8651 | .patterns = &.{ |
| | 8652 | .{ .src = .{ .to_mem, .none } }, |
| | 8653 | }, |
| | 8654 | .extra_temps = .{ |
| | 8655 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8656 | .{ .kind = .{ .rc = .sse } }, |
| | 8657 | .{ .kind = .{ .rc = .sse } }, |
| | 8658 | .unused, |
| | 8659 | .unused, |
| | 8660 | .unused, |
| | 8661 | .unused, |
| | 8662 | .unused, |
| | 8663 | .unused, |
| | 8664 | }, |
| | 8665 | .dst_temps = .{.mem}, |
| | 8666 | .clobbers = .{ .eflags = true }, |
| | 8667 | .each = .{ .once = &.{ |
| | 8668 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8669 | .{ ._, .vp_q, .cmpeq, .tmp1y, .tmp1y, .tmp1y, ._ }, |
| | 8670 | .{ .@"0:", .vp_, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ }, |
| | 8671 | .{ ._, .v_dqu, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ }, |
| | 8672 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 8673 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8674 | } }, |
| | 8675 | }, .{ |
| | 8676 | .required_features = .{ .avx, null, null, null }, |
| | 8677 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .xword } }, .any }, |
| | 8678 | .patterns = &.{ |
| | 8679 | .{ .src = .{ .to_mem, .none } }, |
| | 8680 | }, |
| | 8681 | .extra_temps = .{ |
| | 8682 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8683 | .{ .kind = .{ .rc = .sse } }, |
| | 8684 | .{ .kind = .{ .rc = .sse } }, |
| | 8685 | .unused, |
| | 8686 | .unused, |
| | 8687 | .unused, |
| | 8688 | .unused, |
| | 8689 | .unused, |
| | 8690 | .unused, |
| | 8691 | }, |
| | 8692 | .dst_temps = .{.mem}, |
| | 8693 | .clobbers = .{ .eflags = true }, |
| | 8694 | .each = .{ .once = &.{ |
| | 8695 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| | 8696 | .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .ui(0b01111) }, |
| | 8697 | .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memiad(.src0y, .tmp0, .add_size, -16), ._ }, |
| | 8698 | .{ ._, .v_pd, .movu, .memiad(.dst0y, .tmp0, .add_size, -16), .tmp2y, ._, ._ }, |
| | 8699 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 8700 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8701 | .{ .@"0:", .v_pd, .xor, .tmp2x, .tmp1x, .memad(.src0x, .add_size, -16), ._ }, |
| | 8702 | .{ ._, .v_pd, .mova, .memad(.dst0x, .add_size, -16), .tmp2x, ._, ._ }, |
| | 8703 | } }, |
| | 8704 | }, .{ |
| | 8705 | .required_features = .{ .avx, null, null, null }, |
| | 8706 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .yword } }, .any }, |
| | 8707 | .patterns = &.{ |
| | 8708 | .{ .src = .{ .to_mem, .none } }, |
| | 8709 | }, |
| | 8710 | .extra_temps = .{ |
| | 8711 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8712 | .{ .kind = .{ .rc = .sse } }, |
| | 8713 | .{ .kind = .{ .rc = .sse } }, |
| | 8714 | .unused, |
| | 8715 | .unused, |
| | 8716 | .unused, |
| | 8717 | .unused, |
| | 8718 | .unused, |
| | 8719 | .unused, |
| | 8720 | }, |
| | 8721 | .dst_temps = .{.mem}, |
| | 8722 | .clobbers = .{ .eflags = true }, |
| | 8723 | .each = .{ .once = &.{ |
| | 8724 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8725 | .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .ui(0b01111) }, |
| | 8726 | .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ }, |
| | 8727 | .{ ._, .v_pd, .movu, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ }, |
| | 8728 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 8729 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8730 | } }, |
| | 8731 | }, .{ |
| | 8732 | .required_features = .{ .avx, null, null, null }, |
| | 8733 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| | 8734 | .patterns = &.{ |
| | 8735 | .{ .src = .{ .to_mem, .none } }, |
| | 8736 | }, |
| | 8737 | .extra_temps = .{ |
| | 8738 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8739 | .{ .kind = .{ .rc = .sse } }, |
| | 8740 | .{ .kind = .{ .rc = .sse } }, |
| | 8741 | .unused, |
| | 8742 | .unused, |
| | 8743 | .unused, |
| | 8744 | .unused, |
| | 8745 | .unused, |
| | 8746 | .unused, |
| | 8747 | }, |
| | 8748 | .dst_temps = .{.mem}, |
| | 8749 | .clobbers = .{ .eflags = true }, |
| | 8750 | .each = .{ .once = &.{ |
| | 8751 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8752 | .{ ._, .vp_q, .cmpeq, .tmp1x, .tmp1x, .tmp1x, ._ }, |
| | 8753 | .{ .@"0:", .v_, .xor, .tmp2x, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._ }, |
| | 8754 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp2x, ._, ._ }, |
| | 8755 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 8756 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8757 | } }, |
| | 8758 | }, .{ |
| | 8759 | .required_features = .{ .sse2, null, null, null }, |
| | 8760 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| | 8761 | .patterns = &.{ |
| | 8762 | .{ .src = .{ .to_mem, .none } }, |
| | 8763 | }, |
| | 8764 | .extra_temps = .{ |
| | 8765 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8766 | .{ .kind = .{ .rc = .sse } }, |
| | 8767 | .{ .kind = .{ .rc = .sse } }, |
| | 8768 | .unused, |
| | 8769 | .unused, |
| | 8770 | .unused, |
| | 8771 | .unused, |
| | 8772 | .unused, |
| | 8773 | .unused, |
| | 8774 | }, |
| | 8775 | .dst_temps = .{.mem}, |
| | 8776 | .clobbers = .{ .eflags = true }, |
| | 8777 | .each = .{ .once = &.{ |
| | 8778 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8779 | .{ ._, .p_d, .cmpeq, .tmp1x, .tmp1x, ._, ._ }, |
| | 8780 | .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 8781 | .{ ._, .p_, .xor, .tmp2x, .tmp1x, ._, ._ }, |
| | 8782 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp2x, ._, ._ }, |
| | 8783 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 8784 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8785 | } }, |
| | 8786 | }, .{ |
| | 8787 | .required_features = .{ .@"64bit", null, null, null }, |
| | 8788 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| | 8789 | .patterns = &.{ |
| | 8790 | .{ .src = .{ .mut_mem, .none } }, |
| | 8791 | }, |
| | 8792 | .extra_temps = .{ |
| | 8793 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8794 | .unused, |
| | 8795 | .unused, |
| | 8796 | .unused, |
| | 8797 | .unused, |
| | 8798 | .unused, |
| | 8799 | .unused, |
| | 8800 | .unused, |
| | 8801 | .unused, |
| | 8802 | }, |
| | 8803 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8804 | .clobbers = .{ .eflags = true }, |
| | 8805 | .each = .{ .once = &.{ |
| | 8806 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8807 | .{ .@"0:", ._, .not, .memia(.dst0q, .tmp0, .add_size), ._, ._, ._ }, |
| | 8808 | .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, 8), ._, ._, ._ }, |
| | 8809 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 8810 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8811 | } }, |
| | 8812 | }, .{ |
| | 8813 | .required_features = .{ .@"64bit", null, null, null }, |
| | 8814 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| | 8815 | .patterns = &.{ |
| | 8816 | .{ .src = .{ .to_mem, .none } }, |
| | 8817 | }, |
| | 8818 | .extra_temps = .{ |
| | 8819 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8820 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 8821 | .unused, |
| | 8822 | .unused, |
| | 8823 | .unused, |
| | 8824 | .unused, |
| | 8825 | .unused, |
| | 8826 | .unused, |
| | 8827 | .unused, |
| | 8828 | }, |
| | 8829 | .dst_temps = .{.mem}, |
| | 8830 | .clobbers = .{ .eflags = true }, |
| | 8831 | .each = .{ .once = &.{ |
| | 8832 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 8833 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 8834 | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, |
| | 8835 | .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| | 8836 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 8837 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8838 | } }, |
| | 8839 | }, .{ |
| | 8840 | .required_features = .{ .@"64bit", null, null, null }, |
| | 8841 | .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .xword, .is = .dword } }, .any }, |
| | 8842 | .patterns = &.{ |
| | 8843 | .{ .src = .{ .mut_mem, .none } }, |
| | 8844 | }, |
| | 8845 | .extra_temps = .{ |
| | 8846 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8847 | .unused, |
| | 8848 | .unused, |
| | 8849 | .unused, |
| | 8850 | .unused, |
| | 8851 | .unused, |
| | 8852 | .unused, |
| | 8853 | .unused, |
| | 8854 | .unused, |
| | 8855 | }, |
| | 8856 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8857 | .clobbers = .{ .eflags = true }, |
| | 8858 | .each = .{ .once = &.{ |
| | 8859 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| | 8860 | .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16), ._, ._, ._ }, |
| | 8861 | .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16 + 8), ._, ._, ._ }, |
| | 8862 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 8863 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8864 | .{ ._, ._, .not, .memad(.dst0d, .add_size, -16), ._, ._, ._ }, |
| | 8865 | } }, |
| | 8866 | }, .{ |
| | 8867 | .required_features = .{ .@"64bit", null, null, null }, |
| | 8868 | .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .xword, .is = .dword } }, .any }, |
| | 8869 | .patterns = &.{ |
| | 8870 | .{ .src = .{ .to_mem, .none } }, |
| | 8871 | }, |
| | 8872 | .extra_temps = .{ |
| | 8873 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8874 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 8875 | .unused, |
| | 8876 | .unused, |
| | 8877 | .unused, |
| | 8878 | .unused, |
| | 8879 | .unused, |
| | 8880 | .unused, |
| | 8881 | .unused, |
| | 8882 | }, |
| | 8883 | .dst_temps = .{.mem}, |
| | 8884 | .clobbers = .{ .eflags = true }, |
| | 8885 | .each = .{ .once = &.{ |
| | 8886 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| | 8887 | .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -16), ._, ._ }, |
| | 8888 | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, |
| | 8889 | .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -16), .tmp1q, ._, ._ }, |
| | 8890 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 8891 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8892 | .{ ._, ._, .mov, .tmp0d, .memad(.src0d, .add_size, -16), ._, ._ }, |
| | 8893 | .{ ._, ._, .not, .tmp0d, ._, ._, ._ }, |
| | 8894 | .{ ._, ._, .mov, .memad(.dst0d, .add_size, -16), .tmp0d, ._, ._ }, |
| | 8895 | .{ ._, ._, .mov, .memad(.dst0d, .add_size, -16 + 4), .si(0), ._, ._ }, |
| | 8896 | .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16 + 8), .si(0), ._, ._ }, |
| | 8897 | } }, |
| | 8898 | }, .{ |
| | 8899 | .required_features = .{ .@"64bit", null, null, null }, |
| | 8900 | .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .qword, .is = .qword } }, .any }, |
| | 8901 | .patterns = &.{ |
| | 8902 | .{ .src = .{ .mut_mem, .none } }, |
| | 8903 | }, |
| | 8904 | .extra_temps = .{ |
| | 8905 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8906 | .unused, |
| | 8907 | .unused, |
| | 8908 | .unused, |
| | 8909 | .unused, |
| | 8910 | .unused, |
| | 8911 | .unused, |
| | 8912 | .unused, |
| | 8913 | .unused, |
| | 8914 | }, |
| | 8915 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8916 | .clobbers = .{ .eflags = true }, |
| | 8917 | .each = .{ .once = &.{ |
| | 8918 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| | 8919 | .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16), ._, ._, ._ }, |
| | 8920 | .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16 + 8), ._, ._, ._ }, |
| | 8921 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 8922 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8923 | .{ ._, ._, .not, .memad(.dst0q, .add_size, -16), ._, ._, ._ }, |
| | 8924 | } }, |
| | 8925 | }, .{ |
| | 8926 | .required_features = .{ .@"64bit", null, null, null }, |
| | 8927 | .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .qword, .is = .qword } }, .any }, |
| | 8928 | .patterns = &.{ |
| | 8929 | .{ .src = .{ .to_mem, .none } }, |
| | 8930 | }, |
| | 8931 | .extra_temps = .{ |
| | 8932 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8933 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 8934 | .unused, |
| | 8935 | .unused, |
| | 8936 | .unused, |
| | 8937 | .unused, |
| | 8938 | .unused, |
| | 8939 | .unused, |
| | 8940 | .unused, |
| | 8941 | }, |
| | 8942 | .dst_temps = .{.mem}, |
| | 8943 | .clobbers = .{ .eflags = true }, |
| | 8944 | .each = .{ .once = &.{ |
| | 8945 | .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ }, |
| | 8946 | .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -8), ._, ._ }, |
| | 8947 | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, |
| | 8948 | .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -8), .tmp1q, ._, ._ }, |
| | 8949 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 8950 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8951 | .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .si(0), ._, ._ }, |
| | 8952 | } }, |
| | 8953 | }, .{ |
| | 8954 | .required_features = .{ .@"64bit", null, null, null }, |
| | 8955 | .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .dword, .is = .dword } }, .any }, |
| | 8956 | .patterns = &.{ |
| | 8957 | .{ .src = .{ .mut_mem, .none } }, |
| | 8958 | }, |
| | 8959 | .extra_temps = .{ |
| | 8960 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8961 | .unused, |
| | 8962 | .unused, |
| | 8963 | .unused, |
| | 8964 | .unused, |
| | 8965 | .unused, |
| | 8966 | .unused, |
| | 8967 | .unused, |
| | 8968 | .unused, |
| | 8969 | }, |
| | 8970 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 8971 | .clobbers = .{ .eflags = true }, |
| | 8972 | .each = .{ .once = &.{ |
| | 8973 | .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ }, |
| | 8974 | .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -8), ._, ._, ._ }, |
| | 8975 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 8976 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 8977 | .{ ._, ._, .not, .memad(.dst0d, .add_size, -8), ._, ._, ._ }, |
| | 8978 | } }, |
| | 8979 | }, .{ |
| | 8980 | .required_features = .{ .@"64bit", null, null, null }, |
| | 8981 | .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .dword, .is = .dword } }, .any }, |
| | 8982 | .patterns = &.{ |
| | 8983 | .{ .src = .{ .to_mem, .none } }, |
| | 8984 | }, |
| | 8985 | .extra_temps = .{ |
| | 8986 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 8987 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 8988 | .unused, |
| | 8989 | .unused, |
| | 8990 | .unused, |
| | 8991 | .unused, |
| | 8992 | .unused, |
| | 8993 | .unused, |
| | 8994 | .unused, |
| | 8995 | }, |
| | 8996 | .dst_temps = .{.mem}, |
| | 8997 | .clobbers = .{ .eflags = true }, |
| | 8998 | .each = .{ .once = &.{ |
| | 8999 | .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ }, |
| | 9000 | .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -8), ._, ._ }, |
| | 9001 | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, |
| | 9002 | .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -8), .tmp1q, ._, ._ }, |
| | 9003 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 9004 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 9005 | .{ ._, ._, .mov, .tmp0d, .memad(.src0d, .add_size, -8), ._, ._ }, |
| | 9006 | .{ ._, ._, .not, .tmp0d, ._, ._, ._ }, |
| | 9007 | .{ ._, ._, .mov, .memad(.dst0d, .add_size, -8), .tmp0d, ._, ._ }, |
| | 9008 | .{ ._, ._, .mov, .memad(.dst0d, .add_size, -8 + 4), .si(0), ._, ._ }, |
| | 9009 | } }, |
| | 9010 | }, .{ |
| | 9011 | .required_features = .{ .@"64bit", null, null, null }, |
| | 9012 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .dword } }, .any }, |
| | 9013 | .patterns = &.{ |
| | 9014 | .{ .src = .{ .mut_mem, .none } }, |
| | 9015 | }, |
| | 9016 | .extra_temps = .{ |
| | 9017 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 9018 | .unused, |
| | 9019 | .unused, |
| | 9020 | .unused, |
| | 9021 | .unused, |
| | 9022 | .unused, |
| | 9023 | .unused, |
| | 9024 | .unused, |
| | 9025 | .unused, |
| | 9026 | }, |
| | 9027 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 9028 | .clobbers = .{ .eflags = true }, |
| | 9029 | .each = .{ .once = &.{ |
| | 9030 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| | 9031 | .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16), ._, ._, ._ }, |
| | 9032 | .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16 + 8), ._, ._, ._ }, |
| | 9033 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 9034 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 9035 | .{ ._, ._, .xor, .memad(.dst0d, .add_size, -16), .sa(.src0, .add_umax), ._, ._ }, |
| | 9036 | } }, |
| | 9037 | }, .{ |
| | 9038 | .required_features = .{ .@"64bit", null, null, null }, |
| | 9039 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .dword } }, .any }, |
| | 9040 | .patterns = &.{ |
| | 9041 | .{ .src = .{ .to_mem, .none } }, |
| | 9042 | }, |
| | 9043 | .extra_temps = .{ |
| | 9044 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 9045 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 9046 | .unused, |
| | 9047 | .unused, |
| | 9048 | .unused, |
| | 9049 | .unused, |
| | 9050 | .unused, |
| | 9051 | .unused, |
| | 9052 | .unused, |
| | 9053 | }, |
| | 9054 | .dst_temps = .{.mem}, |
| | 9055 | .clobbers = .{ .eflags = true }, |
| | 9056 | .each = .{ .once = &.{ |
| | 9057 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| | 9058 | .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -16), ._, ._ }, |
| | 9059 | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, |
| | 9060 | .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -16), .tmp1q, ._, ._ }, |
| | 9061 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 9062 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 9063 | .{ ._, ._, .mov, .tmp0d, .memad(.src0d, .add_size, -16), ._, ._ }, |
| | 9064 | .{ ._, ._, .xor, .tmp0d, .sa(.src0, .add_umax), ._, ._ }, |
| | 9065 | .{ ._, ._, .mov, .memad(.dst0d, .add_size, -16), .tmp0d, ._, ._ }, |
| | 9066 | .{ ._, ._, .mov, .memad(.dst0d, .add_size, -16 + 4), .si(0), ._, ._ }, |
| | 9067 | .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16 + 8), .si(0), ._, ._ }, |
| | 9068 | } }, |
| | 9069 | }, .{ |
| | 9070 | .required_features = .{ .@"64bit", null, null, null }, |
| | 9071 | .src_constraints = .{ .{ .remainder_int = .{ .of = .qword, .is = .dword } }, .any }, |
| | 9072 | .patterns = &.{ |
| | 9073 | .{ .src = .{ .mut_mem, .none } }, |
| | 9074 | }, |
| | 9075 | .extra_temps = .{ |
| | 9076 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 9077 | .unused, |
| | 9078 | .unused, |
| | 9079 | .unused, |
| | 9080 | .unused, |
| | 9081 | .unused, |
| | 9082 | .unused, |
| | 9083 | .unused, |
| | 9084 | .unused, |
| | 9085 | }, |
| | 9086 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 9087 | .clobbers = .{ .eflags = true }, |
| | 9088 | .each = .{ .once = &.{ |
| | 9089 | .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ }, |
| | 9090 | .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -8), ._, ._, ._ }, |
| | 9091 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 9092 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 9093 | .{ ._, ._, .xor, .memad(.dst0d, .add_size, -8), .sa(.src0, .add_umax), ._, ._ }, |
| | 9094 | } }, |
| | 9095 | }, .{ |
| | 9096 | .required_features = .{ .@"64bit", null, null, null }, |
| | 9097 | .src_constraints = .{ .{ .remainder_int = .{ .of = .qword, .is = .dword } }, .any }, |
| | 9098 | .patterns = &.{ |
| | 9099 | .{ .src = .{ .to_mem, .none } }, |
| | 9100 | }, |
| | 9101 | .extra_temps = .{ |
| | 9102 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 9103 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 9104 | .unused, |
| | 9105 | .unused, |
| | 9106 | .unused, |
| | 9107 | .unused, |
| | 9108 | .unused, |
| | 9109 | .unused, |
| | 9110 | .unused, |
| | 9111 | }, |
| | 9112 | .dst_temps = .{.mem}, |
| | 9113 | .clobbers = .{ .eflags = true }, |
| | 9114 | .each = .{ .once = &.{ |
| | 9115 | .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ }, |
| | 9116 | .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -8), ._, ._ }, |
| | 9117 | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, |
| | 9118 | .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -8), .tmp1q, ._, ._ }, |
| | 9119 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 9120 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 9121 | .{ ._, ._, .mov, .tmp0d, .memad(.src0d, .add_size, -8), ._, ._ }, |
| | 9122 | .{ ._, ._, .xor, .tmp0d, .sa(.src0, .add_umax), ._, ._ }, |
| | 9123 | .{ ._, ._, .mov, .memad(.dst0d, .add_size, -8), .tmp0d, ._, ._ }, |
| | 9124 | .{ ._, ._, .mov, .memad(.dst0d, .add_size, -8 + 4), .si(0), ._, ._ }, |
| | 9125 | } }, |
| | 9126 | }, .{ |
| | 9127 | .required_features = .{ .@"64bit", null, null, null }, |
| | 9128 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| | 9129 | .patterns = &.{ |
| | 9130 | .{ .src = .{ .mut_mem, .none } }, |
| | 9131 | }, |
| | 9132 | .extra_temps = .{ |
| | 9133 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 9134 | .unused, |
| | 9135 | .unused, |
| | 9136 | .unused, |
| | 9137 | .unused, |
| | 9138 | .unused, |
| | 9139 | .unused, |
| | 9140 | .unused, |
| | 9141 | .unused, |
| | 9142 | }, |
| | 9143 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 9144 | .clobbers = .{ .eflags = true }, |
| | 9145 | .each = .{ .once = &.{ |
| | 9146 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| | 9147 | .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16), ._, ._, ._ }, |
| | 9148 | .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16 + 8), ._, ._, ._ }, |
| | 9149 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 9150 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 9151 | .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ }, |
| | 9152 | .{ ._, ._, .xor, .memad(.dst0q, .add_size, -16), .tmp0q, ._, ._ }, |
| | 9153 | } }, |
| | 9154 | }, .{ |
| | 9155 | .required_features = .{ .@"64bit", null, null, null }, |
| | 9156 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| | 9157 | .patterns = &.{ |
| | 9158 | .{ .src = .{ .to_mem, .none } }, |
| | 9159 | }, |
| | 9160 | .extra_temps = .{ |
| | 9161 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 9162 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 9163 | .unused, |
| | 9164 | .unused, |
| | 9165 | .unused, |
| | 9166 | .unused, |
| | 9167 | .unused, |
| | 9168 | .unused, |
| | 9169 | .unused, |
| | 9170 | }, |
| | 9171 | .dst_temps = .{.mem}, |
| | 9172 | .clobbers = .{ .eflags = true }, |
| | 9173 | .each = .{ .once = &.{ |
| | 9174 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| | 9175 | .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -16), ._, ._ }, |
| | 9176 | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, |
| | 9177 | .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -16), .tmp1q, ._, ._ }, |
| | 9178 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 9179 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 9180 | .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ }, |
| | 9181 | .{ ._, ._, .xor, .tmp0q, .memad(.src0q, .add_size, -16), ._, ._ }, |
| | 9182 | .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16), .tmp0q, ._, ._ }, |
| | 9183 | .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .si(0), ._, ._ }, |
| | 9184 | } }, |
| | 9185 | }, .{ |
| | 9186 | .required_features = .{ .@"64bit", null, null, null }, |
| | 9187 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| | 9188 | .patterns = &.{ |
| | 9189 | .{ .src = .{ .mut_mem, .none } }, |
| | 9190 | }, |
| | 9191 | .extra_temps = .{ |
| | 9192 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 9193 | .unused, |
| | 9194 | .unused, |
| | 9195 | .unused, |
| | 9196 | .unused, |
| | 9197 | .unused, |
| | 9198 | .unused, |
| | 9199 | .unused, |
| | 9200 | .unused, |
| | 9201 | }, |
| | 9202 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 9203 | .clobbers = .{ .eflags = true }, |
| | 9204 | .each = .{ .once = &.{ |
| | 9205 | .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ }, |
| | 9206 | .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -8), ._, ._, ._ }, |
| | 9207 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 9208 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 9209 | .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ }, |
| | 9210 | .{ ._, ._, .xor, .memad(.dst0q, .add_size, -8), .tmp0q, ._, ._ }, |
| | 9211 | } }, |
| | 9212 | }, .{ |
| | 9213 | .required_features = .{ .@"64bit", null, null, null }, |
| | 9214 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| | 9215 | .patterns = &.{ |
| | 9216 | .{ .src = .{ .to_mem, .none } }, |
| | 9217 | }, |
| | 9218 | .extra_temps = .{ |
| | 9219 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 9220 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 9221 | .unused, |
| | 9222 | .unused, |
| | 9223 | .unused, |
| | 9224 | .unused, |
| | 9225 | .unused, |
| | 9226 | .unused, |
| | 9227 | .unused, |
| | 9228 | }, |
| | 9229 | .dst_temps = .{.mem}, |
| | 9230 | .clobbers = .{ .eflags = true }, |
| | 9231 | .each = .{ .once = &.{ |
| | 9232 | .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ }, |
| | 9233 | .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -8), ._, ._ }, |
| | 9234 | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, |
| | 9235 | .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -8), .tmp1q, ._, ._ }, |
| | 9236 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 9237 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 9238 | .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ }, |
| | 9239 | .{ ._, ._, .xor, .tmp0q, .memad(.src0q, .add_size, -8), ._, ._ }, |
| | 9240 | .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp0q, ._, ._ }, |
| | 9241 | } }, |
| | 9242 | }, .{ |
| | 9243 | .required_features = .{ .mmx, null, null, null }, |
| | 9244 | .src_constraints = .{ .{ .signed_int_or_full_vec = .qword }, .any }, |
| | 9245 | .patterns = &.{ |
| | 9246 | .{ .src = .{ .mem, .none } }, |
| | 9247 | .{ .src = .{ .to_mm, .none } }, |
| | 9248 | }, |
| | 9249 | .dst_temps = .{.{ .rc = .mmx }}, |
| | 9250 | .each = .{ .once = &.{ |
| | 9251 | .{ ._, .p_d, .cmpeq, .dst0q, .dst0q, ._, ._ }, |
| | 9252 | .{ ._, .p_, .xor, .dst0q, .src0q, ._, ._ }, |
| | 9253 | } }, |
| | 9254 | }, .{ |
| | 9255 | .required_features = .{ .mmx, null, null, null }, |
| | 9256 | .src_constraints = .{ .{ .unsigned_int_vec = .qword }, .any }, |
| | 9257 | .patterns = &.{ |
| | 9258 | .{ .src = .{ .to_mut_mm, .none } }, |
| | 9259 | }, |
| | 9260 | .extra_temps = .{ |
| | 9261 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 9262 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| | 9263 | .unused, |
| | 9264 | .unused, |
| | 9265 | .unused, |
| | 9266 | .unused, |
| | 9267 | .unused, |
| | 9268 | .unused, |
| | 9269 | .unused, |
| | 9270 | }, |
| | 9271 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 9272 | .each = .{ .once = &.{ |
| | 9273 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 9274 | .{ ._, .p_, .xor, .dst0q, .lea(.qword, .tmp0), ._, ._ }, |
| | 9275 | } }, |
| | 9276 | }, .{ |
| | 9277 | .required_features = .{ .avx, null, null, null }, |
| | 9278 | .src_constraints = .{ .{ .signed_int_or_full_vec = .xword }, .any }, |
| | 9279 | .patterns = &.{ |
| | 9280 | .{ .src = .{ .mem, .none } }, |
| | 9281 | .{ .src = .{ .to_xmm, .none } }, |
| | 9282 | }, |
| | 9283 | .dst_temps = .{.{ .rc = .sse }}, |
| | 9284 | .each = .{ .once = &.{ |
| | 9285 | .{ ._, .vp_q, .cmpeq, .dst0x, .dst0x, .dst0x, ._ }, |
| | 9286 | .{ ._, .vp_, .xor, .dst0x, .dst0x, .src0x, ._ }, |
| | 9287 | } }, |
| | 9288 | }, .{ |
| | 9289 | .required_features = .{ .avx, null, null, null }, |
| | 9290 | .src_constraints = .{ .{ .unsigned_int_vec = .xword }, .any }, |
| | 9291 | .patterns = &.{ |
| | 9292 | .{ .src = .{ .to_xmm, .none } }, |
| | 9293 | }, |
| | 9294 | .extra_temps = .{ |
| | 9295 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 9296 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| | 9297 | .unused, |
| | 9298 | .unused, |
| | 9299 | .unused, |
| | 9300 | .unused, |
| | 9301 | .unused, |
| | 9302 | .unused, |
| | 9303 | .unused, |
| | 9304 | }, |
| | 9305 | .dst_temps = .{.{ .rc = .sse }}, |
| | 9306 | .each = .{ .once = &.{ |
| | 9307 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 9308 | .{ ._, .vp_, .xor, .dst0x, .src0x, .lea(.xword, .tmp0), ._ }, |
| | 9309 | } }, |
| | 9310 | }, .{ |
| | 9311 | .required_features = .{ .sse2, null, null, null }, |
| | 9312 | .src_constraints = .{ .{ .signed_int_or_full_vec = .xword }, .any }, |
| | 9313 | .patterns = &.{ |
| | 9314 | .{ .src = .{ .mem, .none } }, |
| | 9315 | .{ .src = .{ .to_xmm, .none } }, |
| | 9316 | }, |
| | 9317 | .dst_temps = .{.{ .rc = .sse }}, |
| | 9318 | .each = .{ .once = &.{ |
| | 9319 | .{ ._, .p_d, .cmpeq, .dst0x, .dst0x, ._, ._ }, |
| | 9320 | .{ ._, .p_, .xor, .dst0x, .src0x, ._, ._ }, |
| | 9321 | } }, |
| | 9322 | }, .{ |
| | 9323 | .required_features = .{ .sse2, null, null, null }, |
| | 9324 | .src_constraints = .{ .{ .unsigned_int_vec = .xword }, .any }, |
| | 9325 | .patterns = &.{ |
| | 9326 | .{ .src = .{ .to_mut_xmm, .none } }, |
| | 9327 | }, |
| | 9328 | .extra_temps = .{ |
| | 9329 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 9330 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| | 9331 | .unused, |
| | 9332 | .unused, |
| | 9333 | .unused, |
| | 9334 | .unused, |
| | 9335 | .unused, |
| | 9336 | .unused, |
| | 9337 | .unused, |
| | 9338 | }, |
| | 9339 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 9340 | .each = .{ .once = &.{ |
| | 9341 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 9342 | .{ ._, .p_, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ }, |
| | 9343 | } }, |
| | 9344 | }, .{ |
| | 9345 | .required_features = .{ .sse, null, null, null }, |
| | 9346 | .src_constraints = .{ .{ .vec = .xword }, .any }, |
| | 9347 | .patterns = &.{ |
| | 9348 | .{ .src = .{ .to_mut_xmm, .none } }, |
| | 9349 | }, |
| | 9350 | .extra_temps = .{ |
| | 9351 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 9352 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| | 9353 | .unused, |
| | 9354 | .unused, |
| | 9355 | .unused, |
| | 9356 | .unused, |
| | 9357 | .unused, |
| | 9358 | .unused, |
| | 9359 | .unused, |
| | 9360 | }, |
| | 9361 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 9362 | .each = .{ .once = &.{ |
| | 9363 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 9364 | .{ ._, ._ps, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ }, |
| | 9365 | } }, |
| | 9366 | }, .{ |
| | 9367 | .required_features = .{ .avx2, null, null, null }, |
| | 9368 | .src_constraints = .{ .{ .signed_int_or_full_vec = .yword }, .any }, |
| | 9369 | .patterns = &.{ |
| | 9370 | .{ .src = .{ .mem, .none } }, |
| | 9371 | .{ .src = .{ .to_ymm, .none } }, |
| | 9372 | }, |
| | 9373 | .dst_temps = .{.{ .rc = .sse }}, |
| | 9374 | .each = .{ .once = &.{ |
| | 9375 | .{ ._, .vp_q, .cmpeq, .dst0y, .dst0y, .dst0y, ._ }, |
| | 9376 | .{ ._, .vp_, .xor, .dst0y, .dst0y, .src0y, ._ }, |
| | 9377 | } }, |
| | 9378 | }, .{ |
| | 9379 | .required_features = .{ .avx2, null, null, null }, |
| | 9380 | .src_constraints = .{ .{ .unsigned_int_vec = .yword }, .any }, |
| | 9381 | .patterns = &.{ |
| | 9382 | .{ .src = .{ .to_ymm, .none } }, |
| | 9383 | }, |
| | 9384 | .extra_temps = .{ |
| | 9385 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 9386 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| | 9387 | .unused, |
| | 9388 | .unused, |
| | 9389 | .unused, |
| | 9390 | .unused, |
| | 9391 | .unused, |
| | 9392 | .unused, |
| | 9393 | .unused, |
| | 9394 | }, |
| | 9395 | .dst_temps = .{.{ .rc = .sse }}, |
| | 9396 | .each = .{ .once = &.{ |
| | 9397 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 9398 | .{ ._, .vp_, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, |
| | 9399 | } }, |
| | 9400 | }, .{ |
| | 9401 | .required_features = .{ .avx, null, null, null }, |
| | 9402 | .src_constraints = .{ .{ .signed_int_or_full_vec = .yword }, .any }, |
| | 9403 | .patterns = &.{ |
| | 9404 | .{ .src = .{ .mem, .none } }, |
| | 9405 | .{ .src = .{ .to_ymm, .none } }, |
| | 9406 | }, |
| | 9407 | .dst_temps = .{.{ .rc = .sse }}, |
| | 9408 | .each = .{ .once = &.{ |
| | 9409 | .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .ui(0b01111) }, |
| | 9410 | .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ }, |
| | 9411 | } }, |
| | 9412 | }, .{ |
| | 9413 | .required_features = .{ .avx, null, null, null }, |
| | 9414 | .src_constraints = .{ .{ .unsigned_int_vec = .yword }, .any }, |
| | 9415 | .patterns = &.{ |
| | 9416 | .{ .src = .{ .to_ymm, .none } }, |
| | 9417 | }, |
| | 9418 | .extra_temps = .{ |
| | 9419 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 9420 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| | 9421 | .unused, |
| | 9422 | .unused, |
| | 9423 | .unused, |
| | 9424 | .unused, |
| | 9425 | .unused, |
| | 9426 | .unused, |
| | 9427 | .unused, |
| | 9428 | }, |
| | 9429 | .dst_temps = .{.{ .rc = .sse }}, |
| | 9430 | .each = .{ .once = &.{ |
| | 9431 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 9432 | .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, |
| | 9433 | } }, |
| | 9434 | }, .{ |
| | 9435 | .required_features = .{ .@"64bit", null, null, null }, |
| | 9436 | .patterns = &.{ |
| | 9437 | .{ .src = .{ .to_mem, .none } }, |
| | 9438 | }, |
| | 9439 | .extra_temps = .{ |
| | 9440 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 9441 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 9442 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 9443 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| | 9444 | .unused, |
| | 9445 | .unused, |
| | 9446 | .unused, |
| | 9447 | .unused, |
| | 9448 | .unused, |
| | 9449 | }, |
| | 9450 | .dst_temps = .{.mem}, |
| | 9451 | .each = .{ .once = &.{ |
| | 9452 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_src0_unaligned_size), ._, ._ }, |
| | 9453 | .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ }, |
| | 9454 | .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_src0_unaligned_size), ._, ._ }, |
| | 9455 | .{ ._, ._, .xor, .tmp2q, .leaia(.qword, .tmp1, .tmp0, .add_src0_unaligned_size), ._, ._ }, |
| | 9456 | .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_src0_unaligned_size), .tmp2q, ._, ._ }, |
| | 9457 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 9458 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 9459 | } }, |
| | 9460 | }, .{ |
| | 9461 | .patterns = &.{ |
| | 9462 | .{ .src = .{ .to_mem, .none } }, |
| | 9463 | }, |
| | 9464 | .extra_temps = .{ |
| | 9465 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 9466 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 9467 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 9468 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| | 9469 | .unused, |
| | 9470 | .unused, |
| | 9471 | .unused, |
| | 9472 | .unused, |
| | 9473 | .unused, |
| | 9474 | }, |
| | 9475 | .dst_temps = .{.mem}, |
| | 9476 | .each = .{ .once = &.{ |
| | 9477 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_src0_unaligned_size), ._, ._ }, |
| | 9478 | .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ }, |
| | 9479 | .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_src0_unaligned_size), ._, ._ }, |
| | 9480 | .{ ._, ._, .xor, .tmp2d, .leaia(.dword, .tmp1, .tmp0, .add_src0_unaligned_size), ._, ._ }, |
| | 9481 | .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_src0_unaligned_size), .tmp2d, ._, ._ }, |
| | 9482 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| | 9483 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 9484 | } }, |
| | 9485 | } }) catch |err| switch (err) { |
| | 9486 | error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{ |
| | 9487 | @tagName(air_tag), |
| | 9488 | cg.typeOf(ty_op.operand).fmt(pt), |
| | 9489 | ops[0].tracking(cg), |
| | 9490 | }), |
| | 9491 | else => |e| return e, |
| | 9492 | }; |
| | 9493 | try res[0].finish(inst, &.{ty_op.operand}, &ops, cg); |
| | 9494 | }, |
| | 9495 | |
| | 9496 | .block => if (use_old) try cg.airBlock(inst) else { |
| | 9497 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; |
| | 9498 | const extra = cg.air.extraData(Air.Block, ty_pl.payload); |
| | 9499 | try cg.asmPseudo(.pseudo_dbg_enter_block_none); |
| | 9500 | try cg.lowerBlock(inst, @ptrCast(cg.air.extra[extra.end..][0..extra.data.body_len])); |
| | 9501 | try cg.asmPseudo(.pseudo_dbg_leave_block_none); |
| | 9502 | }, |
| | 9503 | .loop => if (use_old) try cg.airLoop(inst) else { |
| | 9504 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; |
| | 9505 | const extra = cg.air.extraData(Air.Block, ty_pl.payload); |
| | 9506 | cg.scope_generation += 1; |
| | 9507 | try cg.loops.putNoClobber(cg.gpa, inst, .{ |
| | 9508 | .state = try cg.saveState(), |
| | 9509 | .target = @intCast(cg.mir_instructions.len), |
| | 9510 | }); |
| | 9511 | defer assert(cg.loops.remove(inst)); |
| | 9512 | try cg.genBodyBlock(@ptrCast(cg.air.extra[extra.end..][0..extra.data.body_len])); |
| | 9513 | }, |
| | 9514 | .repeat => if (use_old) try cg.airRepeat(inst) else { |
| | 9515 | const repeat = air_datas[@intFromEnum(inst)].repeat; |
| | 9516 | const loop = cg.loops.get(repeat.loop_inst).?; |
| | 9517 | try cg.restoreState(loop.state, &.{}, .{ |
| | 9518 | .emit_instructions = true, |
| | 9519 | .update_tracking = false, |
| | 9520 | .resurrect = false, |
| | 9521 | .close_scope = true, |
| | 9522 | }); |
| | 9523 | _ = try cg.asmJmpReloc(loop.target); |
| | 9524 | }, |
| | 9525 | .br => try cg.airBr(inst), |
| | 9526 | .trap => try cg.asmOpOnly(.{ ._2, .ud }), |
| | 9527 | .breakpoint => try cg.asmOpOnly(.{ ._3, .int }), |
| | 9528 | .ret_addr => if (use_old) try cg.airRetAddr(inst) else { |
| | 9529 | var slot = try cg.tempInit(.usize, .{ .load_frame = .{ |
| | 9530 | .index = .ret_addr, |
| | 9531 | } }); |
| | 9532 | while (try slot.toRegClass(true, .general_purpose, cg)) {} |
| | 9533 | try slot.finish(inst, &.{}, &.{}, cg); |
| | 9534 | }, |
| | 9535 | .frame_addr => if (use_old) try cg.airFrameAddress(inst) else { |
| | 9536 | const slot = try cg.tempInit(.usize, .{ .lea_frame = .{ |
| | 9537 | .index = .base_ptr, |
| | 9538 | } }); |
| | 9539 | try slot.finish(inst, &.{}, &.{}, cg); |
| | 9540 | }, |
| | 9541 | .call => try cg.airCall(inst, .auto, .{ .safety = true }), |
| | 9542 | .call_always_tail => try cg.airCall(inst, .always_tail, .{ .safety = true }), |
| | 9543 | .call_never_tail => try cg.airCall(inst, .never_tail, .{ .safety = true }), |
| | 9544 | .call_never_inline => try cg.airCall(inst, .never_inline, .{ .safety = true }), |
| | 9545 | |
| | 9546 | .clz => |air_tag| if (use_old) try cg.airClz(inst) else { |
| | 9547 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| | 9548 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| | 9549 | var res: [1]Temp = undefined; |
| | 9550 | cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{ |
| | 9551 | .required_features = .{ .slow_incdec, null, null, null }, |
| | 9552 | .src_constraints = .{ .{ .exact_signed_int = 1 }, .any }, |
| | 9553 | .patterns = &.{ |
| | 9554 | .{ .src = .{ .mut_mem, .none } }, |
| | 9555 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 9556 | }, |
| | 9557 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 9558 | .clobbers = .{ .eflags = true }, |
| | 9559 | .each = .{ .once = &.{ |
| | 9560 | .{ ._, ._, .add, .dst0b, .si(1), ._, ._ }, |
| | 9561 | } }, |
| | 9562 | }, .{ |
| | 9563 | .src_constraints = .{ .{ .exact_signed_int = 1 }, .any }, |
| | 9564 | .patterns = &.{ |
| | 9565 | .{ .src = .{ .mut_mem, .none } }, |
| | 9566 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 9567 | }, |
| | 9568 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 9569 | .clobbers = .{ .eflags = true }, |
| | 9570 | .each = .{ .once = &.{ |
| | 9571 | .{ ._, ._c, .in, .dst0b, ._, ._, ._ }, |
| | 9572 | } }, |
| | 9573 | }, .{ |
| | 9574 | .src_constraints = .{ .{ .exact_unsigned_int = 1 }, .any }, |
| | 9575 | .patterns = &.{ |
| | 9576 | .{ .src = .{ .mut_mem, .none } }, |
| | 9577 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 9578 | }, |
| | 9579 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 9580 | .clobbers = .{ .eflags = true }, |
| | 9581 | .each = .{ .once = &.{ |
| | 9582 | .{ ._, ._, .xor, .dst0b, .si(1), ._, ._ }, |
| | 9583 | } }, |
| | 9584 | }, .{ |
| | 9585 | .required_features = .{ .lzcnt, null, null, null }, |
| | 9586 | .src_constraints = .{ .{ .unsigned_or_exact_int = .byte }, .any }, |
| | 9587 | .patterns = &.{ |
| | 9588 | .{ .src = .{ .mem, .none } }, |
| | 9589 | .{ .src = .{ .to_gpr, .none } }, |
| | 9590 | }, |
| | 9591 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 9592 | .clobbers = .{ .eflags = true }, |
| | 9593 | .each = .{ .once = &.{ |
| | 9594 | .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, |
| | 9595 | .{ ._, ._, .lzcnt, .dst0d, .dst0d, ._, ._ }, |
| | 9596 | .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ }, |
| | 9597 | } }, |
| | 9598 | }, .{ |
| | 9599 | .required_features = .{ .lzcnt, null, null, null }, |
| | 9600 | .src_constraints = .{ .{ .signed_int = .byte }, .any }, |
| | 9601 | .patterns = &.{ |
| | 9602 | .{ .src = .{ .mem, .none } }, |
| | 9603 | .{ .src = .{ .to_gpr, .none } }, |
| | 9604 | }, |
| | 9605 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 9606 | .clobbers = .{ .eflags = true }, |
| | 9607 | .each = .{ .once = &.{ |
| | 9608 | .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, |
| | 9609 | .{ ._, ._, .@"and", .dst0d, .sa(.src0, .add_umax), ._, ._ }, |
| | 9610 | .{ ._, ._, .lzcnt, .dst0d, .dst0d, ._, ._ }, |
| | 9611 | .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ }, |
| | 9612 | } }, |
| | 9613 | }, .{ |
| | 9614 | .required_features = .{ .false_deps_lzcnt_tzcnt, .lzcnt, null, null }, |
| | 9615 | .src_constraints = .{ .{ .exact_int = 16 }, .any }, |
| | 9616 | .patterns = &.{ |
| | 9617 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 9618 | }, |
| | 9619 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 9620 | .clobbers = .{ .eflags = true }, |
| | 9621 | .each = .{ .once = &.{ |
| | 9622 | .{ ._, ._, .lzcnt, .dst0w, .src0w, ._, ._ }, |
| | 9623 | } }, |
| | 9624 | }, .{ |
| | 9625 | .required_features = .{ .lzcnt, null, null, null }, |
| | 9626 | .src_constraints = .{ .{ .exact_int = 16 }, .any }, |
| | 9627 | .patterns = &.{ |
| | 9628 | .{ .src = .{ .mem, .none } }, |
| | 9629 | .{ .src = .{ .to_gpr, .none } }, |
| | 9630 | }, |
| | 9631 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 9632 | .clobbers = .{ .eflags = true }, |
| | 9633 | .each = .{ .once = &.{ |
| | 9634 | .{ ._, ._, .lzcnt, .dst0w, .src0w, ._, ._ }, |
| | 9635 | } }, |
| | 9636 | }, .{ |
| | 9637 | .required_features = .{ .lzcnt, null, null, null }, |
| | 9638 | .src_constraints = .{ .{ .signed_int = .word }, .any }, |
| | 9639 | .patterns = &.{ |
| | 9640 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 9641 | }, |
| | 9642 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 9643 | .clobbers = .{ .eflags = true }, |
| | 9644 | .each = .{ .once = &.{ |
| | 9645 | .{ ._, ._, .@"and", .src0w, .sa(.src0, .add_umax), ._, ._ }, |
| | 9646 | .{ ._, ._, .lzcnt, .dst0w, .src0w, ._, ._ }, |
| | 9647 | .{ ._, ._, .sub, .dst0b, .sia(16, .src0, .sub_bit_size), ._, ._ }, |
| | 9648 | } }, |
| | 9649 | }, .{ |
| | 9650 | .required_features = .{ .false_deps_lzcnt_tzcnt, .lzcnt, null, null }, |
| | 9651 | .src_constraints = .{ .{ .unsigned_int = .word }, .any }, |
| | 9652 | .patterns = &.{ |
| | 9653 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 9654 | }, |
| | 9655 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 9656 | .clobbers = .{ .eflags = true }, |
| | 9657 | .each = .{ .once = &.{ |
| | 9658 | .{ ._, ._, .lzcnt, .dst0w, .src0w, ._, ._ }, |
| | 9659 | .{ ._, ._, .sub, .dst0b, .sia(16, .src0, .sub_bit_size), ._, ._ }, |
| | 9660 | } }, |
| | 9661 | }, .{ |
| | 9662 | .required_features = .{ .lzcnt, null, null, null }, |
| | 9663 | .src_constraints = .{ .{ .unsigned_int = .word }, .any }, |
| | 9664 | .patterns = &.{ |
| | 9665 | .{ .src = .{ .mem, .none } }, |
| | 9666 | .{ .src = .{ .to_gpr, .none } }, |
| | 9667 | }, |
| | 9668 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 9669 | .clobbers = .{ .eflags = true }, |
| | 9670 | .each = .{ .once = &.{ |
| | 9671 | .{ ._, ._, .lzcnt, .dst0w, .src0w, ._, ._ }, |
| | 9672 | .{ ._, ._, .sub, .dst0b, .sia(16, .src0, .sub_bit_size), ._, ._ }, |
| | 9673 | } }, |
| | 9674 | }, .{ |
| | 9675 | .required_features = .{ .false_deps_lzcnt_tzcnt, .lzcnt, null, null }, |
| | 9676 | .src_constraints = .{ .{ .exact_int = 32 }, .any }, |
| | 9677 | .patterns = &.{ |
| | 9678 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 9679 | }, |
| | 9680 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 9681 | .clobbers = .{ .eflags = true }, |
| | 9682 | .each = .{ .once = &.{ |
| | 9683 | .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ }, |
| | 9684 | } }, |
| | 9685 | }, .{ |
| | 9686 | .required_features = .{ .lzcnt, null, null, null }, |
| | 9687 | .src_constraints = .{ .{ .exact_int = 32 }, .any }, |
| | 9688 | .patterns = &.{ |
| | 9689 | .{ .src = .{ .mem, .none } }, |
| | 9690 | .{ .src = .{ .to_gpr, .none } }, |
| | 9691 | }, |
| | 9692 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 9693 | .clobbers = .{ .eflags = true }, |
| | 9694 | .each = .{ .once = &.{ |
| | 9695 | .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ }, |
| | 9696 | } }, |
| | 9697 | }, .{ |
| | 9698 | .required_features = .{ .lzcnt, null, null, null }, |
| | 9699 | .src_constraints = .{ .{ .signed_int = .dword }, .any }, |
| | 9700 | .patterns = &.{ |
| | 9701 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 9702 | }, |
| | 9703 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 9704 | .clobbers = .{ .eflags = true }, |
| | 9705 | .each = .{ .once = &.{ |
| | 9706 | .{ ._, ._, .@"and", .src0d, .sa(.src0, .add_umax), ._, ._ }, |
| | 9707 | .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ }, |
| | 9708 | .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ }, |
| | 9709 | } }, |
| | 9710 | }, .{ |
| | 9711 | .required_features = .{ .false_deps_lzcnt_tzcnt, .lzcnt, null, null }, |
| | 9712 | .src_constraints = .{ .{ .unsigned_int = .dword }, .any }, |
| | 9713 | .patterns = &.{ |
| | 9714 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 9715 | }, |
| | 9716 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 9717 | .clobbers = .{ .eflags = true }, |
| | 9718 | .each = .{ .once = &.{ |
| | 9719 | .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ }, |
| | 9720 | .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ }, |
| | 9721 | } }, |
| | 9722 | }, .{ |
| | 9723 | .required_features = .{ .lzcnt, null, null, null }, |
| | 9724 | .src_constraints = .{ .{ .unsigned_int = .dword }, .any }, |
| | 9725 | .patterns = &.{ |
| | 9726 | .{ .src = .{ .mem, .none } }, |
| | 9727 | .{ .src = .{ .to_gpr, .none } }, |
| | 9728 | }, |
| | 9729 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 9730 | .clobbers = .{ .eflags = true }, |
| | 9731 | .each = .{ .once = &.{ |
| | 9732 | .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ }, |
| | 9733 | .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ }, |
| | 9734 | } }, |
| | 9735 | }, .{ |
| | 9736 | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, |
| | 9737 | .src_constraints = .{ .{ .exact_int = 64 }, .any }, |
| | 9738 | .patterns = &.{ |
| | 9739 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 9740 | }, |
| | 9741 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 9742 | .clobbers = .{ .eflags = true }, |
| | 9743 | .each = .{ .once = &.{ |
| | 9744 | .{ ._, ._, .lzcnt, .dst0q, .src0q, ._, ._ }, |
| | 9745 | } }, |
| | 9746 | }, .{ |
| | 9747 | .required_features = .{ .@"64bit", .lzcnt, null, null }, |
| | 9748 | .src_constraints = .{ .{ .exact_int = 64 }, .any }, |
| | 9749 | .patterns = &.{ |
| | 9750 | .{ .src = .{ .mem, .none } }, |
| | 9751 | .{ .src = .{ .to_gpr, .none } }, |
| | 9752 | }, |
| | 9753 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 9754 | .clobbers = .{ .eflags = true }, |
| | 9755 | .each = .{ .once = &.{ |
| | 9756 | .{ ._, ._, .lzcnt, .dst0q, .src0q, ._, ._ }, |
| | 9757 | } }, |
| | 9758 | }, .{ |
| | 9759 | .required_features = .{ .@"64bit", .lzcnt, null, null }, |
| | 9760 | .src_constraints = .{ .{ .signed_int = .qword }, .any }, |
| | 9761 | .patterns = &.{ |
| | 9762 | .{ .src = .{ .mem, .none } }, |
| | 9763 | .{ .src = .{ .to_gpr, .none } }, |
| | 9764 | }, |
| | 9765 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 9766 | .clobbers = .{ .eflags = true }, |
| | 9767 | .each = .{ .once = &.{ |
| | 9768 | .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ }, |
| | 9769 | .{ ._, ._, .@"and", .dst0q, .src0q, ._, ._ }, |
| | 9770 | .{ ._, ._, .lzcnt, .dst0q, .dst0q, ._, ._ }, |
| | 9771 | .{ ._, ._, .sub, .dst0b, .sia(64, .src0, .sub_bit_size), ._, ._ }, |
| | 9772 | } }, |
| | 9773 | }, .{ |
| | 9774 | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, |
| | 9775 | .src_constraints = .{ .{ .unsigned_int = .qword }, .any }, |
| | 9776 | .patterns = &.{ |
| | 9777 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 9778 | }, |
| | 9779 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 9780 | .clobbers = .{ .eflags = true }, |
| | 9781 | .each = .{ .once = &.{ |
| | 9782 | .{ ._, ._, .lzcnt, .dst0q, .src0q, ._, ._ }, |
| | 9783 | .{ ._, ._, .sub, .dst0b, .sia(64, .src0, .sub_bit_size), ._, ._ }, |
| | 9784 | } }, |
| | 9785 | }, .{ |
| | 9786 | .required_features = .{ .@"64bit", .lzcnt, null, null }, |
| | 9787 | .src_constraints = .{ .{ .unsigned_int = .qword }, .any }, |
| | 9788 | .patterns = &.{ |
| | 9789 | .{ .src = .{ .mem, .none } }, |
| | 9790 | .{ .src = .{ .to_gpr, .none } }, |
| | 9791 | }, |
| | 9792 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 9793 | .clobbers = .{ .eflags = true }, |
| | 9794 | .each = .{ .once = &.{ |
| | 9795 | .{ ._, ._, .lzcnt, .dst0q, .src0q, ._, ._ }, |
| | 9796 | .{ ._, ._, .sub, .dst0b, .sia(64, .src0, .sub_bit_size), ._, ._ }, |
| | 9797 | } }, |
| | 9798 | }, .{ |
| | 9799 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, |
| | 9800 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .byte }, .any }, |
| | 9801 | .patterns = &.{ |
| | 9802 | .{ .src = .{ .mem, .none } }, |
| | 9803 | .{ .src = .{ .to_gpr, .none } }, |
| | 9804 | }, |
| | 9805 | .extra_temps = .{ |
| | 9806 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 9807 | .unused, |
| | 9808 | .unused, |
| | 9809 | .unused, |
| | 9810 | .unused, |
| | 9811 | .unused, |
| | 9812 | .unused, |
| | 9813 | .unused, |
| | 9814 | .unused, |
| | 9815 | }, |
| | 9816 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 9817 | .clobbers = .{ .eflags = true }, |
| | 9818 | .each = .{ .once = &.{ |
| | 9819 | .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, |
| | 9820 | .{ ._, ._r, .bs, .dst0d, .dst0d, ._, ._ }, |
| | 9821 | .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| | 9822 | .{ ._, ._z, .cmov, .dst0d, .tmp0d, ._, ._ }, |
| | 9823 | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 9824 | } }, |
| | 9825 | }, .{ |
| | 9826 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, |
| | 9827 | .src_constraints = .{ .{ .signed_po2_int = .byte }, .any }, |
| | 9828 | .patterns = &.{ |
| | 9829 | .{ .src = .{ .mem, .none } }, |
| | 9830 | .{ .src = .{ .to_gpr, .none } }, |
| | 9831 | }, |
| | 9832 | .extra_temps = .{ |
| | 9833 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 9834 | .unused, |
| | 9835 | .unused, |
| | 9836 | .unused, |
| | 9837 | .unused, |
| | 9838 | .unused, |
| | 9839 | .unused, |
| | 9840 | .unused, |
| | 9841 | .unused, |
| | 9842 | }, |
| | 9843 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 9844 | .clobbers = .{ .eflags = true }, |
| | 9845 | .each = .{ .once = &.{ |
| | 9846 | .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, |
| | 9847 | .{ ._, ._, .@"and", .dst0d, .sa(.src0, .add_umax), ._, ._ }, |
| | 9848 | .{ ._, ._r, .bs, .dst0d, .dst0d, ._, ._ }, |
| | 9849 | .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| | 9850 | .{ ._, ._z, .cmov, .dst0d, .tmp0d, ._, ._ }, |
| | 9851 | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 9852 | } }, |
| | 9853 | }, .{ |
| | 9854 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, |
| | 9855 | .src_constraints = .{ .{ .signed_int = .byte }, .any }, |
| | 9856 | .patterns = &.{ |
| | 9857 | .{ .src = .{ .mem, .none } }, |
| | 9858 | .{ .src = .{ .to_gpr, .none } }, |
| | 9859 | }, |
| | 9860 | .extra_temps = .{ |
| | 9861 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 9862 | .unused, |
| | 9863 | .unused, |
| | 9864 | .unused, |
| | 9865 | .unused, |
| | 9866 | .unused, |
| | 9867 | .unused, |
| | 9868 | .unused, |
| | 9869 | .unused, |
| | 9870 | }, |
| | 9871 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 9872 | .clobbers = .{ .eflags = true }, |
| | 9873 | .each = .{ .once = &.{ |
| | 9874 | .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ }, |
| | 9875 | .{ ._, ._, .@"and", .tmp0d, .sa(.src0, .add_umax), ._, ._ }, |
| | 9876 | .{ ._, ._r, .bs, .tmp0d, .tmp0d, ._, ._ }, |
| | 9877 | .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ }, |
| | 9878 | .{ ._, ._z, .cmov, .tmp0d, .dst0d, ._, ._ }, |
| | 9879 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 9880 | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, |
| | 9881 | } }, |
| | 9882 | }, .{ |
| | 9883 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, |
| | 9884 | .src_constraints = .{ .{ .unsigned_int = .byte }, .any }, |
| | 9885 | .patterns = &.{ |
| | 9886 | .{ .src = .{ .mem, .none } }, |
| | 9887 | .{ .src = .{ .to_gpr, .none } }, |
| | 9888 | }, |
| | 9889 | .extra_temps = .{ |
| | 9890 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 9891 | .unused, |
| | 9892 | .unused, |
| | 9893 | .unused, |
| | 9894 | .unused, |
| | 9895 | .unused, |
| | 9896 | .unused, |
| | 9897 | .unused, |
| | 9898 | .unused, |
| | 9899 | }, |
| | 9900 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 9901 | .clobbers = .{ .eflags = true }, |
| | 9902 | .each = .{ .once = &.{ |
| | 9903 | .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ }, |
| | 9904 | .{ ._, ._r, .bs, .tmp0d, .tmp0d, ._, ._ }, |
| | 9905 | .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ }, |
| | 9906 | .{ ._, ._z, .cmov, .tmp0d, .dst0d, ._, ._ }, |
| | 9907 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 9908 | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, |
| | 9909 | } }, |
| | 9910 | }, .{ |
| | 9911 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, |
| | 9912 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .byte }, .any }, |
| | 9913 | .patterns = &.{ |
| | 9914 | .{ .src = .{ .mem, .none } }, |
| | 9915 | .{ .src = .{ .to_gpr, .none } }, |
| | 9916 | }, |
| | 9917 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 9918 | .clobbers = .{ .eflags = true }, |
| | 9919 | .each = .{ .once = &.{ |
| | 9920 | .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, |
| | 9921 | .{ ._, ._r, .bs, .dst0d, .dst0d, ._, ._ }, |
| | 9922 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, |
| | 9923 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| | 9924 | .{ .@"0:", ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 9925 | } }, |
| | 9926 | }, .{ |
| | 9927 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, |
| | 9928 | .src_constraints = .{ .{ .signed_po2_int = .byte }, .any }, |
| | 9929 | .patterns = &.{ |
| | 9930 | .{ .src = .{ .mem, .none } }, |
| | 9931 | .{ .src = .{ .to_gpr, .none } }, |
| | 9932 | }, |
| | 9933 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 9934 | .clobbers = .{ .eflags = true }, |
| | 9935 | .each = .{ .once = &.{ |
| | 9936 | .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, |
| | 9937 | .{ ._, ._, .@"and", .dst0d, .sa(.src0, .add_umax), ._, ._ }, |
| | 9938 | .{ ._, ._r, .bs, .dst0d, .dst0d, ._, ._ }, |
| | 9939 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, |
| | 9940 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| | 9941 | .{ .@"0:", ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 9942 | } }, |
| | 9943 | }, .{ |
| | 9944 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, |
| | 9945 | .src_constraints = .{ .{ .signed_int = .byte }, .any }, |
| | 9946 | .patterns = &.{ |
| | 9947 | .{ .src = .{ .mem, .none } }, |
| | 9948 | .{ .src = .{ .to_gpr, .none } }, |
| | 9949 | }, |
| | 9950 | .extra_temps = .{ |
| | 9951 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 9952 | .unused, |
| | 9953 | .unused, |
| | 9954 | .unused, |
| | 9955 | .unused, |
| | 9956 | .unused, |
| | 9957 | .unused, |
| | 9958 | .unused, |
| | 9959 | .unused, |
| | 9960 | }, |
| | 9961 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 9962 | .clobbers = .{ .eflags = true }, |
| | 9963 | .each = .{ .once = &.{ |
| | 9964 | .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ }, |
| | 9965 | .{ ._, ._, .@"and", .tmp0d, .sa(.src0, .add_umax), ._, ._ }, |
| | 9966 | .{ ._, ._r, .bs, .tmp0d, .tmp0d, ._, ._ }, |
| | 9967 | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, |
| | 9968 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 9969 | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| | 9970 | .{ ._, ._, .sbb, .dst0b, .tmp0b, ._, ._ }, |
| | 9971 | } }, |
| | 9972 | }, .{ |
| | 9973 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, |
| | 9974 | .src_constraints = .{ .{ .unsigned_int = .byte }, .any }, |
| | 9975 | .patterns = &.{ |
| | 9976 | .{ .src = .{ .mem, .none } }, |
| | 9977 | .{ .src = .{ .to_gpr, .none } }, |
| | 9978 | }, |
| | 9979 | .extra_temps = .{ |
| | 9980 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 9981 | .unused, |
| | 9982 | .unused, |
| | 9983 | .unused, |
| | 9984 | .unused, |
| | 9985 | .unused, |
| | 9986 | .unused, |
| | 9987 | .unused, |
| | 9988 | .unused, |
| | 9989 | }, |
| | 9990 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 9991 | .clobbers = .{ .eflags = true }, |
| | 9992 | .each = .{ .once = &.{ |
| | 9993 | .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ }, |
| | 9994 | .{ ._, ._r, .bs, .tmp0d, .tmp0d, ._, ._ }, |
| | 9995 | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, |
| | 9996 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 9997 | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| | 9998 | .{ ._, ._, .sbb, .dst0b, .tmp0b, ._, ._ }, |
| | 9999 | } }, |
| | 10000 | }, .{ |
| | 10001 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .byte }, .any }, |
| | 10002 | .patterns = &.{ |
| | 10003 | .{ .src = .{ .mem, .none } }, |
| | 10004 | .{ .src = .{ .to_gpr, .none } }, |
| | 10005 | }, |
| | 10006 | .extra_temps = .{ |
| | 10007 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 10008 | .unused, |
| | 10009 | .unused, |
| | 10010 | .unused, |
| | 10011 | .unused, |
| | 10012 | .unused, |
| | 10013 | .unused, |
| | 10014 | .unused, |
| | 10015 | .unused, |
| | 10016 | }, |
| | 10017 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10018 | .clobbers = .{ .eflags = true }, |
| | 10019 | .each = .{ .once = &.{ |
| | 10020 | .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ }, |
| | 10021 | .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| | 10022 | .{ ._, ._r, .bs, .dst0d, .tmp0d, ._, ._ }, |
| | 10023 | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10024 | } }, |
| | 10025 | }, .{ |
| | 10026 | .src_constraints = .{ .{ .signed_po2_int = .byte }, .any }, |
| | 10027 | .patterns = &.{ |
| | 10028 | .{ .src = .{ .mem, .none } }, |
| | 10029 | .{ .src = .{ .to_gpr, .none } }, |
| | 10030 | }, |
| | 10031 | .extra_temps = .{ |
| | 10032 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 10033 | .unused, |
| | 10034 | .unused, |
| | 10035 | .unused, |
| | 10036 | .unused, |
| | 10037 | .unused, |
| | 10038 | .unused, |
| | 10039 | .unused, |
| | 10040 | .unused, |
| | 10041 | }, |
| | 10042 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10043 | .clobbers = .{ .eflags = true }, |
| | 10044 | .each = .{ .once = &.{ |
| | 10045 | .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ }, |
| | 10046 | .{ ._, ._, .@"and", .tmp0d, .sa(.src0, .add_umax), ._, ._ }, |
| | 10047 | .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| | 10048 | .{ ._, ._r, .bs, .dst0d, .tmp0d, ._, ._ }, |
| | 10049 | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10050 | } }, |
| | 10051 | }, .{ |
| | 10052 | .src_constraints = .{ .{ .signed_int = .byte }, .any }, |
| | 10053 | .patterns = &.{ |
| | 10054 | .{ .src = .{ .mem, .none } }, |
| | 10055 | .{ .src = .{ .to_gpr, .none } }, |
| | 10056 | }, |
| | 10057 | .extra_temps = .{ |
| | 10058 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 10059 | .unused, |
| | 10060 | .unused, |
| | 10061 | .unused, |
| | 10062 | .unused, |
| | 10063 | .unused, |
| | 10064 | .unused, |
| | 10065 | .unused, |
| | 10066 | .unused, |
| | 10067 | }, |
| | 10068 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10069 | .clobbers = .{ .eflags = true }, |
| | 10070 | .each = .{ .once = &.{ |
| | 10071 | .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, |
| | 10072 | .{ ._, ._, .@"and", .dst0d, .sa(.src0, .add_umax), ._, ._ }, |
| | 10073 | .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ }, |
| | 10074 | .{ ._, ._r, .bs, .tmp0d, .dst0d, ._, ._ }, |
| | 10075 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10076 | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, |
| | 10077 | } }, |
| | 10078 | }, .{ |
| | 10079 | .src_constraints = .{ .{ .unsigned_int = .byte }, .any }, |
| | 10080 | .patterns = &.{ |
| | 10081 | .{ .src = .{ .mem, .none } }, |
| | 10082 | .{ .src = .{ .to_gpr, .none } }, |
| | 10083 | }, |
| | 10084 | .extra_temps = .{ |
| | 10085 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 10086 | .unused, |
| | 10087 | .unused, |
| | 10088 | .unused, |
| | 10089 | .unused, |
| | 10090 | .unused, |
| | 10091 | .unused, |
| | 10092 | .unused, |
| | 10093 | .unused, |
| | 10094 | }, |
| | 10095 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10096 | .clobbers = .{ .eflags = true }, |
| | 10097 | .each = .{ .once = &.{ |
| | 10098 | .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, |
| | 10099 | .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ }, |
| | 10100 | .{ ._, ._r, .bs, .tmp0d, .dst0d, ._, ._ }, |
| | 10101 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10102 | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, |
| | 10103 | } }, |
| | 10104 | }, .{ |
| | 10105 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, |
| | 10106 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .word }, .any }, |
| | 10107 | .patterns = &.{ |
| | 10108 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 10109 | }, |
| | 10110 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10111 | .clobbers = .{ .eflags = true }, |
| | 10112 | .each = .{ .once = &.{ |
| | 10113 | .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ }, |
| | 10114 | .{ ._, ._, .mov, .dst0w, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| | 10115 | .{ ._, ._nz, .cmov, .dst0w, .src0w, ._, ._ }, |
| | 10116 | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10117 | } }, |
| | 10118 | }, .{ |
| | 10119 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, |
| | 10120 | .src_constraints = .{ .{ .signed_int = .word }, .any }, |
| | 10121 | .patterns = &.{ |
| | 10122 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 10123 | }, |
| | 10124 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10125 | .clobbers = .{ .eflags = true }, |
| | 10126 | .each = .{ .once = &.{ |
| | 10127 | .{ ._, ._, .@"and", .src0w, .sa(.src0, .add_umax), ._, ._ }, |
| | 10128 | .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ }, |
| | 10129 | .{ ._, ._, .mov, .dst0w, .si(0xff), ._, ._ }, |
| | 10130 | .{ ._, ._z, .cmov, .src0w, .dst0w, ._, ._ }, |
| | 10131 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10132 | .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ }, |
| | 10133 | } }, |
| | 10134 | }, .{ |
| | 10135 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, |
| | 10136 | .src_constraints = .{ .{ .unsigned_int = .word }, .any }, |
| | 10137 | .patterns = &.{ |
| | 10138 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 10139 | }, |
| | 10140 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10141 | .clobbers = .{ .eflags = true }, |
| | 10142 | .each = .{ .once = &.{ |
| | 10143 | .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ }, |
| | 10144 | .{ ._, ._, .mov, .dst0w, .si(0xff), ._, ._ }, |
| | 10145 | .{ ._, ._z, .cmov, .src0w, .dst0w, ._, ._ }, |
| | 10146 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10147 | .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ }, |
| | 10148 | } }, |
| | 10149 | }, .{ |
| | 10150 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, |
| | 10151 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .word }, .any }, |
| | 10152 | .patterns = &.{ |
| | 10153 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 10154 | }, |
| | 10155 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 10156 | .clobbers = .{ .eflags = true }, |
| | 10157 | .each = .{ .once = &.{ |
| | 10158 | .{ ._, ._r, .bs, .dst0w, .src0w, ._, ._ }, |
| | 10159 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, |
| | 10160 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| | 10161 | .{ .@"0:", ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10162 | } }, |
| | 10163 | }, .{ |
| | 10164 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, |
| | 10165 | .src_constraints = .{ .{ .signed_int = .word }, .any }, |
| | 10166 | .patterns = &.{ |
| | 10167 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 10168 | }, |
| | 10169 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10170 | .clobbers = .{ .eflags = true }, |
| | 10171 | .each = .{ .once = &.{ |
| | 10172 | .{ ._, ._, .@"and", .src0w, .sa(.src0, .add_umax), ._, ._ }, |
| | 10173 | .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ }, |
| | 10174 | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, |
| | 10175 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 10176 | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| | 10177 | .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ }, |
| | 10178 | } }, |
| | 10179 | }, .{ |
| | 10180 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, |
| | 10181 | .src_constraints = .{ .{ .unsigned_int = .word }, .any }, |
| | 10182 | .patterns = &.{ |
| | 10183 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 10184 | }, |
| | 10185 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10186 | .clobbers = .{ .eflags = true }, |
| | 10187 | .each = .{ .once = &.{ |
| | 10188 | .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ }, |
| | 10189 | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, |
| | 10190 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 10191 | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| | 10192 | .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ }, |
| | 10193 | } }, |
| | 10194 | }, .{ |
| | 10195 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .word }, .any }, |
| | 10196 | .patterns = &.{ |
| | 10197 | .{ .src = .{ .mem, .none } }, |
| | 10198 | .{ .src = .{ .to_gpr, .none } }, |
| | 10199 | }, |
| | 10200 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10201 | .clobbers = .{ .eflags = true }, |
| | 10202 | .each = .{ .once = &.{ |
| | 10203 | .{ ._, ._, .mov, .dst0w, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| | 10204 | .{ ._, ._r, .bs, .dst0w, .src0w, ._, ._ }, |
| | 10205 | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10206 | } }, |
| | 10207 | }, .{ |
| | 10208 | .src_constraints = .{ .{ .signed_int = .word }, .any }, |
| | 10209 | .patterns = &.{ |
| | 10210 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 10211 | }, |
| | 10212 | .extra_temps = .{ |
| | 10213 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| | 10214 | .unused, |
| | 10215 | .unused, |
| | 10216 | .unused, |
| | 10217 | .unused, |
| | 10218 | .unused, |
| | 10219 | .unused, |
| | 10220 | .unused, |
| | 10221 | .unused, |
| | 10222 | }, |
| | 10223 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10224 | .clobbers = .{ .eflags = true }, |
| | 10225 | .each = .{ .once = &.{ |
| | 10226 | .{ ._, ._, .@"and", .src0w, .sa(.src0, .add_umax), ._, ._ }, |
| | 10227 | .{ ._, ._, .mov, .tmp0w, .si(0xff), ._, ._ }, |
| | 10228 | .{ ._, ._r, .bs, .tmp0w, .src0w, ._, ._ }, |
| | 10229 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10230 | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, |
| | 10231 | } }, |
| | 10232 | }, .{ |
| | 10233 | .src_constraints = .{ .{ .unsigned_int = .word }, .any }, |
| | 10234 | .patterns = &.{ |
| | 10235 | .{ .src = .{ .mem, .none } }, |
| | 10236 | .{ .src = .{ .to_gpr, .none } }, |
| | 10237 | }, |
| | 10238 | .extra_temps = .{ |
| | 10239 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| | 10240 | .unused, |
| | 10241 | .unused, |
| | 10242 | .unused, |
| | 10243 | .unused, |
| | 10244 | .unused, |
| | 10245 | .unused, |
| | 10246 | .unused, |
| | 10247 | .unused, |
| | 10248 | }, |
| | 10249 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10250 | .clobbers = .{ .eflags = true }, |
| | 10251 | .each = .{ .once = &.{ |
| | 10252 | .{ ._, ._, .mov, .tmp0w, .si(0xff), ._, ._ }, |
| | 10253 | .{ ._, ._r, .bs, .tmp0w, .src0w, ._, ._ }, |
| | 10254 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10255 | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, |
| | 10256 | } }, |
| | 10257 | }, .{ |
| | 10258 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, |
| | 10259 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .dword }, .any }, |
| | 10260 | .patterns = &.{ |
| | 10261 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 10262 | }, |
| | 10263 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10264 | .clobbers = .{ .eflags = true }, |
| | 10265 | .each = .{ .once = &.{ |
| | 10266 | .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ }, |
| | 10267 | .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| | 10268 | .{ ._, ._nz, .cmov, .dst0d, .src0d, ._, ._ }, |
| | 10269 | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10270 | } }, |
| | 10271 | }, .{ |
| | 10272 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, |
| | 10273 | .src_constraints = .{ .{ .signed_int = .dword }, .any }, |
| | 10274 | .patterns = &.{ |
| | 10275 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 10276 | }, |
| | 10277 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10278 | .clobbers = .{ .eflags = true }, |
| | 10279 | .each = .{ .once = &.{ |
| | 10280 | .{ ._, ._, .@"and", .src0d, .sa(.src0, .add_umax), ._, ._ }, |
| | 10281 | .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ }, |
| | 10282 | .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ }, |
| | 10283 | .{ ._, ._z, .cmov, .src0d, .dst0d, ._, ._ }, |
| | 10284 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10285 | .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ }, |
| | 10286 | } }, |
| | 10287 | }, .{ |
| | 10288 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, |
| | 10289 | .src_constraints = .{ .{ .unsigned_int = .dword }, .any }, |
| | 10290 | .patterns = &.{ |
| | 10291 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 10292 | }, |
| | 10293 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10294 | .clobbers = .{ .eflags = true }, |
| | 10295 | .each = .{ .once = &.{ |
| | 10296 | .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ }, |
| | 10297 | .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ }, |
| | 10298 | .{ ._, ._z, .cmov, .src0d, .dst0d, ._, ._ }, |
| | 10299 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10300 | .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ }, |
| | 10301 | } }, |
| | 10302 | }, .{ |
| | 10303 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, |
| | 10304 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .dword }, .any }, |
| | 10305 | .patterns = &.{ |
| | 10306 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 10307 | }, |
| | 10308 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 10309 | .clobbers = .{ .eflags = true }, |
| | 10310 | .each = .{ .once = &.{ |
| | 10311 | .{ ._, ._r, .bs, .dst0d, .src0d, ._, ._ }, |
| | 10312 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, |
| | 10313 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| | 10314 | .{ .@"0:", ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10315 | } }, |
| | 10316 | }, .{ |
| | 10317 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, |
| | 10318 | .src_constraints = .{ .{ .signed_int = .dword }, .any }, |
| | 10319 | .patterns = &.{ |
| | 10320 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 10321 | }, |
| | 10322 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10323 | .clobbers = .{ .eflags = true }, |
| | 10324 | .each = .{ .once = &.{ |
| | 10325 | .{ ._, ._, .@"and", .src0d, .sa(.src0, .add_umax), ._, ._ }, |
| | 10326 | .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ }, |
| | 10327 | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, |
| | 10328 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 10329 | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| | 10330 | .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ }, |
| | 10331 | } }, |
| | 10332 | }, .{ |
| | 10333 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, |
| | 10334 | .src_constraints = .{ .{ .unsigned_int = .dword }, .any }, |
| | 10335 | .patterns = &.{ |
| | 10336 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 10337 | }, |
| | 10338 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10339 | .clobbers = .{ .eflags = true }, |
| | 10340 | .each = .{ .once = &.{ |
| | 10341 | .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ }, |
| | 10342 | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, |
| | 10343 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 10344 | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| | 10345 | .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ }, |
| | 10346 | } }, |
| | 10347 | }, .{ |
| | 10348 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .dword }, .any }, |
| | 10349 | .patterns = &.{ |
| | 10350 | .{ .src = .{ .mem, .none } }, |
| | 10351 | .{ .src = .{ .to_gpr, .none } }, |
| | 10352 | }, |
| | 10353 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10354 | .clobbers = .{ .eflags = true }, |
| | 10355 | .each = .{ .once = &.{ |
| | 10356 | .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| | 10357 | .{ ._, ._r, .bs, .dst0d, .src0d, ._, ._ }, |
| | 10358 | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10359 | } }, |
| | 10360 | }, .{ |
| | 10361 | .src_constraints = .{ .{ .signed_int = .dword }, .any }, |
| | 10362 | .patterns = &.{ |
| | 10363 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 10364 | }, |
| | 10365 | .extra_temps = .{ |
| | 10366 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 10367 | .unused, |
| | 10368 | .unused, |
| | 10369 | .unused, |
| | 10370 | .unused, |
| | 10371 | .unused, |
| | 10372 | .unused, |
| | 10373 | .unused, |
| | 10374 | .unused, |
| | 10375 | }, |
| | 10376 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10377 | .clobbers = .{ .eflags = true }, |
| | 10378 | .each = .{ .once = &.{ |
| | 10379 | .{ ._, ._, .@"and", .src0d, .sa(.src0, .add_umax), ._, ._ }, |
| | 10380 | .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ }, |
| | 10381 | .{ ._, ._r, .bs, .tmp0d, .src0d, ._, ._ }, |
| | 10382 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10383 | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, |
| | 10384 | } }, |
| | 10385 | }, .{ |
| | 10386 | .src_constraints = .{ .{ .unsigned_int = .dword }, .any }, |
| | 10387 | .patterns = &.{ |
| | 10388 | .{ .src = .{ .mem, .none } }, |
| | 10389 | .{ .src = .{ .to_gpr, .none } }, |
| | 10390 | }, |
| | 10391 | .extra_temps = .{ |
| | 10392 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 10393 | .unused, |
| | 10394 | .unused, |
| | 10395 | .unused, |
| | 10396 | .unused, |
| | 10397 | .unused, |
| | 10398 | .unused, |
| | 10399 | .unused, |
| | 10400 | .unused, |
| | 10401 | }, |
| | 10402 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10403 | .clobbers = .{ .eflags = true }, |
| | 10404 | .each = .{ .once = &.{ |
| | 10405 | .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ }, |
| | 10406 | .{ ._, ._r, .bs, .tmp0d, .src0d, ._, ._ }, |
| | 10407 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10408 | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, |
| | 10409 | } }, |
| | 10410 | }, .{ |
| | 10411 | .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, null }, |
| | 10412 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .qword }, .any }, |
| | 10413 | .patterns = &.{ |
| | 10414 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 10415 | }, |
| | 10416 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10417 | .clobbers = .{ .eflags = true }, |
| | 10418 | .each = .{ .once = &.{ |
| | 10419 | .{ ._, ._r, .bs, .src0q, .src0q, ._, ._ }, |
| | 10420 | .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| | 10421 | .{ ._, ._nz, .cmov, .dst0d, .src0d, ._, ._ }, |
| | 10422 | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10423 | } }, |
| | 10424 | }, .{ |
| | 10425 | .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, null }, |
| | 10426 | .src_constraints = .{ .{ .signed_int = .qword }, .any }, |
| | 10427 | .patterns = &.{ |
| | 10428 | .{ .src = .{ .mem, .none } }, |
| | 10429 | .{ .src = .{ .to_gpr, .none } }, |
| | 10430 | }, |
| | 10431 | .extra_temps = .{ |
| | 10432 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 10433 | .unused, |
| | 10434 | .unused, |
| | 10435 | .unused, |
| | 10436 | .unused, |
| | 10437 | .unused, |
| | 10438 | .unused, |
| | 10439 | .unused, |
| | 10440 | .unused, |
| | 10441 | }, |
| | 10442 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10443 | .clobbers = .{ .eflags = true }, |
| | 10444 | .each = .{ .once = &.{ |
| | 10445 | .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ }, |
| | 10446 | .{ ._, ._, .@"and", .tmp0q, .src0q, ._, ._ }, |
| | 10447 | .{ ._, ._r, .bs, .tmp0q, .tmp0q, ._, ._ }, |
| | 10448 | .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ }, |
| | 10449 | .{ ._, ._z, .cmov, .tmp0d, .dst0d, ._, ._ }, |
| | 10450 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10451 | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, |
| | 10452 | } }, |
| | 10453 | }, .{ |
| | 10454 | .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, null }, |
| | 10455 | .src_constraints = .{ .{ .unsigned_int = .qword }, .any }, |
| | 10456 | .patterns = &.{ |
| | 10457 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 10458 | }, |
| | 10459 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10460 | .clobbers = .{ .eflags = true }, |
| | 10461 | .each = .{ .once = &.{ |
| | 10462 | .{ ._, ._r, .bs, .src0q, .src0q, ._, ._ }, |
| | 10463 | .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ }, |
| | 10464 | .{ ._, ._z, .cmov, .src0d, .dst0d, ._, ._ }, |
| | 10465 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10466 | .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ }, |
| | 10467 | } }, |
| | 10468 | }, .{ |
| | 10469 | .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null }, |
| | 10470 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .qword }, .any }, |
| | 10471 | .patterns = &.{ |
| | 10472 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 10473 | }, |
| | 10474 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 10475 | .clobbers = .{ .eflags = true }, |
| | 10476 | .each = .{ .once = &.{ |
| | 10477 | .{ ._, ._r, .bs, .dst0q, .src0q, ._, ._ }, |
| | 10478 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, |
| | 10479 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| | 10480 | .{ .@"0:", ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10481 | } }, |
| | 10482 | }, .{ |
| | 10483 | .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null }, |
| | 10484 | .src_constraints = .{ .{ .signed_int = .qword }, .any }, |
| | 10485 | .patterns = &.{ |
| | 10486 | .{ .src = .{ .mem, .none } }, |
| | 10487 | .{ .src = .{ .to_gpr, .none } }, |
| | 10488 | }, |
| | 10489 | .extra_temps = .{ |
| | 10490 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 10491 | .unused, |
| | 10492 | .unused, |
| | 10493 | .unused, |
| | 10494 | .unused, |
| | 10495 | .unused, |
| | 10496 | .unused, |
| | 10497 | .unused, |
| | 10498 | .unused, |
| | 10499 | }, |
| | 10500 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10501 | .clobbers = .{ .eflags = true }, |
| | 10502 | .each = .{ .once = &.{ |
| | 10503 | .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ }, |
| | 10504 | .{ ._, ._, .@"and", .tmp0q, .src0q, ._, ._ }, |
| | 10505 | .{ ._, ._r, .bs, .tmp0q, .tmp0q, ._, ._ }, |
| | 10506 | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, |
| | 10507 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 10508 | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| | 10509 | .{ ._, ._, .sbb, .dst0b, .tmp0b, ._, ._ }, |
| | 10510 | } }, |
| | 10511 | }, .{ |
| | 10512 | .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null }, |
| | 10513 | .src_constraints = .{ .{ .unsigned_int = .qword }, .any }, |
| | 10514 | .patterns = &.{ |
| | 10515 | .{ .src = .{ .to_mut_gpr, .none } }, |
| | 10516 | }, |
| | 10517 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10518 | .clobbers = .{ .eflags = true }, |
| | 10519 | .each = .{ .once = &.{ |
| | 10520 | .{ ._, ._r, .bs, .src0q, .src0q, ._, ._ }, |
| | 10521 | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, |
| | 10522 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 10523 | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| | 10524 | .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ }, |
| | 10525 | } }, |
| | 10526 | }, .{ |
| | 10527 | .required_features = .{ .@"64bit", null, null, null }, |
| | 10528 | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .qword }, .any }, |
| | 10529 | .patterns = &.{ |
| | 10530 | .{ .src = .{ .mem, .none } }, |
| | 10531 | .{ .src = .{ .to_gpr, .none } }, |
| | 10532 | }, |
| | 10533 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10534 | .clobbers = .{ .eflags = true }, |
| | 10535 | .each = .{ .once = &.{ |
| | 10536 | .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| | 10537 | .{ ._, ._r, .bs, .dst0q, .src0q, ._, ._ }, |
| | 10538 | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10539 | } }, |
| | 10540 | }, .{ |
| | 10541 | .required_features = .{ .@"64bit", null, null, null }, |
| | 10542 | .src_constraints = .{ .{ .signed_int = .qword }, .any }, |
| | 10543 | .patterns = &.{ |
| | 10544 | .{ .src = .{ .mem, .none } }, |
| | 10545 | .{ .src = .{ .to_gpr, .none } }, |
| | 10546 | }, |
| | 10547 | .extra_temps = .{ |
| | 10548 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 10549 | .unused, |
| | 10550 | .unused, |
| | 10551 | .unused, |
| | 10552 | .unused, |
| | 10553 | .unused, |
| | 10554 | .unused, |
| | 10555 | .unused, |
| | 10556 | .unused, |
| | 10557 | }, |
| | 10558 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10559 | .clobbers = .{ .eflags = true }, |
| | 10560 | .each = .{ .once = &.{ |
| | 10561 | .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ }, |
| | 10562 | .{ ._, ._, .@"and", .dst0q, .src0q, ._, ._ }, |
| | 10563 | .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ }, |
| | 10564 | .{ ._, ._r, .bs, .tmp0q, .dst0q, ._, ._ }, |
| | 10565 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10566 | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, |
| | 10567 | } }, |
| | 10568 | }, .{ |
| | 10569 | .required_features = .{ .@"64bit", null, null, null }, |
| | 10570 | .src_constraints = .{ .{ .unsigned_int = .qword }, .any }, |
| | 10571 | .patterns = &.{ |
| | 10572 | .{ .src = .{ .mem, .none } }, |
| | 10573 | .{ .src = .{ .to_gpr, .none } }, |
| | 10574 | }, |
| | 10575 | .extra_temps = .{ |
| | 10576 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 10577 | .unused, |
| | 10578 | .unused, |
| | 10579 | .unused, |
| | 10580 | .unused, |
| | 10581 | .unused, |
| | 10582 | .unused, |
| | 10583 | .unused, |
| | 10584 | .unused, |
| | 10585 | }, |
| | 10586 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10587 | .clobbers = .{ .eflags = true }, |
| | 10588 | .each = .{ .once = &.{ |
| | 10589 | .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ }, |
| | 10590 | .{ ._, ._r, .bs, .tmp0q, .src0q, ._, ._ }, |
| | 10591 | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 10592 | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, |
| | 10593 | } }, |
| | 10594 | }, .{ |
| | 10595 | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, |
| | 10596 | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| | 10597 | .patterns = &.{ |
| | 10598 | .{ .src = .{ .to_mem, .none } }, |
| | 10599 | }, |
| | 10600 | .extra_temps = .{ |
| | 10601 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 10602 | .unused, |
| | 10603 | .unused, |
| | 10604 | .unused, |
| | 10605 | .unused, |
| | 10606 | .unused, |
| | 10607 | .unused, |
| | 10608 | .unused, |
| | 10609 | .unused, |
| | 10610 | }, |
| | 10611 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10612 | .clobbers = .{ .eflags = true }, |
| | 10613 | .each = .{ .once = &.{ |
| | 10614 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| | 10615 | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| | 10616 | .{ ._, ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, |
| | 10617 | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, |
| | 10618 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| | 10619 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 10620 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| | 10621 | .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, |
| | 10622 | .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, |
| | 10623 | } }, |
| | 10624 | }, .{ |
| | 10625 | .required_features = .{ .@"64bit", .lzcnt, null, null }, |
| | 10626 | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| | 10627 | .patterns = &.{ |
| | 10628 | .{ .src = .{ .to_mem, .none } }, |
| | 10629 | }, |
| | 10630 | .extra_temps = .{ |
| | 10631 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 10632 | .unused, |
| | 10633 | .unused, |
| | 10634 | .unused, |
| | 10635 | .unused, |
| | 10636 | .unused, |
| | 10637 | .unused, |
| | 10638 | .unused, |
| | 10639 | .unused, |
| | 10640 | }, |
| | 10641 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10642 | .clobbers = .{ .eflags = true }, |
| | 10643 | .each = .{ .once = &.{ |
| | 10644 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| | 10645 | .{ .@"0:", ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, |
| | 10646 | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, |
| | 10647 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| | 10648 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 10649 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| | 10650 | .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, |
| | 10651 | .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, |
| | 10652 | } }, |
| | 10653 | }, .{ |
| | 10654 | .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null }, |
| | 10655 | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| | 10656 | .patterns = &.{ |
| | 10657 | .{ .src = .{ .to_mem, .none } }, |
| | 10658 | }, |
| | 10659 | .extra_temps = .{ |
| | 10660 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 10661 | .unused, |
| | 10662 | .unused, |
| | 10663 | .unused, |
| | 10664 | .unused, |
| | 10665 | .unused, |
| | 10666 | .unused, |
| | 10667 | .unused, |
| | 10668 | .unused, |
| | 10669 | }, |
| | 10670 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10671 | .clobbers = .{ .eflags = true }, |
| | 10672 | .each = .{ .once = &.{ |
| | 10673 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| | 10674 | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| | 10675 | .{ ._, ._r, .bs, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, |
| | 10676 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, |
| | 10677 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| | 10678 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 10679 | .{ ._, ._, .mov, .dst0d, .si(-1), ._, ._ }, |
| | 10680 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| | 10681 | .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, |
| | 10682 | .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, |
| | 10683 | } }, |
| | 10684 | }, .{ |
| | 10685 | .required_features = .{ .@"64bit", null, null, null }, |
| | 10686 | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| | 10687 | .patterns = &.{ |
| | 10688 | .{ .src = .{ .to_mem, .none } }, |
| | 10689 | }, |
| | 10690 | .extra_temps = .{ |
| | 10691 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 10692 | .unused, |
| | 10693 | .unused, |
| | 10694 | .unused, |
| | 10695 | .unused, |
| | 10696 | .unused, |
| | 10697 | .unused, |
| | 10698 | .unused, |
| | 10699 | .unused, |
| | 10700 | }, |
| | 10701 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10702 | .clobbers = .{ .eflags = true }, |
| | 10703 | .each = .{ .once = &.{ |
| | 10704 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| | 10705 | .{ .@"0:", ._, .mov, .dst0d, .si(-1), ._, ._ }, |
| | 10706 | .{ ._, ._r, .bs, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, |
| | 10707 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, |
| | 10708 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| | 10709 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 10710 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| | 10711 | .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, |
| | 10712 | .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, |
| | 10713 | } }, |
| | 10714 | }, .{ |
| | 10715 | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, |
| | 10716 | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| | 10717 | .patterns = &.{ |
| | 10718 | .{ .src = .{ .to_mem, .none } }, |
| | 10719 | }, |
| | 10720 | .extra_temps = .{ |
| | 10721 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 10722 | .unused, |
| | 10723 | .unused, |
| | 10724 | .unused, |
| | 10725 | .unused, |
| | 10726 | .unused, |
| | 10727 | .unused, |
| | 10728 | .unused, |
| | 10729 | .unused, |
| | 10730 | }, |
| | 10731 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10732 | .clobbers = .{ .eflags = true }, |
| | 10733 | .each = .{ .once = &.{ |
| | 10734 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| | 10735 | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| | 10736 | .{ ._, ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, |
| | 10737 | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, |
| | 10738 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| | 10739 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 10740 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| | 10741 | .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, |
| | 10742 | .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, |
| | 10743 | } }, |
| | 10744 | }, .{ |
| | 10745 | .required_features = .{ .@"64bit", .lzcnt, null, null }, |
| | 10746 | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| | 10747 | .patterns = &.{ |
| | 10748 | .{ .src = .{ .to_mem, .none } }, |
| | 10749 | }, |
| | 10750 | .extra_temps = .{ |
| | 10751 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 10752 | .unused, |
| | 10753 | .unused, |
| | 10754 | .unused, |
| | 10755 | .unused, |
| | 10756 | .unused, |
| | 10757 | .unused, |
| | 10758 | .unused, |
| | 10759 | .unused, |
| | 10760 | }, |
| | 10761 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10762 | .clobbers = .{ .eflags = true }, |
| | 10763 | .each = .{ .once = &.{ |
| | 10764 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| | 10765 | .{ .@"0:", ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, |
| | 10766 | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, |
| | 10767 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| | 10768 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 10769 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| | 10770 | .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, |
| | 10771 | .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, |
| | 10772 | } }, |
| | 10773 | }, .{ |
| | 10774 | .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null }, |
| | 10775 | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| | 10776 | .patterns = &.{ |
| | 10777 | .{ .src = .{ .to_mem, .none } }, |
| | 10778 | }, |
| | 10779 | .extra_temps = .{ |
| | 10780 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 10781 | .unused, |
| | 10782 | .unused, |
| | 10783 | .unused, |
| | 10784 | .unused, |
| | 10785 | .unused, |
| | 10786 | .unused, |
| | 10787 | .unused, |
| | 10788 | .unused, |
| | 10789 | }, |
| | 10790 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10791 | .clobbers = .{ .eflags = true }, |
| | 10792 | .each = .{ .once = &.{ |
| | 10793 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| | 10794 | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| | 10795 | .{ ._, ._r, .bs, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, |
| | 10796 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, |
| | 10797 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| | 10798 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 10799 | .{ ._, ._, .mov, .dst0d, .si(-1), ._, ._ }, |
| | 10800 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| | 10801 | .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, |
| | 10802 | .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, |
| | 10803 | } }, |
| | 10804 | }, .{ |
| | 10805 | .required_features = .{ .@"64bit", null, null, null }, |
| | 10806 | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| | 10807 | .patterns = &.{ |
| | 10808 | .{ .src = .{ .to_mem, .none } }, |
| | 10809 | }, |
| | 10810 | .extra_temps = .{ |
| | 10811 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 10812 | .unused, |
| | 10813 | .unused, |
| | 10814 | .unused, |
| | 10815 | .unused, |
| | 10816 | .unused, |
| | 10817 | .unused, |
| | 10818 | .unused, |
| | 10819 | .unused, |
| | 10820 | }, |
| | 10821 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10822 | .clobbers = .{ .eflags = true }, |
| | 10823 | .each = .{ .once = &.{ |
| | 10824 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| | 10825 | .{ .@"0:", ._, .mov, .dst0d, .si(-1), ._, ._ }, |
| | 10826 | .{ ._, ._r, .bs, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, |
| | 10827 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, |
| | 10828 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| | 10829 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 10830 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| | 10831 | .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, |
| | 10832 | .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, |
| | 10833 | } }, |
| | 10834 | }, .{ |
| | 10835 | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, |
| | 10836 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| | 10837 | .patterns = &.{ |
| | 10838 | .{ .src = .{ .to_mem, .none } }, |
| | 10839 | }, |
| | 10840 | .extra_temps = .{ |
| | 10841 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 10842 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 10843 | .unused, |
| | 10844 | .unused, |
| | 10845 | .unused, |
| | 10846 | .unused, |
| | 10847 | .unused, |
| | 10848 | .unused, |
| | 10849 | .unused, |
| | 10850 | }, |
| | 10851 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10852 | .clobbers = .{ .eflags = true }, |
| | 10853 | .each = .{ .once = &.{ |
| | 10854 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| | 10855 | .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| | 10856 | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| | 10857 | .{ ._, ._, .@"and", .tmp1q, .memi(.src0q, .tmp0), ._, ._ }, |
| | 10858 | .{ ._, ._, .lzcnt, .dst0q, .tmp1q, ._, ._ }, |
| | 10859 | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, |
| | 10860 | .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ }, |
| | 10861 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| | 10862 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 10863 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| | 10864 | .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, |
| | 10865 | .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, |
| | 10866 | } }, |
| | 10867 | }, .{ |
| | 10868 | .required_features = .{ .@"64bit", .lzcnt, null, null }, |
| | 10869 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| | 10870 | .patterns = &.{ |
| | 10871 | .{ .src = .{ .to_mem, .none } }, |
| | 10872 | }, |
| | 10873 | .extra_temps = .{ |
| | 10874 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 10875 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 10876 | .unused, |
| | 10877 | .unused, |
| | 10878 | .unused, |
| | 10879 | .unused, |
| | 10880 | .unused, |
| | 10881 | .unused, |
| | 10882 | .unused, |
| | 10883 | }, |
| | 10884 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10885 | .clobbers = .{ .eflags = true }, |
| | 10886 | .each = .{ .once = &.{ |
| | 10887 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| | 10888 | .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| | 10889 | .{ .@"0:", ._, .@"and", .tmp1q, .memi(.src0q, .tmp0), ._, ._ }, |
| | 10890 | .{ ._, ._, .lzcnt, .dst0q, .tmp1q, ._, ._ }, |
| | 10891 | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, |
| | 10892 | .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ }, |
| | 10893 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| | 10894 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 10895 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| | 10896 | .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, |
| | 10897 | .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, |
| | 10898 | } }, |
| | 10899 | }, .{ |
| | 10900 | .required_features = .{ .@"64bit", null, null, null }, |
| | 10901 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| | 10902 | .patterns = &.{ |
| | 10903 | .{ .src = .{ .to_mem, .none } }, |
| | 10904 | }, |
| | 10905 | .extra_temps = .{ |
| | 10906 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 10907 | .unused, |
| | 10908 | .unused, |
| | 10909 | .unused, |
| | 10910 | .unused, |
| | 10911 | .unused, |
| | 10912 | .unused, |
| | 10913 | .unused, |
| | 10914 | .unused, |
| | 10915 | }, |
| | 10916 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10917 | .clobbers = .{ .eflags = true }, |
| | 10918 | .each = .{ .once = &.{ |
| | 10919 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| | 10920 | .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ }, |
| | 10921 | .{ .@"0:", ._, .@"and", .dst0q, .memi(.src0q, .tmp0), ._, ._ }, |
| | 10922 | .{ ._, ._r, .bs, .dst0q, .dst0q, ._, ._ }, |
| | 10923 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, |
| | 10924 | .{ ._, ._, .mov, .dst0q, .si(-1), ._, ._ }, |
| | 10925 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| | 10926 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 10927 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| | 10928 | .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, |
| | 10929 | .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, |
| | 10930 | } }, |
| | 10931 | }, .{ |
| | 10932 | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, |
| | 10933 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| | 10934 | .patterns = &.{ |
| | 10935 | .{ .src = .{ .to_mem, .none } }, |
| | 10936 | }, |
| | 10937 | .extra_temps = .{ |
| | 10938 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 10939 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 10940 | .unused, |
| | 10941 | .unused, |
| | 10942 | .unused, |
| | 10943 | .unused, |
| | 10944 | .unused, |
| | 10945 | .unused, |
| | 10946 | .unused, |
| | 10947 | }, |
| | 10948 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10949 | .clobbers = .{ .eflags = true }, |
| | 10950 | .each = .{ .once = &.{ |
| | 10951 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| | 10952 | .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| | 10953 | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| | 10954 | .{ ._, ._, .@"and", .tmp1q, .memi(.src0q, .tmp0), ._, ._ }, |
| | 10955 | .{ ._, ._, .lzcnt, .dst0q, .tmp1q, ._, ._ }, |
| | 10956 | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, |
| | 10957 | .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ }, |
| | 10958 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| | 10959 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 10960 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| | 10961 | .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, |
| | 10962 | .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, |
| | 10963 | } }, |
| | 10964 | }, .{ |
| | 10965 | .required_features = .{ .@"64bit", .lzcnt, null, null }, |
| | 10966 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| | 10967 | .patterns = &.{ |
| | 10968 | .{ .src = .{ .to_mem, .none } }, |
| | 10969 | }, |
| | 10970 | .extra_temps = .{ |
| | 10971 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 10972 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 10973 | .unused, |
| | 10974 | .unused, |
| | 10975 | .unused, |
| | 10976 | .unused, |
| | 10977 | .unused, |
| | 10978 | .unused, |
| | 10979 | .unused, |
| | 10980 | }, |
| | 10981 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 10982 | .clobbers = .{ .eflags = true }, |
| | 10983 | .each = .{ .once = &.{ |
| | 10984 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| | 10985 | .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| | 10986 | .{ .@"0:", ._, .@"and", .tmp1q, .memi(.src0q, .tmp0), ._, ._ }, |
| | 10987 | .{ ._, ._, .lzcnt, .dst0q, .tmp1q, ._, ._ }, |
| | 10988 | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, |
| | 10989 | .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ }, |
| | 10990 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| | 10991 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 10992 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| | 10993 | .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, |
| | 10994 | .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, |
| | 10995 | } }, |
| | 10996 | }, .{ |
| | 10997 | .required_features = .{ .@"64bit", null, null, null }, |
| | 10998 | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| | 10999 | .patterns = &.{ |
| | 11000 | .{ .src = .{ .to_mem, .none } }, |
| | 11001 | }, |
| | 11002 | .extra_temps = .{ |
| | 11003 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11004 | .unused, |
| | 11005 | .unused, |
| | 11006 | .unused, |
| | 11007 | .unused, |
| | 11008 | .unused, |
| | 11009 | .unused, |
| | 11010 | .unused, |
| | 11011 | .unused, |
| | 11012 | }, |
| | 11013 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 11014 | .clobbers = .{ .eflags = true }, |
| | 11015 | .each = .{ .once = &.{ |
| | 11016 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| | 11017 | .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ }, |
| | 11018 | .{ .@"0:", ._, .@"and", .dst0q, .memi(.src0q, .tmp0), ._, ._ }, |
| | 11019 | .{ ._, ._r, .bs, .dst0q, .dst0q, ._, ._ }, |
| | 11020 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, |
| | 11021 | .{ ._, ._, .mov, .dst0q, .si(-1), ._, ._ }, |
| | 11022 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| | 11023 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 11024 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| | 11025 | .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, |
| | 11026 | .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, |
| | 11027 | } }, |
| | 11028 | }, .{ |
| | 11029 | .required_features = .{ .lzcnt, .slow_incdec, null, null }, |
| | 11030 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .any }, |
| | 11031 | .patterns = &.{ |
| | 11032 | .{ .src = .{ .to_mem, .none } }, |
| | 11033 | }, |
| | 11034 | .extra_temps = .{ |
| | 11035 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11036 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11037 | .unused, |
| | 11038 | .unused, |
| | 11039 | .unused, |
| | 11040 | .unused, |
| | 11041 | .unused, |
| | 11042 | .unused, |
| | 11043 | .unused, |
| | 11044 | }, |
| | 11045 | .dst_temps = .{.mem}, |
| | 11046 | .clobbers = .{ .eflags = true }, |
| | 11047 | .each = .{ .once = &.{ |
| | 11048 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11049 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, |
| | 11050 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11051 | .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ }, |
| | 11052 | .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ }, |
| | 11053 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| | 11054 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 11055 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 11056 | } }, |
| | 11057 | }, .{ |
| | 11058 | .required_features = .{ .lzcnt, null, null, null }, |
| | 11059 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .any }, |
| | 11060 | .patterns = &.{ |
| | 11061 | .{ .src = .{ .to_mem, .none } }, |
| | 11062 | }, |
| | 11063 | .extra_temps = .{ |
| | 11064 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11065 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11066 | .unused, |
| | 11067 | .unused, |
| | 11068 | .unused, |
| | 11069 | .unused, |
| | 11070 | .unused, |
| | 11071 | .unused, |
| | 11072 | .unused, |
| | 11073 | }, |
| | 11074 | .dst_temps = .{.mem}, |
| | 11075 | .clobbers = .{ .eflags = true }, |
| | 11076 | .each = .{ .once = &.{ |
| | 11077 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11078 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, |
| | 11079 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11080 | .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ }, |
| | 11081 | .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ }, |
| | 11082 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| | 11083 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 11084 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 11085 | } }, |
| | 11086 | }, .{ |
| | 11087 | .required_features = .{ .lzcnt, .slow_incdec, null, null }, |
| | 11088 | .src_constraints = .{ .{ .scalar_int_is = .word }, .any }, |
| | 11089 | .patterns = &.{ |
| | 11090 | .{ .src = .{ .to_mem, .none } }, |
| | 11091 | }, |
| | 11092 | .extra_temps = .{ |
| | 11093 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11094 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11095 | .unused, |
| | 11096 | .unused, |
| | 11097 | .unused, |
| | 11098 | .unused, |
| | 11099 | .unused, |
| | 11100 | .unused, |
| | 11101 | .unused, |
| | 11102 | }, |
| | 11103 | .dst_temps = .{.mem}, |
| | 11104 | .clobbers = .{ .eflags = true }, |
| | 11105 | .each = .{ .once = &.{ |
| | 11106 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11107 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, |
| | 11108 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11109 | .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ }, |
| | 11110 | .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ }, |
| | 11111 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| | 11112 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 11113 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 11114 | } }, |
| | 11115 | }, .{ |
| | 11116 | .required_features = .{ .lzcnt, null, null, null }, |
| | 11117 | .src_constraints = .{ .{ .scalar_int_is = .word }, .any }, |
| | 11118 | .patterns = &.{ |
| | 11119 | .{ .src = .{ .to_mem, .none } }, |
| | 11120 | }, |
| | 11121 | .extra_temps = .{ |
| | 11122 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11123 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11124 | .unused, |
| | 11125 | .unused, |
| | 11126 | .unused, |
| | 11127 | .unused, |
| | 11128 | .unused, |
| | 11129 | .unused, |
| | 11130 | .unused, |
| | 11131 | }, |
| | 11132 | .dst_temps = .{.mem}, |
| | 11133 | .clobbers = .{ .eflags = true }, |
| | 11134 | .each = .{ .once = &.{ |
| | 11135 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11136 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, |
| | 11137 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11138 | .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ }, |
| | 11139 | .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ }, |
| | 11140 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| | 11141 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 11142 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 11143 | } }, |
| | 11144 | }, .{ |
| | 11145 | .required_features = .{ .lzcnt, .slow_incdec, null, null }, |
| | 11146 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .any }, |
| | 11147 | .patterns = &.{ |
| | 11148 | .{ .src = .{ .to_mem, .none } }, |
| | 11149 | }, |
| | 11150 | .extra_temps = .{ |
| | 11151 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11152 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11153 | .unused, |
| | 11154 | .unused, |
| | 11155 | .unused, |
| | 11156 | .unused, |
| | 11157 | .unused, |
| | 11158 | .unused, |
| | 11159 | .unused, |
| | 11160 | }, |
| | 11161 | .dst_temps = .{.mem}, |
| | 11162 | .clobbers = .{ .eflags = true }, |
| | 11163 | .each = .{ .once = &.{ |
| | 11164 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11165 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, |
| | 11166 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11167 | .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ }, |
| | 11168 | .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ }, |
| | 11169 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| | 11170 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 11171 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 11172 | } }, |
| | 11173 | }, .{ |
| | 11174 | .required_features = .{ .lzcnt, null, null, null }, |
| | 11175 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .any }, |
| | 11176 | .patterns = &.{ |
| | 11177 | .{ .src = .{ .to_mem, .none } }, |
| | 11178 | }, |
| | 11179 | .extra_temps = .{ |
| | 11180 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11181 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11182 | .unused, |
| | 11183 | .unused, |
| | 11184 | .unused, |
| | 11185 | .unused, |
| | 11186 | .unused, |
| | 11187 | .unused, |
| | 11188 | .unused, |
| | 11189 | }, |
| | 11190 | .dst_temps = .{.mem}, |
| | 11191 | .clobbers = .{ .eflags = true }, |
| | 11192 | .each = .{ .once = &.{ |
| | 11193 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11194 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, |
| | 11195 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11196 | .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ }, |
| | 11197 | .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ }, |
| | 11198 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| | 11199 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 11200 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 11201 | } }, |
| | 11202 | }, .{ |
| | 11203 | .required_features = .{ .@"64bit", .lzcnt, .slow_incdec, null }, |
| | 11204 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, |
| | 11205 | .patterns = &.{ |
| | 11206 | .{ .src = .{ .to_mem, .none } }, |
| | 11207 | }, |
| | 11208 | .extra_temps = .{ |
| | 11209 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11210 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 11211 | .unused, |
| | 11212 | .unused, |
| | 11213 | .unused, |
| | 11214 | .unused, |
| | 11215 | .unused, |
| | 11216 | .unused, |
| | 11217 | .unused, |
| | 11218 | }, |
| | 11219 | .dst_temps = .{.mem}, |
| | 11220 | .clobbers = .{ .eflags = true }, |
| | 11221 | .each = .{ .once = &.{ |
| | 11222 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11223 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| | 11224 | .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, |
| | 11225 | .{ ._, ._, .lzcnt, .tmp1q, .tmp1q, ._, ._ }, |
| | 11226 | .{ ._, ._, .sub, .tmp1b, .sia(64, .src0, .sub_bit_size), ._, ._ }, |
| | 11227 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| | 11228 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 11229 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 11230 | } }, |
| | 11231 | }, .{ |
| | 11232 | .required_features = .{ .@"64bit", .lzcnt, null, null }, |
| | 11233 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, |
| | 11234 | .patterns = &.{ |
| | 11235 | .{ .src = .{ .to_mem, .none } }, |
| | 11236 | }, |
| | 11237 | .extra_temps = .{ |
| | 11238 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11239 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 11240 | .unused, |
| | 11241 | .unused, |
| | 11242 | .unused, |
| | 11243 | .unused, |
| | 11244 | .unused, |
| | 11245 | .unused, |
| | 11246 | .unused, |
| | 11247 | }, |
| | 11248 | .dst_temps = .{.mem}, |
| | 11249 | .clobbers = .{ .eflags = true }, |
| | 11250 | .each = .{ .once = &.{ |
| | 11251 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11252 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| | 11253 | .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, |
| | 11254 | .{ ._, ._, .lzcnt, .tmp1q, .tmp1q, ._, ._ }, |
| | 11255 | .{ ._, ._, .sub, .tmp1b, .sia(64, .src0, .sub_bit_size), ._, ._ }, |
| | 11256 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| | 11257 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 11258 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 11259 | } }, |
| | 11260 | }, .{ |
| | 11261 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, .slow_incdec, null }, |
| | 11262 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .any }, |
| | 11263 | .patterns = &.{ |
| | 11264 | .{ .src = .{ .to_mem, .none } }, |
| | 11265 | }, |
| | 11266 | .extra_temps = .{ |
| | 11267 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11268 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11269 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11270 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 11271 | .unused, |
| | 11272 | .unused, |
| | 11273 | .unused, |
| | 11274 | .unused, |
| | 11275 | .unused, |
| | 11276 | }, |
| | 11277 | .dst_temps = .{.mem}, |
| | 11278 | .clobbers = .{ .eflags = true }, |
| | 11279 | .each = .{ .once = &.{ |
| | 11280 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11281 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, |
| | 11282 | .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, |
| | 11283 | .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11284 | .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ }, |
| | 11285 | .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ }, |
| | 11286 | .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 11287 | .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ }, |
| | 11288 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, |
| | 11289 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 11290 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 11291 | } }, |
| | 11292 | }, .{ |
| | 11293 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, |
| | 11294 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .any }, |
| | 11295 | .patterns = &.{ |
| | 11296 | .{ .src = .{ .to_mem, .none } }, |
| | 11297 | }, |
| | 11298 | .extra_temps = .{ |
| | 11299 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11300 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11301 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11302 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 11303 | .unused, |
| | 11304 | .unused, |
| | 11305 | .unused, |
| | 11306 | .unused, |
| | 11307 | .unused, |
| | 11308 | }, |
| | 11309 | .dst_temps = .{.mem}, |
| | 11310 | .clobbers = .{ .eflags = true }, |
| | 11311 | .each = .{ .once = &.{ |
| | 11312 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11313 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, |
| | 11314 | .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, |
| | 11315 | .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11316 | .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ }, |
| | 11317 | .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ }, |
| | 11318 | .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 11319 | .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ }, |
| | 11320 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, |
| | 11321 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 11322 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 11323 | } }, |
| | 11324 | }, .{ |
| | 11325 | .required_features = .{ .bsf_bsr_0_clobbers_result, .slow_incdec, null, null }, |
| | 11326 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .any }, |
| | 11327 | .patterns = &.{ |
| | 11328 | .{ .src = .{ .to_mem, .none } }, |
| | 11329 | }, |
| | 11330 | .extra_temps = .{ |
| | 11331 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11332 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11333 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11334 | .unused, |
| | 11335 | .unused, |
| | 11336 | .unused, |
| | 11337 | .unused, |
| | 11338 | .unused, |
| | 11339 | .unused, |
| | 11340 | }, |
| | 11341 | .dst_temps = .{.mem}, |
| | 11342 | .clobbers = .{ .eflags = true }, |
| | 11343 | .each = .{ .once = &.{ |
| | 11344 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11345 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, |
| | 11346 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11347 | .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ }, |
| | 11348 | .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ }, |
| | 11349 | .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, |
| | 11350 | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| | 11351 | .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ }, |
| | 11352 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ }, |
| | 11353 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 11354 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 11355 | } }, |
| | 11356 | }, .{ |
| | 11357 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, |
| | 11358 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .any }, |
| | 11359 | .patterns = &.{ |
| | 11360 | .{ .src = .{ .to_mem, .none } }, |
| | 11361 | }, |
| | 11362 | .extra_temps = .{ |
| | 11363 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11364 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11365 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11366 | .unused, |
| | 11367 | .unused, |
| | 11368 | .unused, |
| | 11369 | .unused, |
| | 11370 | .unused, |
| | 11371 | .unused, |
| | 11372 | }, |
| | 11373 | .dst_temps = .{.mem}, |
| | 11374 | .clobbers = .{ .eflags = true }, |
| | 11375 | .each = .{ .once = &.{ |
| | 11376 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11377 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, |
| | 11378 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11379 | .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ }, |
| | 11380 | .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ }, |
| | 11381 | .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, |
| | 11382 | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| | 11383 | .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ }, |
| | 11384 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ }, |
| | 11385 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 11386 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 11387 | } }, |
| | 11388 | }, .{ |
| | 11389 | .required_features = .{ .slow_incdec, null, null, null }, |
| | 11390 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .any }, |
| | 11391 | .patterns = &.{ |
| | 11392 | .{ .src = .{ .to_mem, .none } }, |
| | 11393 | }, |
| | 11394 | .extra_temps = .{ |
| | 11395 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11396 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11397 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11398 | .unused, |
| | 11399 | .unused, |
| | 11400 | .unused, |
| | 11401 | .unused, |
| | 11402 | .unused, |
| | 11403 | .unused, |
| | 11404 | }, |
| | 11405 | .dst_temps = .{.mem}, |
| | 11406 | .clobbers = .{ .eflags = true }, |
| | 11407 | .each = .{ .once = &.{ |
| | 11408 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11409 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, |
| | 11410 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11411 | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, |
| | 11412 | .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ }, |
| | 11413 | .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 11414 | .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ }, |
| | 11415 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| | 11416 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 11417 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 11418 | } }, |
| | 11419 | }, .{ |
| | 11420 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .any }, |
| | 11421 | .patterns = &.{ |
| | 11422 | .{ .src = .{ .to_mem, .none } }, |
| | 11423 | }, |
| | 11424 | .extra_temps = .{ |
| | 11425 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11426 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11427 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11428 | .unused, |
| | 11429 | .unused, |
| | 11430 | .unused, |
| | 11431 | .unused, |
| | 11432 | .unused, |
| | 11433 | .unused, |
| | 11434 | }, |
| | 11435 | .dst_temps = .{.mem}, |
| | 11436 | .clobbers = .{ .eflags = true }, |
| | 11437 | .each = .{ .once = &.{ |
| | 11438 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11439 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, |
| | 11440 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11441 | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, |
| | 11442 | .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ }, |
| | 11443 | .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 11444 | .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ }, |
| | 11445 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| | 11446 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 11447 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 11448 | } }, |
| | 11449 | }, .{ |
| | 11450 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, .slow_incdec, null }, |
| | 11451 | .src_constraints = .{ .{ .scalar_int_is = .word }, .any }, |
| | 11452 | .patterns = &.{ |
| | 11453 | .{ .src = .{ .to_mem, .none } }, |
| | 11454 | }, |
| | 11455 | .extra_temps = .{ |
| | 11456 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11457 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11458 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11459 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 11460 | .unused, |
| | 11461 | .unused, |
| | 11462 | .unused, |
| | 11463 | .unused, |
| | 11464 | .unused, |
| | 11465 | }, |
| | 11466 | .dst_temps = .{.mem}, |
| | 11467 | .clobbers = .{ .eflags = true }, |
| | 11468 | .each = .{ .once = &.{ |
| | 11469 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11470 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, |
| | 11471 | .{ .@"0:", ._, .movzx, .tmp2d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, |
| | 11472 | .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11473 | .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ }, |
| | 11474 | .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ }, |
| | 11475 | .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 11476 | .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ }, |
| | 11477 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, |
| | 11478 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 11479 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 11480 | } }, |
| | 11481 | }, .{ |
| | 11482 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, |
| | 11483 | .src_constraints = .{ .{ .scalar_int_is = .word }, .any }, |
| | 11484 | .patterns = &.{ |
| | 11485 | .{ .src = .{ .to_mem, .none } }, |
| | 11486 | }, |
| | 11487 | .extra_temps = .{ |
| | 11488 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11489 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11490 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11491 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 11492 | .unused, |
| | 11493 | .unused, |
| | 11494 | .unused, |
| | 11495 | .unused, |
| | 11496 | .unused, |
| | 11497 | }, |
| | 11498 | .dst_temps = .{.mem}, |
| | 11499 | .clobbers = .{ .eflags = true }, |
| | 11500 | .each = .{ .once = &.{ |
| | 11501 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11502 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, |
| | 11503 | .{ .@"0:", ._, .movzx, .tmp2d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, |
| | 11504 | .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11505 | .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ }, |
| | 11506 | .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ }, |
| | 11507 | .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 11508 | .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ }, |
| | 11509 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, |
| | 11510 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 11511 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 11512 | } }, |
| | 11513 | }, .{ |
| | 11514 | .required_features = .{ .bsf_bsr_0_clobbers_result, .slow_incdec, null, null }, |
| | 11515 | .src_constraints = .{ .{ .scalar_int_is = .word }, .any }, |
| | 11516 | .patterns = &.{ |
| | 11517 | .{ .src = .{ .to_mem, .none } }, |
| | 11518 | }, |
| | 11519 | .extra_temps = .{ |
| | 11520 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11521 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11522 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11523 | .unused, |
| | 11524 | .unused, |
| | 11525 | .unused, |
| | 11526 | .unused, |
| | 11527 | .unused, |
| | 11528 | .unused, |
| | 11529 | }, |
| | 11530 | .dst_temps = .{.mem}, |
| | 11531 | .clobbers = .{ .eflags = true }, |
| | 11532 | .each = .{ .once = &.{ |
| | 11533 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11534 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, |
| | 11535 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11536 | .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ }, |
| | 11537 | .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ }, |
| | 11538 | .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, |
| | 11539 | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| | 11540 | .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ }, |
| | 11541 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ }, |
| | 11542 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 11543 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 11544 | } }, |
| | 11545 | }, .{ |
| | 11546 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, |
| | 11547 | .src_constraints = .{ .{ .scalar_int_is = .word }, .any }, |
| | 11548 | .patterns = &.{ |
| | 11549 | .{ .src = .{ .to_mem, .none } }, |
| | 11550 | }, |
| | 11551 | .extra_temps = .{ |
| | 11552 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11553 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11554 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11555 | .unused, |
| | 11556 | .unused, |
| | 11557 | .unused, |
| | 11558 | .unused, |
| | 11559 | .unused, |
| | 11560 | .unused, |
| | 11561 | }, |
| | 11562 | .dst_temps = .{.mem}, |
| | 11563 | .clobbers = .{ .eflags = true }, |
| | 11564 | .each = .{ .once = &.{ |
| | 11565 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11566 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, |
| | 11567 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11568 | .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ }, |
| | 11569 | .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ }, |
| | 11570 | .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, |
| | 11571 | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| | 11572 | .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ }, |
| | 11573 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ }, |
| | 11574 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 11575 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 11576 | } }, |
| | 11577 | }, .{ |
| | 11578 | .required_features = .{ .slow_incdec, null, null, null }, |
| | 11579 | .src_constraints = .{ .{ .scalar_int_is = .word }, .any }, |
| | 11580 | .patterns = &.{ |
| | 11581 | .{ .src = .{ .to_mem, .none } }, |
| | 11582 | }, |
| | 11583 | .extra_temps = .{ |
| | 11584 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11585 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11586 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11587 | .unused, |
| | 11588 | .unused, |
| | 11589 | .unused, |
| | 11590 | .unused, |
| | 11591 | .unused, |
| | 11592 | .unused, |
| | 11593 | }, |
| | 11594 | .dst_temps = .{.mem}, |
| | 11595 | .clobbers = .{ .eflags = true }, |
| | 11596 | .each = .{ .once = &.{ |
| | 11597 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11598 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, |
| | 11599 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11600 | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, |
| | 11601 | .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ }, |
| | 11602 | .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 11603 | .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ }, |
| | 11604 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| | 11605 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 11606 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 11607 | } }, |
| | 11608 | }, .{ |
| | 11609 | .src_constraints = .{ .{ .scalar_int_is = .word }, .any }, |
| | 11610 | .patterns = &.{ |
| | 11611 | .{ .src = .{ .to_mem, .none } }, |
| | 11612 | }, |
| | 11613 | .extra_temps = .{ |
| | 11614 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11615 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11616 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11617 | .unused, |
| | 11618 | .unused, |
| | 11619 | .unused, |
| | 11620 | .unused, |
| | 11621 | .unused, |
| | 11622 | .unused, |
| | 11623 | }, |
| | 11624 | .dst_temps = .{.mem}, |
| | 11625 | .clobbers = .{ .eflags = true }, |
| | 11626 | .each = .{ .once = &.{ |
| | 11627 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11628 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, |
| | 11629 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11630 | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, |
| | 11631 | .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ }, |
| | 11632 | .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 11633 | .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ }, |
| | 11634 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| | 11635 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 11636 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 11637 | } }, |
| | 11638 | }, .{ |
| | 11639 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, .slow_incdec, null }, |
| | 11640 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .any }, |
| | 11641 | .patterns = &.{ |
| | 11642 | .{ .src = .{ .to_mem, .none } }, |
| | 11643 | }, |
| | 11644 | .extra_temps = .{ |
| | 11645 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11646 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11647 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11648 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 11649 | .unused, |
| | 11650 | .unused, |
| | 11651 | .unused, |
| | 11652 | .unused, |
| | 11653 | .unused, |
| | 11654 | }, |
| | 11655 | .dst_temps = .{.mem}, |
| | 11656 | .clobbers = .{ .eflags = true }, |
| | 11657 | .each = .{ .once = &.{ |
| | 11658 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11659 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, |
| | 11660 | .{ .@"0:", ._, .mov, .tmp2d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, |
| | 11661 | .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11662 | .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ }, |
| | 11663 | .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ }, |
| | 11664 | .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 11665 | .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ }, |
| | 11666 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, |
| | 11667 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 11668 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 11669 | } }, |
| | 11670 | }, .{ |
| | 11671 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, |
| | 11672 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .any }, |
| | 11673 | .patterns = &.{ |
| | 11674 | .{ .src = .{ .to_mem, .none } }, |
| | 11675 | }, |
| | 11676 | .extra_temps = .{ |
| | 11677 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11678 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11679 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11680 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 11681 | .unused, |
| | 11682 | .unused, |
| | 11683 | .unused, |
| | 11684 | .unused, |
| | 11685 | .unused, |
| | 11686 | }, |
| | 11687 | .dst_temps = .{.mem}, |
| | 11688 | .clobbers = .{ .eflags = true }, |
| | 11689 | .each = .{ .once = &.{ |
| | 11690 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11691 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, |
| | 11692 | .{ .@"0:", ._, .mov, .tmp2d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, |
| | 11693 | .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11694 | .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ }, |
| | 11695 | .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ }, |
| | 11696 | .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 11697 | .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ }, |
| | 11698 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, |
| | 11699 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 11700 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 11701 | } }, |
| | 11702 | }, .{ |
| | 11703 | .required_features = .{ .bsf_bsr_0_clobbers_result, .slow_incdec, null, null }, |
| | 11704 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .any }, |
| | 11705 | .patterns = &.{ |
| | 11706 | .{ .src = .{ .to_mem, .none } }, |
| | 11707 | }, |
| | 11708 | .extra_temps = .{ |
| | 11709 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11710 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11711 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11712 | .unused, |
| | 11713 | .unused, |
| | 11714 | .unused, |
| | 11715 | .unused, |
| | 11716 | .unused, |
| | 11717 | .unused, |
| | 11718 | }, |
| | 11719 | .dst_temps = .{.mem}, |
| | 11720 | .clobbers = .{ .eflags = true }, |
| | 11721 | .each = .{ .once = &.{ |
| | 11722 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11723 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, |
| | 11724 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11725 | .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ }, |
| | 11726 | .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ }, |
| | 11727 | .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, |
| | 11728 | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| | 11729 | .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ }, |
| | 11730 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ }, |
| | 11731 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 11732 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 11733 | } }, |
| | 11734 | }, .{ |
| | 11735 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, |
| | 11736 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .any }, |
| | 11737 | .patterns = &.{ |
| | 11738 | .{ .src = .{ .to_mem, .none } }, |
| | 11739 | }, |
| | 11740 | .extra_temps = .{ |
| | 11741 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11742 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11743 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11744 | .unused, |
| | 11745 | .unused, |
| | 11746 | .unused, |
| | 11747 | .unused, |
| | 11748 | .unused, |
| | 11749 | .unused, |
| | 11750 | }, |
| | 11751 | .dst_temps = .{.mem}, |
| | 11752 | .clobbers = .{ .eflags = true }, |
| | 11753 | .each = .{ .once = &.{ |
| | 11754 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11755 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, |
| | 11756 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11757 | .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ }, |
| | 11758 | .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ }, |
| | 11759 | .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, |
| | 11760 | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| | 11761 | .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ }, |
| | 11762 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ }, |
| | 11763 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 11764 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 11765 | } }, |
| | 11766 | }, .{ |
| | 11767 | .required_features = .{ .slow_incdec, null, null, null }, |
| | 11768 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .any }, |
| | 11769 | .patterns = &.{ |
| | 11770 | .{ .src = .{ .to_mem, .none } }, |
| | 11771 | }, |
| | 11772 | .extra_temps = .{ |
| | 11773 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11774 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11775 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11776 | .unused, |
| | 11777 | .unused, |
| | 11778 | .unused, |
| | 11779 | .unused, |
| | 11780 | .unused, |
| | 11781 | .unused, |
| | 11782 | }, |
| | 11783 | .dst_temps = .{.mem}, |
| | 11784 | .clobbers = .{ .eflags = true }, |
| | 11785 | .each = .{ .once = &.{ |
| | 11786 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11787 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, |
| | 11788 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11789 | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, |
| | 11790 | .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ }, |
| | 11791 | .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 11792 | .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ }, |
| | 11793 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| | 11794 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 11795 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 11796 | } }, |
| | 11797 | }, .{ |
| | 11798 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .any }, |
| | 11799 | .patterns = &.{ |
| | 11800 | .{ .src = .{ .to_mem, .none } }, |
| | 11801 | }, |
| | 11802 | .extra_temps = .{ |
| | 11803 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11804 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11805 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11806 | .unused, |
| | 11807 | .unused, |
| | 11808 | .unused, |
| | 11809 | .unused, |
| | 11810 | .unused, |
| | 11811 | .unused, |
| | 11812 | }, |
| | 11813 | .dst_temps = .{.mem}, |
| | 11814 | .clobbers = .{ .eflags = true }, |
| | 11815 | .each = .{ .once = &.{ |
| | 11816 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11817 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, |
| | 11818 | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| | 11819 | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, |
| | 11820 | .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ }, |
| | 11821 | .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 11822 | .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ }, |
| | 11823 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| | 11824 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 11825 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 11826 | } }, |
| | 11827 | }, .{ |
| | 11828 | .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, .slow_incdec }, |
| | 11829 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, |
| | 11830 | .patterns = &.{ |
| | 11831 | .{ .src = .{ .to_mem, .none } }, |
| | 11832 | }, |
| | 11833 | .extra_temps = .{ |
| | 11834 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11835 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11836 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 11837 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 11838 | .unused, |
| | 11839 | .unused, |
| | 11840 | .unused, |
| | 11841 | .unused, |
| | 11842 | .unused, |
| | 11843 | }, |
| | 11844 | .dst_temps = .{.mem}, |
| | 11845 | .clobbers = .{ .eflags = true }, |
| | 11846 | .each = .{ .once = &.{ |
| | 11847 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11848 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, |
| | 11849 | .{ .@"0:", ._, .mov, .tmp2q, .ua(.src0, .add_umax), ._, ._ }, |
| | 11850 | .{ ._, ._, .@"and", .tmp2q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, |
| | 11851 | .{ ._, ._r, .bs, .tmp2q, .tmp2q, ._, ._ }, |
| | 11852 | .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ }, |
| | 11853 | .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 11854 | .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ }, |
| | 11855 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, |
| | 11856 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 11857 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 11858 | } }, |
| | 11859 | }, .{ |
| | 11860 | .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, null }, |
| | 11861 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, |
| | 11862 | .patterns = &.{ |
| | 11863 | .{ .src = .{ .to_mem, .none } }, |
| | 11864 | }, |
| | 11865 | .extra_temps = .{ |
| | 11866 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11867 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11868 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 11869 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 11870 | .unused, |
| | 11871 | .unused, |
| | 11872 | .unused, |
| | 11873 | .unused, |
| | 11874 | .unused, |
| | 11875 | }, |
| | 11876 | .dst_temps = .{.mem}, |
| | 11877 | .clobbers = .{ .eflags = true }, |
| | 11878 | .each = .{ .once = &.{ |
| | 11879 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11880 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, |
| | 11881 | .{ .@"0:", ._, .mov, .tmp2q, .ua(.src0, .add_umax), ._, ._ }, |
| | 11882 | .{ ._, ._, .@"and", .tmp2q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, |
| | 11883 | .{ ._, ._r, .bs, .tmp2q, .tmp2q, ._, ._ }, |
| | 11884 | .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ }, |
| | 11885 | .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 11886 | .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ }, |
| | 11887 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, |
| | 11888 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 11889 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 11890 | } }, |
| | 11891 | }, .{ |
| | 11892 | .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, .slow_incdec, null }, |
| | 11893 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, |
| | 11894 | .patterns = &.{ |
| | 11895 | .{ .src = .{ .to_mem, .none } }, |
| | 11896 | }, |
| | 11897 | .extra_temps = .{ |
| | 11898 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11899 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 11900 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 11901 | .unused, |
| | 11902 | .unused, |
| | 11903 | .unused, |
| | 11904 | .unused, |
| | 11905 | .unused, |
| | 11906 | .unused, |
| | 11907 | }, |
| | 11908 | .dst_temps = .{.mem}, |
| | 11909 | .clobbers = .{ .eflags = true }, |
| | 11910 | .each = .{ .once = &.{ |
| | 11911 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11912 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| | 11913 | .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, |
| | 11914 | .{ ._, ._r, .bs, .tmp1q, .tmp1q, ._, ._ }, |
| | 11915 | .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ }, |
| | 11916 | .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, |
| | 11917 | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| | 11918 | .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ }, |
| | 11919 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ }, |
| | 11920 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 11921 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 11922 | } }, |
| | 11923 | }, .{ |
| | 11924 | .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null }, |
| | 11925 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, |
| | 11926 | .patterns = &.{ |
| | 11927 | .{ .src = .{ .to_mem, .none } }, |
| | 11928 | }, |
| | 11929 | .extra_temps = .{ |
| | 11930 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11931 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 11932 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 11933 | .unused, |
| | 11934 | .unused, |
| | 11935 | .unused, |
| | 11936 | .unused, |
| | 11937 | .unused, |
| | 11938 | .unused, |
| | 11939 | }, |
| | 11940 | .dst_temps = .{.mem}, |
| | 11941 | .clobbers = .{ .eflags = true }, |
| | 11942 | .each = .{ .once = &.{ |
| | 11943 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11944 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| | 11945 | .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, |
| | 11946 | .{ ._, ._r, .bs, .tmp1q, .tmp1q, ._, ._ }, |
| | 11947 | .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ }, |
| | 11948 | .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, |
| | 11949 | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| | 11950 | .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ }, |
| | 11951 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ }, |
| | 11952 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 11953 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 11954 | } }, |
| | 11955 | }, .{ |
| | 11956 | .required_features = .{ .@"64bit", .slow_incdec, null, null }, |
| | 11957 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, |
| | 11958 | .patterns = &.{ |
| | 11959 | .{ .src = .{ .to_mem, .none } }, |
| | 11960 | }, |
| | 11961 | .extra_temps = .{ |
| | 11962 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11963 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 11964 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 11965 | .unused, |
| | 11966 | .unused, |
| | 11967 | .unused, |
| | 11968 | .unused, |
| | 11969 | .unused, |
| | 11970 | .unused, |
| | 11971 | }, |
| | 11972 | .dst_temps = .{.mem}, |
| | 11973 | .clobbers = .{ .eflags = true }, |
| | 11974 | .each = .{ .once = &.{ |
| | 11975 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 11976 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| | 11977 | .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, |
| | 11978 | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, |
| | 11979 | .{ ._, ._r, .bs, .tmp2q, .tmp1q, ._, ._ }, |
| | 11980 | .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 11981 | .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ }, |
| | 11982 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| | 11983 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 11984 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 11985 | } }, |
| | 11986 | }, .{ |
| | 11987 | .required_features = .{ .@"64bit", null, null, null }, |
| | 11988 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, |
| | 11989 | .patterns = &.{ |
| | 11990 | .{ .src = .{ .to_mem, .none } }, |
| | 11991 | }, |
| | 11992 | .extra_temps = .{ |
| | 11993 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 11994 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11995 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 11996 | .unused, |
| | 11997 | .unused, |
| | 11998 | .unused, |
| | 11999 | .unused, |
| | 12000 | .unused, |
| | 12001 | .unused, |
| | 12002 | }, |
| | 12003 | .dst_temps = .{.mem}, |
| | 12004 | .clobbers = .{ .eflags = true }, |
| | 12005 | .each = .{ .once = &.{ |
| | 12006 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 12007 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| | 12008 | .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, |
| | 12009 | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, |
| | 12010 | .{ ._, ._r, .bs, .tmp2q, .tmp1q, ._, ._ }, |
| | 12011 | .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| | 12012 | .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ }, |
| | 12013 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| | 12014 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| | 12015 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| | 12016 | } }, |
| | 12017 | }, .{ |
| | 12018 | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, |
| | 12019 | .dst_constraints = .{.{ .scalar_int_is = .byte }}, |
| | 12020 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| | 12021 | .patterns = &.{ |
| | 12022 | .{ .src = .{ .to_mem, .none } }, |
| | 12023 | }, |
| | 12024 | .extra_temps = .{ |
| | 12025 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 12026 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 12027 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 12028 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 12029 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 12030 | .unused, |
| | 12031 | .unused, |
| | 12032 | .unused, |
| | 12033 | .unused, |
| | 12034 | }, |
| | 12035 | .dst_temps = .{.mem}, |
| | 12036 | .clobbers = .{ .eflags = true }, |
| | 12037 | .each = .{ .once = &.{ |
| | 12038 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 12039 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| | 12040 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, |
| | 12041 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| | 12042 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| | 12043 | .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, |
| | 12044 | .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, |
| | 12045 | .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, |
| | 12046 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, |
| | 12047 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, |
| | 12048 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, |
| | 12049 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 12050 | .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, |
| | 12051 | .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, |
| | 12052 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, |
| | 12053 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, |
| | 12054 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 12055 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 12056 | } }, |
| | 12057 | }, .{ |
| | 12058 | .required_features = .{ .@"64bit", .lzcnt, null, null }, |
| | 12059 | .dst_constraints = .{.{ .scalar_int_is = .byte }}, |
| | 12060 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| | 12061 | .patterns = &.{ |
| | 12062 | .{ .src = .{ .to_mem, .none } }, |
| | 12063 | }, |
| | 12064 | .extra_temps = .{ |
| | 12065 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 12066 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 12067 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 12068 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 12069 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 12070 | .unused, |
| | 12071 | .unused, |
| | 12072 | .unused, |
| | 12073 | .unused, |
| | 12074 | }, |
| | 12075 | .dst_temps = .{.mem}, |
| | 12076 | .clobbers = .{ .eflags = true }, |
| | 12077 | .each = .{ .once = &.{ |
| | 12078 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 12079 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| | 12080 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, |
| | 12081 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| | 12082 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| | 12083 | .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, |
| | 12084 | .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, |
| | 12085 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, |
| | 12086 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, |
| | 12087 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, |
| | 12088 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 12089 | .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, |
| | 12090 | .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, |
| | 12091 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, |
| | 12092 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, |
| | 12093 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 12094 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 12095 | } }, |
| | 12096 | }, .{ |
| | 12097 | .required_features = .{ .@"64bit", null, null, null }, |
| | 12098 | .dst_constraints = .{.{ .scalar_int_is = .byte }}, |
| | 12099 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| | 12100 | .patterns = &.{ |
| | 12101 | .{ .src = .{ .to_mem, .none } }, |
| | 12102 | }, |
| | 12103 | .extra_temps = .{ |
| | 12104 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 12105 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 12106 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 12107 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 12108 | .unused, |
| | 12109 | .unused, |
| | 12110 | .unused, |
| | 12111 | .unused, |
| | 12112 | .unused, |
| | 12113 | }, |
| | 12114 | .dst_temps = .{.mem}, |
| | 12115 | .clobbers = .{ .eflags = true }, |
| | 12116 | .each = .{ .once = &.{ |
| | 12117 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 12118 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| | 12119 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, |
| | 12120 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| | 12121 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| | 12122 | .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ }, |
| | 12123 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 12124 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, |
| | 12125 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, |
| | 12126 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, |
| | 12127 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 12128 | .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, |
| | 12129 | .{ ._, ._, .neg, .tmp3b, ._, ._, ._ }, |
| | 12130 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, |
| | 12131 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, |
| | 12132 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 12133 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 12134 | } }, |
| | 12135 | }, .{ |
| | 12136 | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, |
| | 12137 | .dst_constraints = .{.{ .scalar_int_is = .byte }}, |
| | 12138 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| | 12139 | .patterns = &.{ |
| | 12140 | .{ .src = .{ .to_mem, .none } }, |
| | 12141 | }, |
| | 12142 | .extra_temps = .{ |
| | 12143 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 12144 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 12145 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 12146 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 12147 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 12148 | .unused, |
| | 12149 | .unused, |
| | 12150 | .unused, |
| | 12151 | .unused, |
| | 12152 | }, |
| | 12153 | .dst_temps = .{.mem}, |
| | 12154 | .clobbers = .{ .eflags = true }, |
| | 12155 | .each = .{ .once = &.{ |
| | 12156 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 12157 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| | 12158 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, |
| | 12159 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| | 12160 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| | 12161 | .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, |
| | 12162 | .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, |
| | 12163 | .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, |
| | 12164 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, |
| | 12165 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, |
| | 12166 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, |
| | 12167 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 12168 | .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, |
| | 12169 | .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, |
| | 12170 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, |
| | 12171 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, |
| | 12172 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 12173 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 12174 | } }, |
| | 12175 | }, .{ |
| | 12176 | .required_features = .{ .@"64bit", .lzcnt, null, null }, |
| | 12177 | .dst_constraints = .{.{ .scalar_int_is = .byte }}, |
| | 12178 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| | 12179 | .patterns = &.{ |
| | 12180 | .{ .src = .{ .to_mem, .none } }, |
| | 12181 | }, |
| | 12182 | .extra_temps = .{ |
| | 12183 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 12184 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 12185 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 12186 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 12187 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 12188 | .unused, |
| | 12189 | .unused, |
| | 12190 | .unused, |
| | 12191 | .unused, |
| | 12192 | }, |
| | 12193 | .dst_temps = .{.mem}, |
| | 12194 | .clobbers = .{ .eflags = true }, |
| | 12195 | .each = .{ .once = &.{ |
| | 12196 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 12197 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| | 12198 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, |
| | 12199 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| | 12200 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| | 12201 | .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, |
| | 12202 | .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, |
| | 12203 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, |
| | 12204 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, |
| | 12205 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, |
| | 12206 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 12207 | .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, |
| | 12208 | .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, |
| | 12209 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, |
| | 12210 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, |
| | 12211 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 12212 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 12213 | } }, |
| | 12214 | }, .{ |
| | 12215 | .required_features = .{ .@"64bit", null, null, null }, |
| | 12216 | .dst_constraints = .{.{ .scalar_int_is = .byte }}, |
| | 12217 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| | 12218 | .patterns = &.{ |
| | 12219 | .{ .src = .{ .to_mem, .none } }, |
| | 12220 | }, |
| | 12221 | .extra_temps = .{ |
| | 12222 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 12223 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 12224 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 12225 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 12226 | .unused, |
| | 12227 | .unused, |
| | 12228 | .unused, |
| | 12229 | .unused, |
| | 12230 | .unused, |
| | 12231 | }, |
| | 12232 | .dst_temps = .{.mem}, |
| | 12233 | .clobbers = .{ .eflags = true }, |
| | 12234 | .each = .{ .once = &.{ |
| | 12235 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 12236 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| | 12237 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, |
| | 12238 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| | 12239 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| | 12240 | .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ }, |
| | 12241 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 12242 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, |
| | 12243 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, |
| | 12244 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, |
| | 12245 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 12246 | .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, |
| | 12247 | .{ ._, ._, .neg, .tmp3b, ._, ._, ._ }, |
| | 12248 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, |
| | 12249 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, |
| | 12250 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 12251 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 12252 | } }, |
| | 12253 | }, .{ |
| | 12254 | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, |
| | 12255 | .dst_constraints = .{.{ .scalar_int_is = .word }}, |
| | 12256 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| | 12257 | .patterns = &.{ |
| | 12258 | .{ .src = .{ .to_mem, .none } }, |
| | 12259 | }, |
| | 12260 | .extra_temps = .{ |
| | 12261 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 12262 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 12263 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 12264 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 12265 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 12266 | .unused, |
| | 12267 | .unused, |
| | 12268 | .unused, |
| | 12269 | .unused, |
| | 12270 | }, |
| | 12271 | .dst_temps = .{.mem}, |
| | 12272 | .clobbers = .{ .eflags = true }, |
| | 12273 | .each = .{ .once = &.{ |
| | 12274 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 12275 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| | 12276 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, |
| | 12277 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| | 12278 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| | 12279 | .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, |
| | 12280 | .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, |
| | 12281 | .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, |
| | 12282 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, |
| | 12283 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, |
| | 12284 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, |
| | 12285 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 12286 | .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, |
| | 12287 | .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, |
| | 12288 | .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, |
| | 12289 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, |
| | 12290 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 12291 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 12292 | } }, |
| | 12293 | }, .{ |
| | 12294 | .required_features = .{ .@"64bit", .lzcnt, null, null }, |
| | 12295 | .dst_constraints = .{.{ .scalar_int_is = .word }}, |
| | 12296 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| | 12297 | .patterns = &.{ |
| | 12298 | .{ .src = .{ .to_mem, .none } }, |
| | 12299 | }, |
| | 12300 | .extra_temps = .{ |
| | 12301 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 12302 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 12303 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 12304 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 12305 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 12306 | .unused, |
| | 12307 | .unused, |
| | 12308 | .unused, |
| | 12309 | .unused, |
| | 12310 | }, |
| | 12311 | .dst_temps = .{.mem}, |
| | 12312 | .clobbers = .{ .eflags = true }, |
| | 12313 | .each = .{ .once = &.{ |
| | 12314 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 12315 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| | 12316 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, |
| | 12317 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| | 12318 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| | 12319 | .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, |
| | 12320 | .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, |
| | 12321 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, |
| | 12322 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, |
| | 12323 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, |
| | 12324 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 12325 | .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, |
| | 12326 | .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, |
| | 12327 | .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, |
| | 12328 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, |
| | 12329 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 12330 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 12331 | } }, |
| | 12332 | }, .{ |
| | 12333 | .required_features = .{ .@"64bit", null, null, null }, |
| | 12334 | .dst_constraints = .{.{ .scalar_int_is = .word }}, |
| | 12335 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| | 12336 | .patterns = &.{ |
| | 12337 | .{ .src = .{ .to_mem, .none } }, |
| | 12338 | }, |
| | 12339 | .extra_temps = .{ |
| | 12340 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 12341 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 12342 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 12343 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 12344 | .unused, |
| | 12345 | .unused, |
| | 12346 | .unused, |
| | 12347 | .unused, |
| | 12348 | .unused, |
| | 12349 | }, |
| | 12350 | .dst_temps = .{.mem}, |
| | 12351 | .clobbers = .{ .eflags = true }, |
| | 12352 | .each = .{ .once = &.{ |
| | 12353 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 12354 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| | 12355 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, |
| | 12356 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| | 12357 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| | 12358 | .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ }, |
| | 12359 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 12360 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, |
| | 12361 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, |
| | 12362 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, |
| | 12363 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 12364 | .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, |
| | 12365 | .{ ._, ._, .neg, .tmp3d, ._, ._, ._ }, |
| | 12366 | .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, |
| | 12367 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, |
| | 12368 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 12369 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 12370 | } }, |
| | 12371 | }, .{ |
| | 12372 | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, |
| | 12373 | .dst_constraints = .{.{ .scalar_int_is = .word }}, |
| | 12374 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| | 12375 | .patterns = &.{ |
| | 12376 | .{ .src = .{ .to_mem, .none } }, |
| | 12377 | }, |
| | 12378 | .extra_temps = .{ |
| | 12379 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 12380 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 12381 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 12382 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 12383 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 12384 | .unused, |
| | 12385 | .unused, |
| | 12386 | .unused, |
| | 12387 | .unused, |
| | 12388 | }, |
| | 12389 | .dst_temps = .{.mem}, |
| | 12390 | .clobbers = .{ .eflags = true }, |
| | 12391 | .each = .{ .once = &.{ |
| | 12392 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 12393 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| | 12394 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, |
| | 12395 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| | 12396 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| | 12397 | .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, |
| | 12398 | .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, |
| | 12399 | .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, |
| | 12400 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, |
| | 12401 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, |
| | 12402 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, |
| | 12403 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 12404 | .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, |
| | 12405 | .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, |
| | 12406 | .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, |
| | 12407 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, |
| | 12408 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 12409 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 12410 | } }, |
| | 12411 | }, .{ |
| | 12412 | .required_features = .{ .@"64bit", .lzcnt, null, null }, |
| | 12413 | .dst_constraints = .{.{ .scalar_int_is = .word }}, |
| | 12414 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| | 12415 | .patterns = &.{ |
| | 12416 | .{ .src = .{ .to_mem, .none } }, |
| | 12417 | }, |
| | 12418 | .extra_temps = .{ |
| | 12419 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 12420 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 12421 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 12422 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 12423 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 12424 | .unused, |
| | 12425 | .unused, |
| | 12426 | .unused, |
| | 12427 | .unused, |
| | 12428 | }, |
| | 12429 | .dst_temps = .{.mem}, |
| | 12430 | .clobbers = .{ .eflags = true }, |
| | 12431 | .each = .{ .once = &.{ |
| | 12432 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 12433 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| | 12434 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, |
| | 12435 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| | 12436 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| | 12437 | .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, |
| | 12438 | .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, |
| | 12439 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, |
| | 12440 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, |
| | 12441 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, |
| | 12442 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 12443 | .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, |
| | 12444 | .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, |
| | 12445 | .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, |
| | 12446 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, |
| | 12447 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 12448 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 12449 | } }, |
| | 12450 | }, .{ |
| | 12451 | .required_features = .{ .@"64bit", null, null, null }, |
| | 12452 | .dst_constraints = .{.{ .scalar_int_is = .word }}, |
| | 12453 | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| | 12454 | .patterns = &.{ |
| | 12455 | .{ .src = .{ .to_mem, .none } }, |
| | 12456 | }, |
| | 12457 | .extra_temps = .{ |
| | 12458 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 12459 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 12460 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 12461 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 12462 | .unused, |
| | 12463 | .unused, |
| | 12464 | .unused, |
| | 12465 | .unused, |
| | 12466 | .unused, |
| | 12467 | }, |
| | 12468 | .dst_temps = .{.mem}, |
| | 12469 | .clobbers = .{ .eflags = true }, |
| | 12470 | .each = .{ .once = &.{ |
| | 12471 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| | 12472 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| | 12473 | .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, |
| | 12474 | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| | 12475 | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| | 12476 | .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ }, |
| | 12477 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 12478 | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, |
| | 12479 | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, |
| | 12480 | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, |
| | 12481 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 12482 | .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, |
| | 12483 | .{ ._, ._, .neg, .tmp3d, ._, ._, ._ }, |
| | 12484 | .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, |
| | 12485 | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, |
| | 12486 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 12487 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 12488 | } }, |
| | 12489 | } }) catch |err| switch (err) { |
| | 12490 | error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{ |
| | 12491 | @tagName(air_tag), |
| | 12492 | cg.typeOf(ty_op.operand).fmt(pt), |
| | 12493 | ops[0].tracking(cg), |
| | 12494 | }), |
| | 12495 | else => |e| return e, |
| | 12496 | }; |
| | 12497 | try res[0].finish(inst, &.{ty_op.operand}, &ops, cg); |
| | 12498 | }, |
| | 12499 | |
| | 12500 | .cmp_vector, .cmp_vector_optimized => |air_tag| if (use_old) try cg.airCmpVector(inst) else fallback: { |
| | 12501 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; |
| | 12502 | const extra = cg.air.extraData(Air.VectorCmp, ty_pl.payload).data; |
| | 12503 | switch (extra.compareOperator()) { |
| | 12504 | .eq, .neq => {}, |
| | 12505 | else => break :fallback try cg.airCmpVector(inst), |
| | 12506 | } |
| | 12507 | var ops = try cg.tempsFromOperands(inst, .{ extra.lhs, extra.rhs }); |
| | 12508 | var res: [1]Temp = undefined; |
| | 12509 | switch (extra.compareOperator()) { |
| | 12510 | .lt => unreachable, |
| | 12511 | .lte => unreachable, |
| | 12512 | .eq, .neq => |cmp_op| cg.select(&res, &.{ty_pl.ty.toType()}, &ops, switch (@as(Condition, switch (cmp_op) { |
| | 12513 | else => unreachable, |
| | 12514 | .eq => .e, |
| | 12515 | .neq => .ne, |
| | 12516 | })) { |
| | 12517 | else => unreachable, |
| | 12518 | inline .e, .ne => |cc| comptime &.{ .{ |
| | 12519 | .required_features = .{ .avx2, null, null, null }, |
| | 12520 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| | 12521 | .patterns = &.{ |
| | 12522 | .{ .src = .{ .to_ymm, .mem } }, |
| | 12523 | .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } }, |
| | 12524 | .{ .src = .{ .to_ymm, .to_ymm } }, |
| | 12525 | }, |
| | 12526 | .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{ |
| | 12527 | .kind = .all, |
| | 12528 | .inverted = switch (cc) { |
| | 12529 | else => unreachable, |
| | 12530 | .e => false, |
| | 12531 | .ne => true, |
| | 12532 | }, |
| | 12533 | .scalar = .byte, |
| | 12534 | } } }}, |
| | 12535 | .each = .{ .once = &.{ |
| | 12536 | .{ ._, .vp_b, .cmpeq, .dst0y, .src0y, .src1y, ._ }, |
| | 12537 | } }, |
| | 12538 | }, .{ |
| | 12539 | .required_features = .{ .avx2, null, null, null }, |
| | 12540 | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, |
| | 12541 | .patterns = &.{ |
| | 12542 | .{ .src = .{ .to_ymm, .mem } }, |
| | 12543 | .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } }, |
| | 12544 | .{ .src = .{ .to_ymm, .to_ymm } }, |
| | 12545 | }, |
| | 12546 | .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{ |
| | 12547 | .kind = .all, |
| | 12548 | .inverted = switch (cc) { |
| | 12549 | else => unreachable, |
| | 12550 | .e => false, |
| | 12551 | .ne => true, |
| | 12552 | }, |
| | 12553 | .scalar = .word, |
| | 12554 | } } }}, |
| | 12555 | .each = .{ .once = &.{ |
| | 12556 | .{ ._, .vp_w, .cmpeq, .dst0y, .src0y, .src1y, ._ }, |
| | 12557 | } }, |
| | 12558 | }, .{ |
| | 12559 | .required_features = .{ .avx2, null, null, null }, |
| | 12560 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, |
| | 12561 | .patterns = &.{ |
| | 12562 | .{ .src = .{ .to_ymm, .mem } }, |
| | 12563 | .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } }, |
| | 12564 | .{ .src = .{ .to_ymm, .to_ymm } }, |
| | 12565 | }, |
| | 12566 | .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{ |
| | 12567 | .kind = .all, |
| | 12568 | .inverted = switch (cc) { |
| | 12569 | else => unreachable, |
| | 12570 | .e => false, |
| | 12571 | .ne => true, |
| | 12572 | }, |
| | 12573 | .scalar = .dword, |
| | 12574 | } } }}, |
| | 12575 | .each = .{ .once = &.{ |
| | 12576 | .{ ._, .vp_d, .cmpeq, .dst0y, .src0y, .src1y, ._ }, |
| | 12577 | } }, |
| | 12578 | }, .{ |
| | 12579 | .required_features = .{ .avx2, null, null, null }, |
| | 12580 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, |
| | 12581 | .patterns = &.{ |
| | 12582 | .{ .src = .{ .to_ymm, .mem } }, |
| | 12583 | .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } }, |
| | 12584 | .{ .src = .{ .to_ymm, .to_ymm } }, |
| | 12585 | }, |
| | 12586 | .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{ |
| | 12587 | .kind = .all, |
| | 12588 | .inverted = switch (cc) { |
| | 12589 | else => unreachable, |
| | 12590 | .e => false, |
| | 12591 | .ne => true, |
| | 12592 | }, |
| | 12593 | .scalar = .qword, |
| | 12594 | } } }}, |
| | 12595 | .each = .{ .once = &.{ |
| | 12596 | .{ ._, .vp_q, .cmpeq, .dst0y, .src0y, .src1y, ._ }, |
| | 12597 | } }, |
| | 12598 | }, .{ |
| | 12599 | .required_features = .{ .avx, null, null, null }, |
| | 12600 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| | 12601 | .patterns = &.{ |
| | 12602 | .{ .src = .{ .to_xmm, .mem } }, |
| | 12603 | .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } }, |
| | 12604 | .{ .src = .{ .to_xmm, .to_xmm } }, |
| | 12605 | }, |
| | 12606 | .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{ |
| | 12607 | .kind = .all, |
| | 12608 | .inverted = switch (cc) { |
| | 12609 | else => unreachable, |
| | 12610 | .e => false, |
| | 12611 | .ne => true, |
| | 12612 | }, |
| | 12613 | .scalar = .byte, |
| | 12614 | } } }}, |
| | 12615 | .each = .{ .once = &.{ |
| | 12616 | .{ ._, .vp_b, .cmpeq, .dst0x, .src0x, .src1x, ._ }, |
| | 12617 | } }, |
| | 12618 | }, .{ |
| | 12619 | .required_features = .{ .avx, null, null, null }, |
| | 12620 | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, |
| | 12621 | .patterns = &.{ |
| | 12622 | .{ .src = .{ .to_xmm, .mem } }, |
| | 12623 | .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } }, |
| | 12624 | .{ .src = .{ .to_xmm, .to_xmm } }, |
| | 12625 | }, |
| | 12626 | .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{ |
| | 12627 | .kind = .all, |
| | 12628 | .inverted = switch (cc) { |
| | 12629 | else => unreachable, |
| | 12630 | .e => false, |
| | 12631 | .ne => true, |
| | 12632 | }, |
| | 12633 | .scalar = .word, |
| | 12634 | } } }}, |
| | 12635 | .each = .{ .once = &.{ |
| | 12636 | .{ ._, .vp_w, .cmpeq, .dst0x, .src0x, .src1x, ._ }, |
| | 12637 | } }, |
| | 12638 | }, .{ |
| | 12639 | .required_features = .{ .avx, null, null, null }, |
| | 12640 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, |
| | 12641 | .patterns = &.{ |
| | 12642 | .{ .src = .{ .to_xmm, .mem } }, |
| | 12643 | .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } }, |
| | 12644 | .{ .src = .{ .to_xmm, .to_xmm } }, |
| | 12645 | }, |
| | 12646 | .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{ |
| | 12647 | .kind = .all, |
| | 12648 | .inverted = switch (cc) { |
| | 12649 | else => unreachable, |
| | 12650 | .e => false, |
| | 12651 | .ne => true, |
| | 12652 | }, |
| | 12653 | .scalar = .dword, |
| | 12654 | } } }}, |
| | 12655 | .each = .{ .once = &.{ |
| | 12656 | .{ ._, .vp_d, .cmpeq, .dst0x, .src0x, .src1x, ._ }, |
| | 12657 | } }, |
| | 12658 | }, .{ |
| | 12659 | .required_features = .{ .avx, null, null, null }, |
| | 12660 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, |
| | 12661 | .patterns = &.{ |
| | 12662 | .{ .src = .{ .to_xmm, .mem } }, |
| | 12663 | .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } }, |
| | 12664 | .{ .src = .{ .to_xmm, .to_xmm } }, |
| | 12665 | }, |
| | 12666 | .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{ |
| | 12667 | .kind = .all, |
| | 12668 | .inverted = switch (cc) { |
| | 12669 | else => unreachable, |
| | 12670 | .e => false, |
| | 12671 | .ne => true, |
| | 12672 | }, |
| | 12673 | .scalar = .qword, |
| | 12674 | } } }}, |
| | 12675 | .each = .{ .once = &.{ |
| | 12676 | .{ ._, .vp_q, .cmpeq, .dst0x, .src0x, .src1x, ._ }, |
| | 12677 | } }, |
| | 12678 | }, .{ |
| | 12679 | .required_features = .{ .sse2, null, null, null }, |
| | 12680 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| | 12681 | .patterns = &.{ |
| | 12682 | .{ .src = .{ .to_mut_xmm, .mem } }, |
| | 12683 | .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } }, |
| | 12684 | .{ .src = .{ .to_mut_xmm, .to_xmm } }, |
| | 12685 | }, |
| | 12686 | .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{ |
| | 12687 | .kind = .all, |
| | 12688 | .inverted = switch (cc) { |
| | 12689 | else => unreachable, |
| | 12690 | .e => false, |
| | 12691 | .ne => true, |
| | 12692 | }, |
| | 12693 | .scalar = .byte, |
| | 12694 | } } }}, |
| | 12695 | .each = .{ .once = &.{ |
| | 12696 | .{ ._, .p_b, .cmpeq, .dst0x, .src1x, ._, ._ }, |
| | 12697 | } }, |
| | 12698 | }, .{ |
| | 12699 | .required_features = .{ .sse2, null, null, null }, |
| | 12700 | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, |
| | 12701 | .patterns = &.{ |
| | 12702 | .{ .src = .{ .to_mut_xmm, .mem } }, |
| | 12703 | .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } }, |
| | 12704 | .{ .src = .{ .to_mut_xmm, .to_xmm } }, |
| | 12705 | }, |
| | 12706 | .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{ |
| | 12707 | .kind = .all, |
| | 12708 | .inverted = switch (cc) { |
| | 12709 | else => unreachable, |
| | 12710 | .e => false, |
| | 12711 | .ne => true, |
| | 12712 | }, |
| | 12713 | .scalar = .word, |
| | 12714 | } } }}, |
| | 12715 | .each = .{ .once = &.{ |
| | 12716 | .{ ._, .p_w, .cmpeq, .dst0x, .src1x, ._, ._ }, |
| | 12717 | } }, |
| | 12718 | }, .{ |
| | 12719 | .required_features = .{ .sse2, null, null, null }, |
| | 12720 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, |
| | 12721 | .patterns = &.{ |
| | 12722 | .{ .src = .{ .to_mut_xmm, .mem } }, |
| | 12723 | .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } }, |
| | 12724 | .{ .src = .{ .to_mut_xmm, .to_xmm } }, |
| | 12725 | }, |
| | 12726 | .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{ |
| | 12727 | .kind = .all, |
| | 12728 | .inverted = switch (cc) { |
| | 12729 | else => unreachable, |
| | 12730 | .e => false, |
| | 12731 | .ne => true, |
| | 12732 | }, |
| | 12733 | .scalar = .dword, |
| | 12734 | } } }}, |
| | 12735 | .each = .{ .once = &.{ |
| | 12736 | .{ ._, .p_d, .cmpeq, .dst0x, .src1x, ._, ._ }, |
| | 12737 | } }, |
| | 12738 | }, .{ |
| | 12739 | .required_features = .{ .sse4_1, null, null, null }, |
| | 12740 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, |
| | 12741 | .patterns = &.{ |
| | 12742 | .{ .src = .{ .to_mut_xmm, .mem } }, |
| | 12743 | .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } }, |
| | 12744 | .{ .src = .{ .to_mut_xmm, .to_xmm } }, |
| | 12745 | }, |
| | 12746 | .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{ |
| | 12747 | .kind = .all, |
| | 12748 | .inverted = switch (cc) { |
| | 12749 | else => unreachable, |
| | 12750 | .e => false, |
| | 12751 | .ne => true, |
| | 12752 | }, |
| | 12753 | .scalar = .qword, |
| | 12754 | } } }}, |
| | 12755 | .each = .{ .once = &.{ |
| | 12756 | .{ ._, .p_q, .cmpeq, .dst0x, .src1x, ._, ._ }, |
| | 12757 | } }, |
| | 12758 | }, .{ |
| | 12759 | .required_features = .{ .mmx, null, null, null }, |
| | 12760 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| | 12761 | .patterns = &.{ |
| | 12762 | .{ .src = .{ .to_mut_mm, .mem } }, |
| | 12763 | .{ .src = .{ .mem, .to_mut_mm }, .commute = .{ 0, 1 } }, |
| | 12764 | .{ .src = .{ .to_mut_mm, .to_mm } }, |
| | 12765 | }, |
| | 12766 | .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{ |
| | 12767 | .kind = .all, |
| | 12768 | .inverted = switch (cc) { |
| | 12769 | else => unreachable, |
| | 12770 | .e => false, |
| | 12771 | .ne => true, |
| | 12772 | }, |
| | 12773 | .scalar = .byte, |
| | 12774 | } } }}, |
| | 12775 | .each = .{ .once = &.{ |
| | 12776 | .{ ._, .p_b, .cmpeq, .dst0q, .src1q, ._, ._ }, |
| | 12777 | } }, |
| | 12778 | }, .{ |
| | 12779 | .required_features = .{ .mmx, null, null, null }, |
| | 12780 | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, |
| | 12781 | .patterns = &.{ |
| | 12782 | .{ .src = .{ .to_mut_mm, .mem } }, |
| | 12783 | .{ .src = .{ .mem, .to_mut_mm }, .commute = .{ 0, 1 } }, |
| | 12784 | .{ .src = .{ .to_mut_mm, .to_mm } }, |
| | 12785 | }, |
| | 12786 | .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{ |
| | 12787 | .kind = .all, |
| | 12788 | .inverted = switch (cc) { |
| | 12789 | else => unreachable, |
| | 12790 | .e => false, |
| | 12791 | .ne => true, |
| | 12792 | }, |
| | 12793 | .scalar = .word, |
| | 12794 | } } }}, |
| | 12795 | .each = .{ .once = &.{ |
| | 12796 | .{ ._, .p_w, .cmpeq, .dst0q, .src1q, ._, ._ }, |
| | 12797 | } }, |
| | 12798 | }, .{ |
| | 12799 | .required_features = .{ .mmx, null, null, null }, |
| | 12800 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, |
| | 12801 | .patterns = &.{ |
| | 12802 | .{ .src = .{ .to_mut_mm, .mem } }, |
| | 12803 | .{ .src = .{ .mem, .to_mut_mm }, .commute = .{ 0, 1 } }, |
| | 12804 | .{ .src = .{ .to_mut_mm, .to_mm } }, |
| | 12805 | }, |
| | 12806 | .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{ |
| | 12807 | .kind = .all, |
| | 12808 | .inverted = switch (cc) { |
| | 12809 | else => unreachable, |
| | 12810 | .e => false, |
| | 12811 | .ne => true, |
| | 12812 | }, |
| | 12813 | .scalar = .dword, |
| | 12814 | } } }}, |
| | 12815 | .each = .{ .once = &.{ |
| | 12816 | .{ ._, .p_d, .cmpeq, .dst0q, .src1q, ._, ._ }, |
| | 12817 | } }, |
| | 12818 | }, .{ |
| | 12819 | .src_constraints = .{ .{ .bool_vec = .byte }, .{ .bool_vec = .byte } }, |
| | 12820 | .patterns = &.{ |
| | 12821 | .{ .src = .{ .mut_mem, .imm8 } }, |
| | 12822 | .{ .src = .{ .imm8, .mut_mem }, .commute = .{ 0, 1 } }, |
| | 12823 | .{ .src = .{ .to_mut_gpr, .imm8 } }, |
| | 12824 | .{ .src = .{ .imm8, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 12825 | .{ .src = .{ .mut_mem, .to_gpr } }, |
| | 12826 | .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } }, |
| | 12827 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 12828 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 12829 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| | 12830 | }, |
| | 12831 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 12832 | .clobbers = .{ .eflags = true }, |
| | 12833 | .each = .{ .once = switch (cc) { |
| | 12834 | else => unreachable, |
| | 12835 | .e => &.{ |
| | 12836 | .{ ._, ._, .xor, .dst0b, .src1b, ._, ._ }, |
| | 12837 | .{ ._, ._, .not, .dst0b, ._, ._, ._ }, |
| | 12838 | }, |
| | 12839 | .ne => &.{ |
| | 12840 | .{ ._, ._, .xor, .dst0b, .src1b, ._, ._ }, |
| | 12841 | }, |
| | 12842 | } }, |
| | 12843 | }, .{ |
| | 12844 | .src_constraints = .{ .{ .bool_vec = .word }, .{ .bool_vec = .word } }, |
| | 12845 | .patterns = &.{ |
| | 12846 | .{ .src = .{ .mut_mem, .imm16 } }, |
| | 12847 | .{ .src = .{ .imm16, .mut_mem }, .commute = .{ 0, 1 } }, |
| | 12848 | .{ .src = .{ .to_mut_gpr, .imm16 } }, |
| | 12849 | .{ .src = .{ .imm16, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 12850 | .{ .src = .{ .mut_mem, .to_gpr } }, |
| | 12851 | .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } }, |
| | 12852 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 12853 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 12854 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| | 12855 | }, |
| | 12856 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 12857 | .clobbers = .{ .eflags = true }, |
| | 12858 | .each = .{ .once = switch (cc) { |
| | 12859 | else => unreachable, |
| | 12860 | .e => &.{ |
| | 12861 | .{ ._, ._, .xor, .dst0w, .src1w, ._, ._ }, |
| | 12862 | .{ ._, ._, .not, .dst0w, ._, ._, ._ }, |
| | 12863 | }, |
| | 12864 | .ne => &.{ |
| | 12865 | .{ ._, ._, .xor, .dst0w, .src1w, ._, ._ }, |
| | 12866 | }, |
| | 12867 | } }, |
| | 12868 | }, .{ |
| | 12869 | .src_constraints = .{ .{ .bool_vec = .dword }, .{ .bool_vec = .dword } }, |
| | 12870 | .patterns = &.{ |
| | 12871 | .{ .src = .{ .mut_mem, .imm32 } }, |
| | 12872 | .{ .src = .{ .imm32, .mut_mem }, .commute = .{ 0, 1 } }, |
| | 12873 | .{ .src = .{ .to_mut_gpr, .imm32 } }, |
| | 12874 | .{ .src = .{ .imm32, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 12875 | .{ .src = .{ .mut_mem, .to_gpr } }, |
| | 12876 | .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } }, |
| | 12877 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 12878 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 12879 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| | 12880 | }, |
| | 12881 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 12882 | .clobbers = .{ .eflags = true }, |
| | 12883 | .each = .{ .once = switch (cc) { |
| | 12884 | else => unreachable, |
| | 12885 | .e => &.{ |
| | 12886 | .{ ._, ._, .xor, .dst0d, .src1d, ._, ._ }, |
| | 12887 | .{ ._, ._, .not, .dst0d, ._, ._, ._ }, |
| | 12888 | }, |
| | 12889 | .ne => &.{ |
| | 12890 | .{ ._, ._, .xor, .dst0d, .src1d, ._, ._ }, |
| | 12891 | }, |
| | 12892 | } }, |
| | 12893 | }, .{ |
| | 12894 | .required_features = .{ .@"64bit", null, null, null }, |
| | 12895 | .src_constraints = .{ .{ .bool_vec = .qword }, .{ .bool_vec = .qword } }, |
| | 12896 | .patterns = &.{ |
| | 12897 | .{ .src = .{ .mut_mem, .simm32 } }, |
| | 12898 | .{ .src = .{ .simm32, .mut_mem }, .commute = .{ 0, 1 } }, |
| | 12899 | .{ .src = .{ .to_mut_gpr, .simm32 } }, |
| | 12900 | .{ .src = .{ .simm32, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 12901 | .{ .src = .{ .mut_mem, .to_gpr } }, |
| | 12902 | .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } }, |
| | 12903 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| | 12904 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| | 12905 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| | 12906 | }, |
| | 12907 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 12908 | .clobbers = .{ .eflags = true }, |
| | 12909 | .each = .{ .once = switch (cc) { |
| | 12910 | else => unreachable, |
| | 12911 | .e => &.{ |
| | 12912 | .{ ._, ._, .xor, .dst0q, .src1q, ._, ._ }, |
| | 12913 | .{ ._, ._, .not, .dst0q, ._, ._, ._ }, |
| | 12914 | }, |
| | 12915 | .ne => &.{ |
| | 12916 | .{ ._, ._, .xor, .dst0q, .src1q, ._, ._ }, |
| | 12917 | }, |
| | 12918 | } }, |
| | 12919 | }, .{ |
| | 12920 | .src_constraints = .{ .any_bool_vec, .any_bool_vec }, |
| | 12921 | .patterns = &.{ |
| | 12922 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 12923 | }, |
| | 12924 | .extra_temps = .{ |
| | 12925 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 12926 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 12927 | .unused, |
| | 12928 | .unused, |
| | 12929 | .unused, |
| | 12930 | .unused, |
| | 12931 | .unused, |
| | 12932 | .unused, |
| | 12933 | .unused, |
| | 12934 | }, |
| | 12935 | .dst_temps = .{.mem}, |
| | 12936 | .clobbers = .{ .eflags = true }, |
| | 12937 | .each = .{ .once = switch (cc) { |
| | 12938 | else => unreachable, |
| | 12939 | .e => &.{ |
| | 12940 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 12941 | .{ .@"0:", ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ }, |
| | 12942 | .{ ._, ._, .xor, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ }, |
| | 12943 | .{ ._, ._, .not, .tmp1p, ._, ._, ._ }, |
| | 12944 | .{ ._, ._, .mov, .memia(.dst0p, .tmp0, .add_size), .tmp1p, ._, ._ }, |
| | 12945 | .{ ._, ._, .add, .tmp0p, .sa(.tmp1, .add_size), ._, ._ }, |
| | 12946 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 12947 | }, |
| | 12948 | .ne => &.{ |
| | 12949 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 12950 | .{ .@"0:", ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ }, |
| | 12951 | .{ ._, ._, .xor, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ }, |
| | 12952 | .{ ._, ._, .mov, .memia(.dst0p, .tmp0, .add_size), .tmp1p, ._, ._ }, |
| | 12953 | .{ ._, ._, .add, .tmp0p, .sa(.tmp1, .add_size), ._, ._ }, |
| | 12954 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 12955 | }, |
| | 12956 | } }, |
| | 12957 | }, .{ |
| | 12958 | .required_features = .{ .avx2, null, null, null }, |
| | 12959 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| | 12960 | .patterns = &.{ |
| | 12961 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 12962 | }, |
| | 12963 | .extra_temps = .{ |
| | 12964 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 12965 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 12966 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 12967 | .{ .kind = .{ .rc = .sse } }, |
| | 12968 | .unused, |
| | 12969 | .unused, |
| | 12970 | .unused, |
| | 12971 | .unused, |
| | 12972 | .unused, |
| | 12973 | }, |
| | 12974 | .dst_temps = .{.mem}, |
| | 12975 | .clobbers = .{ .eflags = true }, |
| | 12976 | .each = .{ .once = switch (cc) { |
| | 12977 | else => unreachable, |
| | 12978 | .e => &.{ |
| | 12979 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 12980 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 12981 | .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 12982 | .{ ._, .vp_b, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| | 12983 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, |
| | 12984 | .{ ._, ._, .mov, .memi(.dst0d, .tmp1), .tmp2d, ._, ._ }, |
| | 12985 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| | 12986 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 12987 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 12988 | }, |
| | 12989 | .ne => &.{ |
| | 12990 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 12991 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 12992 | .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 12993 | .{ ._, .vp_b, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| | 12994 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, |
| | 12995 | .{ ._, ._, .not, .tmp2d, ._, ._, ._ }, |
| | 12996 | .{ ._, ._, .mov, .memi(.dst0d, .tmp1), .tmp2d, ._, ._ }, |
| | 12997 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| | 12998 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 12999 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13000 | }, |
| | 13001 | } }, |
| | 13002 | }, .{ |
| | 13003 | .required_features = .{ .avx2, null, null, null }, |
| | 13004 | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, |
| | 13005 | .patterns = &.{ |
| | 13006 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 13007 | }, |
| | 13008 | .extra_temps = .{ |
| | 13009 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 13010 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 13011 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| | 13012 | .{ .kind = .{ .rc = .sse } }, |
| | 13013 | .unused, |
| | 13014 | .unused, |
| | 13015 | .unused, |
| | 13016 | .unused, |
| | 13017 | .unused, |
| | 13018 | }, |
| | 13019 | .dst_temps = .{.mem}, |
| | 13020 | .clobbers = .{ .eflags = true }, |
| | 13021 | .each = .{ .once = switch (cc) { |
| | 13022 | else => unreachable, |
| | 13023 | .e => &.{ |
| | 13024 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13025 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13026 | .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 13027 | .{ ._, .vp_w, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| | 13028 | .{ ._, .vp_b, .ackssw, .tmp3y, .tmp3y, .tmp3y, ._ }, |
| | 13029 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, |
| | 13030 | .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, |
| | 13031 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| | 13032 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 13033 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13034 | }, |
| | 13035 | .ne => &.{ |
| | 13036 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13037 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13038 | .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 13039 | .{ ._, .vp_w, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| | 13040 | .{ ._, .vp_b, .ackssw, .tmp3y, .tmp3y, .tmp3y, ._ }, |
| | 13041 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, |
| | 13042 | .{ ._, ._, .not, .tmp2d, ._, ._, ._ }, |
| | 13043 | .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, |
| | 13044 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| | 13045 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 13046 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13047 | }, |
| | 13048 | } }, |
| | 13049 | }, .{ |
| | 13050 | .required_features = .{ .avx2, null, null, null }, |
| | 13051 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, |
| | 13052 | .patterns = &.{ |
| | 13053 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 13054 | }, |
| | 13055 | .extra_temps = .{ |
| | 13056 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 13057 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 13058 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 13059 | .{ .kind = .{ .rc = .sse } }, |
| | 13060 | .unused, |
| | 13061 | .unused, |
| | 13062 | .unused, |
| | 13063 | .unused, |
| | 13064 | .unused, |
| | 13065 | }, |
| | 13066 | .dst_temps = .{.mem}, |
| | 13067 | .clobbers = .{ .eflags = true }, |
| | 13068 | .each = .{ .once = switch (cc) { |
| | 13069 | else => unreachable, |
| | 13070 | .e => &.{ |
| | 13071 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13072 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13073 | .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 13074 | .{ ._, .vp_d, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| | 13075 | .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ }, |
| | 13076 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, |
| | 13077 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| | 13078 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 13079 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13080 | }, |
| | 13081 | .ne => &.{ |
| | 13082 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13083 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13084 | .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 13085 | .{ ._, .vp_d, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| | 13086 | .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ }, |
| | 13087 | .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, |
| | 13088 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, |
| | 13089 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| | 13090 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 13091 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13092 | }, |
| | 13093 | } }, |
| | 13094 | }, .{ |
| | 13095 | .required_features = .{ .avx2, null, null, null }, |
| | 13096 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, |
| | 13097 | .patterns = &.{ |
| | 13098 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 13099 | }, |
| | 13100 | .extra_temps = .{ |
| | 13101 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 13102 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| | 13103 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 13104 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 13105 | .{ .kind = .{ .rc = .sse } }, |
| | 13106 | .unused, |
| | 13107 | .unused, |
| | 13108 | .unused, |
| | 13109 | .unused, |
| | 13110 | }, |
| | 13111 | .dst_temps = .{.mem}, |
| | 13112 | .clobbers = .{ .eflags = true }, |
| | 13113 | .each = .{ .once = switch (cc) { |
| | 13114 | else => unreachable, |
| | 13115 | .e => &.{ |
| | 13116 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13117 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13118 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13119 | .{ .@"0:", .v_dqu, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 13120 | .{ ._, .vp_q, .cmpeq, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| | 13121 | .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4y, ._, ._ }, |
| | 13122 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| | 13123 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| | 13124 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| | 13125 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13126 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 13127 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 13128 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| | 13129 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| | 13130 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13131 | .{ .@"1:", ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 13132 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13133 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13134 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 13135 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 13136 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| | 13137 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| | 13138 | }, |
| | 13139 | .ne => &.{ |
| | 13140 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13141 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13142 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13143 | .{ .@"0:", .v_dqu, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 13144 | .{ ._, .vp_q, .cmpeq, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| | 13145 | .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4y, ._, ._ }, |
| | 13146 | .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ }, |
| | 13147 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| | 13148 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| | 13149 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| | 13150 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13151 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 13152 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 13153 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| | 13154 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| | 13155 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13156 | .{ .@"1:", ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 13157 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13158 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13159 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 13160 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 13161 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| | 13162 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| | 13163 | }, |
| | 13164 | } }, |
| | 13165 | }, .{ |
| | 13166 | .required_features = .{ .avx, null, null, null }, |
| | 13167 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| | 13168 | .patterns = &.{ |
| | 13169 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 13170 | }, |
| | 13171 | .extra_temps = .{ |
| | 13172 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 13173 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 13174 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| | 13175 | .{ .kind = .{ .rc = .sse } }, |
| | 13176 | .unused, |
| | 13177 | .unused, |
| | 13178 | .unused, |
| | 13179 | .unused, |
| | 13180 | .unused, |
| | 13181 | }, |
| | 13182 | .dst_temps = .{.mem}, |
| | 13183 | .clobbers = .{ .eflags = true }, |
| | 13184 | .each = .{ .once = switch (cc) { |
| | 13185 | else => unreachable, |
| | 13186 | .e => &.{ |
| | 13187 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13188 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13189 | .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 13190 | .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 13191 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, |
| | 13192 | .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, |
| | 13193 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| | 13194 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 13195 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13196 | }, |
| | 13197 | .ne => &.{ |
| | 13198 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13199 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13200 | .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 13201 | .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 13202 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, |
| | 13203 | .{ ._, ._, .not, .tmp2d, ._, ._, ._ }, |
| | 13204 | .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, |
| | 13205 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| | 13206 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 13207 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13208 | }, |
| | 13209 | } }, |
| | 13210 | }, .{ |
| | 13211 | .required_features = .{ .avx, null, null, null }, |
| | 13212 | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, |
| | 13213 | .patterns = &.{ |
| | 13214 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 13215 | }, |
| | 13216 | .extra_temps = .{ |
| | 13217 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 13218 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 13219 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 13220 | .{ .kind = .{ .rc = .sse } }, |
| | 13221 | .unused, |
| | 13222 | .unused, |
| | 13223 | .unused, |
| | 13224 | .unused, |
| | 13225 | .unused, |
| | 13226 | }, |
| | 13227 | .dst_temps = .{.mem}, |
| | 13228 | .clobbers = .{ .eflags = true }, |
| | 13229 | .each = .{ .once = switch (cc) { |
| | 13230 | else => unreachable, |
| | 13231 | .e => &.{ |
| | 13232 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13233 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13234 | .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 13235 | .{ ._, .vp_w, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 13236 | .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ }, |
| | 13237 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, |
| | 13238 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, |
| | 13239 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| | 13240 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 13241 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13242 | }, |
| | 13243 | .ne => &.{ |
| | 13244 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13245 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13246 | .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 13247 | .{ ._, .vp_w, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 13248 | .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ }, |
| | 13249 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, |
| | 13250 | .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, |
| | 13251 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, |
| | 13252 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| | 13253 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 13254 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13255 | }, |
| | 13256 | } }, |
| | 13257 | }, .{ |
| | 13258 | .required_features = .{ .avx, null, null, null }, |
| | 13259 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, |
| | 13260 | .patterns = &.{ |
| | 13261 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 13262 | }, |
| | 13263 | .extra_temps = .{ |
| | 13264 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 13265 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| | 13266 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 13267 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 13268 | .{ .kind = .{ .rc = .sse } }, |
| | 13269 | .unused, |
| | 13270 | .unused, |
| | 13271 | .unused, |
| | 13272 | .unused, |
| | 13273 | }, |
| | 13274 | .dst_temps = .{.mem}, |
| | 13275 | .clobbers = .{ .eflags = true }, |
| | 13276 | .each = .{ .once = switch (cc) { |
| | 13277 | else => unreachable, |
| | 13278 | .e => &.{ |
| | 13279 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13280 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13281 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13282 | .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 13283 | .{ ._, .vp_d, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 13284 | .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ }, |
| | 13285 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| | 13286 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| | 13287 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| | 13288 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13289 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 13290 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 13291 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| | 13292 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| | 13293 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13294 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 13295 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13296 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13297 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 13298 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 13299 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| | 13300 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| | 13301 | }, |
| | 13302 | .ne => &.{ |
| | 13303 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13304 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13305 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13306 | .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 13307 | .{ ._, .vp_d, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 13308 | .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ }, |
| | 13309 | .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ }, |
| | 13310 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| | 13311 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| | 13312 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| | 13313 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13314 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 13315 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 13316 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| | 13317 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| | 13318 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13319 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 13320 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13321 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13322 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 13323 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 13324 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| | 13325 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| | 13326 | }, |
| | 13327 | } }, |
| | 13328 | }, .{ |
| | 13329 | .required_features = .{ .avx, null, null, null }, |
| | 13330 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, |
| | 13331 | .patterns = &.{ |
| | 13332 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 13333 | }, |
| | 13334 | .extra_temps = .{ |
| | 13335 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 13336 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| | 13337 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 13338 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 13339 | .{ .kind = .{ .rc = .sse } }, |
| | 13340 | .unused, |
| | 13341 | .unused, |
| | 13342 | .unused, |
| | 13343 | .unused, |
| | 13344 | }, |
| | 13345 | .dst_temps = .{.mem}, |
| | 13346 | .clobbers = .{ .eflags = true }, |
| | 13347 | .each = .{ .once = switch (cc) { |
| | 13348 | else => unreachable, |
| | 13349 | .e => &.{ |
| | 13350 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13351 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13352 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13353 | .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 13354 | .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 13355 | .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4x, ._, ._ }, |
| | 13356 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| | 13357 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| | 13358 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| | 13359 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13360 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 13361 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 13362 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| | 13363 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| | 13364 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13365 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 13366 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13367 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13368 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 13369 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 13370 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| | 13371 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| | 13372 | }, |
| | 13373 | .ne => &.{ |
| | 13374 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13375 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13376 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13377 | .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 13378 | .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 13379 | .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4x, ._, ._ }, |
| | 13380 | .{ ._, ._, .xor, .tmp3b, .si(0b11), ._, ._ }, |
| | 13381 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| | 13382 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| | 13383 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| | 13384 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13385 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 13386 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 13387 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| | 13388 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| | 13389 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13390 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 13391 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13392 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13393 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 13394 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 13395 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| | 13396 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| | 13397 | }, |
| | 13398 | } }, |
| | 13399 | }, .{ |
| | 13400 | .required_features = .{ .sse2, null, null, null }, |
| | 13401 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| | 13402 | .patterns = &.{ |
| | 13403 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 13404 | }, |
| | 13405 | .extra_temps = .{ |
| | 13406 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 13407 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 13408 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| | 13409 | .{ .kind = .{ .rc = .sse } }, |
| | 13410 | .unused, |
| | 13411 | .unused, |
| | 13412 | .unused, |
| | 13413 | .unused, |
| | 13414 | .unused, |
| | 13415 | }, |
| | 13416 | .dst_temps = .{.mem}, |
| | 13417 | .clobbers = .{ .eflags = true }, |
| | 13418 | .each = .{ .once = switch (cc) { |
| | 13419 | else => unreachable, |
| | 13420 | .e => &.{ |
| | 13421 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13422 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13423 | .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 13424 | .{ ._, .p_b, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 13425 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, |
| | 13426 | .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, |
| | 13427 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| | 13428 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 13429 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13430 | }, |
| | 13431 | .ne => &.{ |
| | 13432 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13433 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13434 | .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 13435 | .{ ._, .p_b, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 13436 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, |
| | 13437 | .{ ._, ._, .not, .tmp2d, ._, ._, ._ }, |
| | 13438 | .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, |
| | 13439 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| | 13440 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 13441 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13442 | }, |
| | 13443 | } }, |
| | 13444 | }, .{ |
| | 13445 | .required_features = .{ .sse2, null, null, null }, |
| | 13446 | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, |
| | 13447 | .patterns = &.{ |
| | 13448 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 13449 | }, |
| | 13450 | .extra_temps = .{ |
| | 13451 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 13452 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 13453 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 13454 | .{ .kind = .{ .rc = .sse } }, |
| | 13455 | .unused, |
| | 13456 | .unused, |
| | 13457 | .unused, |
| | 13458 | .unused, |
| | 13459 | .unused, |
| | 13460 | }, |
| | 13461 | .dst_temps = .{.mem}, |
| | 13462 | .clobbers = .{ .eflags = true }, |
| | 13463 | .each = .{ .once = switch (cc) { |
| | 13464 | else => unreachable, |
| | 13465 | .e => &.{ |
| | 13466 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13467 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13468 | .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 13469 | .{ ._, .p_w, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 13470 | .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ }, |
| | 13471 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, |
| | 13472 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, |
| | 13473 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| | 13474 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 13475 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13476 | }, |
| | 13477 | .ne => &.{ |
| | 13478 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13479 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13480 | .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 13481 | .{ ._, .p_w, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 13482 | .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ }, |
| | 13483 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, |
| | 13484 | .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, |
| | 13485 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, |
| | 13486 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| | 13487 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 13488 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13489 | }, |
| | 13490 | } }, |
| | 13491 | }, .{ |
| | 13492 | .required_features = .{ .sse2, null, null, null }, |
| | 13493 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, |
| | 13494 | .patterns = &.{ |
| | 13495 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 13496 | }, |
| | 13497 | .extra_temps = .{ |
| | 13498 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 13499 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| | 13500 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 13501 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 13502 | .{ .kind = .{ .rc = .sse } }, |
| | 13503 | .unused, |
| | 13504 | .unused, |
| | 13505 | .unused, |
| | 13506 | .unused, |
| | 13507 | }, |
| | 13508 | .dst_temps = .{.mem}, |
| | 13509 | .clobbers = .{ .eflags = true }, |
| | 13510 | .each = .{ .once = switch (cc) { |
| | 13511 | else => unreachable, |
| | 13512 | .e => &.{ |
| | 13513 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13514 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13515 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13516 | .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 13517 | .{ ._, .p_d, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 13518 | .{ ._, ._ps, .movmsk, .tmp3d, .tmp4x, ._, ._ }, |
| | 13519 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| | 13520 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| | 13521 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| | 13522 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13523 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 13524 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 13525 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| | 13526 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| | 13527 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13528 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 13529 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13530 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13531 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 13532 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 13533 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| | 13534 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| | 13535 | }, |
| | 13536 | .ne => &.{ |
| | 13537 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13538 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13539 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13540 | .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 13541 | .{ ._, .p_d, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 13542 | .{ ._, ._ps, .movmsk, .tmp3d, .tmp4x, ._, ._ }, |
| | 13543 | .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ }, |
| | 13544 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| | 13545 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| | 13546 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| | 13547 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13548 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 13549 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 13550 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| | 13551 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| | 13552 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13553 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 13554 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13555 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13556 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 13557 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 13558 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| | 13559 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| | 13560 | }, |
| | 13561 | } }, |
| | 13562 | }, .{ |
| | 13563 | .required_features = .{ .sse4_1, null, null, null }, |
| | 13564 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, |
| | 13565 | .patterns = &.{ |
| | 13566 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 13567 | }, |
| | 13568 | .extra_temps = .{ |
| | 13569 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 13570 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| | 13571 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 13572 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 13573 | .{ .kind = .{ .rc = .sse } }, |
| | 13574 | .unused, |
| | 13575 | .unused, |
| | 13576 | .unused, |
| | 13577 | .unused, |
| | 13578 | }, |
| | 13579 | .dst_temps = .{.mem}, |
| | 13580 | .clobbers = .{ .eflags = true }, |
| | 13581 | .each = .{ .once = switch (cc) { |
| | 13582 | else => unreachable, |
| | 13583 | .e => &.{ |
| | 13584 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13585 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13586 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13587 | .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 13588 | .{ ._, .p_q, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 13589 | .{ ._, ._pd, .movmsk, .tmp3d, .tmp4x, ._, ._ }, |
| | 13590 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| | 13591 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| | 13592 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| | 13593 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13594 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 13595 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 13596 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| | 13597 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| | 13598 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13599 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 13600 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13601 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13602 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 13603 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 13604 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| | 13605 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| | 13606 | }, |
| | 13607 | .ne => &.{ |
| | 13608 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13609 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13610 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13611 | .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 13612 | .{ ._, .p_q, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 13613 | .{ ._, ._pd, .movmsk, .tmp3d, .tmp4x, ._, ._ }, |
| | 13614 | .{ ._, ._, .xor, .tmp3b, .si(0b11), ._, ._ }, |
| | 13615 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| | 13616 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| | 13617 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| | 13618 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13619 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 13620 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 13621 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| | 13622 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| | 13623 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13624 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 13625 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13626 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13627 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 13628 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 13629 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| | 13630 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| | 13631 | }, |
| | 13632 | } }, |
| | 13633 | }, .{ |
| | 13634 | .required_features = .{ .sse, .mmx, null, null }, |
| | 13635 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| | 13636 | .patterns = &.{ |
| | 13637 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 13638 | }, |
| | 13639 | .extra_temps = .{ |
| | 13640 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 13641 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 13642 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 13643 | .{ .kind = .{ .rc = .mmx } }, |
| | 13644 | .unused, |
| | 13645 | .unused, |
| | 13646 | .unused, |
| | 13647 | .unused, |
| | 13648 | .unused, |
| | 13649 | }, |
| | 13650 | .dst_temps = .{.mem}, |
| | 13651 | .clobbers = .{ .eflags = true }, |
| | 13652 | .each = .{ .once = switch (cc) { |
| | 13653 | else => unreachable, |
| | 13654 | .e => &.{ |
| | 13655 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13656 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13657 | .{ .@"0:", ._q, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 13658 | .{ ._, .p_b, .cmpeq, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 13659 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ }, |
| | 13660 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, |
| | 13661 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| | 13662 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 13663 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13664 | }, |
| | 13665 | .ne => &.{ |
| | 13666 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13667 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13668 | .{ .@"0:", ._q, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 13669 | .{ ._, .p_b, .cmpeq, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 13670 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ }, |
| | 13671 | .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, |
| | 13672 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, |
| | 13673 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| | 13674 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 13675 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13676 | }, |
| | 13677 | } }, |
| | 13678 | }, .{ |
| | 13679 | .required_features = .{ .sse, .mmx, null, null }, |
| | 13680 | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, |
| | 13681 | .patterns = &.{ |
| | 13682 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 13683 | }, |
| | 13684 | .extra_temps = .{ |
| | 13685 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 13686 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 13687 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 13688 | .{ .kind = .{ .rc = .mmx } }, |
| | 13689 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 13690 | .{ .kind = .{ .rc = .mmx } }, |
| | 13691 | .unused, |
| | 13692 | .unused, |
| | 13693 | .unused, |
| | 13694 | }, |
| | 13695 | .dst_temps = .{.mem}, |
| | 13696 | .clobbers = .{ .eflags = true }, |
| | 13697 | .each = .{ .once = switch (cc) { |
| | 13698 | else => unreachable, |
| | 13699 | .e => &.{ |
| | 13700 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13701 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13702 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13703 | .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ }, |
| | 13704 | .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 13705 | .{ ._, .p_w, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 13706 | .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ }, |
| | 13707 | .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ }, |
| | 13708 | .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, |
| | 13709 | .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, |
| | 13710 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| | 13711 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13712 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 13713 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| | 13714 | .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ }, |
| | 13715 | .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ }, |
| | 13716 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13717 | .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 13718 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13719 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13720 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 13721 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| | 13722 | .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ }, |
| | 13723 | .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ }, |
| | 13724 | }, |
| | 13725 | .ne => &.{ |
| | 13726 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13727 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13728 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13729 | .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ }, |
| | 13730 | .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 13731 | .{ ._, .p_w, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 13732 | .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ }, |
| | 13733 | .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ }, |
| | 13734 | .{ ._, ._, .xor, .tmp4b, .si(0b1111), ._, ._ }, |
| | 13735 | .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, |
| | 13736 | .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, |
| | 13737 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| | 13738 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13739 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 13740 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| | 13741 | .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ }, |
| | 13742 | .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ }, |
| | 13743 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13744 | .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 13745 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13746 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13747 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 13748 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| | 13749 | .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ }, |
| | 13750 | .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ }, |
| | 13751 | }, |
| | 13752 | } }, |
| | 13753 | }, .{ |
| | 13754 | .required_features = .{ .sse, .mmx, null, null }, |
| | 13755 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, |
| | 13756 | .patterns = &.{ |
| | 13757 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 13758 | }, |
| | 13759 | .extra_temps = .{ |
| | 13760 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 13761 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| | 13762 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 13763 | .{ .kind = .{ .rc = .mmx } }, |
| | 13764 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 13765 | .{ .kind = .{ .rc = .mmx } }, |
| | 13766 | .unused, |
| | 13767 | .unused, |
| | 13768 | .unused, |
| | 13769 | }, |
| | 13770 | .dst_temps = .{.mem}, |
| | 13771 | .clobbers = .{ .eflags = true }, |
| | 13772 | .each = .{ .once = switch (cc) { |
| | 13773 | else => unreachable, |
| | 13774 | .e => &.{ |
| | 13775 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13776 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13777 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13778 | .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ }, |
| | 13779 | .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 13780 | .{ ._, .p_d, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 13781 | .{ ._, .p_w, .ackssd, .tmp5q, .tmp3q, ._, ._ }, |
| | 13782 | .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ }, |
| | 13783 | .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ }, |
| | 13784 | .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, |
| | 13785 | .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, |
| | 13786 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| | 13787 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13788 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 13789 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| | 13790 | .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ }, |
| | 13791 | .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ }, |
| | 13792 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13793 | .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 13794 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13795 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13796 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 13797 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| | 13798 | .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ }, |
| | 13799 | .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ }, |
| | 13800 | }, |
| | 13801 | .ne => &.{ |
| | 13802 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13803 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 13804 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13805 | .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ }, |
| | 13806 | .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 13807 | .{ ._, .p_d, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 13808 | .{ ._, .p_w, .ackssd, .tmp5q, .tmp3q, ._, ._ }, |
| | 13809 | .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ }, |
| | 13810 | .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ }, |
| | 13811 | .{ ._, ._, .xor, .tmp4b, .si(0b11), ._, ._ }, |
| | 13812 | .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, |
| | 13813 | .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, |
| | 13814 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| | 13815 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13816 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 13817 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| | 13818 | .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ }, |
| | 13819 | .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ }, |
| | 13820 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 13821 | .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 13822 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13823 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 13824 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 13825 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| | 13826 | .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ }, |
| | 13827 | .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ }, |
| | 13828 | }, |
| | 13829 | } }, |
| | 13830 | }, .{ |
| | 13831 | .dst_constraints = .{.{ .bool_vec = .byte }}, |
| | 13832 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| | 13833 | .patterns = &.{ |
| | 13834 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 13835 | }, |
| | 13836 | .extra_temps = .{ |
| | 13837 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 13838 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 13839 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 13840 | .unused, |
| | 13841 | .unused, |
| | 13842 | .unused, |
| | 13843 | .unused, |
| | 13844 | .unused, |
| | 13845 | .unused, |
| | 13846 | }, |
| | 13847 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 13848 | .clobbers = .{ .eflags = true }, |
| | 13849 | .each = .{ .once = &.{ |
| | 13850 | .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ }, |
| | 13851 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13852 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| | 13853 | .{ .@"0:", ._, .mov, .tmp2b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| | 13854 | .{ ._, ._, .cmp, .tmp2b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| | 13855 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| | 13856 | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, |
| | 13857 | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, |
| | 13858 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| | 13859 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 13860 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13861 | } }, |
| | 13862 | }, .{ |
| | 13863 | .dst_constraints = .{.{ .bool_vec = .byte }}, |
| | 13864 | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, |
| | 13865 | .patterns = &.{ |
| | 13866 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 13867 | }, |
| | 13868 | .extra_temps = .{ |
| | 13869 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 13870 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 13871 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| | 13872 | .unused, |
| | 13873 | .unused, |
| | 13874 | .unused, |
| | 13875 | .unused, |
| | 13876 | .unused, |
| | 13877 | .unused, |
| | 13878 | }, |
| | 13879 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 13880 | .clobbers = .{ .eflags = true }, |
| | 13881 | .each = .{ .once = &.{ |
| | 13882 | .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ }, |
| | 13883 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13884 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| | 13885 | .{ .@"0:", ._, .mov, .tmp2w, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| | 13886 | .{ ._, ._, .cmp, .tmp2w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| | 13887 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| | 13888 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| | 13889 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| | 13890 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| | 13891 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| | 13892 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13893 | } }, |
| | 13894 | }, .{ |
| | 13895 | .dst_constraints = .{.{ .bool_vec = .byte }}, |
| | 13896 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, |
| | 13897 | .patterns = &.{ |
| | 13898 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 13899 | }, |
| | 13900 | .extra_temps = .{ |
| | 13901 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 13902 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 13903 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 13904 | .unused, |
| | 13905 | .unused, |
| | 13906 | .unused, |
| | 13907 | .unused, |
| | 13908 | .unused, |
| | 13909 | .unused, |
| | 13910 | }, |
| | 13911 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 13912 | .clobbers = .{ .eflags = true }, |
| | 13913 | .each = .{ .once = &.{ |
| | 13914 | .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ }, |
| | 13915 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13916 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| | 13917 | .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| | 13918 | .{ ._, ._, .cmp, .tmp2d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| | 13919 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| | 13920 | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, |
| | 13921 | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, |
| | 13922 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| | 13923 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| | 13924 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13925 | } }, |
| | 13926 | }, .{ |
| | 13927 | .required_features = .{ .@"64bit", null, null, null }, |
| | 13928 | .dst_constraints = .{.{ .bool_vec = .byte }}, |
| | 13929 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, |
| | 13930 | .patterns = &.{ |
| | 13931 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 13932 | }, |
| | 13933 | .extra_temps = .{ |
| | 13934 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 13935 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 13936 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 13937 | .unused, |
| | 13938 | .unused, |
| | 13939 | .unused, |
| | 13940 | .unused, |
| | 13941 | .unused, |
| | 13942 | .unused, |
| | 13943 | }, |
| | 13944 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 13945 | .clobbers = .{ .eflags = true }, |
| | 13946 | .each = .{ .once = &.{ |
| | 13947 | .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ }, |
| | 13948 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 13949 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| | 13950 | .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 13951 | .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 13952 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| | 13953 | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, |
| | 13954 | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, |
| | 13955 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| | 13956 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| | 13957 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 13958 | } }, |
| | 13959 | }, .{ |
| | 13960 | .dst_constraints = .{.{ .bool_vec = .byte }}, |
| | 13961 | .src_constraints = .{ .any_scalar_int, .any_scalar_int }, |
| | 13962 | .patterns = &.{ |
| | 13963 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 13964 | }, |
| | 13965 | .extra_temps = .{ |
| | 13966 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 13967 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 13968 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 13969 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 13970 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 13971 | .unused, |
| | 13972 | .unused, |
| | 13973 | .unused, |
| | 13974 | .unused, |
| | 13975 | }, |
| | 13976 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 13977 | .clobbers = .{ .eflags = true }, |
| | 13978 | .each = .{ .once = &.{ |
| | 13979 | .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ }, |
| | 13980 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| | 13981 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| | 13982 | .{ .@"0:", ._, .mov, .tmp2d, .sa(.src0p, .add_elem_limbs), ._, ._ }, |
| | 13983 | .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, |
| | 13984 | .{ .@"1:", ._, .mov, .tmp4p, .memi(.src0p, .tmp0), ._, ._ }, |
| | 13985 | .{ ._, ._, .xor, .tmp4p, .memi(.src1p, .tmp0), ._, ._ }, |
| | 13986 | .{ ._, ._, .@"or", .tmp3p, .tmp4p, ._, ._ }, |
| | 13987 | .{ ._, ._, .add, .tmp0p, .sa(.tmp4, .add_size), ._, ._ }, |
| | 13988 | .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ }, |
| | 13989 | .{ ._, ._b, .j, .@"1b", ._, ._, ._ }, |
| | 13990 | .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ }, |
| | 13991 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| | 13992 | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, |
| | 13993 | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, |
| | 13994 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| | 13995 | .{ ._, ._, .cmp, .tmp1b, .sa(.dst0, .add_len), ._, ._ }, |
| | 13996 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| | 13997 | } }, |
| | 13998 | }, .{ |
| | 13999 | .dst_constraints = .{.{ .bool_vec = .dword }}, |
| | 14000 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| | 14001 | .patterns = &.{ |
| | 14002 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 14003 | }, |
| | 14004 | .extra_temps = .{ |
| | 14005 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 14006 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 14007 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 14008 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 14009 | .unused, |
| | 14010 | .unused, |
| | 14011 | .unused, |
| | 14012 | .unused, |
| | 14013 | .unused, |
| | 14014 | }, |
| | 14015 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 14016 | .clobbers = .{ .eflags = true }, |
| | 14017 | .each = .{ .once = &.{ |
| | 14018 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| | 14019 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 14020 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| | 14021 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 14022 | .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| | 14023 | .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| | 14024 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| | 14025 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| | 14026 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| | 14027 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| | 14028 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 14029 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 14030 | } }, |
| | 14031 | }, .{ |
| | 14032 | .dst_constraints = .{.{ .bool_vec = .dword }}, |
| | 14033 | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, |
| | 14034 | .patterns = &.{ |
| | 14035 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 14036 | }, |
| | 14037 | .extra_temps = .{ |
| | 14038 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 14039 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 14040 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 14041 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| | 14042 | .unused, |
| | 14043 | .unused, |
| | 14044 | .unused, |
| | 14045 | .unused, |
| | 14046 | .unused, |
| | 14047 | }, |
| | 14048 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 14049 | .clobbers = .{ .eflags = true }, |
| | 14050 | .each = .{ .once = &.{ |
| | 14051 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| | 14052 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 14053 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| | 14054 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 14055 | .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| | 14056 | .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| | 14057 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| | 14058 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| | 14059 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| | 14060 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| | 14061 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| | 14062 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 14063 | } }, |
| | 14064 | }, .{ |
| | 14065 | .dst_constraints = .{.{ .bool_vec = .dword }}, |
| | 14066 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, |
| | 14067 | .patterns = &.{ |
| | 14068 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 14069 | }, |
| | 14070 | .extra_temps = .{ |
| | 14071 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 14072 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 14073 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 14074 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 14075 | .unused, |
| | 14076 | .unused, |
| | 14077 | .unused, |
| | 14078 | .unused, |
| | 14079 | .unused, |
| | 14080 | }, |
| | 14081 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 14082 | .clobbers = .{ .eflags = true }, |
| | 14083 | .each = .{ .once = &.{ |
| | 14084 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| | 14085 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 14086 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| | 14087 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 14088 | .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| | 14089 | .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| | 14090 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| | 14091 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| | 14092 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| | 14093 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| | 14094 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| | 14095 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 14096 | } }, |
| | 14097 | }, .{ |
| | 14098 | .required_features = .{ .@"64bit", null, null, null }, |
| | 14099 | .dst_constraints = .{.{ .bool_vec = .dword }}, |
| | 14100 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, |
| | 14101 | .patterns = &.{ |
| | 14102 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 14103 | }, |
| | 14104 | .extra_temps = .{ |
| | 14105 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 14106 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 14107 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 14108 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 14109 | .unused, |
| | 14110 | .unused, |
| | 14111 | .unused, |
| | 14112 | .unused, |
| | 14113 | .unused, |
| | 14114 | }, |
| | 14115 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 14116 | .clobbers = .{ .eflags = true }, |
| | 14117 | .each = .{ .once = &.{ |
| | 14118 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| | 14119 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 14120 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| | 14121 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 14122 | .{ ._, ._, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 14123 | .{ ._, ._, .cmp, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 14124 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| | 14125 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| | 14126 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| | 14127 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| | 14128 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| | 14129 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 14130 | } }, |
| | 14131 | }, .{ |
| | 14132 | .dst_constraints = .{.{ .bool_vec = .dword }}, |
| | 14133 | .src_constraints = .{ .any_scalar_int, .any_scalar_int }, |
| | 14134 | .patterns = &.{ |
| | 14135 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 14136 | }, |
| | 14137 | .extra_temps = .{ |
| | 14138 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 14139 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 14140 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 14141 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 14142 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 14143 | .unused, |
| | 14144 | .unused, |
| | 14145 | .unused, |
| | 14146 | .unused, |
| | 14147 | }, |
| | 14148 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 14149 | .clobbers = .{ .eflags = true }, |
| | 14150 | .each = .{ .once = &.{ |
| | 14151 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| | 14152 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| | 14153 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| | 14154 | .{ .@"0:", ._, .mov, .tmp2d, .sa(.src0p, .add_elem_limbs), ._, ._ }, |
| | 14155 | .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, |
| | 14156 | .{ .@"1:", ._, .mov, .tmp4p, .memi(.src0p, .tmp0), ._, ._ }, |
| | 14157 | .{ ._, ._, .xor, .tmp4p, .memi(.src1p, .tmp0), ._, ._ }, |
| | 14158 | .{ ._, ._, .@"or", .tmp3p, .tmp4p, ._, ._ }, |
| | 14159 | .{ ._, ._, .add, .tmp0p, .sa(.tmp4, .add_size), ._, ._ }, |
| | 14160 | .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ }, |
| | 14161 | .{ ._, ._b, .j, .@"1b", ._, ._, ._ }, |
| | 14162 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 14163 | .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ }, |
| | 14164 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| | 14165 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| | 14166 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| | 14167 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| | 14168 | .{ ._, ._, .cmp, .tmp1b, .sa(.dst0, .add_len), ._, ._ }, |
| | 14169 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| 7033 | } }, | 14170 | } }, |
| 7034 | }, .{ | 14171 | }, .{ |
| 7035 | .required_features = .{ .avx2, null, null, null }, | 14172 | .required_features = .{ .@"64bit", null, null, null }, |
| | 14173 | .dst_constraints = .{.{ .bool_vec = .qword }}, |
| | 14174 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| | 14175 | .patterns = &.{ |
| | 14176 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 14177 | }, |
| | 14178 | .extra_temps = .{ |
| | 14179 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 14180 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 14181 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 14182 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 14183 | .unused, |
| | 14184 | .unused, |
| | 14185 | .unused, |
| | 14186 | .unused, |
| | 14187 | .unused, |
| | 14188 | }, |
| | 14189 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 14190 | .clobbers = .{ .eflags = true }, |
| | 14191 | .each = .{ .once = &.{ |
| | 14192 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| | 14193 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 14194 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| | 14195 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 14196 | .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| | 14197 | .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| | 14198 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| | 14199 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, |
| | 14200 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, |
| | 14201 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| | 14202 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 14203 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 14204 | } }, |
| | 14205 | }, .{ |
| | 14206 | .required_features = .{ .@"64bit", null, null, null }, |
| | 14207 | .dst_constraints = .{.{ .bool_vec = .qword }}, |
| 7036 | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, | 14208 | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, |
| 7037 | .patterns = &.{ | 14209 | .patterns = &.{ |
| 7038 | .{ .src = .{ .to_ymm, .mem } }, | 14210 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7039 | .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } }, | | |
| 7040 | .{ .src = .{ .to_ymm, .to_ymm } }, | | |
| 7041 | }, | 14211 | }, |
| 7042 | .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{ | 14212 | .extra_temps = .{ |
| 7043 | .kind = .all, | 14213 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7044 | .inverted = switch (cc) { | 14214 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 7045 | else => unreachable, | 14215 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 7046 | .e => false, | 14216 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| 7047 | .ne => true, | 14217 | .unused, |
| 7048 | }, | 14218 | .unused, |
| 7049 | .scalar = .word, | 14219 | .unused, |
| 7050 | } } }}, | 14220 | .unused, |
| | 14221 | .unused, |
| | 14222 | }, |
| | 14223 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 14224 | .clobbers = .{ .eflags = true }, |
| 7051 | .each = .{ .once = &.{ | 14225 | .each = .{ .once = &.{ |
| 7052 | .{ ._, .vp_w, .cmpeq, .dst0y, .src0y, .src1y, ._ }, | 14226 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| | 14227 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 14228 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 14229 | .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| | 14230 | .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| | 14231 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| | 14232 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, |
| | 14233 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, |
| | 14234 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| | 14235 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| | 14236 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7053 | } }, | 14237 | } }, |
| 7054 | }, .{ | 14238 | }, .{ |
| 7055 | .required_features = .{ .avx2, null, null, null }, | 14239 | .required_features = .{ .@"64bit", null, null, null }, |
| | 14240 | .dst_constraints = .{.{ .bool_vec = .qword }}, |
| 7056 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, | 14241 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, |
| 7057 | .patterns = &.{ | 14242 | .patterns = &.{ |
| 7058 | .{ .src = .{ .to_ymm, .mem } }, | 14243 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7059 | .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } }, | | |
| 7060 | .{ .src = .{ .to_ymm, .to_ymm } }, | | |
| 7061 | }, | 14244 | }, |
| 7062 | .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{ | 14245 | .extra_temps = .{ |
| 7063 | .kind = .all, | 14246 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7064 | .inverted = switch (cc) { | 14247 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 7065 | else => unreachable, | 14248 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 7066 | .e => false, | 14249 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 7067 | .ne => true, | 14250 | .unused, |
| 7068 | }, | 14251 | .unused, |
| 7069 | .scalar = .dword, | 14252 | .unused, |
| 7070 | } } }}, | 14253 | .unused, |
| | 14254 | .unused, |
| | 14255 | }, |
| | 14256 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 14257 | .clobbers = .{ .eflags = true }, |
| 7071 | .each = .{ .once = &.{ | 14258 | .each = .{ .once = &.{ |
| 7072 | .{ ._, .vp_d, .cmpeq, .dst0y, .src0y, .src1y, ._ }, | 14259 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| | 14260 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 14261 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| | 14262 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 14263 | .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| | 14264 | .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| | 14265 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| | 14266 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, |
| | 14267 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, |
| | 14268 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| | 14269 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| | 14270 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7073 | } }, | 14271 | } }, |
| 7074 | }, .{ | 14272 | }, .{ |
| 7075 | .required_features = .{ .avx2, null, null, null }, | 14273 | .required_features = .{ .@"64bit", null, null, null }, |
| | 14274 | .dst_constraints = .{.{ .bool_vec = .qword }}, |
| 7076 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, | 14275 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, |
| 7077 | .patterns = &.{ | 14276 | .patterns = &.{ |
| 7078 | .{ .src = .{ .to_ymm, .mem } }, | 14277 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7079 | .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } }, | | |
| 7080 | .{ .src = .{ .to_ymm, .to_ymm } }, | | |
| 7081 | }, | 14278 | }, |
| 7082 | .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{ | 14279 | .extra_temps = .{ |
| 7083 | .kind = .all, | 14280 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7084 | .inverted = switch (cc) { | 14281 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 7085 | else => unreachable, | 14282 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 7086 | .e => false, | 14283 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 7087 | .ne => true, | 14284 | .unused, |
| 7088 | }, | 14285 | .unused, |
| 7089 | .scalar = .qword, | 14286 | .unused, |
| 7090 | } } }}, | 14287 | .unused, |
| | 14288 | .unused, |
| | 14289 | }, |
| | 14290 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 14291 | .clobbers = .{ .eflags = true }, |
| 7091 | .each = .{ .once = &.{ | 14292 | .each = .{ .once = &.{ |
| 7092 | .{ ._, .vp_q, .cmpeq, .dst0y, .src0y, .src1y, ._ }, | 14293 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| | 14294 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 14295 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| | 14296 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 14297 | .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 14298 | .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 14299 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| | 14300 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, |
| | 14301 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, |
| | 14302 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| | 14303 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 14304 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7093 | } }, | 14305 | } }, |
| 7094 | }, .{ | 14306 | }, .{ |
| 7095 | .required_features = .{ .avx, null, null, null }, | 14307 | .required_features = .{ .@"64bit", null, null, null }, |
| 7096 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, | 14308 | .dst_constraints = .{.{ .bool_vec = .qword }}, |
| | 14309 | .src_constraints = .{ .any_scalar_int, .any_scalar_int }, |
| 7097 | .patterns = &.{ | 14310 | .patterns = &.{ |
| 7098 | .{ .src = .{ .to_xmm, .mem } }, | 14311 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7099 | .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } }, | | |
| 7100 | .{ .src = .{ .to_xmm, .to_xmm } }, | | |
| 7101 | }, | 14312 | }, |
| 7102 | .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{ | 14313 | .extra_temps = .{ |
| 7103 | .kind = .all, | 14314 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 7104 | .inverted = switch (cc) { | 14315 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 7105 | else => unreachable, | 14316 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 7106 | .e => false, | 14317 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 7107 | .ne => true, | 14318 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 7108 | }, | 14319 | .unused, |
| 7109 | .scalar = .byte, | 14320 | .unused, |
| 7110 | } } }}, | 14321 | .unused, |
| | 14322 | .unused, |
| | 14323 | }, |
| | 14324 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 14325 | .clobbers = .{ .eflags = true }, |
| 7111 | .each = .{ .once = &.{ | 14326 | .each = .{ .once = &.{ |
| 7112 | .{ ._, .vp_b, .cmpeq, .dst0x, .src0x, .src1x, ._ }, | 14327 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| | 14328 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| | 14329 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| | 14330 | .{ .@"0:", ._, .mov, .tmp2d, .sa(.src0p, .add_elem_limbs), ._, ._ }, |
| | 14331 | .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, |
| | 14332 | .{ .@"1:", ._, .mov, .tmp4p, .memi(.src0p, .tmp0), ._, ._ }, |
| | 14333 | .{ ._, ._, .xor, .tmp4p, .memi(.src1p, .tmp0), ._, ._ }, |
| | 14334 | .{ ._, ._, .@"or", .tmp3p, .tmp4p, ._, ._ }, |
| | 14335 | .{ ._, ._, .add, .tmp0p, .sa(.tmp4, .add_size), ._, ._ }, |
| | 14336 | .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ }, |
| | 14337 | .{ ._, ._b, .j, .@"1b", ._, ._, ._ }, |
| | 14338 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 14339 | .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ }, |
| | 14340 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| | 14341 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, |
| | 14342 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, |
| | 14343 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| | 14344 | .{ ._, ._, .cmp, .tmp1b, .sa(.dst0, .add_len), ._, ._ }, |
| | 14345 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| 7113 | } }, | 14346 | } }, |
| 7114 | }, .{ | 14347 | }, .{ |
| 7115 | .required_features = .{ .avx, null, null, null }, | 14348 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| 7116 | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, | | |
| 7117 | .patterns = &.{ | 14349 | .patterns = &.{ |
| 7118 | .{ .src = .{ .to_xmm, .mem } }, | 14350 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7119 | .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } }, | | |
| 7120 | .{ .src = .{ .to_xmm, .to_xmm } }, | | |
| 7121 | }, | 14351 | }, |
| 7122 | .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{ | 14352 | .extra_temps = .{ |
| 7123 | .kind = .all, | 14353 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7124 | .inverted = switch (cc) { | 14354 | .{ .type = .u32, .kind = .{ .reg = .ecx } }, |
| 7125 | else => unreachable, | 14355 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 7126 | .e => false, | 14356 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 7127 | .ne => true, | 14357 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 7128 | }, | 14358 | .unused, |
| 7129 | .scalar = .word, | 14359 | .unused, |
| 7130 | } } }}, | 14360 | .unused, |
| | 14361 | .unused, |
| | 14362 | }, |
| | 14363 | .dst_temps = .{.mem}, |
| | 14364 | .clobbers = .{ .eflags = true }, |
| 7131 | .each = .{ .once = &.{ | 14365 | .each = .{ .once = &.{ |
| 7132 | .{ ._, .vp_w, .cmpeq, .dst0x, .src0x, .src1x, ._ }, | 14366 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 14367 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 14368 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 14369 | .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ }, |
| | 14370 | .{ ._, ._, .mov, .tmp4b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| | 14371 | .{ ._, ._, .cmp, .tmp4b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| | 14372 | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, |
| | 14373 | .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ }, |
| | 14374 | .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ }, |
| | 14375 | .{ ._, ._, .add, .tmp1d, .si(1), ._, ._ }, |
| | 14376 | .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ }, |
| | 14377 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 14378 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 14379 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| | 14380 | .{ ._, ._, .mov, .memia(.dst0p, .tmp3, .sub_ptr_size), .tmp2p, ._, ._ }, |
| | 14381 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 14382 | .{ .@"1:", ._, .add, .tmp0p, .si(1), ._, ._ }, |
| | 14383 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 14384 | .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ }, |
| | 14385 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 14386 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 14387 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| | 14388 | .{ ._, ._, .mov, .memi(.dst0p, .tmp3), .tmp2p, ._, ._ }, |
| 7133 | } }, | 14389 | } }, |
| 7134 | }, .{ | 14390 | }, .{ |
| 7135 | .required_features = .{ .avx, null, null, null }, | 14391 | .required_features = .{ .f16c, null, null, null }, |
| 7136 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, | 14392 | .src_constraints = .{ |
| | 14393 | .{ .scalar_float = .{ .of = .word, .is = .word } }, |
| | 14394 | .{ .scalar_float = .{ .of = .word, .is = .word } }, |
| | 14395 | }, |
| 7137 | .patterns = &.{ | 14396 | .patterns = &.{ |
| 7138 | .{ .src = .{ .to_xmm, .mem } }, | 14397 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7139 | .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } }, | | |
| 7140 | .{ .src = .{ .to_xmm, .to_xmm } }, | | |
| 7141 | }, | 14398 | }, |
| 7142 | .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{ | 14399 | .extra_temps = .{ |
| 7143 | .kind = .all, | 14400 | .{ .kind = .{ .rc = .sse } }, |
| 7144 | .inverted = switch (cc) { | 14401 | .unused, |
| 7145 | else => unreachable, | 14402 | .unused, |
| 7146 | .e => false, | 14403 | .unused, |
| 7147 | .ne => true, | 14404 | .unused, |
| 7148 | }, | 14405 | .unused, |
| 7149 | .scalar = .dword, | 14406 | .unused, |
| 7150 | } } }}, | 14407 | .unused, |
| | 14408 | .unused, |
| | 14409 | }, |
| | 14410 | .dst_temps = .{.{ .mut_rc_mask = .{ |
| | 14411 | .ref = .src0, |
| | 14412 | .rc = .sse, |
| | 14413 | .info = .{ .kind = .all, .scalar = .dword }, |
| | 14414 | } }}, |
| 7151 | .each = .{ .once = &.{ | 14415 | .each = .{ .once = &.{ |
| 7152 | .{ ._, .vp_d, .cmpeq, .dst0x, .src0x, .src1x, ._ }, | 14416 | .{ ._, .v_ps, .cvtph2, .dst0x, .src0x, ._, ._ }, |
| | 14417 | .{ ._, .v_ps, .cvtph2, .tmp0x, .src1x, ._, ._ }, |
| | 14418 | .{ ._, .v_ss, .cmp, .dst0x, .dst0x, .tmp0x, .ui(switch (cc) { |
| | 14419 | else => unreachable, |
| | 14420 | .e => 0b00000, |
| | 14421 | .ne => 0b00100, |
| | 14422 | }) }, |
| 7153 | } }, | 14423 | } }, |
| 7154 | }, .{ | 14424 | }, .{ |
| 7155 | .required_features = .{ .avx, null, null, null }, | 14425 | .required_features = .{ .f16c, null, null, null }, |
| 7156 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, | 14426 | .src_constraints = .{ |
| | 14427 | .{ .scalar_float = .{ .of = .qword, .is = .word } }, |
| | 14428 | .{ .scalar_float = .{ .of = .qword, .is = .word } }, |
| | 14429 | }, |
| 7157 | .patterns = &.{ | 14430 | .patterns = &.{ |
| 7158 | .{ .src = .{ .to_xmm, .mem } }, | 14431 | .{ .src = .{ .mem, .mem } }, |
| 7159 | .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } }, | 14432 | .{ .src = .{ .sse, .mem } }, |
| 7160 | .{ .src = .{ .to_xmm, .to_xmm } }, | 14433 | .{ .src = .{ .mem, .sse } }, |
| | 14434 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7161 | }, | 14435 | }, |
| 7162 | .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{ | 14436 | .extra_temps = .{ |
| 7163 | .kind = .all, | 14437 | .{ .kind = .{ .rc = .sse } }, |
| 7164 | .inverted = switch (cc) { | 14438 | .unused, |
| 7165 | else => unreachable, | 14439 | .unused, |
| 7166 | .e => false, | 14440 | .unused, |
| 7167 | .ne => true, | 14441 | .unused, |
| 7168 | }, | 14442 | .unused, |
| 7169 | .scalar = .qword, | 14443 | .unused, |
| 7170 | } } }}, | 14444 | .unused, |
| | 14445 | .unused, |
| | 14446 | }, |
| | 14447 | .dst_temps = .{.{ .mut_rc_mask = .{ |
| | 14448 | .ref = .src0, |
| | 14449 | .rc = .sse, |
| | 14450 | .info = .{ .kind = .all, .scalar = .dword }, |
| | 14451 | } }}, |
| 7171 | .each = .{ .once = &.{ | 14452 | .each = .{ .once = &.{ |
| 7172 | .{ ._, .vp_q, .cmpeq, .dst0x, .src0x, .src1x, ._ }, | 14453 | .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, |
| | 14454 | .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ }, |
| | 14455 | .{ ._, .v_ps, .cmp, .dst0x, .dst0x, .tmp0x, .ui(switch (cc) { |
| | 14456 | else => unreachable, |
| | 14457 | .e => 0b00000, |
| | 14458 | .ne => 0b00100, |
| | 14459 | }) }, |
| 7173 | } }, | 14460 | } }, |
| 7174 | }, .{ | 14461 | }, .{ |
| 7175 | .required_features = .{ .sse2, null, null, null }, | 14462 | .required_features = .{ .f16c, null, null, null }, |
| 7176 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, | 14463 | .src_constraints = .{ |
| | 14464 | .{ .scalar_float = .{ .of = .xword, .is = .word } }, |
| | 14465 | .{ .scalar_float = .{ .of = .xword, .is = .word } }, |
| | 14466 | }, |
| 7177 | .patterns = &.{ | 14467 | .patterns = &.{ |
| 7178 | .{ .src = .{ .to_mut_xmm, .mem } }, | 14468 | .{ .src = .{ .mem, .mem } }, |
| 7179 | .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } }, | 14469 | .{ .src = .{ .to_sse, .mem } }, |
| 7180 | .{ .src = .{ .to_mut_xmm, .to_xmm } }, | 14470 | .{ .src = .{ .mem, .to_sse } }, |
| | 14471 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7181 | }, | 14472 | }, |
| 7182 | .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{ | 14473 | .extra_temps = .{ |
| 7183 | .kind = .all, | 14474 | .{ .kind = .{ .rc = .sse } }, |
| 7184 | .inverted = switch (cc) { | 14475 | .unused, |
| 7185 | else => unreachable, | 14476 | .unused, |
| 7186 | .e => false, | 14477 | .unused, |
| 7187 | .ne => true, | 14478 | .unused, |
| 7188 | }, | 14479 | .unused, |
| 7189 | .scalar = .byte, | 14480 | .unused, |
| 7190 | } } }}, | 14481 | .unused, |
| | 14482 | .unused, |
| | 14483 | }, |
| | 14484 | .dst_temps = .{.{ .mut_rc_mask = .{ |
| | 14485 | .ref = .src0, |
| | 14486 | .rc = .sse, |
| | 14487 | .info = .{ .kind = .all, .scalar = .dword }, |
| | 14488 | } }}, |
| 7191 | .each = .{ .once = &.{ | 14489 | .each = .{ .once = &.{ |
| 7192 | .{ ._, .p_b, .cmpeq, .dst0x, .src1x, ._, ._ }, | 14490 | .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ }, |
| | 14491 | .{ ._, .v_ps, .cvtph2, .tmp0y, .src1x, ._, ._ }, |
| | 14492 | .{ ._, .v_ps, .cmp, .dst0y, .dst0y, .tmp0y, .ui(switch (cc) { |
| | 14493 | else => unreachable, |
| | 14494 | .e => 0b00000, |
| | 14495 | .ne => 0b00100, |
| | 14496 | }) }, |
| 7193 | } }, | 14497 | } }, |
| 7194 | }, .{ | 14498 | }, .{ |
| 7195 | .required_features = .{ .sse2, null, null, null }, | 14499 | .required_features = .{ .avx, null, null, null }, |
| 7196 | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, | 14500 | .src_constraints = .{ |
| | 14501 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| | 14502 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| | 14503 | }, |
| 7197 | .patterns = &.{ | 14504 | .patterns = &.{ |
| 7198 | .{ .src = .{ .to_mut_xmm, .mem } }, | 14505 | .{ .src = .{ .to_sse, .mem } }, |
| 7199 | .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } }, | 14506 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 7200 | .{ .src = .{ .to_mut_xmm, .to_xmm } }, | 14507 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7201 | }, | 14508 | }, |
| 7202 | .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{ | 14509 | .dst_temps = .{.{ .mut_rc_mask = .{ |
| 7203 | .kind = .all, | 14510 | .ref = .src0, |
| 7204 | .inverted = switch (cc) { | 14511 | .rc = .sse, |
| 7205 | else => unreachable, | 14512 | .info = .{ .kind = .all, .scalar = .dword }, |
| 7206 | .e => false, | 14513 | } }}, |
| 7207 | .ne => true, | | |
| 7208 | }, | | |
| 7209 | .scalar = .word, | | |
| 7210 | } } }}, | | |
| 7211 | .each = .{ .once = &.{ | 14514 | .each = .{ .once = &.{ |
| 7212 | .{ ._, .p_w, .cmpeq, .dst0x, .src1x, ._, ._ }, | 14515 | .{ ._, .v_ss, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) { |
| | 14516 | else => unreachable, |
| | 14517 | .e => 0b00000, |
| | 14518 | .ne => 0b00100, |
| | 14519 | }) }, |
| 7213 | } }, | 14520 | } }, |
| 7214 | }, .{ | 14521 | }, .{ |
| 7215 | .required_features = .{ .sse2, null, null, null }, | 14522 | .required_features = .{ .sse, null, null, null }, |
| 7216 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, | 14523 | .src_constraints = .{ |
| | 14524 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| | 14525 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| | 14526 | }, |
| 7217 | .patterns = &.{ | 14527 | .patterns = &.{ |
| 7218 | .{ .src = .{ .to_mut_xmm, .mem } }, | 14528 | .{ .src = .{ .to_mut_sse, .mem } }, |
| 7219 | .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } }, | 14529 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 7220 | .{ .src = .{ .to_mut_xmm, .to_xmm } }, | 14530 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 7221 | }, | 14531 | }, |
| 7222 | .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{ | 14532 | .dst_temps = .{.{ .ref_mask = .{ |
| 7223 | .kind = .all, | 14533 | .ref = .src0, |
| 7224 | .inverted = switch (cc) { | 14534 | .info = .{ .kind = .all, .scalar = .dword }, |
| 7225 | else => unreachable, | 14535 | } }}, |
| 7226 | .e => false, | | |
| 7227 | .ne => true, | | |
| 7228 | }, | | |
| 7229 | .scalar = .dword, | | |
| 7230 | } } }}, | | |
| 7231 | .each = .{ .once = &.{ | 14536 | .each = .{ .once = &.{ |
| 7232 | .{ ._, .p_d, .cmpeq, .dst0x, .src1x, ._, ._ }, | 14537 | .{ ._, ._ss, .cmp, .dst0x, .src1x, .ui(switch (cc) { |
| | 14538 | else => unreachable, |
| | 14539 | .e => 0b00000, |
| | 14540 | .ne => 0b00100, |
| | 14541 | }), ._ }, |
| 7233 | } }, | 14542 | } }, |
| 7234 | }, .{ | 14543 | }, .{ |
| 7235 | .required_features = .{ .sse4_1, null, null, null }, | 14544 | .required_features = .{ .avx, null, null, null }, |
| 7236 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, | 14545 | .src_constraints = .{ |
| | 14546 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| | 14547 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| | 14548 | }, |
| 7237 | .patterns = &.{ | 14549 | .patterns = &.{ |
| 7238 | .{ .src = .{ .to_mut_xmm, .mem } }, | 14550 | .{ .src = .{ .to_sse, .mem } }, |
| 7239 | .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } }, | 14551 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 7240 | .{ .src = .{ .to_mut_xmm, .to_xmm } }, | 14552 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7241 | }, | 14553 | }, |
| 7242 | .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{ | 14554 | .dst_temps = .{.{ .mut_rc_mask = .{ |
| 7243 | .kind = .all, | 14555 | .ref = .src0, |
| 7244 | .inverted = switch (cc) { | 14556 | .rc = .sse, |
| 7245 | else => unreachable, | 14557 | .info = .{ .kind = .all, .scalar = .dword }, |
| 7246 | .e => false, | 14558 | } }}, |
| 7247 | .ne => true, | | |
| 7248 | }, | | |
| 7249 | .scalar = .qword, | | |
| 7250 | } } }}, | | |
| 7251 | .each = .{ .once = &.{ | 14559 | .each = .{ .once = &.{ |
| 7252 | .{ ._, .p_q, .cmpeq, .dst0x, .src1x, ._, ._ }, | 14560 | .{ ._, .v_ps, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) { |
| | 14561 | else => unreachable, |
| | 14562 | .e => 0b00000, |
| | 14563 | .ne => 0b00100, |
| | 14564 | }) }, |
| 7253 | } }, | 14565 | } }, |
| 7254 | }, .{ | 14566 | }, .{ |
| 7255 | .required_features = .{ .mmx, null, null, null }, | 14567 | .required_features = .{ .sse, null, null, null }, |
| 7256 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, | 14568 | .src_constraints = .{ |
| | 14569 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| | 14570 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| | 14571 | }, |
| 7257 | .patterns = &.{ | 14572 | .patterns = &.{ |
| 7258 | .{ .src = .{ .to_mut_mm, .mem } }, | 14573 | .{ .src = .{ .to_mut_sse, .mem } }, |
| 7259 | .{ .src = .{ .mem, .to_mut_mm }, .commute = .{ 0, 1 } }, | 14574 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 7260 | .{ .src = .{ .to_mut_mm, .to_mm } }, | 14575 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 7261 | }, | 14576 | }, |
| 7262 | .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{ | 14577 | .dst_temps = .{.{ .ref_mask = .{ |
| 7263 | .kind = .all, | 14578 | .ref = .src0, |
| 7264 | .inverted = switch (cc) { | 14579 | .info = .{ .kind = .all, .scalar = .dword }, |
| 7265 | else => unreachable, | 14580 | } }}, |
| 7266 | .e => false, | | |
| 7267 | .ne => true, | | |
| 7268 | }, | | |
| 7269 | .scalar = .byte, | | |
| 7270 | } } }}, | | |
| 7271 | .each = .{ .once = &.{ | 14581 | .each = .{ .once = &.{ |
| 7272 | .{ ._, .p_b, .cmpeq, .dst0q, .src1q, ._, ._ }, | 14582 | .{ ._, ._ps, .cmp, .dst0x, .src1x, .ui(switch (cc) { |
| | 14583 | else => unreachable, |
| | 14584 | .e => 0b00000, |
| | 14585 | .ne => 0b00100, |
| | 14586 | }), ._ }, |
| 7273 | } }, | 14587 | } }, |
| 7274 | }, .{ | 14588 | }, .{ |
| 7275 | .required_features = .{ .mmx, null, null, null }, | 14589 | .required_features = .{ .avx, null, null, null }, |
| 7276 | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, | 14590 | .src_constraints = .{ |
| | 14591 | .{ .scalar_float = .{ .of = .yword, .is = .dword } }, |
| | 14592 | .{ .scalar_float = .{ .of = .yword, .is = .dword } }, |
| | 14593 | }, |
| 7277 | .patterns = &.{ | 14594 | .patterns = &.{ |
| 7278 | .{ .src = .{ .to_mut_mm, .mem } }, | 14595 | .{ .src = .{ .to_sse, .mem } }, |
| 7279 | .{ .src = .{ .mem, .to_mut_mm }, .commute = .{ 0, 1 } }, | 14596 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 7280 | .{ .src = .{ .to_mut_mm, .to_mm } }, | 14597 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7281 | }, | 14598 | }, |
| 7282 | .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{ | 14599 | .dst_temps = .{.{ .mut_rc_mask = .{ |
| 7283 | .kind = .all, | 14600 | .ref = .src0, |
| 7284 | .inverted = switch (cc) { | 14601 | .rc = .sse, |
| 7285 | else => unreachable, | 14602 | .info = .{ .kind = .all, .scalar = .dword }, |
| 7286 | .e => false, | 14603 | } }}, |
| 7287 | .ne => true, | | |
| 7288 | }, | | |
| 7289 | .scalar = .word, | | |
| 7290 | } } }}, | | |
| 7291 | .each = .{ .once = &.{ | 14604 | .each = .{ .once = &.{ |
| 7292 | .{ ._, .p_w, .cmpeq, .dst0q, .src1q, ._, ._ }, | 14605 | .{ ._, .v_ps, .cmp, .dst0y, .src0y, .src1y, .ui(switch (cc) { |
| | 14606 | else => unreachable, |
| | 14607 | .e => 0b00000, |
| | 14608 | .ne => 0b00100, |
| | 14609 | }) }, |
| 7293 | } }, | 14610 | } }, |
| 7294 | }, .{ | 14611 | }, .{ |
| 7295 | .required_features = .{ .mmx, null, null, null }, | 14612 | .required_features = .{ .avx, null, null, null }, |
| 7296 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, | 14613 | .src_constraints = .{ |
| | 14614 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| | 14615 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| | 14616 | }, |
| 7297 | .patterns = &.{ | 14617 | .patterns = &.{ |
| 7298 | .{ .src = .{ .to_mut_mm, .mem } }, | 14618 | .{ .src = .{ .to_sse, .mem } }, |
| 7299 | .{ .src = .{ .mem, .to_mut_mm }, .commute = .{ 0, 1 } }, | 14619 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 7300 | .{ .src = .{ .to_mut_mm, .to_mm } }, | 14620 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7301 | }, | 14621 | }, |
| 7302 | .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{ | 14622 | .dst_temps = .{.{ .mut_rc_mask = .{ |
| 7303 | .kind = .all, | 14623 | .ref = .src0, |
| 7304 | .inverted = switch (cc) { | 14624 | .rc = .sse, |
| 7305 | else => unreachable, | 14625 | .info = .{ .kind = .all, .scalar = .qword }, |
| 7306 | .e => false, | 14626 | } }}, |
| 7307 | .ne => true, | | |
| 7308 | }, | | |
| 7309 | .scalar = .dword, | | |
| 7310 | } } }}, | | |
| 7311 | .each = .{ .once = &.{ | 14627 | .each = .{ .once = &.{ |
| 7312 | .{ ._, .p_d, .cmpeq, .dst0q, .src1q, ._, ._ }, | 14628 | .{ ._, .v_sd, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) { |
| | 14629 | else => unreachable, |
| | 14630 | .e => 0b00000, |
| | 14631 | .ne => 0b00100, |
| | 14632 | }) }, |
| 7313 | } }, | 14633 | } }, |
| 7314 | }, .{ | 14634 | }, .{ |
| 7315 | .src_constraints = .{ .{ .bool_vec = .byte }, .{ .bool_vec = .byte } }, | 14635 | .required_features = .{ .sse2, null, null, null }, |
| | 14636 | .src_constraints = .{ |
| | 14637 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| | 14638 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| | 14639 | }, |
| 7316 | .patterns = &.{ | 14640 | .patterns = &.{ |
| 7317 | .{ .src = .{ .mut_mem, .imm8 } }, | 14641 | .{ .src = .{ .to_mut_sse, .mem } }, |
| 7318 | .{ .src = .{ .imm8, .mut_mem }, .commute = .{ 0, 1 } }, | 14642 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 7319 | .{ .src = .{ .to_mut_gpr, .imm8 } }, | 14643 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 7320 | .{ .src = .{ .imm8, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 7321 | .{ .src = .{ .mut_mem, .to_gpr } }, | | |
| 7322 | .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } }, | | |
| 7323 | .{ .src = .{ .to_mut_gpr, .mem } }, | | |
| 7324 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 7325 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | | |
| 7326 | }, | 14644 | }, |
| 7327 | .dst_temps = .{.{ .ref = .src0 }}, | 14645 | .dst_temps = .{.{ .ref_mask = .{ |
| 7328 | .clobbers = .{ .eflags = true }, | 14646 | .ref = .src0, |
| 7329 | .each = .{ .once = switch (cc) { | 14647 | .info = .{ .kind = .all, .scalar = .qword }, |
| 7330 | else => unreachable, | 14648 | } }}, |
| 7331 | .e => &.{ | 14649 | .each = .{ .once = &.{ |
| 7332 | .{ ._, ._, .xor, .dst0b, .src1b, ._, ._ }, | 14650 | .{ ._, ._sd, .cmp, .dst0x, .src1x, .ui(switch (cc) { |
| 7333 | .{ ._, ._, .not, .dst0b, ._, ._, ._ }, | 14651 | else => unreachable, |
| 7334 | }, | 14652 | .e => 0b00000, |
| 7335 | .ne => &.{ | 14653 | .ne => 0b00100, |
| 7336 | .{ ._, ._, .xor, .dst0b, .src1b, ._, ._ }, | 14654 | }), ._ }, |
| 7337 | }, | | |
| 7338 | } }, | 14655 | } }, |
| 7339 | }, .{ | 14656 | }, .{ |
| 7340 | .src_constraints = .{ .{ .bool_vec = .word }, .{ .bool_vec = .word } }, | 14657 | .required_features = .{ .avx, null, null, null }, |
| | 14658 | .src_constraints = .{ |
| | 14659 | .{ .scalar_float = .{ .of = .xword, .is = .qword } }, |
| | 14660 | .{ .scalar_float = .{ .of = .xword, .is = .qword } }, |
| | 14661 | }, |
| 7341 | .patterns = &.{ | 14662 | .patterns = &.{ |
| 7342 | .{ .src = .{ .mut_mem, .imm16 } }, | 14663 | .{ .src = .{ .to_sse, .mem } }, |
| 7343 | .{ .src = .{ .imm16, .mut_mem }, .commute = .{ 0, 1 } }, | 14664 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 7344 | .{ .src = .{ .to_mut_gpr, .imm16 } }, | 14665 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7345 | .{ .src = .{ .imm16, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 7346 | .{ .src = .{ .mut_mem, .to_gpr } }, | | |
| 7347 | .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } }, | | |
| 7348 | .{ .src = .{ .to_mut_gpr, .mem } }, | | |
| 7349 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 7350 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | | |
| 7351 | }, | 14666 | }, |
| 7352 | .dst_temps = .{.{ .ref = .src0 }}, | 14667 | .dst_temps = .{.{ .mut_rc_mask = .{ |
| 7353 | .clobbers = .{ .eflags = true }, | 14668 | .ref = .src0, |
| 7354 | .each = .{ .once = switch (cc) { | 14669 | .rc = .sse, |
| 7355 | else => unreachable, | 14670 | .info = .{ .kind = .all, .scalar = .qword }, |
| 7356 | .e => &.{ | 14671 | } }}, |
| 7357 | .{ ._, ._, .xor, .dst0w, .src1w, ._, ._ }, | 14672 | .each = .{ .once = &.{ |
| 7358 | .{ ._, ._, .not, .dst0w, ._, ._, ._ }, | 14673 | .{ ._, .v_pd, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) { |
| 7359 | }, | 14674 | else => unreachable, |
| 7360 | .ne => &.{ | 14675 | .e => 0b00000, |
| 7361 | .{ ._, ._, .xor, .dst0w, .src1w, ._, ._ }, | 14676 | .ne => 0b00100, |
| 7362 | }, | 14677 | }) }, |
| 7363 | } }, | 14678 | } }, |
| 7364 | }, .{ | 14679 | }, .{ |
| 7365 | .src_constraints = .{ .{ .bool_vec = .dword }, .{ .bool_vec = .dword } }, | 14680 | .required_features = .{ .sse2, null, null, null }, |
| | 14681 | .src_constraints = .{ |
| | 14682 | .{ .scalar_float = .{ .of = .xword, .is = .qword } }, |
| | 14683 | .{ .scalar_float = .{ .of = .xword, .is = .qword } }, |
| | 14684 | }, |
| 7366 | .patterns = &.{ | 14685 | .patterns = &.{ |
| 7367 | .{ .src = .{ .mut_mem, .imm32 } }, | 14686 | .{ .src = .{ .to_mut_sse, .mem } }, |
| 7368 | .{ .src = .{ .imm32, .mut_mem }, .commute = .{ 0, 1 } }, | 14687 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 7369 | .{ .src = .{ .to_mut_gpr, .imm32 } }, | 14688 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 7370 | .{ .src = .{ .imm32, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 7371 | .{ .src = .{ .mut_mem, .to_gpr } }, | | |
| 7372 | .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } }, | | |
| 7373 | .{ .src = .{ .to_mut_gpr, .mem } }, | | |
| 7374 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 7375 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | | |
| 7376 | }, | 14689 | }, |
| 7377 | .dst_temps = .{.{ .ref = .src0 }}, | 14690 | .dst_temps = .{.{ .ref_mask = .{ |
| 7378 | .clobbers = .{ .eflags = true }, | 14691 | .ref = .src0, |
| 7379 | .each = .{ .once = switch (cc) { | 14692 | .info = .{ .kind = .all, .scalar = .qword }, |
| 7380 | else => unreachable, | 14693 | } }}, |
| 7381 | .e => &.{ | 14694 | .each = .{ .once = &.{ |
| 7382 | .{ ._, ._, .xor, .dst0d, .src1d, ._, ._ }, | 14695 | .{ ._, ._pd, .cmp, .dst0x, .src1x, .ui(switch (cc) { |
| 7383 | .{ ._, ._, .not, .dst0d, ._, ._, ._ }, | 14696 | else => unreachable, |
| 7384 | }, | 14697 | .e => 0b00000, |
| 7385 | .ne => &.{ | 14698 | .ne => 0b00100, |
| 7386 | .{ ._, ._, .xor, .dst0d, .src1d, ._, ._ }, | 14699 | }), ._ }, |
| 7387 | }, | | |
| 7388 | } }, | 14700 | } }, |
| 7389 | }, .{ | 14701 | }, .{ |
| 7390 | .required_features = .{ .@"64bit", null, null, null }, | 14702 | .required_features = .{ .avx, null, null, null }, |
| 7391 | .src_constraints = .{ .{ .bool_vec = .qword }, .{ .bool_vec = .qword } }, | 14703 | .src_constraints = .{ |
| | 14704 | .{ .scalar_float = .{ .of = .yword, .is = .qword } }, |
| | 14705 | .{ .scalar_float = .{ .of = .yword, .is = .qword } }, |
| | 14706 | }, |
| 7392 | .patterns = &.{ | 14707 | .patterns = &.{ |
| 7393 | .{ .src = .{ .mut_mem, .simm32 } }, | 14708 | .{ .src = .{ .to_sse, .mem } }, |
| 7394 | .{ .src = .{ .simm32, .mut_mem }, .commute = .{ 0, 1 } }, | 14709 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 7395 | .{ .src = .{ .to_mut_gpr, .simm32 } }, | 14710 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7396 | .{ .src = .{ .simm32, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 7397 | .{ .src = .{ .mut_mem, .to_gpr } }, | | |
| 7398 | .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } }, | | |
| 7399 | .{ .src = .{ .to_mut_gpr, .mem } }, | | |
| 7400 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, | | |
| 7401 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, | | |
| 7402 | }, | 14711 | }, |
| 7403 | .dst_temps = .{.{ .ref = .src0 }}, | 14712 | .dst_temps = .{.{ .mut_rc_mask = .{ |
| 7404 | .clobbers = .{ .eflags = true }, | 14713 | .ref = .src0, |
| 7405 | .each = .{ .once = switch (cc) { | 14714 | .rc = .sse, |
| 7406 | else => unreachable, | 14715 | .info = .{ .kind = .all, .scalar = .qword }, |
| 7407 | .e => &.{ | 14716 | } }}, |
| 7408 | .{ ._, ._, .xor, .dst0q, .src1q, ._, ._ }, | 14717 | .each = .{ .once = &.{ |
| 7409 | .{ ._, ._, .not, .dst0q, ._, ._, ._ }, | 14718 | .{ ._, .v_pd, .cmp, .dst0y, .src0y, .src1y, .ui(switch (cc) { |
| 7410 | }, | 14719 | else => unreachable, |
| 7411 | .ne => &.{ | 14720 | .e => 0b00000, |
| 7412 | .{ ._, ._, .xor, .dst0q, .src1q, ._, ._ }, | 14721 | .ne => 0b00100, |
| 7413 | }, | 14722 | }) }, |
| 7414 | } }, | 14723 | } }, |
| 7415 | }, .{ | 14724 | }, .{ |
| 7416 | .src_constraints = .{ .any_bool_vec, .any_bool_vec }, | 14725 | .required_features = .{ .f16c, .slow_incdec, null, null }, |
| | 14726 | .src_constraints = .{ |
| | 14727 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, |
| | 14728 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, |
| | 14729 | }, |
| 7417 | .patterns = &.{ | 14730 | .patterns = &.{ |
| 7418 | .{ .src = .{ .to_mem, .to_mem } }, | 14731 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7419 | }, | 14732 | }, |
| 7420 | .extra_temps = .{ | 14733 | .extra_temps = .{ |
| 7421 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 14734 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7422 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 14735 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 14736 | .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } }, |
| | 14737 | .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } }, |
| | 14738 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 7423 | .unused, | 14739 | .unused, |
| 7424 | .unused, | 14740 | .unused, |
| 7425 | .unused, | 14741 | .unused, |
| ... | @@ -7427,1367 +14743,2028 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -7427,1367 +14743,2028 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7427 | }, | 14743 | }, |
| 7428 | .dst_temps = .{.mem}, | 14744 | .dst_temps = .{.mem}, |
| 7429 | .clobbers = .{ .eflags = true }, | 14745 | .clobbers = .{ .eflags = true }, |
| 7430 | .each = .{ .once = switch (cc) { | 14746 | .each = .{ .once = &.{ |
| 7431 | else => unreachable, | 14747 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7432 | .e => &.{ | 14748 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 7433 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 14749 | .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7434 | .{ .@"0:", ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ }, | 14750 | .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7435 | .{ ._, ._, .xor, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ }, | 14751 | .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .ui(switch (cc) { |
| 7436 | .{ ._, ._, .not, .tmp1p, ._, ._, ._ }, | 14752 | else => unreachable, |
| 7437 | .{ ._, ._, .mov, .memia(.dst0p, .tmp0, .add_size), .tmp1p, ._, ._ }, | 14753 | .e => 0b00000, |
| 7438 | .{ ._, ._, .add, .tmp0p, .sa(.tmp1, .add_size), ._, ._ }, | 14754 | .ne => 0b00100, |
| 7439 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 14755 | }) }, |
| 7440 | }, | 14756 | .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ }, |
| 7441 | .ne => &.{ | 14757 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, |
| 7442 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 14758 | .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, |
| 7443 | .{ .@"0:", ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ }, | 14759 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 7444 | .{ ._, ._, .xor, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ }, | 14760 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7445 | .{ ._, ._, .mov, .memia(.dst0p, .tmp0, .add_size), .tmp1p, ._, ._ }, | | |
| 7446 | .{ ._, ._, .add, .tmp0p, .sa(.tmp1, .add_size), ._, ._ }, | | |
| 7447 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 7448 | }, | | |
| 7449 | } }, | 14761 | } }, |
| 7450 | }, .{ | 14762 | }, .{ |
| 7451 | .required_features = .{ .avx2, null, null, null }, | 14763 | .required_features = .{ .f16c, null, null, null }, |
| 7452 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, | 14764 | .src_constraints = .{ |
| | 14765 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, |
| | 14766 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, |
| | 14767 | }, |
| 7453 | .patterns = &.{ | 14768 | .patterns = &.{ |
| 7454 | .{ .src = .{ .to_mem, .to_mem } }, | 14769 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7455 | }, | 14770 | }, |
| 7456 | .extra_temps = .{ | 14771 | .extra_temps = .{ |
| 7457 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 14772 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7458 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 14773 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 7459 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 14774 | .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } }, |
| 7460 | .{ .kind = .{ .rc = .sse } }, | 14775 | .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } }, |
| | 14776 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 14777 | .unused, |
| | 14778 | .unused, |
| 7461 | .unused, | 14779 | .unused, |
| 7462 | .unused, | 14780 | .unused, |
| 7463 | }, | 14781 | }, |
| 7464 | .dst_temps = .{.mem}, | 14782 | .dst_temps = .{.mem}, |
| 7465 | .clobbers = .{ .eflags = true }, | 14783 | .clobbers = .{ .eflags = true }, |
| 7466 | .each = .{ .once = switch (cc) { | 14784 | .each = .{ .once = &.{ |
| 7467 | else => unreachable, | 14785 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7468 | .e => &.{ | 14786 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 7469 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 14787 | .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7470 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 14788 | .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7471 | .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | 14789 | .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .ui(switch (cc) { |
| 7472 | .{ ._, .vp_b, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, | 14790 | else => unreachable, |
| 7473 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, | 14791 | .e => 0b00000, |
| 7474 | .{ ._, ._, .mov, .memi(.dst0d, .tmp1), .tmp2d, ._, ._ }, | 14792 | .ne => 0b00100, |
| 7475 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, | 14793 | }) }, |
| 7476 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | 14794 | .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ }, |
| 7477 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 14795 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, |
| 7478 | }, | 14796 | .{ ._, ._c, .in, .tmp1p, ._, ._, ._ }, |
| 7479 | .ne => &.{ | 14797 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 7480 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 14798 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7481 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | | |
| 7482 | .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | | |
| 7483 | .{ ._, .vp_b, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, | | |
| 7484 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, | | |
| 7485 | .{ ._, ._, .not, .tmp2d, ._, ._, ._ }, | | |
| 7486 | .{ ._, ._, .mov, .memi(.dst0d, .tmp1), .tmp2d, ._, ._ }, | | |
| 7487 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, | | |
| 7488 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | | |
| 7489 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 7490 | }, | | |
| 7491 | } }, | 14799 | } }, |
| 7492 | }, .{ | 14800 | }, .{ |
| 7493 | .required_features = .{ .avx2, null, null, null }, | 14801 | .required_features = .{ .avx, .slow_incdec, null, null }, |
| 7494 | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, | 14802 | .dst_constraints = .{.{ .bool_vec = .dword }}, |
| | 14803 | .src_constraints = .{ |
| | 14804 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 14805 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 14806 | }, |
| 7495 | .patterns = &.{ | 14807 | .patterns = &.{ |
| 7496 | .{ .src = .{ .to_mem, .to_mem } }, | 14808 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7497 | }, | 14809 | }, |
| | 14810 | .call_frame = .{ .alignment = .@"16" }, |
| 7498 | .extra_temps = .{ | 14811 | .extra_temps = .{ |
| 7499 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | | |
| 7500 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 14812 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 7501 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, | 14813 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 7502 | .{ .kind = .{ .rc = .sse } }, | 14814 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| | 14815 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 14816 | else => unreachable, |
| | 14817 | .e => "__eqhf2", |
| | 14818 | .ne => "__nehf2", |
| | 14819 | } } } }, |
| | 14820 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| | 14821 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 14822 | .{ .type = .u32, .kind = .{ .reg = .edx } }, |
| 7503 | .unused, | 14823 | .unused, |
| 7504 | .unused, | 14824 | .unused, |
| 7505 | }, | 14825 | }, |
| 7506 | .dst_temps = .{.mem}, | 14826 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 7507 | .clobbers = .{ .eflags = true }, | 14827 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 7508 | .each = .{ .once = switch (cc) { | 14828 | .each = .{ .once = &.{ |
| 7509 | else => unreachable, | 14829 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 7510 | .e => &.{ | 14830 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 7511 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 14831 | .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ }, |
| 7512 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 14832 | .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0) }, |
| 7513 | .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | 14833 | .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0) }, |
| 7514 | .{ ._, .vp_w, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, | 14834 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 7515 | .{ ._, .vp_b, .ackssw, .tmp3y, .tmp3y, .tmp3y, ._ }, | 14835 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| 7516 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, | 14836 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, |
| 7517 | .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, | 14837 | .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ }, |
| 7518 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, | 14838 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 7519 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | 14839 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, |
| 7520 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 14840 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, |
| 7521 | }, | 14841 | .{ ._, ._, .add, .tmp0d, .si(1), ._, ._ }, |
| 7522 | .ne => &.{ | 14842 | .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ }, |
| 7523 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 14843 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| 7524 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | | |
| 7525 | .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | | |
| 7526 | .{ ._, .vp_w, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, | | |
| 7527 | .{ ._, .vp_b, .ackssw, .tmp3y, .tmp3y, .tmp3y, ._ }, | | |
| 7528 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, | | |
| 7529 | .{ ._, ._, .not, .tmp2d, ._, ._, ._ }, | | |
| 7530 | .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, | | |
| 7531 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, | | |
| 7532 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | | |
| 7533 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 7534 | }, | | |
| 7535 | } }, | 14844 | } }, |
| 7536 | }, .{ | 14845 | }, .{ |
| 7537 | .required_features = .{ .avx2, null, null, null }, | 14846 | .required_features = .{ .avx, null, null, null }, |
| 7538 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, | 14847 | .dst_constraints = .{.{ .bool_vec = .dword }}, |
| | 14848 | .src_constraints = .{ |
| | 14849 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 14850 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 14851 | }, |
| 7539 | .patterns = &.{ | 14852 | .patterns = &.{ |
| 7540 | .{ .src = .{ .to_mem, .to_mem } }, | 14853 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7541 | }, | 14854 | }, |
| | 14855 | .call_frame = .{ .alignment = .@"16" }, |
| 7542 | .extra_temps = .{ | 14856 | .extra_temps = .{ |
| 7543 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | | |
| 7544 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 14857 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 7545 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 14858 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 7546 | .{ .kind = .{ .rc = .sse } }, | 14859 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| | 14860 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 14861 | else => unreachable, |
| | 14862 | .e => "__eqhf2", |
| | 14863 | .ne => "__nehf2", |
| | 14864 | } } } }, |
| | 14865 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| | 14866 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 14867 | .{ .type = .u32, .kind = .{ .reg = .edx } }, |
| 7547 | .unused, | 14868 | .unused, |
| 7548 | .unused, | 14869 | .unused, |
| 7549 | }, | 14870 | }, |
| 7550 | .dst_temps = .{.mem}, | 14871 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 7551 | .clobbers = .{ .eflags = true }, | 14872 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 7552 | .each = .{ .once = switch (cc) { | 14873 | .each = .{ .once = &.{ |
| 7553 | else => unreachable, | 14874 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 7554 | .e => &.{ | 14875 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 7555 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 14876 | .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ }, |
| 7556 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 14877 | .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0) }, |
| 7557 | .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | 14878 | .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0) }, |
| 7558 | .{ ._, .vp_d, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, | 14879 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 7559 | .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ }, | 14880 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| 7560 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, | 14881 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, |
| 7561 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, | 14882 | .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ }, |
| 7562 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | 14883 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 7563 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 14884 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, |
| 7564 | }, | 14885 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, |
| 7565 | .ne => &.{ | 14886 | .{ ._, ._c, .in, .tmp0d, ._, ._, ._ }, |
| 7566 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 14887 | .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ }, |
| 7567 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 14888 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| 7568 | .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | | |
| 7569 | .{ ._, .vp_d, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, | | |
| 7570 | .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ }, | | |
| 7571 | .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, | | |
| 7572 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, | | |
| 7573 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, | | |
| 7574 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | | |
| 7575 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 7576 | }, | | |
| 7577 | } }, | 14889 | } }, |
| 7578 | }, .{ | 14890 | }, .{ |
| 7579 | .required_features = .{ .avx2, null, null, null }, | 14891 | .required_features = .{ .sse2, .slow_incdec, null, null }, |
| 7580 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, | 14892 | .dst_constraints = .{.{ .bool_vec = .dword }}, |
| | 14893 | .src_constraints = .{ |
| | 14894 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 14895 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 14896 | }, |
| 7581 | .patterns = &.{ | 14897 | .patterns = &.{ |
| 7582 | .{ .src = .{ .to_mem, .to_mem } }, | 14898 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7583 | }, | 14899 | }, |
| | 14900 | .call_frame = .{ .alignment = .@"16" }, |
| 7584 | .extra_temps = .{ | 14901 | .extra_temps = .{ |
| 7585 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 14902 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 7586 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, | 14903 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 7587 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 14904 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| 7588 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 14905 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| 7589 | .{ .kind = .{ .rc = .sse } }, | 14906 | else => unreachable, |
| | 14907 | .e => "__eqhf2", |
| | 14908 | .ne => "__nehf2", |
| | 14909 | } } } }, |
| | 14910 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| | 14911 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 14912 | .{ .type = .u32, .kind = .{ .reg = .edx } }, |
| | 14913 | .unused, |
| 7590 | .unused, | 14914 | .unused, |
| 7591 | }, | 14915 | }, |
| 7592 | .dst_temps = .{.mem}, | 14916 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 7593 | .clobbers = .{ .eflags = true }, | 14917 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 7594 | .each = .{ .once = switch (cc) { | 14918 | .each = .{ .once = &.{ |
| 7595 | else => unreachable, | 14919 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 7596 | .e => &.{ | 14920 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 7597 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 14921 | .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| 7598 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 14922 | .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ }, |
| 7599 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | 14923 | .{ ._, .p_w, .insr, .tmp1x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ }, |
| 7600 | .{ .@"0:", .v_dqu, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | 14924 | .{ ._, .p_w, .insr, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ }, |
| 7601 | .{ ._, .vp_q, .cmpeq, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._ }, | 14925 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 7602 | .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4y, ._, ._ }, | 14926 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| 7603 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | 14927 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, |
| 7604 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | 14928 | .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ }, |
| 7605 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, | 14929 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 7606 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | 14930 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, |
| 7607 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, | 14931 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, |
| 7608 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | 14932 | .{ ._, ._, .add, .tmp0d, .si(1), ._, ._ }, |
| 7609 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, | 14933 | .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ }, |
| 7610 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, | 14934 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| 7611 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | | |
| 7612 | .{ .@"1:", ._, .add, .tmp0p, .si(32), ._, ._ }, | | |
| 7613 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 7614 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | | |
| 7615 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | | |
| 7616 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | | |
| 7617 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, | | |
| 7618 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, | | |
| 7619 | }, | | |
| 7620 | .ne => &.{ | | |
| 7621 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | | |
| 7622 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | | |
| 7623 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | | |
| 7624 | .{ .@"0:", .v_dqu, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | | |
| 7625 | .{ ._, .vp_q, .cmpeq, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._ }, | | |
| 7626 | .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4y, ._, ._ }, | | |
| 7627 | .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ }, | | |
| 7628 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | | |
| 7629 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | | |
| 7630 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, | | |
| 7631 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | | |
| 7632 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, | | |
| 7633 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | | |
| 7634 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, | | |
| 7635 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, | | |
| 7636 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | | |
| 7637 | .{ .@"1:", ._, .add, .tmp0p, .si(32), ._, ._ }, | | |
| 7638 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 7639 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | | |
| 7640 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | | |
| 7641 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | | |
| 7642 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, | | |
| 7643 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, | | |
| 7644 | }, | | |
| 7645 | } }, | 14935 | } }, |
| 7646 | }, .{ | 14936 | }, .{ |
| 7647 | .required_features = .{ .avx, null, null, null }, | 14937 | .required_features = .{ .sse2, null, null, null }, |
| 7648 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, | 14938 | .dst_constraints = .{.{ .bool_vec = .dword }}, |
| | 14939 | .src_constraints = .{ |
| | 14940 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 14941 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 14942 | }, |
| 7649 | .patterns = &.{ | 14943 | .patterns = &.{ |
| 7650 | .{ .src = .{ .to_mem, .to_mem } }, | 14944 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7651 | }, | 14945 | }, |
| | 14946 | .call_frame = .{ .alignment = .@"16" }, |
| 7652 | .extra_temps = .{ | 14947 | .extra_temps = .{ |
| 7653 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | | |
| 7654 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 14948 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 7655 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, | 14949 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 7656 | .{ .kind = .{ .rc = .sse } }, | 14950 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| | 14951 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 14952 | else => unreachable, |
| | 14953 | .e => "__eqhf2", |
| | 14954 | .ne => "__nehf2", |
| | 14955 | } } } }, |
| | 14956 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| | 14957 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 14958 | .{ .type = .u32, .kind = .{ .reg = .edx } }, |
| | 14959 | .unused, |
| | 14960 | .unused, |
| | 14961 | }, |
| | 14962 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 14963 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| | 14964 | .each = .{ .once = &.{ |
| | 14965 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| | 14966 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| | 14967 | .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| | 14968 | .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ }, |
| | 14969 | .{ ._, .p_w, .insr, .tmp1x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ }, |
| | 14970 | .{ ._, .p_w, .insr, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ }, |
| | 14971 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| | 14972 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| | 14973 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, |
| | 14974 | .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ }, |
| | 14975 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| | 14976 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, |
| | 14977 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, |
| | 14978 | .{ ._, ._c, .in, .tmp0d, ._, ._, ._ }, |
| | 14979 | .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ }, |
| | 14980 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| | 14981 | } }, |
| | 14982 | }, .{ |
| | 14983 | .required_features = .{ .sse, .slow_incdec, null, null }, |
| | 14984 | .dst_constraints = .{.{ .bool_vec = .dword }}, |
| | 14985 | .src_constraints = .{ |
| | 14986 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 14987 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 14988 | }, |
| | 14989 | .patterns = &.{ |
| | 14990 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 14991 | }, |
| | 14992 | .call_frame = .{ .alignment = .@"16" }, |
| | 14993 | .extra_temps = .{ |
| | 14994 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 14995 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| | 14996 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| | 14997 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 14998 | else => unreachable, |
| | 14999 | .e => "__eqhf2", |
| | 15000 | .ne => "__nehf2", |
| | 15001 | } } } }, |
| | 15002 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| | 15003 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 15004 | .{ .type = .u32, .kind = .{ .reg = .edx } }, |
| | 15005 | .{ .type = .vector_8_f16, .kind = .mem }, |
| | 15006 | .unused, |
| | 15007 | }, |
| | 15008 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 15009 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| | 15010 | .each = .{ .once = &.{ |
| | 15011 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| | 15012 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| | 15013 | .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ }, |
| | 15014 | .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ }, |
| | 15015 | .{ ._, ._ps, .mova, .tmp1x, .mem(.tmp7x), ._, ._ }, |
| | 15016 | .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ }, |
| | 15017 | .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ }, |
| | 15018 | .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp7x), ._, ._ }, |
| | 15019 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| | 15020 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| | 15021 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, |
| | 15022 | .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ }, |
| | 15023 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| | 15024 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, |
| | 15025 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, |
| | 15026 | .{ ._, ._, .add, .tmp0d, .si(1), ._, ._ }, |
| | 15027 | .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ }, |
| | 15028 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| | 15029 | } }, |
| | 15030 | }, .{ |
| | 15031 | .required_features = .{ .sse, null, null, null }, |
| | 15032 | .dst_constraints = .{.{ .bool_vec = .dword }}, |
| | 15033 | .src_constraints = .{ |
| | 15034 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 15035 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 15036 | }, |
| | 15037 | .patterns = &.{ |
| | 15038 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 15039 | }, |
| | 15040 | .call_frame = .{ .alignment = .@"16" }, |
| | 15041 | .extra_temps = .{ |
| | 15042 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 15043 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| | 15044 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| | 15045 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 15046 | else => unreachable, |
| | 15047 | .e => "__eqhf2", |
| | 15048 | .ne => "__nehf2", |
| | 15049 | } } } }, |
| | 15050 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| | 15051 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 15052 | .{ .type = .u32, .kind = .{ .reg = .edx } }, |
| | 15053 | .{ .type = .vector_8_f16, .kind = .mem }, |
| 7657 | .unused, | 15054 | .unused, |
| | 15055 | }, |
| | 15056 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 15057 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| | 15058 | .each = .{ .once = &.{ |
| | 15059 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| | 15060 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| | 15061 | .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ }, |
| | 15062 | .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ }, |
| | 15063 | .{ ._, ._ps, .mova, .tmp1x, .mem(.tmp7x), ._, ._ }, |
| | 15064 | .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ }, |
| | 15065 | .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ }, |
| | 15066 | .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp7x), ._, ._ }, |
| | 15067 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| | 15068 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| | 15069 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, |
| | 15070 | .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ }, |
| | 15071 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| | 15072 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, |
| | 15073 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, |
| | 15074 | .{ ._, ._c, .in, .tmp0d, ._, ._, ._ }, |
| | 15075 | .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ }, |
| | 15076 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| | 15077 | } }, |
| | 15078 | }, .{ |
| | 15079 | .required_features = .{ .@"64bit", .avx, .slow_incdec, null }, |
| | 15080 | .src_constraints = .{ |
| | 15081 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 15082 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 15083 | }, |
| | 15084 | .patterns = &.{ |
| | 15085 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 15086 | }, |
| | 15087 | .call_frame = .{ .alignment = .@"16" }, |
| | 15088 | .extra_temps = .{ |
| | 15089 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 15090 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 15091 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| | 15092 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| | 15093 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 15094 | else => unreachable, |
| | 15095 | .e => "__eqhf2", |
| | 15096 | .ne => "__nehf2", |
| | 15097 | } } } }, |
| | 15098 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| | 15099 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 15100 | .{ .type = .u64, .kind = .{ .reg = .rdx } }, |
| 7658 | .unused, | 15101 | .unused, |
| 7659 | }, | 15102 | }, |
| 7660 | .dst_temps = .{.mem}, | 15103 | .dst_temps = .{.mem}, |
| 7661 | .clobbers = .{ .eflags = true }, | 15104 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 7662 | .each = .{ .once = switch (cc) { | 15105 | .each = .{ .once = &.{ |
| 7663 | else => unreachable, | 15106 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 7664 | .e => &.{ | 15107 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 7665 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 15108 | .{ .@"0:", .vp_, .xor, .tmp3x, .tmp3x, .tmp3x, ._ }, |
| 7666 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 15109 | .{ ._, .vp_w, .insr, .tmp2x, .tmp3x, .memsi(.src0w, .@"2", .tmp0), .ui(0) }, |
| 7667 | .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 15110 | .{ ._, .vp_w, .insr, .tmp3x, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0) }, |
| 7668 | .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ }, | 15111 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 7669 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, | 15112 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 7670 | .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, | 15113 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 7671 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, | 15114 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 7672 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 15115 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, |
| 7673 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 15116 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, |
| 7674 | }, | 15117 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, |
| 7675 | .ne => &.{ | 15118 | .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 1), ._, ._ }, |
| 7676 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 15119 | .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, |
| 7677 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 15120 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 7678 | .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 15121 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 7679 | .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ }, | 15122 | .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ }, |
| 7680 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, | 15123 | .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ }, |
| 7681 | .{ ._, ._, .not, .tmp2d, ._, ._, ._ }, | 15124 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 7682 | .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, | 15125 | .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ }, |
| 7683 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, | 15126 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| 7684 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 15127 | .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, |
| 7685 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 15128 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 7686 | }, | 15129 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| | 15130 | .{ ._, ._r, .sh, .tmp5d, .si(9), ._, ._ }, |
| | 15131 | .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp5), .tmp1q, ._, ._ }, |
| 7687 | } }, | 15132 | } }, |
| 7688 | }, .{ | 15133 | }, .{ |
| 7689 | .required_features = .{ .avx, null, null, null }, | 15134 | .required_features = .{ .@"64bit", .avx, null, null }, |
| 7690 | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, | 15135 | .src_constraints = .{ |
| | 15136 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 15137 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 15138 | }, |
| 7691 | .patterns = &.{ | 15139 | .patterns = &.{ |
| 7692 | .{ .src = .{ .to_mem, .to_mem } }, | 15140 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7693 | }, | 15141 | }, |
| | 15142 | .call_frame = .{ .alignment = .@"16" }, |
| 7694 | .extra_temps = .{ | 15143 | .extra_temps = .{ |
| 7695 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | | |
| 7696 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 15144 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 7697 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 15145 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 7698 | .{ .kind = .{ .rc = .sse } }, | 15146 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| | 15147 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| | 15148 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 15149 | else => unreachable, |
| | 15150 | .e => "__eqhf2", |
| | 15151 | .ne => "__nehf2", |
| | 15152 | } } } }, |
| | 15153 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| | 15154 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 15155 | .{ .type = .u64, .kind = .{ .reg = .rdx } }, |
| 7699 | .unused, | 15156 | .unused, |
| | 15157 | }, |
| | 15158 | .dst_temps = .{.mem}, |
| | 15159 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| | 15160 | .each = .{ .once = &.{ |
| | 15161 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| | 15162 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 15163 | .{ .@"0:", .vp_, .xor, .tmp3x, .tmp3x, .tmp3x, ._ }, |
| | 15164 | .{ ._, .vp_w, .insr, .tmp2x, .tmp3x, .memsi(.src0w, .@"2", .tmp0), .ui(0) }, |
| | 15165 | .{ ._, .vp_w, .insr, .tmp3x, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0) }, |
| | 15166 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| | 15167 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| | 15168 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| | 15169 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| | 15170 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, |
| | 15171 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, |
| | 15172 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, |
| | 15173 | .{ ._, ._c, .in, .tmp0d, ._, ._, ._ }, |
| | 15174 | .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, |
| | 15175 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 15176 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| | 15177 | .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ }, |
| | 15178 | .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ }, |
| | 15179 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 15180 | .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ }, |
| | 15181 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| | 15182 | .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, |
| | 15183 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 15184 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| | 15185 | .{ ._, ._r, .sh, .tmp5d, .si(9), ._, ._ }, |
| | 15186 | .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp5), .tmp1q, ._, ._ }, |
| | 15187 | } }, |
| | 15188 | }, .{ |
| | 15189 | .required_features = .{ .@"64bit", .sse2, .slow_incdec, null }, |
| | 15190 | .src_constraints = .{ |
| | 15191 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 15192 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 15193 | }, |
| | 15194 | .patterns = &.{ |
| | 15195 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 15196 | }, |
| | 15197 | .call_frame = .{ .alignment = .@"16" }, |
| | 15198 | .extra_temps = .{ |
| | 15199 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 15200 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 15201 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| | 15202 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| | 15203 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 15204 | else => unreachable, |
| | 15205 | .e => "__eqhf2", |
| | 15206 | .ne => "__nehf2", |
| | 15207 | } } } }, |
| | 15208 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| | 15209 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 15210 | .{ .type = .u64, .kind = .{ .reg = .rdx } }, |
| 7700 | .unused, | 15211 | .unused, |
| 7701 | }, | 15212 | }, |
| 7702 | .dst_temps = .{.mem}, | 15213 | .dst_temps = .{.mem}, |
| 7703 | .clobbers = .{ .eflags = true }, | 15214 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 7704 | .each = .{ .once = switch (cc) { | 15215 | .each = .{ .once = &.{ |
| 7705 | else => unreachable, | 15216 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 7706 | .e => &.{ | 15217 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 7707 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 15218 | .{ .@"0:", .p_, .xor, .tmp2x, .tmp2x, ._, ._ }, |
| 7708 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 15219 | .{ ._, .p_w, .insr, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ }, |
| 7709 | .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 15220 | .{ ._, .p_, .xor, .tmp3x, .tmp3x, ._, ._ }, |
| 7710 | .{ ._, .vp_w, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ }, | 15221 | .{ ._, .p_w, .insr, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ }, |
| 7711 | .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ }, | 15222 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 7712 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, | 15223 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 7713 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, | 15224 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 7714 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, | 15225 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 7715 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 15226 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, |
| 7716 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 15227 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, |
| 7717 | }, | 15228 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, |
| 7718 | .ne => &.{ | 15229 | .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 1), ._, ._ }, |
| 7719 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 15230 | .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, |
| 7720 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 15231 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 7721 | .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 15232 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 7722 | .{ ._, .vp_w, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ }, | 15233 | .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ }, |
| 7723 | .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ }, | 15234 | .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ }, |
| 7724 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, | 15235 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 7725 | .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, | 15236 | .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ }, |
| 7726 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, | 15237 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| 7727 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, | 15238 | .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, |
| 7728 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 15239 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 7729 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 15240 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 7730 | }, | 15241 | .{ ._, ._r, .sh, .tmp5d, .si(9), ._, ._ }, |
| | 15242 | .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp5), .tmp1q, ._, ._ }, |
| 7731 | } }, | 15243 | } }, |
| 7732 | }, .{ | 15244 | }, .{ |
| 7733 | .required_features = .{ .avx, null, null, null }, | 15245 | .required_features = .{ .@"64bit", .sse2, null, null }, |
| 7734 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, | 15246 | .src_constraints = .{ |
| | 15247 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 15248 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 15249 | }, |
| 7735 | .patterns = &.{ | 15250 | .patterns = &.{ |
| 7736 | .{ .src = .{ .to_mem, .to_mem } }, | 15251 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7737 | }, | 15252 | }, |
| | 15253 | .call_frame = .{ .alignment = .@"16" }, |
| 7738 | .extra_temps = .{ | 15254 | .extra_temps = .{ |
| 7739 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 15255 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 7740 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, | 15256 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 7741 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 15257 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 7742 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 15258 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| 7743 | .{ .kind = .{ .rc = .sse } }, | 15259 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 15260 | else => unreachable, |
| | 15261 | .e => "__eqhf2", |
| | 15262 | .ne => "__nehf2", |
| | 15263 | } } } }, |
| | 15264 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| | 15265 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 15266 | .{ .type = .u64, .kind = .{ .reg = .rdx } }, |
| 7744 | .unused, | 15267 | .unused, |
| 7745 | }, | 15268 | }, |
| 7746 | .dst_temps = .{.mem}, | 15269 | .dst_temps = .{.mem}, |
| 7747 | .clobbers = .{ .eflags = true }, | 15270 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 7748 | .each = .{ .once = switch (cc) { | 15271 | .each = .{ .once = &.{ |
| 7749 | else => unreachable, | 15272 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 7750 | .e => &.{ | 15273 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 7751 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 15274 | .{ .@"0:", .p_, .xor, .tmp2x, .tmp2x, ._, ._ }, |
| 7752 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 15275 | .{ ._, .p_w, .insr, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ }, |
| 7753 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | 15276 | .{ ._, .p_, .xor, .tmp3x, .tmp3x, ._, ._ }, |
| 7754 | .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 15277 | .{ ._, .p_w, .insr, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ }, |
| 7755 | .{ ._, .vp_d, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ }, | 15278 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 7756 | .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ }, | 15279 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 7757 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | 15280 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 7758 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | 15281 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 7759 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, | 15282 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, |
| 7760 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | 15283 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, |
| 7761 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, | 15284 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, |
| 7762 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | 15285 | .{ ._, ._c, .in, .tmp0d, ._, ._, ._ }, |
| 7763 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, | 15286 | .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, |
| 7764 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, | 15287 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 7765 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | 15288 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 7766 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, | 15289 | .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ }, |
| 7767 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 15290 | .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ }, |
| 7768 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | 15291 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 7769 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | 15292 | .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ }, |
| 7770 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | 15293 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| 7771 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, | 15294 | .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, |
| 7772 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, | 15295 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 7773 | }, | 15296 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 7774 | .ne => &.{ | 15297 | .{ ._, ._r, .sh, .tmp5d, .si(9), ._, ._ }, |
| 7775 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 15298 | .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp5), .tmp1q, ._, ._ }, |
| 7776 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 15299 | } }, |
| 7777 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | 15300 | }, .{ |
| 7778 | .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 15301 | .required_features = .{ .@"64bit", .sse, .slow_incdec, null }, |
| 7779 | .{ ._, .vp_d, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ }, | 15302 | .src_constraints = .{ |
| 7780 | .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ }, | 15303 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 7781 | .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ }, | 15304 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 7782 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | 15305 | }, |
| 7783 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | 15306 | .patterns = &.{ |
| 7784 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, | 15307 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7785 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | 15308 | }, |
| 7786 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, | 15309 | .call_frame = .{ .alignment = .@"16" }, |
| 7787 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | 15310 | .extra_temps = .{ |
| 7788 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, | 15311 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 7789 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, | 15312 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 7790 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | 15313 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 7791 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, | 15314 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| 7792 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 15315 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| 7793 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | 15316 | else => unreachable, |
| 7794 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | 15317 | .e => "__eqhf2", |
| 7795 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | 15318 | .ne => "__nehf2", |
| 7796 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, | 15319 | } } } }, |
| 7797 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, | 15320 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| 7798 | }, | 15321 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 15322 | .{ .type = .u64, .kind = .{ .reg = .rdx } }, |
| | 15323 | .{ .type = .vector_8_f16, .kind = .mem }, |
| | 15324 | }, |
| | 15325 | .dst_temps = .{.mem}, |
| | 15326 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| | 15327 | .each = .{ .once = &.{ |
| | 15328 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| | 15329 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 15330 | .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ }, |
| | 15331 | .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ }, |
| | 15332 | .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp8x), ._, ._ }, |
| | 15333 | .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ }, |
| | 15334 | .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ }, |
| | 15335 | .{ ._, ._ps, .mova, .tmp3x, .mem(.tmp8x), ._, ._ }, |
| | 15336 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| | 15337 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| | 15338 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| | 15339 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| | 15340 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, |
| | 15341 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, |
| | 15342 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, |
| | 15343 | .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 1), ._, ._ }, |
| | 15344 | .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, |
| | 15345 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 15346 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| | 15347 | .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ }, |
| | 15348 | .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ }, |
| | 15349 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 15350 | .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ }, |
| | 15351 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| | 15352 | .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, |
| | 15353 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 15354 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| | 15355 | .{ ._, ._r, .sh, .tmp5d, .si(9), ._, ._ }, |
| | 15356 | .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp5), .tmp1q, ._, ._ }, |
| 7799 | } }, | 15357 | } }, |
| 7800 | }, .{ | 15358 | }, .{ |
| 7801 | .required_features = .{ .avx, null, null, null }, | 15359 | .required_features = .{ .@"64bit", .sse, null, null }, |
| 7802 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, | 15360 | .src_constraints = .{ |
| | 15361 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 15362 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| | 15363 | }, |
| | 15364 | .patterns = &.{ |
| | 15365 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 15366 | }, |
| | 15367 | .call_frame = .{ .alignment = .@"16" }, |
| | 15368 | .extra_temps = .{ |
| | 15369 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 15370 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 15371 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| | 15372 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| | 15373 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 15374 | else => unreachable, |
| | 15375 | .e => "__eqhf2", |
| | 15376 | .ne => "__nehf2", |
| | 15377 | } } } }, |
| | 15378 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| | 15379 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 15380 | .{ .type = .u64, .kind = .{ .reg = .rdx } }, |
| | 15381 | .{ .type = .vector_8_f16, .kind = .mem }, |
| | 15382 | }, |
| | 15383 | .dst_temps = .{.mem}, |
| | 15384 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| | 15385 | .each = .{ .once = &.{ |
| | 15386 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| | 15387 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 15388 | .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ }, |
| | 15389 | .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ }, |
| | 15390 | .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp8x), ._, ._ }, |
| | 15391 | .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ }, |
| | 15392 | .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ }, |
| | 15393 | .{ ._, ._ps, .mova, .tmp3x, .mem(.tmp8x), ._, ._ }, |
| | 15394 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| | 15395 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| | 15396 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| | 15397 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| | 15398 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, |
| | 15399 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, |
| | 15400 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, |
| | 15401 | .{ ._, ._c, .in, .tmp0d, ._, ._, ._ }, |
| | 15402 | .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, |
| | 15403 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 15404 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| | 15405 | .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ }, |
| | 15406 | .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ }, |
| | 15407 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 15408 | .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ }, |
| | 15409 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| | 15410 | .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, |
| | 15411 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 15412 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| | 15413 | .{ ._, ._r, .sh, .tmp5d, .si(9), ._, ._ }, |
| | 15414 | .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp5), .tmp1q, ._, ._ }, |
| | 15415 | } }, |
| | 15416 | }, .{ |
| | 15417 | .required_features = .{ .avx, .slow_incdec, null, null }, |
| | 15418 | .src_constraints = .{ |
| | 15419 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, |
| | 15420 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, |
| | 15421 | }, |
| 7803 | .patterns = &.{ | 15422 | .patterns = &.{ |
| 7804 | .{ .src = .{ .to_mem, .to_mem } }, | 15423 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7805 | }, | 15424 | }, |
| 7806 | .extra_temps = .{ | 15425 | .extra_temps = .{ |
| 7807 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 15426 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7808 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, | 15427 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 7809 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 15428 | .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, |
| 7810 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 15429 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 7811 | .{ .kind = .{ .rc = .sse } }, | 15430 | .unused, |
| | 15431 | .unused, |
| | 15432 | .unused, |
| | 15433 | .unused, |
| 7812 | .unused, | 15434 | .unused, |
| 7813 | }, | 15435 | }, |
| 7814 | .dst_temps = .{.mem}, | 15436 | .dst_temps = .{.mem}, |
| 7815 | .clobbers = .{ .eflags = true }, | 15437 | .clobbers = .{ .eflags = true }, |
| 7816 | .each = .{ .once = switch (cc) { | 15438 | .each = .{ .once = &.{ |
| 7817 | else => unreachable, | 15439 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7818 | .e => &.{ | 15440 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 7819 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 15441 | .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 7820 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 15442 | .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) { |
| 7821 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | 15443 | else => unreachable, |
| 7822 | .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 15444 | .e => 0b00000, |
| 7823 | .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ }, | 15445 | .ne => 0b00100, |
| 7824 | .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4x, ._, ._ }, | 15446 | }) }, |
| 7825 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | 15447 | .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ }, |
| 7826 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | 15448 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, |
| 7827 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, | 15449 | .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, |
| 7828 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | 15450 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 7829 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, | 15451 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7830 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | | |
| 7831 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, | | |
| 7832 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, | | |
| 7833 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | | |
| 7834 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, | | |
| 7835 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 7836 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | | |
| 7837 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | | |
| 7838 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | | |
| 7839 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, | | |
| 7840 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, | | |
| 7841 | }, | | |
| 7842 | .ne => &.{ | | |
| 7843 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | | |
| 7844 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | | |
| 7845 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | | |
| 7846 | .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | | |
| 7847 | .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ }, | | |
| 7848 | .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4x, ._, ._ }, | | |
| 7849 | .{ ._, ._, .xor, .tmp3b, .si(0b11), ._, ._ }, | | |
| 7850 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | | |
| 7851 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | | |
| 7852 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, | | |
| 7853 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | | |
| 7854 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, | | |
| 7855 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | | |
| 7856 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, | | |
| 7857 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, | | |
| 7858 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | | |
| 7859 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, | | |
| 7860 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 7861 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | | |
| 7862 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | | |
| 7863 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | | |
| 7864 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, | | |
| 7865 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, | | |
| 7866 | }, | | |
| 7867 | } }, | 15452 | } }, |
| 7868 | }, .{ | 15453 | }, .{ |
| 7869 | .required_features = .{ .sse2, null, null, null }, | 15454 | .required_features = .{ .avx, null, null, null }, |
| 7870 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, | 15455 | .src_constraints = .{ |
| | 15456 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, |
| | 15457 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, |
| | 15458 | }, |
| 7871 | .patterns = &.{ | 15459 | .patterns = &.{ |
| 7872 | .{ .src = .{ .to_mem, .to_mem } }, | 15460 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7873 | }, | 15461 | }, |
| 7874 | .extra_temps = .{ | 15462 | .extra_temps = .{ |
| 7875 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 15463 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7876 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 15464 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 7877 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, | 15465 | .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, |
| 7878 | .{ .kind = .{ .rc = .sse } }, | 15466 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 15467 | .unused, |
| | 15468 | .unused, |
| | 15469 | .unused, |
| 7879 | .unused, | 15470 | .unused, |
| 7880 | .unused, | 15471 | .unused, |
| 7881 | }, | 15472 | }, |
| 7882 | .dst_temps = .{.mem}, | 15473 | .dst_temps = .{.mem}, |
| 7883 | .clobbers = .{ .eflags = true }, | 15474 | .clobbers = .{ .eflags = true }, |
| 7884 | .each = .{ .once = switch (cc) { | 15475 | .each = .{ .once = &.{ |
| 7885 | else => unreachable, | 15476 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7886 | .e => &.{ | 15477 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 7887 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 15478 | .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 7888 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 15479 | .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) { |
| 7889 | .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 15480 | else => unreachable, |
| 7890 | .{ ._, .p_b, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | 15481 | .e => 0b00000, |
| 7891 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, | 15482 | .ne => 0b00100, |
| 7892 | .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, | 15483 | }) }, |
| 7893 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, | 15484 | .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ }, |
| 7894 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 15485 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, |
| 7895 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 15486 | .{ ._, ._c, .in, .tmp1q, ._, ._, ._ }, |
| 7896 | }, | 15487 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 7897 | .ne => &.{ | 15488 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7898 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | | |
| 7899 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | | |
| 7900 | .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | | |
| 7901 | .{ ._, .p_b, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | | |
| 7902 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, | | |
| 7903 | .{ ._, ._, .not, .tmp2d, ._, ._, ._ }, | | |
| 7904 | .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, | | |
| 7905 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, | | |
| 7906 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | | |
| 7907 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 7908 | }, | | |
| 7909 | } }, | 15489 | } }, |
| 7910 | }, .{ | 15490 | }, .{ |
| 7911 | .required_features = .{ .sse2, null, null, null }, | 15491 | .required_features = .{ .sse2, null, null, null }, |
| 7912 | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, | 15492 | .src_constraints = .{ |
| | 15493 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, |
| | 15494 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, |
| | 15495 | }, |
| 7913 | .patterns = &.{ | 15496 | .patterns = &.{ |
| 7914 | .{ .src = .{ .to_mem, .to_mem } }, | 15497 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7915 | }, | 15498 | }, |
| 7916 | .extra_temps = .{ | 15499 | .extra_temps = .{ |
| 7917 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 15500 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7918 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 15501 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 15502 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| | 15503 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 7919 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 15504 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 7920 | .{ .kind = .{ .rc = .sse } }, | 15505 | .unused, |
| | 15506 | .unused, |
| 7921 | .unused, | 15507 | .unused, |
| 7922 | .unused, | 15508 | .unused, |
| 7923 | }, | 15509 | }, |
| 7924 | .dst_temps = .{.mem}, | 15510 | .dst_temps = .{.mem}, |
| 7925 | .clobbers = .{ .eflags = true }, | 15511 | .clobbers = .{ .eflags = true }, |
| 7926 | .each = .{ .once = switch (cc) { | 15512 | .each = .{ .once = &.{ |
| 7927 | else => unreachable, | 15513 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7928 | .e => &.{ | 15514 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 7929 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 15515 | .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7930 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 15516 | .{ ._, ._ps, .mova, .tmp3x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ }, |
| 7931 | .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 15517 | .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) { |
| 7932 | .{ ._, .p_w, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | 15518 | else => unreachable, |
| 7933 | .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ }, | 15519 | .e => 0b00000, |
| 7934 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, | 15520 | .ne => 0b00100, |
| 7935 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, | 15521 | }), ._ }, |
| 7936 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, | 15522 | .{ ._, ._ps, .cmp, .tmp3x, .memiad(.src1x, .tmp0, .add_size, 16), .ui(switch (cc) { |
| 7937 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | 15523 | else => unreachable, |
| 7938 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 15524 | .e => 0b00000, |
| 7939 | }, | 15525 | .ne => 0b00100, |
| 7940 | .ne => &.{ | 15526 | }), ._ }, |
| 7941 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 15527 | .{ ._, .p_w, .ackssd, .tmp2x, .tmp3x, ._, ._ }, |
| 7942 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 15528 | .{ ._, .p_b, .ackssw, .tmp2x, .tmp2x, ._, ._ }, |
| 7943 | .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 15529 | .{ ._, .p_b, .movmsk, .tmp4d, .tmp2x, ._, ._ }, |
| 7944 | .{ ._, .p_w, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | 15530 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, |
| 7945 | .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ }, | 15531 | .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, |
| 7946 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, | 15532 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 7947 | .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, | 15533 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7948 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, | | |
| 7949 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, | | |
| 7950 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | | |
| 7951 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 7952 | }, | | |
| 7953 | } }, | 15534 | } }, |
| 7954 | }, .{ | 15535 | }, .{ |
| 7955 | .required_features = .{ .sse2, null, null, null }, | 15536 | .required_features = .{ .sse, null, null, null }, |
| 7956 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, | 15537 | .src_constraints = .{ |
| | 15538 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, |
| | 15539 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, |
| | 15540 | }, |
| 7957 | .patterns = &.{ | 15541 | .patterns = &.{ |
| 7958 | .{ .src = .{ .to_mem, .to_mem } }, | 15542 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7959 | }, | 15543 | }, |
| 7960 | .extra_temps = .{ | 15544 | .extra_temps = .{ |
| 7961 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 15545 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7962 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, | 15546 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 15547 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 7963 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 15548 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 7964 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 15549 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 7965 | .{ .kind = .{ .rc = .sse } }, | 15550 | .unused, |
| | 15551 | .unused, |
| | 15552 | .unused, |
| 7966 | .unused, | 15553 | .unused, |
| 7967 | }, | 15554 | }, |
| 7968 | .dst_temps = .{.mem}, | 15555 | .dst_temps = .{.mem}, |
| 7969 | .clobbers = .{ .eflags = true }, | 15556 | .clobbers = .{ .eflags = true }, |
| 7970 | .each = .{ .once = switch (cc) { | 15557 | .each = .{ .once = &.{ |
| 7971 | else => unreachable, | 15558 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7972 | .e => &.{ | 15559 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 7973 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 15560 | .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7974 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 15561 | .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) { |
| 7975 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | 15562 | else => unreachable, |
| 7976 | .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 15563 | .e => 0b00000, |
| 7977 | .{ ._, .p_d, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | 15564 | .ne => 0b00100, |
| 7978 | .{ ._, ._ps, .movmsk, .tmp3d, .tmp4x, ._, ._ }, | 15565 | }), ._ }, |
| 7979 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | 15566 | .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ }, |
| 7980 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | 15567 | .{ ._, ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ }, |
| 7981 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, | 15568 | .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, 16), .ui(switch (cc) { |
| 7982 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | 15569 | else => unreachable, |
| 7983 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, | 15570 | .e => 0b00000, |
| 7984 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | 15571 | .ne => 0b00100, |
| 7985 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, | 15572 | }), ._ }, |
| 7986 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, | 15573 | .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ }, |
| 7987 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | 15574 | .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ }, |
| 7988 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, | 15575 | .{ ._, ._, .@"or", .tmp3b, .tmp4b, ._, ._ }, |
| 7989 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 15576 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, |
| 7990 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | 15577 | .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, |
| 7991 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | 15578 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 7992 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | 15579 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7993 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, | | |
| 7994 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, | | |
| 7995 | }, | | |
| 7996 | .ne => &.{ | | |
| 7997 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | | |
| 7998 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | | |
| 7999 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | | |
| 8000 | .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | | |
| 8001 | .{ ._, .p_d, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | | |
| 8002 | .{ ._, ._ps, .movmsk, .tmp3d, .tmp4x, ._, ._ }, | | |
| 8003 | .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ }, | | |
| 8004 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | | |
| 8005 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | | |
| 8006 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, | | |
| 8007 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | | |
| 8008 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, | | |
| 8009 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | | |
| 8010 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, | | |
| 8011 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, | | |
| 8012 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | | |
| 8013 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, | | |
| 8014 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 8015 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | | |
| 8016 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | | |
| 8017 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | | |
| 8018 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, | | |
| 8019 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, | | |
| 8020 | }, | | |
| 8021 | } }, | 15580 | } }, |
| 8022 | }, .{ | 15581 | }, .{ |
| 8023 | .required_features = .{ .sse4_1, null, null, null }, | 15582 | .required_features = .{ .sse, null, null, null }, |
| 8024 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, | 15583 | .src_constraints = .{ |
| | 15584 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, |
| | 15585 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, |
| | 15586 | }, |
| 8025 | .patterns = &.{ | 15587 | .patterns = &.{ |
| 8026 | .{ .src = .{ .to_mem, .to_mem } }, | 15588 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8027 | }, | 15589 | }, |
| 8028 | .extra_temps = .{ | 15590 | .extra_temps = .{ |
| 8029 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 15591 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8030 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, | 15592 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 15593 | .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, |
| 8031 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 15594 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 8032 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 15595 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 8033 | .{ .kind = .{ .rc = .sse } }, | 15596 | .unused, |
| | 15597 | .unused, |
| | 15598 | .unused, |
| 8034 | .unused, | 15599 | .unused, |
| 8035 | }, | 15600 | }, |
| 8036 | .dst_temps = .{.mem}, | 15601 | .dst_temps = .{.mem}, |
| 8037 | .clobbers = .{ .eflags = true }, | 15602 | .clobbers = .{ .eflags = true }, |
| 8038 | .each = .{ .once = switch (cc) { | 15603 | .each = .{ .once = &.{ |
| 8039 | else => unreachable, | 15604 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8040 | .e => &.{ | 15605 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 8041 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 15606 | .{ ._, ._mp, .j, .@"1f", ._, ._, ._ }, |
| 8042 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 15607 | .{ .@"0:", ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, -16), ._, ._ }, |
| 8043 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | 15608 | .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, -16), .ui(switch (cc) { |
| 8044 | .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 15609 | else => unreachable, |
| 8045 | .{ ._, .p_q, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | 15610 | .e => 0b00000, |
| 8046 | .{ ._, ._pd, .movmsk, .tmp3d, .tmp4x, ._, ._ }, | 15611 | .ne => 0b00100, |
| 8047 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | 15612 | }), ._ }, |
| 8048 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | 15613 | .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ }, |
| 8049 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, | 15614 | .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ }, |
| 8050 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | 15615 | .{ ._, ._, .@"or", .tmp3b, .tmp4b, ._, ._ }, |
| 8051 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, | 15616 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, |
| 8052 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | 15617 | .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, |
| 8053 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, | 15618 | .{ .@"1:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 8054 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, | 15619 | .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) { |
| 8055 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | 15620 | else => unreachable, |
| 8056 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, | 15621 | .e => 0b00000, |
| 8057 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 15622 | .ne => 0b00100, |
| 8058 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | 15623 | }), ._ }, |
| 8059 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | 15624 | .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ }, |
| 8060 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | 15625 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 8061 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, | 15626 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8062 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, | 15627 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, |
| 8063 | }, | | |
| 8064 | .ne => &.{ | | |
| 8065 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | | |
| 8066 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | | |
| 8067 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | | |
| 8068 | .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | | |
| 8069 | .{ ._, .p_q, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | | |
| 8070 | .{ ._, ._pd, .movmsk, .tmp3d, .tmp4x, ._, ._ }, | | |
| 8071 | .{ ._, ._, .xor, .tmp3b, .si(0b11), ._, ._ }, | | |
| 8072 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | | |
| 8073 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | | |
| 8074 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, | | |
| 8075 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | | |
| 8076 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, | | |
| 8077 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | | |
| 8078 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, | | |
| 8079 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, | | |
| 8080 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | | |
| 8081 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, | | |
| 8082 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 8083 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | | |
| 8084 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | | |
| 8085 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | | |
| 8086 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, | | |
| 8087 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, | | |
| 8088 | }, | | |
| 8089 | } }, | 15628 | } }, |
| 8090 | }, .{ | 15629 | }, .{ |
| 8091 | .required_features = .{ .sse, .mmx, null, null }, | 15630 | .required_features = .{ .avx, .slow_incdec, null, null }, |
| 8092 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, | 15631 | .src_constraints = .{ |
| | 15632 | .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } }, |
| | 15633 | .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } }, |
| | 15634 | }, |
| 8093 | .patterns = &.{ | 15635 | .patterns = &.{ |
| 8094 | .{ .src = .{ .to_mem, .to_mem } }, | 15636 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8095 | }, | 15637 | }, |
| 8096 | .extra_temps = .{ | 15638 | .extra_temps = .{ |
| 8097 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 15639 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8098 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 15640 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 15641 | .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, |
| | 15642 | .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, |
| 8099 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 15643 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 8100 | .{ .kind = .{ .rc = .mmx } }, | 15644 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 15645 | .unused, |
| 8101 | .unused, | 15646 | .unused, |
| 8102 | .unused, | 15647 | .unused, |
| 8103 | }, | 15648 | }, |
| 8104 | .dst_temps = .{.mem}, | 15649 | .dst_temps = .{.mem}, |
| 8105 | .clobbers = .{ .eflags = true }, | 15650 | .clobbers = .{ .eflags = true }, |
| 8106 | .each = .{ .once = switch (cc) { | 15651 | .each = .{ .once = &.{ |
| 8107 | else => unreachable, | 15652 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8108 | .e => &.{ | 15653 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 8109 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 15654 | .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 8110 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 15655 | .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ }, |
| 8111 | .{ .@"0:", ._q, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | 15656 | .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) { |
| 8112 | .{ ._, .p_b, .cmpeq, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | 15657 | else => unreachable, |
| 8113 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ }, | 15658 | .e => 0b00000, |
| 8114 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, | 15659 | .ne => 0b00100, |
| 8115 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, | 15660 | }) }, |
| 8116 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, | 15661 | .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .ui(switch (cc) { |
| 8117 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 15662 | else => unreachable, |
| 8118 | }, | 15663 | .e => 0b00000, |
| 8119 | .ne => &.{ | 15664 | .ne => 0b00100, |
| 8120 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 15665 | }) }, |
| 8121 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 15666 | .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ }, |
| 8122 | .{ .@"0:", ._q, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | 15667 | .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ }, |
| 8123 | .{ ._, .p_b, .cmpeq, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | 15668 | .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ }, |
| 8124 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ }, | 15669 | .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ }, |
| 8125 | .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, | 15670 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, |
| 8126 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, | 15671 | .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, |
| 8127 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, | 15672 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 8128 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, | 15673 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8129 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 8130 | }, | | |
| 8131 | } }, | 15674 | } }, |
| 8132 | }, .{ | 15675 | }, .{ |
| 8133 | .required_features = .{ .sse, .mmx, null, null }, | 15676 | .required_features = .{ .avx, null, null, null }, |
| 8134 | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, | 15677 | .src_constraints = .{ |
| | 15678 | .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } }, |
| | 15679 | .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } }, |
| | 15680 | }, |
| 8135 | .patterns = &.{ | 15681 | .patterns = &.{ |
| 8136 | .{ .src = .{ .to_mem, .to_mem } }, | 15682 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8137 | }, | 15683 | }, |
| 8138 | .extra_temps = .{ | 15684 | .extra_temps = .{ |
| 8139 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 15685 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8140 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 15686 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 15687 | .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, |
| | 15688 | .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, |
| 8141 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 15689 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 8142 | .{ .kind = .{ .rc = .mmx } }, | | |
| 8143 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 15690 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 8144 | .{ .kind = .{ .rc = .mmx } }, | 15691 | .unused, |
| | 15692 | .unused, |
| | 15693 | .unused, |
| 8145 | }, | 15694 | }, |
| 8146 | .dst_temps = .{.mem}, | 15695 | .dst_temps = .{.mem}, |
| 8147 | .clobbers = .{ .eflags = true }, | 15696 | .clobbers = .{ .eflags = true }, |
| 8148 | .each = .{ .once = switch (cc) { | 15697 | .each = .{ .once = &.{ |
| 8149 | else => unreachable, | 15698 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8150 | .e => &.{ | 15699 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 8151 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 15700 | .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 8152 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 15701 | .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ }, |
| 8153 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | 15702 | .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) { |
| 8154 | .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ }, | 15703 | else => unreachable, |
| 8155 | .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | 15704 | .e => 0b00000, |
| 8156 | .{ ._, .p_w, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | 15705 | .ne => 0b00100, |
| 8157 | .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ }, | 15706 | }) }, |
| 8158 | .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ }, | 15707 | .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .ui(switch (cc) { |
| 8159 | .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, | 15708 | else => unreachable, |
| 8160 | .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, | 15709 | .e => 0b00000, |
| 8161 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, | 15710 | .ne => 0b00100, |
| 8162 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | 15711 | }) }, |
| 8163 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, | 15712 | .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ }, |
| 8164 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, | 15713 | .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ }, |
| 8165 | .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ }, | 15714 | .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ }, |
| 8166 | .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ }, | 15715 | .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ }, |
| 8167 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | 15716 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, |
| 8168 | .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ }, | 15717 | .{ ._, ._c, .in, .tmp1q, ._, ._, ._ }, |
| 8169 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 15718 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 8170 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | 15719 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8171 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | | |
| 8172 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, | | |
| 8173 | .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ }, | | |
| 8174 | .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ }, | | |
| 8175 | }, | | |
| 8176 | .ne => &.{ | | |
| 8177 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | | |
| 8178 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | | |
| 8179 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | | |
| 8180 | .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ }, | | |
| 8181 | .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | | |
| 8182 | .{ ._, .p_w, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | | |
| 8183 | .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ }, | | |
| 8184 | .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ }, | | |
| 8185 | .{ ._, ._, .xor, .tmp4b, .si(0b1111), ._, ._ }, | | |
| 8186 | .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, | | |
| 8187 | .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, | | |
| 8188 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, | | |
| 8189 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | | |
| 8190 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, | | |
| 8191 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, | | |
| 8192 | .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ }, | | |
| 8193 | .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ }, | | |
| 8194 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | | |
| 8195 | .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ }, | | |
| 8196 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 8197 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | | |
| 8198 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | | |
| 8199 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, | | |
| 8200 | .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ }, | | |
| 8201 | .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ }, | | |
| 8202 | }, | | |
| 8203 | } }, | 15720 | } }, |
| 8204 | }, .{ | 15721 | }, .{ |
| 8205 | .required_features = .{ .sse, .mmx, null, null }, | 15722 | .required_features = .{ .avx, null, null, null }, |
| 8206 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, | 15723 | .src_constraints = .{ |
| | 15724 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, |
| | 15725 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, |
| | 15726 | }, |
| 8207 | .patterns = &.{ | 15727 | .patterns = &.{ |
| 8208 | .{ .src = .{ .to_mem, .to_mem } }, | 15728 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8209 | }, | 15729 | }, |
| 8210 | .extra_temps = .{ | 15730 | .extra_temps = .{ |
| 8211 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 15731 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8212 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, | 15732 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| | 15733 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 15734 | .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, |
| 8213 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 15735 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 8214 | .{ .kind = .{ .rc = .mmx } }, | 15736 | .unused, |
| 8215 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 15737 | .unused, |
| 8216 | .{ .kind = .{ .rc = .mmx } }, | 15738 | .unused, |
| | 15739 | .unused, |
| 8217 | }, | 15740 | }, |
| 8218 | .dst_temps = .{.mem}, | 15741 | .dst_temps = .{.mem}, |
| 8219 | .clobbers = .{ .eflags = true }, | 15742 | .clobbers = .{ .eflags = true }, |
| 8220 | .each = .{ .once = switch (cc) { | 15743 | .each = .{ .once = &.{ |
| 8221 | else => unreachable, | 15744 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8222 | .e => &.{ | 15745 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8223 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 15746 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8224 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 15747 | .{ .@"0:", .v_pd, .mova, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 8225 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | 15748 | .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) { |
| 8226 | .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ }, | 15749 | else => unreachable, |
| 8227 | .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | 15750 | .e => 0b00000, |
| 8228 | .{ ._, .p_d, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | 15751 | .ne => 0b00100, |
| 8229 | .{ ._, .p_w, .ackssd, .tmp5q, .tmp3q, ._, ._ }, | 15752 | }) }, |
| 8230 | .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ }, | 15753 | .{ ._, .v_pd, .movmsk, .tmp4d, .tmp3y, ._, ._ }, |
| 8231 | .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ }, | 15754 | .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, |
| 8232 | .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, | 15755 | .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, |
| 8233 | .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, | 15756 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| 8234 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, | 15757 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| 8235 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | 15758 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 8236 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, | 15759 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| 8237 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, | 15760 | .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ }, |
| 8238 | .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ }, | 15761 | .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ }, |
| 8239 | .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ }, | 15762 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8240 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | 15763 | .{ .@"1:", ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 8241 | .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ }, | 15764 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8242 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 15765 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| 8243 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | 15766 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 8244 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | 15767 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| 8245 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, | 15768 | .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ }, |
| 8246 | .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ }, | 15769 | .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ }, |
| 8247 | .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ }, | | |
| 8248 | }, | | |
| 8249 | .ne => &.{ | | |
| 8250 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | | |
| 8251 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | | |
| 8252 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | | |
| 8253 | .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ }, | | |
| 8254 | .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | | |
| 8255 | .{ ._, .p_d, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | | |
| 8256 | .{ ._, .p_w, .ackssd, .tmp5q, .tmp3q, ._, ._ }, | | |
| 8257 | .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ }, | | |
| 8258 | .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ }, | | |
| 8259 | .{ ._, ._, .xor, .tmp4b, .si(0b11), ._, ._ }, | | |
| 8260 | .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, | | |
| 8261 | .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, | | |
| 8262 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, | | |
| 8263 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | | |
| 8264 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, | | |
| 8265 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, | | |
| 8266 | .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ }, | | |
| 8267 | .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ }, | | |
| 8268 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, | | |
| 8269 | .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ }, | | |
| 8270 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 8271 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, | | |
| 8272 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | | |
| 8273 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, | | |
| 8274 | .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ }, | | |
| 8275 | .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ }, | | |
| 8276 | }, | | |
| 8277 | } }, | 15770 | } }, |
| 8278 | }, .{ | 15771 | }, .{ |
| 8279 | .dst_constraints = .{.{ .bool_vec = .byte }}, | 15772 | .required_features = .{ .sse2, null, null, null }, |
| 8280 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, | 15773 | .src_constraints = .{ |
| | 15774 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, |
| | 15775 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, |
| | 15776 | }, |
| | 15777 | .patterns = &.{ |
| | 15778 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 15779 | }, |
| | 15780 | .extra_temps = .{ |
| | 15781 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 15782 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| | 15783 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 15784 | .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, |
| | 15785 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 15786 | .unused, |
| | 15787 | .unused, |
| | 15788 | .unused, |
| | 15789 | .unused, |
| | 15790 | }, |
| | 15791 | .dst_temps = .{.mem}, |
| | 15792 | .clobbers = .{ .eflags = true }, |
| | 15793 | .each = .{ .once = &.{ |
| | 15794 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 15795 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 15796 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 15797 | .{ .@"0:", ._pd, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 15798 | .{ ._, ._pd, .cmp, .tmp3x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) { |
| | 15799 | else => unreachable, |
| | 15800 | .e => 0b00000, |
| | 15801 | .ne => 0b00100, |
| | 15802 | }), ._ }, |
| | 15803 | .{ ._, ._pd, .movmsk, .tmp4d, .tmp3x, ._, ._ }, |
| | 15804 | .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, |
| | 15805 | .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, |
| | 15806 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| | 15807 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 15808 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 15809 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| | 15810 | .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ }, |
| | 15811 | .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ }, |
| | 15812 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 15813 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 15814 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 15815 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 15816 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 15817 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| | 15818 | .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ }, |
| | 15819 | .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ }, |
| | 15820 | } }, |
| | 15821 | }, .{ |
| | 15822 | .required_features = .{ .x87, .cmov, .slow_incdec, null }, |
| | 15823 | .src_constraints = .{ |
| | 15824 | .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, |
| | 15825 | .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, |
| | 15826 | }, |
| 8281 | .patterns = &.{ | 15827 | .patterns = &.{ |
| 8282 | .{ .src = .{ .to_mem, .to_mem } }, | 15828 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8283 | }, | 15829 | }, |
| 8284 | .extra_temps = .{ | 15830 | .extra_temps = .{ |
| 8285 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 15831 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8286 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 15832 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| | 15833 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 8287 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 15834 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 8288 | .unused, | 15835 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 15836 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| | 15837 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 8289 | .unused, | 15838 | .unused, |
| 8290 | .unused, | 15839 | .unused, |
| 8291 | }, | 15840 | }, |
| 8292 | .dst_temps = .{.{ .rc = .general_purpose }}, | 15841 | .dst_temps = .{.mem}, |
| 8293 | .clobbers = .{ .eflags = true }, | 15842 | .clobbers = .{ .eflags = true }, |
| 8294 | .each = .{ .once = &.{ | 15843 | .each = .{ .once = &.{ |
| 8295 | .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ }, | | |
| 8296 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 15844 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8297 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, | 15845 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8298 | .{ .@"0:", ._, .mov, .tmp2b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, | 15846 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8299 | .{ ._, ._, .cmp, .tmp2b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, | 15847 | .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ }, |
| 8300 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 15848 | .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, |
| 8301 | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, | 15849 | .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ }, |
| 8302 | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, | 15850 | .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ }, |
| 8303 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 15851 | .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ }, |
| 8304 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | 15852 | .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ }, |
| | 15853 | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, |
| | 15854 | .{ ._, switch (cc) { |
| | 15855 | else => unreachable, |
| | 15856 | .e => ._np, |
| | 15857 | .ne => ._p, |
| | 15858 | }, .set, .tmp4b, ._, ._, ._ }, |
| | 15859 | .{ ._, ._, switch (cc) { |
| | 15860 | else => unreachable, |
| | 15861 | .e => .@"and", |
| | 15862 | .ne => .@"or", |
| | 15863 | }, .tmp3b, .tmp4b, ._, ._ }, |
| | 15864 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| | 15865 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| | 15866 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| | 15867 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 15868 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 15869 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 15870 | .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ }, |
| | 15871 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| | 15872 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 15873 | .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 8305 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 15874 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 15875 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 15876 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 15877 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 15878 | .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ }, |
| | 15879 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| 8306 | } }, | 15880 | } }, |
| 8307 | }, .{ | 15881 | }, .{ |
| 8308 | .dst_constraints = .{.{ .bool_vec = .byte }}, | 15882 | .required_features = .{ .x87, .cmov, null, null }, |
| 8309 | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, | 15883 | .src_constraints = .{ |
| | 15884 | .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, |
| | 15885 | .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, |
| | 15886 | }, |
| 8310 | .patterns = &.{ | 15887 | .patterns = &.{ |
| 8311 | .{ .src = .{ .to_mem, .to_mem } }, | 15888 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8312 | }, | 15889 | }, |
| 8313 | .extra_temps = .{ | 15890 | .extra_temps = .{ |
| 8314 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 15891 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8315 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 15892 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| 8316 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, | 15893 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 8317 | .unused, | 15894 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 15895 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 15896 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| | 15897 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 8318 | .unused, | 15898 | .unused, |
| 8319 | .unused, | 15899 | .unused, |
| 8320 | }, | 15900 | }, |
| 8321 | .dst_temps = .{.{ .rc = .general_purpose }}, | 15901 | .dst_temps = .{.mem}, |
| 8322 | .clobbers = .{ .eflags = true }, | 15902 | .clobbers = .{ .eflags = true }, |
| 8323 | .each = .{ .once = &.{ | 15903 | .each = .{ .once = &.{ |
| 8324 | .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ }, | | |
| 8325 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 15904 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8326 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, | 15905 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8327 | .{ .@"0:", ._, .mov, .tmp2w, .memia(.src0w, .tmp0, .add_size), ._, ._ }, | 15906 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8328 | .{ ._, ._, .cmp, .tmp2w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, | 15907 | .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ }, |
| 8329 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 15908 | .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, |
| 8330 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, | 15909 | .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ }, |
| 8331 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, | 15910 | .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ }, |
| 8332 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 15911 | .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ }, |
| 8333 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, | 15912 | .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ }, |
| | 15913 | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, |
| | 15914 | .{ ._, switch (cc) { |
| | 15915 | else => unreachable, |
| | 15916 | .e => ._np, |
| | 15917 | .ne => ._p, |
| | 15918 | }, .set, .tmp4b, ._, ._, ._ }, |
| | 15919 | .{ ._, ._, switch (cc) { |
| | 15920 | else => unreachable, |
| | 15921 | .e => .@"and", |
| | 15922 | .ne => .@"or", |
| | 15923 | }, .tmp3b, .tmp4b, ._, ._ }, |
| | 15924 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| | 15925 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| | 15926 | .{ ._, ._c, .in, .tmp1d, ._, ._, ._ }, |
| | 15927 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 15928 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 15929 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 15930 | .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ }, |
| | 15931 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| | 15932 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 15933 | .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 8334 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 15934 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 15935 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 15936 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 15937 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 15938 | .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ }, |
| | 15939 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| 8335 | } }, | 15940 | } }, |
| 8336 | }, .{ | 15941 | }, .{ |
| 8337 | .dst_constraints = .{.{ .bool_vec = .byte }}, | 15942 | .required_features = .{ .x87, null, null, null }, |
| 8338 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, | 15943 | .src_constraints = .{ |
| | 15944 | .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, |
| | 15945 | .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, |
| | 15946 | }, |
| 8339 | .patterns = &.{ | 15947 | .patterns = &.{ |
| 8340 | .{ .src = .{ .to_mem, .to_mem } }, | 15948 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8341 | }, | 15949 | }, |
| 8342 | .extra_temps = .{ | 15950 | .extra_temps = .{ |
| 8343 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 15951 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8344 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 15952 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| 8345 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 15953 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 8346 | .unused, | 15954 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 15955 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| | 15956 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| | 15957 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 8347 | .unused, | 15958 | .unused, |
| 8348 | .unused, | 15959 | .unused, |
| 8349 | }, | 15960 | }, |
| 8350 | .dst_temps = .{.{ .rc = .general_purpose }}, | 15961 | .dst_temps = .{.mem}, |
| 8351 | .clobbers = .{ .eflags = true }, | 15962 | .clobbers = .{ .eflags = true }, |
| 8352 | .each = .{ .once = &.{ | 15963 | .each = .{ .once = &.{ |
| 8353 | .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ }, | | |
| 8354 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 15964 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8355 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, | 15965 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8356 | .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, | 15966 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8357 | .{ ._, ._, .cmp, .tmp2d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, | 15967 | .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ }, |
| 8358 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 15968 | .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ }, |
| 8359 | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, | 15969 | .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ }, |
| 8360 | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, | 15970 | .{ ._, .f_pp, .ucom, ._, ._, ._, ._ }, |
| 8361 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 15971 | .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ }, |
| 8362 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, | 15972 | .{ ._, ._, .xor, .tmp6b, .si(0b0_1_000_000), ._, ._ }, |
| | 15973 | .{ ._, ._, .@"test", .tmp6b, .si(0b0_1_000_100), ._, ._ }, |
| | 15974 | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, |
| | 15975 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| | 15976 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| | 15977 | .{ ._, ._c, .in, .tmp1d, ._, ._, ._ }, |
| | 15978 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 15979 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 15980 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 15981 | .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ }, |
| | 15982 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| | 15983 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 15984 | .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 8363 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 15985 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 15986 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 15987 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 15988 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 15989 | .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ }, |
| | 15990 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| 8364 | } }, | 15991 | } }, |
| 8365 | }, .{ | 15992 | }, .{ |
| 8366 | .required_features = .{ .@"64bit", null, null, null }, | 15993 | .required_features = .{ .x87, .cmov, .slow_incdec, null }, |
| 8367 | .dst_constraints = .{.{ .bool_vec = .byte }}, | 15994 | .src_constraints = .{ |
| 8368 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, | 15995 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| | 15996 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| | 15997 | }, |
| 8369 | .patterns = &.{ | 15998 | .patterns = &.{ |
| 8370 | .{ .src = .{ .to_mem, .to_mem } }, | 15999 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8371 | }, | 16000 | }, |
| 8372 | .extra_temps = .{ | 16001 | .extra_temps = .{ |
| 8373 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 16002 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8374 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 16003 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| 8375 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 16004 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 8376 | .unused, | 16005 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 16006 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 16007 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| | 16008 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 8377 | .unused, | 16009 | .unused, |
| 8378 | .unused, | 16010 | .unused, |
| 8379 | }, | 16011 | }, |
| 8380 | .dst_temps = .{.{ .rc = .general_purpose }}, | 16012 | .dst_temps = .{.mem}, |
| 8381 | .clobbers = .{ .eflags = true }, | 16013 | .clobbers = .{ .eflags = true }, |
| 8382 | .each = .{ .once = &.{ | 16014 | .each = .{ .once = &.{ |
| 8383 | .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ }, | | |
| 8384 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 16015 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8385 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, | 16016 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8386 | .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | 16017 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8387 | .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | 16018 | .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ }, |
| 8388 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16019 | .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, |
| 8389 | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, | 16020 | .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ }, |
| 8390 | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, | 16021 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 8391 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16022 | .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ }, |
| 8392 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, | 16023 | .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ }, |
| | 16024 | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, |
| | 16025 | .{ ._, switch (cc) { |
| | 16026 | else => unreachable, |
| | 16027 | .e => ._np, |
| | 16028 | .ne => ._p, |
| | 16029 | }, .set, .tmp4b, ._, ._, ._ }, |
| | 16030 | .{ ._, ._, switch (cc) { |
| | 16031 | else => unreachable, |
| | 16032 | .e => .@"and", |
| | 16033 | .ne => .@"or", |
| | 16034 | }, .tmp3b, .tmp4b, ._, ._ }, |
| | 16035 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| | 16036 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| | 16037 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| | 16038 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 16039 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 16040 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 16041 | .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ }, |
| | 16042 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| | 16043 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 16044 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 8393 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 16045 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 16046 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 16047 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 16048 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 16049 | .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ }, |
| | 16050 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| 8394 | } }, | 16051 | } }, |
| 8395 | }, .{ | 16052 | }, .{ |
| 8396 | .dst_constraints = .{.{ .bool_vec = .byte }}, | 16053 | .required_features = .{ .x87, .cmov, null, null }, |
| | 16054 | .src_constraints = .{ |
| | 16055 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| | 16056 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| | 16057 | }, |
| 8397 | .patterns = &.{ | 16058 | .patterns = &.{ |
| 8398 | .{ .src = .{ .to_mem, .to_mem } }, | 16059 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8399 | }, | 16060 | }, |
| 8400 | .extra_temps = .{ | 16061 | .extra_temps = .{ |
| 8401 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 16062 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8402 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 16063 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| 8403 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 16064 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 8404 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 16065 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 8405 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 16066 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 16067 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| | 16068 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| | 16069 | .unused, |
| 8406 | .unused, | 16070 | .unused, |
| 8407 | }, | 16071 | }, |
| 8408 | .dst_temps = .{.{ .rc = .general_purpose }}, | 16072 | .dst_temps = .{.mem}, |
| 8409 | .clobbers = .{ .eflags = true }, | 16073 | .clobbers = .{ .eflags = true }, |
| 8410 | .each = .{ .once = &.{ | 16074 | .each = .{ .once = &.{ |
| 8411 | .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ }, | 16075 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8412 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, | 16076 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8413 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, | 16077 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8414 | .{ .@"0:", ._, .mov, .tmp2d, .sa(.src0p, .add_elem_limbs), ._, ._ }, | 16078 | .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ }, |
| 8415 | .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, | 16079 | .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, |
| 8416 | .{ .@"1:", ._, .mov, .tmp4p, .memi(.src0p, .tmp0), ._, ._ }, | 16080 | .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ }, |
| 8417 | .{ ._, ._, .xor, .tmp4p, .memi(.src1p, .tmp0), ._, ._ }, | 16081 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 8418 | .{ ._, ._, .@"or", .tmp3p, .tmp4p, ._, ._ }, | 16082 | .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ }, |
| 8419 | .{ ._, ._, .add, .tmp0p, .sa(.tmp4, .add_size), ._, ._ }, | 16083 | .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ }, |
| 8420 | .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ }, | 16084 | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, |
| 8421 | .{ ._, ._b, .j, .@"1b", ._, ._, ._ }, | 16085 | .{ ._, switch (cc) { |
| 8422 | .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ }, | 16086 | else => unreachable, |
| 8423 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16087 | .e => ._np, |
| 8424 | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, | 16088 | .ne => ._p, |
| 8425 | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, | 16089 | }, .set, .tmp4b, ._, ._, ._ }, |
| 8426 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16090 | .{ ._, ._, switch (cc) { |
| 8427 | .{ ._, ._, .cmp, .tmp1b, .sa(.dst0, .add_len), ._, ._ }, | 16091 | else => unreachable, |
| 8428 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, | 16092 | .e => .@"and", |
| | 16093 | .ne => .@"or", |
| | 16094 | }, .tmp3b, .tmp4b, ._, ._ }, |
| | 16095 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| | 16096 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| | 16097 | .{ ._, ._c, .in, .tmp1d, ._, ._, ._ }, |
| | 16098 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 16099 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 16100 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 16101 | .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ }, |
| | 16102 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| | 16103 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 16104 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 16105 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 16106 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 16107 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 16108 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 16109 | .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ }, |
| | 16110 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| 8429 | } }, | 16111 | } }, |
| 8430 | }, .{ | 16112 | }, .{ |
| 8431 | .dst_constraints = .{.{ .bool_vec = .dword }}, | 16113 | .required_features = .{ .x87, null, null, null }, |
| 8432 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, | 16114 | .src_constraints = .{ |
| | 16115 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| | 16116 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| | 16117 | }, |
| 8433 | .patterns = &.{ | 16118 | .patterns = &.{ |
| 8434 | .{ .src = .{ .to_mem, .to_mem } }, | 16119 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8435 | }, | 16120 | }, |
| 8436 | .extra_temps = .{ | 16121 | .extra_temps = .{ |
| 8437 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 16122 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8438 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 16123 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| 8439 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 16124 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 8440 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 16125 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 16126 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| | 16127 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| | 16128 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 8441 | .unused, | 16129 | .unused, |
| 8442 | .unused, | 16130 | .unused, |
| 8443 | }, | 16131 | }, |
| 8444 | .dst_temps = .{.{ .rc = .general_purpose }}, | 16132 | .dst_temps = .{.mem}, |
| 8445 | .clobbers = .{ .eflags = true }, | 16133 | .clobbers = .{ .eflags = true }, |
| 8446 | .each = .{ .once = &.{ | 16134 | .each = .{ .once = &.{ |
| 8447 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, | | |
| 8448 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 16135 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8449 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, | 16136 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8450 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 16137 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8451 | .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, | 16138 | .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ }, |
| 8452 | .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, | 16139 | .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ }, |
| 8453 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16140 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 8454 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, | 16141 | .{ ._, .f_pp, .ucom, ._, ._, ._, ._ }, |
| 8455 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, | 16142 | .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ }, |
| 8456 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16143 | .{ ._, ._, .xor, .tmp6b, .si(0b0_1_000_000), ._, ._ }, |
| 8457 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | 16144 | .{ ._, ._, .@"test", .tmp6b, .si(0b0_1_000_100), ._, ._ }, |
| | 16145 | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, |
| | 16146 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| | 16147 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| | 16148 | .{ ._, ._c, .in, .tmp1d, ._, ._, ._ }, |
| | 16149 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 16150 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 16151 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 16152 | .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ }, |
| | 16153 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| | 16154 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 16155 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 8458 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 16156 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 16157 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| | 16158 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 16159 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 16160 | .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ }, |
| | 16161 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| 8459 | } }, | 16162 | } }, |
| 8460 | }, .{ | 16163 | }, .{ |
| | 16164 | .required_features = .{ .avx, .slow_incdec, null, null }, |
| 8461 | .dst_constraints = .{.{ .bool_vec = .dword }}, | 16165 | .dst_constraints = .{.{ .bool_vec = .dword }}, |
| 8462 | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, | 16166 | .src_constraints = .{ |
| | 16167 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16168 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16169 | }, |
| 8463 | .patterns = &.{ | 16170 | .patterns = &.{ |
| 8464 | .{ .src = .{ .to_mem, .to_mem } }, | 16171 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8465 | }, | 16172 | }, |
| | 16173 | .call_frame = .{ .alignment = .@"16" }, |
| 8466 | .extra_temps = .{ | 16174 | .extra_temps = .{ |
| 8467 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 16175 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8468 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | | |
| 8469 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 16176 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 8470 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, | 16177 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 8471 | .unused, | 16178 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| | 16179 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 16180 | else => unreachable, |
| | 16181 | .e => "__eqtf2", |
| | 16182 | .ne => "__netf2", |
| | 16183 | } } } }, |
| | 16184 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| | 16185 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 16186 | .{ .type = .u32, .kind = .{ .reg = .edx } }, |
| 8472 | .unused, | 16187 | .unused, |
| 8473 | }, | 16188 | }, |
| 8474 | .dst_temps = .{.{ .rc = .general_purpose }}, | 16189 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 8475 | .clobbers = .{ .eflags = true }, | 16190 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 8476 | .each = .{ .once = &.{ | 16191 | .each = .{ .once = &.{ |
| 8477 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, | 16192 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 8478 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 16193 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8479 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, | 16194 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8480 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 16195 | .{ .@"0:", .v_dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 8481 | .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ }, | 16196 | .{ ._, .v_dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 8482 | .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, | 16197 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 8483 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16198 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 8484 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, | 16199 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 8485 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, | 16200 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 8486 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16201 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 8487 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, | 16202 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| | 16203 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| | 16204 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| | 16205 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 8488 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 16206 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8489 | } }, | 16207 | } }, |
| 8490 | }, .{ | 16208 | }, .{ |
| | 16209 | .required_features = .{ .avx, .slow_incdec, null, null }, |
| 8491 | .dst_constraints = .{.{ .bool_vec = .dword }}, | 16210 | .dst_constraints = .{.{ .bool_vec = .dword }}, |
| 8492 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, | 16211 | .src_constraints = .{ |
| | 16212 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16213 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16214 | }, |
| 8493 | .patterns = &.{ | 16215 | .patterns = &.{ |
| 8494 | .{ .src = .{ .to_mem, .to_mem } }, | 16216 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8495 | }, | 16217 | }, |
| | 16218 | .call_frame = .{ .alignment = .@"16" }, |
| 8496 | .extra_temps = .{ | 16219 | .extra_temps = .{ |
| 8497 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 16220 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8498 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | | |
| 8499 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 16221 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 8500 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 16222 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 8501 | .unused, | 16223 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| | 16224 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 16225 | else => unreachable, |
| | 16226 | .e => "__eqtf2", |
| | 16227 | .ne => "__netf2", |
| | 16228 | } } } }, |
| | 16229 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| | 16230 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 16231 | .{ .type = .u32, .kind = .{ .reg = .edx } }, |
| 8502 | .unused, | 16232 | .unused, |
| 8503 | }, | 16233 | }, |
| 8504 | .dst_temps = .{.{ .rc = .general_purpose }}, | 16234 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 8505 | .clobbers = .{ .eflags = true }, | 16235 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 8506 | .each = .{ .once = &.{ | 16236 | .each = .{ .once = &.{ |
| 8507 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, | 16237 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 8508 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 16238 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8509 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, | 16239 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8510 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 16240 | .{ .@"0:", .v_dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 8511 | .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, | 16241 | .{ ._, .v_dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 8512 | .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, | 16242 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 8513 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16243 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 8514 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, | 16244 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 8515 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, | 16245 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 8516 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16246 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 8517 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, | 16247 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| | 16248 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| | 16249 | .{ ._, ._c, .in, .tmp1d, ._, ._, ._ }, |
| | 16250 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 8518 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 16251 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8519 | } }, | 16252 | } }, |
| 8520 | }, .{ | 16253 | }, .{ |
| 8521 | .required_features = .{ .@"64bit", null, null, null }, | 16254 | .required_features = .{ .sse2, .slow_incdec, null, null }, |
| 8522 | .dst_constraints = .{.{ .bool_vec = .dword }}, | 16255 | .dst_constraints = .{.{ .bool_vec = .dword }}, |
| 8523 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, | 16256 | .src_constraints = .{ |
| | 16257 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16258 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16259 | }, |
| 8524 | .patterns = &.{ | 16260 | .patterns = &.{ |
| 8525 | .{ .src = .{ .to_mem, .to_mem } }, | 16261 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8526 | }, | 16262 | }, |
| | 16263 | .call_frame = .{ .alignment = .@"16" }, |
| 8527 | .extra_temps = .{ | 16264 | .extra_temps = .{ |
| 8528 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 16265 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8529 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | | |
| 8530 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 16266 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 8531 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 16267 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 8532 | .unused, | 16268 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| | 16269 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 16270 | else => unreachable, |
| | 16271 | .e => "__eqtf2", |
| | 16272 | .ne => "__netf2", |
| | 16273 | } } } }, |
| | 16274 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| | 16275 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 16276 | .{ .type = .u32, .kind = .{ .reg = .edx } }, |
| 8533 | .unused, | 16277 | .unused, |
| 8534 | }, | 16278 | }, |
| 8535 | .dst_temps = .{.{ .rc = .general_purpose }}, | 16279 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 8536 | .clobbers = .{ .eflags = true }, | 16280 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 8537 | .each = .{ .once = &.{ | 16281 | .each = .{ .once = &.{ |
| 8538 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, | 16282 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 8539 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 16283 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8540 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, | 16284 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8541 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 16285 | .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 8542 | .{ ._, ._, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | 16286 | .{ ._, ._dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 8543 | .{ ._, ._, .cmp, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | 16287 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 8544 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16288 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 8545 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, | 16289 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 8546 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, | 16290 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 8547 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16291 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 8548 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, | 16292 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| | 16293 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| | 16294 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| | 16295 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 8549 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 16296 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8550 | } }, | 16297 | } }, |
| 8551 | }, .{ | 16298 | }, .{ |
| | 16299 | .required_features = .{ .sse2, .slow_incdec, null, null }, |
| 8552 | .dst_constraints = .{.{ .bool_vec = .dword }}, | 16300 | .dst_constraints = .{.{ .bool_vec = .dword }}, |
| | 16301 | .src_constraints = .{ |
| | 16302 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16303 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16304 | }, |
| 8553 | .patterns = &.{ | 16305 | .patterns = &.{ |
| 8554 | .{ .src = .{ .to_mem, .to_mem } }, | 16306 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8555 | }, | 16307 | }, |
| | 16308 | .call_frame = .{ .alignment = .@"16" }, |
| 8556 | .extra_temps = .{ | 16309 | .extra_temps = .{ |
| 8557 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 16310 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8558 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | | |
| 8559 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 16311 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 8560 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 16312 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 8561 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 16313 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| | 16314 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 16315 | else => unreachable, |
| | 16316 | .e => "__eqtf2", |
| | 16317 | .ne => "__netf2", |
| | 16318 | } } } }, |
| | 16319 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| | 16320 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 16321 | .{ .type = .u32, .kind = .{ .reg = .edx } }, |
| 8562 | .unused, | 16322 | .unused, |
| 8563 | }, | 16323 | }, |
| 8564 | .dst_temps = .{.{ .rc = .general_purpose }}, | 16324 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 8565 | .clobbers = .{ .eflags = true }, | 16325 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 8566 | .each = .{ .once = &.{ | 16326 | .each = .{ .once = &.{ |
| 8567 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, | 16327 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 8568 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, | 16328 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8569 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, | 16329 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8570 | .{ .@"0:", ._, .mov, .tmp2d, .sa(.src0p, .add_elem_limbs), ._, ._ }, | 16330 | .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 8571 | .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, | 16331 | .{ ._, ._dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 8572 | .{ .@"1:", ._, .mov, .tmp4p, .memi(.src0p, .tmp0), ._, ._ }, | 16332 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 8573 | .{ ._, ._, .xor, .tmp4p, .memi(.src1p, .tmp0), ._, ._ }, | 16333 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 8574 | .{ ._, ._, .@"or", .tmp3p, .tmp4p, ._, ._ }, | 16334 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 8575 | .{ ._, ._, .add, .tmp0p, .sa(.tmp4, .add_size), ._, ._ }, | 16335 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 8576 | .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ }, | 16336 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 8577 | .{ ._, ._b, .j, .@"1b", ._, ._, ._ }, | 16337 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| 8578 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 16338 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| 8579 | .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ }, | 16339 | .{ ._, ._c, .in, .tmp1d, ._, ._, ._ }, |
| 8580 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16340 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 8581 | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, | 16341 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8582 | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, | | |
| 8583 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | | |
| 8584 | .{ ._, ._, .cmp, .tmp1b, .sa(.dst0, .add_len), ._, ._ }, | | |
| 8585 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, | | |
| 8586 | } }, | 16342 | } }, |
| 8587 | }, .{ | 16343 | }, .{ |
| 8588 | .required_features = .{ .@"64bit", null, null, null }, | 16344 | .required_features = .{ .sse, .slow_incdec, null, null }, |
| 8589 | .dst_constraints = .{.{ .bool_vec = .qword }}, | 16345 | .dst_constraints = .{.{ .bool_vec = .dword }}, |
| 8590 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, | 16346 | .src_constraints = .{ |
| | 16347 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16348 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16349 | }, |
| 8591 | .patterns = &.{ | 16350 | .patterns = &.{ |
| 8592 | .{ .src = .{ .to_mem, .to_mem } }, | 16351 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8593 | }, | 16352 | }, |
| | 16353 | .call_frame = .{ .alignment = .@"16" }, |
| 8594 | .extra_temps = .{ | 16354 | .extra_temps = .{ |
| 8595 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 16355 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 16356 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 16357 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| | 16358 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| | 16359 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 16360 | else => unreachable, |
| | 16361 | .e => "__eqtf2", |
| | 16362 | .ne => "__netf2", |
| | 16363 | } } } }, |
| | 16364 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| 8596 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 16365 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 8597 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 16366 | .{ .type = .u32, .kind = .{ .reg = .edx } }, |
| 8598 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | | |
| 8599 | .unused, | | |
| 8600 | .unused, | 16367 | .unused, |
| 8601 | }, | 16368 | }, |
| 8602 | .dst_temps = .{.{ .rc = .general_purpose }}, | 16369 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 8603 | .clobbers = .{ .eflags = true }, | 16370 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 8604 | .each = .{ .once = &.{ | 16371 | .each = .{ .once = &.{ |
| 8605 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, | 16372 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 8606 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 16373 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8607 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, | 16374 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8608 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 16375 | .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 8609 | .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, | 16376 | .{ ._, ._ps, .mova, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 8610 | .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, | 16377 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 8611 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16378 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 8612 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, | 16379 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 8613 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, | 16380 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 8614 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16381 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 8615 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, | 16382 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| | 16383 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| | 16384 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| | 16385 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 8616 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 16386 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8617 | } }, | 16387 | } }, |
| 8618 | }, .{ | 16388 | }, .{ |
| 8619 | .required_features = .{ .@"64bit", null, null, null }, | 16389 | .required_features = .{ .sse2, .slow_incdec, null, null }, |
| 8620 | .dst_constraints = .{.{ .bool_vec = .qword }}, | 16390 | .dst_constraints = .{.{ .bool_vec = .dword }}, |
| 8621 | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, | 16391 | .src_constraints = .{ |
| | 16392 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16393 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16394 | }, |
| 8622 | .patterns = &.{ | 16395 | .patterns = &.{ |
| 8623 | .{ .src = .{ .to_mem, .to_mem } }, | 16396 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8624 | }, | 16397 | }, |
| | 16398 | .call_frame = .{ .alignment = .@"16" }, |
| 8625 | .extra_temps = .{ | 16399 | .extra_temps = .{ |
| 8626 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 16400 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 16401 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 16402 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| | 16403 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| | 16404 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 16405 | else => unreachable, |
| | 16406 | .e => "__eqtf2", |
| | 16407 | .ne => "__netf2", |
| | 16408 | } } } }, |
| | 16409 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| 8627 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 16410 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 8628 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 16411 | .{ .type = .u32, .kind = .{ .reg = .edx } }, |
| 8629 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, | | |
| 8630 | .unused, | | |
| 8631 | .unused, | 16412 | .unused, |
| 8632 | }, | 16413 | }, |
| 8633 | .dst_temps = .{.{ .rc = .general_purpose }}, | 16414 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 8634 | .clobbers = .{ .eflags = true }, | 16415 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 8635 | .each = .{ .once = &.{ | 16416 | .each = .{ .once = &.{ |
| 8636 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, | 16417 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 8637 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 16418 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8638 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 16419 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8639 | .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ }, | 16420 | .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 8640 | .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, | 16421 | .{ ._, ._ps, .mova, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 8641 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16422 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 8642 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, | 16423 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 8643 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, | 16424 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 8644 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16425 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 8645 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, | 16426 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| | 16427 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| | 16428 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| | 16429 | .{ ._, ._c, .in, .tmp1d, ._, ._, ._ }, |
| | 16430 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 8646 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 16431 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8647 | } }, | 16432 | } }, |
| 8648 | }, .{ | 16433 | }, .{ |
| 8649 | .required_features = .{ .@"64bit", null, null, null }, | 16434 | .required_features = .{ .@"64bit", .avx, .slow_incdec, null }, |
| 8650 | .dst_constraints = .{.{ .bool_vec = .qword }}, | 16435 | .src_constraints = .{ |
| 8651 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, | 16436 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16437 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16438 | }, |
| 8652 | .patterns = &.{ | 16439 | .patterns = &.{ |
| 8653 | .{ .src = .{ .to_mem, .to_mem } }, | 16440 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8654 | }, | 16441 | }, |
| | 16442 | .call_frame = .{ .alignment = .@"16" }, |
| 8655 | .extra_temps = .{ | 16443 | .extra_temps = .{ |
| 8656 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 16444 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8657 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | | |
| 8658 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | | |
| 8659 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 16445 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 8660 | .unused, | 16446 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 8661 | .unused, | 16447 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| | 16448 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| | 16449 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 16450 | else => unreachable, |
| | 16451 | .e => "__eqtf2", |
| | 16452 | .ne => "__netf2", |
| | 16453 | } } } }, |
| | 16454 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| | 16455 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 16456 | .{ .type = .u64, .kind = .{ .reg = .rdx } }, |
| 8662 | }, | 16457 | }, |
| 8663 | .dst_temps = .{.{ .rc = .general_purpose }}, | 16458 | .dst_temps = .{.mem}, |
| 8664 | .clobbers = .{ .eflags = true }, | 16459 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 8665 | .each = .{ .once = &.{ | 16460 | .each = .{ .once = &.{ |
| 8666 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, | | |
| 8667 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 16461 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8668 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, | 16462 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8669 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 16463 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8670 | .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, | 16464 | .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 8671 | .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, | 16465 | .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 8672 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16466 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| 8673 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, | 16467 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, |
| 8674 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, | 16468 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, |
| 8675 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16469 | .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ }, |
| 8676 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, | 16470 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, |
| | 16471 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, |
| | 16472 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, |
| | 16473 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| | 16474 | .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ }, |
| | 16475 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 16476 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| | 16477 | .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ }, |
| | 16478 | .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ }, |
| | 16479 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 16480 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 8677 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 16481 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 16482 | .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ }, |
| | 16483 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 16484 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| | 16485 | .{ ._, ._r, .sh, .tmp6d, .si(9), ._, ._ }, |
| | 16486 | .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp6), .tmp2q, ._, ._ }, |
| 8678 | } }, | 16487 | } }, |
| 8679 | }, .{ | 16488 | }, .{ |
| 8680 | .required_features = .{ .@"64bit", null, null, null }, | 16489 | .required_features = .{ .@"64bit", .avx, null, null }, |
| 8681 | .dst_constraints = .{.{ .bool_vec = .qword }}, | 16490 | .src_constraints = .{ |
| 8682 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, | 16491 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16492 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16493 | }, |
| 8683 | .patterns = &.{ | 16494 | .patterns = &.{ |
| 8684 | .{ .src = .{ .to_mem, .to_mem } }, | 16495 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8685 | }, | 16496 | }, |
| | 16497 | .call_frame = .{ .alignment = .@"16" }, |
| 8686 | .extra_temps = .{ | 16498 | .extra_temps = .{ |
| 8687 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 16499 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 16500 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 16501 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 16502 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| | 16503 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| | 16504 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 16505 | else => unreachable, |
| | 16506 | .e => "__eqtf2", |
| | 16507 | .ne => "__netf2", |
| | 16508 | } } } }, |
| | 16509 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| 8688 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 16510 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 16511 | .{ .type = .u64, .kind = .{ .reg = .rdx } }, |
| | 16512 | }, |
| | 16513 | .dst_temps = .{.mem}, |
| | 16514 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| | 16515 | .each = .{ .once = &.{ |
| | 16516 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 16517 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 16518 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 16519 | .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 16520 | .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 16521 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| | 16522 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, |
| | 16523 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, |
| | 16524 | .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ }, |
| | 16525 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, |
| | 16526 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, |
| | 16527 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, |
| | 16528 | .{ ._, ._c, .in, .tmp1d, ._, ._, ._ }, |
| | 16529 | .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ }, |
| | 16530 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 16531 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| | 16532 | .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ }, |
| | 16533 | .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ }, |
| | 16534 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 16535 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 16536 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 16537 | .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ }, |
| | 16538 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 16539 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| | 16540 | .{ ._, ._r, .sh, .tmp6d, .si(9), ._, ._ }, |
| | 16541 | .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp6), .tmp2q, ._, ._ }, |
| | 16542 | } }, |
| | 16543 | }, .{ |
| | 16544 | .required_features = .{ .@"64bit", .sse2, .slow_incdec, null }, |
| | 16545 | .src_constraints = .{ |
| | 16546 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16547 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16548 | }, |
| | 16549 | .patterns = &.{ |
| | 16550 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 16551 | }, |
| | 16552 | .call_frame = .{ .alignment = .@"16" }, |
| | 16553 | .extra_temps = .{ |
| | 16554 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 16555 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 8689 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 16556 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 16557 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| | 16558 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| | 16559 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 16560 | else => unreachable, |
| | 16561 | .e => "__eqtf2", |
| | 16562 | .ne => "__netf2", |
| | 16563 | } } } }, |
| | 16564 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| | 16565 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 16566 | .{ .type = .u64, .kind = .{ .reg = .rdx } }, |
| | 16567 | }, |
| | 16568 | .dst_temps = .{.mem}, |
| | 16569 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| | 16570 | .each = .{ .once = &.{ |
| | 16571 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 16572 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 16573 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 16574 | .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 16575 | .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 16576 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| | 16577 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, |
| | 16578 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, |
| | 16579 | .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ }, |
| | 16580 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, |
| | 16581 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, |
| | 16582 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, |
| | 16583 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| | 16584 | .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ }, |
| | 16585 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 16586 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| | 16587 | .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ }, |
| | 16588 | .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ }, |
| | 16589 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 16590 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 16591 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 16592 | .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ }, |
| | 16593 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 16594 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| | 16595 | .{ ._, ._r, .sh, .tmp6d, .si(9), ._, ._ }, |
| | 16596 | .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp6), .tmp2q, ._, ._ }, |
| | 16597 | } }, |
| | 16598 | }, .{ |
| | 16599 | .required_features = .{ .@"64bit", .sse2, null, null }, |
| | 16600 | .src_constraints = .{ |
| | 16601 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16602 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16603 | }, |
| | 16604 | .patterns = &.{ |
| | 16605 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 16606 | }, |
| | 16607 | .call_frame = .{ .alignment = .@"16" }, |
| | 16608 | .extra_temps = .{ |
| | 16609 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 16610 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 8690 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 16611 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 8691 | .unused, | 16612 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 8692 | .unused, | 16613 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| | 16614 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 16615 | else => unreachable, |
| | 16616 | .e => "__eqtf2", |
| | 16617 | .ne => "__netf2", |
| | 16618 | } } } }, |
| | 16619 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| | 16620 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 16621 | .{ .type = .u64, .kind = .{ .reg = .rdx } }, |
| 8693 | }, | 16622 | }, |
| 8694 | .dst_temps = .{.{ .rc = .general_purpose }}, | 16623 | .dst_temps = .{.mem}, |
| 8695 | .clobbers = .{ .eflags = true }, | 16624 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 8696 | .each = .{ .once = &.{ | 16625 | .each = .{ .once = &.{ |
| 8697 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, | | |
| 8698 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 16626 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8699 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, | 16627 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8700 | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 16628 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8701 | .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | 16629 | .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 8702 | .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | 16630 | .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 8703 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16631 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| 8704 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, | 16632 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, |
| 8705 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, | 16633 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, |
| 8706 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16634 | .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ }, |
| 8707 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, | 16635 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, |
| | 16636 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, |
| | 16637 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, |
| | 16638 | .{ ._, ._c, .in, .tmp1d, ._, ._, ._ }, |
| | 16639 | .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ }, |
| | 16640 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 16641 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| | 16642 | .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ }, |
| | 16643 | .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ }, |
| | 16644 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 16645 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 8708 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 16646 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 16647 | .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ }, |
| | 16648 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 16649 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| | 16650 | .{ ._, ._r, .sh, .tmp6d, .si(9), ._, ._ }, |
| | 16651 | .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp6), .tmp2q, ._, ._ }, |
| 8709 | } }, | 16652 | } }, |
| 8710 | }, .{ | 16653 | }, .{ |
| 8711 | .required_features = .{ .@"64bit", null, null, null }, | 16654 | .required_features = .{ .@"64bit", .sse, .slow_incdec, null }, |
| 8712 | .dst_constraints = .{.{ .bool_vec = .qword }}, | 16655 | .src_constraints = .{ |
| | 16656 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16657 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16658 | }, |
| 8713 | .patterns = &.{ | 16659 | .patterns = &.{ |
| 8714 | .{ .src = .{ .to_mem, .to_mem } }, | 16660 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8715 | }, | 16661 | }, |
| | 16662 | .call_frame = .{ .alignment = .@"16" }, |
| 8716 | .extra_temps = .{ | 16663 | .extra_temps = .{ |
| 8717 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 16664 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 16665 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 16666 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| | 16667 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| | 16668 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| | 16669 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 16670 | else => unreachable, |
| | 16671 | .e => "__eqtf2", |
| | 16672 | .ne => "__netf2", |
| | 16673 | } } } }, |
| | 16674 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| 8718 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 16675 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 8719 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 16676 | .{ .type = .u64, .kind = .{ .reg = .rdx } }, |
| 8720 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | | |
| 8721 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | | |
| 8722 | .unused, | | |
| 8723 | }, | 16677 | }, |
| 8724 | .dst_temps = .{.{ .rc = .general_purpose }}, | 16678 | .dst_temps = .{.mem}, |
| 8725 | .clobbers = .{ .eflags = true }, | 16679 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 8726 | .each = .{ .once = &.{ | 16680 | .each = .{ .once = &.{ |
| 8727 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, | 16681 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8728 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, | 16682 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8729 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, | | |
| 8730 | .{ .@"0:", ._, .mov, .tmp2d, .sa(.src0p, .add_elem_limbs), ._, ._ }, | | |
| 8731 | .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, | | |
| 8732 | .{ .@"1:", ._, .mov, .tmp4p, .memi(.src0p, .tmp0), ._, ._ }, | | |
| 8733 | .{ ._, ._, .xor, .tmp4p, .memi(.src1p, .tmp0), ._, ._ }, | | |
| 8734 | .{ ._, ._, .@"or", .tmp3p, .tmp4p, ._, ._ }, | | |
| 8735 | .{ ._, ._, .add, .tmp0p, .sa(.tmp4, .add_size), ._, ._ }, | | |
| 8736 | .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ }, | | |
| 8737 | .{ ._, ._b, .j, .@"1b", ._, ._, ._ }, | | |
| 8738 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 16683 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8739 | .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ }, | 16684 | .{ .@"0:", ._ps, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 8740 | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, | 16685 | .{ ._, ._ps, .mova, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 8741 | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, | 16686 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| 8742 | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, | 16687 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, |
| 8743 | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, | 16688 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, |
| 8744 | .{ ._, ._, .cmp, .tmp1b, .sa(.dst0, .add_len), ._, ._ }, | 16689 | .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ }, |
| 8745 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, | 16690 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, |
| | 16691 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, |
| | 16692 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, |
| | 16693 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| | 16694 | .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ }, |
| | 16695 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 16696 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| | 16697 | .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ }, |
| | 16698 | .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ }, |
| | 16699 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| | 16700 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 16701 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 16702 | .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ }, |
| | 16703 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 16704 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| | 16705 | .{ ._, ._r, .sh, .tmp6d, .si(9), ._, ._ }, |
| | 16706 | .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp6), .tmp2q, ._, ._ }, |
| 8746 | } }, | 16707 | } }, |
| 8747 | }, .{ | 16708 | }, .{ |
| 8748 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, | 16709 | .required_features = .{ .@"64bit", .sse, null, null }, |
| | 16710 | .src_constraints = .{ |
| | 16711 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16712 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| | 16713 | }, |
| 8749 | .patterns = &.{ | 16714 | .patterns = &.{ |
| 8750 | .{ .src = .{ .to_mem, .to_mem } }, | 16715 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8751 | }, | 16716 | }, |
| | 16717 | .call_frame = .{ .alignment = .@"16" }, |
| 8752 | .extra_temps = .{ | 16718 | .extra_temps = .{ |
| 8753 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 16719 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8754 | .{ .type = .u32, .kind = .{ .reg = .ecx } }, | 16720 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 8755 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 16721 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 8756 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 16722 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 8757 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 16723 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| 8758 | .unused, | 16724 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 16725 | else => unreachable, |
| | 16726 | .e => "__eqtf2", |
| | 16727 | .ne => "__netf2", |
| | 16728 | } } } }, |
| | 16729 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| | 16730 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| | 16731 | .{ .type = .u64, .kind = .{ .reg = .rdx } }, |
| 8759 | }, | 16732 | }, |
| 8760 | .dst_temps = .{.mem}, | 16733 | .dst_temps = .{.mem}, |
| 8761 | .clobbers = .{ .eflags = true }, | 16734 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 8762 | .each = .{ .once = &.{ | 16735 | .each = .{ .once = &.{ |
| 8763 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 16736 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8764 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, | 16737 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8765 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 16738 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8766 | .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ }, | 16739 | .{ .@"0:", ._ps, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 8767 | .{ ._, ._, .mov, .tmp4b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, | 16740 | .{ ._, ._ps, .mova, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 8768 | .{ ._, ._, .cmp, .tmp4b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, | 16741 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| 8769 | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, | 16742 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, |
| 8770 | .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ }, | 16743 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, |
| 8771 | .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ }, | 16744 | .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ }, |
| 8772 | .{ ._, ._, .add, .tmp1d, .si(1), ._, ._ }, | 16745 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, |
| 8773 | .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ }, | 16746 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, |
| | 16747 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, |
| | 16748 | .{ ._, ._c, .in, .tmp1d, ._, ._, ._ }, |
| | 16749 | .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ }, |
| 8774 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, | 16750 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 8775 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | 16751 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 8776 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, | 16752 | .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ }, |
| 8777 | .{ ._, ._, .mov, .memia(.dst0p, .tmp3, .sub_ptr_size), .tmp2p, ._, ._ }, | 16753 | .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ }, |
| 8778 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 16754 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8779 | .{ .@"1:", ._, .add, .tmp0p, .si(1), ._, ._ }, | 16755 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 8780 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 16756 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8781 | .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ }, | 16757 | .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ }, |
| 8782 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | 16758 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 8783 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | 16759 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 8784 | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, | 16760 | .{ ._, ._r, .sh, .tmp6d, .si(9), ._, ._ }, |
| 8785 | .{ ._, ._, .mov, .memi(.dst0p, .tmp3), .tmp2p, ._, ._ }, | 16761 | .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp6), .tmp2q, ._, ._ }, |
| 8786 | } }, | 16762 | } }, |
| 8787 | } }, | 16763 | } }, |
| 8788 | }) catch |err| switch (err) { | 16764 | }) catch |err| switch (err) { |
| 8789 | error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{ | 16765 | error.SelectFailed => return cg.fail("failed to select {s} {s} {} {} {}", .{ |
| 8790 | @tagName(air_tag), | 16766 | @tagName(air_tag), |
| | 16767 | @tagName(extra.compareOperator()), |
| 8791 | cg.typeOf(extra.lhs).fmt(pt), | 16768 | cg.typeOf(extra.lhs).fmt(pt), |
| 8792 | ops[0].tracking(cg), | 16769 | ops[0].tracking(cg), |
| 8793 | ops[1].tracking(cg), | 16770 | ops[1].tracking(cg), |
| ... | @@ -8797,15 +16774,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -8797,15 +16774,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 8797 | .gte => unreachable, | 16774 | .gte => unreachable, |
| 8798 | .gt => unreachable, | 16775 | .gt => unreachable, |
| 8799 | } | 16776 | } |
| 8800 | for (ops) |op| for (res) |r| { | 16777 | try res[0].finish(inst, &.{ extra.lhs, extra.rhs }, &ops, cg); |
| 8801 | if (op.index == r.index) break; | | |
| 8802 | } else try op.die(cg); | | |
| 8803 | try res[0].moveTo(inst, cg); | | |
| 8804 | }, | 16778 | }, |
| 8805 | | 16779 | |
| 8806 | .abs => |air_tag| if (use_old) try cg.airAbs(inst) else fallback: { | 16780 | .abs => |air_tag| if (use_old) try cg.airAbs(inst) else { |
| 8807 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; | 16781 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| 8808 | if (ty_op.ty.toType().isVector(zcu) and ty_op.ty.toType().childType(zcu).isRuntimeFloat()) break :fallback try cg.airAbs(inst); | | |
| 8809 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); | 16782 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 8810 | var res: [1]Temp = undefined; | 16783 | var res: [1]Temp = undefined; |
| 8811 | cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{ | 16784 | cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{ |
| ... | @@ -8986,6 +16959,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -8986,6 +16959,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 8986 | .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, | 16959 | .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, |
| 8987 | .unused, | 16960 | .unused, |
| 8988 | .unused, | 16961 | .unused, |
| | 16962 | .unused, |
| | 16963 | .unused, |
| | 16964 | .unused, |
| 8989 | }, | 16965 | }, |
| 8990 | .dst_temps = .{.mem}, | 16966 | .dst_temps = .{.mem}, |
| 8991 | .clobbers = .{ .eflags = true }, | 16967 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9010,7 +16986,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9010,7 +16986,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9010 | .{ .src = .{ .mem, .none } }, | 16986 | .{ .src = .{ .mem, .none } }, |
| 9011 | .{ .src = .{ .to_mm, .none } }, | 16987 | .{ .src = .{ .to_mm, .none } }, |
| 9012 | }, | 16988 | }, |
| 9013 | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .mmx } }}, | 16989 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .mmx } }}, |
| 9014 | .each = .{ .once = &.{ | 16990 | .each = .{ .once = &.{ |
| 9015 | .{ ._, .p_b, .abs, .dst0q, .src0q, ._, ._ }, | 16991 | .{ ._, .p_b, .abs, .dst0q, .src0q, ._, ._ }, |
| 9016 | } }, | 16992 | } }, |
| ... | @@ -9021,7 +16997,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9021,7 +16997,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9021 | .{ .src = .{ .mem, .none } }, | 16997 | .{ .src = .{ .mem, .none } }, |
| 9022 | .{ .src = .{ .to_mm, .none } }, | 16998 | .{ .src = .{ .to_mm, .none } }, |
| 9023 | }, | 16999 | }, |
| 9024 | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .mmx } }}, | 17000 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .mmx } }}, |
| 9025 | .each = .{ .once = &.{ | 17001 | .each = .{ .once = &.{ |
| 9026 | .{ ._, .p_w, .abs, .dst0q, .src0q, ._, ._ }, | 17002 | .{ ._, .p_w, .abs, .dst0q, .src0q, ._, ._ }, |
| 9027 | } }, | 17003 | } }, |
| ... | @@ -9032,7 +17008,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9032,7 +17008,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9032 | .{ .src = .{ .mem, .none } }, | 17008 | .{ .src = .{ .mem, .none } }, |
| 9033 | .{ .src = .{ .to_mm, .none } }, | 17009 | .{ .src = .{ .to_mm, .none } }, |
| 9034 | }, | 17010 | }, |
| 9035 | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .mmx } }}, | 17011 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .mmx } }}, |
| 9036 | .each = .{ .once = &.{ | 17012 | .each = .{ .once = &.{ |
| 9037 | .{ ._, .p_d, .abs, .dst0q, .src0q, ._, ._ }, | 17013 | .{ ._, .p_d, .abs, .dst0q, .src0q, ._, ._ }, |
| 9038 | } }, | 17014 | } }, |
| ... | @@ -9043,7 +17019,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9043,7 +17019,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9043 | .{ .src = .{ .mem, .none } }, | 17019 | .{ .src = .{ .mem, .none } }, |
| 9044 | .{ .src = .{ .to_sse, .none } }, | 17020 | .{ .src = .{ .to_sse, .none } }, |
| 9045 | }, | 17021 | }, |
| 9046 | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, | 17022 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 9047 | .each = .{ .once = &.{ | 17023 | .each = .{ .once = &.{ |
| 9048 | .{ ._, .p_b, .abs, .dst0x, .src0x, ._, ._ }, | 17024 | .{ ._, .p_b, .abs, .dst0x, .src0x, ._, ._ }, |
| 9049 | } }, | 17025 | } }, |
| ... | @@ -9054,7 +17030,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9054,7 +17030,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9054 | .{ .src = .{ .mem, .none } }, | 17030 | .{ .src = .{ .mem, .none } }, |
| 9055 | .{ .src = .{ .to_sse, .none } }, | 17031 | .{ .src = .{ .to_sse, .none } }, |
| 9056 | }, | 17032 | }, |
| 9057 | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, | 17033 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 9058 | .each = .{ .once = &.{ | 17034 | .each = .{ .once = &.{ |
| 9059 | .{ ._, .p_w, .abs, .dst0x, .src0x, ._, ._ }, | 17035 | .{ ._, .p_w, .abs, .dst0x, .src0x, ._, ._ }, |
| 9060 | } }, | 17036 | } }, |
| ... | @@ -9065,7 +17041,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9065,7 +17041,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9065 | .{ .src = .{ .mem, .none } }, | 17041 | .{ .src = .{ .mem, .none } }, |
| 9066 | .{ .src = .{ .to_sse, .none } }, | 17042 | .{ .src = .{ .to_sse, .none } }, |
| 9067 | }, | 17043 | }, |
| 9068 | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, | 17044 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 9069 | .each = .{ .once = &.{ | 17045 | .each = .{ .once = &.{ |
| 9070 | .{ ._, .p_d, .abs, .dst0x, .src0x, ._, ._ }, | 17046 | .{ ._, .p_d, .abs, .dst0x, .src0x, ._, ._ }, |
| 9071 | } }, | 17047 | } }, |
| ... | @@ -9076,7 +17052,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9076,7 +17052,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9076 | .{ .src = .{ .mem, .none } }, | 17052 | .{ .src = .{ .mem, .none } }, |
| 9077 | .{ .src = .{ .to_sse, .none } }, | 17053 | .{ .src = .{ .to_sse, .none } }, |
| 9078 | }, | 17054 | }, |
| 9079 | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, | 17055 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 9080 | .each = .{ .once = &.{ | 17056 | .each = .{ .once = &.{ |
| 9081 | .{ ._, .vp_b, .abs, .dst0x, .src0x, ._, ._ }, | 17057 | .{ ._, .vp_b, .abs, .dst0x, .src0x, ._, ._ }, |
| 9082 | } }, | 17058 | } }, |
| ... | @@ -9087,7 +17063,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9087,7 +17063,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9087 | .{ .src = .{ .mem, .none } }, | 17063 | .{ .src = .{ .mem, .none } }, |
| 9088 | .{ .src = .{ .to_sse, .none } }, | 17064 | .{ .src = .{ .to_sse, .none } }, |
| 9089 | }, | 17065 | }, |
| 9090 | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, | 17066 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 9091 | .each = .{ .once = &.{ | 17067 | .each = .{ .once = &.{ |
| 9092 | .{ ._, .vp_w, .abs, .dst0x, .src0x, ._, ._ }, | 17068 | .{ ._, .vp_w, .abs, .dst0x, .src0x, ._, ._ }, |
| 9093 | } }, | 17069 | } }, |
| ... | @@ -9098,7 +17074,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9098,7 +17074,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9098 | .{ .src = .{ .mem, .none } }, | 17074 | .{ .src = .{ .mem, .none } }, |
| 9099 | .{ .src = .{ .to_sse, .none } }, | 17075 | .{ .src = .{ .to_sse, .none } }, |
| 9100 | }, | 17076 | }, |
| 9101 | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, | 17077 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 9102 | .each = .{ .once = &.{ | 17078 | .each = .{ .once = &.{ |
| 9103 | .{ ._, .vp_d, .abs, .dst0x, .src0x, ._, ._ }, | 17079 | .{ ._, .vp_d, .abs, .dst0x, .src0x, ._, ._ }, |
| 9104 | } }, | 17080 | } }, |
| ... | @@ -9109,7 +17085,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9109,7 +17085,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9109 | .{ .src = .{ .mem, .none } }, | 17085 | .{ .src = .{ .mem, .none } }, |
| 9110 | .{ .src = .{ .to_sse, .none } }, | 17086 | .{ .src = .{ .to_sse, .none } }, |
| 9111 | }, | 17087 | }, |
| 9112 | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, | 17088 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 9113 | .each = .{ .once = &.{ | 17089 | .each = .{ .once = &.{ |
| 9114 | .{ ._, .vp_b, .abs, .dst0y, .src0y, ._, ._ }, | 17090 | .{ ._, .vp_b, .abs, .dst0y, .src0y, ._, ._ }, |
| 9115 | } }, | 17091 | } }, |
| ... | @@ -9120,7 +17096,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9120,7 +17096,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9120 | .{ .src = .{ .mem, .none } }, | 17096 | .{ .src = .{ .mem, .none } }, |
| 9121 | .{ .src = .{ .to_sse, .none } }, | 17097 | .{ .src = .{ .to_sse, .none } }, |
| 9122 | }, | 17098 | }, |
| 9123 | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, | 17099 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 9124 | .each = .{ .once = &.{ | 17100 | .each = .{ .once = &.{ |
| 9125 | .{ ._, .vp_w, .abs, .dst0y, .src0y, ._, ._ }, | 17101 | .{ ._, .vp_w, .abs, .dst0y, .src0y, ._, ._ }, |
| 9126 | } }, | 17102 | } }, |
| ... | @@ -9131,7 +17107,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9131,7 +17107,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9131 | .{ .src = .{ .mem, .none } }, | 17107 | .{ .src = .{ .mem, .none } }, |
| 9132 | .{ .src = .{ .to_sse, .none } }, | 17108 | .{ .src = .{ .to_sse, .none } }, |
| 9133 | }, | 17109 | }, |
| 9134 | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, | 17110 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 9135 | .each = .{ .once = &.{ | 17111 | .each = .{ .once = &.{ |
| 9136 | .{ ._, .vp_d, .abs, .dst0y, .src0y, ._, ._ }, | 17112 | .{ ._, .vp_d, .abs, .dst0y, .src0y, ._, ._ }, |
| 9137 | } }, | 17113 | } }, |
| ... | @@ -9148,6 +17124,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9148,6 +17124,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9148 | .unused, | 17124 | .unused, |
| 9149 | .unused, | 17125 | .unused, |
| 9150 | .unused, | 17126 | .unused, |
| | 17127 | .unused, |
| | 17128 | .unused, |
| | 17129 | .unused, |
| 9151 | }, | 17130 | }, |
| 9152 | .dst_temps = .{.mem}, | 17131 | .dst_temps = .{.mem}, |
| 9153 | .clobbers = .{ .eflags = true }, | 17132 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9171,6 +17150,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9171,6 +17150,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9171 | .unused, | 17150 | .unused, |
| 9172 | .unused, | 17151 | .unused, |
| 9173 | .unused, | 17152 | .unused, |
| | 17153 | .unused, |
| | 17154 | .unused, |
| | 17155 | .unused, |
| 9174 | }, | 17156 | }, |
| 9175 | .dst_temps = .{.mem}, | 17157 | .dst_temps = .{.mem}, |
| 9176 | .clobbers = .{ .eflags = true }, | 17158 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9194,6 +17176,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9194,6 +17176,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9194 | .unused, | 17176 | .unused, |
| 9195 | .unused, | 17177 | .unused, |
| 9196 | .unused, | 17178 | .unused, |
| | 17179 | .unused, |
| | 17180 | .unused, |
| | 17181 | .unused, |
| 9197 | }, | 17182 | }, |
| 9198 | .dst_temps = .{.mem}, | 17183 | .dst_temps = .{.mem}, |
| 9199 | .clobbers = .{ .eflags = true }, | 17184 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9217,6 +17202,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9217,6 +17202,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9217 | .unused, | 17202 | .unused, |
| 9218 | .unused, | 17203 | .unused, |
| 9219 | .unused, | 17204 | .unused, |
| | 17205 | .unused, |
| | 17206 | .unused, |
| | 17207 | .unused, |
| 9220 | }, | 17208 | }, |
| 9221 | .dst_temps = .{.mem}, | 17209 | .dst_temps = .{.mem}, |
| 9222 | .clobbers = .{ .eflags = true }, | 17210 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9240,6 +17228,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9240,6 +17228,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9240 | .unused, | 17228 | .unused, |
| 9241 | .unused, | 17229 | .unused, |
| 9242 | .unused, | 17230 | .unused, |
| | 17231 | .unused, |
| | 17232 | .unused, |
| | 17233 | .unused, |
| 9243 | }, | 17234 | }, |
| 9244 | .dst_temps = .{.mem}, | 17235 | .dst_temps = .{.mem}, |
| 9245 | .clobbers = .{ .eflags = true }, | 17236 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9263,6 +17254,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9263,6 +17254,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9263 | .unused, | 17254 | .unused, |
| 9264 | .unused, | 17255 | .unused, |
| 9265 | .unused, | 17256 | .unused, |
| | 17257 | .unused, |
| | 17258 | .unused, |
| | 17259 | .unused, |
| 9266 | }, | 17260 | }, |
| 9267 | .dst_temps = .{.mem}, | 17261 | .dst_temps = .{.mem}, |
| 9268 | .clobbers = .{ .eflags = true }, | 17262 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9286,6 +17280,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9286,6 +17280,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9286 | .unused, | 17280 | .unused, |
| 9287 | .unused, | 17281 | .unused, |
| 9288 | .unused, | 17282 | .unused, |
| | 17283 | .unused, |
| | 17284 | .unused, |
| | 17285 | .unused, |
| 9289 | }, | 17286 | }, |
| 9290 | .dst_temps = .{.mem}, | 17287 | .dst_temps = .{.mem}, |
| 9291 | .clobbers = .{ .eflags = true }, | 17288 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9309,6 +17306,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9309,6 +17306,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9309 | .unused, | 17306 | .unused, |
| 9310 | .unused, | 17307 | .unused, |
| 9311 | .unused, | 17308 | .unused, |
| | 17309 | .unused, |
| | 17310 | .unused, |
| | 17311 | .unused, |
| 9312 | }, | 17312 | }, |
| 9313 | .dst_temps = .{.mem}, | 17313 | .dst_temps = .{.mem}, |
| 9314 | .clobbers = .{ .eflags = true }, | 17314 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9332,6 +17332,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9332,6 +17332,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9332 | .unused, | 17332 | .unused, |
| 9333 | .unused, | 17333 | .unused, |
| 9334 | .unused, | 17334 | .unused, |
| | 17335 | .unused, |
| | 17336 | .unused, |
| | 17337 | .unused, |
| 9335 | }, | 17338 | }, |
| 9336 | .dst_temps = .{.mem}, | 17339 | .dst_temps = .{.mem}, |
| 9337 | .clobbers = .{ .eflags = true }, | 17340 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9355,6 +17358,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9355,6 +17358,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9355 | .unused, | 17358 | .unused, |
| 9356 | .unused, | 17359 | .unused, |
| 9357 | .unused, | 17360 | .unused, |
| | 17361 | .unused, |
| | 17362 | .unused, |
| | 17363 | .unused, |
| 9358 | }, | 17364 | }, |
| 9359 | .dst_temps = .{.mem}, | 17365 | .dst_temps = .{.mem}, |
| 9360 | .clobbers = .{ .eflags = true }, | 17366 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9378,6 +17384,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9378,6 +17384,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9378 | .unused, | 17384 | .unused, |
| 9379 | .unused, | 17385 | .unused, |
| 9380 | .unused, | 17386 | .unused, |
| | 17387 | .unused, |
| | 17388 | .unused, |
| | 17389 | .unused, |
| 9381 | }, | 17390 | }, |
| 9382 | .dst_temps = .{.mem}, | 17391 | .dst_temps = .{.mem}, |
| 9383 | .clobbers = .{ .eflags = true }, | 17392 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9401,6 +17410,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9401,6 +17410,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9401 | .unused, | 17410 | .unused, |
| 9402 | .unused, | 17411 | .unused, |
| 9403 | .unused, | 17412 | .unused, |
| | 17413 | .unused, |
| | 17414 | .unused, |
| | 17415 | .unused, |
| 9404 | }, | 17416 | }, |
| 9405 | .dst_temps = .{.mem}, | 17417 | .dst_temps = .{.mem}, |
| 9406 | .clobbers = .{ .eflags = true }, | 17418 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9424,6 +17436,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9424,6 +17436,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9424 | .unused, | 17436 | .unused, |
| 9425 | .unused, | 17437 | .unused, |
| 9426 | .unused, | 17438 | .unused, |
| | 17439 | .unused, |
| | 17440 | .unused, |
| | 17441 | .unused, |
| 9427 | }, | 17442 | }, |
| 9428 | .dst_temps = .{.mem}, | 17443 | .dst_temps = .{.mem}, |
| 9429 | .clobbers = .{ .eflags = true }, | 17444 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9450,6 +17465,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9450,6 +17465,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9450 | .unused, | 17465 | .unused, |
| 9451 | .unused, | 17466 | .unused, |
| 9452 | .unused, | 17467 | .unused, |
| | 17468 | .unused, |
| | 17469 | .unused, |
| | 17470 | .unused, |
| 9453 | }, | 17471 | }, |
| 9454 | .dst_temps = .{.mem}, | 17472 | .dst_temps = .{.mem}, |
| 9455 | .clobbers = .{ .eflags = true }, | 17473 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9476,6 +17494,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9476,6 +17494,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9476 | .unused, | 17494 | .unused, |
| 9477 | .unused, | 17495 | .unused, |
| 9478 | .unused, | 17496 | .unused, |
| | 17497 | .unused, |
| | 17498 | .unused, |
| | 17499 | .unused, |
| 9479 | }, | 17500 | }, |
| 9480 | .dst_temps = .{.mem}, | 17501 | .dst_temps = .{.mem}, |
| 9481 | .clobbers = .{ .eflags = true }, | 17502 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9501,6 +17522,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9501,6 +17522,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9501 | .unused, | 17522 | .unused, |
| 9502 | .unused, | 17523 | .unused, |
| 9503 | .unused, | 17524 | .unused, |
| | 17525 | .unused, |
| | 17526 | .unused, |
| | 17527 | .unused, |
| 9504 | }, | 17528 | }, |
| 9505 | .dst_temps = .{.mem}, | 17529 | .dst_temps = .{.mem}, |
| 9506 | .clobbers = .{ .eflags = true }, | 17530 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9527,6 +17551,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9527,6 +17551,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9527 | .unused, | 17551 | .unused, |
| 9528 | .unused, | 17552 | .unused, |
| 9529 | .unused, | 17553 | .unused, |
| | 17554 | .unused, |
| | 17555 | .unused, |
| | 17556 | .unused, |
| 9530 | }, | 17557 | }, |
| 9531 | .dst_temps = .{.mem}, | 17558 | .dst_temps = .{.mem}, |
| 9532 | .clobbers = .{ .eflags = true }, | 17559 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9551,6 +17578,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9551,6 +17578,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9551 | .unused, | 17578 | .unused, |
| 9552 | .unused, | 17579 | .unused, |
| 9553 | .unused, | 17580 | .unused, |
| | 17581 | .unused, |
| | 17582 | .unused, |
| | 17583 | .unused, |
| 9554 | }, | 17584 | }, |
| 9555 | .dst_temps = .{.mem}, | 17585 | .dst_temps = .{.mem}, |
| 9556 | .clobbers = .{ .eflags = true }, | 17586 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9577,6 +17607,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9577,6 +17607,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9577 | .unused, | 17607 | .unused, |
| 9578 | .unused, | 17608 | .unused, |
| 9579 | .unused, | 17609 | .unused, |
| | 17610 | .unused, |
| | 17611 | .unused, |
| | 17612 | .unused, |
| 9580 | }, | 17613 | }, |
| 9581 | .dst_temps = .{.mem}, | 17614 | .dst_temps = .{.mem}, |
| 9582 | .clobbers = .{ .eflags = true }, | 17615 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9601,6 +17634,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9601,6 +17634,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9601 | .unused, | 17634 | .unused, |
| 9602 | .unused, | 17635 | .unused, |
| 9603 | .unused, | 17636 | .unused, |
| | 17637 | .unused, |
| | 17638 | .unused, |
| | 17639 | .unused, |
| 9604 | }, | 17640 | }, |
| 9605 | .dst_temps = .{.mem}, | 17641 | .dst_temps = .{.mem}, |
| 9606 | .clobbers = .{ .eflags = true }, | 17642 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9627,6 +17663,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9627,6 +17663,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9627 | .unused, | 17663 | .unused, |
| 9628 | .unused, | 17664 | .unused, |
| 9629 | .unused, | 17665 | .unused, |
| | 17666 | .unused, |
| | 17667 | .unused, |
| | 17668 | .unused, |
| 9630 | }, | 17669 | }, |
| 9631 | .dst_temps = .{.mem}, | 17670 | .dst_temps = .{.mem}, |
| 9632 | .clobbers = .{ .eflags = true }, | 17671 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9652,6 +17691,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9652,6 +17691,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9652 | .unused, | 17691 | .unused, |
| 9653 | .unused, | 17692 | .unused, |
| 9654 | .unused, | 17693 | .unused, |
| | 17694 | .unused, |
| | 17695 | .unused, |
| | 17696 | .unused, |
| 9655 | }, | 17697 | }, |
| 9656 | .dst_temps = .{.mem}, | 17698 | .dst_temps = .{.mem}, |
| 9657 | .clobbers = .{ .eflags = true }, | 17699 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9678,6 +17720,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9678,6 +17720,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9678 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 17720 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 9679 | .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, | 17721 | .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, |
| 9680 | .unused, | 17722 | .unused, |
| | 17723 | .unused, |
| | 17724 | .unused, |
| | 17725 | .unused, |
| 9681 | }, | 17726 | }, |
| 9682 | .dst_temps = .{.mem}, | 17727 | .dst_temps = .{.mem}, |
| 9683 | .clobbers = .{ .eflags = true }, | 17728 | .clobbers = .{ .eflags = true }, |
| ... | @@ -9699,15 +17744,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9699,15 +17744,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9699 | .{ ._, ._, .cmp, .tmp0d, .sa(.none, .add_src0_unaligned_size), ._, ._ }, | 17744 | .{ ._, ._, .cmp, .tmp0d, .sa(.none, .add_src0_unaligned_size), ._, ._ }, |
| 9700 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, | 17745 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| 9701 | } }, | 17746 | } }, |
| | 17747 | }, .{ |
| | 17748 | .required_features = .{ .avx, null, null, null }, |
| | 17749 | .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any }, |
| | 17750 | .patterns = &.{ |
| | 17751 | .{ .src = .{ .to_sse, .none } }, |
| | 17752 | }, |
| | 17753 | .extra_temps = .{ |
| | 17754 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 17755 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| | 17756 | .unused, |
| | 17757 | .unused, |
| | 17758 | .unused, |
| | 17759 | .unused, |
| | 17760 | .unused, |
| | 17761 | .unused, |
| | 17762 | .unused, |
| | 17763 | }, |
| | 17764 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| | 17765 | .each = .{ .once = &.{ |
| | 17766 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 17767 | .{ ._, .v_ps, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ }, |
| | 17768 | } }, |
| 9702 | }, .{ | 17769 | }, .{ |
| 9703 | .required_features = .{ .sse, null, null, null }, | 17770 | .required_features = .{ .sse, null, null, null }, |
| 9704 | .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .dword } }, .any }, | 17771 | .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any }, |
| 9705 | .patterns = &.{ | 17772 | .patterns = &.{ |
| 9706 | .{ .src = .{ .to_mut_sse, .none } }, | 17773 | .{ .src = .{ .to_mut_sse, .none } }, |
| 9707 | }, | 17774 | }, |
| 9708 | .extra_temps = .{ | 17775 | .extra_temps = .{ |
| 9709 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 17776 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 9710 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } }, | 17777 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| | 17778 | .unused, |
| | 17779 | .unused, |
| | 17780 | .unused, |
| 9711 | .unused, | 17781 | .unused, |
| 9712 | .unused, | 17782 | .unused, |
| 9713 | .unused, | 17783 | .unused, |
| ... | @@ -9719,33 +17789,61 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9719,33 +17789,61 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9719 | .{ ._, ._ps, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ }, | 17789 | .{ ._, ._ps, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ }, |
| 9720 | } }, | 17790 | } }, |
| 9721 | }, .{ | 17791 | }, .{ |
| 9722 | .required_features = .{ .sse2, null, null, null }, | 17792 | .required_features = .{ .avx, null, null, null }, |
| 9723 | .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .qword } }, .any }, | 17793 | .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .dword } }, .any }, |
| 9724 | .patterns = &.{ | 17794 | .patterns = &.{ |
| 9725 | .{ .src = .{ .to_mut_sse, .none } }, | 17795 | .{ .src = .{ .to_sse, .none } }, |
| | 17796 | }, |
| | 17797 | .extra_temps = .{ |
| | 17798 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 17799 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } }, |
| | 17800 | .unused, |
| | 17801 | .unused, |
| | 17802 | .unused, |
| | 17803 | .unused, |
| | 17804 | .unused, |
| | 17805 | .unused, |
| | 17806 | .unused, |
| | 17807 | }, |
| | 17808 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| | 17809 | .each = .{ .once = &.{ |
| | 17810 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 17811 | .{ ._, .v_ps, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, |
| | 17812 | } }, |
| | 17813 | }, .{ |
| | 17814 | .required_features = .{ .avx, null, null, null }, |
| | 17815 | .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any }, |
| | 17816 | .patterns = &.{ |
| | 17817 | .{ .src = .{ .to_sse, .none } }, |
| 9726 | }, | 17818 | }, |
| 9727 | .extra_temps = .{ | 17819 | .extra_temps = .{ |
| 9728 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 17820 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 9729 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } }, | 17821 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| | 17822 | .unused, |
| | 17823 | .unused, |
| | 17824 | .unused, |
| 9730 | .unused, | 17825 | .unused, |
| 9731 | .unused, | 17826 | .unused, |
| 9732 | .unused, | 17827 | .unused, |
| 9733 | .unused, | 17828 | .unused, |
| 9734 | }, | 17829 | }, |
| 9735 | .dst_temps = .{.{ .ref = .src0 }}, | 17830 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 9736 | .each = .{ .once = &.{ | 17831 | .each = .{ .once = &.{ |
| 9737 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 17832 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 9738 | .{ ._, ._pd, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ }, | 17833 | .{ ._, .v_pd, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ }, |
| 9739 | } }, | 17834 | } }, |
| 9740 | }, .{ | 17835 | }, .{ |
| 9741 | .required_features = .{ .sse, null, null, null }, | 17836 | .required_features = .{ .sse2, null, null, null }, |
| 9742 | .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .qword } }, .any }, | 17837 | .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any }, |
| 9743 | .patterns = &.{ | 17838 | .patterns = &.{ |
| 9744 | .{ .src = .{ .to_mut_sse, .none } }, | 17839 | .{ .src = .{ .to_mut_sse, .none } }, |
| 9745 | }, | 17840 | }, |
| 9746 | .extra_temps = .{ | 17841 | .extra_temps = .{ |
| 9747 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 17842 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 9748 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } }, | 17843 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| | 17844 | .unused, |
| | 17845 | .unused, |
| | 17846 | .unused, |
| 9749 | .unused, | 17847 | .unused, |
| 9750 | .unused, | 17848 | .unused, |
| 9751 | .unused, | 17849 | .unused, |
| ... | @@ -9754,210 +17852,383 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9754,210 +17852,383 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9754 | .dst_temps = .{.{ .ref = .src0 }}, | 17852 | .dst_temps = .{.{ .ref = .src0 }}, |
| 9755 | .each = .{ .once = &.{ | 17853 | .each = .{ .once = &.{ |
| 9756 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 17854 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 9757 | .{ ._, ._ps, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ }, | 17855 | .{ ._, ._pd, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ }, |
| 9758 | } }, | 17856 | } }, |
| 9759 | }, .{ | 17857 | }, .{ |
| 9760 | .required_features = .{ .avx, null, null, null }, | 17858 | .required_features = .{ .avx, null, null, null }, |
| 9761 | .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .dword } }, .any }, | 17859 | .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any }, |
| 9762 | .patterns = &.{ | 17860 | .patterns = &.{ |
| 9763 | .{ .src = .{ .to_sse, .none } }, | 17861 | .{ .src = .{ .to_sse, .none } }, |
| 9764 | }, | 17862 | }, |
| 9765 | .extra_temps = .{ | 17863 | .extra_temps = .{ |
| 9766 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 17864 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 9767 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } }, | 17865 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } }, |
| | 17866 | .unused, |
| | 17867 | .unused, |
| | 17868 | .unused, |
| 9768 | .unused, | 17869 | .unused, |
| 9769 | .unused, | 17870 | .unused, |
| 9770 | .unused, | 17871 | .unused, |
| 9771 | .unused, | 17872 | .unused, |
| 9772 | }, | 17873 | }, |
| 9773 | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, | 17874 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 9774 | .each = .{ .once = &.{ | 17875 | .each = .{ .once = &.{ |
| 9775 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 17876 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 9776 | .{ ._, .v_ps, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ }, | 17877 | .{ ._, .v_pd, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, |
| | 17878 | } }, |
| | 17879 | }, .{ |
| | 17880 | .required_features = .{ .x87, null, null, null }, |
| | 17881 | .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any }, |
| | 17882 | .patterns = &.{ |
| | 17883 | .{ .src = .{ .mem, .none } }, |
| | 17884 | .{ .src = .{ .to_x87, .none } }, |
| | 17885 | }, |
| | 17886 | .extra_temps = .{ |
| | 17887 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| | 17888 | .unused, |
| | 17889 | .unused, |
| | 17890 | .unused, |
| | 17891 | .unused, |
| | 17892 | .unused, |
| | 17893 | .unused, |
| | 17894 | .unused, |
| | 17895 | .unused, |
| | 17896 | }, |
| | 17897 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .x87 } }}, |
| | 17898 | .each = .{ .once = &.{ |
| | 17899 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| | 17900 | .{ ._, .f_, .abs, ._, ._, ._, ._ }, |
| | 17901 | .{ ._, .f_p, .st, .dst0t, ._, ._, ._ }, |
| 9777 | } }, | 17902 | } }, |
| 9778 | }, .{ | 17903 | }, .{ |
| 9779 | .required_features = .{ .avx, null, null, null }, | 17904 | .required_features = .{ .avx, null, null, null }, |
| 9780 | .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .qword } }, .any }, | 17905 | .src_constraints = .{ .{ .scalar_any_float = .xword }, .any }, |
| 9781 | .patterns = &.{ | 17906 | .patterns = &.{ |
| 9782 | .{ .src = .{ .to_sse, .none } }, | 17907 | .{ .src = .{ .to_sse, .none } }, |
| 9783 | }, | 17908 | }, |
| 9784 | .extra_temps = .{ | 17909 | .extra_temps = .{ |
| 9785 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 17910 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 9786 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } }, | 17911 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| | 17912 | .unused, |
| | 17913 | .unused, |
| | 17914 | .unused, |
| 9787 | .unused, | 17915 | .unused, |
| 9788 | .unused, | 17916 | .unused, |
| 9789 | .unused, | 17917 | .unused, |
| 9790 | .unused, | 17918 | .unused, |
| 9791 | }, | 17919 | }, |
| 9792 | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, | 17920 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 9793 | .each = .{ .once = &.{ | 17921 | .each = .{ .once = &.{ |
| 9794 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 17922 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 9795 | .{ ._, .v_pd, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ }, | 17923 | .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ }, |
| 9796 | } }, | 17924 | } }, |
| 9797 | }, .{ | 17925 | }, .{ |
| 9798 | .required_features = .{ .avx, null, null, null }, | 17926 | .required_features = .{ .sse2, null, null, null }, |
| 9799 | .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .yword, .is = .dword } }, .any }, | 17927 | .src_constraints = .{ .{ .scalar_any_float = .xword }, .any }, |
| | 17928 | .patterns = &.{ |
| | 17929 | .{ .src = .{ .to_mut_sse, .none } }, |
| | 17930 | }, |
| | 17931 | .extra_temps = .{ |
| | 17932 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 17933 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| | 17934 | .unused, |
| | 17935 | .unused, |
| | 17936 | .unused, |
| | 17937 | .unused, |
| | 17938 | .unused, |
| | 17939 | .unused, |
| | 17940 | .unused, |
| | 17941 | }, |
| | 17942 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 17943 | .each = .{ .once = &.{ |
| | 17944 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 17945 | .{ ._, .p_, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ }, |
| | 17946 | } }, |
| | 17947 | }, .{ |
| | 17948 | .required_features = .{ .sse, null, null, null }, |
| | 17949 | .src_constraints = .{ .{ .scalar_any_float = .xword }, .any }, |
| | 17950 | .patterns = &.{ |
| | 17951 | .{ .src = .{ .to_mut_sse, .none } }, |
| | 17952 | }, |
| | 17953 | .extra_temps = .{ |
| | 17954 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 17955 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| | 17956 | .unused, |
| | 17957 | .unused, |
| | 17958 | .unused, |
| | 17959 | .unused, |
| | 17960 | .unused, |
| | 17961 | .unused, |
| | 17962 | .unused, |
| | 17963 | }, |
| | 17964 | .dst_temps = .{.{ .ref = .src0 }}, |
| | 17965 | .each = .{ .once = &.{ |
| | 17966 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 17967 | .{ ._, ._ps, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ }, |
| | 17968 | } }, |
| | 17969 | }, .{ |
| | 17970 | .required_features = .{ .avx2, null, null, null }, |
| | 17971 | .src_constraints = .{ .{ .scalar_any_float = .yword }, .any }, |
| 9800 | .patterns = &.{ | 17972 | .patterns = &.{ |
| 9801 | .{ .src = .{ .to_sse, .none } }, | 17973 | .{ .src = .{ .to_sse, .none } }, |
| 9802 | }, | 17974 | }, |
| 9803 | .extra_temps = .{ | 17975 | .extra_temps = .{ |
| 9804 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 17976 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 9805 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } }, | 17977 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } }, |
| | 17978 | .unused, |
| | 17979 | .unused, |
| | 17980 | .unused, |
| 9806 | .unused, | 17981 | .unused, |
| 9807 | .unused, | 17982 | .unused, |
| 9808 | .unused, | 17983 | .unused, |
| 9809 | .unused, | 17984 | .unused, |
| 9810 | }, | 17985 | }, |
| 9811 | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, | 17986 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 9812 | .each = .{ .once = &.{ | 17987 | .each = .{ .once = &.{ |
| 9813 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 17988 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 9814 | .{ ._, .v_ps, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, | 17989 | .{ ._, .vp_, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, |
| 9815 | } }, | 17990 | } }, |
| 9816 | }, .{ | 17991 | }, .{ |
| 9817 | .required_features = .{ .avx, null, null, null }, | 17992 | .required_features = .{ .avx, null, null, null }, |
| 9818 | .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .yword, .is = .qword } }, .any }, | 17993 | .src_constraints = .{ .{ .scalar_any_float = .yword }, .any }, |
| 9819 | .patterns = &.{ | 17994 | .patterns = &.{ |
| 9820 | .{ .src = .{ .to_sse, .none } }, | 17995 | .{ .src = .{ .to_sse, .none } }, |
| 9821 | }, | 17996 | }, |
| 9822 | .extra_temps = .{ | 17997 | .extra_temps = .{ |
| 9823 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 17998 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 9824 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } }, | 17999 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } }, |
| | 18000 | .unused, |
| | 18001 | .unused, |
| | 18002 | .unused, |
| 9825 | .unused, | 18003 | .unused, |
| 9826 | .unused, | 18004 | .unused, |
| 9827 | .unused, | 18005 | .unused, |
| 9828 | .unused, | 18006 | .unused, |
| 9829 | }, | 18007 | }, |
| 9830 | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, | 18008 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 9831 | .each = .{ .once = &.{ | 18009 | .each = .{ .once = &.{ |
| 9832 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 18010 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 9833 | .{ ._, .v_pd, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, | 18011 | .{ ._, .v_pd, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, |
| 9834 | } }, | 18012 | } }, |
| 9835 | }, .{ | 18013 | }, .{ |
| 9836 | .required_features = .{ .x87, null, null, null }, | 18014 | .required_features = .{ .avx, null, null, null }, |
| 9837 | .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .tbyte } }, .any }, | 18015 | .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any }, |
| 9838 | .patterns = &.{ | 18016 | .patterns = &.{ |
| 9839 | .{ .src = .{ .to_x87, .none } }, | 18017 | .{ .src = .{ .to_mem, .none } }, |
| | 18018 | }, |
| | 18019 | .extra_temps = .{ |
| | 18020 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 18021 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } }, |
| | 18022 | .{ .kind = .{ .rc = .sse } }, |
| | 18023 | .{ .kind = .{ .rc = .sse } }, |
| | 18024 | .unused, |
| | 18025 | .unused, |
| | 18026 | .unused, |
| | 18027 | .unused, |
| | 18028 | .unused, |
| 9840 | }, | 18029 | }, |
| 9841 | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .x87 } }}, | 18030 | .dst_temps = .{.mem}, |
| 9842 | .clobbers = .{ .st = 1 }, | | |
| 9843 | .each = .{ .once = &.{ | 18031 | .each = .{ .once = &.{ |
| 9844 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, | 18032 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 9845 | .{ ._, .f_, .abs, ._, ._, ._, ._ }, | 18033 | .{ ._, .v_ps, .mova, .tmp2y, .lea(.yword, .tmp0), ._, ._ }, |
| 9846 | .{ ._, .f_p, .st, .dst0t, ._, ._, ._ }, | 18034 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 18035 | .{ .@"0:", .v_ps, .@"and", .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ }, |
| | 18036 | .{ ._, .v_ps, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ }, |
| | 18037 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 18038 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 9847 | } }, | 18039 | } }, |
| 9848 | }, .{ | 18040 | }, .{ |
| 9849 | .required_features = .{ .avx2, null, null, null }, | 18041 | .required_features = .{ .sse, null, null, null }, |
| 9850 | .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any }, | 18042 | .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any }, |
| 9851 | .patterns = &.{ | 18043 | .patterns = &.{ |
| 9852 | .{ .src = .{ .to_sse, .none } }, | 18044 | .{ .src = .{ .to_mem, .none } }, |
| 9853 | }, | 18045 | }, |
| 9854 | .extra_temps = .{ | 18046 | .extra_temps = .{ |
| 9855 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 18047 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 9856 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } }, | 18048 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| | 18049 | .{ .kind = .{ .rc = .sse } }, |
| | 18050 | .{ .kind = .{ .rc = .sse } }, |
| | 18051 | .unused, |
| 9857 | .unused, | 18052 | .unused, |
| 9858 | .unused, | 18053 | .unused, |
| 9859 | .unused, | 18054 | .unused, |
| 9860 | .unused, | 18055 | .unused, |
| 9861 | }, | 18056 | }, |
| 9862 | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, | 18057 | .dst_temps = .{.mem}, |
| 9863 | .each = .{ .once = &.{ | 18058 | .each = .{ .once = &.{ |
| 9864 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 18059 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 9865 | .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ }, | 18060 | .{ ._, ._ps, .mova, .tmp2x, .lea(.xword, .tmp0), ._, ._ }, |
| | 18061 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 18062 | .{ .@"0:", ._ps, .mova, .tmp3x, .tmp2x, ._, ._ }, |
| | 18063 | .{ ._, ._ps, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 18064 | .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, |
| | 18065 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 18066 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 9866 | } }, | 18067 | } }, |
| 9867 | }, .{ | 18068 | }, .{ |
| 9868 | .required_features = .{ .avx, null, null, null }, | 18069 | .required_features = .{ .avx, null, null, null }, |
| 9869 | .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any }, | 18070 | .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any }, |
| 9870 | .patterns = &.{ | 18071 | .patterns = &.{ |
| 9871 | .{ .src = .{ .to_sse, .none } }, | 18072 | .{ .src = .{ .to_mem, .none } }, |
| 9872 | }, | 18073 | }, |
| 9873 | .extra_temps = .{ | 18074 | .extra_temps = .{ |
| 9874 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 18075 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 9875 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } }, | 18076 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } }, |
| | 18077 | .{ .kind = .{ .rc = .sse } }, |
| | 18078 | .{ .kind = .{ .rc = .sse } }, |
| | 18079 | .unused, |
| 9876 | .unused, | 18080 | .unused, |
| 9877 | .unused, | 18081 | .unused, |
| 9878 | .unused, | 18082 | .unused, |
| 9879 | .unused, | 18083 | .unused, |
| 9880 | }, | 18084 | }, |
| 9881 | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, | 18085 | .dst_temps = .{.mem}, |
| 9882 | .each = .{ .once = &.{ | 18086 | .each = .{ .once = &.{ |
| 9883 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 18087 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 9884 | .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ }, | 18088 | .{ ._, .v_pd, .mova, .tmp2y, .lea(.yword, .tmp0), ._, ._ }, |
| | 18089 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 18090 | .{ .@"0:", .v_pd, .@"and", .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ }, |
| | 18091 | .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ }, |
| | 18092 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 18093 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 9885 | } }, | 18094 | } }, |
| 9886 | }, .{ | 18095 | }, .{ |
| 9887 | .required_features = .{ .sse2, null, null, null }, | 18096 | .required_features = .{ .sse2, null, null, null }, |
| 9888 | .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any }, | 18097 | .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any }, |
| 9889 | .patterns = &.{ | 18098 | .patterns = &.{ |
| 9890 | .{ .src = .{ .to_mut_sse, .none } }, | 18099 | .{ .src = .{ .to_mem, .none } }, |
| 9891 | }, | 18100 | }, |
| 9892 | .extra_temps = .{ | 18101 | .extra_temps = .{ |
| 9893 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 18102 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 9894 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } }, | 18103 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| | 18104 | .{ .kind = .{ .rc = .sse } }, |
| | 18105 | .{ .kind = .{ .rc = .sse } }, |
| | 18106 | .unused, |
| 9895 | .unused, | 18107 | .unused, |
| 9896 | .unused, | 18108 | .unused, |
| 9897 | .unused, | 18109 | .unused, |
| 9898 | .unused, | 18110 | .unused, |
| 9899 | }, | 18111 | }, |
| 9900 | .dst_temps = .{.{ .ref = .src0 }}, | 18112 | .dst_temps = .{.mem}, |
| 9901 | .each = .{ .once = &.{ | 18113 | .each = .{ .once = &.{ |
| 9902 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 18114 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 9903 | .{ ._, .p_, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ }, | 18115 | .{ ._, ._pd, .mova, .tmp2x, .lea(.xword, .tmp0), ._, ._ }, |
| | 18116 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 18117 | .{ .@"0:", ._pd, .mova, .tmp3x, .tmp2x, ._, ._ }, |
| | 18118 | .{ ._, ._pd, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 18119 | .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, |
| | 18120 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 18121 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 9904 | } }, | 18122 | } }, |
| 9905 | }, .{ | 18123 | }, .{ |
| 9906 | .required_features = .{ .sse, null, null, null }, | 18124 | .required_features = .{ .avx2, null, null, null }, |
| 9907 | .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any }, | 18125 | .src_constraints = .{ .{ .multiple_scalar_any_float = .yword }, .any }, |
| 9908 | .patterns = &.{ | 18126 | .patterns = &.{ |
| 9909 | .{ .src = .{ .to_mut_sse, .none } }, | 18127 | .{ .src = .{ .to_mem, .none } }, |
| 9910 | }, | 18128 | }, |
| 9911 | .extra_temps = .{ | 18129 | .extra_temps = .{ |
| 9912 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 18130 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 9913 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } }, | 18131 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } }, |
| | 18132 | .{ .kind = .{ .rc = .sse } }, |
| | 18133 | .{ .kind = .{ .rc = .sse } }, |
| | 18134 | .unused, |
| 9914 | .unused, | 18135 | .unused, |
| 9915 | .unused, | 18136 | .unused, |
| 9916 | .unused, | 18137 | .unused, |
| 9917 | .unused, | 18138 | .unused, |
| 9918 | }, | 18139 | }, |
| 9919 | .dst_temps = .{.{ .ref = .src0 }}, | 18140 | .dst_temps = .{.mem}, |
| | 18141 | .each = .{ .once = &.{ |
| | 18142 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| | 18143 | .{ ._, .v_dqa, .mov, .tmp2y, .lea(.yword, .tmp0), ._, ._ }, |
| | 18144 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 18145 | .{ .@"0:", .vp_, .@"and", .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ }, |
| | 18146 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ }, |
| | 18147 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 18148 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 18149 | } }, |
| | 18150 | }, .{ |
| | 18151 | .required_features = .{ .avx, null, null, null }, |
| | 18152 | .src_constraints = .{ .{ .multiple_scalar_any_float = .yword }, .any }, |
| | 18153 | .patterns = &.{ |
| | 18154 | .{ .src = .{ .to_mem, .none } }, |
| | 18155 | }, |
| | 18156 | .extra_temps = .{ |
| | 18157 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 18158 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } }, |
| | 18159 | .{ .kind = .{ .rc = .sse } }, |
| | 18160 | .{ .kind = .{ .rc = .sse } }, |
| | 18161 | .unused, |
| | 18162 | .unused, |
| | 18163 | .unused, |
| | 18164 | .unused, |
| | 18165 | .unused, |
| | 18166 | }, |
| | 18167 | .dst_temps = .{.mem}, |
| 9920 | .each = .{ .once = &.{ | 18168 | .each = .{ .once = &.{ |
| 9921 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 18169 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 9922 | .{ ._, ._ps, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ }, | 18170 | .{ ._, .v_pd, .mova, .tmp2y, .lea(.yword, .tmp0), ._, ._ }, |
| | 18171 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 18172 | .{ .@"0:", .v_pd, .@"and", .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ }, |
| | 18173 | .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ }, |
| | 18174 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 18175 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 9923 | } }, | 18176 | } }, |
| 9924 | }, .{ | 18177 | }, .{ |
| 9925 | .required_features = .{ .avx2, null, null, null }, | 18178 | .required_features = .{ .sse2, null, null, null }, |
| 9926 | .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .xword } }, .any }, | 18179 | .src_constraints = .{ .{ .multiple_scalar_any_float = .xword }, .any }, |
| 9927 | .patterns = &.{ | 18180 | .patterns = &.{ |
| 9928 | .{ .src = .{ .to_sse, .none } }, | 18181 | .{ .src = .{ .to_mem, .none } }, |
| 9929 | }, | 18182 | }, |
| 9930 | .extra_temps = .{ | 18183 | .extra_temps = .{ |
| 9931 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 18184 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 9932 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } }, | 18185 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| | 18186 | .{ .kind = .{ .rc = .sse } }, |
| | 18187 | .{ .kind = .{ .rc = .sse } }, |
| | 18188 | .unused, |
| 9933 | .unused, | 18189 | .unused, |
| 9934 | .unused, | 18190 | .unused, |
| 9935 | .unused, | 18191 | .unused, |
| 9936 | .unused, | 18192 | .unused, |
| 9937 | }, | 18193 | }, |
| 9938 | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, | 18194 | .dst_temps = .{.mem}, |
| 9939 | .each = .{ .once = &.{ | 18195 | .each = .{ .once = &.{ |
| 9940 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 18196 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 9941 | .{ ._, .vp_, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, | 18197 | .{ ._, ._dqa, .mov, .tmp2x, .lea(.xword, .tmp0), ._, ._ }, |
| | 18198 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 18199 | .{ .@"0:", ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ }, |
| | 18200 | .{ ._, .p_, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 18201 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, |
| | 18202 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 18203 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 9942 | } }, | 18204 | } }, |
| 9943 | }, .{ | 18205 | }, .{ |
| 9944 | .required_features = .{ .avx, null, null, null }, | 18206 | .required_features = .{ .sse, null, null, null }, |
| 9945 | .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .xword } }, .any }, | 18207 | .src_constraints = .{ .{ .multiple_scalar_any_float = .xword }, .any }, |
| 9946 | .patterns = &.{ | 18208 | .patterns = &.{ |
| 9947 | .{ .src = .{ .to_sse, .none } }, | 18209 | .{ .src = .{ .to_mem, .none } }, |
| 9948 | }, | 18210 | }, |
| 9949 | .extra_temps = .{ | 18211 | .extra_temps = .{ |
| 9950 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 18212 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 9951 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } }, | 18213 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| | 18214 | .{ .kind = .{ .rc = .sse } }, |
| | 18215 | .{ .kind = .{ .rc = .sse } }, |
| | 18216 | .unused, |
| 9952 | .unused, | 18217 | .unused, |
| 9953 | .unused, | 18218 | .unused, |
| 9954 | .unused, | 18219 | .unused, |
| 9955 | .unused, | 18220 | .unused, |
| 9956 | }, | 18221 | }, |
| 9957 | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, | 18222 | .dst_temps = .{.mem}, |
| 9958 | .each = .{ .once = &.{ | 18223 | .each = .{ .once = &.{ |
| 9959 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, | 18224 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 9960 | .{ ._, .v_pd, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, | 18225 | .{ ._, ._ps, .mova, .tmp2x, .lea(.xword, .tmp0), ._, ._ }, |
| | 18226 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 18227 | .{ .@"0:", ._ps, .mova, .tmp3x, .tmp2x, ._, ._ }, |
| | 18228 | .{ ._, ._ps, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 18229 | .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, |
| | 18230 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 18231 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 9961 | } }, | 18232 | } }, |
| 9962 | } }) catch |err| switch (err) { | 18233 | } }) catch |err| switch (err) { |
| 9963 | error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{ | 18234 | error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{ |
| ... | @@ -9967,10 +18238,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9967,10 +18238,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9967 | }), | 18238 | }), |
| 9968 | else => |e| return e, | 18239 | else => |e| return e, |
| 9969 | }; | 18240 | }; |
| 9970 | for (ops) |op| for (res) |r| { | 18241 | try res[0].finish(inst, &.{ty_op.operand}, &ops, cg); |
| 9971 | if (op.index == r.index) break; | | |
| 9972 | } else try op.die(cg); | | |
| 9973 | try res[0].moveTo(inst, cg); | | |
| 9974 | }, | 18242 | }, |
| 9975 | | 18243 | |
| 9976 | .cmp_lt, | 18244 | .cmp_lt, |
| ... | @@ -10138,6 +18406,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10138,6 +18406,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10138 | .unused, | 18406 | .unused, |
| 10139 | .unused, | 18407 | .unused, |
| 10140 | .unused, | 18408 | .unused, |
| | 18409 | .unused, |
| | 18410 | .unused, |
| | 18411 | .unused, |
| 10141 | }, | 18412 | }, |
| 10142 | .dst_temps = .{.{ .rc = .general_purpose }}, | 18413 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 10143 | .clobbers = .{ .eflags = true }, | 18414 | .clobbers = .{ .eflags = true }, |
| ... | @@ -10166,10 +18437,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10166,10 +18437,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10166 | }), | 18437 | }), |
| 10167 | else => |e| return e, | 18438 | else => |e| return e, |
| 10168 | }; | 18439 | }; |
| 10169 | for (ops) |op| for (res) |r| { | 18440 | try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); |
| 10170 | if (op.index == r.index) break; | | |
| 10171 | } else try op.die(cg); | | |
| 10172 | try res[0].moveTo(inst, cg); | | |
| 10173 | }, | 18441 | }, |
| 10174 | .cmp_eq, | 18442 | .cmp_eq, |
| 10175 | .cmp_eq_optimized, | 18443 | .cmp_eq_optimized, |
| ... | @@ -10182,7 +18450,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10182,7 +18450,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10182 | }) else fallback: { | 18450 | }) else fallback: { |
| 10183 | const bin_op = air_datas[@intFromEnum(inst)].bin_op; | 18451 | const bin_op = air_datas[@intFromEnum(inst)].bin_op; |
| 10184 | const scalar_ty = cg.typeOf(bin_op.lhs).scalarType(zcu); | 18452 | const scalar_ty = cg.typeOf(bin_op.lhs).scalarType(zcu); |
| 10185 | if (cg.intInfo(scalar_ty) == null) break :fallback try cg.airCmp(inst, switch (air_tag) { | 18453 | if (cg.intInfo(scalar_ty) == null and cg.floatBits(scalar_ty) == null) break :fallback try cg.airCmp(inst, switch (air_tag) { |
| 10186 | else => unreachable, | 18454 | else => unreachable, |
| 10187 | .cmp_eq, .cmp_eq_optimized => .eq, | 18455 | .cmp_eq, .cmp_eq_optimized => .eq, |
| 10188 | .cmp_neq, .cmp_neq_optimized => .neq, | 18456 | .cmp_neq, .cmp_neq_optimized => .neq, |
| ... | @@ -10275,26 +18543,564 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10275,26 +18543,564 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10275 | .unused, | 18543 | .unused, |
| 10276 | .unused, | 18544 | .unused, |
| 10277 | .unused, | 18545 | .unused, |
| | 18546 | .unused, |
| | 18547 | .unused, |
| | 18548 | .unused, |
| | 18549 | }, |
| | 18550 | .dst_temps = .{.{ .cc = cc }}, |
| | 18551 | .clobbers = .{ .eflags = true }, |
| | 18552 | .each = .{ .once = &.{ |
| | 18553 | .{ ._, .p_, .xor, .tmp1q, .tmp1q, ._, ._ }, |
| | 18554 | .{ ._, .p_, .xor, .src0q, .src1q, ._, ._ }, |
| | 18555 | .{ ._, .p_b, .cmpeq, .tmp1q, .src0q, ._, ._ }, |
| | 18556 | .{ ._, .p_b, .movmsk, .tmp0d, .tmp1q, ._, ._ }, |
| | 18557 | .{ ._, ._, .xor, .tmp0d, .si(0xff), ._, ._ }, |
| | 18558 | } }, |
| | 18559 | }, .{ |
| | 18560 | .required_features = .{ .avx, null, null, null }, |
| | 18561 | .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword } }, |
| | 18562 | .patterns = &.{ |
| | 18563 | .{ .src = .{ .to_xmm, .mem } }, |
| | 18564 | .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } }, |
| | 18565 | .{ .src = .{ .to_xmm, .to_xmm } }, |
| | 18566 | }, |
| | 18567 | .extra_temps = .{ |
| | 18568 | .{ .kind = .{ .rc = .sse } }, |
| | 18569 | .unused, |
| | 18570 | .unused, |
| | 18571 | .unused, |
| | 18572 | .unused, |
| | 18573 | .unused, |
| | 18574 | .unused, |
| | 18575 | .unused, |
| | 18576 | .unused, |
| | 18577 | }, |
| | 18578 | .dst_temps = .{.{ .cc = cc }}, |
| | 18579 | .clobbers = .{ .eflags = true }, |
| | 18580 | .each = .{ .once = &.{ |
| | 18581 | .{ ._, .vp_, .xor, .tmp0x, .src0x, .src1x, ._ }, |
| | 18582 | .{ ._, .vp_, .@"test", .tmp0x, .tmp0x, ._, ._ }, |
| | 18583 | } }, |
| | 18584 | }, .{ |
| | 18585 | .required_features = .{ .sse4_1, null, null, null }, |
| | 18586 | .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword } }, |
| | 18587 | .patterns = &.{ |
| | 18588 | .{ .src = .{ .to_mut_xmm, .mem } }, |
| | 18589 | .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } }, |
| | 18590 | .{ .src = .{ .to_mut_xmm, .to_xmm } }, |
| | 18591 | }, |
| | 18592 | .dst_temps = .{.{ .cc = cc }}, |
| | 18593 | .clobbers = .{ .eflags = true }, |
| | 18594 | .each = .{ .once = &.{ |
| | 18595 | .{ ._, .p_, .xor, .src0x, .src1x, ._, ._ }, |
| | 18596 | .{ ._, .p_, .@"test", .src0x, .src0x, ._, ._ }, |
| | 18597 | } }, |
| | 18598 | }, .{ |
| | 18599 | .required_features = .{ .sse2, null, null, null }, |
| | 18600 | .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword } }, |
| | 18601 | .patterns = &.{ |
| | 18602 | .{ .src = .{ .to_mut_xmm, .mem } }, |
| | 18603 | .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } }, |
| | 18604 | .{ .src = .{ .to_mut_xmm, .to_xmm } }, |
| | 18605 | }, |
| | 18606 | .extra_temps = .{ |
| | 18607 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 18608 | .{ .kind = .{ .rc = .sse } }, |
| | 18609 | .unused, |
| | 18610 | .unused, |
| | 18611 | .unused, |
| | 18612 | .unused, |
| | 18613 | .unused, |
| | 18614 | .unused, |
| | 18615 | .unused, |
| | 18616 | }, |
| | 18617 | .dst_temps = .{.{ .cc = cc }}, |
| | 18618 | .clobbers = .{ .eflags = true }, |
| | 18619 | .each = .{ .once = &.{ |
| | 18620 | .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| | 18621 | .{ ._, .p_, .xor, .src0x, .src1x, ._, ._ }, |
| | 18622 | .{ ._, .p_b, .cmpeq, .tmp1x, .src0x, ._, ._ }, |
| | 18623 | .{ ._, .p_b, .movmsk, .tmp0d, .tmp1x, ._, ._ }, |
| | 18624 | .{ ._, ._, .xor, .tmp0d, .si(0xffff), ._, ._ }, |
| | 18625 | } }, |
| | 18626 | }, .{ |
| | 18627 | .required_features = .{ .avx2, null, null, null }, |
| | 18628 | .src_constraints = .{ .{ .int = .yword }, .{ .int = .yword } }, |
| | 18629 | .patterns = &.{ |
| | 18630 | .{ .src = .{ .to_ymm, .mem } }, |
| | 18631 | .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } }, |
| | 18632 | .{ .src = .{ .to_ymm, .to_ymm } }, |
| | 18633 | }, |
| | 18634 | .extra_temps = .{ |
| | 18635 | .{ .kind = .{ .rc = .sse } }, |
| | 18636 | .unused, |
| | 18637 | .unused, |
| | 18638 | .unused, |
| | 18639 | .unused, |
| | 18640 | .unused, |
| | 18641 | .unused, |
| | 18642 | .unused, |
| | 18643 | .unused, |
| | 18644 | }, |
| | 18645 | .dst_temps = .{.{ .cc = cc }}, |
| | 18646 | .clobbers = .{ .eflags = true }, |
| | 18647 | .each = .{ .once = &.{ |
| | 18648 | .{ ._, .vp_, .xor, .tmp0y, .src0y, .src1y, ._ }, |
| | 18649 | .{ ._, .vp_, .@"test", .tmp0y, .tmp0y, ._, ._ }, |
| | 18650 | } }, |
| | 18651 | }, .{ |
| | 18652 | .required_features = .{ .avx, null, null, null }, |
| | 18653 | .src_constraints = .{ .{ .int = .yword }, .{ .int = .yword } }, |
| | 18654 | .patterns = &.{ |
| | 18655 | .{ .src = .{ .to_ymm, .mem } }, |
| | 18656 | .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } }, |
| | 18657 | .{ .src = .{ .to_ymm, .to_ymm } }, |
| | 18658 | }, |
| | 18659 | .extra_temps = .{ |
| | 18660 | .{ .kind = .{ .rc = .sse } }, |
| | 18661 | .unused, |
| | 18662 | .unused, |
| | 18663 | .unused, |
| | 18664 | .unused, |
| | 18665 | .unused, |
| | 18666 | .unused, |
| | 18667 | .unused, |
| | 18668 | .unused, |
| | 18669 | }, |
| | 18670 | .dst_temps = .{.{ .cc = cc }}, |
| | 18671 | .clobbers = .{ .eflags = true }, |
| | 18672 | .each = .{ .once = &.{ |
| | 18673 | .{ ._, .v_pd, .xor, .tmp0y, .src0y, .src1y, ._ }, |
| | 18674 | .{ ._, .vp_, .@"test", .tmp0y, .tmp0y, ._, ._ }, |
| | 18675 | } }, |
| | 18676 | }, .{ |
| | 18677 | .required_features = .{ .avx2, null, null, null }, |
| | 18678 | .src_constraints = .{ |
| | 18679 | .{ .remainder_int = .{ .of = .yword, .is = .xword } }, |
| | 18680 | .{ .remainder_int = .{ .of = .yword, .is = .xword } }, |
| | 18681 | }, |
| | 18682 | .patterns = &.{ |
| | 18683 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 18684 | }, |
| | 18685 | .extra_temps = .{ |
| | 18686 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 18687 | .{ .kind = .{ .rc = .sse } }, |
| | 18688 | .{ .kind = .{ .rc = .sse } }, |
| | 18689 | .unused, |
| | 18690 | .unused, |
| | 18691 | .unused, |
| | 18692 | .unused, |
| | 18693 | .unused, |
| | 18694 | .unused, |
| | 18695 | }, |
| | 18696 | .dst_temps = .{.{ .cc = cc }}, |
| | 18697 | .clobbers = .{ .eflags = true }, |
| | 18698 | .each = .{ .once = &.{ |
| | 18699 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| | 18700 | .{ ._, .vp_, .xor, .tmp1y, .tmp1y, .tmp1y, ._ }, |
| | 18701 | .{ .@"0:", .v_dqu, .mov, .tmp2y, .memiad(.src0y, .tmp0, .add_size, -16), ._, ._ }, |
| | 18702 | .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .memiad(.src1y, .tmp0, .add_size, -16), ._ }, |
| | 18703 | .{ ._, .vp_, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ }, |
| | 18704 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 18705 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 18706 | .{ ._, .v_dqa, .mov, .tmp2x, .memad(.src0x, .add_size, -16), ._, ._ }, |
| | 18707 | .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .memad(.src1x, .add_size, -16), ._ }, |
| | 18708 | .{ ._, .vp_, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ }, |
| | 18709 | .{ ._, .vp_, .@"test", .tmp1y, .tmp1y, ._, ._ }, |
| | 18710 | } }, |
| | 18711 | }, .{ |
| | 18712 | .required_features = .{ .avx2, null, null, null }, |
| | 18713 | .src_constraints = .{ |
| | 18714 | .{ .remainder_int = .{ .of = .yword, .is = .yword } }, |
| | 18715 | .{ .remainder_int = .{ .of = .yword, .is = .yword } }, |
| | 18716 | }, |
| | 18717 | .patterns = &.{ |
| | 18718 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 18719 | }, |
| | 18720 | .extra_temps = .{ |
| | 18721 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 18722 | .{ .kind = .{ .rc = .sse } }, |
| | 18723 | .{ .kind = .{ .rc = .sse } }, |
| | 18724 | .unused, |
| | 18725 | .unused, |
| | 18726 | .unused, |
| | 18727 | .unused, |
| | 18728 | .unused, |
| | 18729 | .unused, |
| | 18730 | }, |
| | 18731 | .dst_temps = .{.{ .cc = cc }}, |
| | 18732 | .clobbers = .{ .eflags = true }, |
| | 18733 | .each = .{ .once = &.{ |
| | 18734 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 18735 | .{ ._, .vp_, .xor, .tmp1y, .tmp1y, .tmp1y, ._ }, |
| | 18736 | .{ .@"0:", .v_dqu, .mov, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 18737 | .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| | 18738 | .{ ._, .vp_, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ }, |
| | 18739 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 18740 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 18741 | .{ ._, .vp_, .@"test", .tmp1y, .tmp1y, ._, ._ }, |
| | 18742 | } }, |
| | 18743 | }, .{ |
| | 18744 | .required_features = .{ .avx, null, null, null }, |
| | 18745 | .src_constraints = .{ |
| | 18746 | .{ .remainder_int = .{ .of = .yword, .is = .xword } }, |
| | 18747 | .{ .remainder_int = .{ .of = .yword, .is = .xword } }, |
| | 18748 | }, |
| | 18749 | .patterns = &.{ |
| | 18750 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 18751 | }, |
| | 18752 | .extra_temps = .{ |
| | 18753 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 18754 | .{ .kind = .{ .rc = .sse } }, |
| | 18755 | .{ .kind = .{ .rc = .sse } }, |
| | 18756 | .unused, |
| | 18757 | .unused, |
| | 18758 | .unused, |
| | 18759 | .unused, |
| | 18760 | .unused, |
| | 18761 | .unused, |
| | 18762 | }, |
| | 18763 | .dst_temps = .{.{ .cc = cc }}, |
| | 18764 | .clobbers = .{ .eflags = true }, |
| | 18765 | .each = .{ .once = &.{ |
| | 18766 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| | 18767 | .{ ._, .v_pd, .xor, .tmp1y, .tmp1y, .tmp1y, ._ }, |
| | 18768 | .{ .@"0:", .v_pd, .movu, .tmp2y, .memiad(.src0y, .tmp0, .add_size, -16), ._, ._ }, |
| | 18769 | .{ ._, .v_pd, .xor, .tmp2y, .tmp2y, .memiad(.src1y, .tmp0, .add_size, -16), ._ }, |
| | 18770 | .{ ._, .v_pd, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ }, |
| | 18771 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 18772 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 18773 | .{ ._, .v_pd, .mova, .tmp2x, .memad(.src0x, .add_size, -16), ._, ._ }, |
| | 18774 | .{ ._, .v_pd, .xor, .tmp2x, .tmp2x, .memad(.src1x, .add_size, -16), ._ }, |
| | 18775 | .{ ._, .v_pd, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ }, |
| | 18776 | .{ ._, .vp_, .@"test", .tmp1y, .tmp1y, ._, ._ }, |
| | 18777 | } }, |
| | 18778 | }, .{ |
| | 18779 | .required_features = .{ .avx, null, null, null }, |
| | 18780 | .src_constraints = .{ |
| | 18781 | .{ .remainder_int = .{ .of = .yword, .is = .yword } }, |
| | 18782 | .{ .remainder_int = .{ .of = .yword, .is = .yword } }, |
| | 18783 | }, |
| | 18784 | .patterns = &.{ |
| | 18785 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 18786 | }, |
| | 18787 | .extra_temps = .{ |
| | 18788 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 18789 | .{ .kind = .{ .rc = .sse } }, |
| | 18790 | .{ .kind = .{ .rc = .sse } }, |
| | 18791 | .unused, |
| | 18792 | .unused, |
| | 18793 | .unused, |
| | 18794 | .unused, |
| | 18795 | .unused, |
| | 18796 | .unused, |
| | 18797 | }, |
| | 18798 | .dst_temps = .{.{ .cc = cc }}, |
| | 18799 | .clobbers = .{ .eflags = true }, |
| | 18800 | .each = .{ .once = &.{ |
| | 18801 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 18802 | .{ ._, .v_pd, .xor, .tmp1y, .tmp1y, .tmp1y, ._ }, |
| | 18803 | .{ .@"0:", .v_pd, .movu, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 18804 | .{ ._, .v_pd, .xor, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| | 18805 | .{ ._, .v_pd, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ }, |
| | 18806 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| | 18807 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 18808 | .{ ._, .vp_, .@"test", .tmp1y, .tmp1y, ._, ._ }, |
| | 18809 | } }, |
| | 18810 | }, .{ |
| | 18811 | .required_features = .{ .avx, null, null, null }, |
| | 18812 | .src_constraints = .{ |
| | 18813 | .{ .remainder_int = .{ .of = .xword, .is = .xword } }, |
| | 18814 | .{ .remainder_int = .{ .of = .xword, .is = .xword } }, |
| | 18815 | }, |
| | 18816 | .patterns = &.{ |
| | 18817 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 18818 | }, |
| | 18819 | .extra_temps = .{ |
| | 18820 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 18821 | .{ .kind = .{ .rc = .sse } }, |
| | 18822 | .{ .kind = .{ .rc = .sse } }, |
| | 18823 | .unused, |
| | 18824 | .unused, |
| | 18825 | .unused, |
| | 18826 | .unused, |
| | 18827 | .unused, |
| | 18828 | .unused, |
| | 18829 | }, |
| | 18830 | .dst_temps = .{.{ .cc = cc }}, |
| | 18831 | .clobbers = .{ .eflags = true }, |
| | 18832 | .each = .{ .once = &.{ |
| | 18833 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 18834 | .{ ._, .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ }, |
| | 18835 | .{ .@"0:", .v_dqu, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 18836 | .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 18837 | .{ ._, .vp_, .@"or", .tmp1x, .tmp1x, .tmp2x, ._ }, |
| | 18838 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 18839 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 18840 | .{ ._, .vp_, .@"test", .tmp1x, .tmp1x, ._, ._ }, |
| | 18841 | } }, |
| | 18842 | }, .{ |
| | 18843 | .required_features = .{ .sse4_1, null, null, null }, |
| | 18844 | .src_constraints = .{ |
| | 18845 | .{ .remainder_int = .{ .of = .xword, .is = .xword } }, |
| | 18846 | .{ .remainder_int = .{ .of = .xword, .is = .xword } }, |
| | 18847 | }, |
| | 18848 | .patterns = &.{ |
| | 18849 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 18850 | }, |
| | 18851 | .extra_temps = .{ |
| | 18852 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 18853 | .{ .kind = .{ .rc = .sse } }, |
| | 18854 | .{ .kind = .{ .rc = .sse } }, |
| | 18855 | .unused, |
| | 18856 | .unused, |
| | 18857 | .unused, |
| | 18858 | .unused, |
| | 18859 | .unused, |
| | 18860 | .unused, |
| | 18861 | }, |
| | 18862 | .dst_temps = .{.{ .cc = cc }}, |
| | 18863 | .clobbers = .{ .eflags = true }, |
| | 18864 | .each = .{ .once = &.{ |
| | 18865 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 18866 | .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| | 18867 | .{ .@"0:", ._dqu, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 18868 | .{ ._, .p_, .xor, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 18869 | .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ }, |
| | 18870 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 18871 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 18872 | .{ ._, .p_, .@"test", .tmp1x, .tmp1x, ._, ._ }, |
| | 18873 | } }, |
| | 18874 | }, .{ |
| | 18875 | .required_features = .{ .sse2, null, null, null }, |
| | 18876 | .src_constraints = .{ |
| | 18877 | .{ .remainder_int = .{ .of = .xword, .is = .xword } }, |
| | 18878 | .{ .remainder_int = .{ .of = .xword, .is = .xword } }, |
| | 18879 | }, |
| | 18880 | .patterns = &.{ |
| | 18881 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 18882 | }, |
| | 18883 | .extra_temps = .{ |
| | 18884 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 18885 | .{ .kind = .{ .rc = .sse } }, |
| | 18886 | .{ .kind = .{ .rc = .sse } }, |
| | 18887 | .unused, |
| | 18888 | .unused, |
| | 18889 | .unused, |
| | 18890 | .unused, |
| | 18891 | .unused, |
| | 18892 | .unused, |
| | 18893 | }, |
| | 18894 | .dst_temps = .{.{ .cc = cc }}, |
| | 18895 | .clobbers = .{ .eflags = true }, |
| | 18896 | .each = .{ .once = &.{ |
| | 18897 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 18898 | .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| | 18899 | .{ .@"0:", ._dqu, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 18900 | .{ ._, .p_, .xor, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 18901 | .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ }, |
| | 18902 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| | 18903 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 18904 | .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ }, |
| | 18905 | .{ ._, .p_b, .cmpeq, .tmp1x, .tmp2x, ._, ._ }, |
| | 18906 | .{ ._, .p_b, .movmsk, .tmp0d, .tmp1x, ._, ._ }, |
| | 18907 | .{ ._, ._, .cmp, .tmp0d, .si(0xffff), ._, ._ }, |
| | 18908 | } }, |
| | 18909 | }, .{ |
| | 18910 | .required_features = .{ .sse, .mmx, null, null }, |
| | 18911 | .src_constraints = .{ |
| | 18912 | .{ .remainder_int = .{ .of = .qword, .is = .qword } }, |
| | 18913 | .{ .remainder_int = .{ .of = .qword, .is = .qword } }, |
| | 18914 | }, |
| | 18915 | .patterns = &.{ |
| | 18916 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 18917 | }, |
| | 18918 | .extra_temps = .{ |
| | 18919 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 18920 | .{ .kind = .{ .rc = .mmx } }, |
| | 18921 | .{ .kind = .{ .rc = .mmx } }, |
| | 18922 | .unused, |
| | 18923 | .unused, |
| | 18924 | .unused, |
| | 18925 | .unused, |
| | 18926 | .unused, |
| | 18927 | .unused, |
| | 18928 | }, |
| | 18929 | .dst_temps = .{.{ .cc = cc }}, |
| | 18930 | .clobbers = .{ .eflags = true }, |
| | 18931 | .each = .{ .once = &.{ |
| | 18932 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 18933 | .{ ._, .p_, .xor, .tmp1q, .tmp1q, ._, ._ }, |
| | 18934 | .{ .@"0:", ._q, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 18935 | .{ ._, .p_, .xor, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 18936 | .{ ._, .p_, .@"or", .tmp1q, .tmp2q, ._, ._ }, |
| | 18937 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| | 18938 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 18939 | .{ ._, .p_, .xor, .tmp2q, .tmp2q, ._, ._ }, |
| | 18940 | .{ ._, .p_b, .cmpeq, .tmp1q, .tmp2q, ._, ._ }, |
| | 18941 | .{ ._, .p_b, .movmsk, .tmp0d, .tmp1q, ._, ._ }, |
| | 18942 | .{ ._, ._, .cmp, .tmp0d, .si(0xff), ._, ._ }, |
| | 18943 | } }, |
| | 18944 | }, .{ |
| | 18945 | .src_constraints = .{ |
| | 18946 | .{ .remainder_int = .{ .of = .qword, .is = .qword } }, |
| | 18947 | .{ .remainder_int = .{ .of = .qword, .is = .qword } }, |
| | 18948 | }, |
| | 18949 | .patterns = &.{ |
| | 18950 | .{ .src = .{ .to_mem, .to_mem } }, |
| | 18951 | }, |
| | 18952 | .extra_temps = .{ |
| | 18953 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| | 18954 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 18955 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| | 18956 | .unused, |
| | 18957 | .unused, |
| | 18958 | .unused, |
| | 18959 | .unused, |
| | 18960 | .unused, |
| | 18961 | .unused, |
| | 18962 | }, |
| | 18963 | .dst_temps = .{.{ .cc = cc }}, |
| | 18964 | .clobbers = .{ .eflags = true }, |
| | 18965 | .each = .{ .once = &.{ |
| | 18966 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| | 18967 | .{ ._, ._, .xor, .tmp1p, .tmp1p, ._, ._ }, |
| | 18968 | .{ .@"0:", ._, .mov, .tmp2p, .memia(.src0p, .tmp0, .add_size), ._, ._ }, |
| | 18969 | .{ ._, ._, .xor, .tmp2p, .memia(.src1p, .tmp0, .add_size), ._, ._ }, |
| | 18970 | .{ ._, ._, .@"or", .tmp1p, .tmp2p, ._, ._ }, |
| | 18971 | .{ ._, ._, .add, .tmp0p, .sa(.tmp2, .add_size), ._, ._ }, |
| | 18972 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 18973 | .{ ._, ._, .@"test", .tmp1p, .tmp1p, ._, ._ }, |
| | 18974 | } }, |
| | 18975 | }, .{ |
| | 18976 | .required_features = .{ .f16c, null, null, null }, |
| | 18977 | .src_constraints = .{ .{ .float = .word }, .{ .float = .word } }, |
| | 18978 | .patterns = &.{ |
| | 18979 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 18980 | }, |
| | 18981 | .extra_temps = .{ |
| | 18982 | .{ .kind = .{ .rc = .sse } }, |
| | 18983 | .{ .kind = .{ .rc = .sse } }, |
| | 18984 | .unused, |
| | 18985 | .unused, |
| | 18986 | .unused, |
| | 18987 | .unused, |
| | 18988 | .unused, |
| | 18989 | .unused, |
| | 18990 | .unused, |
| | 18991 | }, |
| | 18992 | .dst_temps = .{.{ .cc = switch (cc) { |
| | 18993 | else => unreachable, |
| | 18994 | .e => .z_and_np, |
| | 18995 | .ne => .nz_or_p, |
| | 18996 | } }}, |
| | 18997 | .clobbers = .{ .eflags = true }, |
| | 18998 | .each = .{ .once = &.{ |
| | 18999 | .{ ._, .vp_, .unpcklwd, .tmp0x, .src0x, .src1x, ._ }, |
| | 19000 | .{ ._, .v_ps, .cvtph2, .tmp0x, .tmp0x, ._, ._ }, |
| | 19001 | .{ ._, .v_, .movshdup, .tmp1x, .tmp0x, ._, ._ }, |
| | 19002 | .{ ._, .v_ss, .ucomi, .tmp0x, .tmp1x, ._, ._ }, |
| | 19003 | } }, |
| | 19004 | }, .{ |
| | 19005 | .required_features = .{ .sse, null, null, null }, |
| | 19006 | .src_constraints = .{ .{ .float = .word }, .{ .float = .word } }, |
| | 19007 | .patterns = &.{ |
| | 19008 | .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } }, |
| | 19009 | }, |
| | 19010 | .call_frame = .{ .alignment = .@"16" }, |
| | 19011 | .extra_temps = .{ |
| | 19012 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 19013 | else => unreachable, |
| | 19014 | .e => "__eqhf2", |
| | 19015 | .ne => "__nehf2", |
| | 19016 | } } } }, |
| | 19017 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| | 19018 | .unused, |
| | 19019 | .unused, |
| | 19020 | .unused, |
| | 19021 | .unused, |
| | 19022 | .unused, |
| | 19023 | .unused, |
| | 19024 | .unused, |
| | 19025 | }, |
| | 19026 | .dst_temps = .{.{ .cc = cc }}, |
| | 19027 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| | 19028 | .each = .{ .once = &.{ |
| | 19029 | .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, |
| | 19030 | .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ }, |
| | 19031 | } }, |
| | 19032 | }, .{ |
| | 19033 | .required_features = .{ .avx, null, null, null }, |
| | 19034 | .src_constraints = .{ .{ .float = .dword }, .{ .float = .dword } }, |
| | 19035 | .patterns = &.{ |
| | 19036 | .{ .src = .{ .to_sse, .mem } }, |
| | 19037 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 19038 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 19039 | }, |
| | 19040 | .extra_temps = .{ |
| | 19041 | .{ .type = .f16, .kind = .{ .rc = .sse } }, |
| | 19042 | .{ .type = .f16, .kind = .{ .rc = .sse } }, |
| | 19043 | .unused, |
| | 19044 | .unused, |
| | 19045 | .unused, |
| | 19046 | .unused, |
| | 19047 | .unused, |
| | 19048 | .unused, |
| | 19049 | .unused, |
| | 19050 | }, |
| | 19051 | .dst_temps = .{.{ .cc = switch (cc) { |
| | 19052 | else => unreachable, |
| | 19053 | .e => .z_and_np, |
| | 19054 | .ne => .nz_or_p, |
| | 19055 | } }}, |
| | 19056 | .clobbers = .{ .eflags = true }, |
| | 19057 | .each = .{ .once = &.{ |
| | 19058 | .{ ._, .v_ss, .ucomi, .src0x, .src1d, ._, ._ }, |
| | 19059 | } }, |
| | 19060 | }, .{ |
| | 19061 | .required_features = .{ .sse, null, null, null }, |
| | 19062 | .src_constraints = .{ .{ .float = .dword }, .{ .float = .dword } }, |
| | 19063 | .patterns = &.{ |
| | 19064 | .{ .src = .{ .to_sse, .mem } }, |
| | 19065 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| | 19066 | .{ .src = .{ .to_sse, .to_sse } }, |
| | 19067 | }, |
| | 19068 | .extra_temps = .{ |
| | 19069 | .{ .type = .f16, .kind = .{ .rc = .sse } }, |
| | 19070 | .{ .type = .f16, .kind = .{ .rc = .sse } }, |
| | 19071 | .unused, |
| | 19072 | .unused, |
| | 19073 | .unused, |
| | 19074 | .unused, |
| | 19075 | .unused, |
| | 19076 | .unused, |
| | 19077 | .unused, |
| 10278 | }, | 19078 | }, |
| 10279 | .dst_temps = .{.{ .cc = cc }}, | 19079 | .dst_temps = .{.{ .cc = switch (cc) { |
| | 19080 | else => unreachable, |
| | 19081 | .e => .z_and_np, |
| | 19082 | .ne => .nz_or_p, |
| | 19083 | } }}, |
| 10280 | .clobbers = .{ .eflags = true }, | 19084 | .clobbers = .{ .eflags = true }, |
| 10281 | .each = .{ .once = &.{ | 19085 | .each = .{ .once = &.{ |
| 10282 | .{ ._, .p_, .xor, .tmp1q, .tmp1q, ._, ._ }, | 19086 | .{ ._, ._ss, .ucomi, .src0x, .src1d, ._, ._ }, |
| 10283 | .{ ._, .p_, .xor, .src0q, .src1q, ._, ._ }, | | |
| 10284 | .{ ._, .p_b, .cmpeq, .tmp1q, .src0q, ._, ._ }, | | |
| 10285 | .{ ._, .p_b, .movmsk, .tmp0d, .tmp1q, ._, ._ }, | | |
| 10286 | .{ ._, ._, .xor, .tmp0d, .si(0xff), ._, ._ }, | | |
| 10287 | } }, | 19087 | } }, |
| 10288 | }, .{ | 19088 | }, .{ |
| 10289 | .required_features = .{ .avx, null, null, null }, | 19089 | .required_features = .{ .sse, null, null, null }, |
| 10290 | .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword } }, | 19090 | .src_constraints = .{ .{ .float = .dword }, .{ .float = .word } }, |
| 10291 | .patterns = &.{ | 19091 | .patterns = &.{ |
| 10292 | .{ .src = .{ .to_xmm, .mem } }, | 19092 | .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } }, |
| 10293 | .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } }, | | |
| 10294 | .{ .src = .{ .to_xmm, .to_xmm } }, | | |
| 10295 | }, | 19093 | }, |
| | 19094 | .call_frame = .{ .alignment = .@"16" }, |
| 10296 | .extra_temps = .{ | 19095 | .extra_temps = .{ |
| 10297 | .{ .kind = .{ .rc = .sse } }, | 19096 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 19097 | else => unreachable, |
| | 19098 | .e => "__eqsf2", |
| | 19099 | .ne => "__nesf2", |
| | 19100 | } } } }, |
| | 19101 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| | 19102 | .unused, |
| | 19103 | .unused, |
| 10298 | .unused, | 19104 | .unused, |
| 10299 | .unused, | 19105 | .unused, |
| 10300 | .unused, | 19106 | .unused, |
| ... | @@ -10302,82 +19108,83 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10302,82 +19108,83 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10302 | .unused, | 19108 | .unused, |
| 10303 | }, | 19109 | }, |
| 10304 | .dst_temps = .{.{ .cc = cc }}, | 19110 | .dst_temps = .{.{ .cc = cc }}, |
| 10305 | .clobbers = .{ .eflags = true }, | 19111 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 10306 | .each = .{ .once = &.{ | | |
| 10307 | .{ ._, .vp_, .xor, .tmp0x, .src0x, .src1x, ._ }, | | |
| 10308 | .{ ._, .vp_, .@"test", .tmp0x, .tmp0x, ._, ._ }, | | |
| 10309 | } }, | | |
| 10310 | }, .{ | | |
| 10311 | .required_features = .{ .sse4_1, null, null, null }, | | |
| 10312 | .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword } }, | | |
| 10313 | .patterns = &.{ | | |
| 10314 | .{ .src = .{ .to_mut_xmm, .mem } }, | | |
| 10315 | .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } }, | | |
| 10316 | .{ .src = .{ .to_mut_xmm, .to_xmm } }, | | |
| 10317 | }, | | |
| 10318 | .dst_temps = .{.{ .cc = cc }}, | | |
| 10319 | .clobbers = .{ .eflags = true }, | | |
| 10320 | .each = .{ .once = &.{ | 19112 | .each = .{ .once = &.{ |
| 10321 | .{ ._, .p_, .xor, .src0x, .src1x, ._, ._ }, | 19113 | .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, |
| 10322 | .{ ._, .p_, .@"test", .src0x, .src0x, ._, ._ }, | 19114 | .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ }, |
| 10323 | } }, | 19115 | } }, |
| 10324 | }, .{ | 19116 | }, .{ |
| 10325 | .required_features = .{ .sse2, null, null, null }, | 19117 | .required_features = .{ .avx, null, null, null }, |
| 10326 | .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword } }, | 19118 | .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword } }, |
| 10327 | .patterns = &.{ | 19119 | .patterns = &.{ |
| 10328 | .{ .src = .{ .to_mut_xmm, .mem } }, | 19120 | .{ .src = .{ .to_sse, .mem } }, |
| 10329 | .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } }, | 19121 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 10330 | .{ .src = .{ .to_mut_xmm, .to_xmm } }, | 19122 | .{ .src = .{ .to_sse, .to_sse } }, |
| 10331 | }, | 19123 | }, |
| 10332 | .extra_temps = .{ | 19124 | .extra_temps = .{ |
| 10333 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 19125 | .{ .type = .f16, .kind = .{ .rc = .sse } }, |
| 10334 | .{ .kind = .{ .rc = .sse } }, | 19126 | .{ .type = .f16, .kind = .{ .rc = .sse } }, |
| | 19127 | .unused, |
| | 19128 | .unused, |
| | 19129 | .unused, |
| 10335 | .unused, | 19130 | .unused, |
| 10336 | .unused, | 19131 | .unused, |
| 10337 | .unused, | 19132 | .unused, |
| 10338 | .unused, | 19133 | .unused, |
| 10339 | }, | 19134 | }, |
| 10340 | .dst_temps = .{.{ .cc = cc }}, | 19135 | .dst_temps = .{.{ .cc = switch (cc) { |
| | 19136 | else => unreachable, |
| | 19137 | .e => .z_and_np, |
| | 19138 | .ne => .nz_or_p, |
| | 19139 | } }}, |
| 10341 | .clobbers = .{ .eflags = true }, | 19140 | .clobbers = .{ .eflags = true }, |
| 10342 | .each = .{ .once = &.{ | 19141 | .each = .{ .once = &.{ |
| 10343 | .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, | 19142 | .{ ._, .v_sd, .ucomi, .src0x, .src1q, ._, ._ }, |
| 10344 | .{ ._, .p_, .xor, .src0x, .src1x, ._, ._ }, | | |
| 10345 | .{ ._, .p_b, .cmpeq, .tmp1x, .src0x, ._, ._ }, | | |
| 10346 | .{ ._, .p_b, .movmsk, .tmp0d, .tmp1x, ._, ._ }, | | |
| 10347 | .{ ._, ._, .xor, .tmp0d, .si(0xffff), ._, ._ }, | | |
| 10348 | } }, | 19143 | } }, |
| 10349 | }, .{ | 19144 | }, .{ |
| 10350 | .required_features = .{ .avx2, null, null, null }, | 19145 | .required_features = .{ .sse2, null, null, null }, |
| 10351 | .src_constraints = .{ .{ .int = .yword }, .{ .int = .yword } }, | 19146 | .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword } }, |
| 10352 | .patterns = &.{ | 19147 | .patterns = &.{ |
| 10353 | .{ .src = .{ .to_ymm, .mem } }, | 19148 | .{ .src = .{ .to_sse, .mem } }, |
| 10354 | .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } }, | 19149 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 10355 | .{ .src = .{ .to_ymm, .to_ymm } }, | 19150 | .{ .src = .{ .to_sse, .to_sse } }, |
| 10356 | }, | 19151 | }, |
| 10357 | .extra_temps = .{ | 19152 | .extra_temps = .{ |
| 10358 | .{ .kind = .{ .rc = .sse } }, | 19153 | .{ .type = .f16, .kind = .{ .rc = .sse } }, |
| | 19154 | .{ .type = .f16, .kind = .{ .rc = .sse } }, |
| | 19155 | .unused, |
| | 19156 | .unused, |
| 10359 | .unused, | 19157 | .unused, |
| 10360 | .unused, | 19158 | .unused, |
| 10361 | .unused, | 19159 | .unused, |
| 10362 | .unused, | 19160 | .unused, |
| 10363 | .unused, | 19161 | .unused, |
| 10364 | }, | 19162 | }, |
| 10365 | .dst_temps = .{.{ .cc = cc }}, | 19163 | .dst_temps = .{.{ .cc = switch (cc) { |
| | 19164 | else => unreachable, |
| | 19165 | .e => .z_and_np, |
| | 19166 | .ne => .nz_or_p, |
| | 19167 | } }}, |
| 10366 | .clobbers = .{ .eflags = true }, | 19168 | .clobbers = .{ .eflags = true }, |
| 10367 | .each = .{ .once = &.{ | 19169 | .each = .{ .once = &.{ |
| 10368 | .{ ._, .vp_, .xor, .tmp0y, .src0y, .src1y, ._ }, | 19170 | .{ ._, ._sd, .ucomi, .src0x, .src1q, ._, ._ }, |
| 10369 | .{ ._, .vp_, .@"test", .tmp0y, .tmp0y, ._, ._ }, | | |
| 10370 | } }, | 19171 | } }, |
| 10371 | }, .{ | 19172 | }, .{ |
| 10372 | .required_features = .{ .avx, null, null, null }, | 19173 | .required_features = .{ .sse, null, null, null }, |
| 10373 | .src_constraints = .{ .{ .int = .yword }, .{ .int = .yword } }, | 19174 | .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword } }, |
| 10374 | .patterns = &.{ | 19175 | .patterns = &.{ |
| 10375 | .{ .src = .{ .to_ymm, .mem } }, | 19176 | .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } }, |
| 10376 | .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } }, | | |
| 10377 | .{ .src = .{ .to_ymm, .to_ymm } }, | | |
| 10378 | }, | 19177 | }, |
| | 19178 | .call_frame = .{ .alignment = .@"16" }, |
| 10379 | .extra_temps = .{ | 19179 | .extra_temps = .{ |
| 10380 | .{ .kind = .{ .rc = .sse } }, | 19180 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| | 19181 | else => unreachable, |
| | 19182 | .e => "__eqdf2", |
| | 19183 | .ne => "__nedf2", |
| | 19184 | } } } }, |
| | 19185 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| | 19186 | .unused, |
| | 19187 | .unused, |
| 10381 | .unused, | 19188 | .unused, |
| 10382 | .unused, | 19189 | .unused, |
| 10383 | .unused, | 19190 | .unused, |
| ... | @@ -10385,109 +19192,112 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10385,109 +19192,112 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10385 | .unused, | 19192 | .unused, |
| 10386 | }, | 19193 | }, |
| 10387 | .dst_temps = .{.{ .cc = cc }}, | 19194 | .dst_temps = .{.{ .cc = cc }}, |
| 10388 | .clobbers = .{ .eflags = true }, | 19195 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 10389 | .each = .{ .once = &.{ | 19196 | .each = .{ .once = &.{ |
| 10390 | .{ ._, .v_pd, .xor, .tmp0y, .src0y, .src1y, ._ }, | 19197 | .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, |
| 10391 | .{ ._, .vp_, .@"test", .tmp0y, .tmp0y, ._, ._ }, | 19198 | .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ }, |
| 10392 | } }, | 19199 | } }, |
| 10393 | }, .{ | 19200 | }, .{ |
| 10394 | .required_features = .{ .avx2, null, null, null }, | 19201 | .required_features = .{ .x87, .cmov, null, null }, |
| 10395 | .src_constraints = .{ | 19202 | .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } }, |
| 10396 | .{ .remainder_int = .{ .of = .yword, .is = .xword } }, | | |
| 10397 | .{ .remainder_int = .{ .of = .yword, .is = .xword } }, | | |
| 10398 | }, | | |
| 10399 | .patterns = &.{ | 19203 | .patterns = &.{ |
| 10400 | .{ .src = .{ .to_mem, .to_mem } }, | 19204 | .{ .src = .{ .mem, .mem } }, |
| 10401 | }, | 19205 | }, |
| 10402 | .extra_temps = .{ | 19206 | .extra_temps = .{ |
| 10403 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 19207 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 10404 | .{ .kind = .{ .rc = .sse } }, | 19208 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 10405 | .{ .kind = .{ .rc = .sse } }, | 19209 | .unused, |
| | 19210 | .unused, |
| | 19211 | .unused, |
| | 19212 | .unused, |
| 10406 | .unused, | 19213 | .unused, |
| 10407 | .unused, | 19214 | .unused, |
| 10408 | .unused, | 19215 | .unused, |
| 10409 | }, | 19216 | }, |
| 10410 | .dst_temps = .{.{ .cc = cc }}, | 19217 | .dst_temps = .{.{ .cc = switch (cc) { |
| | 19218 | else => unreachable, |
| | 19219 | .e => .z_and_np, |
| | 19220 | .ne => .nz_or_p, |
| | 19221 | } }}, |
| 10411 | .clobbers = .{ .eflags = true }, | 19222 | .clobbers = .{ .eflags = true }, |
| 10412 | .each = .{ .once = &.{ | 19223 | .each = .{ .once = &.{ |
| 10413 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, | 19224 | .{ ._, .f_, .ld, .src1t, ._, ._, ._ }, |
| 10414 | .{ ._, .vp_, .xor, .tmp1y, .tmp1y, .tmp1y, ._ }, | 19225 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 10415 | .{ .@"0:", .v_dqu, .mov, .tmp2y, .memiad(.src0y, .tmp0, .add_size, -16), ._, ._ }, | 19226 | .{ ._, .f_p, .ucomi, .tmp0t, .tmp1t, ._, ._ }, |
| 10416 | .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .memiad(.src1y, .tmp0, .add_size, -16), ._ }, | 19227 | .{ ._, .f_p, .st, .tmp1t, ._, ._, ._ }, |
| 10417 | .{ ._, .vp_, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ }, | | |
| 10418 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | | |
| 10419 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 10420 | .{ ._, .v_dqa, .mov, .tmp2x, .memad(.src0x, .add_size, -16), ._, ._ }, | | |
| 10421 | .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .memad(.src1x, .add_size, -16), ._ }, | | |
| 10422 | .{ ._, .vp_, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ }, | | |
| 10423 | .{ ._, .vp_, .@"test", .tmp1y, .tmp1y, ._, ._ }, | | |
| 10424 | } }, | 19228 | } }, |
| 10425 | }, .{ | 19229 | }, .{ |
| 10426 | .required_features = .{ .avx2, null, null, null }, | 19230 | .required_features = .{ .x87, .cmov, null, null }, |
| | 19231 | .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } }, |
| 10427 | .patterns = &.{ | 19232 | .patterns = &.{ |
| 10428 | .{ .src = .{ .to_mem, .to_mem } }, | 19233 | .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } }, |
| | 19234 | .{ .src = .{ .mem, .to_x87 } }, |
| | 19235 | .{ .src = .{ .to_x87, .to_x87 } }, |
| 10429 | }, | 19236 | }, |
| 10430 | .extra_temps = .{ | 19237 | .extra_temps = .{ |
| 10431 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 19238 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 10432 | .{ .kind = .{ .rc = .sse } }, | 19239 | .unused, |
| 10433 | .{ .kind = .{ .rc = .sse } }, | 19240 | .unused, |
| | 19241 | .unused, |
| | 19242 | .unused, |
| | 19243 | .unused, |
| 10434 | .unused, | 19244 | .unused, |
| 10435 | .unused, | 19245 | .unused, |
| 10436 | .unused, | 19246 | .unused, |
| 10437 | }, | 19247 | }, |
| 10438 | .dst_temps = .{.{ .cc = cc }}, | 19248 | .dst_temps = .{.{ .cc = switch (cc) { |
| | 19249 | else => unreachable, |
| | 19250 | .e => .z_and_np, |
| | 19251 | .ne => .nz_or_p, |
| | 19252 | } }}, |
| 10439 | .clobbers = .{ .eflags = true }, | 19253 | .clobbers = .{ .eflags = true }, |
| 10440 | .each = .{ .once = &.{ | 19254 | .each = .{ .once = &.{ |
| 10441 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 19255 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 10442 | .{ ._, .vp_, .xor, .tmp1y, .tmp1y, .tmp1y, ._ }, | 19256 | .{ ._, .f_p, .ucomi, .tmp0t, .src1t, ._, ._ }, |
| 10443 | .{ .@"0:", .v_dqu, .mov, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | | |
| 10444 | .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._ }, | | |
| 10445 | .{ ._, .vp_, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ }, | | |
| 10446 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | | |
| 10447 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 10448 | .{ ._, .vp_, .@"test", .tmp1y, .tmp1y, ._, ._ }, | | |
| 10449 | } }, | 19257 | } }, |
| 10450 | }, .{ | 19258 | }, .{ |
| 10451 | .required_features = .{ .avx, null, null, null }, | 19259 | .required_features = .{ .sahf, .x87, null, null }, |
| 10452 | .src_constraints = .{ | 19260 | .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } }, |
| 10453 | .{ .remainder_int = .{ .of = .yword, .is = .xword } }, | | |
| 10454 | .{ .remainder_int = .{ .of = .yword, .is = .xword } }, | | |
| 10455 | }, | | |
| 10456 | .patterns = &.{ | 19261 | .patterns = &.{ |
| 10457 | .{ .src = .{ .to_mem, .to_mem } }, | 19262 | .{ .src = .{ .mem, .mem } }, |
| 10458 | }, | 19263 | }, |
| 10459 | .extra_temps = .{ | 19264 | .extra_temps = .{ |
| 10460 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 19265 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 10461 | .{ .kind = .{ .rc = .sse } }, | 19266 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 10462 | .{ .kind = .{ .rc = .sse } }, | 19267 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| | 19268 | .unused, |
| | 19269 | .unused, |
| | 19270 | .unused, |
| 10463 | .unused, | 19271 | .unused, |
| 10464 | .unused, | 19272 | .unused, |
| 10465 | .unused, | 19273 | .unused, |
| 10466 | }, | 19274 | }, |
| 10467 | .dst_temps = .{.{ .cc = cc }}, | 19275 | .dst_temps = .{.{ .cc = switch (cc) { |
| | 19276 | else => unreachable, |
| | 19277 | .e => .z_and_np, |
| | 19278 | .ne => .nz_or_p, |
| | 19279 | } }}, |
| 10468 | .clobbers = .{ .eflags = true }, | 19280 | .clobbers = .{ .eflags = true }, |
| 10469 | .each = .{ .once = &.{ | 19281 | .each = .{ .once = &.{ |
| 10470 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, | 19282 | .{ ._, .f_, .ld, .src1t, ._, ._, ._ }, |
| 10471 | .{ ._, .v_pd, .xor, .tmp1y, .tmp1y, .tmp1y, ._ }, | 19283 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 10472 | .{ .@"0:", .v_pd, .movu, .tmp2y, .memiad(.src0y, .tmp0, .add_size, -16), ._, ._ }, | 19284 | .{ ._, .f_pp, .ucom, ._, ._, ._, ._ }, |
| 10473 | .{ ._, .v_pd, .xor, .tmp2y, .tmp2y, .memiad(.src1y, .tmp0, .add_size, -16), ._ }, | 19285 | .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ }, |
| 10474 | .{ ._, .v_pd, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ }, | 19286 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 10475 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | | |
| 10476 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 10477 | .{ ._, .v_pd, .mova, .tmp2x, .memad(.src0x, .add_size, -16), ._, ._ }, | | |
| 10478 | .{ ._, .v_pd, .xor, .tmp2x, .tmp2x, .memad(.src1x, .add_size, -16), ._ }, | | |
| 10479 | .{ ._, .v_pd, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ }, | | |
| 10480 | .{ ._, .vp_, .@"test", .tmp1y, .tmp1y, ._, ._ }, | | |
| 10481 | } }, | 19287 | } }, |
| 10482 | }, .{ | 19288 | }, .{ |
| 10483 | .required_features = .{ .avx, null, null, null }, | 19289 | .required_features = .{ .@"64bit", .x87, null, null }, |
| | 19290 | .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } }, |
| 10484 | .patterns = &.{ | 19291 | .patterns = &.{ |
| 10485 | .{ .src = .{ .to_mem, .to_mem } }, | 19292 | .{ .src = .{ .mem, .mem } }, |
| 10486 | }, | 19293 | }, |
| 10487 | .extra_temps = .{ | 19294 | .extra_temps = .{ |
| 10488 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 19295 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 10489 | .{ .kind = .{ .rc = .sse } }, | 19296 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 10490 | .{ .kind = .{ .rc = .sse } }, | 19297 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| | 19298 | .unused, |
| | 19299 | .unused, |
| | 19300 | .unused, |
| 10491 | .unused, | 19301 | .unused, |
| 10492 | .unused, | 19302 | .unused, |
| 10493 | .unused, | 19303 | .unused, |
| ... | @@ -10495,74 +19305,89 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10495,74 +19305,89 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10495 | .dst_temps = .{.{ .cc = cc }}, | 19305 | .dst_temps = .{.{ .cc = cc }}, |
| 10496 | .clobbers = .{ .eflags = true }, | 19306 | .clobbers = .{ .eflags = true }, |
| 10497 | .each = .{ .once = &.{ | 19307 | .each = .{ .once = &.{ |
| 10498 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 19308 | .{ ._, .f_, .ld, .src1t, ._, ._, ._ }, |
| 10499 | .{ ._, .v_pd, .xor, .tmp1y, .tmp1y, .tmp1y, ._ }, | 19309 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 10500 | .{ .@"0:", .v_pd, .movu, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, | 19310 | .{ ._, .f_pp, .ucom, ._, ._, ._, ._ }, |
| 10501 | .{ ._, .v_pd, .xor, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._ }, | 19311 | .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ }, |
| 10502 | .{ ._, .v_pd, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ }, | 19312 | .{ ._, ._, .xor, .tmp2b, .si(0b0_1_000_000), ._, ._ }, |
| 10503 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, | 19313 | .{ ._, ._, .@"test", .tmp2b, .si(0b0_1_000_100), ._, ._ }, |
| 10504 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 10505 | .{ ._, .vp_, .@"test", .tmp1y, .tmp1y, ._, ._ }, | | |
| 10506 | } }, | 19314 | } }, |
| 10507 | }, .{ | 19315 | }, .{ |
| 10508 | .required_features = .{ .avx, null, null, null }, | 19316 | .required_features = .{ .x87, null, null, null }, |
| | 19317 | .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } }, |
| 10509 | .patterns = &.{ | 19318 | .patterns = &.{ |
| 10510 | .{ .src = .{ .to_mem, .to_mem } }, | 19319 | .{ .src = .{ .mem, .mem } }, |
| 10511 | }, | 19320 | }, |
| 10512 | .extra_temps = .{ | 19321 | .extra_temps = .{ |
| 10513 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 19322 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 10514 | .{ .kind = .{ .rc = .sse } }, | 19323 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 10515 | .{ .kind = .{ .rc = .sse } }, | 19324 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| | 19325 | .unused, |
| | 19326 | .unused, |
| | 19327 | .unused, |
| 10516 | .unused, | 19328 | .unused, |
| 10517 | .unused, | 19329 | .unused, |
| 10518 | .unused, | 19330 | .unused, |
| 10519 | }, | 19331 | }, |
| 10520 | .dst_temps = .{.{ .cc = cc }}, | 19332 | .dst_temps = .{.{ .cc = switch (cc) { |
| | 19333 | else => unreachable, |
| | 19334 | .e => .z_and_np, |
| | 19335 | .ne => .nz_or_p, |
| | 19336 | } }}, |
| 10521 | .clobbers = .{ .eflags = true }, | 19337 | .clobbers = .{ .eflags = true }, |
| 10522 | .each = .{ .once = &.{ | 19338 | .each = .{ .once = &.{ |
| 10523 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 19339 | .{ ._, .f_, .ld, .src1t, ._, ._, ._ }, |
| 10524 | .{ ._, .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ }, | 19340 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 10525 | .{ .@"0:", .v_dqu, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 19341 | .{ ._, .f_pp, .ucom, ._, ._, ._, ._ }, |
| 10526 | .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._ }, | 19342 | .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ }, |
| 10527 | .{ ._, .vp_, .@"or", .tmp1x, .tmp1x, .tmp2x, ._ }, | 19343 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 10528 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | | |
| 10529 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 10530 | .{ ._, .vp_, .@"test", .tmp1x, .tmp1x, ._, ._ }, | | |
| 10531 | } }, | 19344 | } }, |
| 10532 | }, .{ | 19345 | }, .{ |
| 10533 | .required_features = .{ .sse4_1, null, null, null }, | 19346 | .required_features = .{ .sahf, .x87, null, null }, |
| | 19347 | .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } }, |
| 10534 | .patterns = &.{ | 19348 | .patterns = &.{ |
| 10535 | .{ .src = .{ .to_mem, .to_mem } }, | 19349 | .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } }, |
| | 19350 | .{ .src = .{ .mem, .to_x87 } }, |
| | 19351 | .{ .src = .{ .to_x87, .to_x87 } }, |
| 10536 | }, | 19352 | }, |
| 10537 | .extra_temps = .{ | 19353 | .extra_temps = .{ |
| 10538 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 19354 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 10539 | .{ .kind = .{ .rc = .sse } }, | 19355 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 10540 | .{ .kind = .{ .rc = .sse } }, | 19356 | .{ .type = .u16, .kind = .{ .reg = .ah } }, |
| | 19357 | .unused, |
| | 19358 | .unused, |
| | 19359 | .unused, |
| 10541 | .unused, | 19360 | .unused, |
| 10542 | .unused, | 19361 | .unused, |
| 10543 | .unused, | 19362 | .unused, |
| 10544 | }, | 19363 | }, |
| 10545 | .dst_temps = .{.{ .cc = cc }}, | 19364 | .dst_temps = .{.{ .cc = switch (cc) { |
| | 19365 | else => unreachable, |
| | 19366 | .e => .z_and_np, |
| | 19367 | .ne => .nz_or_p, |
| | 19368 | } }}, |
| 10546 | .clobbers = .{ .eflags = true }, | 19369 | .clobbers = .{ .eflags = true }, |
| 10547 | .each = .{ .once = &.{ | 19370 | .each = .{ .once = &.{ |
| 10548 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 19371 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 10549 | .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, | 19372 | .{ ._, .f_p, .ucom, .src1t, ._, ._, ._ }, |
| 10550 | .{ .@"0:", ._dqu, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 19373 | .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ }, |
| 10551 | .{ ._, .p_, .xor, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | 19374 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 10552 | .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ }, | | |
| 10553 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | | |
| 10554 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 10555 | .{ ._, .p_, .@"test", .tmp1x, .tmp1x, ._, ._ }, | | |
| 10556 | } }, | 19375 | } }, |
| 10557 | }, .{ | 19376 | }, .{ |
| 10558 | .required_features = .{ .sse2, null, null, null }, | 19377 | .required_features = .{ .@"64bit", .x87, null, null }, |
| | 19378 | .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } }, |
| 10559 | .patterns = &.{ | 19379 | .patterns = &.{ |
| 10560 | .{ .src = .{ .to_mem, .to_mem } }, | 19380 | .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } }, |
| | 19381 | .{ .src = .{ .mem, .to_x87 } }, |
| | 19382 | .{ .src = .{ .to_x87, .to_x87 } }, |
| 10561 | }, | 19383 | }, |
| 10562 | .extra_temps = .{ | 19384 | .extra_temps = .{ |
| 10563 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 19385 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 10564 | .{ .kind = .{ .rc = .sse } }, | 19386 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 10565 | .{ .kind = .{ .rc = .sse } }, | 19387 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| | 19388 | .unused, |
| | 19389 | .unused, |
| | 19390 | .unused, |
| 10566 | .unused, | 19391 | .unused, |
| 10567 | .unused, | 19392 | .unused, |
| 10568 | .unused, | 19393 | .unused, |
| ... | @@ -10570,69 +19395,70 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10570,69 +19395,70 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10570 | .dst_temps = .{.{ .cc = cc }}, | 19395 | .dst_temps = .{.{ .cc = cc }}, |
| 10571 | .clobbers = .{ .eflags = true }, | 19396 | .clobbers = .{ .eflags = true }, |
| 10572 | .each = .{ .once = &.{ | 19397 | .each = .{ .once = &.{ |
| 10573 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 19398 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 10574 | .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, | 19399 | .{ ._, .f_p, .ucom, .src1t, ._, ._, ._ }, |
| 10575 | .{ .@"0:", ._dqu, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, | 19400 | .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ }, |
| 10576 | .{ ._, .p_, .xor, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, | 19401 | .{ ._, ._, .xor, .tmp2b, .si(0b0_1_000_000), ._, ._ }, |
| 10577 | .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ }, | 19402 | .{ ._, ._, .@"test", .tmp2b, .si(0b0_1_000_100), ._, ._ }, |
| 10578 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, | | |
| 10579 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 10580 | .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ }, | | |
| 10581 | .{ ._, .p_b, .cmpeq, .tmp1x, .tmp2x, ._, ._ }, | | |
| 10582 | .{ ._, .p_b, .movmsk, .tmp0d, .tmp1x, ._, ._ }, | | |
| 10583 | .{ ._, ._, .cmp, .tmp0d, .si(0xffff), ._, ._ }, | | |
| 10584 | } }, | 19403 | } }, |
| 10585 | }, .{ | 19404 | }, .{ |
| 10586 | .required_features = .{ .sse, .mmx, null, null }, | 19405 | .required_features = .{ .x87, null, null, null }, |
| | 19406 | .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } }, |
| 10587 | .patterns = &.{ | 19407 | .patterns = &.{ |
| 10588 | .{ .src = .{ .to_mem, .to_mem } }, | 19408 | .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } }, |
| | 19409 | .{ .src = .{ .mem, .to_x87 } }, |
| | 19410 | .{ .src = .{ .to_x87, .to_x87 } }, |
| 10589 | }, | 19411 | }, |
| 10590 | .extra_temps = .{ | 19412 | .extra_temps = .{ |
| 10591 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 19413 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 10592 | .{ .kind = .{ .rc = .mmx } }, | 19414 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 10593 | .{ .kind = .{ .rc = .mmx } }, | 19415 | .{ .type = .u16, .kind = .{ .reg = .ah } }, |
| | 19416 | .unused, |
| | 19417 | .unused, |
| | 19418 | .unused, |
| 10594 | .unused, | 19419 | .unused, |
| 10595 | .unused, | 19420 | .unused, |
| 10596 | .unused, | 19421 | .unused, |
| 10597 | }, | 19422 | }, |
| 10598 | .dst_temps = .{.{ .cc = cc }}, | 19423 | .dst_temps = .{.{ .cc = switch (cc) { |
| | 19424 | else => unreachable, |
| | 19425 | .e => .z_and_np, |
| | 19426 | .ne => .nz_or_p, |
| | 19427 | } }}, |
| 10599 | .clobbers = .{ .eflags = true }, | 19428 | .clobbers = .{ .eflags = true }, |
| 10600 | .each = .{ .once = &.{ | 19429 | .each = .{ .once = &.{ |
| 10601 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 19430 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 10602 | .{ ._, .p_, .xor, .tmp1q, .tmp1q, ._, ._ }, | 19431 | .{ ._, .f_p, .ucom, .src1t, ._, ._, ._ }, |
| 10603 | .{ .@"0:", ._q, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, | 19432 | .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ }, |
| 10604 | .{ ._, .p_, .xor, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, | 19433 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 10605 | .{ ._, .p_, .@"or", .tmp1q, .tmp2q, ._, ._ }, | | |
| 10606 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, | | |
| 10607 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 10608 | .{ ._, .p_, .xor, .tmp2q, .tmp2q, ._, ._ }, | | |
| 10609 | .{ ._, .p_b, .cmpeq, .tmp1q, .tmp2q, ._, ._ }, | | |
| 10610 | .{ ._, .p_b, .movmsk, .tmp0d, .tmp1q, ._, ._ }, | | |
| 10611 | .{ ._, ._, .cmp, .tmp0d, .si(0xff), ._, ._ }, | | |
| 10612 | } }, | 19434 | } }, |
| 10613 | }, .{ | 19435 | }, .{ |
| | 19436 | .required_features = .{ .sse, null, null, null }, |
| | 19437 | .src_constraints = .{ .{ .float = .xword }, .{ .float = .xword } }, |
| 10614 | .patterns = &.{ | 19438 | .patterns = &.{ |
| 10615 | .{ .src = .{ .to_mem, .to_mem } }, | 19439 | .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } }, |
| 10616 | }, | 19440 | }, |
| | 19441 | .call_frame = .{ .alignment = .@"16" }, |
| 10617 | .extra_temps = .{ | 19442 | .extra_temps = .{ |
| 10618 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, | 19443 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| 10619 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 19444 | else => unreachable, |
| 10620 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 19445 | .e => "__eqtf2", |
| | 19446 | .ne => "__netf2", |
| | 19447 | } } } }, |
| | 19448 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| | 19449 | .unused, |
| | 19450 | .unused, |
| | 19451 | .unused, |
| | 19452 | .unused, |
| 10621 | .unused, | 19453 | .unused, |
| 10622 | .unused, | 19454 | .unused, |
| 10623 | .unused, | 19455 | .unused, |
| 10624 | }, | 19456 | }, |
| 10625 | .dst_temps = .{.{ .cc = cc }}, | 19457 | .dst_temps = .{.{ .cc = cc }}, |
| 10626 | .clobbers = .{ .eflags = true }, | 19458 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 10627 | .each = .{ .once = &.{ | 19459 | .each = .{ .once = &.{ |
| 10628 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, | 19460 | .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, |
| 10629 | .{ ._, ._, .xor, .tmp1p, .tmp1p, ._, ._ }, | 19461 | .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ }, |
| 10630 | .{ .@"0:", ._, .mov, .tmp2p, .memia(.src0p, .tmp0, .add_size), ._, ._ }, | | |
| 10631 | .{ ._, ._, .xor, .tmp2p, .memia(.src1p, .tmp0, .add_size), ._, ._ }, | | |
| 10632 | .{ ._, ._, .@"or", .tmp1p, .tmp2p, ._, ._ }, | | |
| 10633 | .{ ._, ._, .add, .tmp0p, .sa(.tmp2, .add_size), ._, ._ }, | | |
| 10634 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | | |
| 10635 | .{ ._, ._, .@"test", .tmp1p, .tmp1p, ._, ._ }, | | |
| 10636 | } }, | 19462 | } }, |
| 10637 | } }, | 19463 | } }, |
| 10638 | }) catch |err| switch (err) { | 19464 | }) catch |err| switch (err) { |
| ... | @@ -10644,10 +19470,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10644,10 +19470,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10644 | }), | 19470 | }), |
| 10645 | else => |e| return e, | 19471 | else => |e| return e, |
| 10646 | }; | 19472 | }; |
| 10647 | for (ops) |op| for (res) |r| { | 19473 | try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); |
| 10648 | if (op.index == r.index) break; | | |
| 10649 | } else try op.die(cg); | | |
| 10650 | try res[0].moveTo(inst, cg); | | |
| 10651 | }, | 19474 | }, |
| 10652 | | 19475 | |
| 10653 | .cond_br => try cg.airCondBr(inst), | 19476 | .cond_br => try cg.airCondBr(inst), |
| ... | @@ -10718,9 +19541,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10718,9 +19541,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10718 | .fromSize(opt_child_abi_size) }), | 19541 | .fromSize(opt_child_abi_size) }), |
| 10719 | .u(0), | 19542 | .u(0), |
| 10720 | ); | 19543 | ); |
| 10721 | var is_null = try cg.tempInit(.bool, .{ .eflags = .e }); | 19544 | const is_null = try cg.tempInit(.bool, .{ .eflags = .e }); |
| 10722 | try ops[0].die(cg); | 19545 | try is_null.finish(inst, &.{un_op}, &ops, cg); |
| 10723 | try is_null.moveTo(inst, cg); | | |
| 10724 | }, | 19546 | }, |
| 10725 | .is_non_null_ptr => if (use_old) try cg.airIsNonNullPtr(inst) else { | 19547 | .is_non_null_ptr => if (use_old) try cg.airIsNonNullPtr(inst) else { |
| 10726 | const un_op = air_datas[@intFromEnum(inst)].un_op; | 19548 | const un_op = air_datas[@intFromEnum(inst)].un_op; |
| ... | @@ -10741,9 +19563,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10741,9 +19563,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10741 | .fromSize(opt_child_abi_size) }), | 19563 | .fromSize(opt_child_abi_size) }), |
| 10742 | .u(0), | 19564 | .u(0), |
| 10743 | ); | 19565 | ); |
| 10744 | var is_non_null = try cg.tempInit(.bool, .{ .eflags = .ne }); | 19566 | const is_non_null = try cg.tempInit(.bool, .{ .eflags = .ne }); |
| 10745 | try ops[0].die(cg); | 19567 | try is_non_null.finish(inst, &.{un_op}, &ops, cg); |
| 10746 | try is_non_null.moveTo(inst, cg); | | |
| 10747 | }, | 19568 | }, |
| 10748 | .is_err_ptr => if (use_old) try cg.airIsErrPtr(inst) else { | 19569 | .is_err_ptr => if (use_old) try cg.airIsErrPtr(inst) else { |
| 10749 | const un_op = air_datas[@intFromEnum(inst)].un_op; | 19570 | const un_op = air_datas[@intFromEnum(inst)].un_op; |
| ... | @@ -10759,9 +19580,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10759,9 +19580,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10759 | try ops[0].tracking(cg).short.deref().mem(cg, .{ .size = cg.memSize(eu_err_ty) }), | 19580 | try ops[0].tracking(cg).short.deref().mem(cg, .{ .size = cg.memSize(eu_err_ty) }), |
| 10760 | .u(0), | 19581 | .u(0), |
| 10761 | ); | 19582 | ); |
| 10762 | var is_err = try cg.tempInit(.bool, .{ .eflags = .ne }); | 19583 | const is_err = try cg.tempInit(.bool, .{ .eflags = .ne }); |
| 10763 | try ops[0].die(cg); | 19584 | try is_err.finish(inst, &.{un_op}, &ops, cg); |
| 10764 | try is_err.moveTo(inst, cg); | | |
| 10765 | }, | 19585 | }, |
| 10766 | .is_non_err_ptr => if (use_old) try cg.airIsNonErrPtr(inst) else { | 19586 | .is_non_err_ptr => if (use_old) try cg.airIsNonErrPtr(inst) else { |
| 10767 | const un_op = air_datas[@intFromEnum(inst)].un_op; | 19587 | const un_op = air_datas[@intFromEnum(inst)].un_op; |
| ... | @@ -10777,9 +19597,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10777,9 +19597,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10777 | try ops[0].tracking(cg).short.deref().mem(cg, .{ .size = cg.memSize(eu_err_ty) }), | 19597 | try ops[0].tracking(cg).short.deref().mem(cg, .{ .size = cg.memSize(eu_err_ty) }), |
| 10778 | .u(0), | 19598 | .u(0), |
| 10779 | ); | 19599 | ); |
| 10780 | var is_non_err = try cg.tempInit(.bool, .{ .eflags = .e }); | 19600 | const is_non_err = try cg.tempInit(.bool, .{ .eflags = .e }); |
| 10781 | try ops[0].die(cg); | 19601 | try is_non_err.finish(inst, &.{un_op}, &ops, cg); |
| 10782 | try is_non_err.moveTo(inst, cg); | | |
| 10783 | }, | 19602 | }, |
| 10784 | .load => if (use_old) try cg.airLoad(inst) else fallback: { | 19603 | .load => if (use_old) try cg.airLoad(inst) else fallback: { |
| 10785 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; | 19604 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| ... | @@ -10790,26 +19609,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10790,26 +19609,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10790 | (ptr_info.flags.vector_index == .none or val_ty.toIntern() == .bool_type)) | 19609 | (ptr_info.flags.vector_index == .none or val_ty.toIntern() == .bool_type)) |
| 10791 | break :fallback try cg.airLoad(inst); | 19610 | break :fallback try cg.airLoad(inst); |
| 10792 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); | 19611 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 10793 | var res = try ops[0].load(val_ty, .{ | 19612 | const res = try ops[0].load(val_ty, .{ |
| 10794 | .disp = switch (ptr_info.flags.vector_index) { | 19613 | .disp = switch (ptr_info.flags.vector_index) { |
| 10795 | .none => 0, | 19614 | .none => 0, |
| 10796 | .runtime => unreachable, | 19615 | .runtime => unreachable, |
| 10797 | else => |vector_index| @intCast(val_ty.abiSize(zcu) * @intFromEnum(vector_index)), | 19616 | else => |vector_index| @intCast(val_ty.abiSize(zcu) * @intFromEnum(vector_index)), |
| 10798 | }, | 19617 | }, |
| 10799 | }, cg); | 19618 | }, cg); |
| 10800 | for (ops) |op| if (op.index != res.index) try op.die(cg); | 19619 | try res.finish(inst, &.{ty_op.operand}, &ops, cg); |
| 10801 | try res.moveTo(inst, cg); | | |
| 10802 | }, | 19620 | }, |
| 10803 | .int_from_ptr => if (use_old) try cg.airIntFromPtr(inst) else { | 19621 | .int_from_ptr => if (use_old) try cg.airIntFromPtr(inst) else { |
| 10804 | const un_op = air_datas[@intFromEnum(inst)].un_op; | 19622 | const un_op = air_datas[@intFromEnum(inst)].un_op; |
| 10805 | var ops = try cg.tempsFromOperands(inst, .{un_op}); | 19623 | var ops = try cg.tempsFromOperands(inst, .{un_op}); |
| 10806 | try ops[0].toSlicePtr(cg); | 19624 | try ops[0].toSlicePtr(cg); |
| 10807 | try ops[0].moveTo(inst, cg); | 19625 | try ops[0].finish(inst, &.{un_op}, &ops, cg); |
| 10808 | }, | 19626 | }, |
| 10809 | .int_from_bool => if (use_old) try cg.airIntFromBool(inst) else { | 19627 | .int_from_bool => if (use_old) try cg.airIntFromBool(inst) else { |
| 10810 | const un_op = air_datas[@intFromEnum(inst)].un_op; | 19628 | const un_op = air_datas[@intFromEnum(inst)].un_op; |
| 10811 | var ops = try cg.tempsFromOperands(inst, .{un_op}); | 19629 | const ops = try cg.tempsFromOperands(inst, .{un_op}); |
| 10812 | try ops[0].moveTo(inst, cg); | 19630 | try ops[0].finish(inst, &.{un_op}, &ops, cg); |
| 10813 | }, | 19631 | }, |
| 10814 | .ret => try cg.airRet(inst, false), | 19632 | .ret => try cg.airRet(inst, false), |
| 10815 | .ret_safe => try cg.airRet(inst, true), | 19633 | .ret_safe => try cg.airRet(inst, true), |
| ... | @@ -10848,8 +19666,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10848,8 +19666,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10848 | .unreach => {}, | 19666 | .unreach => {}, |
| 10849 | .optional_payload_ptr => if (use_old) try cg.airOptionalPayloadPtr(inst) else { | 19667 | .optional_payload_ptr => if (use_old) try cg.airOptionalPayloadPtr(inst) else { |
| 10850 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; | 19668 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| 10851 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); | 19669 | const ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 10852 | try ops[0].moveTo(inst, cg); | 19670 | try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg); |
| 10853 | }, | 19671 | }, |
| 10854 | .optional_payload_ptr_set => if (use_old) try cg.airOptionalPayloadPtrSet(inst) else { | 19672 | .optional_payload_ptr_set => if (use_old) try cg.airOptionalPayloadPtrSet(inst) else { |
| 10855 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; | 19673 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| ... | @@ -10864,7 +19682,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10864,7 +19682,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10864 | try has_value.die(cg); | 19682 | try has_value.die(cg); |
| 10865 | try ops[0].toOffset(-opt_child_abi_size, cg); | 19683 | try ops[0].toOffset(-opt_child_abi_size, cg); |
| 10866 | } | 19684 | } |
| 10867 | try ops[0].moveTo(inst, cg); | 19685 | try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg); |
| 10868 | }, | 19686 | }, |
| 10869 | .unwrap_errunion_payload_ptr => if (use_old) try cg.airUnwrapErrUnionPayloadPtr(inst) else { | 19687 | .unwrap_errunion_payload_ptr => if (use_old) try cg.airUnwrapErrUnionPayloadPtr(inst) else { |
| 10870 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; | 19688 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| ... | @@ -10873,7 +19691,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10873,7 +19691,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10873 | const eu_pl_off: i32 = @intCast(codegen.errUnionPayloadOffset(eu_pl_ty, zcu)); | 19691 | const eu_pl_off: i32 = @intCast(codegen.errUnionPayloadOffset(eu_pl_ty, zcu)); |
| 10874 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); | 19692 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 10875 | try ops[0].toOffset(eu_pl_off, cg); | 19693 | try ops[0].toOffset(eu_pl_off, cg); |
| 10876 | try ops[0].moveTo(inst, cg); | 19694 | try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg); |
| 10877 | }, | 19695 | }, |
| 10878 | .unwrap_errunion_err_ptr => if (use_old) try cg.airUnwrapErrUnionErrPtr(inst) else { | 19696 | .unwrap_errunion_err_ptr => if (use_old) try cg.airUnwrapErrUnionErrPtr(inst) else { |
| 10879 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; | 19697 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| ... | @@ -10882,9 +19700,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10882,9 +19700,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10882 | const eu_err_off: i32 = @intCast(codegen.errUnionErrorOffset(eu_pl_ty, zcu)); | 19700 | const eu_err_off: i32 = @intCast(codegen.errUnionErrorOffset(eu_pl_ty, zcu)); |
| 10883 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); | 19701 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 10884 | try ops[0].toOffset(eu_err_off, cg); | 19702 | try ops[0].toOffset(eu_err_off, cg); |
| 10885 | var err = try ops[0].load(eu_ty.errorUnionSet(zcu), .{}, cg); | 19703 | const err = try ops[0].load(eu_ty.errorUnionSet(zcu), .{}, cg); |
| 10886 | try ops[0].die(cg); | 19704 | try err.finish(inst, &.{ty_op.operand}, &ops, cg); |
| 10887 | try err.moveTo(inst, cg); | | |
| 10888 | }, | 19705 | }, |
| 10889 | .errunion_payload_ptr_set => if (use_old) try cg.airErrUnionPayloadPtrSet(inst) else { | 19706 | .errunion_payload_ptr_set => if (use_old) try cg.airErrUnionPayloadPtrSet(inst) else { |
| 10890 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; | 19707 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| ... | @@ -10899,7 +19716,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10899,7 +19716,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10899 | try ops[0].store(&no_err, .{}, cg); | 19716 | try ops[0].store(&no_err, .{}, cg); |
| 10900 | try no_err.die(cg); | 19717 | try no_err.die(cg); |
| 10901 | try ops[0].toOffset(eu_pl_off - eu_err_off, cg); | 19718 | try ops[0].toOffset(eu_pl_off - eu_err_off, cg); |
| 10902 | try ops[0].moveTo(inst, cg); | 19719 | try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg); |
| 10903 | }, | 19720 | }, |
| 10904 | .struct_field_ptr => if (use_old) try cg.airStructFieldPtr(inst) else { | 19721 | .struct_field_ptr => if (use_old) try cg.airStructFieldPtr(inst) else { |
| 10905 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; | 19722 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; |
| ... | @@ -10910,7 +19727,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10910,7 +19727,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10910 | ty_pl.ty.toType(), | 19727 | ty_pl.ty.toType(), |
| 10911 | extra.field_index, | 19728 | extra.field_index, |
| 10912 | ), cg); | 19729 | ), cg); |
| 10913 | try ops[0].moveTo(inst, cg); | 19730 | try ops[0].finish(inst, &.{extra.struct_operand}, &ops, cg); |
| 10914 | }, | 19731 | }, |
| 10915 | .struct_field_ptr_index_0, | 19732 | .struct_field_ptr_index_0, |
| 10916 | .struct_field_ptr_index_1, | 19733 | .struct_field_ptr_index_1, |
| ... | @@ -10936,7 +19753,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10936,7 +19753,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10936 | .struct_field_ptr_index_3 => 3, | 19753 | .struct_field_ptr_index_3 => 3, |
| 10937 | }, | 19754 | }, |
| 10938 | ), cg); | 19755 | ), cg); |
| 10939 | try ops[0].moveTo(inst, cg); | 19756 | try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg); |
| 10940 | }, | 19757 | }, |
| 10941 | .struct_field_val => if (use_old) try cg.airStructFieldVal(inst) else fallback: { | 19758 | .struct_field_val => if (use_old) try cg.airStructFieldVal(inst) else fallback: { |
| 10942 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; | 19759 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; |
| ... | @@ -10953,8 +19770,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10953,8 +19770,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10953 | try ops[0].read(field_ty, .{ .disp = field_off }, cg) | 19770 | try ops[0].read(field_ty, .{ .disp = field_off }, cg) |
| 10954 | else | 19771 | else |
| 10955 | try cg.tempInit(field_ty, .none); | 19772 | try cg.tempInit(field_ty, .none); |
| 10956 | for (ops) |op| if (op.index != res.index) try op.die(cg); | 19773 | try res.finish(inst, &.{extra.struct_operand}, &ops, cg); |
| 10957 | try res.moveTo(inst, cg); | | |
| 10958 | }, | 19774 | }, |
| 10959 | .set_union_tag => if (use_old) try cg.airSetUnionTag(inst) else { | 19775 | .set_union_tag => if (use_old) try cg.airSetUnionTag(inst) else { |
| 10960 | const bin_op = air_datas[@intFromEnum(inst)].bin_op; | 19776 | const bin_op = air_datas[@intFromEnum(inst)].bin_op; |
| ... | @@ -10965,7 +19781,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10965,7 +19781,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10965 | if (union_layout.tag_size > 0) try ops[0].store(&ops[1], .{ | 19781 | if (union_layout.tag_size > 0) try ops[0].store(&ops[1], .{ |
| 10966 | .disp = @intCast(union_layout.tagOffset()), | 19782 | .disp = @intCast(union_layout.tagOffset()), |
| 10967 | }, cg); | 19783 | }, cg); |
| 10968 | for (ops) |op| try op.die(cg); | 19784 | const res = try cg.tempInit(.void, .none); |
| | 19785 | try res.finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); |
| 10969 | }, | 19786 | }, |
| 10970 | .get_union_tag => if (use_old) try cg.airGetUnionTag(inst) else { | 19787 | .get_union_tag => if (use_old) try cg.airGetUnionTag(inst) else { |
| 10971 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; | 19788 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| ... | @@ -10973,42 +19790,41 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -10973,42 +19790,41 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10973 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); | 19790 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 10974 | const union_layout = union_ty.unionGetLayout(zcu); | 19791 | const union_layout = union_ty.unionGetLayout(zcu); |
| 10975 | assert(union_layout.tag_size > 0); | 19792 | assert(union_layout.tag_size > 0); |
| 10976 | var res = try ops[0].read(ty_op.ty.toType(), .{ | 19793 | const res = try ops[0].read(ty_op.ty.toType(), .{ |
| 10977 | .disp = @intCast(union_layout.tagOffset()), | 19794 | .disp = @intCast(union_layout.tagOffset()), |
| 10978 | }, cg); | 19795 | }, cg); |
| 10979 | for (ops) |op| if (op.index != res.index) try op.die(cg); | 19796 | try res.finish(inst, &.{ty_op.operand}, &ops, cg); |
| 10980 | try res.moveTo(inst, cg); | | |
| 10981 | }, | 19797 | }, |
| 10982 | .slice => if (use_old) try cg.airSlice(inst) else { | 19798 | .slice => if (use_old) try cg.airSlice(inst) else { |
| 10983 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; | 19799 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; |
| 10984 | const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data; | 19800 | const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data; |
| 10985 | var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs }); | 19801 | var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs }); |
| 10986 | try ops[0].toPair(&ops[1], cg); | 19802 | try ops[0].toPair(&ops[1], cg); |
| 10987 | try ops[0].moveTo(inst, cg); | 19803 | try ops[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); |
| 10988 | }, | 19804 | }, |
| 10989 | .slice_len => if (use_old) try cg.airSliceLen(inst) else { | 19805 | .slice_len => if (use_old) try cg.airSliceLen(inst) else { |
| 10990 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; | 19806 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| 10991 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); | 19807 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 10992 | try ops[0].toSliceLen(cg); | 19808 | try ops[0].toSliceLen(cg); |
| 10993 | try ops[0].moveTo(inst, cg); | 19809 | try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg); |
| 10994 | }, | 19810 | }, |
| 10995 | .slice_ptr => if (use_old) try cg.airSlicePtr(inst) else { | 19811 | .slice_ptr => if (use_old) try cg.airSlicePtr(inst) else { |
| 10996 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; | 19812 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| 10997 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); | 19813 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 10998 | try ops[0].toSlicePtr(cg); | 19814 | try ops[0].toSlicePtr(cg); |
| 10999 | try ops[0].moveTo(inst, cg); | 19815 | try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg); |
| 11000 | }, | 19816 | }, |
| 11001 | .ptr_slice_len_ptr => if (use_old) try cg.airPtrSliceLenPtr(inst) else { | 19817 | .ptr_slice_len_ptr => if (use_old) try cg.airPtrSliceLenPtr(inst) else { |
| 11002 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; | 19818 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| 11003 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); | 19819 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 11004 | try ops[0].toOffset(8, cg); | 19820 | try ops[0].toOffset(8, cg); |
| 11005 | try ops[0].moveTo(inst, cg); | 19821 | try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg); |
| 11006 | }, | 19822 | }, |
| 11007 | .ptr_slice_ptr_ptr => if (use_old) try cg.airPtrSlicePtrPtr(inst) else { | 19823 | .ptr_slice_ptr_ptr => if (use_old) try cg.airPtrSlicePtrPtr(inst) else { |
| 11008 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; | 19824 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| 11009 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); | 19825 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 11010 | try ops[0].toOffset(0, cg); | 19826 | try ops[0].toOffset(0, cg); |
| 11011 | try ops[0].moveTo(inst, cg); | 19827 | try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg); |
| 11012 | }, | 19828 | }, |
| 11013 | .slice_elem_val, .ptr_elem_val => |air_tag| if (use_old) switch (air_tag) { | 19829 | .slice_elem_val, .ptr_elem_val => |air_tag| if (use_old) switch (air_tag) { |
| 11014 | else => unreachable, | 19830 | else => unreachable, |
| ... | @@ -11139,10 +19955,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -11139,10 +19955,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 11139 | // hack around Sema OPV bugs | 19955 | // hack around Sema OPV bugs |
| 11140 | res[0] = try cg.tempInit(res_ty, .none); | 19956 | res[0] = try cg.tempInit(res_ty, .none); |
| 11141 | } | 19957 | } |
| 11142 | for (ops) |op| for (res) |r| { | 19958 | try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); |
| 11143 | if (op.index == r.index) break; | | |
| 11144 | } else try op.die(cg); | | |
| 11145 | try res[0].moveTo(inst, cg); | | |
| 11146 | }, | 19959 | }, |
| 11147 | .slice_elem_ptr, .ptr_elem_ptr => |air_tag| if (use_old) switch (air_tag) { | 19960 | .slice_elem_ptr, .ptr_elem_ptr => |air_tag| if (use_old) switch (air_tag) { |
| 11148 | else => unreachable, | 19961 | else => unreachable, |
| ... | @@ -11195,8 +20008,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -11195,8 +20008,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 11195 | } }, | 20008 | } }, |
| 11196 | }); | 20009 | }); |
| 11197 | } | 20010 | } |
| 11198 | try ops[1].die(cg); | 20011 | try ops[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); |
| 11199 | try ops[0].moveTo(inst, cg); | | |
| 11200 | }, | 20012 | }, |
| 11201 | .array_to_slice => if (use_old) try cg.airArrayToSlice(inst) else { | 20013 | .array_to_slice => if (use_old) try cg.airArrayToSlice(inst) else { |
| 11202 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; | 20014 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| ... | @@ -11205,7 +20017,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -11205,7 +20017,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 11205 | .immediate = cg.typeOf(ty_op.operand).childType(zcu).arrayLen(zcu), | 20017 | .immediate = cg.typeOf(ty_op.operand).childType(zcu).arrayLen(zcu), |
| 11206 | }); | 20018 | }); |
| 11207 | try ops[0].toPair(&len, cg); | 20019 | try ops[0].toPair(&len, cg); |
| 11208 | try ops[0].moveTo(inst, cg); | 20020 | try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg); |
| 11209 | }, | 20021 | }, |
| 11210 | .error_set_has_value => return cg.fail("TODO implement error_set_has_value", .{}), | 20022 | .error_set_has_value => return cg.fail("TODO implement error_set_has_value", .{}), |
| 11211 | .union_init => if (use_old) try cg.airUnionInit(inst) else { | 20023 | .union_init => if (use_old) try cg.airUnionInit(inst) else { |
| ... | @@ -11228,8 +20040,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -11228,8 +20040,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 11228 | try res.write(&ops[0], .{ | 20040 | try res.write(&ops[0], .{ |
| 11229 | .disp = @intCast(union_layout.payloadOffset()), | 20041 | .disp = @intCast(union_layout.payloadOffset()), |
| 11230 | }, cg); | 20042 | }, cg); |
| 11231 | try ops[0].die(cg); | 20043 | try res.finish(inst, &.{extra.init}, &ops, cg); |
| 11232 | try res.moveTo(inst, cg); | | |
| 11233 | }, | 20044 | }, |
| 11234 | .field_parent_ptr => if (use_old) try cg.airFieldParentPtr(inst) else { | 20045 | .field_parent_ptr => if (use_old) try cg.airFieldParentPtr(inst) else { |
| 11235 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; | 20046 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; |
| ... | @@ -11240,7 +20051,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -11240,7 +20051,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 11240 | cg.typeOf(extra.field_ptr), | 20051 | cg.typeOf(extra.field_ptr), |
| 11241 | extra.field_index, | 20052 | extra.field_index, |
| 11242 | ), cg); | 20053 | ), cg); |
| 11243 | try ops[0].moveTo(inst, cg); | 20054 | try ops[0].finish(inst, &.{extra.field_ptr}, &ops, cg); |
| 11244 | }, | 20055 | }, |
| 11245 | | 20056 | |
| 11246 | .is_named_enum_value => return cg.fail("TODO implement is_named_enum_value", .{}), | 20057 | .is_named_enum_value => return cg.fail("TODO implement is_named_enum_value", .{}), |
| ... | @@ -11250,7 +20061,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -11250,7 +20061,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 11250 | | 20061 | |
| 11251 | .err_return_trace => { | 20062 | .err_return_trace => { |
| 11252 | const ert: Temp = .{ .index = err_ret_trace_index }; | 20063 | const ert: Temp = .{ .index = err_ret_trace_index }; |
| 11253 | try ert.moveTo(inst, cg); | 20064 | try ert.finish(inst, &.{}, &.{}, cg); |
| 11254 | }, | 20065 | }, |
| 11255 | .set_err_return_trace => { | 20066 | .set_err_return_trace => { |
| 11256 | const un_op = air_datas[@intFromEnum(inst)].un_op; | 20067 | const un_op = air_datas[@intFromEnum(inst)].un_op; |
| ... | @@ -11274,8 +20085,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -11274,8 +20085,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 11274 | | 20085 | |
| 11275 | .addrspace_cast => { | 20086 | .addrspace_cast => { |
| 11276 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; | 20087 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| 11277 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); | 20088 | const ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 11278 | try ops[0].moveTo(inst, cg); | 20089 | try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg); |
| 11279 | }, | 20090 | }, |
| 11280 | | 20091 | |
| 11281 | .save_err_return_trace_index => { | 20092 | .save_err_return_trace_index => { |
| ... | @@ -11285,7 +20096,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -11285,7 +20096,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 11285 | var ert: Temp = .{ .index = err_ret_trace_index }; | 20096 | var ert: Temp = .{ .index = err_ret_trace_index }; |
| 11286 | var res = try ert.load(.usize, .{ .disp = @intCast(agg_ty.structFieldOffset(ty_pl.payload, zcu)) }, cg); | 20097 | var res = try ert.load(.usize, .{ .disp = @intCast(agg_ty.structFieldOffset(ty_pl.payload, zcu)) }, cg); |
| 11287 | try ert.die(cg); | 20098 | try ert.die(cg); |
| 11288 | try res.moveTo(inst, cg); | 20099 | try res.finish(inst, &.{}, &.{}, cg); |
| 11289 | }, | 20100 | }, |
| 11290 | | 20101 | |
| 11291 | .vector_store_elem => return cg.fail("TODO implement vector_store_elem", .{}), | 20102 | .vector_store_elem => return cg.fail("TODO implement vector_store_elem", .{}), |
| ... | @@ -12109,13 +20920,13 @@ fn airIntCast(self: *CodeGen, inst: Air.Inst.Index) !void { | ... | @@ -12109,13 +20920,13 @@ fn airIntCast(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 12109 | const src_mcv = try self.resolveInst(ty_op.operand); | 20920 | const src_mcv = try self.resolveInst(ty_op.operand); |
| 12110 | if (dst_ty.isVector(zcu)) { | 20921 | if (dst_ty.isVector(zcu)) { |
| 12111 | const max_abi_size = @max(dst_abi_size, src_abi_size); | 20922 | const max_abi_size = @max(dst_abi_size, src_abi_size); |
| 12112 | if (max_abi_size > self.vectorSize(.int)) break :result null; | | |
| 12113 | const has_avx = self.hasFeature(.avx); | 20923 | const has_avx = self.hasFeature(.avx); |
| 12114 | | 20924 | |
| 12115 | const dst_elem_abi_size = dst_ty.childType(zcu).abiSize(zcu); | 20925 | const dst_elem_abi_size = dst_ty.childType(zcu).abiSize(zcu); |
| 12116 | const src_elem_abi_size = src_ty.childType(zcu).abiSize(zcu); | 20926 | const src_elem_abi_size = src_ty.childType(zcu).abiSize(zcu); |
| 12117 | switch (std.math.order(dst_elem_abi_size, src_elem_abi_size)) { | 20927 | switch (std.math.order(dst_elem_abi_size, src_elem_abi_size)) { |
| 12118 | .lt => { | 20928 | .lt => { |
| | 20929 | if (max_abi_size > self.vectorSize(.int)) break :result null; |
| 12119 | const mir_tag: Mir.Inst.FixedTag = switch (dst_elem_abi_size) { | 20930 | const mir_tag: Mir.Inst.FixedTag = switch (dst_elem_abi_size) { |
| 12120 | else => break :result null, | 20931 | else => break :result null, |
| 12121 | 1 => switch (src_elem_abi_size) { | 20932 | 1 => switch (src_elem_abi_size) { |
| ... | @@ -12172,6 +20983,7 @@ fn airIntCast(self: *CodeGen, inst: Air.Inst.Index) !void { | ... | @@ -12172,6 +20983,7 @@ fn airIntCast(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 12172 | break :result dst_mcv; | 20983 | break :result dst_mcv; |
| 12173 | }, | 20984 | }, |
| 12174 | .gt => if (self.hasFeature(.sse4_1)) { | 20985 | .gt => if (self.hasFeature(.sse4_1)) { |
| | 20986 | if (max_abi_size > self.vectorSize(.int)) break :result null; |
| 12175 | const mir_tag: Mir.Inst.FixedTag = .{ switch (dst_elem_abi_size) { | 20987 | const mir_tag: Mir.Inst.FixedTag = .{ switch (dst_elem_abi_size) { |
| 12176 | else => break :result null, | 20988 | else => break :result null, |
| 12177 | 2 => if (has_avx) .vp_w else .p_w, | 20989 | 2 => if (has_avx) .vp_w else .p_w, |
| ... | @@ -12609,12 +21421,11 @@ fn activeIntBits(self: *CodeGen, dst_air: Air.Inst.Ref) u16 { | ... | @@ -12609,12 +21421,11 @@ fn activeIntBits(self: *CodeGen, dst_air: Air.Inst.Ref) u16 { |
| 12609 | return dst_info.bits; | 21421 | return dst_info.bits; |
| 12610 | } | 21422 | } |
| 12611 | | 21423 | |
| 12612 | fn airMulDivBinOp(self: *CodeGen, inst: Air.Inst.Index) !void { | 21424 | fn airMulDivBinOp(self: *CodeGen, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void { |
| 12613 | const pt = self.pt; | 21425 | const pt = self.pt; |
| 12614 | const zcu = pt.zcu; | 21426 | const zcu = pt.zcu; |
| 12615 | const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op; | 21427 | const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op; |
| 12616 | const result = result: { | 21428 | const result = result: { |
| 12617 | const tag = self.air.instructions.items(.tag)[@intFromEnum(inst)]; | | |
| 12618 | const dst_ty = self.typeOfIndex(inst); | 21429 | const dst_ty = self.typeOfIndex(inst); |
| 12619 | switch (dst_ty.zigTypeTag(zcu)) { | 21430 | switch (dst_ty.zigTypeTag(zcu)) { |
| 12620 | .float, .vector => break :result try self.genBinOp(inst, tag, bin_op.lhs, bin_op.rhs), | 21431 | .float, .vector => break :result try self.genBinOp(inst, tag, bin_op.lhs, bin_op.rhs), |
| ... | @@ -15952,10 +24763,9 @@ fn airBitReverse(self: *CodeGen, inst: Air.Inst.Index) !void { | ... | @@ -15952,10 +24763,9 @@ fn airBitReverse(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 15952 | return self.finishAir(inst, dst_mcv, .{ ty_op.operand, .none, .none }); | 24763 | return self.finishAir(inst, dst_mcv, .{ ty_op.operand, .none, .none }); |
| 15953 | } | 24764 | } |
| 15954 | | 24765 | |
| 15955 | fn floatSign(self: *CodeGen, inst: Air.Inst.Index, operand: Air.Inst.Ref, ty: Type) !void { | 24766 | fn floatSign(self: *CodeGen, inst: Air.Inst.Index, tag: Air.Inst.Tag, operand: Air.Inst.Ref, ty: Type) !void { |
| 15956 | const pt = self.pt; | 24767 | const pt = self.pt; |
| 15957 | const zcu = pt.zcu; | 24768 | const zcu = pt.zcu; |
| 15958 | const tag = self.air.instructions.items(.tag)[@intFromEnum(inst)]; | | |
| 15959 | | 24769 | |
| 15960 | const result = result: { | 24770 | const result = result: { |
| 15961 | const scalar_bits = ty.scalarType(zcu).floatBits(self.target.*); | 24771 | const scalar_bits = ty.scalarType(zcu).floatBits(self.target.*); |
| ... | @@ -16080,10 +24890,10 @@ fn floatSign(self: *CodeGen, inst: Air.Inst.Index, operand: Air.Inst.Ref, ty: Ty | ... | @@ -16080,10 +24890,10 @@ fn floatSign(self: *CodeGen, inst: Air.Inst.Index, operand: Air.Inst.Ref, ty: Ty |
| 16080 | return self.finishAir(inst, result, .{ operand, .none, .none }); | 24890 | return self.finishAir(inst, result, .{ operand, .none, .none }); |
| 16081 | } | 24891 | } |
| 16082 | | 24892 | |
| 16083 | fn airFloatSign(self: *CodeGen, inst: Air.Inst.Index) !void { | 24893 | fn airFloatSign(self: *CodeGen, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void { |
| 16084 | const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op; | 24894 | const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op; |
| 16085 | const ty = self.typeOf(un_op); | 24895 | const ty = self.typeOf(un_op); |
| 16086 | return self.floatSign(inst, un_op, ty); | 24896 | return self.floatSign(inst, tag, un_op, ty); |
| 16087 | } | 24897 | } |
| 16088 | | 24898 | |
| 16089 | const RoundMode = packed struct(u5) { | 24899 | const RoundMode = packed struct(u5) { |
| ... | @@ -16366,7 +25176,7 @@ fn airAbs(self: *CodeGen, inst: Air.Inst.Index) !void { | ... | @@ -16366,7 +25176,7 @@ fn airAbs(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 16366 | break :result dst_mcv; | 25176 | break :result dst_mcv; |
| 16367 | }, | 25177 | }, |
| 16368 | }, | 25178 | }, |
| 16369 | .float => return self.floatSign(inst, ty_op.operand, ty), | 25179 | .float => return self.floatSign(inst, .abs, ty_op.operand, ty), |
| 16370 | .vector => switch (ty.childType(zcu).zigTypeTag(zcu)) { | 25180 | .vector => switch (ty.childType(zcu).zigTypeTag(zcu)) { |
| 16371 | else => null, | 25181 | else => null, |
| 16372 | .int => switch (ty.childType(zcu).intInfo(zcu).bits) { | 25182 | .int => switch (ty.childType(zcu).intInfo(zcu).bits) { |
| ... | @@ -16402,7 +25212,7 @@ fn airAbs(self: *CodeGen, inst: Air.Inst.Index) !void { | ... | @@ -16402,7 +25212,7 @@ fn airAbs(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 16402 | 5...8 => if (self.hasFeature(.avx2)) .{ .vp_d, .abs } else null, | 25212 | 5...8 => if (self.hasFeature(.avx2)) .{ .vp_d, .abs } else null, |
| 16403 | }, | 25213 | }, |
| 16404 | }, | 25214 | }, |
| 16405 | .float => return self.floatSign(inst, ty_op.operand, ty), | 25215 | .float => return self.floatSign(inst, .abs, ty_op.operand, ty), |
| 16406 | }, | 25216 | }, |
| 16407 | }) orelse return self.fail("TODO implement airAbs for {}", .{ty.fmt(pt)}); | 25217 | }) orelse return self.fail("TODO implement airAbs for {}", .{ty.fmt(pt)}); |
| 16408 | | 25218 | |
| ... | @@ -19263,7 +28073,7 @@ fn genBinOp( | ... | @@ -19263,7 +28073,7 @@ fn genBinOp( |
| 19263 | .mul => .{ .v_ss, .mul }, | 28073 | .mul => .{ .v_ss, .mul }, |
| 19264 | .div_float, .div_trunc, .div_floor, .div_exact => .{ .v_ss, .div }, | 28074 | .div_float, .div_trunc, .div_floor, .div_exact => .{ .v_ss, .div }, |
| 19265 | .max => .{ .v_ss, .max }, | 28075 | .max => .{ .v_ss, .max }, |
| 19266 | .min => .{ .v_ss, .max }, | 28076 | .min => .{ .v_ss, .min }, |
| 19267 | else => unreachable, | 28077 | else => unreachable, |
| 19268 | }, | 28078 | }, |
| 19269 | dst_reg, | 28079 | dst_reg, |
| ... | @@ -21474,11 +30284,16 @@ fn airRet(self: *CodeGen, inst: Air.Inst.Index, safety: bool) !void { | ... | @@ -21474,11 +30284,16 @@ fn airRet(self: *CodeGen, inst: Air.Inst.Index, safety: bool) !void { |
| 21474 | const ret_ty = self.fn_type.fnReturnType(zcu); | 30284 | const ret_ty = self.fn_type.fnReturnType(zcu); |
| 21475 | switch (self.ret_mcv.short) { | 30285 | switch (self.ret_mcv.short) { |
| 21476 | .none => {}, | 30286 | .none => {}, |
| 21477 | .register, | 30287 | .register => |reg| { |
| 21478 | .register_pair, | 30288 | const reg_lock = self.register_manager.lockRegAssumeUnused(reg); |
| 21479 | .register_triple, | 30289 | defer self.register_manager.unlockReg(reg_lock); |
| 21480 | .register_quadruple, | 30290 | try self.genCopy(ret_ty, self.ret_mcv.short, .{ .air_ref = un_op }, .{ .safety = safety }); |
| 21481 | => try self.genCopy(ret_ty, self.ret_mcv.short, .{ .air_ref = un_op }, .{ .safety = safety }), | 30291 | }, |
| | 30292 | inline .register_pair, .register_triple, .register_quadruple => |regs| { |
| | 30293 | const reg_locks = self.register_manager.lockRegsAssumeUnused(regs.len, regs); |
| | 30294 | defer for (reg_locks) |reg_lock| self.register_manager.unlockReg(reg_lock); |
| | 30295 | try self.genCopy(ret_ty, self.ret_mcv.short, .{ .air_ref = un_op }, .{ .safety = safety }); |
| | 30296 | }, |
| 21482 | .indirect => |reg_off| { | 30297 | .indirect => |reg_off| { |
| 21483 | try self.register_manager.getReg(reg_off.reg, null); | 30298 | try self.register_manager.getReg(reg_off.reg, null); |
| 21484 | const lock = self.register_manager.lockRegAssumeUnused(reg_off.reg); | 30299 | const lock = self.register_manager.lockRegAssumeUnused(reg_off.reg); |
| ... | @@ -22605,7 +31420,11 @@ fn lowerBlock(self: *CodeGen, inst: Air.Inst.Index, body: []const Air.Inst.Index | ... | @@ -22605,7 +31420,11 @@ fn lowerBlock(self: *CodeGen, inst: Air.Inst.Index, body: []const Air.Inst.Index |
| 22605 | .resurrect = true, | 31420 | .resurrect = true, |
| 22606 | .close_scope = true, | 31421 | .close_scope = true, |
| 22607 | }); | 31422 | }); |
| 22608 | for (block_data.value.relocs.items) |reloc| self.performReloc(reloc); | 31423 | const block_relocs_last_index = block_data.value.relocs.items.len - 1; |
| | 31424 | for (if (block_data.value.relocs.items[block_relocs_last_index] == self.mir_instructions.len - 1) block_relocs: { |
| | 31425 | _ = self.mir_instructions.pop(); |
| | 31426 | break :block_relocs block_data.value.relocs.items[0..block_relocs_last_index]; |
| | 31427 | } else block_data.value.relocs.items) |block_reloc| self.performReloc(block_reloc); |
| 22609 | } | 31428 | } |
| 22610 | | 31429 | |
| 22611 | if (std.debug.runtime_safety) assert(self.inst_tracking.getIndex(inst).? == inst_tracking_i); | 31430 | if (std.debug.runtime_safety) assert(self.inst_tracking.getIndex(inst).? == inst_tracking_i); |
| ... | @@ -22938,6 +31757,9 @@ fn airLoopSwitchBr(self: *CodeGen, inst: Air.Inst.Index) !void { | ... | @@ -22938,6 +31757,9 @@ fn airLoopSwitchBr(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 22938 | if (switch_br.operand.toIndex()) |op_inst| try self.processDeath(op_inst); | 31757 | if (switch_br.operand.toIndex()) |op_inst| try self.processDeath(op_inst); |
| 22939 | } | 31758 | } |
| 22940 | | 31759 | |
| | 31760 | // Ensure a register is available for dispatch. |
| | 31761 | if (!mat_cond.isRegister()) _ = try self.register_manager.allocReg(null, abi.RegisterClass.gp); |
| | 31762 | |
| 22941 | self.scope_generation += 1; | 31763 | self.scope_generation += 1; |
| 22942 | const state = try self.saveState(); | 31764 | const state = try self.saveState(); |
| 22943 | | 31765 | |
| ... | @@ -22960,47 +31782,63 @@ fn airSwitchDispatch(self: *CodeGen, inst: Air.Inst.Index) !void { | ... | @@ -22960,47 +31782,63 @@ fn airSwitchDispatch(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 22960 | | 31782 | |
| 22961 | const block_ty = self.typeOfIndex(br.block_inst); | 31783 | const block_ty = self.typeOfIndex(br.block_inst); |
| 22962 | const loop_data = self.loops.getPtr(br.block_inst).?; | 31784 | const loop_data = self.loops.getPtr(br.block_inst).?; |
| 22963 | if (self.loop_switches.getPtr(br.block_inst)) |table| { | 31785 | const block_tracking = self.inst_tracking.getPtr(br.block_inst).?; |
| 22964 | // Process operand death so that it is properly accounted for in the State below. | 31786 | { |
| 22965 | const condition_dies = self.liveness.operandDies(inst, 0); | 31787 | try self.getValue(block_tracking.short, null); |
| 22966 | | 31788 | const src_mcv = try self.resolveInst(br.operand); |
| 22967 | try self.restoreState(loop_data.state, &.{}, .{ | 31789 | |
| 22968 | .emit_instructions = true, | 31790 | if (self.reuseOperandAdvanced(inst, br.operand, 0, src_mcv, br.block_inst)) { |
| 22969 | .update_tracking = false, | 31791 | try self.getValue(block_tracking.short, br.block_inst); |
| 22970 | .resurrect = false, | 31792 | // .long = .none to avoid merging operand and block result stack frames. |
| 22971 | .close_scope = false, | 31793 | const current_tracking: InstTracking = .{ .long = .none, .short = src_mcv }; |
| 22972 | }); | 31794 | try current_tracking.materializeUnsafe(self, br.block_inst, block_tracking.*); |
| | 31795 | for (current_tracking.getRegs()) |src_reg| self.register_manager.freeReg(src_reg); |
| | 31796 | } else { |
| | 31797 | try self.getValue(block_tracking.short, br.block_inst); |
| | 31798 | try self.genCopy(block_ty, block_tracking.short, try self.resolveInst(br.operand), .{}); |
| | 31799 | } |
| | 31800 | } |
| | 31801 | |
| | 31802 | // Process operand death so that it is properly accounted for in the State below. |
| | 31803 | if (self.liveness.operandDies(inst, 0)) { |
| | 31804 | if (br.operand.toIndex()) |op_inst| try self.processDeath(op_inst); |
| | 31805 | } |
| | 31806 | |
| | 31807 | try self.restoreState(loop_data.state, &.{}, .{ |
| | 31808 | .emit_instructions = true, |
| | 31809 | .update_tracking = false, |
| | 31810 | .resurrect = false, |
| | 31811 | .close_scope = false, |
| | 31812 | }); |
| 22973 | | 31813 | |
| | 31814 | if (self.loop_switches.getPtr(br.block_inst)) |table| { |
| 22974 | const condition_ty = self.typeOf(br.operand); | 31815 | const condition_ty = self.typeOf(br.operand); |
| 22975 | const condition = try self.resolveInst(br.operand); | 31816 | const condition_mcv = block_tracking.short; |
| 22976 | const condition_index = if (condition_dies and condition.isModifiable()) condition else condition_index: { | | |
| 22977 | const condition_index = try self.allocTempRegOrMem(condition_ty, true); | | |
| 22978 | try self.genCopy(condition_ty, condition_index, condition, .{}); | | |
| 22979 | break :condition_index condition_index; | | |
| 22980 | }; | | |
| 22981 | try self.spillEflagsIfOccupied(); | 31817 | try self.spillEflagsIfOccupied(); |
| 22982 | if (table.min.orderAgainstZero(self.pt.zcu).compare(.neq)) try self.genBinOpMir( | 31818 | if (table.min.orderAgainstZero(self.pt.zcu).compare(.neq)) try self.genBinOpMir( |
| 22983 | .{ ._, .sub }, | 31819 | .{ ._, .sub }, |
| 22984 | condition_ty, | 31820 | condition_ty, |
| 22985 | condition_index, | 31821 | condition_mcv, |
| 22986 | .{ .air_ref = Air.internedToRef(table.min.toIntern()) }, | 31822 | .{ .air_ref = Air.internedToRef(table.min.toIntern()) }, |
| 22987 | ); | 31823 | ); |
| 22988 | switch (table.else_relocs) { | 31824 | switch (table.else_relocs) { |
| 22989 | .@"unreachable" => {}, | 31825 | .@"unreachable" => {}, |
| 22990 | .forward => |*else_relocs| { | 31826 | .forward => |*else_relocs| { |
| 22991 | try self.genBinOpMir(.{ ._, .cmp }, condition_ty, condition_index, .{ .immediate = table.len - 1 }); | 31827 | try self.genBinOpMir(.{ ._, .cmp }, condition_ty, condition_mcv, .{ .immediate = table.len - 1 }); |
| 22992 | try else_relocs.append(self.gpa, try self.asmJccReloc(.a, undefined)); | 31828 | try else_relocs.append(self.gpa, try self.asmJccReloc(.a, undefined)); |
| 22993 | }, | 31829 | }, |
| 22994 | .backward => |else_reloc| { | 31830 | .backward => |else_reloc| { |
| 22995 | try self.genBinOpMir(.{ ._, .cmp }, condition_ty, condition_index, .{ .immediate = table.len - 1 }); | 31831 | try self.genBinOpMir(.{ ._, .cmp }, condition_ty, condition_mcv, .{ .immediate = table.len - 1 }); |
| 22996 | _ = try self.asmJccReloc(.a, else_reloc); | 31832 | _ = try self.asmJccReloc(.a, else_reloc); |
| 22997 | }, | 31833 | }, |
| 22998 | } | 31834 | } |
| 22999 | { | 31835 | { |
| 23000 | const condition_index_reg = if (condition_index.isRegister()) | 31836 | const condition_index_reg = if (condition_mcv.isRegister()) condition_mcv.getReg().? else cond: { |
| 23001 | condition_index.getReg().? | 31837 | const condition_index_reg = |
| 23002 | else | 31838 | RegisterManager.regAtTrackedIndex(@intCast(loop_data.state.free_registers.findFirstSet().?)); |
| 23003 | try self.copyToTmpRegister(.usize, condition_index); | 31839 | try self.genSetReg(condition_index_reg, condition_ty, condition_mcv, .{}); |
| | 31840 | break :cond condition_index_reg; |
| | 31841 | }; |
| 23004 | const condition_index_lock = self.register_manager.lockReg(condition_index_reg); | 31842 | const condition_index_lock = self.register_manager.lockReg(condition_index_reg); |
| 23005 | defer if (condition_index_lock) |lock| self.register_manager.unlockReg(lock); | 31843 | defer if (condition_index_lock) |lock| self.register_manager.unlockReg(lock); |
| 23006 | try self.truncateRegister(condition_ty, condition_index_reg); | 31844 | try self.truncateRegister(condition_ty, condition_index_reg); |
| ... | @@ -23019,38 +31857,6 @@ fn airSwitchDispatch(self: *CodeGen, inst: Air.Inst.Index) !void { | ... | @@ -23019,38 +31857,6 @@ fn airSwitchDispatch(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 23019 | return self.finishAir(inst, .none, .{ br.operand, .none, .none }); | 31857 | return self.finishAir(inst, .none, .{ br.operand, .none, .none }); |
| 23020 | } | 31858 | } |
| 23021 | | 31859 | |
| 23022 | const block_tracking = self.inst_tracking.getPtr(br.block_inst).?; | | |
| 23023 | done: { | | |
| 23024 | try self.getValue(block_tracking.short, null); | | |
| 23025 | const src_mcv = try self.resolveInst(br.operand); | | |
| 23026 | | | |
| 23027 | if (self.reuseOperandAdvanced(inst, br.operand, 0, src_mcv, br.block_inst)) { | | |
| 23028 | try self.getValue(block_tracking.short, br.block_inst); | | |
| 23029 | // .long = .none to avoid merging operand and block result stack frames. | | |
| 23030 | const current_tracking: InstTracking = .{ .long = .none, .short = src_mcv }; | | |
| 23031 | try current_tracking.materializeUnsafe(self, br.block_inst, block_tracking.*); | | |
| 23032 | for (current_tracking.getRegs()) |src_reg| self.register_manager.freeReg(src_reg); | | |
| 23033 | break :done; | | |
| 23034 | } | | |
| 23035 | | | |
| 23036 | try self.getValue(block_tracking.short, br.block_inst); | | |
| 23037 | const dst_mcv = block_tracking.short; | | |
| 23038 | try self.genCopy(block_ty, dst_mcv, try self.resolveInst(br.operand), .{}); | | |
| 23039 | break :done; | | |
| 23040 | } | | |
| 23041 | | | |
| 23042 | // Process operand death so that it is properly accounted for in the State below. | | |
| 23043 | if (self.liveness.operandDies(inst, 0)) { | | |
| 23044 | if (br.operand.toIndex()) |op_inst| try self.processDeath(op_inst); | | |
| 23045 | } | | |
| 23046 | | | |
| 23047 | try self.restoreState(loop_data.state, &.{}, .{ | | |
| 23048 | .emit_instructions = true, | | |
| 23049 | .update_tracking = false, | | |
| 23050 | .resurrect = false, | | |
| 23051 | .close_scope = false, | | |
| 23052 | }); | | |
| 23053 | | | |
| 23054 | // Emit a jump with a relocation. It will be patched up after the block ends. | 31860 | // Emit a jump with a relocation. It will be patched up after the block ends. |
| 23055 | // Leave the jump offset undefined | 31861 | // Leave the jump offset undefined |
| 23056 | _ = try self.asmJmpReloc(loop_data.target); | 31862 | _ = try self.asmJmpReloc(loop_data.target); |
| ... | @@ -24115,13 +32921,15 @@ fn moveStrategy(self: *CodeGen, ty: Type, class: Register.Class, aligned: bool) | ... | @@ -24115,13 +32921,15 @@ fn moveStrategy(self: *CodeGen, ty: Type, class: Register.Class, aligned: bool) |
| 24115 | 64 => switch (ty.vectorLen(zcu)) { | 32921 | 64 => switch (ty.vectorLen(zcu)) { |
| 24116 | 1...2 => return .{ .move = if (self.hasFeature(.avx)) | 32922 | 1...2 => return .{ .move = if (self.hasFeature(.avx)) |
| 24117 | .{ .v_pd, if (aligned) .mova else .movu } | 32923 | .{ .v_pd, if (aligned) .mova else .movu } |
| | 32924 | else if (self.hasFeature(.sse2)) |
| | 32925 | .{ ._pd, if (aligned) .mova else .movu } |
| 24118 | else | 32926 | else |
| 24119 | .{ ._pd, if (aligned) .mova else .movu } }, | 32927 | .{ ._ps, if (aligned) .mova else .movu } }, |
| 24120 | 3...4 => if (self.hasFeature(.avx)) | 32928 | 3...4 => if (self.hasFeature(.avx)) |
| 24121 | return .{ .move = .{ .v_pd, if (aligned) .mova else .movu } }, | 32929 | return .{ .move = .{ .v_pd, if (aligned) .mova else .movu } }, |
| 24122 | else => {}, | 32930 | else => {}, |
| 24123 | }, | 32931 | }, |
| 24124 | 128 => switch (ty.vectorLen(zcu)) { | 32932 | 80, 128 => switch (ty.vectorLen(zcu)) { |
| 24125 | 1 => return .{ .move = if (self.hasFeature(.avx)) | 32933 | 1 => return .{ .move = if (self.hasFeature(.avx)) |
| 24126 | .{ if (aligned) .v_dqa else .v_dqu, .mov } | 32934 | .{ if (aligned) .v_dqa else .v_dqu, .mov } |
| 24127 | else if (self.hasFeature(.sse2)) | 32935 | else if (self.hasFeature(.sse2)) |
| ... | @@ -24450,7 +33258,7 @@ fn genSetReg( | ... | @@ -24450,7 +33258,7 @@ fn genSetReg( |
| 24450 | }, | 33258 | }, |
| 24451 | .mmx => unreachable, | 33259 | .mmx => unreachable, |
| 24452 | .sse => switch (src_reg.class()) { | 33260 | .sse => switch (src_reg.class()) { |
| 24453 | .general_purpose => try self.asmRegisterRegister( | 33261 | .general_purpose => if (self.hasFeature(.sse2)) try self.asmRegisterRegister( |
| 24454 | switch (abi_size) { | 33262 | switch (abi_size) { |
| 24455 | 1...4 => if (self.hasFeature(.avx)) .{ .v_d, .mov } else .{ ._d, .mov }, | 33263 | 1...4 => if (self.hasFeature(.avx)) .{ .v_d, .mov } else .{ ._d, .mov }, |
| 24456 | 5...8 => if (self.hasFeature(.avx)) .{ .v_q, .mov } else .{ ._q, .mov }, | 33264 | 5...8 => if (self.hasFeature(.avx)) .{ .v_q, .mov } else .{ ._q, .mov }, |
| ... | @@ -24458,7 +33266,26 @@ fn genSetReg( | ... | @@ -24458,7 +33266,26 @@ fn genSetReg( |
| 24458 | }, | 33266 | }, |
| 24459 | dst_reg.to128(), | 33267 | dst_reg.to128(), |
| 24460 | registerAlias(src_reg, @max(abi_size, 4)), | 33268 | registerAlias(src_reg, @max(abi_size, 4)), |
| 24461 | ), | 33269 | ) else { |
| | 33270 | const frame_size = std.math.ceilPowerOfTwoAssert(u32, @max(abi_size, 4)); |
| | 33271 | const frame_index = try self.allocFrameIndex(.init(.{ |
| | 33272 | .size = frame_size, |
| | 33273 | .alignment = .fromNonzeroByteUnits(frame_size), |
| | 33274 | })); |
| | 33275 | try self.asmMemoryRegister(.{ ._, .mov }, .{ |
| | 33276 | .base = .{ .frame = frame_index }, |
| | 33277 | .mod = .{ .rm = .{ .size = .fromSize(abi_size) } }, |
| | 33278 | }, registerAlias(src_reg, abi_size)); |
| | 33279 | try self.asmRegisterMemory(switch (frame_size) { |
| | 33280 | 4 => .{ ._ss, .mov }, |
| | 33281 | 8 => .{ ._ps, .movl }, |
| | 33282 | 16 => .{ ._ps, .mov }, |
| | 33283 | else => unreachable, |
| | 33284 | }, dst_reg.to128(), .{ |
| | 33285 | .base = .{ .frame = frame_index }, |
| | 33286 | .mod = .{ .rm = .{ .size = .fromSize(frame_size) } }, |
| | 33287 | }); |
| | 33288 | }, |
| 24462 | .segment => try self.genSetReg( | 33289 | .segment => try self.genSetReg( |
| 24463 | dst_reg, | 33290 | dst_reg, |
| 24464 | ty, | 33291 | ty, |
| ... | @@ -24469,7 +33296,12 @@ fn genSetReg( | ... | @@ -24469,7 +33296,12 @@ fn genSetReg( |
| 24469 | .sse => try self.asmRegisterRegister( | 33296 | .sse => try self.asmRegisterRegister( |
| 24470 | @as(?Mir.Inst.FixedTag, switch (ty.scalarType(zcu).zigTypeTag(zcu)) { | 33297 | @as(?Mir.Inst.FixedTag, switch (ty.scalarType(zcu).zigTypeTag(zcu)) { |
| 24471 | else => switch (abi_size) { | 33298 | else => switch (abi_size) { |
| 24472 | 1...16 => if (self.hasFeature(.avx)) .{ .v_dqa, .mov } else .{ ._dqa, .mov }, | 33299 | 1...16 => if (self.hasFeature(.avx)) |
| | 33300 | .{ .v_dqa, .mov } |
| | 33301 | else if (self.hasFeature(.sse2)) |
| | 33302 | .{ ._dqa, .mov } |
| | 33303 | else |
| | 33304 | .{ ._ps, .mova }, |
| 24473 | 17...32 => if (self.hasFeature(.avx)) .{ .v_dqa, .mov } else null, | 33305 | 17...32 => if (self.hasFeature(.avx)) .{ .v_dqa, .mov } else null, |
| 24474 | else => null, | 33306 | else => null, |
| 24475 | }, | 33307 | }, |
| ... | @@ -24477,13 +33309,20 @@ fn genSetReg( | ... | @@ -24477,13 +33309,20 @@ fn genSetReg( |
| 24477 | 16, 128 => switch (abi_size) { | 33309 | 16, 128 => switch (abi_size) { |
| 24478 | 2...16 => if (self.hasFeature(.avx)) | 33310 | 2...16 => if (self.hasFeature(.avx)) |
| 24479 | .{ .v_dqa, .mov } | 33311 | .{ .v_dqa, .mov } |
| | 33312 | else if (self.hasFeature(.sse2)) |
| | 33313 | .{ ._dqa, .mov } |
| 24480 | else | 33314 | else |
| 24481 | .{ ._dqa, .mov }, | 33315 | .{ ._ps, .mova }, |
| 24482 | 17...32 => if (self.hasFeature(.avx)) .{ .v_dqa, .mov } else null, | 33316 | 17...32 => if (self.hasFeature(.avx)) .{ .v_dqa, .mov } else null, |
| 24483 | else => null, | 33317 | else => null, |
| 24484 | }, | 33318 | }, |
| 24485 | 32 => if (self.hasFeature(.avx)) .{ .v_ps, .mova } else .{ ._ps, .mova }, | 33319 | 32 => if (self.hasFeature(.avx)) .{ .v_ps, .mova } else .{ ._ps, .mova }, |
| 24486 | 64 => if (self.hasFeature(.avx)) .{ .v_pd, .mova } else .{ ._pd, .mova }, | 33320 | 64 => if (self.hasFeature(.avx)) |
| | 33321 | .{ .v_pd, .mova } |
| | 33322 | else if (self.hasFeature(.sse2)) |
| | 33323 | .{ ._pd, .mova } |
| | 33324 | else |
| | 33325 | .{ ._ps, .mova }, |
| 24487 | 80 => null, | 33326 | 80 => null, |
| 24488 | else => unreachable, | 33327 | else => unreachable, |
| 24489 | }, | 33328 | }, |
| ... | @@ -25180,15 +34019,19 @@ fn airBitCast(self: *CodeGen, inst: Air.Inst.Index) !void { | ... | @@ -25180,15 +34019,19 @@ fn airBitCast(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 25180 | const src_lock = if (src_mcv.getReg()) |src_reg| self.register_manager.lockReg(src_reg) else null; | 34019 | const src_lock = if (src_mcv.getReg()) |src_reg| self.register_manager.lockReg(src_reg) else null; |
| 25181 | defer if (src_lock) |lock| self.register_manager.unlockReg(lock); | 34020 | defer if (src_lock) |lock| self.register_manager.unlockReg(lock); |
| 25182 | | 34021 | |
| 25183 | const dst_mcv = if ((if (src_mcv.getReg()) |src_reg| src_reg.class() == .general_purpose else true) and | 34022 | const dst_mcv = if (src_mcv != .register_mask and |
| | 34023 | (if (src_mcv.getReg()) |src_reg| src_reg.class() == .general_purpose else true) and |
| 25184 | dst_rc.supersetOf(src_rc) and dst_ty.abiSize(zcu) <= src_ty.abiSize(zcu) and | 34024 | dst_rc.supersetOf(src_rc) and dst_ty.abiSize(zcu) <= src_ty.abiSize(zcu) and |
| 25185 | dst_ty.abiAlignment(zcu).order(src_ty.abiAlignment(zcu)).compare(.lte) and | 34025 | dst_ty.abiAlignment(zcu).order(src_ty.abiAlignment(zcu)).compare(.lte) and |
| 25186 | self.reuseOperand(inst, ty_op.operand, 0, src_mcv)) src_mcv else dst: { | 34026 | self.reuseOperand(inst, ty_op.operand, 0, src_mcv)) src_mcv else dst: { |
| 25187 | const dst_mcv = try self.allocRegOrMem(inst, true); | 34027 | const dst_mcv = try self.allocRegOrMem(inst, true); |
| 25188 | try self.genCopy(switch (std.math.order(dst_ty.abiSize(zcu), src_ty.abiSize(zcu))) { | 34028 | try self.genCopy(switch (src_mcv) { |
| 25189 | .lt => dst_ty, | 34029 | else => switch (std.math.order(dst_ty.abiSize(zcu), src_ty.abiSize(zcu))) { |
| 25190 | .eq => if (!dst_mcv.isBase() or src_mcv.isBase()) dst_ty else src_ty, | 34030 | .lt => dst_ty, |
| 25191 | .gt => src_ty, | 34031 | .eq => if (!dst_mcv.isBase() or src_mcv.isBase()) dst_ty else src_ty, |
| | 34032 | .gt => src_ty, |
| | 34033 | }, |
| | 34034 | .register_mask => src_ty, |
| 25192 | }, dst_mcv, src_mcv, .{}); | 34035 | }, dst_mcv, src_mcv, .{}); |
| 25193 | break :dst dst_mcv; | 34036 | break :dst dst_mcv; |
| 25194 | }; | 34037 | }; |
| ... | @@ -28614,9 +37457,8 @@ fn limitImmediateType(self: *CodeGen, operand: Air.Inst.Ref, comptime T: type) ! | ... | @@ -28614,9 +37457,8 @@ fn limitImmediateType(self: *CodeGen, operand: Air.Inst.Ref, comptime T: type) ! |
| 28614 | return mcv; | 37457 | return mcv; |
| 28615 | } | 37458 | } |
| 28616 | | 37459 | |
| 28617 | fn genTypedValue(self: *CodeGen, val: Value) InnerError!MCValue { | 37460 | fn genResult(self: *CodeGen, res: codegen.GenResult) InnerError!MCValue { |
| 28618 | const pt = self.pt; | 37461 | return switch (res) { |
| 28619 | return switch (try codegen.genTypedValue(self.bin_file, pt, self.src_loc, val, self.target.*)) { | | |
| 28620 | .mcv => |mcv| switch (mcv) { | 37462 | .mcv => |mcv| switch (mcv) { |
| 28621 | .none => .none, | 37463 | .none => .none, |
| 28622 | .undef => .undef, | 37464 | .undef => .undef, |
| ... | @@ -28633,6 +37475,14 @@ fn genTypedValue(self: *CodeGen, val: Value) InnerError!MCValue { | ... | @@ -28633,6 +37475,14 @@ fn genTypedValue(self: *CodeGen, val: Value) InnerError!MCValue { |
| 28633 | }; | 37475 | }; |
| 28634 | } | 37476 | } |
| 28635 | | 37477 | |
| | 37478 | fn genTypedValue(self: *CodeGen, val: Value) InnerError!MCValue { |
| | 37479 | return self.genResult(try codegen.genTypedValue(self.bin_file, self.pt, self.src_loc, val, self.target.*)); |
| | 37480 | } |
| | 37481 | |
| | 37482 | fn lowerUav(self: *CodeGen, val: Value) InnerError!MCValue { |
| | 37483 | return self.genResult(try self.bin_file.lowerUav(self.pt, val.toIntern(), .none, self.src_loc)); |
| | 37484 | } |
| | 37485 | |
| 28636 | const CallMCValues = struct { | 37486 | const CallMCValues = struct { |
| 28637 | args: []MCValue, | 37487 | args: []MCValue, |
| 28638 | return_value: InstTracking, | 37488 | return_value: InstTracking, |
| ... | @@ -29772,6 +38622,7 @@ const Temp = struct { | ... | @@ -29772,6 +38622,7 @@ const Temp = struct { |
| 29772 | cg.temp_type[@intFromEnum(result_temp_index)] = .slice_const_u8; | 38622 | cg.temp_type[@intFromEnum(result_temp_index)] = .slice_const_u8; |
| 29773 | result_temp_index.tracking(cg).* = .init(result); | 38623 | result_temp_index.tracking(cg).* = .init(result); |
| 29774 | first_temp.* = result_temp; | 38624 | first_temp.* = result_temp; |
| | 38625 | second_temp.* = result_temp; |
| 29775 | } | 38626 | } |
| 29776 | | 38627 | |
| 29777 | fn asMask(temp: Temp, info: MaskInfo, cg: *CodeGen) void { | 38628 | fn asMask(temp: Temp, info: MaskInfo, cg: *CodeGen) void { |
| ... | @@ -30248,7 +39099,20 @@ const Temp = struct { | ... | @@ -30248,7 +39099,20 @@ const Temp = struct { |
| 30248 | try cg.asmOpOnly(.{ .@"rep _sb", .sto }); | 39099 | try cg.asmOpOnly(.{ .@"rep _sb", .sto }); |
| 30249 | } | 39100 | } |
| 30250 | | 39101 | |
| 30251 | fn moveTo(temp: Temp, inst: Air.Inst.Index, cg: *CodeGen) !void { | 39102 | fn finish( |
| | 39103 | temp: Temp, |
| | 39104 | inst: Air.Inst.Index, |
| | 39105 | op_refs: []const Air.Inst.Ref, |
| | 39106 | op_temps: []const Temp, |
| | 39107 | cg: *CodeGen, |
| | 39108 | ) !void { |
| | 39109 | const tomb_bits = cg.liveness.getTombBits(inst); |
| | 39110 | for (0.., op_refs, op_temps) |op_index, op_ref, op_temp| { |
| | 39111 | if (op_temp.index != temp.index) try op_temp.die(cg); |
| | 39112 | if (tomb_bits & @as(Liveness.Bpi, 1) << @intCast(op_index) == 0) continue; |
| | 39113 | if (cg.reused_operands.isSet(op_index)) continue; |
| | 39114 | try cg.processDeath(op_ref.toIndexAllowNone() orelse continue); |
| | 39115 | } |
| 30252 | if (cg.liveness.isUnused(inst)) try temp.die(cg) else switch (temp.unwrap(cg)) { | 39116 | if (cg.liveness.isUnused(inst)) try temp.die(cg) else switch (temp.unwrap(cg)) { |
| 30253 | .ref, .err_ret_trace => { | 39117 | .ref, .err_ret_trace => { |
| 30254 | const result = try cg.allocRegOrMem(inst, true); | 39118 | const result = try cg.allocRegOrMem(inst, true); |
| ... | @@ -30410,6 +39274,10 @@ fn tempFromValue(cg: *CodeGen, value: Value) !Temp { | ... | @@ -30410,6 +39274,10 @@ fn tempFromValue(cg: *CodeGen, value: Value) !Temp { |
| 30410 | return cg.tempInit(value.typeOf(cg.pt.zcu), try cg.genTypedValue(value)); | 39274 | return cg.tempInit(value.typeOf(cg.pt.zcu), try cg.genTypedValue(value)); |
| 30411 | } | 39275 | } |
| 30412 | | 39276 | |
| | 39277 | fn tempMemFromValue(cg: *CodeGen, value: Value) !Temp { |
| | 39278 | return cg.tempInit(value.typeOf(cg.pt.zcu), try cg.lowerUav(value)); |
| | 39279 | } |
| | 39280 | |
| 30413 | fn tempFromOperand( | 39281 | fn tempFromOperand( |
| 30414 | cg: *CodeGen, | 39282 | cg: *CodeGen, |
| 30415 | inst: Air.Inst.Index, | 39283 | inst: Air.Inst.Index, |
| ... | @@ -30529,35 +39397,94 @@ const Select = struct { | ... | @@ -30529,35 +39397,94 @@ const Select = struct { |
| 30529 | }; | 39397 | }; |
| 30530 | switch (mir_tag[0]) { | 39398 | switch (mir_tag[0]) { |
| 30531 | .f_ => switch (mir_tag[1]) { | 39399 | .f_ => switch (mir_tag[1]) { |
| 30532 | .abs, .st => {}, | 39400 | .@"2xm1", |
| | 39401 | .abs, |
| | 39402 | .add, |
| | 39403 | .chs, |
| | 39404 | .clex, |
| | 39405 | .com, |
| | 39406 | .comi, |
| | 39407 | .cos, |
| | 39408 | .div, |
| | 39409 | .divr, |
| | 39410 | .free, |
| | 39411 | .mul, |
| | 39412 | .nop, |
| | 39413 | .prem, |
| | 39414 | .rndint, |
| | 39415 | .scale, |
| | 39416 | .sin, |
| | 39417 | .sqrt, |
| | 39418 | .st, |
| | 39419 | .sub, |
| | 39420 | .subr, |
| | 39421 | .tst, |
| | 39422 | .ucom, |
| | 39423 | .ucomi, |
| | 39424 | .wait, |
| | 39425 | .xam, |
| | 39426 | .xch, |
| | 39427 | => {}, |
| | 39428 | .init, .save => s.top = 0, |
| | 39429 | .ld, .ptan, .sincos, .xtract => s.top -%= 1, |
| | 39430 | .patan, .yl2x => s.top +%= 1, |
| | 39431 | .rstor => unreachable, |
| | 39432 | else => unreachable, |
| | 39433 | }, |
| | 39434 | .f_1 => switch (mir_tag[1]) { |
| 30533 | .ld => s.top -%= 1, | 39435 | .ld => s.top -%= 1, |
| 30534 | else => { | 39436 | .prem => {}, |
| 30535 | const fixes = @tagName(mir_tag[0]); | 39437 | else => unreachable, |
| 30536 | const fixes_blank = std.mem.indexOfScalar(u8, fixes, '_').?; | | |
| 30537 | std.debug.panic("{s}: {s}{s}{s}\n", .{ | | |
| 30538 | @src().fn_name, | | |
| 30539 | fixes[0..fixes_blank], | | |
| 30540 | @tagName(mir_tag[1]), | | |
| 30541 | fixes[fixes_blank + 1 ..], | | |
| 30542 | }); | | |
| 30543 | }, | | |
| 30544 | }, | 39438 | }, |
| 30545 | .f_p => switch (mir_tag[1]) { | 39439 | .f_b, .f_be, .f_e, .f_nb, .f_nbe, .f_ne, .f_nu, .f_u => switch (mir_tag[1]) { |
| | 39440 | .cmov => {}, |
| | 39441 | else => unreachable, |
| | 39442 | }, |
| | 39443 | .f_cw, .f_env, .f_sw => switch (mir_tag[1]) { |
| | 39444 | .ld, .st => {}, |
| | 39445 | else => unreachable, |
| | 39446 | }, |
| | 39447 | .f_p1 => switch (mir_tag[1]) { |
| | 39448 | .yl2x => s.top +%= 1, |
| | 39449 | else => unreachable, |
| | 39450 | }, |
| | 39451 | .fb_ => switch (mir_tag[1]) { |
| | 39452 | .ld => s.top -%= 1, |
| | 39453 | else => unreachable, |
| | 39454 | }, |
| | 39455 | .fb_p => switch (mir_tag[1]) { |
| 30546 | .st => s.top +%= 1, | 39456 | .st => s.top +%= 1, |
| 30547 | else => { | 39457 | else => unreachable, |
| 30548 | const fixes = @tagName(mir_tag[0]); | 39458 | }, |
| 30549 | const fixes_blank = std.mem.indexOfScalar(u8, fixes, '_').?; | 39459 | .fi_ => switch (mir_tag[1]) { |
| 30550 | std.debug.panic("{s}: {s}{s}{s}\n", .{ | 39460 | .add, .com, .div, .divr, .mul, .st, .stt, .sub, .subr => {}, |
| 30551 | @src().fn_name, | 39461 | .ld => s.top -%= 1, |
| 30552 | fixes[0..fixes_blank], | 39462 | else => unreachable, |
| 30553 | @tagName(mir_tag[1]), | 39463 | }, |
| 30554 | fixes[fixes_blank + 1 ..], | 39464 | .fi_p => switch (mir_tag[1]) { |
| 30555 | }); | 39465 | .com, .st => s.top +%= 1, |
| 30556 | }, | 39466 | else => unreachable, |
| | 39467 | }, |
| | 39468 | .fn_ => switch (mir_tag[1]) { |
| | 39469 | .clex => {}, |
| | 39470 | .init, .save => s.top = 0, |
| | 39471 | else => unreachable, |
| | 39472 | }, |
| | 39473 | .fn_cw, .fn_env, .fn_sw => switch (mir_tag[1]) { |
| | 39474 | .st => {}, |
| | 39475 | else => unreachable, |
| | 39476 | }, |
| | 39477 | .f_cstp => switch (mir_tag[1]) { |
| | 39478 | .de => s.top -%= 1, |
| | 39479 | .in => s.top +%= 1, |
| | 39480 | else => unreachable, |
| 30557 | }, | 39481 | }, |
| 30558 | .f_1, | 39482 | .f_l2e, .f_l2t, .f_lg2, .f_ln2, .f_pi, .f_z => switch (mir_tag[1]) { |
| 30559 | => switch (mir_tag[1]) { | | |
| 30560 | .ld => s.top -%= 1, | 39483 | .ld => s.top -%= 1, |
| | 39484 | else => unreachable, |
| | 39485 | }, |
| | 39486 | .f_p => switch (mir_tag[1]) { |
| | 39487 | .add, .com, .comi, .div, .divr, .mul, .st, .sub, .subr, .ucom, .ucomi => s.top +%= 1, |
| 30561 | else => { | 39488 | else => { |
| 30562 | const fixes = @tagName(mir_tag[0]); | 39489 | const fixes = @tagName(mir_tag[0]); |
| 30563 | const fixes_blank = std.mem.indexOfScalar(u8, fixes, '_').?; | 39490 | const fixes_blank = std.mem.indexOfScalar(u8, fixes, '_').?; |
| ... | @@ -30569,41 +39496,13 @@ const Select = struct { | ... | @@ -30569,41 +39496,13 @@ const Select = struct { |
| 30569 | }); | 39496 | }); |
| 30570 | }, | 39497 | }, |
| 30571 | }, | 39498 | }, |
| 30572 | .f_l2e, | 39499 | .f_pp => switch (mir_tag[1]) { |
| 30573 | .f_l2t, | 39500 | .com, .ucom => s.top +%= 2, |
| 30574 | .f_lg2, | | |
| 30575 | .f_ln2, | | |
| 30576 | .f_pi, | | |
| 30577 | .f_z, | | |
| 30578 | => switch (mir_tag[1]) { | | |
| 30579 | .ld => s.top -%= 1, | | |
| 30580 | else => unreachable, | 39501 | else => unreachable, |
| 30581 | }, | 39502 | }, |
| 30582 | .f_b, | 39503 | .fx_ => switch (mir_tag[1]) { |
| 30583 | .f_be, | 39504 | .rstor => unreachable, |
| 30584 | .f_cw, | 39505 | .save => {}, |
| 30585 | .f_e, | | |
| 30586 | .f_env, | | |
| 30587 | .f_nb, | | |
| 30588 | .f_nbe, | | |
| 30589 | .f_ne, | | |
| 30590 | .f_nu, | | |
| 30591 | .f_p1, | | |
| 30592 | .f_pp, | | |
| 30593 | .f_sw, | | |
| 30594 | .f_u, | | |
| 30595 | .fb_, | | |
| 30596 | .fb_p, | | |
| 30597 | .fi_, | | |
| 30598 | .fi_p, | | |
| 30599 | .fn_, | | |
| 30600 | .fn_cw, | | |
| 30601 | .fn_env, | | |
| 30602 | .fn_sw, | | |
| 30603 | => {}, | | |
| 30604 | .f_cstp => switch (mir_tag[1]) { | | |
| 30605 | .de => s.top -%= 1, | | |
| 30606 | .in => s.top +%= 1, | | |
| 30607 | else => unreachable, | 39506 | else => unreachable, |
| 30608 | }, | 39507 | }, |
| 30609 | else => {}, | 39508 | else => {}, |
| ... | @@ -30620,9 +39519,13 @@ const Select = struct { | ... | @@ -30620,9 +39519,13 @@ const Select = struct { |
| 30620 | dst_constraints: [@intFromEnum(Select.Operand.Ref.src0) - @intFromEnum(Select.Operand.Ref.dst0)]Constraint = @splat(.any), | 39519 | dst_constraints: [@intFromEnum(Select.Operand.Ref.src0) - @intFromEnum(Select.Operand.Ref.dst0)]Constraint = @splat(.any), |
| 30621 | src_constraints: [@intFromEnum(Select.Operand.Ref.none) - @intFromEnum(Select.Operand.Ref.src0)]Constraint = @splat(.any), | 39520 | src_constraints: [@intFromEnum(Select.Operand.Ref.none) - @intFromEnum(Select.Operand.Ref.src0)]Constraint = @splat(.any), |
| 30622 | patterns: []const Select.Pattern, | 39521 | patterns: []const Select.Pattern, |
| | 39522 | call_frame: packed struct(u16) { size: u10 = 0, alignment: InternPool.Alignment } = .{ .size = 0, .alignment = .none }, |
| 30623 | extra_temps: [@intFromEnum(Select.Operand.Ref.dst0) - @intFromEnum(Select.Operand.Ref.tmp0)]TempSpec = @splat(.unused), | 39523 | extra_temps: [@intFromEnum(Select.Operand.Ref.dst0) - @intFromEnum(Select.Operand.Ref.tmp0)]TempSpec = @splat(.unused), |
| 30624 | dst_temps: [@intFromEnum(Select.Operand.Ref.src0) - @intFromEnum(Select.Operand.Ref.dst0)]TempSpec.Kind = @splat(.unused), | 39524 | dst_temps: [@intFromEnum(Select.Operand.Ref.src0) - @intFromEnum(Select.Operand.Ref.dst0)]TempSpec.Kind = @splat(.unused), |
| 30625 | clobbers: struct { eflags: bool = false, st: u3 = 0 } = .{}, | 39525 | clobbers: packed struct { |
| | 39526 | eflags: bool = false, |
| | 39527 | caller_preserved: enum(u2) { none, ccc, zigcc } = .none, |
| | 39528 | } = .{}, |
| 30626 | each: union(enum) { | 39529 | each: union(enum) { |
| 30627 | once: []const Instruction, | 39530 | once: []const Instruction, |
| 30628 | }, | 39531 | }, |
| ... | @@ -30633,7 +39536,10 @@ const Select = struct { | ... | @@ -30633,7 +39536,10 @@ const Select = struct { |
| 30633 | any_bool_vec, | 39536 | any_bool_vec, |
| 30634 | any_int, | 39537 | any_int, |
| 30635 | any_signed_int, | 39538 | any_signed_int, |
| | 39539 | any_unsigned_int, |
| 30636 | any_scalar_int, | 39540 | any_scalar_int, |
| | 39541 | any_scalar_signed_int, |
| | 39542 | any_scalar_unsigned_int, |
| 30637 | any_float, | 39543 | any_float, |
| 30638 | po2_any, | 39544 | po2_any, |
| 30639 | bool_vec: Memory.Size, | 39545 | bool_vec: Memory.Size, |
| ... | @@ -30645,13 +39551,20 @@ const Select = struct { | ... | @@ -30645,13 +39551,20 @@ const Select = struct { |
| 30645 | multiple_size: Memory.Size, | 39551 | multiple_size: Memory.Size, |
| 30646 | int: Memory.Size, | 39552 | int: Memory.Size, |
| 30647 | scalar_int_is: Memory.Size, | 39553 | scalar_int_is: Memory.Size, |
| 30648 | scalar_int: struct { of: Memory.Size, is: Memory.Size }, | 39554 | scalar_signed_int_is: Memory.Size, |
| 30649 | scalar_signed_int: Memory.Size, | 39555 | scalar_unsigned_int_is: Memory.Size, |
| 30650 | scalar_unsigned_int: Memory.Size, | 39556 | scalar_int: OfIsSizes, |
| 30651 | scalar_remainder_int: struct { of: Memory.Size, is: Memory.Size }, | 39557 | scalar_signed_int: OfIsSizes, |
| 30652 | scalar_float: struct { of: Memory.Size, is: Memory.Size }, | 39558 | scalar_unsigned_int: OfIsSizes, |
| 30653 | scalar_exact_float: struct { of: Memory.Size, is: Memory.Size }, | 39559 | multiple_scalar_int: OfIsSizes, |
| 30654 | multiple_scalar_int: struct { of: Memory.Size, is: Memory.Size }, | 39560 | multiple_scalar_signed_int: OfIsSizes, |
| | 39561 | multiple_scalar_unsigned_int: OfIsSizes, |
| | 39562 | scalar_remainder_int: OfIsSizes, |
| | 39563 | float: Memory.Size, |
| | 39564 | scalar_any_float: Memory.Size, |
| | 39565 | scalar_float: OfIsSizes, |
| | 39566 | multiple_scalar_any_float: Memory.Size, |
| | 39567 | multiple_scalar_float: OfIsSizes, |
| 30655 | exact_int: u16, | 39568 | exact_int: u16, |
| 30656 | exact_signed_int: u16, | 39569 | exact_signed_int: u16, |
| 30657 | exact_unsigned_int: u16, | 39570 | exact_unsigned_int: u16, |
| ... | @@ -30660,16 +39573,18 @@ const Select = struct { | ... | @@ -30660,16 +39573,18 @@ const Select = struct { |
| 30660 | po2_int: Memory.Size, | 39573 | po2_int: Memory.Size, |
| 30661 | signed_po2_int: Memory.Size, | 39574 | signed_po2_int: Memory.Size, |
| 30662 | unsigned_po2_or_exact_int: Memory.Size, | 39575 | unsigned_po2_or_exact_int: Memory.Size, |
| 30663 | remainder_int: struct { of: Memory.Size, is: Memory.Size }, | 39576 | remainder_int: OfIsSizes, |
| 30664 | exact_remainder_int: struct { of: Memory.Size, is: Memory.Size }, | 39577 | exact_remainder_int: OfIsSizes, |
| 30665 | signed_or_exact_remainder_int: struct { of: Memory.Size, is: Memory.Size }, | 39578 | signed_or_exact_remainder_int: OfIsSizes, |
| 30666 | unsigned_or_exact_remainder_int: struct { of: Memory.Size, is: Memory.Size }, | 39579 | unsigned_or_exact_remainder_int: OfIsSizes, |
| 30667 | signed_int: Memory.Size, | 39580 | signed_int: Memory.Size, |
| 30668 | unsigned_int: Memory.Size, | 39581 | unsigned_int: Memory.Size, |
| 30669 | elem_size_is: u8, | 39582 | elem_size_is: u8, |
| 30670 | po2_elem_size, | 39583 | po2_elem_size, |
| 30671 | elem_int: Memory.Size, | 39584 | elem_int: Memory.Size, |
| 30672 | | 39585 | |
| | 39586 | const OfIsSizes = struct { of: Memory.Size, is: Memory.Size }; |
| | 39587 | |
| 30673 | fn accepts(constraint: Constraint, ty: Type, cg: *CodeGen) bool { | 39588 | fn accepts(constraint: Constraint, ty: Type, cg: *CodeGen) bool { |
| 30674 | const zcu = cg.pt.zcu; | 39589 | const zcu = cg.pt.zcu; |
| 30675 | return switch (constraint) { | 39590 | return switch (constraint) { |
| ... | @@ -30677,7 +39592,10 @@ const Select = struct { | ... | @@ -30677,7 +39592,10 @@ const Select = struct { |
| 30677 | .any_bool_vec => ty.isVector(zcu) and ty.childType(zcu).toIntern() == .bool_type, | 39592 | .any_bool_vec => ty.isVector(zcu) and ty.childType(zcu).toIntern() == .bool_type, |
| 30678 | .any_int => cg.intInfo(ty) != null, | 39593 | .any_int => cg.intInfo(ty) != null, |
| 30679 | .any_signed_int => if (cg.intInfo(ty)) |int_info| int_info.signedness == .signed else false, | 39594 | .any_signed_int => if (cg.intInfo(ty)) |int_info| int_info.signedness == .signed else false, |
| | 39595 | .any_unsigned_int => if (cg.intInfo(ty)) |int_info| int_info.signedness == .unsigned else false, |
| 30680 | .any_scalar_int => cg.intInfo(ty.scalarType(zcu)) != null, | 39596 | .any_scalar_int => cg.intInfo(ty.scalarType(zcu)) != null, |
| | 39597 | .any_scalar_signed_int => if (cg.intInfo(ty.scalarType(zcu))) |int_info| int_info.signedness == .signed else false, |
| | 39598 | .any_scalar_unsigned_int => if (cg.intInfo(ty.scalarType(zcu))) |int_info| int_info.signedness == .unsigned else false, |
| 30681 | .any_float => ty.isRuntimeFloat(), | 39599 | .any_float => ty.isRuntimeFloat(), |
| 30682 | .po2_any => std.math.isPowerOfTwo(ty.abiSize(zcu)), | 39600 | .po2_any => std.math.isPowerOfTwo(ty.abiSize(zcu)), |
| 30683 | .bool_vec => |size| ty.isVector(zcu) and ty.scalarType(zcu).toIntern() == .bool_type and | 39601 | .bool_vec => |size| ty.isVector(zcu) and ty.scalarType(zcu).toIntern() == .bool_type and |
| ... | @@ -30700,25 +39618,42 @@ const Select = struct { | ... | @@ -30700,25 +39618,42 @@ const Select = struct { |
| 30700 | size.bitSize(cg.target) >= int_info.bits | 39618 | size.bitSize(cg.target) >= int_info.bits |
| 30701 | else | 39619 | else |
| 30702 | false, | 39620 | false, |
| 30703 | .scalar_int => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= ty.abiSize(zcu) and | 39621 | .scalar_signed_int_is => |size| if (cg.intInfo(ty.scalarType(zcu))) |int_info| switch (int_info.signedness) { |
| 30704 | if (cg.intInfo(ty.scalarType(zcu))) |int_info| of_is.is.bitSize(cg.target) >= int_info.bits else false, | | |
| 30705 | .scalar_signed_int => |size| if (cg.intInfo(ty.scalarType(zcu))) |int_info| switch (int_info.signedness) { | | |
| 30706 | .signed => size.bitSize(cg.target) >= int_info.bits, | 39622 | .signed => size.bitSize(cg.target) >= int_info.bits, |
| 30707 | .unsigned => false, | 39623 | .unsigned => false, |
| 30708 | } else false, | 39624 | } else false, |
| 30709 | .scalar_unsigned_int => |size| if (cg.intInfo(ty.scalarType(zcu))) |int_info| switch (int_info.signedness) { | 39625 | .scalar_unsigned_int_is => |size| if (cg.intInfo(ty.scalarType(zcu))) |int_info| switch (int_info.signedness) { |
| 30710 | .signed => false, | 39626 | .signed => false, |
| 30711 | .unsigned => size.bitSize(cg.target) >= int_info.bits, | 39627 | .unsigned => size.bitSize(cg.target) >= int_info.bits, |
| 30712 | } else false, | 39628 | } else false, |
| | 39629 | .scalar_int => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= cg.unalignedSize(ty) and |
| | 39630 | if (cg.intInfo(ty.scalarType(zcu))) |int_info| of_is.is.bitSize(cg.target) >= int_info.bits else false, |
| | 39631 | .scalar_signed_int => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= cg.unalignedSize(ty) and |
| | 39632 | if (cg.intInfo(ty.scalarType(zcu))) |int_info| int_info.signedness == .signed and |
| | 39633 | of_is.is.bitSize(cg.target) >= int_info.bits else false, |
| | 39634 | .scalar_unsigned_int => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= cg.unalignedSize(ty) and |
| | 39635 | if (cg.intInfo(ty.scalarType(zcu))) |int_info| int_info.signedness == .unsigned and |
| | 39636 | of_is.is.bitSize(cg.target) >= int_info.bits else false, |
| 30713 | .multiple_scalar_int => |of_is| ty.abiSize(zcu) % @divExact(of_is.of.bitSize(cg.target), 8) == 0 and | 39637 | .multiple_scalar_int => |of_is| ty.abiSize(zcu) % @divExact(of_is.of.bitSize(cg.target), 8) == 0 and |
| 30714 | if (cg.intInfo(ty.scalarType(zcu))) |int_info| of_is.is.bitSize(cg.target) >= int_info.bits else false, | 39638 | if (cg.intInfo(ty.scalarType(zcu))) |int_info| of_is.is.bitSize(cg.target) >= int_info.bits else false, |
| | 39639 | .multiple_scalar_signed_int => |of_is| ty.abiSize(zcu) % @divExact(of_is.of.bitSize(cg.target), 8) == 0 and |
| | 39640 | if (cg.intInfo(ty.scalarType(zcu))) |int_info| int_info.signedness == .signed and |
| | 39641 | of_is.is.bitSize(cg.target) >= int_info.bits else false, |
| | 39642 | .multiple_scalar_unsigned_int => |of_is| ty.abiSize(zcu) % @divExact(of_is.of.bitSize(cg.target), 8) == 0 and |
| | 39643 | if (cg.intInfo(ty.scalarType(zcu))) |int_info| int_info.signedness == .unsigned and |
| | 39644 | of_is.is.bitSize(cg.target) >= int_info.bits else false, |
| 30715 | .scalar_remainder_int => |of_is| if (cg.intInfo(ty.scalarType(zcu))) |int_info| | 39645 | .scalar_remainder_int => |of_is| if (cg.intInfo(ty.scalarType(zcu))) |int_info| |
| 30716 | of_is.is.bitSize(cg.target) >= (int_info.bits - 1) % of_is.of.bitSize(cg.target) + 1 | 39646 | of_is.is.bitSize(cg.target) >= (int_info.bits - 1) % of_is.of.bitSize(cg.target) + 1 |
| 30717 | else | 39647 | else |
| 30718 | false, | 39648 | false, |
| 30719 | .scalar_float => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= ty.abiSize(zcu) and | 39649 | .float => |size| if (cg.floatBits(ty)) |float_bits| size.bitSize(cg.target) == float_bits else false, |
| 30720 | if (cg.floatBits(ty.scalarType(zcu))) |float_bits| of_is.is.bitSize(cg.target) >= float_bits else false, | 39650 | .scalar_any_float => |size| @divExact(size.bitSize(cg.target), 8) >= ty.abiSize(zcu) and |
| 30721 | .scalar_exact_float => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= ty.abiSize(zcu) and | 39651 | cg.floatBits(ty.scalarType(zcu)) != null, |
| | 39652 | .scalar_float => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= cg.unalignedSize(ty) and |
| | 39653 | if (cg.floatBits(ty.scalarType(zcu))) |float_bits| of_is.is.bitSize(cg.target) == float_bits else false, |
| | 39654 | .multiple_scalar_any_float => |size| ty.abiSize(zcu) % @divExact(size.bitSize(cg.target), 8) == 0 and |
| | 39655 | cg.floatBits(ty.scalarType(zcu)) != null, |
| | 39656 | .multiple_scalar_float => |of_is| ty.abiSize(zcu) % @divExact(of_is.of.bitSize(cg.target), 8) == 0 and |
| 30722 | if (cg.floatBits(ty.scalarType(zcu))) |float_bits| of_is.is.bitSize(cg.target) == float_bits else false, | 39657 | if (cg.floatBits(ty.scalarType(zcu))) |float_bits| of_is.is.bitSize(cg.target) == float_bits else false, |
| 30723 | .exact_int => |bit_size| if (cg.intInfo(ty)) |int_info| bit_size == int_info.bits else false, | 39658 | .exact_int => |bit_size| if (cg.intInfo(ty)) |int_info| bit_size == int_info.bits else false, |
| 30724 | .exact_signed_int => |bit_size| if (cg.intInfo(ty)) |int_info| switch (int_info.signedness) { | 39659 | .exact_signed_int => |bit_size| if (cg.intInfo(ty)) |int_info| switch (int_info.signedness) { |
| ... | @@ -30787,13 +39722,14 @@ const Select = struct { | ... | @@ -30787,13 +39722,14 @@ const Select = struct { |
| 30787 | src: [2]Src, | 39722 | src: [2]Src, |
| 30788 | commute: struct { u8, u8 } = .{ 0, 0 }, | 39723 | commute: struct { u8, u8 } = .{ 0, 0 }, |
| 30789 | | 39724 | |
| 30790 | const Src = enum { | 39725 | const Src = union(enum) { |
| 30791 | none, | 39726 | none, |
| 30792 | any, | 39727 | any, |
| 30793 | imm8, | 39728 | imm8, |
| 30794 | imm16, | 39729 | imm16, |
| 30795 | imm32, | 39730 | imm32, |
| 30796 | simm32, | 39731 | simm32, |
| | 39732 | to_reg: Register, |
| 30797 | mem, | 39733 | mem, |
| 30798 | to_mem, | 39734 | to_mem, |
| 30799 | mut_mem, | 39735 | mut_mem, |
| ... | @@ -30806,6 +39742,10 @@ const Select = struct { | ... | @@ -30806,6 +39742,10 @@ const Select = struct { |
| 30806 | to_x87, | 39742 | to_x87, |
| 30807 | mut_x87, | 39743 | mut_x87, |
| 30808 | to_mut_x87, | 39744 | to_mut_x87, |
| | 39745 | mmx, |
| | 39746 | to_mmx, |
| | 39747 | mut_mmx, |
| | 39748 | to_mut_mmx, |
| 30809 | mm, | 39749 | mm, |
| 30810 | to_mm, | 39750 | to_mm, |
| 30811 | mut_mm, | 39751 | mut_mm, |
| ... | @@ -30846,6 +39786,7 @@ const Select = struct { | ... | @@ -30846,6 +39786,7 @@ const Select = struct { |
| 30846 | .mem => temp.tracking(cg).short.isMemory(), | 39786 | .mem => temp.tracking(cg).short.isMemory(), |
| 30847 | .to_mem, .to_mut_mem => true, | 39787 | .to_mem, .to_mut_mem => true, |
| 30848 | .mut_mem => temp.isMut(cg) and temp.tracking(cg).short.isMemory(), | 39788 | .mut_mem => temp.isMut(cg) and temp.tracking(cg).short.isMemory(), |
| | 39789 | .to_reg => true, |
| 30849 | .gpr => temp.typeOf(cg).abiSize(cg.pt.zcu) <= 8 and switch (temp.tracking(cg).short) { | 39790 | .gpr => temp.typeOf(cg).abiSize(cg.pt.zcu) <= 8 and switch (temp.tracking(cg).short) { |
| 30850 | .register => |reg| reg.class() == .general_purpose, | 39791 | .register => |reg| reg.class() == .general_purpose, |
| 30851 | .register_offset => |reg_off| reg_off.reg.class() == .general_purpose and reg_off.off == 0, | 39792 | .register_offset => |reg_off| reg_off.reg.class() == .general_purpose and reg_off.off == 0, |
| ... | @@ -30868,6 +39809,17 @@ const Select = struct { | ... | @@ -30868,6 +39809,17 @@ const Select = struct { |
| 30868 | else => false, | 39809 | else => false, |
| 30869 | }, | 39810 | }, |
| 30870 | .to_x87, .to_mut_x87 => true, | 39811 | .to_x87, .to_mut_x87 => true, |
| | 39812 | .mmx => switch (temp.tracking(cg).short) { |
| | 39813 | .register => |reg| reg.class() == .mmx, |
| | 39814 | .register_offset => |reg_off| reg_off.reg.class() == .mmx and reg_off.off == 0, |
| | 39815 | else => false, |
| | 39816 | }, |
| | 39817 | .mut_mmx => temp.isMut(cg) and switch (temp.tracking(cg).short) { |
| | 39818 | .register => |reg| reg.class() == .mmx, |
| | 39819 | .register_offset => |reg_off| reg_off.reg.class() == .mmx and reg_off.off == 0, |
| | 39820 | else => false, |
| | 39821 | }, |
| | 39822 | .to_mmx, .to_mut_mmx => true, |
| 30871 | .mm => temp.typeOf(cg).abiSize(cg.pt.zcu) == 8 and switch (temp.tracking(cg).short) { | 39823 | .mm => temp.typeOf(cg).abiSize(cg.pt.zcu) == 8 and switch (temp.tracking(cg).short) { |
| 30872 | .register => |reg| reg.class() == .mmx, | 39824 | .register => |reg| reg.class() == .mmx, |
| 30873 | .register_offset => |reg_off| reg_off.reg.class() == .mmx and reg_off.off == 0, | 39825 | .register_offset => |reg_off| reg_off.reg.class() == .mmx and reg_off.off == 0, |
| ... | @@ -30920,12 +39872,13 @@ const Select = struct { | ... | @@ -30920,12 +39872,13 @@ const Select = struct { |
| 30920 | .none => unreachable, | 39872 | .none => unreachable, |
| 30921 | .any, .imm8, .imm16, .imm32, .simm32 => false, | 39873 | .any, .imm8, .imm16, .imm32, .simm32 => false, |
| 30922 | .mem, .to_mem, .mut_mem, .to_mut_mem => try temp.toBase(cg), | 39874 | .mem, .to_mem, .mut_mem, .to_mut_mem => try temp.toBase(cg), |
| | 39875 | .to_reg => |reg| try temp.toReg(reg, cg), |
| 30923 | .gpr, .to_gpr => try temp.toRegClass(false, .general_purpose, cg), | 39876 | .gpr, .to_gpr => try temp.toRegClass(false, .general_purpose, cg), |
| 30924 | .mut_gpr, .to_mut_gpr => try temp.toRegClass(true, .general_purpose, cg), | 39877 | .mut_gpr, .to_mut_gpr => try temp.toRegClass(true, .general_purpose, cg), |
| 30925 | .x87, .to_x87 => try temp.toRegClass(false, .x87, cg), | 39878 | .x87, .to_x87 => try temp.toRegClass(false, .x87, cg), |
| 30926 | .mut_x87, .to_mut_x87 => try temp.toRegClass(true, .x87, cg), | 39879 | .mut_x87, .to_mut_x87 => try temp.toRegClass(true, .x87, cg), |
| 30927 | .mm, .to_mm => try temp.toRegClass(false, .mmx, cg), | 39880 | .mmx, .to_mmx, .mm, .to_mm => try temp.toRegClass(false, .mmx, cg), |
| 30928 | .mut_mm, .to_mut_mm => try temp.toRegClass(true, .mmx, cg), | 39881 | .mut_mmx, .to_mut_mmx, .mut_mm, .to_mut_mm => try temp.toRegClass(true, .mmx, cg), |
| 30929 | .sse, .to_sse, .xmm, .to_xmm, .ymm, .to_ymm => try temp.toRegClass(false, .sse, cg), | 39882 | .sse, .to_sse, .xmm, .to_xmm, .ymm, .to_ymm => try temp.toRegClass(false, .sse, cg), |
| 30930 | .mut_sse, .to_mut_sse, .mut_xmm, .to_mut_xmm, .mut_ymm, .to_mut_ymm => try temp.toRegClass(true, .sse, cg), | 39883 | .mut_sse, .to_mut_sse, .mut_xmm, .to_mut_xmm, .mut_ymm, .to_mut_ymm => try temp.toRegClass(true, .sse, cg), |
| 30931 | }; | 39884 | }; |
| ... | @@ -30943,47 +39896,81 @@ const Select = struct { | ... | @@ -30943,47 +39896,81 @@ const Select = struct { |
| 30943 | unused, | 39896 | unused, |
| 30944 | any, | 39897 | any, |
| 30945 | cc: Condition, | 39898 | cc: Condition, |
| | 39899 | ref: Select.Operand.Ref, |
| 30946 | reg: Register, | 39900 | reg: Register, |
| 30947 | rc: Register.Class, | 39901 | rc: Register.Class, |
| | 39902 | mut_rc: struct { ref: Select.Operand.Ref, rc: Register.Class }, |
| | 39903 | ref_mask: struct { ref: Select.Operand.Ref, info: MaskInfo }, |
| 30948 | rc_mask: struct { rc: Register.Class, info: MaskInfo }, | 39904 | rc_mask: struct { rc: Register.Class, info: MaskInfo }, |
| | 39905 | mut_rc_mask: struct { ref: Select.Operand.Ref, rc: Register.Class, info: MaskInfo }, |
| 30949 | mem, | 39906 | mem, |
| 30950 | smin_mem: ConstInfo, | 39907 | smin_mem: ConstInfo, |
| 30951 | smax_mem: ConstInfo, | 39908 | smax_mem: ConstInfo, |
| 30952 | umin_mem: ConstInfo, | 39909 | umin_mem: ConstInfo, |
| 30953 | umax_mem: ConstInfo, | 39910 | umax_mem: ConstInfo, |
| 30954 | ref: Select.Operand.Ref, | 39911 | symbol: *const struct { lib: ?[]const u8 = null, name: []const u8 }, |
| 30955 | ref_mask: struct { ref: Select.Operand.Ref, info: MaskInfo }, | | |
| 30956 | mut_reg: struct { ref: Select.Operand.Ref, rc: Register.Class }, | | |
| 30957 | | 39912 | |
| 30958 | const ConstInfo = struct { ref: Select.Operand.Ref, vectorize: bool = false }; | 39913 | const ConstInfo = struct { ref: Select.Operand.Ref, vectorize_to: ?Memory.Size = null }; |
| 30959 | | 39914 | |
| 30960 | fn finish(kind: Kind, temp: Temp, s: *const Select) void { | 39915 | fn finish(kind: Kind, temp: Temp, s: *const Select) void { |
| 30961 | switch (kind) { | 39916 | switch (kind) { |
| 30962 | else => {}, | 39917 | else => {}, |
| 30963 | inline .rc_mask, .ref_mask => |mask| temp.asMask(mask.info, s.cg), | 39918 | inline .rc_mask, .mut_rc_mask, .ref_mask => |mask| temp.asMask(mask.info, s.cg), |
| 30964 | } | 39919 | } |
| 30965 | } | 39920 | } |
| 30966 | }; | 39921 | }; |
| 30967 | | 39922 | |
| 30968 | fn create(spec: TempSpec, s: *Select) !?Temp { | 39923 | fn pass(spec: TempSpec) u2 { |
| | 39924 | return switch (spec.kind) { |
| | 39925 | .unused => 0, |
| | 39926 | .reg => 1, |
| | 39927 | else => 2, |
| | 39928 | }; |
| | 39929 | } |
| | 39930 | |
| | 39931 | fn create(spec: TempSpec, s: *Select) !Temp { |
| 30969 | const cg = s.cg; | 39932 | const cg = s.cg; |
| 30970 | return switch (spec.kind) { | 39933 | return switch (spec.kind) { |
| 30971 | .unused => null, | 39934 | .unused => unreachable, |
| 30972 | .any => try cg.tempAlloc(spec.type), | 39935 | .any => try cg.tempAlloc(spec.type), |
| 30973 | .cc => |cc| try cg.tempInit(spec.type, .{ .eflags = cc }), | 39936 | .cc => |cc| try cg.tempInit(spec.type, .{ .eflags = cc }), |
| | 39937 | .ref => |ref| ref.deref(s), |
| 30974 | .reg => |reg| try cg.tempInit(spec.type, .{ .register = reg }), | 39938 | .reg => |reg| try cg.tempInit(spec.type, .{ .register = reg }), |
| 30975 | .rc => |rc| try cg.tempAllocReg(spec.type, regSetForRegClass(rc)), | 39939 | .rc => |rc| try cg.tempAllocReg(spec.type, regSetForRegClass(rc)), |
| | 39940 | .mut_rc => |ref_rc| { |
| | 39941 | const temp = ref_rc.ref.deref(s); |
| | 39942 | 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, |
| | 39945 | else => {}, |
| | 39946 | }; |
| | 39947 | return try cg.tempAllocReg(spec.type, regSetForRegClass(ref_rc.rc)); |
| | 39948 | }, |
| | 39949 | .ref_mask => |ref_mask| ref_mask.ref.deref(s), |
| 30976 | .rc_mask => |rc_mask| try cg.tempAllocReg(spec.type, regSetForRegClass(rc_mask.rc)), | 39950 | .rc_mask => |rc_mask| try cg.tempAllocReg(spec.type, regSetForRegClass(rc_mask.rc)), |
| | 39951 | .mut_rc_mask => |ref_rc_mask| { |
| | 39952 | const temp = ref_rc_mask.ref.deref(s); |
| | 39953 | 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, |
| | 39956 | else => {}, |
| | 39957 | }; |
| | 39958 | return try cg.tempAllocReg(spec.type, regSetForRegClass(ref_rc_mask.rc)); |
| | 39959 | }, |
| 30977 | .mem => try cg.tempAllocMem(spec.type), | 39960 | .mem => try cg.tempAllocMem(spec.type), |
| 30978 | .smin_mem, .smax_mem, .umin_mem, .umax_mem => |const_info| { | 39961 | .smin_mem, .smax_mem, .umin_mem, .umax_mem => |const_info| { |
| 30979 | const pt = cg.pt; | 39962 | const pt = cg.pt; |
| 30980 | const zcu = pt.zcu; | 39963 | const zcu = pt.zcu; |
| 30981 | const ip = &zcu.intern_pool; | 39964 | const ip = &zcu.intern_pool; |
| 30982 | const ty = const_info.ref.deref(s).typeOf(s.cg); | 39965 | const ty = const_info.ref.deref(s).typeOf(cg); |
| 30983 | const vector_len: ?u32, const scalar_ty: Type = switch (ip.indexToKey(ty.toIntern())) { | 39966 | const vector_len, const scalar_ty: Type = switch (ip.indexToKey(ty.toIntern())) { |
| 30984 | else => .{ if (const_info.vectorize) 1 else null, ty }, | 39967 | else => .{ null, ty }, |
| 30985 | .vector_type => |vector_type| .{ vector_type.len, .fromInterned(vector_type.child) }, | 39968 | .vector_type => |vector_type| .{ vector_type.len, .fromInterned(vector_type.child) }, |
| 30986 | }; | 39969 | }; |
| | 39970 | const res_vector_len: ?u32 = if (const_info.vectorize_to) |vectorize_to| switch (vectorize_to) { |
| | 39971 | .none => null, |
| | 39972 | else => @intCast(@divExact(@divExact(vectorize_to.bitSize(cg.target), 8), scalar_ty.abiSize(pt.zcu))), |
| | 39973 | } else vector_len; |
| 30987 | const res_scalar_ty, const res_scalar_val: Value = res_scalar: switch (scalar_ty.toIntern()) { | 39974 | const res_scalar_ty, const res_scalar_val: Value = res_scalar: switch (scalar_ty.toIntern()) { |
| 30988 | .bool_type => .{ | 39975 | .bool_type => .{ |
| 30989 | scalar_ty, | 39976 | scalar_ty, |
| ... | @@ -31028,26 +40015,20 @@ const Select = struct { | ... | @@ -31028,26 +40015,20 @@ const Select = struct { |
| 31028 | break :res_scalar .{ scalar_int_ty, try pt.intValue_big(scalar_int_ty, big_int.toConst()) }; | 40015 | break :res_scalar .{ scalar_int_ty, try pt.intValue_big(scalar_int_ty, big_int.toConst()) }; |
| 31029 | }, | 40016 | }, |
| 31030 | }; | 40017 | }; |
| 31031 | const res_val: Value = if (vector_len) |len| .fromInterned(try pt.intern(.{ .aggregate = .{ | 40018 | const res_val: Value = if (res_vector_len) |len| .fromInterned(try pt.intern(.{ .aggregate = .{ |
| 31032 | .ty = (try pt.vectorType(.{ | 40019 | .ty = (try pt.vectorType(.{ |
| 31033 | .len = len, | 40020 | .len = len, |
| 31034 | .child = res_scalar_ty.toIntern(), | 40021 | .child = res_scalar_ty.toIntern(), |
| 31035 | })).toIntern(), | 40022 | })).toIntern(), |
| 31036 | .storage = .{ .repeated_elem = res_scalar_val.toIntern() }, | 40023 | .storage = .{ .repeated_elem = res_scalar_val.toIntern() }, |
| 31037 | } })) else res_scalar_val; | 40024 | } })) else res_scalar_val; |
| 31038 | return try cg.tempFromValue(res_val); | 40025 | return try cg.tempMemFromValue(res_val); |
| 31039 | }, | | |
| 31040 | .ref => |ref| ref.deref(s), | | |
| 31041 | .ref_mask => |ref_mask| ref_mask.ref.deref(s), | | |
| 31042 | .mut_reg => |ref_rc| { | | |
| 31043 | const temp = ref_rc.ref.deref(s); | | |
| 31044 | if (temp.isMut(cg)) switch (temp.tracking(cg).short) { | | |
| 31045 | .register => |reg| if (reg.class() == ref_rc.rc) return temp, | | |
| 31046 | .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc.rc) return temp, | | |
| 31047 | else => {}, | | |
| 31048 | }; | | |
| 31049 | return try cg.tempAllocReg(spec.type, regSetForRegClass(ref_rc.rc)); | | |
| 31050 | }, | 40026 | }, |
| | 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)}), |
| 31051 | }; | 40032 | }; |
| 31052 | } | 40033 | } |
| 31053 | }; | 40034 | }; |
| ... | @@ -31083,13 +40064,13 @@ const Select = struct { | ... | @@ -31083,13 +40064,13 @@ const Select = struct { |
| 31083 | mem, | 40064 | mem, |
| 31084 | }; | 40065 | }; |
| 31085 | const Adjust = packed struct(u8) { | 40066 | const Adjust = packed struct(u8) { |
| 31086 | factor: i2, | 40067 | sign: enum(u1) { neg, pos }, |
| 31087 | scale: Memory.Scale, | 40068 | lhs: enum(u4) { |
| 31088 | amount: enum(u4) { | | |
| 31089 | none, | 40069 | none, |
| 31090 | ptr_size, | 40070 | ptr_size, |
| 31091 | ptr_bit_size, | 40071 | ptr_bit_size, |
| 31092 | size, | 40072 | size, |
| | 40073 | size_sub_elem_size, |
| 31093 | src0_unaligned_size, | 40074 | src0_unaligned_size, |
| 31094 | bit_size, | 40075 | bit_size, |
| 31095 | src0_bit_size, | 40076 | src0_bit_size, |
| ... | @@ -31102,35 +40083,41 @@ const Select = struct { | ... | @@ -31102,35 +40083,41 @@ const Select = struct { |
| 31102 | smax, | 40083 | smax, |
| 31103 | umax, | 40084 | umax, |
| 31104 | }, | 40085 | }, |
| 31105 | | 40086 | op: enum(u1) { mul, div }, |
| 31106 | const none: Adjust = .{ .factor = 0, .scale = .@"1", .amount = .none }; | 40087 | rhs: Memory.Scale, |
| 31107 | const sub_ptr_size: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .ptr_size }; | 40088 | |
| 31108 | const add_ptr_bit_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .ptr_bit_size }; | 40089 | const none: Adjust = .{ .sign = .pos, .lhs = .none, .op = .mul, .rhs = .@"1" }; |
| 31109 | const add_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .size }; | 40090 | const sub_ptr_size: Adjust = .{ .sign = .neg, .lhs = .ptr_size, .op = .mul, .rhs = .@"1" }; |
| 31110 | const sub_size: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .size }; | 40091 | const add_ptr_bit_size: Adjust = .{ .sign = .pos, .lhs = .ptr_bit_size, .op = .mul, .rhs = .@"1" }; |
| 31111 | const add_src0_unaligned_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .src0_unaligned_size }; | 40092 | const add_size: Adjust = .{ .sign = .pos, .lhs = .size, .op = .mul, .rhs = .@"1" }; |
| 31112 | const sub_src0_unaligned_size: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .src0_unaligned_size }; | 40093 | const add_size_div_8: Adjust = .{ .sign = .pos, .lhs = .size, .op = .div, .rhs = .@"8" }; |
| 31113 | const add_2_bit_size: Adjust = .{ .factor = 1, .scale = .@"2", .amount = .bit_size }; | 40094 | const sub_size_div_8: Adjust = .{ .sign = .neg, .lhs = .size, .op = .div, .rhs = .@"8" }; |
| 31114 | const add_bit_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .bit_size }; | 40095 | const sub_size: Adjust = .{ .sign = .neg, .lhs = .size, .op = .mul, .rhs = .@"1" }; |
| 31115 | const sub_bit_size: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .bit_size }; | 40096 | const add_size_sub_elem_size: Adjust = .{ .sign = .pos, .lhs = .size_sub_elem_size, .op = .mul, .rhs = .@"1" }; |
| 31116 | const add_src0_bit_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .src0_bit_size }; | 40097 | const add_src0_unaligned_size: Adjust = .{ .sign = .pos, .lhs = .src0_unaligned_size, .op = .mul, .rhs = .@"1" }; |
| 31117 | const sub_src0_bit_size: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .src0_bit_size }; | 40098 | const sub_src0_unaligned_size: Adjust = .{ .sign = .neg, .lhs = .src0_unaligned_size, .op = .mul, .rhs = .@"1" }; |
| 31118 | const add_8_len: Adjust = .{ .factor = 1, .scale = .@"8", .amount = .len }; | 40099 | const add_2_bit_size: Adjust = .{ .sign = .pos, .lhs = .bit_size, .op = .mul, .rhs = .@"2" }; |
| 31119 | const add_4_len: Adjust = .{ .factor = 1, .scale = .@"4", .amount = .len }; | 40100 | const add_bit_size: Adjust = .{ .sign = .pos, .lhs = .bit_size, .op = .mul, .rhs = .@"1" }; |
| 31120 | const add_3_len: Adjust = .{ .factor = 1, .scale = .@"3", .amount = .len }; | 40101 | const sub_bit_size: Adjust = .{ .sign = .neg, .lhs = .bit_size, .op = .mul, .rhs = .@"1" }; |
| 31121 | const add_2_len: Adjust = .{ .factor = 1, .scale = .@"2", .amount = .len }; | 40102 | const add_src0_bit_size: Adjust = .{ .sign = .pos, .lhs = .src0_bit_size, .op = .mul, .rhs = .@"1" }; |
| 31122 | const add_len: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .len }; | 40103 | const sub_src0_bit_size: Adjust = .{ .sign = .neg, .lhs = .src0_bit_size, .op = .mul, .rhs = .@"1" }; |
| 31123 | const sub_len: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .len }; | 40104 | const add_8_len: Adjust = .{ .sign = .pos, .lhs = .len, .op = .mul, .rhs = .@"8" }; |
| 31124 | const add_src0_elem_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .src0_elem_size }; | 40105 | const add_4_len: Adjust = .{ .sign = .pos, .lhs = .len, .op = .mul, .rhs = .@"4" }; |
| 31125 | const add_2_src0_elem_size: Adjust = .{ .factor = 1, .scale = .@"2", .amount = .src0_elem_size }; | 40106 | const add_3_len: Adjust = .{ .sign = .pos, .lhs = .len, .op = .mul, .rhs = .@"3" }; |
| 31126 | const add_4_src0_elem_size: Adjust = .{ .factor = 1, .scale = .@"4", .amount = .src0_elem_size }; | 40107 | const add_2_len: Adjust = .{ .sign = .pos, .lhs = .len, .op = .mul, .rhs = .@"2" }; |
| 31127 | const add_8_src0_elem_size: Adjust = .{ .factor = 1, .scale = .@"8", .amount = .src0_elem_size }; | 40108 | const add_len: Adjust = .{ .sign = .pos, .lhs = .len, .op = .mul, .rhs = .@"1" }; |
| 31128 | const sub_src0_elem_size: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .src0_elem_size }; | 40109 | const sub_len: Adjust = .{ .sign = .neg, .lhs = .len, .op = .mul, .rhs = .@"1" }; |
| 31129 | const add_src0_elem_size_times_src1: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .src0_elem_size_times_src1 }; | 40110 | const add_src0_elem_size: Adjust = .{ .sign = .pos, .lhs = .src0_elem_size, .op = .mul, .rhs = .@"1" }; |
| 31130 | const sub_src0_elem_size_times_src1: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .src0_elem_size_times_src1 }; | 40111 | const add_2_src0_elem_size: Adjust = .{ .sign = .pos, .lhs = .src0_elem_size, .op = .mul, .rhs = .@"2" }; |
| 31131 | const add_log2_src0_elem_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .log2_src0_elem_size }; | 40112 | const add_4_src0_elem_size: Adjust = .{ .sign = .pos, .lhs = .src0_elem_size, .op = .mul, .rhs = .@"4" }; |
| 31132 | const add_elem_limbs: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .elem_limbs }; | 40113 | const add_8_src0_elem_size: Adjust = .{ .sign = .pos, .lhs = .src0_elem_size, .op = .mul, .rhs = .@"8" }; |
| 31133 | const add_umax: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .umax }; | 40114 | const add_src0_elem_size_div_8: Adjust = .{ .sign = .pos, .lhs = .src0_elem_size, .op = .div, .rhs = .@"8" }; |
| | 40115 | const sub_src0_elem_size: Adjust = .{ .sign = .neg, .lhs = .src0_elem_size, .op = .mul, .rhs = .@"1" }; |
| | 40116 | const add_src0_elem_size_times_src1: Adjust = .{ .sign = .pos, .lhs = .src0_elem_size_times_src1, .op = .mul, .rhs = .@"1" }; |
| | 40117 | const sub_src0_elem_size_times_src1: Adjust = .{ .sign = .neg, .lhs = .src0_elem_size_times_src1, .op = .mul, .rhs = .@"1" }; |
| | 40118 | const add_log2_src0_elem_size: Adjust = .{ .sign = .pos, .lhs = .log2_src0_elem_size, .op = .mul, .rhs = .@"1" }; |
| | 40119 | const add_elem_limbs: Adjust = .{ .sign = .pos, .lhs = .elem_limbs, .op = .mul, .rhs = .@"1" }; |
| | 40120 | const add_umax: Adjust = .{ .sign = .pos, .lhs = .umax, .op = .mul, .rhs = .@"1" }; |
| 31134 | }; | 40121 | }; |
| 31135 | const Ref = enum(u4) { | 40122 | const Ref = enum(u4) { |
| 31136 | tmp0, | 40123 | tmp0, |
| ... | @@ -31139,6 +40126,9 @@ const Select = struct { | ... | @@ -31139,6 +40126,9 @@ const Select = struct { |
| 31139 | tmp3, | 40126 | tmp3, |
| 31140 | tmp4, | 40127 | tmp4, |
| 31141 | tmp5, | 40128 | tmp5, |
| | 40129 | tmp6, |
| | 40130 | tmp7, |
| | 40131 | tmp8, |
| 31142 | dst0, | 40132 | dst0, |
| 31143 | src0, | 40133 | src0, |
| 31144 | src1, | 40134 | src1, |
| ... | @@ -31210,6 +40200,36 @@ const Select = struct { | ... | @@ -31210,6 +40200,36 @@ const Select = struct { |
| 31210 | const tmp5x: Sized = .{ .ref = .tmp5, .size = .xword }; | 40200 | const tmp5x: Sized = .{ .ref = .tmp5, .size = .xword }; |
| 31211 | const tmp5y: Sized = .{ .ref = .tmp5, .size = .yword }; | 40201 | const tmp5y: Sized = .{ .ref = .tmp5, .size = .yword }; |
| 31212 | | 40202 | |
| | 40203 | const tmp6: Sized = .{ .ref = .tmp6, .size = .none }; |
| | 40204 | const tmp6b: Sized = .{ .ref = .tmp6, .size = .byte }; |
| | 40205 | const tmp6w: Sized = .{ .ref = .tmp6, .size = .word }; |
| | 40206 | const tmp6d: Sized = .{ .ref = .tmp6, .size = .dword }; |
| | 40207 | const tmp6p: Sized = .{ .ref = .tmp6, .size = .ptr }; |
| | 40208 | const tmp6q: Sized = .{ .ref = .tmp6, .size = .qword }; |
| | 40209 | const tmp6t: Sized = .{ .ref = .tmp6, .size = .tbyte }; |
| | 40210 | const tmp6x: Sized = .{ .ref = .tmp6, .size = .xword }; |
| | 40211 | const tmp6y: Sized = .{ .ref = .tmp6, .size = .yword }; |
| | 40212 | |
| | 40213 | const tmp7: Sized = .{ .ref = .tmp7, .size = .none }; |
| | 40214 | const tmp7b: Sized = .{ .ref = .tmp7, .size = .byte }; |
| | 40215 | const tmp7w: Sized = .{ .ref = .tmp7, .size = .word }; |
| | 40216 | const tmp7d: Sized = .{ .ref = .tmp7, .size = .dword }; |
| | 40217 | const tmp7p: Sized = .{ .ref = .tmp7, .size = .ptr }; |
| | 40218 | const tmp7q: Sized = .{ .ref = .tmp7, .size = .qword }; |
| | 40219 | const tmp7t: Sized = .{ .ref = .tmp7, .size = .tbyte }; |
| | 40220 | const tmp7x: Sized = .{ .ref = .tmp7, .size = .xword }; |
| | 40221 | const tmp7y: Sized = .{ .ref = .tmp7, .size = .yword }; |
| | 40222 | |
| | 40223 | const tmp8: Sized = .{ .ref = .tmp8, .size = .none }; |
| | 40224 | const tmp8b: Sized = .{ .ref = .tmp8, .size = .byte }; |
| | 40225 | const tmp8w: Sized = .{ .ref = .tmp8, .size = .word }; |
| | 40226 | const tmp8d: Sized = .{ .ref = .tmp8, .size = .dword }; |
| | 40227 | const tmp8p: Sized = .{ .ref = .tmp8, .size = .ptr }; |
| | 40228 | const tmp8q: Sized = .{ .ref = .tmp8, .size = .qword }; |
| | 40229 | const tmp8t: Sized = .{ .ref = .tmp8, .size = .tbyte }; |
| | 40230 | const tmp8x: Sized = .{ .ref = .tmp8, .size = .xword }; |
| | 40231 | const tmp8y: Sized = .{ .ref = .tmp8, .size = .yword }; |
| | 40232 | |
| 31213 | const dst0: Sized = .{ .ref = .dst0, .size = .none }; | 40233 | const dst0: Sized = .{ .ref = .dst0, .size = .none }; |
| 31214 | const dst0b: Sized = .{ .ref = .dst0, .size = .byte }; | 40234 | const dst0b: Sized = .{ .ref = .dst0, .size = .byte }; |
| 31215 | const dst0w: Sized = .{ .ref = .dst0, .size = .word }; | 40235 | const dst0w: Sized = .{ .ref = .dst0, .size = .word }; |
| ... | @@ -31307,6 +40327,33 @@ const Select = struct { | ... | @@ -31307,6 +40327,33 @@ const Select = struct { |
| 31307 | const tmp5x: Select.Operand = .{ .tag = .ref, .base = .tmp5x }; | 40327 | const tmp5x: Select.Operand = .{ .tag = .ref, .base = .tmp5x }; |
| 31308 | const tmp5y: Select.Operand = .{ .tag = .ref, .base = .tmp5y }; | 40328 | const tmp5y: Select.Operand = .{ .tag = .ref, .base = .tmp5y }; |
| 31309 | | 40329 | |
| | 40330 | const tmp6b: Select.Operand = .{ .tag = .ref, .base = .tmp6b }; |
| | 40331 | const tmp6w: Select.Operand = .{ .tag = .ref, .base = .tmp6w }; |
| | 40332 | const tmp6d: Select.Operand = .{ .tag = .ref, .base = .tmp6d }; |
| | 40333 | const tmp6p: Select.Operand = .{ .tag = .ref, .base = .tmp6p }; |
| | 40334 | const tmp6q: Select.Operand = .{ .tag = .ref, .base = .tmp6q }; |
| | 40335 | const tmp6t: Select.Operand = .{ .tag = .ref, .base = .tmp6t }; |
| | 40336 | const tmp6x: Select.Operand = .{ .tag = .ref, .base = .tmp6x }; |
| | 40337 | const tmp6y: Select.Operand = .{ .tag = .ref, .base = .tmp6y }; |
| | 40338 | |
| | 40339 | const tmp7b: Select.Operand = .{ .tag = .ref, .base = .tmp7b }; |
| | 40340 | const tmp7w: Select.Operand = .{ .tag = .ref, .base = .tmp7w }; |
| | 40341 | const tmp7d: Select.Operand = .{ .tag = .ref, .base = .tmp7d }; |
| | 40342 | const tmp7p: Select.Operand = .{ .tag = .ref, .base = .tmp7p }; |
| | 40343 | const tmp7q: Select.Operand = .{ .tag = .ref, .base = .tmp7q }; |
| | 40344 | const tmp7t: Select.Operand = .{ .tag = .ref, .base = .tmp7t }; |
| | 40345 | const tmp7x: Select.Operand = .{ .tag = .ref, .base = .tmp7x }; |
| | 40346 | const tmp7y: Select.Operand = .{ .tag = .ref, .base = .tmp7y }; |
| | 40347 | |
| | 40348 | const tmp8b: Select.Operand = .{ .tag = .ref, .base = .tmp8b }; |
| | 40349 | const tmp8w: Select.Operand = .{ .tag = .ref, .base = .tmp8w }; |
| | 40350 | const tmp8d: Select.Operand = .{ .tag = .ref, .base = .tmp8d }; |
| | 40351 | const tmp8p: Select.Operand = .{ .tag = .ref, .base = .tmp8p }; |
| | 40352 | const tmp8q: Select.Operand = .{ .tag = .ref, .base = .tmp8q }; |
| | 40353 | const tmp8t: Select.Operand = .{ .tag = .ref, .base = .tmp8t }; |
| | 40354 | const tmp8x: Select.Operand = .{ .tag = .ref, .base = .tmp8x }; |
| | 40355 | const tmp8y: Select.Operand = .{ .tag = .ref, .base = .tmp8y }; |
| | 40356 | |
| 31310 | const dst0b: Select.Operand = .{ .tag = .ref, .base = .dst0b }; | 40357 | const dst0b: Select.Operand = .{ .tag = .ref, .base = .dst0b }; |
| 31311 | const dst0w: Select.Operand = .{ .tag = .ref, .base = .dst0w }; | 40358 | const dst0w: Select.Operand = .{ .tag = .ref, .base = .dst0w }; |
| 31312 | const dst0d: Select.Operand = .{ .tag = .ref, .base = .dst0d }; | 40359 | const dst0d: Select.Operand = .{ .tag = .ref, .base = .dst0d }; |
| ... | @@ -31518,11 +40565,15 @@ const Select = struct { | ... | @@ -31518,11 +40565,15 @@ const Select = struct { |
| 31518 | const UnsignedImm = @Type(.{ | 40565 | const UnsignedImm = @Type(.{ |
| 31519 | .int = .{ .signedness = .unsigned, .bits = @typeInfo(SignedImm).int.bits }, | 40566 | .int = .{ .signedness = .unsigned, .bits = @typeInfo(SignedImm).int.bits }, |
| 31520 | }); | 40567 | }); |
| 31521 | return @as(i5, op.adjust.factor) * op.adjust.scale.toFactor() * @as(SignedImm, switch (op.adjust.amount) { | 40568 | const lhs: SignedImm = lhs: switch (op.adjust.lhs) { |
| 31522 | .none => 0, | 40569 | .none => 0, |
| 31523 | .ptr_size => @divExact(s.cg.target.ptrBitWidth(), 8), | 40570 | .ptr_size => @divExact(s.cg.target.ptrBitWidth(), 8), |
| 31524 | .ptr_bit_size => s.cg.target.ptrBitWidth(), | 40571 | .ptr_bit_size => s.cg.target.ptrBitWidth(), |
| 31525 | .size => @intCast(op.base.ref.deref(s).typeOf(s.cg).abiSize(s.cg.pt.zcu)), | 40572 | .size => @intCast(op.base.ref.deref(s).typeOf(s.cg).abiSize(s.cg.pt.zcu)), |
| | 40573 | .size_sub_elem_size => { |
| | 40574 | const ty = op.base.ref.deref(s).typeOf(s.cg); |
| | 40575 | break :lhs @intCast(ty.abiSize(s.cg.pt.zcu) - ty.elemType2(s.cg.pt.zcu).abiSize(s.cg.pt.zcu)); |
| | 40576 | }, |
| 31526 | .src0_unaligned_size => @intCast(s.cg.unalignedSize(Select.Operand.Ref.src0.deref(s).typeOf(s.cg))), | 40577 | .src0_unaligned_size => @intCast(s.cg.unalignedSize(Select.Operand.Ref.src0.deref(s).typeOf(s.cg))), |
| 31527 | .bit_size => @intCast(op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu)), | 40578 | .bit_size => @intCast(op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu)), |
| 31528 | .src0_bit_size => @intCast(Select.Operand.Ref.src0.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu)), | 40579 | .src0_bit_size => @intCast(Select.Operand.Ref.src0.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu)), |
| ... | @@ -31544,7 +40595,20 @@ const Select = struct { | ... | @@ -31544,7 +40595,20 @@ const Select = struct { |
| 31544 | .umax => @bitCast(@as(UnsignedImm, std.math.maxInt(UnsignedImm)) >> @truncate( | 40595 | .umax => @bitCast(@as(UnsignedImm, std.math.maxInt(UnsignedImm)) >> @truncate( |
| 31545 | -%op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu), | 40596 | -%op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu), |
| 31546 | )), | 40597 | )), |
| 31547 | }) + op.imm; | 40598 | }; |
| | 40599 | const rhs = op.adjust.rhs.toLog2(); |
| | 40600 | const res = res: switch (op.adjust.op) { |
| | 40601 | .mul => { |
| | 40602 | const res = @shlWithOverflow(lhs, rhs); |
| | 40603 | assert(res[1] == 0); |
| | 40604 | break :res res[0]; |
| | 40605 | }, |
| | 40606 | .div => @shrExact(lhs, rhs), |
| | 40607 | }; |
| | 40608 | return switch (op.adjust.sign) { |
| | 40609 | .neg => op.imm - res, |
| | 40610 | .pos => op.imm + res, |
| | 40611 | }; |
| 31548 | } | 40612 | } |
| 31549 | | 40613 | |
| 31550 | fn lower(op: Select.Operand, s: *Select) !CodeGen.Operand { | 40614 | fn lower(op: Select.Operand, s: *Select) !CodeGen.Operand { |
| ... | @@ -31566,6 +40630,7 @@ const Select = struct { | ... | @@ -31566,6 +40630,7 @@ const Select = struct { |
| 31566 | } }, | 40630 | } }, |
| 31567 | else => |mcv| .{ .mem = try mcv.mem(s.cg, .{ .size = op.base.size }) }, | 40631 | else => |mcv| .{ .mem = try mcv.mem(s.cg, .{ .size = op.base.size }) }, |
| 31568 | .register => |reg| .{ .reg = s.lowerReg(registerAlias(reg, @intCast(@divExact(op.base.size.bitSize(s.cg.target), 8)))) }, | 40632 | .register => |reg| .{ .reg = s.lowerReg(registerAlias(reg, @intCast(@divExact(op.base.size.bitSize(s.cg.target), 8)))) }, |
| | 40633 | .lea_symbol => |sym_off| .{ .imm = .rel(sym_off) }, |
| 31569 | }, | 40634 | }, |
| 31570 | .simm => .{ .imm = .s(op.adjustedImm(i32, s)) }, | 40635 | .simm => .{ .imm = .s(op.adjustedImm(i32, s)) }, |
| 31571 | .uimm => .{ .imm = .u(@bitCast(op.adjustedImm(i64, s))) }, | 40636 | .uimm => .{ .imm = .u(@bitCast(op.adjustedImm(i64, s))) }, |
| ... | @@ -31601,6 +40666,7 @@ fn select( | ... | @@ -31601,6 +40666,7 @@ fn select( |
| 31601 | src_temps: []Temp, | 40666 | src_temps: []Temp, |
| 31602 | cases: []const Select.Case, | 40667 | cases: []const Select.Case, |
| 31603 | ) !void { | 40668 | ) !void { |
| | 40669 | @setEvalBranchQuota(33_600); |
| 31604 | cases: for (cases) |case| { | 40670 | cases: for (cases) |case| { |
| 31605 | for (case.required_features) |required_feature| if (required_feature) |feature| if (!cg.hasFeature(feature)) continue :cases; | 40671 | for (case.required_features) |required_feature| if (required_feature) |feature| if (!cg.hasFeature(feature)) continue :cases; |
| 31606 | for (case.dst_constraints[0..dst_temps.len], dst_tys) |dst_constraint, dst_ty| if (!dst_constraint.accepts(dst_ty, cg)) continue :cases; | 40672 | for (case.dst_constraints[0..dst_temps.len], dst_tys) |dst_constraint, dst_ty| if (!dst_constraint.accepts(dst_ty, cg)) continue :cases; |
| ... | @@ -31613,6 +40679,16 @@ fn select( | ... | @@ -31613,6 +40679,16 @@ fn select( |
| 31613 | for (pattern.src[0..src_temps.len], src_temps) |src_pattern, src_temp| if (!src_pattern.matches(src_temp, cg)) continue :patterns; | 40679 | for (pattern.src[0..src_temps.len], src_temps) |src_pattern, src_temp| if (!src_pattern.matches(src_temp, cg)) continue :patterns; |
| 31614 | if (std.debug.runtime_safety) for (pattern.src[src_temps.len..]) |src_pattern| assert(src_pattern == .none); | 40680 | if (std.debug.runtime_safety) for (pattern.src[src_temps.len..]) |src_pattern| assert(src_pattern == .none); |
| 31615 | | 40681 | |
| | 40682 | if (case.call_frame.alignment != .none) { |
| | 40683 | const frame_allocs_slice = cg.frame_allocs.slice(); |
| | 40684 | const stack_frame_size = |
| | 40685 | &frame_allocs_slice.items(.abi_size)[@intFromEnum(FrameIndex.call_frame)]; |
| | 40686 | stack_frame_size.* = @max(stack_frame_size.*, case.call_frame.size); |
| | 40687 | const stack_frame_align = |
| | 40688 | &frame_allocs_slice.items(.abi_align)[@intFromEnum(FrameIndex.call_frame)]; |
| | 40689 | stack_frame_align.* = stack_frame_align.max(case.call_frame.alignment); |
| | 40690 | } |
| | 40691 | |
| 31616 | var s: Select = .{ | 40692 | var s: Select = .{ |
| 31617 | .cg = cg, | 40693 | .cg = cg, |
| 31618 | .temps = undefined, | 40694 | .temps = undefined, |
| ... | @@ -31623,15 +40699,32 @@ fn select( | ... | @@ -31623,15 +40699,32 @@ fn select( |
| 31623 | const dst_slots = s.temps[@intFromEnum(Select.Operand.Ref.dst0)..@intFromEnum(Select.Operand.Ref.src0)]; | 40699 | const dst_slots = s.temps[@intFromEnum(Select.Operand.Ref.dst0)..@intFromEnum(Select.Operand.Ref.src0)]; |
| 31624 | const src_slots = s.temps[@intFromEnum(Select.Operand.Ref.src0)..@intFromEnum(Select.Operand.Ref.none)]; | 40700 | const src_slots = s.temps[@intFromEnum(Select.Operand.Ref.src0)..@intFromEnum(Select.Operand.Ref.none)]; |
| 31625 | | 40701 | |
| 31626 | for (0..case.clobbers.st -| 1) |i| { | 40702 | caller_preserved: { |
| 31627 | const tracked_index: RegisterManager.TrackedIndex = @intCast(RegisterManager.indexOfKnownRegIntoTracked(.st6).? - i); | 40703 | const cc = switch (case.clobbers.caller_preserved) { |
| 31628 | try cg.register_manager.getRegIndex(tracked_index, null); | 40704 | .none => break :caller_preserved, |
| 31629 | _ = cg.register_manager.lockRegIndexAssumeUnused(tracked_index); | 40705 | .ccc => cg.target.cCallingConvention().?, |
| | 40706 | .zigcc => .auto, |
| | 40707 | }; |
| | 40708 | const err_ret_trace_reg = if (cc == .auto and cg.pt.zcu.comp.config.any_error_tracing) err_ret_trace_reg: { |
| | 40709 | const param_gpr = abi.getCAbiIntParamRegs(.auto); |
| | 40710 | break :err_ret_trace_reg param_gpr[param_gpr.len - 1]; |
| | 40711 | } else .none; |
| | 40712 | switch (cc) { |
| | 40713 | else => unreachable, |
| | 40714 | inline .x86_64_sysv, .x86_64_win, .auto => |_, tag| inline for (comptime abi.getCallerPreservedRegs(tag)) |reg| skip: { |
| | 40715 | if (reg == err_ret_trace_reg) break :skip; |
| | 40716 | const tracked_index = RegisterManager.indexOfKnownRegIntoTracked(reg) orelse break :skip; |
| | 40717 | try cg.register_manager.getRegIndex(tracked_index, null); |
| | 40718 | assert(cg.register_manager.lockRegIndexAssumeUnused(tracked_index).tracked_index == tracked_index); |
| | 40719 | }, |
| | 40720 | } |
| 31630 | } | 40721 | } |
| 31631 | | 40722 | |
| 31632 | @memcpy(src_slots[0..src_temps.len], src_temps); | 40723 | @memcpy(src_slots[0..src_temps.len], src_temps); |
| 31633 | std.mem.swap(Temp, &src_slots[pattern.commute[0]], &src_slots[pattern.commute[1]]); | 40724 | std.mem.swap(Temp, &src_slots[pattern.commute[0]], &src_slots[pattern.commute[1]]); |
| 31634 | for (tmp_slots, case.extra_temps) |*slot, spec| slot.* = try spec.create(&s) orelse continue; | 40725 | for (1..3) |pass| for (tmp_slots, case.extra_temps) |*slot, spec| if (pass == spec.pass()) { |
| | 40726 | slot.* = try spec.create(&s); |
| | 40727 | }; |
| 31635 | | 40728 | |
| 31636 | while (true) for (pattern.src[0..src_temps.len], src_temps) |src_pattern, *src_temp| { | 40729 | while (true) for (pattern.src[0..src_temps.len], src_temps) |src_pattern, *src_temp| { |
| 31637 | if (try src_pattern.convert(src_temp, cg)) break; | 40730 | if (try src_pattern.convert(src_temp, cg)) break; |
| ... | @@ -31642,7 +40735,7 @@ fn select( | ... | @@ -31642,7 +40735,7 @@ fn select( |
| 31642 | if (case.clobbers.eflags) try cg.spillEflagsIfOccupied(); | 40735 | if (case.clobbers.eflags) try cg.spillEflagsIfOccupied(); |
| 31643 | | 40736 | |
| 31644 | for (dst_temps, dst_tys, case.dst_temps[0..dst_temps.len]) |*dst_temp, dst_ty, dst_kind| | 40737 | for (dst_temps, dst_tys, case.dst_temps[0..dst_temps.len]) |*dst_temp, dst_ty, dst_kind| |
| 31645 | dst_temp.* = (try Select.TempSpec.create(.{ .type = dst_ty, .kind = dst_kind }, &s)).?; | 40738 | dst_temp.* = (try Select.TempSpec.create(.{ .type = dst_ty, .kind = dst_kind }, &s)); |
| 31646 | @memcpy(dst_slots[0..dst_temps.len], dst_temps); | 40739 | @memcpy(dst_slots[0..dst_temps.len], dst_temps); |
| 31647 | | 40740 | |
| 31648 | switch (case.each) { | 40741 | switch (case.each) { |
| ... | @@ -31653,9 +40746,24 @@ fn select( | ... | @@ -31653,9 +40746,24 @@ fn select( |
| 31653 | } | 40746 | } |
| 31654 | assert(s.top == 0); | 40747 | assert(s.top == 0); |
| 31655 | | 40748 | |
| 31656 | for (0..case.clobbers.st -| 1) |i| cg.register_manager.unlockReg(.{ | 40749 | caller_preserved: { |
| 31657 | .tracked_index = @intCast(RegisterManager.indexOfKnownRegIntoTracked(.st6).? - i), | 40750 | const cc = switch (case.clobbers.caller_preserved) { |
| 31658 | }); | 40751 | .none => break :caller_preserved, |
| | 40752 | .ccc => cg.target.cCallingConvention().?, |
| | 40753 | .zigcc => .auto, |
| | 40754 | }; |
| | 40755 | const err_ret_trace_reg = if (cc == .auto and cg.pt.zcu.comp.config.any_error_tracing) err_ret_trace_reg: { |
| | 40756 | const param_gpr = abi.getCAbiIntParamRegs(.auto); |
| | 40757 | break :err_ret_trace_reg param_gpr[param_gpr.len - 1]; |
| | 40758 | } else .none; |
| | 40759 | switch (cc) { |
| | 40760 | else => unreachable, |
| | 40761 | inline .x86_64_sysv, .x86_64_win, .auto => |_, tag| inline for (comptime abi.getCallerPreservedRegs(tag)) |reg| skip: { |
| | 40762 | if (reg == err_ret_trace_reg) break :skip; |
| | 40763 | cg.register_manager.unlockReg(.{ .tracked_index = RegisterManager.indexOfKnownRegIntoTracked(reg) orelse break :skip }); |
| | 40764 | }, |
| | 40765 | } |
| | 40766 | } |
| 31659 | for (dst_temps, case.dst_temps[0..dst_temps.len]) |dst_temp, dst_kind| dst_kind.finish(dst_temp, &s); | 40767 | for (dst_temps, case.dst_temps[0..dst_temps.len]) |dst_temp, dst_kind| dst_kind.finish(dst_temp, &s); |
| 31660 | for (case.extra_temps, tmp_slots) |spec, temp| if (spec.kind != .unused) try temp.die(cg); | 40768 | for (case.extra_temps, tmp_slots) |spec, temp| if (spec.kind != .unused) try temp.die(cg); |
| 31661 | return; | 40769 | return; |