| ... | ... | @@ -150,7 +150,7 @@ const Owner = union(enum) { |
| 150 | 150 | }; |
| 151 | 151 | |
| 152 | 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 | 155 | pub const MCValue = union(enum) { |
| 156 | 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 | 2393 | } |
| 2394 | 2394 | |
| 2395 | 2395 | fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2396 | | @setEvalBranchQuota(1_800); |
| 2396 | @setEvalBranchQuota(3_400); |
| 2397 | 2397 | const pt = cg.pt; |
| 2398 | 2398 | const zcu = pt.zcu; |
| 2399 | 2399 | const ip = &zcu.intern_pool; |
| ... | ... | @@ -2433,17 +2433,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2433 | 2433 | .add_wrap, |
| 2434 | 2434 | .sub, |
| 2435 | 2435 | .sub_wrap, |
| 2436 | | .min, |
| 2437 | | .max, |
| 2438 | 2436 | => |air_tag| try cg.airBinOp(inst, air_tag), |
| 2439 | 2437 | |
| 2440 | 2438 | .shr, .shr_exact => try cg.airShlShrBinOp(inst), |
| 2441 | 2439 | .shl, .shl_exact => try cg.airShlShrBinOp(inst), |
| 2442 | 2440 | |
| 2443 | | .mul => try cg.airMulDivBinOp(inst), |
| 2444 | | .mul_wrap => try cg.airMulDivBinOp(inst), |
| 2445 | | .rem => try cg.airMulDivBinOp(inst), |
| 2446 | | .mod => try cg.airMulDivBinOp(inst), |
| 2441 | .mul, |
| 2442 | .mul_wrap, |
| 2443 | .rem, |
| 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 | 2451 | .add_sat => try cg.airAddSat(inst), |
| 2449 | 2452 | .sub_sat => try cg.airSubSat(inst), |
| ... | ... | @@ -2465,15 +2468,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2465 | 2468 | .ceil => try cg.airRound(inst, .{ .mode = .up, .precision = .inexact }), |
| 2466 | 2469 | .trunc_float => try cg.airRound(inst, .{ .mode = .zero, .precision = .inexact }), |
| 2467 | 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 | 2473 | .add_with_overflow => try cg.airAddSubWithOverflow(inst), |
| 2471 | 2474 | .sub_with_overflow => try cg.airAddSubWithOverflow(inst), |
| 2472 | 2475 | .mul_with_overflow => try cg.airMulWithOverflow(inst), |
| 2473 | 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 | 2478 | .cmp_lt_errors_len => try cg.airCmpLtErrorsLen(inst), |
| 2478 | 2479 | |
| 2479 | 2480 | .bitcast => try cg.airBitCast(inst), |
| ... | ... | @@ -2528,19 +2529,19 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2528 | 2529 | .sub_safe, |
| 2529 | 2530 | .mul_safe, |
| 2530 | 2531 | => return cg.fail("TODO implement safety_checked_instructions", .{}), |
| 2531 | | .add_optimized, |
| 2532 | | .sub_optimized, |
| 2533 | | .mul_optimized, |
| 2534 | | .div_float_optimized, |
| 2535 | | .div_trunc_optimized, |
| 2536 | | .div_floor_optimized, |
| 2537 | | .div_exact_optimized, |
| 2538 | | .rem_optimized, |
| 2539 | | .mod_optimized, |
| 2540 | | .neg_optimized, |
| 2541 | | .reduce_optimized, |
| 2542 | | .int_from_float_optimized, |
| 2543 | | => return cg.fail("TODO implement optimized float mode", .{}), |
| 2532 | |
| 2533 | .add_optimized => try cg.airBinOp(inst, .add), |
| 2534 | .sub_optimized => try cg.airBinOp(inst, .sub), |
| 2535 | .mul_optimized => try cg.airBinOp(inst, .mul), |
| 2536 | .div_float_optimized => try cg.airMulDivBinOp(inst, .div_float), |
| 2537 | .div_trunc_optimized => try cg.airMulDivBinOp(inst, .div_trunc), |
| 2538 | .div_floor_optimized => try cg.airMulDivBinOp(inst, .div_floor), |
| 2539 | .div_exact_optimized => try cg.airMulDivBinOp(inst, .div_exact), |
| 2540 | .rem_optimized => try cg.airMulDivBinOp(inst, .rem), |
| 2541 | .mod_optimized => try cg.airMulDivBinOp(inst, .mod), |
| 2542 | .neg_optimized => try cg.airFloatSign(inst, .neg), |
| 2543 | .reduce_optimized => try cg.airReduce(inst), |
| 2544 | .int_from_float_optimized => try cg.airIntFromFloat(inst), |
| 2544 | 2545 | |
| 2545 | 2546 | .arg => try cg.airDbgArg(inst), |
| 2546 | 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 | 2658 | } else { // hack around Sema OPV bugs |
| 2658 | 2659 | res[0] = ops[0]; |
| 2659 | 2660 | } |
| 2660 | | for (ops) |op| for (res) |r| { |
| 2661 | | if (op.index == r.index) break; |
| 2662 | | } else try op.die(cg); |
| 2663 | | try res[0].moveTo(inst, cg); |
| 2661 | try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); |
| 2664 | 2662 | }, |
| 2665 | 2663 | .ptr_sub => |air_tag| if (use_old) try cg.airPtrArithmetic(inst, air_tag) else { |
| 2666 | 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 | 2790 | // hack around Sema OPV bugs |
| 2793 | 2791 | res[0] = ops[0]; |
| 2794 | 2792 | } |
| 2795 | | for (ops) |op| for (res) |r| { |
| 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); |
| 2793 | try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); |
| 2822 | 2794 | }, |
| 2823 | | .assembly => try cg.airAsm(inst), |
| 2824 | | .bit_and, .bit_or, .xor, .bool_and, .bool_or => |air_tag| if (use_old) try cg.airBinOp(inst, air_tag) else { |
| 2795 | .max => |air_tag| if (use_old) try cg.airBinOp(inst, air_tag) else fallback: { |
| 2825 | 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 | 2798 | var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs }); |
| 2827 | 2799 | var res: [1]Temp = undefined; |
| 2828 | | cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, switch (@as(Mir.Inst.Tag, switch (air_tag) { |
| 2829 | | else => unreachable, |
| 2830 | | .bit_and, .bool_and => .@"and", |
| 2831 | | .bit_or, .bool_or => .@"or", |
| 2832 | | .xor => .xor, |
| 2833 | | })) { |
| 2834 | | else => unreachable, |
| 2835 | | inline .@"and", .@"or", .xor => |mir_tag| comptime &.{ .{ |
| 2836 | | .src_constraints = .{ .{ .size = .byte }, .{ .size = .byte } }, |
| 2837 | | .patterns = &.{ |
| 2838 | | .{ .src = .{ .mut_mem, .imm8 } }, |
| 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 | | } }, |
| 2800 | cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{ |
| 2801 | .required_features = .{ .cmov, null, null, null }, |
| 2802 | .src_constraints = .{ .{ .signed_int = .byte }, .{ .signed_int = .byte } }, |
| 2803 | .patterns = &.{ |
| 2804 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 2805 | }, |
| 2806 | .dst_temps = .{.{ .ref = .src0 }}, |
| 2807 | .clobbers = .{ .eflags = true }, |
| 2808 | .each = .{ .once = &.{ |
| 2809 | .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ }, |
| 2810 | .{ ._, ._l, .cmov, .dst0d, .src1d, ._, ._ }, |
| 3147 | 2811 | } }, |
| 3148 | | }) catch |err| switch (err) { |
| 3149 | | error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{ |
| 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 }, |
| 2812 | }, .{ |
| 2813 | .src_constraints = .{ .{ .signed_int = .byte }, .{ .signed_int = .byte } }, |
| 3168 | 2814 | .patterns = &.{ |
| 3169 | | .{ .src = .{ .mut_mem, .none } }, |
| 3170 | | .{ .src = .{ .to_mut_gpr, .none } }, |
| 2815 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 2816 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 2817 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 3171 | 2818 | }, |
| 3172 | 2819 | .dst_temps = .{.{ .ref = .src0 }}, |
| 2820 | .clobbers = .{ .eflags = true }, |
| 3173 | 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 | 2829 | .patterns = &.{ |
| 3179 | | .{ .src = .{ .mut_mem, .none } }, |
| 3180 | | .{ .src = .{ .to_mut_gpr, .none } }, |
| 2830 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 3181 | 2831 | }, |
| 3182 | 2832 | .dst_temps = .{.{ .ref = .src0 }}, |
| 3183 | 2833 | .clobbers = .{ .eflags = true }, |
| 3184 | 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 | 2840 | .patterns = &.{ |
| 3190 | | .{ .src = .{ .mut_mem, .none } }, |
| 3191 | | .{ .src = .{ .to_mut_gpr, .none } }, |
| 2841 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 2842 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 2843 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 3192 | 2844 | }, |
| 3193 | 2845 | .dst_temps = .{.{ .ref = .src0 }}, |
| 2846 | .clobbers = .{ .eflags = true }, |
| 3194 | 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 | 2855 | .patterns = &.{ |
| 3200 | | .{ .src = .{ .mut_mem, .none } }, |
| 3201 | | .{ .src = .{ .to_mut_gpr, .none } }, |
| 2856 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 2857 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 2858 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 3202 | 2859 | }, |
| 3203 | 2860 | .dst_temps = .{.{ .ref = .src0 }}, |
| 3204 | 2861 | .clobbers = .{ .eflags = true }, |
| 3205 | 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 | 2868 | .patterns = &.{ |
| 3211 | | .{ .src = .{ .mut_mem, .none } }, |
| 3212 | | .{ .src = .{ .to_mut_gpr, .none } }, |
| 2869 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 2870 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 2871 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 3213 | 2872 | }, |
| 3214 | 2873 | .dst_temps = .{.{ .ref = .src0 }}, |
| 2874 | .clobbers = .{ .eflags = true }, |
| 3215 | 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 | 2883 | .patterns = &.{ |
| 3221 | | .{ .src = .{ .mut_mem, .none } }, |
| 3222 | | .{ .src = .{ .to_mut_gpr, .none } }, |
| 2884 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 2885 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 2886 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 3223 | 2887 | }, |
| 3224 | 2888 | .dst_temps = .{.{ .ref = .src0 }}, |
| 3225 | 2889 | .clobbers = .{ .eflags = true }, |
| 3226 | 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 }, |
| 3231 | | .src_constraints = .{ .{ .signed_or_exact_int = .qword }, .any }, |
| 2895 | .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word } }, |
| 3232 | 2896 | .patterns = &.{ |
| 3233 | | .{ .src = .{ .mut_mem, .none } }, |
| 3234 | | .{ .src = .{ .to_mut_gpr, .none } }, |
| 2897 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 2898 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 2899 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 3235 | 2900 | }, |
| 3236 | 2901 | .dst_temps = .{.{ .ref = .src0 }}, |
| 2902 | .clobbers = .{ .eflags = true }, |
| 3237 | 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 }, |
| 3242 | | .src_constraints = .{ .{ .unsigned_int = .qword }, .any }, |
| 2909 | .required_features = .{ .cmov, null, null, null }, |
| 2910 | .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword } }, |
| 3243 | 2911 | .patterns = &.{ |
| 3244 | | .{ .src = .{ .mem, .none } }, |
| 3245 | | .{ .src = .{ .to_gpr, .none } }, |
| 2912 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 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 | 2918 | .each = .{ .once = &.{ |
| 3249 | | .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ }, |
| 3250 | | .{ ._, ._, .xor, .dst0q, .src0q, ._, ._ }, |
| 2919 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, |
| 2920 | .{ ._, ._l, .cmov, .dst0d, .src1d, ._, ._ }, |
| 3251 | 2921 | } }, |
| 3252 | 2922 | }, .{ |
| 3253 | | .required_features = .{ .mmx, null, null, null }, |
| 3254 | | .src_constraints = .{ .{ .signed_or_exact_int = .qword }, .any }, |
| 2923 | .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword } }, |
| 3255 | 2924 | .patterns = &.{ |
| 3256 | | .{ .src = .{ .mem, .none } }, |
| 3257 | | .{ .src = .{ .to_mm, .none } }, |
| 2925 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 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 | 2931 | .each = .{ .once = &.{ |
| 3261 | | .{ ._, .p_d, .cmpeq, .dst0q, .dst0q, ._, ._ }, |
| 3262 | | .{ ._, .p_, .xor, .dst0q, .src0q, ._, ._ }, |
| 2932 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, |
| 2933 | .{ ._, ._nl, .j, .@"0f", ._, ._, ._ }, |
| 2934 | .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ }, |
| 3263 | 2935 | } }, |
| 3264 | 2936 | }, .{ |
| 3265 | | .required_features = .{ .mmx, null, null, null }, |
| 3266 | | .src_constraints = .{ .{ .unsigned_int = .qword }, .any }, |
| 2937 | .required_features = .{ .cmov, null, null, null }, |
| 2938 | .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword } }, |
| 3267 | 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 = .{ |
| 3271 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 3272 | | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| 3273 | | .unused, |
| 3274 | | .unused, |
| 3275 | | .unused, |
| 3276 | | .unused, |
| 2944 | .dst_temps = .{.{ .ref = .src0 }}, |
| 2945 | .clobbers = .{ .eflags = true }, |
| 2946 | .each = .{ .once = &.{ |
| 2947 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, |
| 2948 | .{ ._, ._b, .cmov, .dst0d, .src1d, ._, ._ }, |
| 2949 | } }, |
| 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 | 2957 | .dst_temps = .{.{ .ref = .src0 }}, |
| 2958 | .clobbers = .{ .eflags = true }, |
| 3279 | 2959 | .each = .{ .once = &.{ |
| 3280 | | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 3281 | | .{ ._, .p_, .xor, .dst0q, .lea(.qword, .tmp0), ._, ._ }, |
| 2960 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, |
| 2961 | .{ ._, ._nb, .j, .@"0f", ._, ._, ._ }, |
| 2962 | .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ }, |
| 3282 | 2963 | } }, |
| 3283 | 2964 | }, .{ |
| 3284 | | .required_features = .{ .avx, null, null, null }, |
| 3285 | | .src_constraints = .{ .{ .signed_or_exact_int = .xword }, .any }, |
| 2965 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 2966 | .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword } }, |
| 3286 | 2967 | .patterns = &.{ |
| 3287 | | .{ .src = .{ .mem, .none } }, |
| 3288 | | .{ .src = .{ .to_xmm, .none } }, |
| 2968 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 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 | 2974 | .each = .{ .once = &.{ |
| 3292 | | .{ ._, .vp_q, .cmpeq, .dst0x, .dst0x, .dst0x, ._ }, |
| 3293 | | .{ ._, .vp_, .xor, .dst0x, .dst0x, .src0x, ._ }, |
| 2975 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, |
| 2976 | .{ ._, ._l, .cmov, .dst0q, .src1q, ._, ._ }, |
| 3294 | 2977 | } }, |
| 3295 | 2978 | }, .{ |
| 3296 | | .required_features = .{ .avx, null, null, null }, |
| 3297 | | .src_constraints = .{ .{ .unsigned_int = .xword }, .any }, |
| 2979 | .required_features = .{ .@"64bit", null, null, null }, |
| 2980 | .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword } }, |
| 3298 | 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 = .{ |
| 3302 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 3303 | | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| 3304 | | .unused, |
| 3305 | | .unused, |
| 3306 | | .unused, |
| 3307 | | .unused, |
| 2986 | .dst_temps = .{.{ .ref = .src0 }}, |
| 2987 | .clobbers = .{ .eflags = true }, |
| 2988 | .each = .{ .once = &.{ |
| 2989 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, |
| 2990 | .{ ._, ._nl, .j, .@"0f", ._, ._, ._ }, |
| 2991 | .{ ._, ._, .mov, .dst0q, .src1q, ._, ._ }, |
| 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 | 3003 | .each = .{ .once = &.{ |
| 3311 | | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 3312 | | .{ ._, .vp_, .xor, .dst0x, .src0x, .lea(.xword, .tmp0), ._ }, |
| 3004 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, |
| 3005 | .{ ._, ._b, .cmov, .dst0q, .src1q, ._, ._ }, |
| 3313 | 3006 | } }, |
| 3314 | 3007 | }, .{ |
| 3315 | | .required_features = .{ .sse2, null, null, null }, |
| 3316 | | .src_constraints = .{ .{ .signed_or_exact_int = .xword }, .any }, |
| 3008 | .required_features = .{ .@"64bit", null, null, null }, |
| 3009 | .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword } }, |
| 3317 | 3010 | .patterns = &.{ |
| 3318 | | .{ .src = .{ .mem, .none } }, |
| 3319 | | .{ .src = .{ .to_xmm, .none } }, |
| 3011 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 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 | 3017 | .each = .{ .once = &.{ |
| 3323 | | .{ ._, .p_d, .cmpeq, .dst0x, .dst0x, ._, ._ }, |
| 3324 | | .{ ._, .p_, .xor, .dst0x, .src0x, ._, ._ }, |
| 3018 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, |
| 3019 | .{ ._, ._nb, .j, .@"0f", ._, ._, ._ }, |
| 3020 | .{ ._, ._, .mov, .dst0q, .src1q, ._, ._ }, |
| 3325 | 3021 | } }, |
| 3326 | 3022 | }, .{ |
| 3327 | | .required_features = .{ .sse2, null, null, null }, |
| 3328 | | .src_constraints = .{ .{ .unsigned_int = .xword }, .any }, |
| 3023 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 3024 | .src_constraints = .{ .any_signed_int, .any_signed_int }, |
| 3329 | 3025 | .patterns = &.{ |
| 3330 | | .{ .src = .{ .to_mut_xmm, .none } }, |
| 3026 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3331 | 3027 | }, |
| 3332 | 3028 | .extra_temps = .{ |
| 3333 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 3334 | | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| 3029 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| 3030 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| 3031 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| 3032 | .unused, |
| 3033 | .unused, |
| 3335 | 3034 | .unused, |
| 3336 | 3035 | .unused, |
| 3337 | 3036 | .unused, |
| 3338 | 3037 | .unused, |
| 3339 | 3038 | }, |
| 3340 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 3039 | .dst_temps = .{.mem}, |
| 3040 | .clobbers = .{ .eflags = true }, |
| 3341 | 3041 | .each = .{ .once = &.{ |
| 3342 | | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 3343 | | .{ ._, .p_, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ }, |
| 3042 | .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ }, |
| 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 }, |
| 3347 | | .src_constraints = .{ .{ .int = .xword }, .any }, |
| 3058 | .required_features = .{ .@"64bit", null, null, null }, |
| 3059 | .src_constraints = .{ .any_signed_int, .any_signed_int }, |
| 3348 | 3060 | .patterns = &.{ |
| 3349 | | .{ .src = .{ .to_mut_xmm, .none } }, |
| 3061 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3350 | 3062 | }, |
| 3351 | 3063 | .extra_temps = .{ |
| 3352 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 3353 | | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| 3064 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| 3065 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| 3066 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| 3067 | .unused, |
| 3068 | .unused, |
| 3354 | 3069 | .unused, |
| 3355 | 3070 | .unused, |
| 3356 | 3071 | .unused, |
| 3357 | 3072 | .unused, |
| 3358 | 3073 | }, |
| 3359 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 3074 | .dst_temps = .{.mem}, |
| 3075 | .clobbers = .{ .eflags = true }, |
| 3360 | 3076 | .each = .{ .once = &.{ |
| 3361 | | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 3362 | | .{ ._, ._ps, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ }, |
| 3077 | .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ }, |
| 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 }, |
| 3366 | | .src_constraints = .{ .{ .signed_or_exact_int = .yword }, .any }, |
| 3093 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 3094 | .src_constraints = .{ .any_unsigned_int, .any_unsigned_int }, |
| 3367 | 3095 | .patterns = &.{ |
| 3368 | | .{ .src = .{ .mem, .none } }, |
| 3369 | | .{ .src = .{ .to_ymm, .none } }, |
| 3096 | .{ .src = .{ .to_mem, .to_mem } }, |
| 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 | 3111 | .each = .{ .once = &.{ |
| 3373 | | .{ ._, .vp_q, .cmpeq, .dst0y, .dst0y, .dst0y, ._ }, |
| 3374 | | .{ ._, .vp_, .xor, .dst0y, .dst0y, .src0y, ._ }, |
| 3112 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ }, |
| 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 }, |
| 3378 | | .src_constraints = .{ .{ .unsigned_int = .yword }, .any }, |
| 3126 | .required_features = .{ .@"64bit", null, null, null }, |
| 3127 | .src_constraints = .{ .any_unsigned_int, .any_unsigned_int }, |
| 3379 | 3128 | .patterns = &.{ |
| 3380 | | .{ .src = .{ .to_ymm, .none } }, |
| 3129 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3381 | 3130 | }, |
| 3382 | 3131 | .extra_temps = .{ |
| 3383 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 3384 | | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| 3132 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| 3133 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| 3134 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| 3135 | .unused, |
| 3136 | .unused, |
| 3385 | 3137 | .unused, |
| 3386 | 3138 | .unused, |
| 3387 | 3139 | .unused, |
| 3388 | 3140 | .unused, |
| 3389 | 3141 | }, |
| 3390 | | .dst_temps = .{.{ .rc = .sse }}, |
| 3142 | .dst_temps = .{.mem}, |
| 3143 | .clobbers = .{ .eflags = true }, |
| 3391 | 3144 | .each = .{ .once = &.{ |
| 3392 | | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 3393 | | .{ ._, .vp_, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, |
| 3145 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ }, |
| 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 | 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 | 3164 | .patterns = &.{ |
| 3399 | | .{ .src = .{ .mem, .none } }, |
| 3400 | | .{ .src = .{ .to_ymm, .none } }, |
| 3165 | .{ .src = .{ .to_sse, .mem } }, |
| 3166 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 3167 | .{ .src = .{ .to_sse, .to_sse } }, |
| 3401 | 3168 | }, |
| 3402 | 3169 | .dst_temps = .{.{ .rc = .sse }}, |
| 3403 | 3170 | .each = .{ .once = &.{ |
| 3404 | | .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .si(0b01111) }, |
| 3405 | | .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ }, |
| 3171 | .{ ._, .vp_b, .maxs, .dst0x, .src0x, .src1x, ._ }, |
| 3406 | 3172 | } }, |
| 3407 | 3173 | }, .{ |
| 3408 | | .required_features = .{ .avx, null, null, null }, |
| 3409 | | .src_constraints = .{ .{ .unsigned_int = .yword }, .any }, |
| 3174 | .required_features = .{ .sse4_1, null, null, null }, |
| 3175 | .src_constraints = .{ |
| 3176 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 3177 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 3178 | }, |
| 3410 | 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 = .{ |
| 3414 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 3415 | | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| 3416 | | .unused, |
| 3417 | | .unused, |
| 3418 | | .unused, |
| 3419 | | .unused, |
| 3184 | .dst_temps = .{.{ .ref = .src0 }}, |
| 3185 | .each = .{ .once = &.{ |
| 3186 | .{ ._, .p_b, .maxs, .dst0x, .src1x, ._, ._ }, |
| 3187 | } }, |
| 3188 | }, .{ |
| 3189 | .required_features = .{ .sse2, null, null, null }, |
| 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 | 3199 | .dst_temps = .{.{ .rc = .sse }}, |
| 3422 | 3200 | .each = .{ .once = &.{ |
| 3423 | | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 3424 | | .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, |
| 3201 | .{ ._, ._dqa, .mov, .dst0x, .src0x, ._, ._ }, |
| 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 | 3208 | .required_features = .{ .avx2, null, null, null }, |
| 3428 | | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .xword } }, .any }, |
| 3429 | | .patterns = &.{ |
| 3430 | | .{ .src = .{ .to_mem, .none } }, |
| 3209 | .src_constraints = .{ |
| 3210 | .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } }, |
| 3211 | .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } }, |
| 3431 | 3212 | }, |
| 3432 | | .extra_temps = .{ |
| 3433 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3434 | | .{ .kind = .{ .rc = .sse } }, |
| 3435 | | .{ .kind = .{ .rc = .sse } }, |
| 3436 | | .unused, |
| 3437 | | .unused, |
| 3438 | | .unused, |
| 3213 | .patterns = &.{ |
| 3214 | .{ .src = .{ .to_sse, .mem } }, |
| 3215 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 3216 | .{ .src = .{ .to_sse, .to_sse } }, |
| 3439 | 3217 | }, |
| 3440 | | .dst_temps = .{.mem}, |
| 3441 | | .clobbers = .{ .eflags = true }, |
| 3218 | .dst_temps = .{.{ .rc = .sse }}, |
| 3442 | 3219 | .each = .{ .once = &.{ |
| 3443 | | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| 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, ._, ._ }, |
| 3220 | .{ ._, .vp_b, .maxs, .dst0y, .src0y, .src1y, ._ }, |
| 3451 | 3221 | } }, |
| 3452 | 3222 | }, .{ |
| 3453 | 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 | 3228 | .patterns = &.{ |
| 3456 | | .{ .src = .{ .to_mem, .none } }, |
| 3229 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3457 | 3230 | }, |
| 3458 | 3231 | .extra_temps = .{ |
| 3459 | 3232 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3460 | | .{ .kind = .{ .rc = .sse } }, |
| 3461 | | .{ .kind = .{ .rc = .sse } }, |
| 3233 | .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } }, |
| 3234 | .unused, |
| 3235 | .unused, |
| 3236 | .unused, |
| 3237 | .unused, |
| 3462 | 3238 | .unused, |
| 3463 | 3239 | .unused, |
| 3464 | 3240 | .unused, |
| ... | ... | @@ -3467,22 +3243,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3467 | 3243 | .clobbers = .{ .eflags = true }, |
| 3468 | 3244 | .each = .{ .once = &.{ |
| 3469 | 3245 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3470 | | .{ ._, .vp_q, .cmpeq, .tmp1y, .tmp1y, .tmp1y, ._ }, |
| 3471 | | .{ .@"0:", .vp_, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ }, |
| 3472 | | .{ ._, .v_dqu, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ }, |
| 3246 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 3247 | .{ ._, .vp_b, .maxs, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 3248 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 3473 | 3249 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 3474 | 3250 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3475 | 3251 | } }, |
| 3476 | 3252 | }, .{ |
| 3477 | 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 | 3258 | .patterns = &.{ |
| 3480 | | .{ .src = .{ .to_mem, .none } }, |
| 3259 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3481 | 3260 | }, |
| 3482 | 3261 | .extra_temps = .{ |
| 3483 | 3262 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3484 | | .{ .kind = .{ .rc = .sse } }, |
| 3485 | | .{ .kind = .{ .rc = .sse } }, |
| 3263 | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, |
| 3264 | .unused, |
| 3265 | .unused, |
| 3266 | .unused, |
| 3267 | .unused, |
| 3486 | 3268 | .unused, |
| 3487 | 3269 | .unused, |
| 3488 | 3270 | .unused, |
| ... | ... | @@ -3490,25 +3272,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3490 | 3272 | .dst_temps = .{.mem}, |
| 3491 | 3273 | .clobbers = .{ .eflags = true }, |
| 3492 | 3274 | .each = .{ .once = &.{ |
| 3493 | | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| 3494 | | .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .si(0b01111) }, |
| 3495 | | .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memiad(.src0y, .tmp0, .add_size, -16), ._ }, |
| 3496 | | .{ ._, .v_pd, .movu, .memiad(.dst0y, .tmp0, .add_size, -16), .tmp2y, ._, ._ }, |
| 3497 | | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 3275 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3276 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3277 | .{ ._, .vp_b, .maxs, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 3278 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 3279 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 3498 | 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 }, |
| 3504 | | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .yword } }, .any }, |
| 3283 | .required_features = .{ .sse4_1, null, null, null }, |
| 3284 | .src_constraints = .{ |
| 3285 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 3286 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 3287 | }, |
| 3505 | 3288 | .patterns = &.{ |
| 3506 | | .{ .src = .{ .to_mem, .none } }, |
| 3289 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3507 | 3290 | }, |
| 3508 | 3291 | .extra_temps = .{ |
| 3509 | 3292 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3510 | | .{ .kind = .{ .rc = .sse } }, |
| 3511 | | .{ .kind = .{ .rc = .sse } }, |
| 3293 | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, |
| 3294 | .unused, |
| 3295 | .unused, |
| 3296 | .unused, |
| 3297 | .unused, |
| 3512 | 3298 | .unused, |
| 3513 | 3299 | .unused, |
| 3514 | 3300 | .unused, |
| ... | ... | @@ -3517,22 +3303,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3517 | 3303 | .clobbers = .{ .eflags = true }, |
| 3518 | 3304 | .each = .{ .once = &.{ |
| 3519 | 3305 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3520 | | .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .si(0b01111) }, |
| 3521 | | .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ }, |
| 3522 | | .{ ._, .v_pd, .movu, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ }, |
| 3523 | | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 3306 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3307 | .{ ._, .p_b, .maxs, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 3308 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 3309 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 3524 | 3310 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3525 | 3311 | } }, |
| 3526 | 3312 | }, .{ |
| 3527 | | .required_features = .{ .avx, null, null, null }, |
| 3528 | | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| 3313 | .required_features = .{ .sse2, null, null, null }, |
| 3314 | .src_constraints = .{ |
| 3315 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 3316 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 3317 | }, |
| 3529 | 3318 | .patterns = &.{ |
| 3530 | | .{ .src = .{ .to_mem, .none } }, |
| 3319 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3531 | 3320 | }, |
| 3532 | 3321 | .extra_temps = .{ |
| 3533 | 3322 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3534 | | .{ .kind = .{ .rc = .sse } }, |
| 3535 | | .{ .kind = .{ .rc = .sse } }, |
| 3323 | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, |
| 3324 | .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, |
| 3325 | .unused, |
| 3326 | .unused, |
| 3327 | .unused, |
| 3536 | 3328 | .unused, |
| 3537 | 3329 | .unused, |
| 3538 | 3330 | .unused, |
| ... | ... | @@ -3541,22 +3333,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3541 | 3333 | .clobbers = .{ .eflags = true }, |
| 3542 | 3334 | .each = .{ .once = &.{ |
| 3543 | 3335 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3544 | | .{ ._, .vp_q, .cmpeq, .tmp1x, .tmp1x, .tmp1x, ._ }, |
| 3545 | | .{ .@"0:", .v_, .xor, .tmp2x, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._ }, |
| 3546 | | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp2x, ._, ._ }, |
| 3336 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3337 | .{ ._, ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ }, |
| 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 | 3343 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 3548 | 3344 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3549 | 3345 | } }, |
| 3550 | 3346 | }, .{ |
| 3551 | | .required_features = .{ .sse2, null, null, null }, |
| 3552 | | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| 3347 | .required_features = .{ .cmov, .slow_incdec, null, null }, |
| 3348 | .src_constraints = .{ |
| 3349 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 3350 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 3351 | }, |
| 3553 | 3352 | .patterns = &.{ |
| 3554 | | .{ .src = .{ .to_mem, .none } }, |
| 3353 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3555 | 3354 | }, |
| 3556 | 3355 | .extra_temps = .{ |
| 3557 | 3356 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3558 | | .{ .kind = .{ .rc = .sse } }, |
| 3559 | | .{ .kind = .{ .rc = .sse } }, |
| 3357 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| 3358 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| 3359 | .unused, |
| 3360 | .unused, |
| 3361 | .unused, |
| 3560 | 3362 | .unused, |
| 3561 | 3363 | .unused, |
| 3562 | 3364 | .unused, |
| ... | ... | @@ -3565,45 +3367,61 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3565 | 3367 | .clobbers = .{ .eflags = true }, |
| 3566 | 3368 | .each = .{ .once = &.{ |
| 3567 | 3369 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3568 | | .{ ._, .p_d, .cmpeq, .tmp1x, .tmp1x, ._, ._ }, |
| 3569 | | .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3570 | | .{ ._, .p_, .xor, .tmp2x, .tmp1x, ._, ._ }, |
| 3571 | | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp2x, ._, ._ }, |
| 3572 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 3370 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 3371 | .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 3372 | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, |
| 3373 | .{ ._, ._l, .cmov, .tmp1d, .tmp2d, ._, ._ }, |
| 3374 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 3375 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 3573 | 3376 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3574 | 3377 | } }, |
| 3575 | 3378 | }, .{ |
| 3576 | | .required_features = .{ .@"64bit", null, null, null }, |
| 3577 | | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| 3379 | .required_features = .{ .cmov, null, null, null }, |
| 3380 | .src_constraints = .{ |
| 3381 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 3382 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 3383 | }, |
| 3578 | 3384 | .patterns = &.{ |
| 3579 | | .{ .src = .{ .mut_mem, .none } }, |
| 3385 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3580 | 3386 | }, |
| 3581 | 3387 | .extra_temps = .{ |
| 3582 | 3388 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3389 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| 3390 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| 3391 | .unused, |
| 3583 | 3392 | .unused, |
| 3584 | 3393 | .unused, |
| 3585 | 3394 | .unused, |
| 3586 | 3395 | .unused, |
| 3587 | 3396 | .unused, |
| 3588 | 3397 | }, |
| 3589 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 3398 | .dst_temps = .{.mem}, |
| 3590 | 3399 | .clobbers = .{ .eflags = true }, |
| 3591 | 3400 | .each = .{ .once = &.{ |
| 3592 | 3401 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3593 | | .{ .@"0:", ._, .not, .memia(.dst0q, .tmp0, .add_size), ._, ._, ._ }, |
| 3594 | | .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, 8), ._, ._, ._ }, |
| 3595 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 3596 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3402 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 3403 | .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 3404 | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, |
| 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 }, |
| 3600 | | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| 3411 | .required_features = .{ .slow_incdec, null, null, null }, |
| 3412 | .src_constraints = .{ |
| 3413 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 3414 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 3415 | }, |
| 3601 | 3416 | .patterns = &.{ |
| 3602 | | .{ .src = .{ .to_mem, .none } }, |
| 3417 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3603 | 3418 | }, |
| 3604 | 3419 | .extra_temps = .{ |
| 3605 | 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 | 3425 | .unused, |
| 3608 | 3426 | .unused, |
| 3609 | 3427 | .unused, |
| ... | ... | @@ -3613,45 +3431,120 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3613 | 3431 | .clobbers = .{ .eflags = true }, |
| 3614 | 3432 | .each = .{ .once = &.{ |
| 3615 | 3433 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3616 | | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 3617 | | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, |
| 3618 | | .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| 3619 | | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 3434 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 3435 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 3436 | .{ ._, ._nl, .j, .@"1f", ._, ._, ._ }, |
| 3437 | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 3438 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 3439 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 3620 | 3440 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3621 | 3441 | } }, |
| 3622 | 3442 | }, .{ |
| 3623 | | .required_features = .{ .@"64bit", null, null, null }, |
| 3624 | | .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .xword, .is = .dword } }, .any }, |
| 3443 | .src_constraints = .{ |
| 3444 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 3445 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 3446 | }, |
| 3625 | 3447 | .patterns = &.{ |
| 3626 | | .{ .src = .{ .mut_mem, .none } }, |
| 3448 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3627 | 3449 | }, |
| 3628 | 3450 | .extra_temps = .{ |
| 3629 | 3451 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3452 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| 3453 | .unused, |
| 3454 | .unused, |
| 3630 | 3455 | .unused, |
| 3631 | 3456 | .unused, |
| 3632 | 3457 | .unused, |
| 3633 | 3458 | .unused, |
| 3634 | 3459 | .unused, |
| 3635 | 3460 | }, |
| 3636 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 3461 | .dst_temps = .{.mem}, |
| 3637 | 3462 | .clobbers = .{ .eflags = true }, |
| 3638 | 3463 | .each = .{ .once = &.{ |
| 3639 | | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| 3640 | | .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16), ._, ._, ._ }, |
| 3641 | | .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16 + 8), ._, ._, ._ }, |
| 3642 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 3643 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3644 | | .{ ._, ._, .not, .memad(.dst0d, .add_size, -16), ._, ._, ._ }, |
| 3464 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3465 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 3466 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 3467 | .{ ._, ._nl, .j, .@"1f", ._, ._, ._ }, |
| 3468 | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 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 }, |
| 3648 | | .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .xword, .is = .dword } }, .any }, |
| 3474 | .required_features = .{ .sse, .mmx, null, null }, |
| 3475 | .src_constraints = .{ |
| 3476 | .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } }, |
| 3477 | .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } }, |
| 3478 | }, |
| 3649 | 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 | 3542 | .extra_temps = .{ |
| 3653 | 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 | 3548 | .unused, |
| 3656 | 3549 | .unused, |
| 3657 | 3550 | .unused, |
| ... | ... | @@ -3660,51 +3553,58 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3660 | 3553 | .dst_temps = .{.mem}, |
| 3661 | 3554 | .clobbers = .{ .eflags = true }, |
| 3662 | 3555 | .each = .{ .once = &.{ |
| 3663 | | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| 3664 | | .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -16), ._, ._ }, |
| 3665 | | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, |
| 3666 | | .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -16), .tmp1q, ._, ._ }, |
| 3667 | | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 3556 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3557 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 3558 | .{ ._, .vp_b, .maxu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 3559 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 3560 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 3668 | 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 }, |
| 3677 | | .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .qword, .is = .qword } }, .any }, |
| 3564 | .required_features = .{ .avx, null, null, null }, |
| 3565 | .src_constraints = .{ |
| 3566 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| 3567 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| 3568 | }, |
| 3678 | 3569 | .patterns = &.{ |
| 3679 | | .{ .src = .{ .mut_mem, .none } }, |
| 3570 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3680 | 3571 | }, |
| 3681 | 3572 | .extra_temps = .{ |
| 3682 | 3573 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3574 | .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } }, |
| 3575 | .unused, |
| 3576 | .unused, |
| 3683 | 3577 | .unused, |
| 3684 | 3578 | .unused, |
| 3685 | 3579 | .unused, |
| 3686 | 3580 | .unused, |
| 3687 | 3581 | .unused, |
| 3688 | 3582 | }, |
| 3689 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 3583 | .dst_temps = .{.mem}, |
| 3690 | 3584 | .clobbers = .{ .eflags = true }, |
| 3691 | 3585 | .each = .{ .once = &.{ |
| 3692 | | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| 3693 | | .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16), ._, ._, ._ }, |
| 3694 | | .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16 + 8), ._, ._, ._ }, |
| 3586 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3587 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3588 | .{ ._, .vp_b, .maxu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 3589 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 3695 | 3590 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 3696 | 3591 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3697 | | .{ ._, ._, .not, .memad(.dst0q, .add_size, -16), ._, ._, ._ }, |
| 3698 | 3592 | } }, |
| 3699 | 3593 | }, .{ |
| 3700 | | .required_features = .{ .@"64bit", null, null, null }, |
| 3701 | | .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .qword, .is = .qword } }, .any }, |
| 3594 | .required_features = .{ .sse2, null, null, null }, |
| 3595 | .src_constraints = .{ |
| 3596 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| 3597 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| 3598 | }, |
| 3702 | 3599 | .patterns = &.{ |
| 3703 | | .{ .src = .{ .to_mem, .none } }, |
| 3600 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3704 | 3601 | }, |
| 3705 | 3602 | .extra_temps = .{ |
| 3706 | 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 | 3608 | .unused, |
| 3709 | 3609 | .unused, |
| 3710 | 3610 | .unused, |
| ... | ... | @@ -3713,46 +3613,60 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3713 | 3613 | .dst_temps = .{.mem}, |
| 3714 | 3614 | .clobbers = .{ .eflags = true }, |
| 3715 | 3615 | .each = .{ .once = &.{ |
| 3716 | | .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ }, |
| 3717 | | .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -8), ._, ._ }, |
| 3718 | | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, |
| 3719 | | .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -8), .tmp1q, ._, ._ }, |
| 3720 | | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 3616 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3617 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3618 | .{ ._, .p_b, .maxu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 3619 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 3620 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 3721 | 3621 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3722 | | .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .si(0), ._, ._ }, |
| 3723 | 3622 | } }, |
| 3724 | 3623 | }, .{ |
| 3725 | | .required_features = .{ .@"64bit", null, null, null }, |
| 3726 | | .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .dword, .is = .dword } }, .any }, |
| 3624 | .required_features = .{ .cmov, .slow_incdec, null, null }, |
| 3625 | .src_constraints = .{ |
| 3626 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 3627 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 3628 | }, |
| 3727 | 3629 | .patterns = &.{ |
| 3728 | | .{ .src = .{ .mut_mem, .none } }, |
| 3630 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3729 | 3631 | }, |
| 3730 | 3632 | .extra_temps = .{ |
| 3731 | 3633 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3634 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 3635 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 3636 | .unused, |
| 3732 | 3637 | .unused, |
| 3733 | 3638 | .unused, |
| 3734 | 3639 | .unused, |
| 3735 | 3640 | .unused, |
| 3736 | 3641 | .unused, |
| 3737 | 3642 | }, |
| 3738 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 3643 | .dst_temps = .{.mem}, |
| 3739 | 3644 | .clobbers = .{ .eflags = true }, |
| 3740 | 3645 | .each = .{ .once = &.{ |
| 3741 | | .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ }, |
| 3742 | | .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -8), ._, ._, ._ }, |
| 3743 | | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 3646 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3647 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 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 | 3653 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3745 | | .{ ._, ._, .not, .memad(.dst0d, .add_size, -8), ._, ._, ._ }, |
| 3746 | 3654 | } }, |
| 3747 | 3655 | }, .{ |
| 3748 | | .required_features = .{ .@"64bit", null, null, null }, |
| 3749 | | .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .dword, .is = .dword } }, .any }, |
| 3656 | .required_features = .{ .cmov, null, null, null }, |
| 3657 | .src_constraints = .{ |
| 3658 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 3659 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 3660 | }, |
| 3750 | 3661 | .patterns = &.{ |
| 3751 | | .{ .src = .{ .to_mem, .none } }, |
| 3662 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3752 | 3663 | }, |
| 3753 | 3664 | .extra_temps = .{ |
| 3754 | 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 | 3670 | .unused, |
| 3757 | 3671 | .unused, |
| 3758 | 3672 | .unused, |
| ... | ... | @@ -3761,50 +3675,61 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3761 | 3675 | .dst_temps = .{.mem}, |
| 3762 | 3676 | .clobbers = .{ .eflags = true }, |
| 3763 | 3677 | .each = .{ .once = &.{ |
| 3764 | | .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ }, |
| 3765 | | .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -8), ._, ._ }, |
| 3766 | | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, |
| 3767 | | .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -8), .tmp1q, ._, ._ }, |
| 3768 | | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 3769 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3770 | | .{ ._, ._, .mov, .tmp0d, .memad(.src0d, .add_size, -8), ._, ._ }, |
| 3771 | | .{ ._, ._, .not, .tmp0d, ._, ._, ._ }, |
| 3772 | | .{ ._, ._, .mov, .memad(.dst0d, .add_size, -8), .tmp0d, ._, ._ }, |
| 3773 | | .{ ._, ._, .mov, .memad(.dst0d, .add_size, -8 + 4), .si(0), ._, ._ }, |
| 3678 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3679 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 3680 | .{ ._, ._, .movzx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 3681 | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, |
| 3682 | .{ ._, ._b, .cmov, .tmp1d, .tmp2d, ._, ._ }, |
| 3683 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 3684 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 3685 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 3774 | 3686 | } }, |
| 3775 | 3687 | }, .{ |
| 3776 | | .required_features = .{ .@"64bit", null, null, null }, |
| 3777 | | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .dword } }, .any }, |
| 3688 | .required_features = .{ .slow_incdec, null, null, null }, |
| 3689 | .src_constraints = .{ |
| 3690 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 3691 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 3692 | }, |
| 3778 | 3693 | .patterns = &.{ |
| 3779 | | .{ .src = .{ .mut_mem, .none } }, |
| 3694 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3780 | 3695 | }, |
| 3781 | 3696 | .extra_temps = .{ |
| 3782 | 3697 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3698 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 3699 | .unused, |
| 3700 | .unused, |
| 3783 | 3701 | .unused, |
| 3784 | 3702 | .unused, |
| 3785 | 3703 | .unused, |
| 3786 | 3704 | .unused, |
| 3787 | 3705 | .unused, |
| 3788 | 3706 | }, |
| 3789 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 3707 | .dst_temps = .{.mem}, |
| 3790 | 3708 | .clobbers = .{ .eflags = true }, |
| 3791 | 3709 | .each = .{ .once = &.{ |
| 3792 | | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| 3793 | | .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16), ._, ._, ._ }, |
| 3794 | | .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16 + 8), ._, ._, ._ }, |
| 3795 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 3710 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3711 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 3712 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 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 | 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 }, |
| 3801 | | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .dword } }, .any }, |
| 3720 | .src_constraints = .{ |
| 3721 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 3722 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 3723 | }, |
| 3802 | 3724 | .patterns = &.{ |
| 3803 | | .{ .src = .{ .to_mem, .none } }, |
| 3725 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3804 | 3726 | }, |
| 3805 | 3727 | .extra_temps = .{ |
| 3806 | 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 | 3733 | .unused, |
| 3809 | 3734 | .unused, |
| 3810 | 3735 | .unused, |
| ... | ... | @@ -3813,50 +3738,90 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3813 | 3738 | .dst_temps = .{.mem}, |
| 3814 | 3739 | .clobbers = .{ .eflags = true }, |
| 3815 | 3740 | .each = .{ .once = &.{ |
| 3816 | | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| 3817 | | .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -16), ._, ._ }, |
| 3818 | | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, |
| 3819 | | .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -16), .tmp1q, ._, ._ }, |
| 3820 | | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 3821 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3822 | | .{ ._, ._, .mov, .tmp0d, .memad(.src0d, .add_size, -16), ._, ._ }, |
| 3823 | | .{ ._, ._, .xor, .tmp0d, .sa(.src0, .add_umax), ._, ._ }, |
| 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), ._, ._ }, |
| 3741 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3742 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 3743 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 3744 | .{ ._, ._nb, .j, .@"1f", ._, ._, ._ }, |
| 3745 | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 3746 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 3747 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 3748 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 3827 | 3749 | } }, |
| 3828 | 3750 | }, .{ |
| 3829 | | .required_features = .{ .@"64bit", null, null, null }, |
| 3830 | | .src_constraints = .{ .{ .remainder_int = .{ .of = .qword, .is = .dword } }, .any }, |
| 3751 | .required_features = .{ .sse, .mmx, null, null }, |
| 3752 | .src_constraints = .{ |
| 3753 | .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, |
| 3754 | .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, |
| 3755 | }, |
| 3831 | 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 = .{ |
| 3835 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3836 | | .unused, |
| 3837 | | .unused, |
| 3838 | | .unused, |
| 3839 | | .unused, |
| 3840 | | .unused, |
| 3761 | .dst_temps = .{.{ .ref = .src0 }}, |
| 3762 | .each = .{ .once = &.{ |
| 3763 | .{ ._, .p_w, .maxs, .dst0q, .src1q, ._, ._ }, |
| 3764 | } }, |
| 3765 | }, .{ |
| 3766 | .required_features = .{ .avx, null, null, null }, |
| 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 | 3791 | .dst_temps = .{.{ .ref = .src0 }}, |
| 3843 | | .clobbers = .{ .eflags = true }, |
| 3844 | 3792 | .each = .{ .once = &.{ |
| 3845 | | .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ }, |
| 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), ._, ._ }, |
| 3793 | .{ ._, .p_w, .maxs, .dst0x, .src1x, ._, ._ }, |
| 3850 | 3794 | } }, |
| 3851 | 3795 | }, .{ |
| 3852 | | .required_features = .{ .@"64bit", null, null, null }, |
| 3853 | | .src_constraints = .{ .{ .remainder_int = .{ .of = .qword, .is = .dword } }, .any }, |
| 3796 | .required_features = .{ .avx2, null, null, null }, |
| 3797 | .src_constraints = .{ |
| 3798 | .{ .scalar_signed_int = .{ .of = .yword, .is = .word } }, |
| 3799 | .{ .scalar_signed_int = .{ .of = .yword, .is = .word } }, |
| 3800 | }, |
| 3854 | 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 | 3819 | .extra_temps = .{ |
| 3858 | 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 | 3825 | .unused, |
| 3861 | 3826 | .unused, |
| 3862 | 3827 | .unused, |
| ... | ... | @@ -3865,51 +3830,58 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3865 | 3830 | .dst_temps = .{.mem}, |
| 3866 | 3831 | .clobbers = .{ .eflags = true }, |
| 3867 | 3832 | .each = .{ .once = &.{ |
| 3868 | | .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ }, |
| 3869 | | .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -8), ._, ._ }, |
| 3870 | | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, |
| 3871 | | .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -8), .tmp1q, ._, ._ }, |
| 3872 | | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 3833 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3834 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 3835 | .{ ._, .vp_w, .maxs, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 3836 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 3837 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 3873 | 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 }, |
| 3881 | | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| 3841 | .required_features = .{ .avx, null, null, null }, |
| 3842 | .src_constraints = .{ |
| 3843 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| 3844 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| 3845 | }, |
| 3882 | 3846 | .patterns = &.{ |
| 3883 | | .{ .src = .{ .mut_mem, .none } }, |
| 3847 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3884 | 3848 | }, |
| 3885 | 3849 | .extra_temps = .{ |
| 3886 | 3850 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3851 | .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } }, |
| 3852 | .unused, |
| 3853 | .unused, |
| 3887 | 3854 | .unused, |
| 3888 | 3855 | .unused, |
| 3889 | 3856 | .unused, |
| 3890 | 3857 | .unused, |
| 3891 | 3858 | .unused, |
| 3892 | 3859 | }, |
| 3893 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 3860 | .dst_temps = .{.mem}, |
| 3894 | 3861 | .clobbers = .{ .eflags = true }, |
| 3895 | 3862 | .each = .{ .once = &.{ |
| 3896 | | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| 3897 | | .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16), ._, ._, ._ }, |
| 3898 | | .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16 + 8), ._, ._, ._ }, |
| 3863 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3864 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3865 | .{ ._, .vp_w, .maxs, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 3866 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 3899 | 3867 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 3900 | 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 }, |
| 3906 | | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| 3871 | .required_features = .{ .sse2, null, null, null }, |
| 3872 | .src_constraints = .{ |
| 3873 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| 3874 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| 3875 | }, |
| 3907 | 3876 | .patterns = &.{ |
| 3908 | | .{ .src = .{ .to_mem, .none } }, |
| 3877 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3909 | 3878 | }, |
| 3910 | 3879 | .extra_temps = .{ |
| 3911 | 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 | 3885 | .unused, |
| 3914 | 3886 | .unused, |
| 3915 | 3887 | .unused, |
| ... | ... | @@ -3918,1746 +3890,2329 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3918 | 3890 | .dst_temps = .{.mem}, |
| 3919 | 3891 | .clobbers = .{ .eflags = true }, |
| 3920 | 3892 | .each = .{ .once = &.{ |
| 3921 | | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| 3922 | | .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -16), ._, ._ }, |
| 3923 | | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, |
| 3924 | | .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -16), .tmp1q, ._, ._ }, |
| 3925 | | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 3893 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3894 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3895 | .{ ._, .p_w, .maxs, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 3896 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 3897 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 3926 | 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 }, |
| 3934 | | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| 3901 | .required_features = .{ .cmov, null, null, null }, |
| 3902 | .src_constraints = .{ |
| 3903 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| 3904 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| 3905 | }, |
| 3935 | 3906 | .patterns = &.{ |
| 3936 | | .{ .src = .{ .mut_mem, .none } }, |
| 3907 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3937 | 3908 | }, |
| 3938 | 3909 | .extra_temps = .{ |
| 3939 | 3910 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3911 | .{ .type = .i16, .kind = .{ .rc = .general_purpose } }, |
| 3912 | .unused, |
| 3913 | .unused, |
| 3940 | 3914 | .unused, |
| 3941 | 3915 | .unused, |
| 3942 | 3916 | .unused, |
| 3943 | 3917 | .unused, |
| 3944 | 3918 | .unused, |
| 3945 | 3919 | }, |
| 3946 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 3920 | .dst_temps = .{.mem}, |
| 3947 | 3921 | .clobbers = .{ .eflags = true }, |
| 3948 | 3922 | .each = .{ .once = &.{ |
| 3949 | | .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ }, |
| 3950 | | .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -8), ._, ._, ._ }, |
| 3951 | | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 3923 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3924 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 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 | 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 }, |
| 3958 | | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| 3932 | .src_constraints = .{ |
| 3933 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| 3934 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| 3935 | }, |
| 3959 | 3936 | .patterns = &.{ |
| 3960 | | .{ .src = .{ .to_mem, .none } }, |
| 3937 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3961 | 3938 | }, |
| 3962 | 3939 | .extra_temps = .{ |
| 3963 | 3940 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3964 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 3941 | .{ .type = .i16, .kind = .{ .rc = .general_purpose } }, |
| 3965 | 3942 | .unused, |
| 3966 | 3943 | .unused, |
| 3967 | 3944 | .unused, |
| 3968 | 3945 | .unused, |
| 3969 | | }, |
| 3946 | .unused, |
| 3947 | .unused, |
| 3948 | .unused, |
| 3949 | }, |
| 3970 | 3950 | .dst_temps = .{.mem}, |
| 3971 | 3951 | .clobbers = .{ .eflags = true }, |
| 3972 | 3952 | .each = .{ .once = &.{ |
| 3973 | | .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ }, |
| 3974 | | .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -8), ._, ._ }, |
| 3975 | | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, |
| 3976 | | .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -8), .tmp1q, ._, ._ }, |
| 3977 | | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 3953 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 3954 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 3955 | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 3956 | .{ ._, ._nl, .j, .@"1f", ._, ._, ._ }, |
| 3957 | .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 3958 | .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| 3959 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 3978 | 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 }, |
| 3985 | | .src_constraints = .{ .{ .signed_int_or_full_vec = .qword }, .any }, |
| 3963 | .required_features = .{ .avx, null, null, null }, |
| 3964 | .src_constraints = .{ |
| 3965 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 3966 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 3967 | }, |
| 3986 | 3968 | .patterns = &.{ |
| 3987 | | .{ .src = .{ .mem, .none } }, |
| 3988 | | .{ .src = .{ .to_mm, .none } }, |
| 3969 | .{ .src = .{ .to_sse, .mem } }, |
| 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 | 3974 | .each = .{ .once = &.{ |
| 3992 | | .{ ._, .p_d, .cmpeq, .dst0q, .dst0q, ._, ._ }, |
| 3993 | | .{ ._, .p_, .xor, .dst0q, .src0q, ._, ._ }, |
| 3975 | .{ ._, .vp_w, .maxu, .dst0x, .src0x, .src1x, ._ }, |
| 3994 | 3976 | } }, |
| 3995 | 3977 | }, .{ |
| 3996 | | .required_features = .{ .mmx, null, null, null }, |
| 3997 | | .src_constraints = .{ .{ .unsigned_int_vec = .qword }, .any }, |
| 3998 | | .patterns = &.{ |
| 3999 | | .{ .src = .{ .to_mut_mm, .none } }, |
| 3978 | .required_features = .{ .sse4_1, null, null, null }, |
| 3979 | .src_constraints = .{ |
| 3980 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 3981 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 4000 | 3982 | }, |
| 4001 | | .extra_temps = .{ |
| 4002 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 4003 | | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| 4004 | | .unused, |
| 4005 | | .unused, |
| 4006 | | .unused, |
| 4007 | | .unused, |
| 3983 | .patterns = &.{ |
| 3984 | .{ .src = .{ .to_mut_sse, .mem } }, |
| 3985 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 3986 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 4008 | 3987 | }, |
| 4009 | 3988 | .dst_temps = .{.{ .ref = .src0 }}, |
| 4010 | 3989 | .each = .{ .once = &.{ |
| 4011 | | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 4012 | | .{ ._, .p_, .xor, .dst0q, .lea(.qword, .tmp0), ._, ._ }, |
| 3990 | .{ ._, .p_w, .maxu, .dst0x, .src1x, ._, ._ }, |
| 4013 | 3991 | } }, |
| 4014 | 3992 | }, .{ |
| 4015 | | .required_features = .{ .avx, null, null, null }, |
| 4016 | | .src_constraints = .{ .{ .signed_int_or_full_vec = .xword }, .any }, |
| 4017 | | .patterns = &.{ |
| 4018 | | .{ .src = .{ .mem, .none } }, |
| 4019 | | .{ .src = .{ .to_xmm, .none } }, |
| 3993 | .required_features = .{ .sse2, null, null, null }, |
| 3994 | .src_constraints = .{ |
| 3995 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 3996 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 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 | 3998 | .patterns = &.{ |
| 4030 | | .{ .src = .{ .to_xmm, .none } }, |
| 4031 | | }, |
| 4032 | | .extra_temps = .{ |
| 4033 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 4034 | | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| 4035 | | .unused, |
| 4036 | | .unused, |
| 4037 | | .unused, |
| 4038 | | .unused, |
| 3999 | .{ .src = .{ .to_mut_sse, .mem } }, |
| 4000 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 4001 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 4039 | 4002 | }, |
| 4040 | | .dst_temps = .{.{ .rc = .sse }}, |
| 4003 | .dst_temps = .{.{ .ref = .src0 }}, |
| 4041 | 4004 | .each = .{ .once = &.{ |
| 4042 | | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 4043 | | .{ ._, .vp_, .xor, .dst0x, .src0x, .lea(.xword, .tmp0), ._ }, |
| 4005 | .{ ._, .p_w, .subus, .dst0x, .src1x, ._, ._ }, |
| 4006 | .{ ._, .p_w, .add, .dst0x, .src1x, ._, ._ }, |
| 4044 | 4007 | } }, |
| 4045 | 4008 | }, .{ |
| 4046 | | .required_features = .{ .sse2, null, null, null }, |
| 4047 | | .src_constraints = .{ .{ .signed_int_or_full_vec = .xword }, .any }, |
| 4009 | .required_features = .{ .avx2, null, null, null }, |
| 4010 | .src_constraints = .{ |
| 4011 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } }, |
| 4012 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } }, |
| 4013 | }, |
| 4048 | 4014 | .patterns = &.{ |
| 4049 | | .{ .src = .{ .mem, .none } }, |
| 4050 | | .{ .src = .{ .to_xmm, .none } }, |
| 4015 | .{ .src = .{ .to_sse, .mem } }, |
| 4016 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 4017 | .{ .src = .{ .to_sse, .to_sse } }, |
| 4051 | 4018 | }, |
| 4052 | 4019 | .dst_temps = .{.{ .rc = .sse }}, |
| 4053 | 4020 | .each = .{ .once = &.{ |
| 4054 | | .{ ._, .p_d, .cmpeq, .dst0x, .dst0x, ._, ._ }, |
| 4055 | | .{ ._, .p_, .xor, .dst0x, .src0x, ._, ._ }, |
| 4021 | .{ ._, .vp_w, .maxu, .dst0y, .src0y, .src1y, ._ }, |
| 4056 | 4022 | } }, |
| 4057 | 4023 | }, .{ |
| 4058 | | .required_features = .{ .sse2, null, null, null }, |
| 4059 | | .src_constraints = .{ .{ .unsigned_int_vec = .xword }, .any }, |
| 4024 | .required_features = .{ .avx2, null, null, null }, |
| 4025 | .src_constraints = .{ |
| 4026 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } }, |
| 4027 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } }, |
| 4028 | }, |
| 4060 | 4029 | .patterns = &.{ |
| 4061 | | .{ .src = .{ .to_mut_xmm, .none } }, |
| 4030 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4062 | 4031 | }, |
| 4063 | 4032 | .extra_temps = .{ |
| 4064 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 4065 | | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| 4033 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4034 | .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } }, |
| 4035 | .unused, |
| 4036 | .unused, |
| 4037 | .unused, |
| 4066 | 4038 | .unused, |
| 4067 | 4039 | .unused, |
| 4068 | 4040 | .unused, |
| 4069 | 4041 | .unused, |
| 4070 | 4042 | }, |
| 4071 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 4043 | .dst_temps = .{.mem}, |
| 4044 | .clobbers = .{ .eflags = true }, |
| 4072 | 4045 | .each = .{ .once = &.{ |
| 4073 | | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 4074 | | .{ ._, .p_, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ }, |
| 4046 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 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 }, |
| 4078 | | .src_constraints = .{ .{ .vec = .xword }, .any }, |
| 4054 | .required_features = .{ .avx, null, null, null }, |
| 4055 | .src_constraints = .{ |
| 4056 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 4057 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 4058 | }, |
| 4079 | 4059 | .patterns = &.{ |
| 4080 | | .{ .src = .{ .to_mut_xmm, .none } }, |
| 4060 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4081 | 4061 | }, |
| 4082 | 4062 | .extra_temps = .{ |
| 4083 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 4084 | | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| 4063 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4064 | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, |
| 4065 | .unused, |
| 4066 | .unused, |
| 4067 | .unused, |
| 4085 | 4068 | .unused, |
| 4086 | 4069 | .unused, |
| 4087 | 4070 | .unused, |
| 4088 | 4071 | .unused, |
| 4089 | 4072 | }, |
| 4090 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 4073 | .dst_temps = .{.mem}, |
| 4074 | .clobbers = .{ .eflags = true }, |
| 4091 | 4075 | .each = .{ .once = &.{ |
| 4092 | | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 4093 | | .{ ._, ._ps, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ }, |
| 4076 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 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 }, |
| 4097 | | .src_constraints = .{ .{ .signed_int_or_full_vec = .yword }, .any }, |
| 4098 | | .patterns = &.{ |
| 4099 | | .{ .src = .{ .mem, .none } }, |
| 4100 | | .{ .src = .{ .to_ymm, .none } }, |
| 4084 | .required_features = .{ .sse4_1, null, null, null }, |
| 4085 | .src_constraints = .{ |
| 4086 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 4087 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 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 | 4089 | .patterns = &.{ |
| 4111 | | .{ .src = .{ .to_ymm, .none } }, |
| 4090 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4112 | 4091 | }, |
| 4113 | 4092 | .extra_temps = .{ |
| 4114 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 4115 | | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| 4093 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4094 | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, |
| 4095 | .unused, |
| 4096 | .unused, |
| 4097 | .unused, |
| 4116 | 4098 | .unused, |
| 4117 | 4099 | .unused, |
| 4118 | 4100 | .unused, |
| 4119 | 4101 | .unused, |
| 4120 | 4102 | }, |
| 4121 | | .dst_temps = .{.{ .rc = .sse }}, |
| 4103 | .dst_temps = .{.mem}, |
| 4104 | .clobbers = .{ .eflags = true }, |
| 4122 | 4105 | .each = .{ .once = &.{ |
| 4123 | | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 4124 | | .{ ._, .vp_, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, |
| 4106 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 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 }, |
| 4128 | | .src_constraints = .{ .{ .signed_int_or_full_vec = .yword }, .any }, |
| 4129 | | .patterns = &.{ |
| 4130 | | .{ .src = .{ .mem, .none } }, |
| 4131 | | .{ .src = .{ .to_ymm, .none } }, |
| 4114 | .required_features = .{ .sse2, null, null, null }, |
| 4115 | .src_constraints = .{ |
| 4116 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 4117 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 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 | 4119 | .patterns = &.{ |
| 4142 | | .{ .src = .{ .to_ymm, .none } }, |
| 4120 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4143 | 4121 | }, |
| 4144 | 4122 | .extra_temps = .{ |
| 4145 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 4146 | | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| 4123 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4124 | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, |
| 4125 | .unused, |
| 4126 | .unused, |
| 4127 | .unused, |
| 4147 | 4128 | .unused, |
| 4148 | 4129 | .unused, |
| 4149 | 4130 | .unused, |
| 4150 | 4131 | .unused, |
| 4151 | 4132 | }, |
| 4152 | | .dst_temps = .{.{ .rc = .sse }}, |
| 4133 | .dst_temps = .{.mem}, |
| 4134 | .clobbers = .{ .eflags = true }, |
| 4153 | 4135 | .each = .{ .once = &.{ |
| 4154 | | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 4155 | | .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, |
| 4136 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 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 | 4150 | .patterns = &.{ |
| 4160 | | .{ .src = .{ .to_mem, .none } }, |
| 4151 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4161 | 4152 | }, |
| 4162 | 4153 | .extra_temps = .{ |
| 4163 | 4154 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4164 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 4165 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 4166 | | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| 4155 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| 4156 | .unused, |
| 4157 | .unused, |
| 4158 | .unused, |
| 4159 | .unused, |
| 4160 | .unused, |
| 4167 | 4161 | .unused, |
| 4168 | 4162 | .unused, |
| 4169 | 4163 | }, |
| 4170 | 4164 | .dst_temps = .{.mem}, |
| 4165 | .clobbers = .{ .eflags = true }, |
| 4171 | 4166 | .each = .{ .once = &.{ |
| 4172 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_src0_unaligned_size), ._, ._ }, |
| 4173 | | .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ }, |
| 4174 | | .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_src0_unaligned_size), ._, ._ }, |
| 4175 | | .{ ._, ._, .xor, .tmp2q, .leaia(.qword, .tmp1, .tmp0, .add_src0_unaligned_size), ._, ._ }, |
| 4176 | | .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_src0_unaligned_size), .tmp2q, ._, ._ }, |
| 4177 | | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 4167 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4168 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 4169 | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 4170 | .{ ._, ._b, .cmov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 4171 | .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| 4172 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 4178 | 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 | 4180 | .patterns = &.{ |
| 4182 | | .{ .src = .{ .to_mem, .none } }, |
| 4181 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4183 | 4182 | }, |
| 4184 | 4183 | .extra_temps = .{ |
| 4185 | 4184 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4186 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 4187 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 4188 | | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| 4185 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| 4186 | .unused, |
| 4187 | .unused, |
| 4188 | .unused, |
| 4189 | .unused, |
| 4190 | .unused, |
| 4189 | 4191 | .unused, |
| 4190 | 4192 | .unused, |
| 4191 | 4193 | }, |
| 4192 | 4194 | .dst_temps = .{.mem}, |
| 4195 | .clobbers = .{ .eflags = true }, |
| 4193 | 4196 | .each = .{ .once = &.{ |
| 4194 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_src0_unaligned_size), ._, ._ }, |
| 4195 | | .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ }, |
| 4196 | | .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_src0_unaligned_size), ._, ._ }, |
| 4197 | | .{ ._, ._, .xor, .tmp2d, .leaia(.dword, .tmp1, .tmp0, .add_src0_unaligned_size), ._, ._ }, |
| 4198 | | .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_src0_unaligned_size), .tmp2d, ._, ._ }, |
| 4199 | | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| 4197 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4198 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 4199 | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 4200 | .{ ._, ._nb, .j, .@"1f", ._, ._, ._ }, |
| 4201 | .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 4202 | .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| 4203 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 4200 | 4204 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4201 | 4205 | } }, |
| 4202 | | } }) catch |err| switch (err) { |
| 4203 | | error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{ |
| 4204 | | @tagName(air_tag), |
| 4205 | | cg.typeOf(ty_op.operand).fmt(pt), |
| 4206 | | ops[0].tracking(cg), |
| 4207 | | }), |
| 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 }, |
| 4206 | }, .{ |
| 4207 | .required_features = .{ .avx, null, null, null }, |
| 4208 | .src_constraints = .{ |
| 4209 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 4210 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 4211 | }, |
| 4273 | 4212 | .patterns = &.{ |
| 4274 | | .{ .src = .{ .mut_mem, .none } }, |
| 4275 | | .{ .src = .{ .to_mut_gpr, .none } }, |
| 4213 | .{ .src = .{ .to_sse, .mem } }, |
| 4214 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 4215 | .{ .src = .{ .to_sse, .to_sse } }, |
| 4276 | 4216 | }, |
| 4277 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 4278 | | .clobbers = .{ .eflags = true }, |
| 4217 | .dst_temps = .{.{ .rc = .sse }}, |
| 4279 | 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 | 4227 | .patterns = &.{ |
| 4285 | | .{ .src = .{ .mut_mem, .none } }, |
| 4286 | | .{ .src = .{ .to_mut_gpr, .none } }, |
| 4228 | .{ .src = .{ .to_mut_sse, .mem } }, |
| 4229 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 4230 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 4287 | 4231 | }, |
| 4288 | 4232 | .dst_temps = .{.{ .ref = .src0 }}, |
| 4289 | | .clobbers = .{ .eflags = true }, |
| 4290 | 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 | 4242 | .patterns = &.{ |
| 4296 | | .{ .src = .{ .mut_mem, .none } }, |
| 4297 | | .{ .src = .{ .to_mut_gpr, .none } }, |
| 4243 | .{ .src = .{ .to_mut_sse, .mem } }, |
| 4244 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 4245 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 4298 | 4246 | }, |
| 4299 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 4300 | | .clobbers = .{ .eflags = true }, |
| 4247 | .dst_temps = .{.{ .rc = .sse }}, |
| 4301 | 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 }, |
| 4306 | | .src_constraints = .{ .{ .unsigned_or_exact_int = .byte }, .any }, |
| 4256 | .required_features = .{ .avx2, null, null, null }, |
| 4257 | .src_constraints = .{ |
| 4258 | .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }, |
| 4259 | .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }, |
| 4260 | }, |
| 4307 | 4261 | .patterns = &.{ |
| 4308 | | .{ .src = .{ .mem, .none } }, |
| 4309 | | .{ .src = .{ .to_gpr, .none } }, |
| 4262 | .{ .src = .{ .to_sse, .mem } }, |
| 4263 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 4264 | .{ .src = .{ .to_sse, .to_sse } }, |
| 4310 | 4265 | }, |
| 4311 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 4312 | | .clobbers = .{ .eflags = true }, |
| 4266 | .dst_temps = .{.{ .rc = .sse }}, |
| 4313 | 4267 | .each = .{ .once = &.{ |
| 4314 | | .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, |
| 4315 | | .{ ._, ._, .lzcnt, .dst0d, .dst0d, ._, ._ }, |
| 4316 | | .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ }, |
| 4268 | .{ ._, .vp_d, .maxs, .dst0y, .src0y, .src1y, ._ }, |
| 4317 | 4269 | } }, |
| 4318 | 4270 | }, .{ |
| 4319 | | .required_features = .{ .lzcnt, null, null, null }, |
| 4320 | | .src_constraints = .{ .{ .signed_int = .byte }, .any }, |
| 4271 | .required_features = .{ .avx2, null, null, null }, |
| 4272 | .src_constraints = .{ |
| 4273 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }, |
| 4274 | .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }, |
| 4275 | }, |
| 4321 | 4276 | .patterns = &.{ |
| 4322 | | .{ .src = .{ .mem, .none } }, |
| 4323 | | .{ .src = .{ .to_gpr, .none } }, |
| 4277 | .{ .src = .{ .to_mem, .to_mem } }, |
| 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 | 4291 | .clobbers = .{ .eflags = true }, |
| 4327 | 4292 | .each = .{ .once = &.{ |
| 4328 | | .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, |
| 4329 | | .{ ._, ._, .@"and", .dst0d, .sa(.src0, .add_umax), ._, ._ }, |
| 4330 | | .{ ._, ._, .lzcnt, .dst0d, .dst0d, ._, ._ }, |
| 4331 | | .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ }, |
| 4293 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4294 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 4295 | .{ ._, .vp_d, .maxs, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_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 }, |
| 4335 | | .src_constraints = .{ .{ .exact_int = 16 }, .any }, |
| 4301 | .required_features = .{ .avx, null, null, null }, |
| 4302 | .src_constraints = .{ |
| 4303 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 4304 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 4305 | }, |
| 4336 | 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 | 4321 | .clobbers = .{ .eflags = true }, |
| 4341 | 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 }, |
| 4346 | | .src_constraints = .{ .{ .exact_int = 16 }, .any }, |
| 4331 | .required_features = .{ .sse4_1, null, null, null }, |
| 4332 | .src_constraints = .{ |
| 4333 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 4334 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 4335 | }, |
| 4347 | 4336 | .patterns = &.{ |
| 4348 | | .{ .src = .{ .mem, .none } }, |
| 4349 | | .{ .src = .{ .to_gpr, .none } }, |
| 4337 | .{ .src = .{ .to_mem, .to_mem } }, |
| 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 | 4351 | .clobbers = .{ .eflags = true }, |
| 4353 | 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 }, |
| 4358 | | .src_constraints = .{ .{ .signed_int = .word }, .any }, |
| 4361 | .required_features = .{ .sse2, null, null, null }, |
| 4362 | .src_constraints = .{ |
| 4363 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 4364 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 4365 | }, |
| 4359 | 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 | 4381 | .clobbers = .{ .eflags = true }, |
| 4364 | 4382 | .each = .{ .once = &.{ |
| 4365 | | .{ ._, ._, .@"and", .src0w, .sa(.src0, .add_umax), ._, ._ }, |
| 4366 | | .{ ._, ._, .lzcnt, .dst0w, .src0w, ._, ._ }, |
| 4367 | | .{ ._, ._, .sub, .dst0b, .sia(16, .src0, .sub_bit_size), ._, ._ }, |
| 4383 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4384 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_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 }, |
| 4371 | | .src_constraints = .{ .{ .unsigned_int = .word }, .any }, |
| 4395 | .required_features = .{ .cmov, null, null, null }, |
| 4396 | .src_constraints = .{ |
| 4397 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| 4398 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| 4399 | }, |
| 4372 | 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 | 4415 | .clobbers = .{ .eflags = true }, |
| 4377 | 4416 | .each = .{ .once = &.{ |
| 4378 | | .{ ._, ._, .lzcnt, .dst0w, .src0w, ._, ._ }, |
| 4379 | | .{ ._, ._, .sub, .dst0b, .sia(16, .src0, .sub_bit_size), ._, ._ }, |
| 4417 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_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 }, |
| 4383 | | .src_constraints = .{ .{ .unsigned_int = .word }, .any }, |
| 4426 | .src_constraints = .{ |
| 4427 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| 4428 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| 4429 | }, |
| 4384 | 4430 | .patterns = &.{ |
| 4385 | | .{ .src = .{ .mem, .none } }, |
| 4386 | | .{ .src = .{ .to_gpr, .none } }, |
| 4431 | .{ .src = .{ .to_mem, .to_mem } }, |
| 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 | 4445 | .clobbers = .{ .eflags = true }, |
| 4390 | 4446 | .each = .{ .once = &.{ |
| 4391 | | .{ ._, ._, .lzcnt, .dst0w, .src0w, ._, ._ }, |
| 4392 | | .{ ._, ._, .sub, .dst0b, .sia(16, .src0, .sub_bit_size), ._, ._ }, |
| 4447 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_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 }, |
| 4396 | | .src_constraints = .{ .{ .exact_int = 32 }, .any }, |
| 4457 | .required_features = .{ .avx, null, null, null }, |
| 4458 | .src_constraints = .{ |
| 4459 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 4460 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 4461 | }, |
| 4397 | 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 }}, |
| 4401 | | .clobbers = .{ .eflags = true }, |
| 4467 | .dst_temps = .{.{ .rc = .sse }}, |
| 4402 | 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 }, |
| 4407 | | .src_constraints = .{ .{ .exact_int = 32 }, .any }, |
| 4472 | .required_features = .{ .sse4_1, null, null, null }, |
| 4473 | .src_constraints = .{ |
| 4474 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 4475 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 4476 | }, |
| 4408 | 4477 | .patterns = &.{ |
| 4409 | | .{ .src = .{ .mem, .none } }, |
| 4410 | | .{ .src = .{ .to_gpr, .none } }, |
| 4478 | .{ .src = .{ .to_mut_sse, .mem } }, |
| 4479 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 4480 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 4411 | 4481 | }, |
| 4412 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 4413 | | .clobbers = .{ .eflags = true }, |
| 4482 | .dst_temps = .{.{ .ref = .src0 }}, |
| 4414 | 4483 | .each = .{ .once = &.{ |
| 4415 | | .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ }, |
| 4484 | .{ ._, .p_d, .maxu, .dst0x, .src1x, ._, ._ }, |
| 4416 | 4485 | } }, |
| 4417 | 4486 | }, .{ |
| 4418 | | .required_features = .{ .lzcnt, null, null, null }, |
| 4419 | | .src_constraints = .{ .{ .signed_int = .dword }, .any }, |
| 4487 | .required_features = .{ .sse2, null, null, null }, |
| 4488 | .src_constraints = .{ |
| 4489 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 4490 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 4491 | }, |
| 4420 | 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 }}, |
| 4424 | | .clobbers = .{ .eflags = true }, |
| 4497 | .extra_temps = .{ |
| 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 | 4509 | .each = .{ .once = &.{ |
| 4426 | | .{ ._, ._, .@"and", .src0d, .sa(.src0, .add_umax), ._, ._ }, |
| 4427 | | .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ }, |
| 4428 | | .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ }, |
| 4510 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 4511 | .{ ._, ._dqa, .mov, .dst0x, .lea(.xword, .tmp0), ._, ._ }, |
| 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 }, |
| 4432 | | .src_constraints = .{ .{ .unsigned_int = .dword }, .any }, |
| 4521 | .required_features = .{ .avx2, null, null, null }, |
| 4522 | .src_constraints = .{ |
| 4523 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, |
| 4524 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, |
| 4525 | }, |
| 4433 | 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 }}, |
| 4437 | | .clobbers = .{ .eflags = true }, |
| 4531 | .dst_temps = .{.{ .rc = .sse }}, |
| 4438 | 4532 | .each = .{ .once = &.{ |
| 4439 | | .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ }, |
| 4440 | | .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ }, |
| 4533 | .{ ._, .vp_d, .maxu, .dst0y, .src0y, .src1y, ._ }, |
| 4441 | 4534 | } }, |
| 4442 | 4535 | }, .{ |
| 4443 | | .required_features = .{ .lzcnt, null, null, null }, |
| 4444 | | .src_constraints = .{ .{ .unsigned_int = .dword }, .any }, |
| 4536 | .required_features = .{ .avx2, null, null, null }, |
| 4537 | .src_constraints = .{ |
| 4538 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, |
| 4539 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, |
| 4540 | }, |
| 4445 | 4541 | .patterns = &.{ |
| 4446 | | .{ .src = .{ .mem, .none } }, |
| 4447 | | .{ .src = .{ .to_gpr, .none } }, |
| 4542 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4448 | 4543 | }, |
| 4449 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 4450 | | .clobbers = .{ .eflags = true }, |
| 4451 | | .each = .{ .once = &.{ |
| 4452 | | .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ }, |
| 4453 | | .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ }, |
| 4454 | | } }, |
| 4455 | | }, .{ |
| 4456 | | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, |
| 4457 | | .src_constraints = .{ .{ .exact_int = 64 }, .any }, |
| 4458 | | .patterns = &.{ |
| 4459 | | .{ .src = .{ .to_mut_gpr, .none } }, |
| 4544 | .extra_temps = .{ |
| 4545 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4546 | .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } }, |
| 4547 | .unused, |
| 4548 | .unused, |
| 4549 | .unused, |
| 4550 | .unused, |
| 4551 | .unused, |
| 4552 | .unused, |
| 4553 | .unused, |
| 4460 | 4554 | }, |
| 4461 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 4555 | .dst_temps = .{.mem}, |
| 4462 | 4556 | .clobbers = .{ .eflags = true }, |
| 4463 | 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 }, |
| 4468 | | .src_constraints = .{ .{ .exact_int = 64 }, .any }, |
| 4469 | | .patterns = &.{ |
| 4470 | | .{ .src = .{ .mem, .none } }, |
| 4471 | | .{ .src = .{ .to_gpr, .none } }, |
| 4566 | .required_features = .{ .avx, null, null, null }, |
| 4567 | .src_constraints = .{ |
| 4568 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 4569 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 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 | 4571 | .patterns = &.{ |
| 4482 | | .{ .src = .{ .mem, .none } }, |
| 4483 | | .{ .src = .{ .to_gpr, .none } }, |
| 4572 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4484 | 4573 | }, |
| 4485 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 4486 | | .clobbers = .{ .eflags = true }, |
| 4487 | | .each = .{ .once = &.{ |
| 4488 | | .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ }, |
| 4489 | | .{ ._, ._, .@"and", .dst0q, .src0q, ._, ._ }, |
| 4490 | | .{ ._, ._, .lzcnt, .dst0q, .dst0q, ._, ._ }, |
| 4491 | | .{ ._, ._, .sub, .dst0b, .sia(64, .src0, .sub_bit_size), ._, ._ }, |
| 4492 | | } }, |
| 4493 | | }, .{ |
| 4494 | | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, |
| 4495 | | .src_constraints = .{ .{ .unsigned_int = .qword }, .any }, |
| 4496 | | .patterns = &.{ |
| 4497 | | .{ .src = .{ .to_mut_gpr, .none } }, |
| 4574 | .extra_temps = .{ |
| 4575 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4576 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 4577 | .unused, |
| 4578 | .unused, |
| 4579 | .unused, |
| 4580 | .unused, |
| 4581 | .unused, |
| 4582 | .unused, |
| 4583 | .unused, |
| 4498 | 4584 | }, |
| 4499 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 4585 | .dst_temps = .{.mem}, |
| 4500 | 4586 | .clobbers = .{ .eflags = true }, |
| 4501 | 4587 | .each = .{ .once = &.{ |
| 4502 | | .{ ._, ._, .lzcnt, .dst0q, .src0q, ._, ._ }, |
| 4503 | | .{ ._, ._, .sub, .dst0b, .sia(64, .src0, .sub_bit_size), ._, ._ }, |
| 4588 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_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 }, |
| 4507 | | .src_constraints = .{ .{ .unsigned_int = .qword }, .any }, |
| 4508 | | .patterns = &.{ |
| 4509 | | .{ .src = .{ .mem, .none } }, |
| 4510 | | .{ .src = .{ .to_gpr, .none } }, |
| 4596 | .required_features = .{ .sse4_1, null, null, null }, |
| 4597 | .src_constraints = .{ |
| 4598 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 4599 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 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 | 4601 | .patterns = &.{ |
| 4522 | | .{ .src = .{ .mem, .none } }, |
| 4523 | | .{ .src = .{ .to_gpr, .none } }, |
| 4602 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4524 | 4603 | }, |
| 4525 | 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 | 4609 | .unused, |
| 4528 | 4610 | .unused, |
| 4529 | 4611 | .unused, |
| 4530 | 4612 | .unused, |
| 4531 | 4613 | .unused, |
| 4532 | 4614 | }, |
| 4533 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 4615 | .dst_temps = .{.mem}, |
| 4534 | 4616 | .clobbers = .{ .eflags = true }, |
| 4535 | 4617 | .each = .{ .once = &.{ |
| 4536 | | .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, |
| 4537 | | .{ ._, ._r, .bs, .dst0d, .dst0d, ._, ._ }, |
| 4538 | | .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| 4539 | | .{ ._, ._z, .cmov, .dst0d, .tmp0d, ._, ._ }, |
| 4540 | | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 4618 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4619 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 4620 | .{ ._, .p_d, .maxu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 4621 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 4622 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 4623 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4541 | 4624 | } }, |
| 4542 | 4625 | }, .{ |
| 4543 | | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, |
| 4544 | | .src_constraints = .{ .{ .signed_po2_int = .byte }, .any }, |
| 4626 | .required_features = .{ .sse2, null, null, null }, |
| 4627 | .src_constraints = .{ |
| 4628 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 4629 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 4630 | }, |
| 4545 | 4631 | .patterns = &.{ |
| 4546 | | .{ .src = .{ .mem, .none } }, |
| 4547 | | .{ .src = .{ .to_gpr, .none } }, |
| 4632 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4548 | 4633 | }, |
| 4549 | 4634 | .extra_temps = .{ |
| 4550 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 4551 | | .unused, |
| 4552 | | .unused, |
| 4553 | | .unused, |
| 4635 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4636 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| 4637 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 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 | 4642 | .unused, |
| 4555 | 4643 | .unused, |
| 4556 | 4644 | }, |
| 4557 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 4645 | .dst_temps = .{.mem}, |
| 4558 | 4646 | .clobbers = .{ .eflags = true }, |
| 4559 | 4647 | .each = .{ .once = &.{ |
| 4560 | | .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, |
| 4561 | | .{ ._, ._, .@"and", .dst0d, .sa(.src0, .add_umax), ._, ._ }, |
| 4562 | | .{ ._, ._r, .bs, .dst0d, .dst0d, ._, ._ }, |
| 4563 | | .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| 4564 | | .{ ._, ._z, .cmov, .dst0d, .tmp0d, ._, ._ }, |
| 4565 | | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 4648 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 4649 | .{ ._, ._dqa, .mov, .tmp2x, .lea(.xword, .tmp0), ._, ._ }, |
| 4650 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4651 | .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 4652 | .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_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 }, |
| 4569 | | .src_constraints = .{ .{ .signed_int = .byte }, .any }, |
| 4666 | .required_features = .{ .cmov, null, null, null }, |
| 4667 | .src_constraints = .{ |
| 4668 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| 4669 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| 4670 | }, |
| 4570 | 4671 | .patterns = &.{ |
| 4571 | | .{ .src = .{ .mem, .none } }, |
| 4572 | | .{ .src = .{ .to_gpr, .none } }, |
| 4672 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4573 | 4673 | }, |
| 4574 | 4674 | .extra_temps = .{ |
| 4675 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4575 | 4676 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 4576 | 4677 | .unused, |
| 4577 | 4678 | .unused, |
| 4578 | 4679 | .unused, |
| 4579 | 4680 | .unused, |
| 4580 | 4681 | .unused, |
| 4682 | .unused, |
| 4683 | .unused, |
| 4581 | 4684 | }, |
| 4582 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 4685 | .dst_temps = .{.mem}, |
| 4583 | 4686 | .clobbers = .{ .eflags = true }, |
| 4584 | 4687 | .each = .{ .once = &.{ |
| 4585 | | .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ }, |
| 4586 | | .{ ._, ._, .@"and", .tmp0d, .sa(.src0, .add_umax), ._, ._ }, |
| 4587 | | .{ ._, ._r, .bs, .tmp0d, .tmp0d, ._, ._ }, |
| 4588 | | .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ }, |
| 4589 | | .{ ._, ._z, .cmov, .tmp0d, .dst0d, ._, ._ }, |
| 4590 | | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 4591 | | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, |
| 4688 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4689 | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 4690 | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 4691 | .{ ._, ._b, .cmov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 4692 | .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ }, |
| 4693 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| 4694 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4592 | 4695 | } }, |
| 4593 | 4696 | }, .{ |
| 4594 | | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, |
| 4595 | | .src_constraints = .{ .{ .unsigned_int = .byte }, .any }, |
| 4697 | .src_constraints = .{ |
| 4698 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| 4699 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| 4700 | }, |
| 4596 | 4701 | .patterns = &.{ |
| 4597 | | .{ .src = .{ .mem, .none } }, |
| 4598 | | .{ .src = .{ .to_gpr, .none } }, |
| 4702 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4599 | 4703 | }, |
| 4600 | 4704 | .extra_temps = .{ |
| 4705 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4601 | 4706 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 4602 | 4707 | .unused, |
| 4603 | 4708 | .unused, |
| 4604 | 4709 | .unused, |
| 4605 | 4710 | .unused, |
| 4606 | 4711 | .unused, |
| 4712 | .unused, |
| 4713 | .unused, |
| 4607 | 4714 | }, |
| 4608 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 4715 | .dst_temps = .{.mem}, |
| 4609 | 4716 | .clobbers = .{ .eflags = true }, |
| 4610 | 4717 | .each = .{ .once = &.{ |
| 4611 | | .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ }, |
| 4612 | | .{ ._, ._r, .bs, .tmp0d, .tmp0d, ._, ._ }, |
| 4613 | | .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ }, |
| 4614 | | .{ ._, ._z, .cmov, .tmp0d, .dst0d, ._, ._ }, |
| 4615 | | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 4616 | | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, |
| 4718 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4719 | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 4720 | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 4721 | .{ ._, ._nb, .j, .@"1f", ._, ._, ._ }, |
| 4722 | .{ ._, ._, .mov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 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 }, |
| 4620 | | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .byte }, .any }, |
| 4621 | | .patterns = &.{ |
| 4622 | | .{ .src = .{ .mem, .none } }, |
| 4623 | | .{ .src = .{ .to_gpr, .none } }, |
| 4728 | .required_features = .{ .avx, null, null, null }, |
| 4729 | .src_constraints = .{ |
| 4730 | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| 4731 | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| 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 | 4733 | .patterns = &.{ |
| 4638 | | .{ .src = .{ .mem, .none } }, |
| 4639 | | .{ .src = .{ .to_gpr, .none } }, |
| 4734 | .{ .src = .{ .to_sse, .to_sse } }, |
| 4640 | 4735 | }, |
| 4641 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 4642 | | .clobbers = .{ .eflags = true }, |
| 4736 | .dst_temps = .{.{ .rc = .sse }}, |
| 4643 | 4737 | .each = .{ .once = &.{ |
| 4644 | | .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, |
| 4645 | | .{ ._, ._, .@"and", .dst0d, .sa(.src0, .add_umax), ._, ._ }, |
| 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), ._, ._ }, |
| 4738 | .{ ._, .vp_q, .cmpgt, .dst0x, .src1x, .src0x, ._ }, |
| 4739 | .{ ._, .vp_b, .blendv, .dst0x, .src0x, .src1x, .dst0x }, |
| 4650 | 4740 | } }, |
| 4651 | 4741 | }, .{ |
| 4652 | | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, |
| 4653 | | .src_constraints = .{ .{ .signed_int = .byte }, .any }, |
| 4742 | .required_features = .{ .sse4_2, null, null, null }, |
| 4743 | .src_constraints = .{ |
| 4744 | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| 4745 | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| 4746 | }, |
| 4654 | 4747 | .patterns = &.{ |
| 4655 | | .{ .src = .{ .mem, .none } }, |
| 4656 | | .{ .src = .{ .to_gpr, .none } }, |
| 4748 | .{ .src = .{ .to_mut_sse, .mem } }, |
| 4749 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 4750 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 4657 | 4751 | }, |
| 4658 | 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 | 4757 | .unused, |
| 4661 | 4758 | .unused, |
| 4662 | 4759 | .unused, |
| 4663 | 4760 | .unused, |
| 4664 | 4761 | .unused, |
| 4665 | 4762 | }, |
| 4666 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 4667 | | .clobbers = .{ .eflags = true }, |
| 4763 | .dst_temps = .{.{ .ref = .src0 }}, |
| 4668 | 4764 | .each = .{ .once = &.{ |
| 4669 | | .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ }, |
| 4670 | | .{ ._, ._, .@"and", .tmp0d, .sa(.src0, .add_umax), ._, ._ }, |
| 4671 | | .{ ._, ._r, .bs, .tmp0d, .tmp0d, ._, ._ }, |
| 4672 | | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, |
| 4673 | | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 4674 | | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| 4675 | | .{ ._, ._, .sbb, .dst0b, .tmp0b, ._, ._ }, |
| 4765 | .{ ._, ._dqa, .mov, .tmp0x, .src1x, ._, ._ }, |
| 4766 | .{ ._, .p_q, .cmpgt, .tmp0x, .src0x, ._, ._ }, |
| 4767 | .{ ._, .p_b, .blendv, .dst0x, .src1x, .tmp0x, ._ }, |
| 4676 | 4768 | } }, |
| 4677 | 4769 | }, .{ |
| 4678 | | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, |
| 4679 | | .src_constraints = .{ .{ .unsigned_int = .byte }, .any }, |
| 4770 | .required_features = .{ .avx2, null, null, null }, |
| 4771 | .src_constraints = .{ |
| 4772 | .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }, |
| 4773 | .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }, |
| 4774 | }, |
| 4680 | 4775 | .patterns = &.{ |
| 4681 | | .{ .src = .{ .mem, .none } }, |
| 4682 | | .{ .src = .{ .to_gpr, .none } }, |
| 4776 | .{ .src = .{ .to_sse, .to_sse } }, |
| 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 | 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 | 4797 | .unused, |
| 4687 | 4798 | .unused, |
| 4688 | 4799 | .unused, |
| 4689 | 4800 | .unused, |
| 4690 | 4801 | .unused, |
| 4691 | 4802 | }, |
| 4692 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 4803 | .dst_temps = .{.mem}, |
| 4693 | 4804 | .clobbers = .{ .eflags = true }, |
| 4694 | 4805 | .each = .{ .once = &.{ |
| 4695 | | .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ }, |
| 4696 | | .{ ._, ._r, .bs, .tmp0d, .tmp0d, ._, ._ }, |
| 4697 | | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, |
| 4698 | | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 4699 | | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| 4700 | | .{ ._, ._, .sbb, .dst0b, .tmp0b, ._, ._ }, |
| 4806 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4807 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 4808 | .{ ._, .v_dqa, .mov, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, |
| 4809 | .{ ._, .vp_q, .cmpgt, .tmp3y, .tmp2y, .tmp1y, ._ }, |
| 4810 | .{ ._, .vp_b, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y }, |
| 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 | 4821 | .patterns = &.{ |
| 4705 | | .{ .src = .{ .mem, .none } }, |
| 4706 | | .{ .src = .{ .to_gpr, .none } }, |
| 4822 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4707 | 4823 | }, |
| 4708 | 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 | 4829 | .unused, |
| 4711 | 4830 | .unused, |
| 4712 | 4831 | .unused, |
| 4713 | 4832 | .unused, |
| 4714 | 4833 | .unused, |
| 4715 | 4834 | }, |
| 4716 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 4835 | .dst_temps = .{.mem}, |
| 4717 | 4836 | .clobbers = .{ .eflags = true }, |
| 4718 | 4837 | .each = .{ .once = &.{ |
| 4719 | | .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ }, |
| 4720 | | .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| 4721 | | .{ ._, ._r, .bs, .dst0d, .tmp0d, ._, ._ }, |
| 4722 | | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 4838 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4839 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 4840 | .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_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 | 4853 | .patterns = &.{ |
| 4727 | | .{ .src = .{ .mem, .none } }, |
| 4728 | | .{ .src = .{ .to_gpr, .none } }, |
| 4854 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4729 | 4855 | }, |
| 4730 | 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 | 4861 | .unused, |
| 4733 | 4862 | .unused, |
| 4734 | 4863 | .unused, |
| 4735 | 4864 | .unused, |
| 4736 | 4865 | .unused, |
| 4737 | 4866 | }, |
| 4738 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 4867 | .dst_temps = .{.mem}, |
| 4739 | 4868 | .clobbers = .{ .eflags = true }, |
| 4740 | 4869 | .each = .{ .once = &.{ |
| 4741 | | .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ }, |
| 4742 | | .{ ._, ._, .@"and", .tmp0d, .sa(.src0, .add_umax), ._, ._ }, |
| 4743 | | .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| 4744 | | .{ ._, ._r, .bs, .dst0d, .tmp0d, ._, ._ }, |
| 4745 | | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 4870 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4871 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 4872 | .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 4873 | .{ ._, ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ }, |
| 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 | 4886 | .patterns = &.{ |
| 4750 | | .{ .src = .{ .mem, .none } }, |
| 4751 | | .{ .src = .{ .to_gpr, .none } }, |
| 4887 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4752 | 4888 | }, |
| 4753 | 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 | 4894 | .unused, |
| 4756 | 4895 | .unused, |
| 4757 | 4896 | .unused, |
| 4758 | 4897 | .unused, |
| 4759 | 4898 | .unused, |
| 4760 | 4899 | }, |
| 4761 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 4900 | .dst_temps = .{.mem}, |
| 4762 | 4901 | .clobbers = .{ .eflags = true }, |
| 4763 | 4902 | .each = .{ .once = &.{ |
| 4764 | | .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, |
| 4765 | | .{ ._, ._, .@"and", .dst0d, .sa(.src0, .add_umax), ._, ._ }, |
| 4766 | | .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ }, |
| 4767 | | .{ ._, ._r, .bs, .tmp0d, .dst0d, ._, ._ }, |
| 4768 | | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 4769 | | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, |
| 4903 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4904 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 4905 | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 4906 | .{ ._, ._l, .cmov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 4907 | .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| 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 | 4917 | .patterns = &.{ |
| 4774 | | .{ .src = .{ .mem, .none } }, |
| 4775 | | .{ .src = .{ .to_gpr, .none } }, |
| 4918 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4776 | 4919 | }, |
| 4777 | 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 | 4925 | .unused, |
| 4780 | 4926 | .unused, |
| 4781 | 4927 | .unused, |
| 4782 | 4928 | .unused, |
| 4783 | 4929 | .unused, |
| 4784 | 4930 | }, |
| 4785 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 4931 | .dst_temps = .{.mem}, |
| 4786 | 4932 | .clobbers = .{ .eflags = true }, |
| 4787 | 4933 | .each = .{ .once = &.{ |
| 4788 | | .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, |
| 4789 | | .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ }, |
| 4790 | | .{ ._, ._r, .bs, .tmp0d, .dst0d, ._, ._ }, |
| 4791 | | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 4792 | | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, |
| 4934 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 4935 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 4936 | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 4937 | .{ ._, ._nl, .j, .@"1f", ._, ._, ._ }, |
| 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 }, |
| 4796 | | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .word }, .any }, |
| 4944 | .required_features = .{ .avx, null, null, null }, |
| 4945 | .src_constraints = .{ |
| 4946 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| 4947 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| 4948 | }, |
| 4797 | 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 }}, |
| 4801 | | .clobbers = .{ .eflags = true }, |
| 4954 | .extra_temps = .{ |
| 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 | 4966 | .each = .{ .once = &.{ |
| 4803 | | .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ }, |
| 4804 | | .{ ._, ._, .mov, .dst0w, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| 4805 | | .{ ._, ._nz, .cmov, .dst0w, .src0w, ._, ._ }, |
| 4806 | | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 4967 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 4968 | .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, |
| 4969 | .{ ._, .vp_, .xor, .dst0x, .tmp2x, .src0x, ._ }, |
| 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 }, |
| 4810 | | .src_constraints = .{ .{ .signed_int = .word }, .any }, |
| 4975 | .required_features = .{ .sse4_2, null, null, null }, |
| 4976 | .src_constraints = .{ |
| 4977 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| 4978 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| 4979 | }, |
| 4811 | 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 }}, |
| 4815 | | .clobbers = .{ .eflags = true }, |
| 4985 | .extra_temps = .{ |
| 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 | 4997 | .each = .{ .once = &.{ |
| 4817 | | .{ ._, ._, .@"and", .src0w, .sa(.src0, .add_umax), ._, ._ }, |
| 4818 | | .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ }, |
| 4819 | | .{ ._, ._, .mov, .dst0w, .si(0xff), ._, ._ }, |
| 4820 | | .{ ._, ._z, .cmov, .src0w, .dst0w, ._, ._ }, |
| 4821 | | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 4822 | | .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ }, |
| 4998 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 4999 | .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, |
| 5000 | .{ ._, ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ }, |
| 5001 | .{ ._, .p_, .xor, .tmp2x, .src0x, ._, ._ }, |
| 5002 | .{ ._, .p_, .xor, .tmp3x, .src1x, ._, ._ }, |
| 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 }, |
| 4826 | | .src_constraints = .{ .{ .unsigned_int = .word }, .any }, |
| 5007 | .required_features = .{ .avx2, null, null, null }, |
| 5008 | .src_constraints = .{ |
| 5009 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, |
| 5010 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, |
| 5011 | }, |
| 4827 | 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 }}, |
| 4831 | | .clobbers = .{ .eflags = true }, |
| 5017 | .extra_temps = .{ |
| 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 | 5029 | .each = .{ .once = &.{ |
| 4833 | | .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ }, |
| 4834 | | .{ ._, ._, .mov, .dst0w, .si(0xff), ._, ._ }, |
| 4835 | | .{ ._, ._z, .cmov, .src0w, .dst0w, ._, ._ }, |
| 4836 | | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 4837 | | .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ }, |
| 5030 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 5031 | .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ }, |
| 5032 | .{ ._, .vp_, .xor, .dst0y, .tmp2y, .src0y, ._ }, |
| 5033 | .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .src1y, ._ }, |
| 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 }, |
| 4841 | | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .word }, .any }, |
| 5038 | .required_features = .{ .avx2, null, null, null }, |
| 5039 | .src_constraints = .{ |
| 5040 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, |
| 5041 | .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, |
| 5042 | }, |
| 4842 | 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 | 5058 | .clobbers = .{ .eflags = true }, |
| 4847 | 5059 | .each = .{ .once = &.{ |
| 4848 | | .{ ._, ._r, .bs, .dst0w, .src0w, ._, ._ }, |
| 4849 | | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, |
| 4850 | | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| 4851 | | .{ .@"0:", ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 5060 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 5061 | .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ }, |
| 5062 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_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 }, |
| 4855 | | .src_constraints = .{ .{ .signed_int = .word }, .any }, |
| 5074 | .required_features = .{ .avx, null, null, null }, |
| 5075 | .src_constraints = .{ |
| 5076 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| 5077 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| 5078 | }, |
| 4856 | 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 | 5094 | .clobbers = .{ .eflags = true }, |
| 4861 | 5095 | .each = .{ .once = &.{ |
| 4862 | | .{ ._, ._, .@"and", .src0w, .sa(.src0, .add_umax), ._, ._ }, |
| 4863 | | .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ }, |
| 4864 | | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, |
| 4865 | | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 4866 | | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| 4867 | | .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ }, |
| 5096 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 5097 | .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, |
| 5098 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5099 | .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5100 | .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 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 }, |
| 4871 | | .src_constraints = .{ .{ .unsigned_int = .word }, .any }, |
| 5110 | .required_features = .{ .sse4_2, null, null, null }, |
| 5111 | .src_constraints = .{ |
| 5112 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| 5113 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| 5114 | }, |
| 4872 | 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 | 5130 | .clobbers = .{ .eflags = true }, |
| 4877 | 5131 | .each = .{ .once = &.{ |
| 4878 | | .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ }, |
| 4879 | | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, |
| 4880 | | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 4881 | | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| 4882 | | .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ }, |
| 5132 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 5133 | .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, |
| 5134 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5135 | .{ .@"0:", ._dqa, .mov, .tmp5x, .tmp2x, ._, ._ }, |
| 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 | 5153 | .patterns = &.{ |
| 4887 | | .{ .src = .{ .mem, .none } }, |
| 4888 | | .{ .src = .{ .to_gpr, .none } }, |
| 5154 | .{ .src = .{ .to_mem, .to_mem } }, |
| 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 | 5168 | .clobbers = .{ .eflags = true }, |
| 4892 | 5169 | .each = .{ .once = &.{ |
| 4893 | | .{ ._, ._, .mov, .dst0w, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| 4894 | | .{ ._, ._r, .bs, .dst0w, .src0w, ._, ._ }, |
| 4895 | | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 5170 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5171 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_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 | 5184 | .patterns = &.{ |
| 4900 | | .{ .src = .{ .to_mut_gpr, .none } }, |
| 5185 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4901 | 5186 | }, |
| 4902 | 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 | 5192 | .unused, |
| 4905 | 5193 | .unused, |
| 4906 | 5194 | .unused, |
| 4907 | 5195 | .unused, |
| 4908 | 5196 | .unused, |
| 4909 | 5197 | }, |
| 4910 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 5198 | .dst_temps = .{.mem}, |
| 4911 | 5199 | .clobbers = .{ .eflags = true }, |
| 4912 | 5200 | .each = .{ .once = &.{ |
| 4913 | | .{ ._, ._, .@"and", .src0w, .sa(.src0, .add_umax), ._, ._ }, |
| 4914 | | .{ ._, ._, .mov, .tmp0w, .si(0xff), ._, ._ }, |
| 4915 | | .{ ._, ._r, .bs, .tmp0w, .src0w, ._, ._ }, |
| 4916 | | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 4917 | | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, |
| 5201 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5202 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 5203 | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 5204 | .{ ._, ._nb, .j, .@"1f", ._, ._, ._ }, |
| 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 | 5213 | .patterns = &.{ |
| 4922 | | .{ .src = .{ .mem, .none } }, |
| 4923 | | .{ .src = .{ .to_gpr, .none } }, |
| 5214 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4924 | 5215 | }, |
| 4925 | 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 | 5221 | .unused, |
| 4928 | 5222 | .unused, |
| 4929 | 5223 | .unused, |
| 4930 | 5224 | .unused, |
| 4931 | 5225 | .unused, |
| 4932 | 5226 | }, |
| 4933 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 5227 | .dst_temps = .{.mem}, |
| 4934 | 5228 | .clobbers = .{ .eflags = true }, |
| 4935 | 5229 | .each = .{ .once = &.{ |
| 4936 | | .{ ._, ._, .mov, .tmp0w, .si(0xff), ._, ._ }, |
| 4937 | | .{ ._, ._r, .bs, .tmp0w, .src0w, ._, ._ }, |
| 4938 | | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 4939 | | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, |
| 5230 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5231 | .{ .@"0:", ._, .mov, .tmp1d, .sia(-1, .none, .add_src0_elem_size_div_8), ._, ._ }, |
| 5232 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 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 }, |
| 4943 | | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .dword }, .any }, |
| 5250 | .required_features = .{ .@"64bit", null, null, null }, |
| 5251 | .src_constraints = .{ .any_scalar_signed_int, .any_scalar_signed_int }, |
| 4944 | 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 | 5267 | .clobbers = .{ .eflags = true }, |
| 4949 | 5268 | .each = .{ .once = &.{ |
| 4950 | | .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ }, |
| 4951 | | .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| 4952 | | .{ ._, ._nz, .cmov, .dst0d, .src0d, ._, ._ }, |
| 4953 | | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 5269 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5270 | .{ .@"0:", ._, .mov, .tmp1d, .sia(-1, .none, .add_src0_elem_size_div_8), ._, ._ }, |
| 5271 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 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 }, |
| 4957 | | .src_constraints = .{ .{ .signed_int = .dword }, .any }, |
| 5289 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 5290 | .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int }, |
| 4958 | 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 | 5306 | .clobbers = .{ .eflags = true }, |
| 4963 | 5307 | .each = .{ .once = &.{ |
| 4964 | | .{ ._, ._, .@"and", .src0d, .sa(.src0, .add_umax), ._, ._ }, |
| 4965 | | .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ }, |
| 4966 | | .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ }, |
| 4967 | | .{ ._, ._z, .cmov, .src0d, .dst0d, ._, ._ }, |
| 4968 | | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 4969 | | .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ }, |
| 5308 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5309 | .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| 5310 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 5311 | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 5312 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 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 }, |
| 4973 | | .src_constraints = .{ .{ .unsigned_int = .dword }, .any }, |
| 5326 | .required_features = .{ .@"64bit", null, null, null }, |
| 5327 | .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int }, |
| 4974 | 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 | 5343 | .clobbers = .{ .eflags = true }, |
| 4979 | 5344 | .each = .{ .once = &.{ |
| 4980 | | .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ }, |
| 4981 | | .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ }, |
| 4982 | | .{ ._, ._z, .cmov, .src0d, .dst0d, ._, ._ }, |
| 4983 | | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 4984 | | .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ }, |
| 5345 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5346 | .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| 5347 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 5348 | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 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 | | }, .{ |
| 4987 | | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, |
| 4988 | | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .dword }, .any }, |
| 5362 | } }) catch |err| switch (err) { |
| 5363 | error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{ |
| 5364 | @tagName(air_tag), |
| 5365 | cg.typeOf(bin_op.lhs).fmt(pt), |
| 5366 | ops[0].tracking(cg), |
| 5367 | ops[1].tracking(cg), |
| 5368 | }), |
| 5369 | else => |e| return e, |
| 5370 | }; |
| 5371 | try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); |
| 5372 | }, |
| 5373 | .min => |air_tag| if (use_old) try cg.airBinOp(inst, air_tag) else fallback: { |
| 5374 | const bin_op = air_datas[@intFromEnum(inst)].bin_op; |
| 5375 | if (cg.typeOf(bin_op.lhs).scalarType(zcu).isRuntimeFloat()) break :fallback try cg.airBinOp(inst, air_tag); |
| 5376 | var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs }); |
| 5377 | var res: [1]Temp = undefined; |
| 5378 | cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{ |
| 5379 | .required_features = .{ .cmov, null, null, null }, |
| 5380 | .src_constraints = .{ .{ .signed_int = .byte }, .{ .signed_int = .byte } }, |
| 4989 | 5381 | .patterns = &.{ |
| 4990 | | .{ .src = .{ .to_mut_gpr, .none } }, |
| 5382 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 4991 | 5383 | }, |
| 4992 | 5384 | .dst_temps = .{.{ .ref = .src0 }}, |
| 4993 | 5385 | .clobbers = .{ .eflags = true }, |
| 4994 | 5386 | .each = .{ .once = &.{ |
| 4995 | | .{ ._, ._r, .bs, .dst0d, .src0d, ._, ._ }, |
| 4996 | | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, |
| 4997 | | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| 4998 | | .{ .@"0:", ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 5387 | .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ }, |
| 5388 | .{ ._, ._ge, .cmov, .dst0d, .src1d, ._, ._ }, |
| 4999 | 5389 | } }, |
| 5000 | 5390 | }, .{ |
| 5001 | | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, |
| 5002 | | .src_constraints = .{ .{ .signed_int = .dword }, .any }, |
| 5391 | .src_constraints = .{ .{ .signed_int = .byte }, .{ .signed_int = .byte } }, |
| 5003 | 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 | 5398 | .clobbers = .{ .eflags = true }, |
| 5008 | 5399 | .each = .{ .once = &.{ |
| 5009 | | .{ ._, ._, .@"and", .src0d, .sa(.src0, .add_umax), ._, ._ }, |
| 5010 | | .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ }, |
| 5011 | | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, |
| 5012 | | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 5013 | | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| 5014 | | .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ }, |
| 5400 | .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ }, |
| 5401 | .{ ._, ._nge, .j, .@"0f", ._, ._, ._ }, |
| 5402 | .{ ._, ._, .mov, .dst0b, .src1b, ._, ._ }, |
| 5015 | 5403 | } }, |
| 5016 | 5404 | }, .{ |
| 5017 | | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, |
| 5018 | | .src_constraints = .{ .{ .unsigned_int = .dword }, .any }, |
| 5405 | .required_features = .{ .cmov, null, null, null }, |
| 5406 | .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte } }, |
| 5019 | 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 | 5411 | .clobbers = .{ .eflags = true }, |
| 5024 | 5412 | .each = .{ .once = &.{ |
| 5025 | | .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ }, |
| 5026 | | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, |
| 5027 | | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 5028 | | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| 5029 | | .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ }, |
| 5413 | .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ }, |
| 5414 | .{ ._, ._ae, .cmov, .dst0d, .src1d, ._, ._ }, |
| 5030 | 5415 | } }, |
| 5031 | 5416 | }, .{ |
| 5032 | | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .dword }, .any }, |
| 5417 | .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte } }, |
| 5033 | 5418 | .patterns = &.{ |
| 5034 | | .{ .src = .{ .mem, .none } }, |
| 5035 | | .{ .src = .{ .to_gpr, .none } }, |
| 5419 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 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 | 5424 | .clobbers = .{ .eflags = true }, |
| 5039 | 5425 | .each = .{ .once = &.{ |
| 5040 | | .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| 5041 | | .{ ._, ._r, .bs, .dst0d, .src0d, ._, ._ }, |
| 5042 | | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 5426 | .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ }, |
| 5427 | .{ ._, ._nae, .j, .@"0f", ._, ._, ._ }, |
| 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 | 5433 | .patterns = &.{ |
| 5047 | | .{ .src = .{ .to_mut_gpr, .none } }, |
| 5048 | | }, |
| 5049 | | .extra_temps = .{ |
| 5050 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 5051 | | .unused, |
| 5052 | | .unused, |
| 5053 | | .unused, |
| 5054 | | .unused, |
| 5055 | | .unused, |
| 5434 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5435 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 5436 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5056 | 5437 | }, |
| 5057 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 5438 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5058 | 5439 | .clobbers = .{ .eflags = true }, |
| 5059 | 5440 | .each = .{ .once = &.{ |
| 5060 | | .{ ._, ._, .@"and", .src0d, .sa(.src0, .add_umax), ._, ._ }, |
| 5061 | | .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ }, |
| 5062 | | .{ ._, ._r, .bs, .tmp0d, .src0d, ._, ._ }, |
| 5063 | | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 5064 | | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, |
| 5441 | .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ }, |
| 5442 | .{ ._, ._ge, .cmov, .dst0w, .src1w, ._, ._ }, |
| 5065 | 5443 | } }, |
| 5066 | 5444 | }, .{ |
| 5067 | | .src_constraints = .{ .{ .unsigned_int = .dword }, .any }, |
| 5445 | .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word } }, |
| 5068 | 5446 | .patterns = &.{ |
| 5069 | | .{ .src = .{ .mem, .none } }, |
| 5070 | | .{ .src = .{ .to_gpr, .none } }, |
| 5447 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5448 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 5449 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5071 | 5450 | }, |
| 5072 | | .extra_temps = .{ |
| 5073 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 5074 | | .unused, |
| 5075 | | .unused, |
| 5076 | | .unused, |
| 5077 | | .unused, |
| 5078 | | .unused, |
| 5451 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5452 | .clobbers = .{ .eflags = true }, |
| 5453 | .each = .{ .once = &.{ |
| 5454 | .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ }, |
| 5455 | .{ ._, ._nge, .j, .@"0f", ._, ._, ._ }, |
| 5456 | .{ ._, ._, .mov, .dst0w, .src1w, ._, ._ }, |
| 5457 | } }, |
| 5458 | }, .{ |
| 5459 | .required_features = .{ .cmov, null, null, null }, |
| 5460 | .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word } }, |
| 5461 | .patterns = &.{ |
| 5462 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5463 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 5464 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5079 | 5465 | }, |
| 5080 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 5466 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5081 | 5467 | .clobbers = .{ .eflags = true }, |
| 5082 | 5468 | .each = .{ .once = &.{ |
| 5083 | | .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ }, |
| 5084 | | .{ ._, ._r, .bs, .tmp0d, .src0d, ._, ._ }, |
| 5085 | | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 5086 | | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, |
| 5469 | .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ }, |
| 5470 | .{ ._, ._ae, .cmov, .dst0w, .src1w, ._, ._ }, |
| 5087 | 5471 | } }, |
| 5088 | 5472 | }, .{ |
| 5089 | | .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, null }, |
| 5090 | | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .qword }, .any }, |
| 5473 | .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word } }, |
| 5091 | 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 | 5480 | .clobbers = .{ .eflags = true }, |
| 5096 | 5481 | .each = .{ .once = &.{ |
| 5097 | | .{ ._, ._r, .bs, .src0q, .src0q, ._, ._ }, |
| 5098 | | .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| 5099 | | .{ ._, ._nz, .cmov, .dst0d, .src0d, ._, ._ }, |
| 5100 | | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 5482 | .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ }, |
| 5483 | .{ ._, ._nae, .j, .@"0f", ._, ._, ._ }, |
| 5484 | .{ ._, ._, .mov, .dst0w, .src1w, ._, ._ }, |
| 5101 | 5485 | } }, |
| 5102 | 5486 | }, .{ |
| 5103 | | .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, null }, |
| 5104 | | .src_constraints = .{ .{ .signed_int = .qword }, .any }, |
| 5487 | .required_features = .{ .cmov, null, null, null }, |
| 5488 | .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword } }, |
| 5105 | 5489 | .patterns = &.{ |
| 5106 | | .{ .src = .{ .mem, .none } }, |
| 5107 | | .{ .src = .{ .to_gpr, .none } }, |
| 5490 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5491 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 5492 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5108 | 5493 | }, |
| 5109 | | .extra_temps = .{ |
| 5110 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 5111 | | .unused, |
| 5112 | | .unused, |
| 5113 | | .unused, |
| 5114 | | .unused, |
| 5115 | | .unused, |
| 5494 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5495 | .clobbers = .{ .eflags = true }, |
| 5496 | .each = .{ .once = &.{ |
| 5497 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, |
| 5498 | .{ ._, ._ge, .cmov, .dst0d, .src1d, ._, ._ }, |
| 5499 | } }, |
| 5500 | }, .{ |
| 5501 | .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword } }, |
| 5502 | .patterns = &.{ |
| 5503 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5504 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 5505 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5116 | 5506 | }, |
| 5117 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 5507 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5118 | 5508 | .clobbers = .{ .eflags = true }, |
| 5119 | 5509 | .each = .{ .once = &.{ |
| 5120 | | .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ }, |
| 5121 | | .{ ._, ._, .@"and", .tmp0q, .src0q, ._, ._ }, |
| 5122 | | .{ ._, ._r, .bs, .tmp0q, .tmp0q, ._, ._ }, |
| 5123 | | .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ }, |
| 5124 | | .{ ._, ._z, .cmov, .tmp0d, .dst0d, ._, ._ }, |
| 5125 | | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 5126 | | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, |
| 5510 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, |
| 5511 | .{ ._, ._nge, .j, .@"0f", ._, ._, ._ }, |
| 5512 | .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ }, |
| 5127 | 5513 | } }, |
| 5128 | 5514 | }, .{ |
| 5129 | | .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, null }, |
| 5130 | | .src_constraints = .{ .{ .unsigned_int = .qword }, .any }, |
| 5515 | .required_features = .{ .cmov, null, null, null }, |
| 5516 | .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword } }, |
| 5131 | 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 | 5523 | .clobbers = .{ .eflags = true }, |
| 5136 | 5524 | .each = .{ .once = &.{ |
| 5137 | | .{ ._, ._r, .bs, .src0q, .src0q, ._, ._ }, |
| 5138 | | .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ }, |
| 5139 | | .{ ._, ._z, .cmov, .src0d, .dst0d, ._, ._ }, |
| 5140 | | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 5141 | | .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ }, |
| 5525 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, |
| 5526 | .{ ._, ._ae, .cmov, .dst0d, .src1d, ._, ._ }, |
| 5142 | 5527 | } }, |
| 5143 | 5528 | }, .{ |
| 5144 | | .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null }, |
| 5145 | | .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .qword }, .any }, |
| 5529 | .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword } }, |
| 5146 | 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 | 5535 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5150 | 5536 | .clobbers = .{ .eflags = true }, |
| 5151 | 5537 | .each = .{ .once = &.{ |
| 5152 | | .{ ._, ._r, .bs, .dst0q, .src0q, ._, ._ }, |
| 5153 | | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, |
| 5154 | | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| 5155 | | .{ .@"0:", ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 5538 | .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ }, |
| 5539 | .{ ._, ._nae, .j, .@"0f", ._, ._, ._ }, |
| 5540 | .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ }, |
| 5156 | 5541 | } }, |
| 5157 | 5542 | }, .{ |
| 5158 | | .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null }, |
| 5159 | | .src_constraints = .{ .{ .signed_int = .qword }, .any }, |
| 5543 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 5544 | .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword } }, |
| 5160 | 5545 | .patterns = &.{ |
| 5161 | | .{ .src = .{ .mem, .none } }, |
| 5162 | | .{ .src = .{ .to_gpr, .none } }, |
| 5546 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 5547 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 5548 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 5163 | 5549 | }, |
| 5164 | | .extra_temps = .{ |
| 5165 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 5166 | | .unused, |
| 5167 | | .unused, |
| 5168 | | .unused, |
| 5169 | | .unused, |
| 5170 | | .unused, |
| 5550 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5551 | .clobbers = .{ .eflags = true }, |
| 5552 | .each = .{ .once = &.{ |
| 5553 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, |
| 5554 | .{ ._, ._ge, .cmov, .dst0q, .src1q, ._, ._ }, |
| 5555 | } }, |
| 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 | 5565 | .clobbers = .{ .eflags = true }, |
| 5174 | 5566 | .each = .{ .once = &.{ |
| 5175 | | .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ }, |
| 5176 | | .{ ._, ._, .@"and", .tmp0q, .src0q, ._, ._ }, |
| 5177 | | .{ ._, ._r, .bs, .tmp0q, .tmp0q, ._, ._ }, |
| 5178 | | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, |
| 5179 | | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 5180 | | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| 5181 | | .{ ._, ._, .sbb, .dst0b, .tmp0b, ._, ._ }, |
| 5567 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, |
| 5568 | .{ ._, ._nge, .j, .@"0f", ._, ._, ._ }, |
| 5569 | .{ ._, ._, .mov, .dst0q, .src1q, ._, ._ }, |
| 5182 | 5570 | } }, |
| 5183 | 5571 | }, .{ |
| 5184 | | .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null }, |
| 5185 | | .src_constraints = .{ .{ .unsigned_int = .qword }, .any }, |
| 5572 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 5573 | .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword } }, |
| 5186 | 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 | 5580 | .clobbers = .{ .eflags = true }, |
| 5191 | 5581 | .each = .{ .once = &.{ |
| 5192 | | .{ ._, ._r, .bs, .src0q, .src0q, ._, ._ }, |
| 5193 | | .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ }, |
| 5194 | | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 5195 | | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| 5196 | | .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ }, |
| 5582 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, |
| 5583 | .{ ._, ._ae, .cmov, .dst0q, .src1q, ._, ._ }, |
| 5197 | 5584 | } }, |
| 5198 | 5585 | }, .{ |
| 5199 | 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 | 5588 | .patterns = &.{ |
| 5202 | | .{ .src = .{ .mem, .none } }, |
| 5203 | | .{ .src = .{ .to_gpr, .none } }, |
| 5589 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 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 | 5594 | .clobbers = .{ .eflags = true }, |
| 5207 | 5595 | .each = .{ .once = &.{ |
| 5208 | | .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ }, |
| 5209 | | .{ ._, ._r, .bs, .dst0q, .src0q, ._, ._ }, |
| 5210 | | .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 5596 | .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ }, |
| 5597 | .{ ._, ._nae, .j, .@"0f", ._, ._, ._ }, |
| 5598 | .{ ._, ._, .mov, .dst0q, .src1q, ._, ._ }, |
| 5211 | 5599 | } }, |
| 5212 | 5600 | }, .{ |
| 5213 | | .required_features = .{ .@"64bit", null, null, null }, |
| 5214 | | .src_constraints = .{ .{ .signed_int = .qword }, .any }, |
| 5601 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 5602 | .src_constraints = .{ .any_signed_int, .any_signed_int }, |
| 5215 | 5603 | .patterns = &.{ |
| 5216 | | .{ .src = .{ .mem, .none } }, |
| 5217 | | .{ .src = .{ .to_gpr, .none } }, |
| 5604 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5218 | 5605 | }, |
| 5219 | 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 | 5611 | .unused, |
| 5222 | 5612 | .unused, |
| 5223 | 5613 | .unused, |
| 5224 | 5614 | .unused, |
| 5225 | 5615 | .unused, |
| 5226 | 5616 | }, |
| 5227 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 5617 | .dst_temps = .{.mem}, |
| 5228 | 5618 | .clobbers = .{ .eflags = true }, |
| 5229 | 5619 | .each = .{ .once = &.{ |
| 5230 | | .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ }, |
| 5231 | | .{ ._, ._, .@"and", .dst0q, .src0q, ._, ._ }, |
| 5232 | | .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ }, |
| 5233 | | .{ ._, ._r, .bs, .tmp0q, .dst0q, ._, ._ }, |
| 5234 | | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 5235 | | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, |
| 5620 | .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ }, |
| 5621 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 5622 | .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ }, |
| 5623 | .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ }, |
| 5624 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 5625 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 5626 | .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ }, |
| 5627 | .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ }, |
| 5628 | .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, |
| 5629 | .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ }, |
| 5630 | .{ ._, ._ge, .cmov, .tmp0p, .tmp1p, ._, ._ }, |
| 5631 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 5632 | .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ }, |
| 5633 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| 5236 | 5634 | } }, |
| 5237 | 5635 | }, .{ |
| 5238 | 5636 | .required_features = .{ .@"64bit", null, null, null }, |
| 5239 | | .src_constraints = .{ .{ .unsigned_int = .qword }, .any }, |
| 5637 | .src_constraints = .{ .any_signed_int, .any_signed_int }, |
| 5240 | 5638 | .patterns = &.{ |
| 5241 | | .{ .src = .{ .mem, .none } }, |
| 5242 | | .{ .src = .{ .to_gpr, .none } }, |
| 5639 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5243 | 5640 | }, |
| 5244 | 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 | 5646 | .unused, |
| 5247 | 5647 | .unused, |
| 5248 | 5648 | .unused, |
| 5249 | 5649 | .unused, |
| 5250 | 5650 | .unused, |
| 5251 | 5651 | }, |
| 5252 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 5652 | .dst_temps = .{.mem}, |
| 5253 | 5653 | .clobbers = .{ .eflags = true }, |
| 5254 | 5654 | .each = .{ .once = &.{ |
| 5255 | | .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ }, |
| 5256 | | .{ ._, ._r, .bs, .tmp0q, .src0q, ._, ._ }, |
| 5257 | | .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 5258 | | .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ }, |
| 5655 | .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ }, |
| 5656 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 5657 | .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ }, |
| 5658 | .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ }, |
| 5659 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 5660 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 5661 | .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ }, |
| 5662 | .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ }, |
| 5663 | .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, |
| 5664 | .{ ._, ._nge, .j, .@"0f", ._, ._, ._ }, |
| 5665 | .{ ._, ._, .lea, .tmp0p, .mem(.src1), ._, ._ }, |
| 5666 | .{ .@"0:", ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 5667 | .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ }, |
| 5668 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| 5259 | 5669 | } }, |
| 5260 | 5670 | }, .{ |
| 5261 | | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, |
| 5262 | | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| 5671 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 5672 | .src_constraints = .{ .any_unsigned_int, .any_unsigned_int }, |
| 5263 | 5673 | .patterns = &.{ |
| 5264 | | .{ .src = .{ .to_mem, .none } }, |
| 5674 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5265 | 5675 | }, |
| 5266 | 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 | 5681 | .unused, |
| 5269 | 5682 | .unused, |
| 5270 | 5683 | .unused, |
| 5271 | 5684 | .unused, |
| 5272 | 5685 | .unused, |
| 5273 | 5686 | }, |
| 5274 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 5687 | .dst_temps = .{.mem}, |
| 5275 | 5688 | .clobbers = .{ .eflags = true }, |
| 5276 | 5689 | .each = .{ .once = &.{ |
| 5277 | | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| 5278 | | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 5279 | | .{ ._, ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, |
| 5280 | | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, |
| 5281 | | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| 5282 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5283 | | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 5284 | | .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, |
| 5285 | | .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, |
| 5690 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ }, |
| 5691 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 5692 | .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ }, |
| 5693 | .{ ._, ._, .sbb, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ }, |
| 5694 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 5695 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 5696 | .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, |
| 5697 | .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ }, |
| 5698 | .{ ._, ._ae, .cmov, .tmp0p, .tmp1p, ._, ._ }, |
| 5699 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 5700 | .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ }, |
| 5701 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| 5286 | 5702 | } }, |
| 5287 | 5703 | }, .{ |
| 5288 | | .required_features = .{ .@"64bit", .lzcnt, null, null }, |
| 5289 | | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| 5704 | .required_features = .{ .@"64bit", null, null, null }, |
| 5705 | .src_constraints = .{ .any_unsigned_int, .any_unsigned_int }, |
| 5290 | 5706 | .patterns = &.{ |
| 5291 | | .{ .src = .{ .to_mem, .none } }, |
| 5707 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5292 | 5708 | }, |
| 5293 | 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 | 5714 | .unused, |
| 5296 | 5715 | .unused, |
| 5297 | 5716 | .unused, |
| 5298 | 5717 | .unused, |
| 5299 | 5718 | .unused, |
| 5300 | 5719 | }, |
| 5301 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 5720 | .dst_temps = .{.mem}, |
| 5302 | 5721 | .clobbers = .{ .eflags = true }, |
| 5303 | 5722 | .each = .{ .once = &.{ |
| 5304 | | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| 5305 | | .{ .@"0:", ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, |
| 5306 | | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, |
| 5307 | | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| 5308 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5309 | | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 5310 | | .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, |
| 5311 | | .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, |
| 5723 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ }, |
| 5724 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 5725 | .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ }, |
| 5726 | .{ ._, ._, .sbb, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ }, |
| 5727 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 5728 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 5729 | .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, |
| 5730 | .{ ._, ._nae, .j, .@"0f", ._, ._, ._ }, |
| 5731 | .{ ._, ._, .lea, .tmp0p, .mem(.src1), ._, ._ }, |
| 5732 | .{ .@"0:", ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 5733 | .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ }, |
| 5734 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| 5312 | 5735 | } }, |
| 5313 | 5736 | }, .{ |
| 5314 | | .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null }, |
| 5315 | | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| 5737 | .required_features = .{ .avx, null, null, null }, |
| 5738 | .src_constraints = .{ |
| 5739 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 5740 | .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 5741 | }, |
| 5316 | 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 | 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 | 5814 | .unused, |
| 5322 | 5815 | .unused, |
| 5323 | 5816 | .unused, |
| 5324 | 5817 | .unused, |
| 5325 | 5818 | .unused, |
| 5326 | 5819 | }, |
| 5327 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 5820 | .dst_temps = .{.mem}, |
| 5328 | 5821 | .clobbers = .{ .eflags = true }, |
| 5329 | 5822 | .each = .{ .once = &.{ |
| 5330 | | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| 5331 | | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 5332 | | .{ ._, ._r, .bs, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, |
| 5333 | | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, |
| 5334 | | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| 5823 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5824 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 5825 | .{ ._, .vp_b, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 5826 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 5827 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 5335 | 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 }, |
| 5343 | | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| 5831 | .required_features = .{ .avx, null, null, null }, |
| 5832 | .src_constraints = .{ |
| 5833 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 5834 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 5835 | }, |
| 5344 | 5836 | .patterns = &.{ |
| 5345 | | .{ .src = .{ .to_mem, .none } }, |
| 5837 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5346 | 5838 | }, |
| 5347 | 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 | 5844 | .unused, |
| 5350 | 5845 | .unused, |
| 5351 | 5846 | .unused, |
| 5352 | 5847 | .unused, |
| 5353 | 5848 | .unused, |
| 5354 | 5849 | }, |
| 5355 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 5850 | .dst_temps = .{.mem}, |
| 5356 | 5851 | .clobbers = .{ .eflags = true }, |
| 5357 | 5852 | .each = .{ .once = &.{ |
| 5358 | | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| 5359 | | .{ .@"0:", ._, .mov, .dst0d, .si(-1), ._, ._ }, |
| 5360 | | .{ ._, ._r, .bs, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, |
| 5361 | | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, |
| 5362 | | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| 5853 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5854 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5855 | .{ ._, .vp_b, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 5856 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 5857 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 5363 | 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 }, |
| 5370 | | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| 5861 | .required_features = .{ .sse4_1, null, null, null }, |
| 5862 | .src_constraints = .{ |
| 5863 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 5864 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 5865 | }, |
| 5371 | 5866 | .patterns = &.{ |
| 5372 | | .{ .src = .{ .to_mem, .none } }, |
| 5867 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5373 | 5868 | }, |
| 5374 | 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 | 5874 | .unused, |
| 5377 | 5875 | .unused, |
| 5378 | 5876 | .unused, |
| 5379 | 5877 | .unused, |
| 5380 | 5878 | .unused, |
| 5381 | 5879 | }, |
| 5382 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 5880 | .dst_temps = .{.mem}, |
| 5383 | 5881 | .clobbers = .{ .eflags = true }, |
| 5384 | 5882 | .each = .{ .once = &.{ |
| 5385 | | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 5386 | | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 5387 | | .{ ._, ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, |
| 5388 | | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, |
| 5389 | | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| 5883 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5884 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5885 | .{ ._, .p_b, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 5886 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 5887 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 5390 | 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 }, |
| 5397 | | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| 5891 | .required_features = .{ .sse2, null, null, null }, |
| 5892 | .src_constraints = .{ |
| 5893 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 5894 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, |
| 5895 | }, |
| 5398 | 5896 | .patterns = &.{ |
| 5399 | | .{ .src = .{ .to_mem, .none } }, |
| 5897 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5400 | 5898 | }, |
| 5401 | 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 | 5904 | .unused, |
| 5404 | 5905 | .unused, |
| 5405 | 5906 | .unused, |
| 5406 | 5907 | .unused, |
| 5407 | 5908 | .unused, |
| 5408 | 5909 | }, |
| 5409 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 5910 | .dst_temps = .{.mem}, |
| 5410 | 5911 | .clobbers = .{ .eflags = true }, |
| 5411 | 5912 | .each = .{ .once = &.{ |
| 5412 | | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 5413 | | .{ .@"0:", ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, |
| 5414 | | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, |
| 5415 | | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| 5913 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5914 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5915 | .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 5916 | .{ ._, .p_b, .cmpgt, .tmp1x, .tmp2x, ._, ._ }, |
| 5917 | .{ ._, .p_, .@"and", .tmp2x, .tmp1x, ._, ._ }, |
| 5918 | .{ ._, .p_, .andn, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5919 | .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ }, |
| 5920 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 5921 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 5416 | 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 }, |
| 5423 | | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| 5925 | .required_features = .{ .cmov, .slow_incdec, null, null }, |
| 5926 | .src_constraints = .{ |
| 5927 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 5928 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 5929 | }, |
| 5424 | 5930 | .patterns = &.{ |
| 5425 | | .{ .src = .{ .to_mem, .none } }, |
| 5931 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5426 | 5932 | }, |
| 5427 | 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 | 5938 | .unused, |
| 5430 | 5939 | .unused, |
| 5431 | 5940 | .unused, |
| 5432 | 5941 | .unused, |
| 5433 | 5942 | .unused, |
| 5434 | 5943 | }, |
| 5435 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 5944 | .dst_temps = .{.mem}, |
| 5436 | 5945 | .clobbers = .{ .eflags = true }, |
| 5437 | 5946 | .each = .{ .once = &.{ |
| 5438 | | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 5439 | | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 5440 | | .{ ._, ._r, .bs, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, |
| 5441 | | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, |
| 5442 | | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| 5947 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5948 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 5949 | .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 5950 | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, |
| 5951 | .{ ._, ._ge, .cmov, .tmp1d, .tmp2d, ._, ._ }, |
| 5952 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 5953 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 5443 | 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 }, |
| 5451 | | .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| 5957 | .required_features = .{ .cmov, null, null, null }, |
| 5958 | .src_constraints = .{ |
| 5959 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 5960 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 5961 | }, |
| 5452 | 5962 | .patterns = &.{ |
| 5453 | | .{ .src = .{ .to_mem, .none } }, |
| 5963 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5454 | 5964 | }, |
| 5455 | 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 | 5970 | .unused, |
| 5458 | 5971 | .unused, |
| 5459 | 5972 | .unused, |
| 5460 | 5973 | .unused, |
| 5461 | 5974 | .unused, |
| 5462 | 5975 | }, |
| 5463 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 5976 | .dst_temps = .{.mem}, |
| 5464 | 5977 | .clobbers = .{ .eflags = true }, |
| 5465 | 5978 | .each = .{ .once = &.{ |
| 5466 | | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 5467 | | .{ .@"0:", ._, .mov, .dst0d, .si(-1), ._, ._ }, |
| 5468 | | .{ ._, ._r, .bs, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, |
| 5469 | | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, |
| 5470 | | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| 5471 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5472 | | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 5473 | | .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, |
| 5474 | | .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, |
| 5979 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 5980 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 5981 | .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 5982 | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, |
| 5983 | .{ ._, ._ge, .cmov, .tmp1d, .tmp2d, ._, ._ }, |
| 5984 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 5985 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 5986 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 5475 | 5987 | } }, |
| 5476 | 5988 | }, .{ |
| 5477 | | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, |
| 5478 | | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| 5989 | .required_features = .{ .slow_incdec, null, null, null }, |
| 5990 | .src_constraints = .{ |
| 5991 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 5992 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 5993 | }, |
| 5479 | 5994 | .patterns = &.{ |
| 5480 | | .{ .src = .{ .to_mem, .none } }, |
| 5995 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5481 | 5996 | }, |
| 5482 | 5997 | .extra_temps = .{ |
| 5483 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 5484 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 5998 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5999 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| 6000 | .unused, |
| 6001 | .unused, |
| 6002 | .unused, |
| 5485 | 6003 | .unused, |
| 5486 | 6004 | .unused, |
| 5487 | 6005 | .unused, |
| 5488 | 6006 | .unused, |
| 5489 | 6007 | }, |
| 5490 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 6008 | .dst_temps = .{.mem}, |
| 5491 | 6009 | .clobbers = .{ .eflags = true }, |
| 5492 | 6010 | .each = .{ .once = &.{ |
| 5493 | | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| 5494 | | .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| 5495 | | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 5496 | | .{ ._, ._, .@"and", .tmp1q, .memi(.src0q, .tmp0), ._, ._ }, |
| 5497 | | .{ ._, ._, .lzcnt, .dst0q, .tmp1q, ._, ._ }, |
| 5498 | | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, |
| 5499 | | .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ }, |
| 5500 | | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| 6011 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6012 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 6013 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 6014 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, |
| 6015 | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 6016 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 6017 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 5501 | 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 }, |
| 5508 | | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| 6021 | .src_constraints = .{ |
| 6022 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 6023 | .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, |
| 6024 | }, |
| 5509 | 6025 | .patterns = &.{ |
| 5510 | | .{ .src = .{ .to_mem, .none } }, |
| 6026 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5511 | 6027 | }, |
| 5512 | 6028 | .extra_temps = .{ |
| 5513 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 5514 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 6029 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6030 | .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, |
| 6031 | .unused, |
| 6032 | .unused, |
| 6033 | .unused, |
| 5515 | 6034 | .unused, |
| 5516 | 6035 | .unused, |
| 5517 | 6036 | .unused, |
| 5518 | 6037 | .unused, |
| 5519 | 6038 | }, |
| 5520 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 6039 | .dst_temps = .{.mem}, |
| 5521 | 6040 | .clobbers = .{ .eflags = true }, |
| 5522 | 6041 | .each = .{ .once = &.{ |
| 5523 | | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| 5524 | | .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| 5525 | | .{ .@"0:", ._, .@"and", .tmp1q, .memi(.src0q, .tmp0), ._, ._ }, |
| 5526 | | .{ ._, ._, .lzcnt, .dst0q, .tmp1q, ._, ._ }, |
| 5527 | | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, |
| 5528 | | .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ }, |
| 5529 | | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| 5530 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5531 | | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 5532 | | .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, |
| 5533 | | .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, |
| 6042 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6043 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 6044 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 6045 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, |
| 6046 | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 6047 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 6048 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 6049 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 5534 | 6050 | } }, |
| 5535 | 6051 | }, .{ |
| 5536 | | .required_features = .{ .@"64bit", null, null, null }, |
| 5537 | | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| 6052 | .required_features = .{ .sse, .mmx, null, null }, |
| 6053 | .src_constraints = .{ |
| 6054 | .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } }, |
| 6055 | .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } }, |
| 6056 | }, |
| 5538 | 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 = .{ |
| 5542 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 5543 | | .unused, |
| 5544 | | .unused, |
| 5545 | | .unused, |
| 5546 | | .unused, |
| 5547 | | .unused, |
| 6062 | .dst_temps = .{.{ .ref = .src0 }}, |
| 6063 | .each = .{ .once = &.{ |
| 6064 | .{ ._, .p_b, .minu, .dst0q, .src1q, ._, ._ }, |
| 6065 | } }, |
| 6066 | }, .{ |
| 6067 | .required_features = .{ .avx, null, null, null }, |
| 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 }}, |
| 5550 | | .clobbers = .{ .eflags = true }, |
| 6072 | .patterns = &.{ |
| 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 | 6078 | .each = .{ .once = &.{ |
| 5552 | | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| 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, ._, ._, ._ }, |
| 6079 | .{ ._, .vp_b, .minu, .dst0x, .src0x, .src1x, ._ }, |
| 5563 | 6080 | } }, |
| 5564 | 6081 | }, .{ |
| 5565 | | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, |
| 5566 | | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| 6082 | .required_features = .{ .sse2, null, null, null }, |
| 6083 | .src_constraints = .{ |
| 6084 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| 6085 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| 6086 | }, |
| 5567 | 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 | 6120 | .extra_temps = .{ |
| 5571 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 5572 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 6121 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6122 | .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } }, |
| 6123 | .unused, |
| 6124 | .unused, |
| 6125 | .unused, |
| 5573 | 6126 | .unused, |
| 5574 | 6127 | .unused, |
| 5575 | 6128 | .unused, |
| 5576 | 6129 | .unused, |
| 5577 | 6130 | }, |
| 5578 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 6131 | .dst_temps = .{.mem}, |
| 5579 | 6132 | .clobbers = .{ .eflags = true }, |
| 5580 | 6133 | .each = .{ .once = &.{ |
| 5581 | | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 5582 | | .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| 5583 | | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 5584 | | .{ ._, ._, .@"and", .tmp1q, .memi(.src0q, .tmp0), ._, ._ }, |
| 5585 | | .{ ._, ._, .lzcnt, .dst0q, .tmp1q, ._, ._ }, |
| 5586 | | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, |
| 5587 | | .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ }, |
| 5588 | | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| 6134 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6135 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 6136 | .{ ._, .vp_b, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 6137 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 6138 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 5589 | 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 }, |
| 5596 | | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| 6142 | .required_features = .{ .avx, null, null, null }, |
| 6143 | .src_constraints = .{ |
| 6144 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| 6145 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| 6146 | }, |
| 5597 | 6147 | .patterns = &.{ |
| 5598 | | .{ .src = .{ .to_mem, .none } }, |
| 6148 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5599 | 6149 | }, |
| 5600 | 6150 | .extra_temps = .{ |
| 5601 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 5602 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 6151 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6152 | .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } }, |
| 6153 | .unused, |
| 6154 | .unused, |
| 6155 | .unused, |
| 5603 | 6156 | .unused, |
| 5604 | 6157 | .unused, |
| 5605 | 6158 | .unused, |
| 5606 | 6159 | .unused, |
| 5607 | 6160 | }, |
| 5608 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 6161 | .dst_temps = .{.mem}, |
| 5609 | 6162 | .clobbers = .{ .eflags = true }, |
| 5610 | 6163 | .each = .{ .once = &.{ |
| 5611 | | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 5612 | | .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| 5613 | | .{ .@"0:", ._, .@"and", .tmp1q, .memi(.src0q, .tmp0), ._, ._ }, |
| 5614 | | .{ ._, ._, .lzcnt, .dst0q, .tmp1q, ._, ._ }, |
| 5615 | | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, |
| 5616 | | .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ }, |
| 5617 | | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| 6164 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6165 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6166 | .{ ._, .vp_b, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 6167 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6168 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 5618 | 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 }, |
| 5625 | | .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| 6172 | .required_features = .{ .sse2, null, null, null }, |
| 6173 | .src_constraints = .{ |
| 6174 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| 6175 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, |
| 6176 | }, |
| 5626 | 6177 | .patterns = &.{ |
| 5627 | | .{ .src = .{ .to_mem, .none } }, |
| 6178 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5628 | 6179 | }, |
| 5629 | 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 | 6185 | .unused, |
| 5632 | 6186 | .unused, |
| 5633 | 6187 | .unused, |
| 5634 | 6188 | .unused, |
| 5635 | 6189 | .unused, |
| 5636 | 6190 | }, |
| 5637 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 6191 | .dst_temps = .{.mem}, |
| 5638 | 6192 | .clobbers = .{ .eflags = true }, |
| 5639 | 6193 | .each = .{ .once = &.{ |
| 5640 | | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 5641 | | .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ }, |
| 5642 | | .{ .@"0:", ._, .@"and", .dst0q, .memi(.src0q, .tmp0), ._, ._ }, |
| 5643 | | .{ ._, ._r, .bs, .dst0q, .dst0q, ._, ._ }, |
| 5644 | | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, |
| 5645 | | .{ ._, ._, .mov, .dst0q, .si(-1), ._, ._ }, |
| 5646 | | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| 6194 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6195 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6196 | .{ ._, .p_b, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6197 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6198 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 5647 | 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 }, |
| 5654 | | .src_constraints = .{ .{ .scalar_int_is = .byte }, .any }, |
| 6202 | .required_features = .{ .cmov, .slow_incdec, null, null }, |
| 6203 | .src_constraints = .{ |
| 6204 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 6205 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 6206 | }, |
| 5655 | 6207 | .patterns = &.{ |
| 5656 | | .{ .src = .{ .to_mem, .none } }, |
| 6208 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5657 | 6209 | }, |
| 5658 | 6210 | .extra_temps = .{ |
| 5659 | 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 | 6216 | .unused, |
| 5662 | 6217 | .unused, |
| 5663 | 6218 | .unused, |
| ... | ... | @@ -5666,24 +6221,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5666 | 6221 | .dst_temps = .{.mem}, |
| 5667 | 6222 | .clobbers = .{ .eflags = true }, |
| 5668 | 6223 | .each = .{ .once = &.{ |
| 5669 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5670 | | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, |
| 5671 | | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| 5672 | | .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ }, |
| 5673 | | .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ }, |
| 5674 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| 6224 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6225 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 6226 | .{ ._, ._, .movzx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 6227 | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, |
| 6228 | .{ ._, ._ae, .cmov, .tmp1d, .tmp2d, ._, ._ }, |
| 6229 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 5675 | 6230 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 5676 | 6231 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5677 | 6232 | } }, |
| 5678 | 6233 | }, .{ |
| 5679 | | .required_features = .{ .lzcnt, null, null, null }, |
| 5680 | | .src_constraints = .{ .{ .scalar_int_is = .byte }, .any }, |
| 6234 | .required_features = .{ .cmov, null, null, null }, |
| 6235 | .src_constraints = .{ |
| 6236 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 6237 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 6238 | }, |
| 5681 | 6239 | .patterns = &.{ |
| 5682 | | .{ .src = .{ .to_mem, .none } }, |
| 6240 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5683 | 6241 | }, |
| 5684 | 6242 | .extra_temps = .{ |
| 5685 | 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 | 6248 | .unused, |
| 5688 | 6249 | .unused, |
| 5689 | 6250 | .unused, |
| ... | ... | @@ -5692,24 +6253,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5692 | 6253 | .dst_temps = .{.mem}, |
| 5693 | 6254 | .clobbers = .{ .eflags = true }, |
| 5694 | 6255 | .each = .{ .once = &.{ |
| 5695 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5696 | | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, |
| 5697 | | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| 5698 | | .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ }, |
| 5699 | | .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ }, |
| 5700 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| 6256 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6257 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 6258 | .{ ._, ._, .movzx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 6259 | .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ }, |
| 6260 | .{ ._, ._ae, .cmov, .tmp1d, .tmp2d, ._, ._ }, |
| 6261 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 5701 | 6262 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 5702 | 6263 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 5703 | 6264 | } }, |
| 5704 | 6265 | }, .{ |
| 5705 | | .required_features = .{ .lzcnt, .slow_incdec, null, null }, |
| 5706 | | .src_constraints = .{ .{ .scalar_int_is = .word }, .any }, |
| 6266 | .required_features = .{ .slow_incdec, null, null, null }, |
| 6267 | .src_constraints = .{ |
| 6268 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 6269 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 6270 | }, |
| 5707 | 6271 | .patterns = &.{ |
| 5708 | | .{ .src = .{ .to_mem, .none } }, |
| 6272 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5709 | 6273 | }, |
| 5710 | 6274 | .extra_temps = .{ |
| 5711 | 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 | 6280 | .unused, |
| 5714 | 6281 | .unused, |
| 5715 | 6282 | .unused, |
| ... | ... | @@ -5718,24 +6285,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5718 | 6285 | .dst_temps = .{.mem}, |
| 5719 | 6286 | .clobbers = .{ .eflags = true }, |
| 5720 | 6287 | .each = .{ .once = &.{ |
| 5721 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5722 | | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, |
| 5723 | | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| 5724 | | .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ }, |
| 5725 | | .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ }, |
| 5726 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| 6288 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6289 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 6290 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 6291 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, |
| 6292 | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 6293 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 5727 | 6294 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 5728 | 6295 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5729 | 6296 | } }, |
| 5730 | 6297 | }, .{ |
| 5731 | | .required_features = .{ .lzcnt, null, null, null }, |
| 5732 | | .src_constraints = .{ .{ .scalar_int_is = .word }, .any }, |
| 6298 | .src_constraints = .{ |
| 6299 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 6300 | .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, |
| 6301 | }, |
| 5733 | 6302 | .patterns = &.{ |
| 5734 | | .{ .src = .{ .to_mem, .none } }, |
| 6303 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5735 | 6304 | }, |
| 5736 | 6305 | .extra_temps = .{ |
| 5737 | 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 | 6311 | .unused, |
| 5740 | 6312 | .unused, |
| 5741 | 6313 | .unused, |
| ... | ... | @@ -5744,24 +6316,90 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5744 | 6316 | .dst_temps = .{.mem}, |
| 5745 | 6317 | .clobbers = .{ .eflags = true }, |
| 5746 | 6318 | .each = .{ .once = &.{ |
| 5747 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5748 | | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, |
| 5749 | | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| 5750 | | .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ }, |
| 5751 | | .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ }, |
| 5752 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| 6319 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6320 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 6321 | .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 6322 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, |
| 6323 | .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 6324 | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ }, |
| 5753 | 6325 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 5754 | 6326 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 5755 | 6327 | } }, |
| 5756 | 6328 | }, .{ |
| 5757 | | .required_features = .{ .lzcnt, .slow_incdec, null, null }, |
| 5758 | | .src_constraints = .{ .{ .scalar_int_is = .dword }, .any }, |
| 6329 | .required_features = .{ .sse, .mmx, null, null }, |
| 6330 | .src_constraints = .{ |
| 6331 | .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, |
| 6332 | .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, |
| 6333 | }, |
| 5759 | 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 | 6397 | .extra_temps = .{ |
| 5763 | 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 | 6403 | .unused, |
| 5766 | 6404 | .unused, |
| 5767 | 6405 | .unused, |
| ... | ... | @@ -5770,24 +6408,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5770 | 6408 | .dst_temps = .{.mem}, |
| 5771 | 6409 | .clobbers = .{ .eflags = true }, |
| 5772 | 6410 | .each = .{ .once = &.{ |
| 5773 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5774 | | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, |
| 5775 | | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| 5776 | | .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ }, |
| 5777 | | .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ }, |
| 5778 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| 5779 | | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 6411 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6412 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 6413 | .{ ._, .vp_w, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 6414 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 6415 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 5780 | 6416 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5781 | 6417 | } }, |
| 5782 | 6418 | }, .{ |
| 5783 | | .required_features = .{ .lzcnt, null, null, null }, |
| 5784 | | .src_constraints = .{ .{ .scalar_int_is = .dword }, .any }, |
| 6419 | .required_features = .{ .avx, null, null, null }, |
| 6420 | .src_constraints = .{ |
| 6421 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| 6422 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| 6423 | }, |
| 5785 | 6424 | .patterns = &.{ |
| 5786 | | .{ .src = .{ .to_mem, .none } }, |
| 6425 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5787 | 6426 | }, |
| 5788 | 6427 | .extra_temps = .{ |
| 5789 | 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 | 6433 | .unused, |
| 5792 | 6434 | .unused, |
| 5793 | 6435 | .unused, |
| ... | ... | @@ -5796,24 +6438,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5796 | 6438 | .dst_temps = .{.mem}, |
| 5797 | 6439 | .clobbers = .{ .eflags = true }, |
| 5798 | 6440 | .each = .{ .once = &.{ |
| 5799 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5800 | | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, |
| 5801 | | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| 5802 | | .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ }, |
| 5803 | | .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ }, |
| 5804 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| 5805 | | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 5806 | | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 6441 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6442 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6443 | .{ ._, .vp_w, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 6444 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6445 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6446 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5807 | 6447 | } }, |
| 5808 | 6448 | }, .{ |
| 5809 | | .required_features = .{ .@"64bit", .lzcnt, .slow_incdec, null }, |
| 5810 | | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, |
| 6449 | .required_features = .{ .sse2, null, null, null }, |
| 6450 | .src_constraints = .{ |
| 6451 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| 6452 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, |
| 6453 | }, |
| 5811 | 6454 | .patterns = &.{ |
| 5812 | | .{ .src = .{ .to_mem, .none } }, |
| 6455 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5813 | 6456 | }, |
| 5814 | 6457 | .extra_temps = .{ |
| 5815 | 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 | 6463 | .unused, |
| 5818 | 6464 | .unused, |
| 5819 | 6465 | .unused, |
| ... | ... | @@ -5822,24 +6468,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5822 | 6468 | .dst_temps = .{.mem}, |
| 5823 | 6469 | .clobbers = .{ .eflags = true }, |
| 5824 | 6470 | .each = .{ .once = &.{ |
| 5825 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5826 | | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| 5827 | | .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, |
| 5828 | | .{ ._, ._, .lzcnt, .tmp1q, .tmp1q, ._, ._ }, |
| 5829 | | .{ ._, ._, .sub, .tmp1b, .sia(64, .src0, .sub_bit_size), ._, ._ }, |
| 5830 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| 5831 | | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 6471 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6472 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6473 | .{ ._, .p_w, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6474 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6475 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 5832 | 6476 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5833 | 6477 | } }, |
| 5834 | 6478 | }, .{ |
| 5835 | | .required_features = .{ .@"64bit", .lzcnt, null, null }, |
| 5836 | | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, |
| 6479 | .required_features = .{ .cmov, null, null, null }, |
| 6480 | .src_constraints = .{ |
| 6481 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| 6482 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| 6483 | }, |
| 5837 | 6484 | .patterns = &.{ |
| 5838 | | .{ .src = .{ .to_mem, .none } }, |
| 6485 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5839 | 6486 | }, |
| 5840 | 6487 | .extra_temps = .{ |
| 5841 | 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 | 6493 | .unused, |
| 5844 | 6494 | .unused, |
| 5845 | 6495 | .unused, |
| ... | ... | @@ -5848,83 +6498,123 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5848 | 6498 | .dst_temps = .{.mem}, |
| 5849 | 6499 | .clobbers = .{ .eflags = true }, |
| 5850 | 6500 | .each = .{ .once = &.{ |
| 5851 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5852 | | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| 5853 | | .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, |
| 5854 | | .{ ._, ._, .lzcnt, .tmp1q, .tmp1q, ._, ._ }, |
| 5855 | | .{ ._, ._, .sub, .tmp1b, .sia(64, .src0, .sub_bit_size), ._, ._ }, |
| 5856 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| 5857 | | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 5858 | | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 6501 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6502 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 6503 | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 6504 | .{ ._, ._ge, .cmov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 6505 | .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| 6506 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 6507 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5859 | 6508 | } }, |
| 5860 | 6509 | }, .{ |
| 5861 | | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, .slow_incdec, null }, |
| 5862 | | .src_constraints = .{ .{ .scalar_int_is = .byte }, .any }, |
| 6510 | .src_constraints = .{ |
| 6511 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| 6512 | .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, |
| 6513 | }, |
| 5863 | 6514 | .patterns = &.{ |
| 5864 | | .{ .src = .{ .to_mem, .none } }, |
| 6515 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5865 | 6516 | }, |
| 5866 | 6517 | .extra_temps = .{ |
| 5867 | 6518 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5868 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 5869 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 5870 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 6519 | .{ .type = .i16, .kind = .{ .rc = .general_purpose } }, |
| 6520 | .unused, |
| 6521 | .unused, |
| 6522 | .unused, |
| 6523 | .unused, |
| 6524 | .unused, |
| 5871 | 6525 | .unused, |
| 5872 | 6526 | .unused, |
| 5873 | 6527 | }, |
| 5874 | 6528 | .dst_temps = .{.mem}, |
| 5875 | 6529 | .clobbers = .{ .eflags = true }, |
| 5876 | 6530 | .each = .{ .once = &.{ |
| 5877 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5878 | | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, |
| 5879 | | .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, |
| 5880 | | .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ }, |
| 5881 | | .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ }, |
| 5882 | | .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ }, |
| 5883 | | .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 5884 | | .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ }, |
| 5885 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, |
| 5886 | | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 6531 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6532 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 6533 | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 6534 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, |
| 6535 | .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 6536 | .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| 6537 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 5887 | 6538 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5888 | 6539 | } }, |
| 5889 | 6540 | }, .{ |
| 5890 | | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, |
| 5891 | | .src_constraints = .{ .{ .scalar_int_is = .byte }, .any }, |
| 6541 | .required_features = .{ .avx, null, null, null }, |
| 6542 | .src_constraints = .{ |
| 6543 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 6544 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 6545 | }, |
| 5892 | 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 = .{ |
| 5896 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5897 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 5898 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 5899 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 5900 | | .unused, |
| 5901 | | .unused, |
| 6551 | .dst_temps = .{.{ .rc = .sse }}, |
| 6552 | .each = .{ .once = &.{ |
| 6553 | .{ ._, .vp_w, .minu, .dst0x, .src0x, .src1x, ._ }, |
| 6554 | } }, |
| 6555 | }, .{ |
| 6556 | .required_features = .{ .sse4_1, null, null, null }, |
| 6557 | .src_constraints = .{ |
| 6558 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 6559 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 5902 | 6560 | }, |
| 5903 | | .dst_temps = .{.mem}, |
| 5904 | | .clobbers = .{ .eflags = true }, |
| 6561 | .patterns = &.{ |
| 6562 | .{ .src = .{ .to_mut_sse, .mem } }, |
| 6563 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 6564 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 6565 | }, |
| 6566 | .dst_temps = .{.{ .ref = .src0 }}, |
| 5905 | 6567 | .each = .{ .once = &.{ |
| 5906 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 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", ._, ._, ._ }, |
| 6568 | .{ ._, .p_w, .minu, .dst0x, .src1x, ._, ._ }, |
| 5917 | 6569 | } }, |
| 5918 | 6570 | }, .{ |
| 5919 | | .required_features = .{ .bsf_bsr_0_clobbers_result, .slow_incdec, null, null }, |
| 5920 | | .src_constraints = .{ .{ .scalar_int_is = .byte }, .any }, |
| 6571 | .required_features = .{ .sse2, null, null, null }, |
| 6572 | .src_constraints = .{ |
| 6573 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 6574 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 6575 | }, |
| 5921 | 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 | 6611 | .extra_temps = .{ |
| 5925 | 6612 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5926 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 5927 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6613 | .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } }, |
| 6614 | .unused, |
| 6615 | .unused, |
| 6616 | .unused, |
| 6617 | .unused, |
| 5928 | 6618 | .unused, |
| 5929 | 6619 | .unused, |
| 5930 | 6620 | .unused, |
| ... | ... | @@ -5932,28 +6622,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5932 | 6622 | .dst_temps = .{.mem}, |
| 5933 | 6623 | .clobbers = .{ .eflags = true }, |
| 5934 | 6624 | .each = .{ .once = &.{ |
| 5935 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5936 | | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, |
| 5937 | | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| 5938 | | .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ }, |
| 5939 | | .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ }, |
| 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), ._, ._ }, |
| 6625 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6626 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 6627 | .{ ._, .vp_w, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 6628 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 6629 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 5945 | 6630 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5946 | 6631 | } }, |
| 5947 | 6632 | }, .{ |
| 5948 | | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, |
| 5949 | | .src_constraints = .{ .{ .scalar_int_is = .byte }, .any }, |
| 6633 | .required_features = .{ .avx, null, null, null }, |
| 6634 | .src_constraints = .{ |
| 6635 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 6636 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 6637 | }, |
| 5950 | 6638 | .patterns = &.{ |
| 5951 | | .{ .src = .{ .to_mem, .none } }, |
| 6639 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5952 | 6640 | }, |
| 5953 | 6641 | .extra_temps = .{ |
| 5954 | 6642 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5955 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 5956 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6643 | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, |
| 6644 | .unused, |
| 6645 | .unused, |
| 6646 | .unused, |
| 6647 | .unused, |
| 5957 | 6648 | .unused, |
| 5958 | 6649 | .unused, |
| 5959 | 6650 | .unused, |
| ... | ... | @@ -5961,28 +6652,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5961 | 6652 | .dst_temps = .{.mem}, |
| 5962 | 6653 | .clobbers = .{ .eflags = true }, |
| 5963 | 6654 | .each = .{ .once = &.{ |
| 5964 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5965 | | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, |
| 5966 | | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| 5967 | | .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ }, |
| 5968 | | .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ }, |
| 5969 | | .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, |
| 5970 | | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| 5971 | | .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ }, |
| 5972 | | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ }, |
| 5973 | | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 5974 | | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 6655 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6656 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6657 | .{ ._, .vp_w, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 6658 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6659 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6660 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5975 | 6661 | } }, |
| 5976 | 6662 | }, .{ |
| 5977 | | .required_features = .{ .slow_incdec, null, null, null }, |
| 5978 | | .src_constraints = .{ .{ .scalar_int_is = .byte }, .any }, |
| 6663 | .required_features = .{ .sse4_1, null, null, null }, |
| 6664 | .src_constraints = .{ |
| 6665 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 6666 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, |
| 6667 | }, |
| 5979 | 6668 | .patterns = &.{ |
| 5980 | | .{ .src = .{ .to_mem, .none } }, |
| 6669 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5981 | 6670 | }, |
| 5982 | 6671 | .extra_temps = .{ |
| 5983 | 6672 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5984 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 5985 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6673 | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, |
| 6674 | .unused, |
| 6675 | .unused, |
| 6676 | .unused, |
| 6677 | .unused, |
| 5986 | 6678 | .unused, |
| 5987 | 6679 | .unused, |
| 5988 | 6680 | .unused, |
| ... | ... | @@ -5990,26 +6682,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5990 | 6682 | .dst_temps = .{.mem}, |
| 5991 | 6683 | .clobbers = .{ .eflags = true }, |
| 5992 | 6684 | .each = .{ .once = &.{ |
| 5993 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5994 | | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, |
| 5995 | | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| 5996 | | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, |
| 5997 | | .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ }, |
| 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), ._, ._ }, |
| 6685 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6686 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6687 | .{ ._, .p_w, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6688 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6689 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6002 | 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 | 6698 | .patterns = &.{ |
| 6007 | | .{ .src = .{ .to_mem, .none } }, |
| 6699 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6008 | 6700 | }, |
| 6009 | 6701 | .extra_temps = .{ |
| 6010 | 6702 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6011 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6012 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6703 | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, |
| 6704 | .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, |
| 6705 | .unused, |
| 6706 | .unused, |
| 6707 | .unused, |
| 6013 | 6708 | .unused, |
| 6014 | 6709 | .unused, |
| 6015 | 6710 | .unused, |
| ... | ... | @@ -6017,85 +6712,157 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6017 | 6712 | .dst_temps = .{.mem}, |
| 6018 | 6713 | .clobbers = .{ .eflags = true }, |
| 6019 | 6714 | .each = .{ .once = &.{ |
| 6020 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6021 | | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, |
| 6022 | | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| 6023 | | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, |
| 6024 | | .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ }, |
| 6025 | | .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 6026 | | .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ }, |
| 6027 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| 6028 | | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 6029 | | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 6715 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6716 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6717 | .{ ._, ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ }, |
| 6718 | .{ ._, .p_w, .subus, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6719 | .{ ._, .p_w, .sub, .tmp2x, .tmp1x, ._, ._ }, |
| 6720 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp2x, ._, ._ }, |
| 6721 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6722 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6030 | 6723 | } }, |
| 6031 | 6724 | }, .{ |
| 6032 | | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, .slow_incdec, null }, |
| 6033 | | .src_constraints = .{ .{ .scalar_int_is = .word }, .any }, |
| 6725 | .required_features = .{ .cmov, null, null, null }, |
| 6726 | .src_constraints = .{ |
| 6727 | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, |
| 6728 | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, |
| 6729 | }, |
| 6034 | 6730 | .patterns = &.{ |
| 6035 | | .{ .src = .{ .to_mem, .none } }, |
| 6731 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6036 | 6732 | }, |
| 6037 | 6733 | .extra_temps = .{ |
| 6038 | 6734 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6039 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6040 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6041 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 6735 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| 6736 | .unused, |
| 6737 | .unused, |
| 6738 | .unused, |
| 6739 | .unused, |
| 6740 | .unused, |
| 6042 | 6741 | .unused, |
| 6043 | 6742 | .unused, |
| 6044 | 6743 | }, |
| 6045 | 6744 | .dst_temps = .{.mem}, |
| 6046 | 6745 | .clobbers = .{ .eflags = true }, |
| 6047 | 6746 | .each = .{ .once = &.{ |
| 6048 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6049 | | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, |
| 6050 | | .{ .@"0:", ._, .movzx, .tmp2d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, |
| 6051 | | .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ }, |
| 6052 | | .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ }, |
| 6053 | | .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ }, |
| 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), ._, ._ }, |
| 6747 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6748 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 6749 | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 6750 | .{ ._, ._ae, .cmov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 6751 | .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| 6752 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 6058 | 6753 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6059 | 6754 | } }, |
| 6060 | 6755 | }, .{ |
| 6061 | | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, |
| 6062 | | .src_constraints = .{ .{ .scalar_int_is = .word }, .any }, |
| 6756 | .src_constraints = .{ |
| 6757 | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, |
| 6758 | .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, |
| 6759 | }, |
| 6063 | 6760 | .patterns = &.{ |
| 6064 | | .{ .src = .{ .to_mem, .none } }, |
| 6761 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6065 | 6762 | }, |
| 6066 | 6763 | .extra_temps = .{ |
| 6067 | 6764 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6068 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6069 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6070 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 6765 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| 6766 | .unused, |
| 6767 | .unused, |
| 6768 | .unused, |
| 6769 | .unused, |
| 6770 | .unused, |
| 6071 | 6771 | .unused, |
| 6072 | 6772 | .unused, |
| 6073 | 6773 | }, |
| 6074 | 6774 | .dst_temps = .{.mem}, |
| 6075 | 6775 | .clobbers = .{ .eflags = true }, |
| 6076 | 6776 | .each = .{ .once = &.{ |
| 6077 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6078 | | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, |
| 6079 | | .{ .@"0:", ._, .movzx, .tmp2d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, |
| 6080 | | .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ }, |
| 6081 | | .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ }, |
| 6082 | | .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ }, |
| 6083 | | .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 6084 | | .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ }, |
| 6085 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, |
| 6086 | | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 6087 | | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 6777 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6778 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 6779 | .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 6780 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, |
| 6781 | .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 6782 | .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, |
| 6783 | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 6784 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6088 | 6785 | } }, |
| 6089 | 6786 | }, .{ |
| 6090 | | .required_features = .{ .bsf_bsr_0_clobbers_result, .slow_incdec, null, null }, |
| 6091 | | .src_constraints = .{ .{ .scalar_int_is = .word }, .any }, |
| 6787 | .required_features = .{ .avx, null, null, null }, |
| 6788 | .src_constraints = .{ |
| 6789 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 6790 | .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 6791 | }, |
| 6092 | 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 | 6859 | .extra_temps = .{ |
| 6096 | 6860 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6097 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6098 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6861 | .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } }, |
| 6862 | .unused, |
| 6863 | .unused, |
| 6864 | .unused, |
| 6865 | .unused, |
| 6099 | 6866 | .unused, |
| 6100 | 6867 | .unused, |
| 6101 | 6868 | .unused, |
| ... | ... | @@ -6103,28 +6870,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6103 | 6870 | .dst_temps = .{.mem}, |
| 6104 | 6871 | .clobbers = .{ .eflags = true }, |
| 6105 | 6872 | .each = .{ .once = &.{ |
| 6106 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6107 | | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, |
| 6108 | | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| 6109 | | .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ }, |
| 6110 | | .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ }, |
| 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), ._, ._ }, |
| 6873 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6874 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 6875 | .{ ._, .vp_d, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 6876 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 6877 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 6116 | 6878 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6117 | 6879 | } }, |
| 6118 | 6880 | }, .{ |
| 6119 | | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, |
| 6120 | | .src_constraints = .{ .{ .scalar_int_is = .word }, .any }, |
| 6881 | .required_features = .{ .avx, null, null, null }, |
| 6882 | .src_constraints = .{ |
| 6883 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 6884 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 6885 | }, |
| 6121 | 6886 | .patterns = &.{ |
| 6122 | | .{ .src = .{ .to_mem, .none } }, |
| 6887 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6123 | 6888 | }, |
| 6124 | 6889 | .extra_temps = .{ |
| 6125 | 6890 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6126 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6127 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6891 | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, |
| 6892 | .unused, |
| 6893 | .unused, |
| 6894 | .unused, |
| 6895 | .unused, |
| 6128 | 6896 | .unused, |
| 6129 | 6897 | .unused, |
| 6130 | 6898 | .unused, |
| ... | ... | @@ -6132,28 +6900,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6132 | 6900 | .dst_temps = .{.mem}, |
| 6133 | 6901 | .clobbers = .{ .eflags = true }, |
| 6134 | 6902 | .each = .{ .once = &.{ |
| 6135 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6136 | | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, |
| 6137 | | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| 6138 | | .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ }, |
| 6139 | | .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ }, |
| 6140 | | .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, |
| 6141 | | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| 6142 | | .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ }, |
| 6143 | | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ }, |
| 6144 | | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 6145 | | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 6903 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6904 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6905 | .{ ._, .vp_d, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 6906 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6907 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6908 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6146 | 6909 | } }, |
| 6147 | 6910 | }, .{ |
| 6148 | | .required_features = .{ .slow_incdec, null, null, null }, |
| 6149 | | .src_constraints = .{ .{ .scalar_int_is = .word }, .any }, |
| 6911 | .required_features = .{ .sse4_1, null, null, null }, |
| 6912 | .src_constraints = .{ |
| 6913 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 6914 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, |
| 6915 | }, |
| 6150 | 6916 | .patterns = &.{ |
| 6151 | | .{ .src = .{ .to_mem, .none } }, |
| 6917 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6152 | 6918 | }, |
| 6153 | 6919 | .extra_temps = .{ |
| 6154 | 6920 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6155 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6156 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6921 | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, |
| 6922 | .unused, |
| 6923 | .unused, |
| 6924 | .unused, |
| 6925 | .unused, |
| 6157 | 6926 | .unused, |
| 6158 | 6927 | .unused, |
| 6159 | 6928 | .unused, |
| ... | ... | @@ -6161,26 +6930,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6161 | 6930 | .dst_temps = .{.mem}, |
| 6162 | 6931 | .clobbers = .{ .eflags = true }, |
| 6163 | 6932 | .each = .{ .once = &.{ |
| 6164 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6165 | | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, |
| 6166 | | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| 6167 | | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, |
| 6168 | | .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ }, |
| 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), ._, ._ }, |
| 6933 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6934 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6935 | .{ ._, .p_d, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6936 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6937 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6173 | 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 | 6946 | .patterns = &.{ |
| 6178 | | .{ .src = .{ .to_mem, .none } }, |
| 6947 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6179 | 6948 | }, |
| 6180 | 6949 | .extra_temps = .{ |
| 6181 | 6950 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6182 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6183 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6951 | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, |
| 6952 | .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, |
| 6953 | .unused, |
| 6954 | .unused, |
| 6955 | .unused, |
| 6184 | 6956 | .unused, |
| 6185 | 6957 | .unused, |
| 6186 | 6958 | .unused, |
| ... | ... | @@ -6188,114 +6960,174 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6188 | 6960 | .dst_temps = .{.mem}, |
| 6189 | 6961 | .clobbers = .{ .eflags = true }, |
| 6190 | 6962 | .each = .{ .once = &.{ |
| 6191 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6192 | | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, |
| 6193 | | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| 6194 | | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, |
| 6195 | | .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ }, |
| 6196 | | .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 6197 | | .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ }, |
| 6198 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| 6199 | | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 6200 | | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 6963 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6964 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6965 | .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 6966 | .{ ._, .p_d, .cmpgt, .tmp1x, .tmp2x, ._, ._ }, |
| 6967 | .{ ._, .p_, .@"and", .tmp2x, .tmp1x, ._, ._ }, |
| 6968 | .{ ._, .p_, .andn, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 6969 | .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ }, |
| 6970 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 6971 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6972 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6201 | 6973 | } }, |
| 6202 | 6974 | }, .{ |
| 6203 | | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, .slow_incdec, null }, |
| 6204 | | .src_constraints = .{ .{ .scalar_int_is = .dword }, .any }, |
| 6975 | .required_features = .{ .cmov, null, null, null }, |
| 6976 | .src_constraints = .{ |
| 6977 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| 6978 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| 6979 | }, |
| 6205 | 6980 | .patterns = &.{ |
| 6206 | | .{ .src = .{ .to_mem, .none } }, |
| 6981 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6207 | 6982 | }, |
| 6208 | 6983 | .extra_temps = .{ |
| 6209 | 6984 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6210 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6211 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6212 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 6985 | .{ .type = .i32, .kind = .{ .rc = .general_purpose } }, |
| 6986 | .unused, |
| 6987 | .unused, |
| 6988 | .unused, |
| 6989 | .unused, |
| 6990 | .unused, |
| 6213 | 6991 | .unused, |
| 6214 | 6992 | .unused, |
| 6215 | 6993 | }, |
| 6216 | 6994 | .dst_temps = .{.mem}, |
| 6217 | 6995 | .clobbers = .{ .eflags = true }, |
| 6218 | 6996 | .each = .{ .once = &.{ |
| 6219 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6220 | | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, |
| 6221 | | .{ .@"0:", ._, .mov, .tmp2d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, |
| 6222 | | .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ }, |
| 6223 | | .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ }, |
| 6224 | | .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ }, |
| 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), ._, ._ }, |
| 6997 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 6998 | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 6999 | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 7000 | .{ ._, ._ge, .cmov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 7001 | .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ }, |
| 7002 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| 6229 | 7003 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6230 | 7004 | } }, |
| 6231 | 7005 | }, .{ |
| 6232 | | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, |
| 6233 | | .src_constraints = .{ .{ .scalar_int_is = .dword }, .any }, |
| 7006 | .src_constraints = .{ |
| 7007 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| 7008 | .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, |
| 7009 | }, |
| 6234 | 7010 | .patterns = &.{ |
| 6235 | | .{ .src = .{ .to_mem, .none } }, |
| 7011 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6236 | 7012 | }, |
| 6237 | 7013 | .extra_temps = .{ |
| 6238 | 7014 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6239 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6240 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6241 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 7015 | .{ .type = .i32, .kind = .{ .rc = .general_purpose } }, |
| 7016 | .unused, |
| 7017 | .unused, |
| 7018 | .unused, |
| 7019 | .unused, |
| 7020 | .unused, |
| 6242 | 7021 | .unused, |
| 6243 | 7022 | .unused, |
| 6244 | 7023 | }, |
| 6245 | 7024 | .dst_temps = .{.mem}, |
| 6246 | 7025 | .clobbers = .{ .eflags = true }, |
| 6247 | 7026 | .each = .{ .once = &.{ |
| 6248 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6249 | | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, |
| 6250 | | .{ .@"0:", ._, .mov, .tmp2d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, |
| 6251 | | .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ }, |
| 6252 | | .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ }, |
| 6253 | | .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ }, |
| 6254 | | .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 6255 | | .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ }, |
| 6256 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, |
| 6257 | | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 6258 | | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 7027 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7028 | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 7029 | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 7030 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, |
| 7031 | .{ ._, ._, .mov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 7032 | .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ }, |
| 7033 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| 7034 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6259 | 7035 | } }, |
| 6260 | 7036 | }, .{ |
| 6261 | | .required_features = .{ .bsf_bsr_0_clobbers_result, .slow_incdec, null, null }, |
| 6262 | | .src_constraints = .{ .{ .scalar_int_is = .dword }, .any }, |
| 7037 | .required_features = .{ .avx, null, null, null }, |
| 7038 | .src_constraints = .{ |
| 7039 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 7040 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 7041 | }, |
| 6263 | 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 | 7077 | .extra_temps = .{ |
| 6267 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6268 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6269 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 7078 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 7079 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| 7080 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 7081 | .unused, |
| 7082 | .unused, |
| 7083 | .unused, |
| 6270 | 7084 | .unused, |
| 6271 | 7085 | .unused, |
| 6272 | 7086 | .unused, |
| 6273 | 7087 | }, |
| 6274 | | .dst_temps = .{.mem}, |
| 6275 | | .clobbers = .{ .eflags = true }, |
| 7088 | .dst_temps = .{.{ .rc = .sse }}, |
| 6276 | 7089 | .each = .{ .once = &.{ |
| 6277 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6278 | | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, |
| 6279 | | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| 6280 | | .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ }, |
| 6281 | | .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ }, |
| 6282 | | .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, |
| 6283 | | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| 6284 | | .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ }, |
| 6285 | | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ }, |
| 6286 | | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 6287 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7090 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 7091 | .{ ._, ._dqa, .mov, .dst0x, .lea(.xword, .tmp0), ._, ._ }, |
| 7092 | .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ }, |
| 7093 | .{ ._, .p_, .xor, .dst0x, .src1x, ._, ._ }, |
| 7094 | .{ ._, .p_, .xor, .tmp2x, .src0x, ._, ._ }, |
| 7095 | .{ ._, .p_d, .cmpgt, .dst0x, .tmp2x, ._, ._ }, |
| 7096 | .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ }, |
| 7097 | .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ }, |
| 7098 | .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ }, |
| 6288 | 7099 | } }, |
| 6289 | 7100 | }, .{ |
| 6290 | | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, |
| 6291 | | .src_constraints = .{ .{ .scalar_int_is = .dword }, .any }, |
| 7101 | .required_features = .{ .avx2, null, null, null }, |
| 7102 | .src_constraints = .{ |
| 7103 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, |
| 7104 | .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, |
| 7105 | }, |
| 6292 | 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 | 7124 | .extra_temps = .{ |
| 6296 | 7125 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6297 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6298 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 7126 | .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } }, |
| 7127 | .unused, |
| 7128 | .unused, |
| 7129 | .unused, |
| 7130 | .unused, |
| 6299 | 7131 | .unused, |
| 6300 | 7132 | .unused, |
| 6301 | 7133 | .unused, |
| ... | ... | @@ -6303,28 +7135,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6303 | 7135 | .dst_temps = .{.mem}, |
| 6304 | 7136 | .clobbers = .{ .eflags = true }, |
| 6305 | 7137 | .each = .{ .once = &.{ |
| 6306 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6307 | | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, |
| 6308 | | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| 6309 | | .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ }, |
| 6310 | | .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ }, |
| 6311 | | .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, |
| 6312 | | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| 6313 | | .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ }, |
| 6314 | | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ }, |
| 6315 | | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 6316 | | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 7138 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7139 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 7140 | .{ ._, .vp_d, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 7141 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 7142 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 7143 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6317 | 7144 | } }, |
| 6318 | 7145 | }, .{ |
| 6319 | | .required_features = .{ .slow_incdec, null, null, null }, |
| 6320 | | .src_constraints = .{ .{ .scalar_int_is = .dword }, .any }, |
| 7146 | .required_features = .{ .avx, null, null, null }, |
| 7147 | .src_constraints = .{ |
| 7148 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 7149 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 7150 | }, |
| 6321 | 7151 | .patterns = &.{ |
| 6322 | | .{ .src = .{ .to_mem, .none } }, |
| 7152 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6323 | 7153 | }, |
| 6324 | 7154 | .extra_temps = .{ |
| 6325 | 7155 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6326 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6327 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 7156 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 7157 | .unused, |
| 7158 | .unused, |
| 7159 | .unused, |
| 7160 | .unused, |
| 6328 | 7161 | .unused, |
| 6329 | 7162 | .unused, |
| 6330 | 7163 | .unused, |
| ... | ... | @@ -6332,26 +7165,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6332 | 7165 | .dst_temps = .{.mem}, |
| 6333 | 7166 | .clobbers = .{ .eflags = true }, |
| 6334 | 7167 | .each = .{ .once = &.{ |
| 6335 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6336 | | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, |
| 6337 | | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| 6338 | | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, |
| 6339 | | .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ }, |
| 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), ._, ._ }, |
| 7168 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7169 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7170 | .{ ._, .vp_d, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 7171 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 7172 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6344 | 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 | 7181 | .patterns = &.{ |
| 6349 | | .{ .src = .{ .to_mem, .none } }, |
| 7182 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6350 | 7183 | }, |
| 6351 | 7184 | .extra_temps = .{ |
| 6352 | 7185 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6353 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6354 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 7186 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 7187 | .unused, |
| 7188 | .unused, |
| 7189 | .unused, |
| 7190 | .unused, |
| 6355 | 7191 | .unused, |
| 6356 | 7192 | .unused, |
| 6357 | 7193 | .unused, |
| ... | ... | @@ -6359,85 +7195,99 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6359 | 7195 | .dst_temps = .{.mem}, |
| 6360 | 7196 | .clobbers = .{ .eflags = true }, |
| 6361 | 7197 | .each = .{ .once = &.{ |
| 6362 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6363 | | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, |
| 6364 | | .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ }, |
| 6365 | | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, |
| 6366 | | .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ }, |
| 6367 | | .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 6368 | | .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ }, |
| 6369 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| 6370 | | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 6371 | | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 7198 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7199 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7200 | .{ ._, .p_d, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7201 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 7202 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 7203 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6372 | 7204 | } }, |
| 6373 | 7205 | }, .{ |
| 6374 | | .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, .slow_incdec }, |
| 6375 | | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, |
| 7206 | .required_features = .{ .sse2, null, null, null }, |
| 7207 | .src_constraints = .{ |
| 7208 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 7209 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, |
| 7210 | }, |
| 6376 | 7211 | .patterns = &.{ |
| 6377 | | .{ .src = .{ .to_mem, .none } }, |
| 7212 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6378 | 7213 | }, |
| 6379 | 7214 | .extra_temps = .{ |
| 6380 | 7215 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6381 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6382 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 6383 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 7216 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| 7217 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 7218 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 7219 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 7220 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 7221 | .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, |
| 6384 | 7222 | .unused, |
| 6385 | 7223 | .unused, |
| 6386 | 7224 | }, |
| 6387 | 7225 | .dst_temps = .{.mem}, |
| 6388 | 7226 | .clobbers = .{ .eflags = true }, |
| 6389 | 7227 | .each = .{ .once = &.{ |
| 6390 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6391 | | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, |
| 6392 | | .{ .@"0:", ._, .mov, .tmp2q, .ua(.src0, .add_umax), ._, ._ }, |
| 6393 | | .{ ._, ._, .@"and", .tmp2q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, |
| 6394 | | .{ ._, ._r, .bs, .tmp2q, .tmp2q, ._, ._ }, |
| 6395 | | .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ }, |
| 6396 | | .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 6397 | | .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ }, |
| 6398 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, |
| 6399 | | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 7228 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 7229 | .{ ._, ._dqa, .mov, .tmp2x, .lea(.xword, .tmp0), ._, ._ }, |
| 7230 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7231 | .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7232 | .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7233 | .{ ._, ._dqa, .mov, .tmp5x, .tmp3x, ._, ._ }, |
| 7234 | .{ ._, ._dqa, .mov, .tmp6x, .tmp4x, ._, ._ }, |
| 7235 | .{ ._, .p_, .xor, .tmp5x, .tmp2x, ._, ._ }, |
| 7236 | .{ ._, .p_, .xor, .tmp6x, .tmp2x, ._, ._ }, |
| 7237 | .{ ._, .p_d, .cmpgt, .tmp5x, .tmp6x, ._, ._ }, |
| 7238 | .{ ._, .p_, .@"and", .tmp4x, .tmp5x, ._, ._ }, |
| 7239 | .{ ._, .p_, .andn, .tmp5x, .tmp3x, ._, ._ }, |
| 7240 | .{ ._, .p_, .@"or", .tmp4x, .tmp5x, ._, ._ }, |
| 7241 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp4x, ._, ._ }, |
| 7242 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6400 | 7243 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6401 | 7244 | } }, |
| 6402 | 7245 | }, .{ |
| 6403 | | .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, null }, |
| 6404 | | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, |
| 7246 | .required_features = .{ .cmov, null, null, null }, |
| 7247 | .src_constraints = .{ |
| 7248 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| 7249 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| 7250 | }, |
| 6405 | 7251 | .patterns = &.{ |
| 6406 | | .{ .src = .{ .to_mem, .none } }, |
| 7252 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6407 | 7253 | }, |
| 6408 | 7254 | .extra_temps = .{ |
| 6409 | 7255 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6410 | 7256 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6411 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 6412 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 7257 | .unused, |
| 7258 | .unused, |
| 7259 | .unused, |
| 7260 | .unused, |
| 7261 | .unused, |
| 6413 | 7262 | .unused, |
| 6414 | 7263 | .unused, |
| 6415 | 7264 | }, |
| 6416 | 7265 | .dst_temps = .{.mem}, |
| 6417 | 7266 | .clobbers = .{ .eflags = true }, |
| 6418 | 7267 | .each = .{ .once = &.{ |
| 6419 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6420 | | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, |
| 6421 | | .{ .@"0:", ._, .mov, .tmp2q, .ua(.src0, .add_umax), ._, ._ }, |
| 6422 | | .{ ._, ._, .@"and", .tmp2q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, |
| 6423 | | .{ ._, ._r, .bs, .tmp2q, .tmp2q, ._, ._ }, |
| 6424 | | .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ }, |
| 6425 | | .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 6426 | | .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ }, |
| 6427 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, |
| 6428 | | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 6429 | | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 7268 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7269 | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 7270 | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 7271 | .{ ._, ._ae, .cmov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 7272 | .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ }, |
| 7273 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| 7274 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6430 | 7275 | } }, |
| 6431 | 7276 | }, .{ |
| 6432 | | .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, .slow_incdec, null }, |
| 6433 | | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, |
| 7277 | .src_constraints = .{ |
| 7278 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| 7279 | .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, |
| 7280 | }, |
| 6434 | 7281 | .patterns = &.{ |
| 6435 | | .{ .src = .{ .to_mem, .none } }, |
| 7282 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6436 | 7283 | }, |
| 6437 | 7284 | .extra_temps = .{ |
| 6438 | 7285 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6439 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 6440 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 7286 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 7287 | .unused, |
| 7288 | .unused, |
| 7289 | .unused, |
| 7290 | .unused, |
| 6441 | 7291 | .unused, |
| 6442 | 7292 | .unused, |
| 6443 | 7293 | .unused, |
| ... | ... | @@ -6445,57 +7295,91 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6445 | 7295 | .dst_temps = .{.mem}, |
| 6446 | 7296 | .clobbers = .{ .eflags = true }, |
| 6447 | 7297 | .each = .{ .once = &.{ |
| 6448 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6449 | | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| 6450 | | .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, |
| 6451 | | .{ ._, ._r, .bs, .tmp1q, .tmp1q, ._, ._ }, |
| 6452 | | .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ }, |
| 6453 | | .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, |
| 6454 | | .{ ._, ._c, .st, ._, ._, ._, ._ }, |
| 6455 | | .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ }, |
| 6456 | | .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ }, |
| 6457 | | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 7298 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7299 | .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 7300 | .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 7301 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, |
| 7302 | .{ ._, ._, .mov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 7303 | .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ }, |
| 7304 | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| 6458 | 7305 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6459 | 7306 | } }, |
| 6460 | 7307 | }, .{ |
| 6461 | | .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null }, |
| 6462 | | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, |
| 7308 | .required_features = .{ .avx, null, null, null }, |
| 7309 | .src_constraints = .{ |
| 7310 | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| 7311 | .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| 7312 | }, |
| 6463 | 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 | 7334 | .extra_temps = .{ |
| 6467 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6468 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 6469 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 7335 | .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } }, |
| 7336 | .unused, |
| 7337 | .unused, |
| 7338 | .unused, |
| 7339 | .unused, |
| 7340 | .unused, |
| 6470 | 7341 | .unused, |
| 6471 | 7342 | .unused, |
| 6472 | 7343 | .unused, |
| 6473 | 7344 | }, |
| 6474 | | .dst_temps = .{.mem}, |
| 6475 | | .clobbers = .{ .eflags = true }, |
| 7345 | .dst_temps = .{.{ .ref = .src0 }}, |
| 6476 | 7346 | .each = .{ .once = &.{ |
| 6477 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6478 | | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| 6479 | | .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, |
| 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", ._, ._, ._ }, |
| 7347 | .{ ._, ._dqa, .mov, .tmp0x, .src0x, ._, ._ }, |
| 7348 | .{ ._, .p_q, .cmpgt, .tmp0x, .src1x, ._, ._ }, |
| 7349 | .{ ._, .p_b, .blendv, .dst0x, .src1x, .tmp0x, ._ }, |
| 6488 | 7350 | } }, |
| 6489 | 7351 | }, .{ |
| 6490 | | .required_features = .{ .@"64bit", .slow_incdec, null, null }, |
| 6491 | | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, |
| 7352 | .required_features = .{ .avx2, null, null, null }, |
| 7353 | .src_constraints = .{ |
| 7354 | .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }, |
| 7355 | .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }, |
| 7356 | }, |
| 6492 | 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 | 7376 | .extra_temps = .{ |
| 6496 | 7377 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6497 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 6498 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 7378 | .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } }, |
| 7379 | .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } }, |
| 7380 | .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } }, |
| 7381 | .unused, |
| 7382 | .unused, |
| 6499 | 7383 | .unused, |
| 6500 | 7384 | .unused, |
| 6501 | 7385 | .unused, |
| ... | ... | @@ -6503,27 +7387,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6503 | 7387 | .dst_temps = .{.mem}, |
| 6504 | 7388 | .clobbers = .{ .eflags = true }, |
| 6505 | 7389 | .each = .{ .once = &.{ |
| 6506 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6507 | | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| 6508 | | .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, |
| 6509 | | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, |
| 6510 | | .{ ._, ._r, .bs, .tmp2q, .tmp1q, ._, ._ }, |
| 6511 | | .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 6512 | | .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ }, |
| 6513 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| 6514 | | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 7390 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7391 | .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 7392 | .{ ._, .v_dqa, .mov, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, |
| 7393 | .{ ._, .vp_q, .cmpgt, .tmp3y, .tmp1y, .tmp2y, ._ }, |
| 7394 | .{ ._, .vp_b, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y }, |
| 7395 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 7396 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 6515 | 7397 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6516 | 7398 | } }, |
| 6517 | 7399 | }, .{ |
| 6518 | | .required_features = .{ .@"64bit", null, null, null }, |
| 6519 | | .src_constraints = .{ .{ .scalar_int_is = .qword }, .any }, |
| 7400 | .required_features = .{ .avx, null, null, null }, |
| 7401 | .src_constraints = .{ |
| 7402 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| 7403 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| 7404 | }, |
| 6520 | 7405 | .patterns = &.{ |
| 6521 | | .{ .src = .{ .to_mem, .none } }, |
| 7406 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6522 | 7407 | }, |
| 6523 | 7408 | .extra_temps = .{ |
| 6524 | 7409 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6525 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6526 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 7410 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| 7411 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| 7412 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| 7413 | .unused, |
| 7414 | .unused, |
| 6527 | 7415 | .unused, |
| 6528 | 7416 | .unused, |
| 6529 | 7417 | .unused, |
| ... | ... | @@ -6531,895 +7419,7323 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6531 | 7419 | .dst_temps = .{.mem}, |
| 6532 | 7420 | .clobbers = .{ .eflags = true }, |
| 6533 | 7421 | .each = .{ .once = &.{ |
| 6534 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6535 | | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| 6536 | | .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ }, |
| 6537 | | .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ }, |
| 6538 | | .{ ._, ._r, .bs, .tmp2q, .tmp1q, ._, ._ }, |
| 6539 | | .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ }, |
| 6540 | | .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ }, |
| 6541 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ }, |
| 6542 | | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 6543 | | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 7422 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7423 | .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7424 | .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7425 | .{ ._, .vp_q, .cmpgt, .tmp3x, .tmp1x, .tmp2x, ._ }, |
| 7426 | .{ ._, .vp_b, .blendv, .tmp1x, .tmp1x, .tmp2x, .tmp3x }, |
| 7427 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 7428 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 7429 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6544 | 7430 | } }, |
| 6545 | 7431 | }, .{ |
| 6546 | | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, |
| 6547 | | .dst_constraints = .{.{ .scalar_int_is = .byte }}, |
| 6548 | | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| 7432 | .required_features = .{ .sse4_2, null, null, null }, |
| 7433 | .src_constraints = .{ |
| 7434 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| 7435 | .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, |
| 7436 | }, |
| 6549 | 7437 | .patterns = &.{ |
| 6550 | | .{ .src = .{ .to_mem, .none } }, |
| 7438 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6551 | 7439 | }, |
| 6552 | 7440 | .extra_temps = .{ |
| 6553 | 7441 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6554 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 6555 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6556 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 6557 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 7442 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| 7443 | .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, |
| 7444 | .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } }, |
| 7445 | .unused, |
| 7446 | .unused, |
| 7447 | .unused, |
| 7448 | .unused, |
| 6558 | 7449 | .unused, |
| 6559 | 7450 | }, |
| 6560 | 7451 | .dst_temps = .{.mem}, |
| 6561 | 7452 | .clobbers = .{ .eflags = true }, |
| 6562 | 7453 | .each = .{ .once = &.{ |
| 6563 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6564 | | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| 6565 | | .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, |
| 6566 | | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| 6567 | | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| 6568 | | .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, |
| 6569 | | .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, |
| 6570 | | .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, |
| 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), ._, ._ }, |
| 7454 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7455 | .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7456 | .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7457 | .{ ._, ._dqa, .mov, .tmp3x, .tmp1x, ._, ._ }, |
| 7458 | .{ ._, .p_q, .cmpgt, .tmp3x, .tmp2x, ._, ._ }, |
| 7459 | .{ ._, .p_b, .blendv, .tmp1x, .tmp2x, .tmp3x, ._ }, |
| 7460 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 7461 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6580 | 7462 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6581 | 7463 | } }, |
| 6582 | 7464 | }, .{ |
| 6583 | | .required_features = .{ .@"64bit", .lzcnt, null, null }, |
| 6584 | | .dst_constraints = .{.{ .scalar_int_is = .byte }}, |
| 6585 | | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| 7465 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 7466 | .src_constraints = .{ |
| 7467 | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, |
| 7468 | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, |
| 7469 | }, |
| 6586 | 7470 | .patterns = &.{ |
| 6587 | | .{ .src = .{ .to_mem, .none } }, |
| 7471 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6588 | 7472 | }, |
| 6589 | 7473 | .extra_temps = .{ |
| 6590 | 7474 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6591 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 6592 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6593 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 6594 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 7475 | .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, |
| 7476 | .unused, |
| 7477 | .unused, |
| 7478 | .unused, |
| 7479 | .unused, |
| 7480 | .unused, |
| 7481 | .unused, |
| 6595 | 7482 | .unused, |
| 6596 | 7483 | }, |
| 6597 | 7484 | .dst_temps = .{.mem}, |
| 6598 | 7485 | .clobbers = .{ .eflags = true }, |
| 6599 | 7486 | .each = .{ .once = &.{ |
| 6600 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6601 | | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| 6602 | | .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, |
| 6603 | | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| 6604 | | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| 6605 | | .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, |
| 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), ._, ._ }, |
| 7487 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7488 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 7489 | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7490 | .{ ._, ._ge, .cmov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7491 | .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| 7492 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 6616 | 7493 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6617 | 7494 | } }, |
| 6618 | 7495 | }, .{ |
| 6619 | 7496 | .required_features = .{ .@"64bit", null, null, null }, |
| 6620 | | .dst_constraints = .{.{ .scalar_int_is = .byte }}, |
| 6621 | | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| 7497 | .src_constraints = .{ |
| 7498 | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, |
| 7499 | .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, |
| 7500 | }, |
| 6622 | 7501 | .patterns = &.{ |
| 6623 | | .{ .src = .{ .to_mem, .none } }, |
| 7502 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6624 | 7503 | }, |
| 6625 | 7504 | .extra_temps = .{ |
| 6626 | 7505 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6627 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 6628 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6629 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 7506 | .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, |
| 7507 | .unused, |
| 7508 | .unused, |
| 7509 | .unused, |
| 7510 | .unused, |
| 7511 | .unused, |
| 6630 | 7512 | .unused, |
| 6631 | 7513 | .unused, |
| 6632 | 7514 | }, |
| 6633 | 7515 | .dst_temps = .{.mem}, |
| 6634 | 7516 | .clobbers = .{ .eflags = true }, |
| 6635 | 7517 | .each = .{ .once = &.{ |
| 6636 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6637 | | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| 6638 | | .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, |
| 6639 | | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| 6640 | | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| 6641 | | .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ }, |
| 6642 | | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 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), ._, ._ }, |
| 7518 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7519 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 7520 | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7521 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, |
| 7522 | .{ ._, ._, .mov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7523 | .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| 7524 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 6652 | 7525 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6653 | 7526 | } }, |
| 6654 | 7527 | }, .{ |
| 6655 | | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, |
| 6656 | | .dst_constraints = .{.{ .scalar_int_is = .byte }}, |
| 6657 | | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| 7528 | .required_features = .{ .avx, null, null, null }, |
| 7529 | .src_constraints = .{ |
| 7530 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| 7531 | .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| 7532 | }, |
| 6658 | 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 | 7538 | .extra_temps = .{ |
| 6662 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6663 | 7539 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 6664 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6665 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 6666 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 7540 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| 7541 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 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 | 7639 | .unused, |
| 6668 | 7640 | }, |
| 6669 | 7641 | .dst_temps = .{.mem}, |
| 6670 | 7642 | .clobbers = .{ .eflags = true }, |
| 6671 | 7643 | .each = .{ .once = &.{ |
| 6672 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6673 | | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| 6674 | | .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, |
| 6675 | | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| 6676 | | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| 6677 | | .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, |
| 6678 | | .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, |
| 6679 | | .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, |
| 6680 | | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, |
| 6681 | | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, |
| 6682 | | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, |
| 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), ._, ._ }, |
| 7644 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 7645 | .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ }, |
| 7646 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7647 | .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 7648 | .{ ._, .v_dqa, .mov, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, |
| 7649 | .{ ._, .vp_, .xor, .tmp5y, .tmp3y, .tmp2y, ._ }, |
| 7650 | .{ ._, .vp_, .xor, .tmp6y, .tmp4y, .tmp2y, ._ }, |
| 7651 | .{ ._, .vp_q, .cmpgt, .tmp5y, .tmp5y, .tmp6y, ._ }, |
| 7652 | .{ ._, .vp_b, .blendv, .tmp3y, .tmp3y, .tmp4y, .tmp5y }, |
| 7653 | .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ }, |
| 7654 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 6689 | 7655 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6690 | 7656 | } }, |
| 6691 | 7657 | }, .{ |
| 6692 | | .required_features = .{ .@"64bit", .lzcnt, null, null }, |
| 6693 | | .dst_constraints = .{.{ .scalar_int_is = .byte }}, |
| 6694 | | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| 7658 | .required_features = .{ .avx, null, null, null }, |
| 7659 | .src_constraints = .{ |
| 7660 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| 7661 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| 7662 | }, |
| 6695 | 7663 | .patterns = &.{ |
| 6696 | | .{ .src = .{ .to_mem, .none } }, |
| 7664 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6697 | 7665 | }, |
| 6698 | 7666 | .extra_temps = .{ |
| 6699 | 7667 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6700 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 6701 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6702 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 6703 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 7668 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| 7669 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 7670 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 7671 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 7672 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 7673 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 7674 | .unused, |
| 6704 | 7675 | .unused, |
| 6705 | 7676 | }, |
| 6706 | 7677 | .dst_temps = .{.mem}, |
| 6707 | 7678 | .clobbers = .{ .eflags = true }, |
| 6708 | 7679 | .each = .{ .once = &.{ |
| 6709 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6710 | | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| 6711 | | .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, |
| 6712 | | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| 6713 | | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| 6714 | | .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, |
| 6715 | | .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, |
| 6716 | | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, |
| 6717 | | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, |
| 6718 | | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, |
| 6719 | | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 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), ._, ._ }, |
| 7680 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 7681 | .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, |
| 7682 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7683 | .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7684 | .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7685 | .{ ._, .vp_, .xor, .tmp5x, .tmp3x, .tmp2x, ._ }, |
| 7686 | .{ ._, .vp_, .xor, .tmp6x, .tmp4x, .tmp2x, ._ }, |
| 7687 | .{ ._, .vp_q, .cmpgt, .tmp5x, .tmp5x, .tmp6x, ._ }, |
| 7688 | .{ ._, .vp_b, .blendv, .tmp3x, .tmp3x, .tmp4x, .tmp5x }, |
| 7689 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, |
| 7690 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6725 | 7691 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6726 | 7692 | } }, |
| 6727 | 7693 | }, .{ |
| 6728 | | .required_features = .{ .@"64bit", null, null, null }, |
| 6729 | | .dst_constraints = .{.{ .scalar_int_is = .byte }}, |
| 6730 | | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| 7694 | .required_features = .{ .sse4_2, null, null, null }, |
| 7695 | .src_constraints = .{ |
| 7696 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| 7697 | .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, |
| 7698 | }, |
| 6731 | 7699 | .patterns = &.{ |
| 6732 | | .{ .src = .{ .to_mem, .none } }, |
| 7700 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6733 | 7701 | }, |
| 6734 | 7702 | .extra_temps = .{ |
| 6735 | 7703 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6736 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 6737 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6738 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 7704 | .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } }, |
| 7705 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 7706 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 7707 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 7708 | .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } }, |
| 7709 | .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, |
| 6739 | 7710 | .unused, |
| 6740 | 7711 | .unused, |
| 6741 | 7712 | }, |
| 6742 | 7713 | .dst_temps = .{.mem}, |
| 6743 | 7714 | .clobbers = .{ .eflags = true }, |
| 6744 | 7715 | .each = .{ .once = &.{ |
| 6745 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6746 | | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| 6747 | | .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, |
| 6748 | | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| 6749 | | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| 6750 | | .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ }, |
| 6751 | | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 6752 | | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, |
| 6753 | | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, |
| 6754 | | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, |
| 6755 | | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 6756 | | .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, |
| 6757 | | .{ ._, ._, .neg, .tmp3b, ._, ._, ._ }, |
| 6758 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, |
| 6759 | | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, |
| 6760 | | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 7716 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 7717 | .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, |
| 7718 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7719 | .{ .@"0:", ._dqa, .mov, .tmp5x, .tmp2x, ._, ._ }, |
| 7720 | .{ ._, ._dqa, .mov, .tmp6x, .tmp2x, ._, ._ }, |
| 7721 | .{ ._, ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7722 | .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7723 | .{ ._, .p_, .xor, .tmp5x, .tmp3x, ._, ._ }, |
| 7724 | .{ ._, .p_, .xor, .tmp6x, .tmp4x, ._, ._ }, |
| 7725 | .{ ._, .p_q, .cmpgt, .tmp5x, .tmp6x, ._, ._ }, |
| 7726 | .{ ._, .p_b, .blendv, .tmp3x, .tmp4x, .tmp5x, ._ }, |
| 7727 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, |
| 7728 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 6761 | 7729 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6762 | 7730 | } }, |
| 6763 | 7731 | }, .{ |
| 6764 | | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, |
| 6765 | | .dst_constraints = .{.{ .scalar_int_is = .word }}, |
| 6766 | | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| 7732 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 7733 | .src_constraints = .{ |
| 7734 | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, |
| 7735 | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, |
| 7736 | }, |
| 6767 | 7737 | .patterns = &.{ |
| 6768 | | .{ .src = .{ .to_mem, .none } }, |
| 7738 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6769 | 7739 | }, |
| 6770 | 7740 | .extra_temps = .{ |
| 6771 | 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 | 7742 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 6776 | 7743 | .unused, |
| 7744 | .unused, |
| 7745 | .unused, |
| 7746 | .unused, |
| 7747 | .unused, |
| 7748 | .unused, |
| 7749 | .unused, |
| 6777 | 7750 | }, |
| 6778 | 7751 | .dst_temps = .{.mem}, |
| 6779 | 7752 | .clobbers = .{ .eflags = true }, |
| 6780 | 7753 | .each = .{ .once = &.{ |
| 6781 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6782 | | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| 6783 | | .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, |
| 6784 | | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| 6785 | | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| 6786 | | .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, |
| 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), ._, ._ }, |
| 7754 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7755 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 7756 | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7757 | .{ ._, ._ae, .cmov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7758 | .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| 7759 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 6798 | 7760 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6799 | 7761 | } }, |
| 6800 | 7762 | }, .{ |
| 6801 | | .required_features = .{ .@"64bit", .lzcnt, null, null }, |
| 6802 | | .dst_constraints = .{.{ .scalar_int_is = .word }}, |
| 6803 | | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| 7763 | .required_features = .{ .@"64bit", null, null, null }, |
| 7764 | .src_constraints = .{ |
| 7765 | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, |
| 7766 | .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, |
| 7767 | }, |
| 6804 | 7768 | .patterns = &.{ |
| 6805 | | .{ .src = .{ .to_mem, .none } }, |
| 7769 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6806 | 7770 | }, |
| 6807 | 7771 | .extra_temps = .{ |
| 6808 | 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 | 7773 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 6813 | 7774 | .unused, |
| 7775 | .unused, |
| 7776 | .unused, |
| 7777 | .unused, |
| 7778 | .unused, |
| 7779 | .unused, |
| 7780 | .unused, |
| 6814 | 7781 | }, |
| 6815 | 7782 | .dst_temps = .{.mem}, |
| 6816 | 7783 | .clobbers = .{ .eflags = true }, |
| 6817 | 7784 | .each = .{ .once = &.{ |
| 6818 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6819 | | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| 6820 | | .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, |
| 6821 | | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| 6822 | | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| 6823 | | .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, |
| 6824 | | .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, |
| 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), ._, ._ }, |
| 7785 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7786 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 7787 | .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7788 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, |
| 7789 | .{ ._, ._, .mov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7790 | .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| 7791 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 6834 | 7792 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6835 | 7793 | } }, |
| 6836 | 7794 | }, .{ |
| 6837 | | .required_features = .{ .@"64bit", null, null, null }, |
| 6838 | | .dst_constraints = .{.{ .scalar_int_is = .word }}, |
| 6839 | | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, |
| 7795 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 7796 | .src_constraints = .{ .any_scalar_signed_int, .any_scalar_signed_int }, |
| 6840 | 7797 | .patterns = &.{ |
| 6841 | | .{ .src = .{ .to_mem, .none } }, |
| 7798 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6842 | 7799 | }, |
| 6843 | 7800 | .extra_temps = .{ |
| 6844 | 7801 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6845 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 6846 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6847 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 7802 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| 7803 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| 7804 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| 7805 | .unused, |
| 7806 | .unused, |
| 7807 | .unused, |
| 6848 | 7808 | .unused, |
| 6849 | 7809 | .unused, |
| 6850 | 7810 | }, |
| 6851 | 7811 | .dst_temps = .{.mem}, |
| 6852 | 7812 | .clobbers = .{ .eflags = true }, |
| 6853 | 7813 | .each = .{ .once = &.{ |
| 6854 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6855 | | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| 6856 | | .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, |
| 6857 | | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| 6858 | | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| 6859 | | .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ }, |
| 6860 | | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 6861 | | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, |
| 6862 | | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, |
| 6863 | | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, |
| 6864 | | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 6865 | | .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, |
| 6866 | | .{ ._, ._, .neg, .tmp3d, ._, ._, ._ }, |
| 6867 | | .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, |
| 6868 | | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, |
| 6869 | | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 7814 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7815 | .{ .@"0:", ._, .mov, .tmp1d, .sia(-1, .none, .add_src0_elem_size_div_8), ._, ._ }, |
| 7816 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 7817 | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 7818 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7819 | .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, |
| 7820 | .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, |
| 7821 | .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, |
| 7822 | .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 7823 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7824 | .{ ._, ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| 7825 | .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| 7826 | .{ ._, ._ge, .cmov, .tmp1p, .tmp2p, ._, ._ }, |
| 7827 | .{ ._, ._, .lea, .tmp2p, .memiad(.dst0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| 7828 | .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| 7829 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| 7830 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 6870 | 7831 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6871 | 7832 | } }, |
| 6872 | 7833 | }, .{ |
| 6873 | | .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, |
| 6874 | | .dst_constraints = .{.{ .scalar_int_is = .word }}, |
| 6875 | | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| 7834 | .required_features = .{ .@"64bit", null, null, null }, |
| 7835 | .src_constraints = .{ .any_scalar_signed_int, .any_scalar_signed_int }, |
| 6876 | 7836 | .patterns = &.{ |
| 6877 | | .{ .src = .{ .to_mem, .none } }, |
| 7837 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6878 | 7838 | }, |
| 6879 | 7839 | .extra_temps = .{ |
| 6880 | 7840 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6881 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 6882 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6883 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 6884 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 7841 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| 7842 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| 7843 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| 7844 | .unused, |
| 7845 | .unused, |
| 7846 | .unused, |
| 7847 | .unused, |
| 6885 | 7848 | .unused, |
| 6886 | 7849 | }, |
| 6887 | 7850 | .dst_temps = .{.mem}, |
| 6888 | 7851 | .clobbers = .{ .eflags = true }, |
| 6889 | 7852 | .each = .{ .once = &.{ |
| 6890 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6891 | | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| 6892 | | .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, |
| 6893 | | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| 6894 | | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| 6895 | | .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, |
| 6896 | | .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, |
| 6897 | | .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, |
| 6898 | | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, |
| 6899 | | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, |
| 6900 | | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, |
| 6901 | | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 6902 | | .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, |
| 6903 | | .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, |
| 6904 | | .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, |
| 6905 | | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, |
| 6906 | | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 7853 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7854 | .{ .@"0:", ._, .mov, .tmp1d, .sia(-1, .none, .add_src0_elem_size_div_8), ._, ._ }, |
| 7855 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 7856 | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 7857 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7858 | .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, |
| 7859 | .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, |
| 7860 | .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, |
| 7861 | .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 7862 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7863 | .{ ._, ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| 7864 | .{ ._, ._nge, .j, .@"1f", ._, ._, ._ }, |
| 7865 | .{ ._, ._, .lea, .tmp1p, .memiad(.src1, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| 7866 | .{ .@"1:", ._, .lea, .tmp2p, .memiad(.dst0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ }, |
| 7867 | .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| 7868 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| 7869 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 6907 | 7870 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 6908 | 7871 | } }, |
| 6909 | 7872 | }, .{ |
| 6910 | | .required_features = .{ .@"64bit", .lzcnt, null, null }, |
| 6911 | | .dst_constraints = .{.{ .scalar_int_is = .word }}, |
| 6912 | | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| 7873 | .required_features = .{ .@"64bit", .cmov, null, null }, |
| 7874 | .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int }, |
| 6913 | 7875 | .patterns = &.{ |
| 6914 | | .{ .src = .{ .to_mem, .none } }, |
| 7876 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6915 | 7877 | }, |
| 6916 | 7878 | .extra_temps = .{ |
| 6917 | 7879 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6918 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 6919 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6920 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 6921 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 7880 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| 7881 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| 7882 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| 7883 | .unused, |
| 7884 | .unused, |
| 7885 | .unused, |
| 7886 | .unused, |
| 6922 | 7887 | .unused, |
| 6923 | 7888 | }, |
| 6924 | 7889 | .dst_temps = .{.mem}, |
| 6925 | 7890 | .clobbers = .{ .eflags = true }, |
| 6926 | 7891 | .each = .{ .once = &.{ |
| 6927 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6928 | | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| 6929 | | .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, |
| 6930 | | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| 6931 | | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| 6932 | | .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, |
| 6933 | | .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, |
| 6934 | | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, |
| 6935 | | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, |
| 6936 | | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, |
| 6937 | | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 6938 | | .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, |
| 6939 | | .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, |
| 6940 | | .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, |
| 6941 | | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, |
| 6942 | | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 6943 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7892 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7893 | .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| 7894 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 7895 | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 7896 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7897 | .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, |
| 7898 | .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, |
| 7899 | .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, |
| 7900 | .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| 7901 | .{ ._, ._, .lea, .tmp2p, .memia(.src1, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| 7902 | .{ ._, ._ae, .cmov, .tmp1p, .tmp2p, ._, ._ }, |
| 7903 | .{ ._, ._, .lea, .tmp2p, .memia(.dst0, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| 7904 | .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| 7905 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| 7906 | .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ }, |
| 7907 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 6944 | 7908 | } }, |
| 6945 | 7909 | }, .{ |
| 6946 | 7910 | .required_features = .{ .@"64bit", null, null, null }, |
| 6947 | | .dst_constraints = .{.{ .scalar_int_is = .word }}, |
| 6948 | | .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, |
| 7911 | .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int }, |
| 6949 | 7912 | .patterns = &.{ |
| 6950 | | .{ .src = .{ .to_mem, .none } }, |
| 7913 | .{ .src = .{ .to_mem, .to_mem } }, |
| 6951 | 7914 | }, |
| 6952 | 7915 | .extra_temps = .{ |
| 6953 | 7916 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 6954 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 6955 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 6956 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 7917 | .{ .type = .isize, .kind = .{ .reg = .rsi } }, |
| 7918 | .{ .type = .u64, .kind = .{ .reg = .rdi } }, |
| 7919 | .{ .type = .u64, .kind = .{ .reg = .rcx } }, |
| 7920 | .unused, |
| 7921 | .unused, |
| 7922 | .unused, |
| 6957 | 7923 | .unused, |
| 6958 | 7924 | .unused, |
| 6959 | 7925 | }, |
| 6960 | 7926 | .dst_temps = .{.mem}, |
| 6961 | 7927 | .clobbers = .{ .eflags = true }, |
| 6962 | 7928 | .each = .{ .once = &.{ |
| 6963 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6964 | | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| 6965 | | .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, |
| 6966 | | .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, |
| 6967 | | .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, |
| 6968 | | .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ }, |
| 6969 | | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 6970 | | .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, |
| 6971 | | .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, |
| 6972 | | .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, |
| 6973 | | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 6974 | | .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, |
| 6975 | | .{ ._, ._, .neg, .tmp3d, ._, ._, ._ }, |
| 6976 | | .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, |
| 6977 | | .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, |
| 6978 | | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 6979 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7929 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7930 | .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| 7931 | .{ ._, ._c, .cl, ._, ._, ._, ._ }, |
| 7932 | .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 7933 | .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 7934 | .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, |
| 7935 | .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, |
| 7936 | .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, |
| 7937 | .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| 7938 | .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, |
| 7939 | .{ ._, ._, .lea, .tmp1p, .memia(.src1, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| 7940 | .{ .@"1:", ._, .lea, .tmp2p, .memia(.dst0, .tmp0, .add_size_sub_elem_size), ._, ._ }, |
| 7941 | .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ }, |
| 7942 | .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, |
| 7943 | .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ }, |
| 7944 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 6980 | 7945 | } }, |
| 6981 | 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 | 7948 | @tagName(air_tag), |
| 6984 | | cg.typeOf(ty_op.operand).fmt(pt), |
| 7949 | cg.typeOf(bin_op.lhs).fmt(pt), |
| 6985 | 7950 | ops[0].tracking(cg), |
| 7951 | ops[1].tracking(cg), |
| 6986 | 7952 | }), |
| 6987 | 7953 | else => |e| return e, |
| 6988 | 7954 | }; |
| 6989 | | for (ops) |op| for (res) |r| { |
| 6990 | | if (op.index == r.index) break; |
| 6991 | | } else try op.die(cg); |
| 6992 | | try res[0].moveTo(inst, cg); |
| 7955 | try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); |
| 6993 | 7956 | }, |
| 6994 | | |
| 6995 | | .cmp_vector, .cmp_vector_optimized => |air_tag| if (use_old) try cg.airCmpVector(inst) else fallback: { |
| 6996 | | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; |
| 6997 | | const extra = cg.air.extraData(Air.VectorCmp, ty_pl.payload).data; |
| 6998 | | switch (extra.compareOperator()) { |
| 6999 | | .eq, .neq => if (cg.typeOf(extra.lhs).scalarType(zcu).isRuntimeFloat()) |
| 7000 | | break :fallback try cg.airCmpVector(inst), |
| 7001 | | else => break :fallback try cg.airCmpVector(inst), |
| 7002 | | } |
| 7003 | | var ops = try cg.tempsFromOperands(inst, .{ extra.lhs, extra.rhs }); |
| 7957 | .alloc => if (use_old) try cg.airAlloc(inst) else { |
| 7958 | const ty = air_datas[@intFromEnum(inst)].ty; |
| 7959 | const slot = try cg.tempInit(ty, .{ .lea_frame = .{ |
| 7960 | .index = try cg.allocMemPtr(inst), |
| 7961 | } }); |
| 7962 | try slot.finish(inst, &.{}, &.{}, cg); |
| 7963 | }, |
| 7964 | .inferred_alloc, .inferred_alloc_comptime => unreachable, |
| 7965 | .ret_ptr => if (use_old) try cg.airRetPtr(inst) else { |
| 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 | 7984 | var res: [1]Temp = undefined; |
| 7005 | | switch (extra.compareOperator()) { |
| 7006 | | .lt => unreachable, |
| 7007 | | .lte => unreachable, |
| 7008 | | .eq, .neq => |cmp_op| cg.select(&res, &.{ty_pl.ty.toType()}, &ops, switch (@as(Condition, switch (cmp_op) { |
| 7009 | | else => unreachable, |
| 7010 | | .eq => .e, |
| 7011 | | .neq => .ne, |
| 7012 | | })) { |
| 7013 | | else => unreachable, |
| 7014 | | inline .e, .ne => |cc| comptime &.{ .{ |
| 7015 | | .required_features = .{ .avx2, null, null, null }, |
| 7016 | | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| 7017 | | .patterns = &.{ |
| 7018 | | .{ .src = .{ .to_ymm, .mem } }, |
| 7019 | | .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } }, |
| 7020 | | .{ .src = .{ .to_ymm, .to_ymm } }, |
| 7021 | | }, |
| 7022 | | .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{ |
| 7023 | | .kind = .all, |
| 7024 | | .inverted = switch (cc) { |
| 7025 | | else => unreachable, |
| 7026 | | .e => false, |
| 7027 | | .ne => true, |
| 7028 | | }, |
| 7029 | | .scalar = .byte, |
| 7030 | | } } }}, |
| 7031 | | .each = .{ .once = &.{ |
| 7032 | | .{ ._, .vp_b, .cmpeq, .dst0y, .src0y, .src1y, ._ }, |
| 7985 | cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, switch (@as(Mir.Inst.Tag, switch (air_tag) { |
| 7986 | else => unreachable, |
| 7987 | .bit_and, .bool_and => .@"and", |
| 7988 | .bit_or, .bool_or => .@"or", |
| 7989 | .xor => .xor, |
| 7990 | })) { |
| 7991 | else => unreachable, |
| 7992 | inline .@"and", .@"or", .xor => |mir_tag| comptime &.{ .{ |
| 7993 | .src_constraints = .{ .{ .size = .byte }, .{ .size = .byte } }, |
| 7994 | .patterns = &.{ |
| 7995 | .{ .src = .{ .mut_mem, .imm8 } }, |
| 7996 | .{ .src = .{ .imm8, .mut_mem }, .commute = .{ 0, 1 } }, |
| 7997 | .{ .src = .{ .to_mut_gpr, .imm8 } }, |
| 7998 | .{ .src = .{ .imm8, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 7999 | .{ .src = .{ .mut_mem, .to_gpr } }, |
| 8000 | .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } }, |
| 8001 | .{ .src = .{ .to_mut_gpr, .mem } }, |
| 8002 | .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } }, |
| 8003 | .{ .src = .{ .to_mut_gpr, .to_gpr } }, |
| 8004 | }, |
| 8005 | .dst_temps = .{.{ .ref = .src0 }}, |
| 8006 | .clobbers = .{ .eflags = true }, |
| 8007 | .each = .{ .once = &.{ |
| 8008 | .{ ._, ._, mir_tag, .dst0b, .src1b, ._, ._ }, |
| 8009 | } }, |
| 8010 | }, .{ |
| 8011 | .src_constraints = .{ .{ .size = .word }, .{ .size = .word } }, |
| 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 | 14208 | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, |
| 7037 | 14209 | .patterns = &.{ |
| 7038 | | .{ .src = .{ .to_ymm, .mem } }, |
| 7039 | | .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } }, |
| 7040 | | .{ .src = .{ .to_ymm, .to_ymm } }, |
| 14210 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7041 | 14211 | }, |
| 7042 | | .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{ |
| 7043 | | .kind = .all, |
| 7044 | | .inverted = switch (cc) { |
| 7045 | | else => unreachable, |
| 7046 | | .e => false, |
| 7047 | | .ne => true, |
| 7048 | | }, |
| 7049 | | .scalar = .word, |
| 7050 | | } } }}, |
| 14212 | .extra_temps = .{ |
| 14213 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 14214 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 14215 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 14216 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| 14217 | .unused, |
| 14218 | .unused, |
| 14219 | .unused, |
| 14220 | .unused, |
| 14221 | .unused, |
| 14222 | }, |
| 14223 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 14224 | .clobbers = .{ .eflags = true }, |
| 7051 | 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 | 14241 | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, |
| 7057 | 14242 | .patterns = &.{ |
| 7058 | | .{ .src = .{ .to_ymm, .mem } }, |
| 7059 | | .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } }, |
| 7060 | | .{ .src = .{ .to_ymm, .to_ymm } }, |
| 14243 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7061 | 14244 | }, |
| 7062 | | .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{ |
| 7063 | | .kind = .all, |
| 7064 | | .inverted = switch (cc) { |
| 7065 | | else => unreachable, |
| 7066 | | .e => false, |
| 7067 | | .ne => true, |
| 7068 | | }, |
| 7069 | | .scalar = .dword, |
| 7070 | | } } }}, |
| 14245 | .extra_temps = .{ |
| 14246 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 14247 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 14248 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 14249 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 14250 | .unused, |
| 14251 | .unused, |
| 14252 | .unused, |
| 14253 | .unused, |
| 14254 | .unused, |
| 14255 | }, |
| 14256 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 14257 | .clobbers = .{ .eflags = true }, |
| 7071 | 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 | 14275 | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, |
| 7077 | 14276 | .patterns = &.{ |
| 7078 | | .{ .src = .{ .to_ymm, .mem } }, |
| 7079 | | .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } }, |
| 7080 | | .{ .src = .{ .to_ymm, .to_ymm } }, |
| 14277 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7081 | 14278 | }, |
| 7082 | | .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{ |
| 7083 | | .kind = .all, |
| 7084 | | .inverted = switch (cc) { |
| 7085 | | else => unreachable, |
| 7086 | | .e => false, |
| 7087 | | .ne => true, |
| 7088 | | }, |
| 7089 | | .scalar = .qword, |
| 7090 | | } } }}, |
| 14279 | .extra_temps = .{ |
| 14280 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 14281 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 14282 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 14283 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 14284 | .unused, |
| 14285 | .unused, |
| 14286 | .unused, |
| 14287 | .unused, |
| 14288 | .unused, |
| 14289 | }, |
| 14290 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 14291 | .clobbers = .{ .eflags = true }, |
| 7091 | 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 }, |
| 7096 | | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| 14307 | .required_features = .{ .@"64bit", null, null, null }, |
| 14308 | .dst_constraints = .{.{ .bool_vec = .qword }}, |
| 14309 | .src_constraints = .{ .any_scalar_int, .any_scalar_int }, |
| 7097 | 14310 | .patterns = &.{ |
| 7098 | | .{ .src = .{ .to_xmm, .mem } }, |
| 7099 | | .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } }, |
| 7100 | | .{ .src = .{ .to_xmm, .to_xmm } }, |
| 14311 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7101 | 14312 | }, |
| 7102 | | .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{ |
| 7103 | | .kind = .all, |
| 7104 | | .inverted = switch (cc) { |
| 7105 | | else => unreachable, |
| 7106 | | .e => false, |
| 7107 | | .ne => true, |
| 7108 | | }, |
| 7109 | | .scalar = .byte, |
| 7110 | | } } }}, |
| 14313 | .extra_temps = .{ |
| 14314 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 14315 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 14316 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 14317 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 14318 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 14319 | .unused, |
| 14320 | .unused, |
| 14321 | .unused, |
| 14322 | .unused, |
| 14323 | }, |
| 14324 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 14325 | .clobbers = .{ .eflags = true }, |
| 7111 | 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 }, |
| 7116 | | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, |
| 14348 | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| 7117 | 14349 | .patterns = &.{ |
| 7118 | | .{ .src = .{ .to_xmm, .mem } }, |
| 7119 | | .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } }, |
| 7120 | | .{ .src = .{ .to_xmm, .to_xmm } }, |
| 14350 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7121 | 14351 | }, |
| 7122 | | .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{ |
| 7123 | | .kind = .all, |
| 7124 | | .inverted = switch (cc) { |
| 7125 | | else => unreachable, |
| 7126 | | .e => false, |
| 7127 | | .ne => true, |
| 7128 | | }, |
| 7129 | | .scalar = .word, |
| 7130 | | } } }}, |
| 14352 | .extra_temps = .{ |
| 14353 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 14354 | .{ .type = .u32, .kind = .{ .reg = .ecx } }, |
| 14355 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 14356 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 14357 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 14358 | .unused, |
| 14359 | .unused, |
| 14360 | .unused, |
| 14361 | .unused, |
| 14362 | }, |
| 14363 | .dst_temps = .{.mem}, |
| 14364 | .clobbers = .{ .eflags = true }, |
| 7131 | 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 }, |
| 7136 | | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, |
| 14391 | .required_features = .{ .f16c, null, null, null }, |
| 14392 | .src_constraints = .{ |
| 14393 | .{ .scalar_float = .{ .of = .word, .is = .word } }, |
| 14394 | .{ .scalar_float = .{ .of = .word, .is = .word } }, |
| 14395 | }, |
| 7137 | 14396 | .patterns = &.{ |
| 7138 | | .{ .src = .{ .to_xmm, .mem } }, |
| 7139 | | .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } }, |
| 7140 | | .{ .src = .{ .to_xmm, .to_xmm } }, |
| 14397 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7141 | 14398 | }, |
| 7142 | | .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{ |
| 7143 | | .kind = .all, |
| 7144 | | .inverted = switch (cc) { |
| 7145 | | else => unreachable, |
| 7146 | | .e => false, |
| 7147 | | .ne => true, |
| 7148 | | }, |
| 7149 | | .scalar = .dword, |
| 7150 | | } } }}, |
| 14399 | .extra_temps = .{ |
| 14400 | .{ .kind = .{ .rc = .sse } }, |
| 14401 | .unused, |
| 14402 | .unused, |
| 14403 | .unused, |
| 14404 | .unused, |
| 14405 | .unused, |
| 14406 | .unused, |
| 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 | 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 }, |
| 7156 | | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, |
| 14425 | .required_features = .{ .f16c, null, null, null }, |
| 14426 | .src_constraints = .{ |
| 14427 | .{ .scalar_float = .{ .of = .qword, .is = .word } }, |
| 14428 | .{ .scalar_float = .{ .of = .qword, .is = .word } }, |
| 14429 | }, |
| 7157 | 14430 | .patterns = &.{ |
| 7158 | | .{ .src = .{ .to_xmm, .mem } }, |
| 7159 | | .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } }, |
| 7160 | | .{ .src = .{ .to_xmm, .to_xmm } }, |
| 14431 | .{ .src = .{ .mem, .mem } }, |
| 14432 | .{ .src = .{ .sse, .mem } }, |
| 14433 | .{ .src = .{ .mem, .sse } }, |
| 14434 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7161 | 14435 | }, |
| 7162 | | .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{ |
| 7163 | | .kind = .all, |
| 7164 | | .inverted = switch (cc) { |
| 7165 | | else => unreachable, |
| 7166 | | .e => false, |
| 7167 | | .ne => true, |
| 7168 | | }, |
| 7169 | | .scalar = .qword, |
| 7170 | | } } }}, |
| 14436 | .extra_temps = .{ |
| 14437 | .{ .kind = .{ .rc = .sse } }, |
| 14438 | .unused, |
| 14439 | .unused, |
| 14440 | .unused, |
| 14441 | .unused, |
| 14442 | .unused, |
| 14443 | .unused, |
| 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 | 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 }, |
| 7176 | | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| 14462 | .required_features = .{ .f16c, null, null, null }, |
| 14463 | .src_constraints = .{ |
| 14464 | .{ .scalar_float = .{ .of = .xword, .is = .word } }, |
| 14465 | .{ .scalar_float = .{ .of = .xword, .is = .word } }, |
| 14466 | }, |
| 7177 | 14467 | .patterns = &.{ |
| 7178 | | .{ .src = .{ .to_mut_xmm, .mem } }, |
| 7179 | | .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } }, |
| 7180 | | .{ .src = .{ .to_mut_xmm, .to_xmm } }, |
| 14468 | .{ .src = .{ .mem, .mem } }, |
| 14469 | .{ .src = .{ .to_sse, .mem } }, |
| 14470 | .{ .src = .{ .mem, .to_sse } }, |
| 14471 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7181 | 14472 | }, |
| 7182 | | .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{ |
| 7183 | | .kind = .all, |
| 7184 | | .inverted = switch (cc) { |
| 7185 | | else => unreachable, |
| 7186 | | .e => false, |
| 7187 | | .ne => true, |
| 7188 | | }, |
| 7189 | | .scalar = .byte, |
| 7190 | | } } }}, |
| 14473 | .extra_temps = .{ |
| 14474 | .{ .kind = .{ .rc = .sse } }, |
| 14475 | .unused, |
| 14476 | .unused, |
| 14477 | .unused, |
| 14478 | .unused, |
| 14479 | .unused, |
| 14480 | .unused, |
| 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 | 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 }, |
| 7196 | | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, |
| 14499 | .required_features = .{ .avx, null, null, null }, |
| 14500 | .src_constraints = .{ |
| 14501 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 14502 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 14503 | }, |
| 7197 | 14504 | .patterns = &.{ |
| 7198 | | .{ .src = .{ .to_mut_xmm, .mem } }, |
| 7199 | | .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } }, |
| 7200 | | .{ .src = .{ .to_mut_xmm, .to_xmm } }, |
| 14505 | .{ .src = .{ .to_sse, .mem } }, |
| 14506 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 14507 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7201 | 14508 | }, |
| 7202 | | .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{ |
| 7203 | | .kind = .all, |
| 7204 | | .inverted = switch (cc) { |
| 7205 | | else => unreachable, |
| 7206 | | .e => false, |
| 7207 | | .ne => true, |
| 7208 | | }, |
| 7209 | | .scalar = .word, |
| 7210 | | } } }}, |
| 14509 | .dst_temps = .{.{ .mut_rc_mask = .{ |
| 14510 | .ref = .src0, |
| 14511 | .rc = .sse, |
| 14512 | .info = .{ .kind = .all, .scalar = .dword }, |
| 14513 | } }}, |
| 7211 | 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 }, |
| 7216 | | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, |
| 14522 | .required_features = .{ .sse, null, null, null }, |
| 14523 | .src_constraints = .{ |
| 14524 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 14525 | .{ .scalar_float = .{ .of = .dword, .is = .dword } }, |
| 14526 | }, |
| 7217 | 14527 | .patterns = &.{ |
| 7218 | | .{ .src = .{ .to_mut_xmm, .mem } }, |
| 7219 | | .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } }, |
| 7220 | | .{ .src = .{ .to_mut_xmm, .to_xmm } }, |
| 14528 | .{ .src = .{ .to_mut_sse, .mem } }, |
| 14529 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 14530 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 7221 | 14531 | }, |
| 7222 | | .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{ |
| 7223 | | .kind = .all, |
| 7224 | | .inverted = switch (cc) { |
| 7225 | | else => unreachable, |
| 7226 | | .e => false, |
| 7227 | | .ne => true, |
| 7228 | | }, |
| 7229 | | .scalar = .dword, |
| 7230 | | } } }}, |
| 14532 | .dst_temps = .{.{ .ref_mask = .{ |
| 14533 | .ref = .src0, |
| 14534 | .info = .{ .kind = .all, .scalar = .dword }, |
| 14535 | } }}, |
| 7231 | 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 }, |
| 7236 | | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, |
| 14544 | .required_features = .{ .avx, null, null, null }, |
| 14545 | .src_constraints = .{ |
| 14546 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 14547 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 14548 | }, |
| 7237 | 14549 | .patterns = &.{ |
| 7238 | | .{ .src = .{ .to_mut_xmm, .mem } }, |
| 7239 | | .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } }, |
| 7240 | | .{ .src = .{ .to_mut_xmm, .to_xmm } }, |
| 14550 | .{ .src = .{ .to_sse, .mem } }, |
| 14551 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 14552 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7241 | 14553 | }, |
| 7242 | | .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{ |
| 7243 | | .kind = .all, |
| 7244 | | .inverted = switch (cc) { |
| 7245 | | else => unreachable, |
| 7246 | | .e => false, |
| 7247 | | .ne => true, |
| 7248 | | }, |
| 7249 | | .scalar = .qword, |
| 7250 | | } } }}, |
| 14554 | .dst_temps = .{.{ .mut_rc_mask = .{ |
| 14555 | .ref = .src0, |
| 14556 | .rc = .sse, |
| 14557 | .info = .{ .kind = .all, .scalar = .dword }, |
| 14558 | } }}, |
| 7251 | 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 }, |
| 7256 | | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| 14567 | .required_features = .{ .sse, null, null, null }, |
| 14568 | .src_constraints = .{ |
| 14569 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 14570 | .{ .scalar_float = .{ .of = .xword, .is = .dword } }, |
| 14571 | }, |
| 7257 | 14572 | .patterns = &.{ |
| 7258 | | .{ .src = .{ .to_mut_mm, .mem } }, |
| 7259 | | .{ .src = .{ .mem, .to_mut_mm }, .commute = .{ 0, 1 } }, |
| 7260 | | .{ .src = .{ .to_mut_mm, .to_mm } }, |
| 14573 | .{ .src = .{ .to_mut_sse, .mem } }, |
| 14574 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 14575 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 7261 | 14576 | }, |
| 7262 | | .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{ |
| 7263 | | .kind = .all, |
| 7264 | | .inverted = switch (cc) { |
| 7265 | | else => unreachable, |
| 7266 | | .e => false, |
| 7267 | | .ne => true, |
| 7268 | | }, |
| 7269 | | .scalar = .byte, |
| 7270 | | } } }}, |
| 14577 | .dst_temps = .{.{ .ref_mask = .{ |
| 14578 | .ref = .src0, |
| 14579 | .info = .{ .kind = .all, .scalar = .dword }, |
| 14580 | } }}, |
| 7271 | 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 }, |
| 7276 | | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, |
| 14589 | .required_features = .{ .avx, null, null, null }, |
| 14590 | .src_constraints = .{ |
| 14591 | .{ .scalar_float = .{ .of = .yword, .is = .dword } }, |
| 14592 | .{ .scalar_float = .{ .of = .yword, .is = .dword } }, |
| 14593 | }, |
| 7277 | 14594 | .patterns = &.{ |
| 7278 | | .{ .src = .{ .to_mut_mm, .mem } }, |
| 7279 | | .{ .src = .{ .mem, .to_mut_mm }, .commute = .{ 0, 1 } }, |
| 7280 | | .{ .src = .{ .to_mut_mm, .to_mm } }, |
| 14595 | .{ .src = .{ .to_sse, .mem } }, |
| 14596 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 14597 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7281 | 14598 | }, |
| 7282 | | .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{ |
| 7283 | | .kind = .all, |
| 7284 | | .inverted = switch (cc) { |
| 7285 | | else => unreachable, |
| 7286 | | .e => false, |
| 7287 | | .ne => true, |
| 7288 | | }, |
| 7289 | | .scalar = .word, |
| 7290 | | } } }}, |
| 14599 | .dst_temps = .{.{ .mut_rc_mask = .{ |
| 14600 | .ref = .src0, |
| 14601 | .rc = .sse, |
| 14602 | .info = .{ .kind = .all, .scalar = .dword }, |
| 14603 | } }}, |
| 7291 | 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 }, |
| 7296 | | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, |
| 14612 | .required_features = .{ .avx, null, null, null }, |
| 14613 | .src_constraints = .{ |
| 14614 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 14615 | .{ .scalar_float = .{ .of = .qword, .is = .qword } }, |
| 14616 | }, |
| 7297 | 14617 | .patterns = &.{ |
| 7298 | | .{ .src = .{ .to_mut_mm, .mem } }, |
| 7299 | | .{ .src = .{ .mem, .to_mut_mm }, .commute = .{ 0, 1 } }, |
| 7300 | | .{ .src = .{ .to_mut_mm, .to_mm } }, |
| 14618 | .{ .src = .{ .to_sse, .mem } }, |
| 14619 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 14620 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7301 | 14621 | }, |
| 7302 | | .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{ |
| 7303 | | .kind = .all, |
| 7304 | | .inverted = switch (cc) { |
| 7305 | | else => unreachable, |
| 7306 | | .e => false, |
| 7307 | | .ne => true, |
| 7308 | | }, |
| 7309 | | .scalar = .dword, |
| 7310 | | } } }}, |
| 14622 | .dst_temps = .{.{ .mut_rc_mask = .{ |
| 14623 | .ref = .src0, |
| 14624 | .rc = .sse, |
| 14625 | .info = .{ .kind = .all, .scalar = .qword }, |
| 14626 | } }}, |
| 7311 | 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 | 14640 | .patterns = &.{ |
| 7317 | | .{ .src = .{ .mut_mem, .imm8 } }, |
| 7318 | | .{ .src = .{ .imm8, .mut_mem }, .commute = .{ 0, 1 } }, |
| 7319 | | .{ .src = .{ .to_mut_gpr, .imm8 } }, |
| 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 } }, |
| 14641 | .{ .src = .{ .to_mut_sse, .mem } }, |
| 14642 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 14643 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 7326 | 14644 | }, |
| 7327 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 7328 | | .clobbers = .{ .eflags = true }, |
| 7329 | | .each = .{ .once = switch (cc) { |
| 7330 | | else => unreachable, |
| 7331 | | .e => &.{ |
| 7332 | | .{ ._, ._, .xor, .dst0b, .src1b, ._, ._ }, |
| 7333 | | .{ ._, ._, .not, .dst0b, ._, ._, ._ }, |
| 7334 | | }, |
| 7335 | | .ne => &.{ |
| 7336 | | .{ ._, ._, .xor, .dst0b, .src1b, ._, ._ }, |
| 7337 | | }, |
| 14645 | .dst_temps = .{.{ .ref_mask = .{ |
| 14646 | .ref = .src0, |
| 14647 | .info = .{ .kind = .all, .scalar = .qword }, |
| 14648 | } }}, |
| 14649 | .each = .{ .once = &.{ |
| 14650 | .{ ._, ._sd, .cmp, .dst0x, .src1x, .ui(switch (cc) { |
| 14651 | else => unreachable, |
| 14652 | .e => 0b00000, |
| 14653 | .ne => 0b00100, |
| 14654 | }), ._ }, |
| 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 | 14662 | .patterns = &.{ |
| 7342 | | .{ .src = .{ .mut_mem, .imm16 } }, |
| 7343 | | .{ .src = .{ .imm16, .mut_mem }, .commute = .{ 0, 1 } }, |
| 7344 | | .{ .src = .{ .to_mut_gpr, .imm16 } }, |
| 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 } }, |
| 14663 | .{ .src = .{ .to_sse, .mem } }, |
| 14664 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 14665 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7351 | 14666 | }, |
| 7352 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 7353 | | .clobbers = .{ .eflags = true }, |
| 7354 | | .each = .{ .once = switch (cc) { |
| 7355 | | else => unreachable, |
| 7356 | | .e => &.{ |
| 7357 | | .{ ._, ._, .xor, .dst0w, .src1w, ._, ._ }, |
| 7358 | | .{ ._, ._, .not, .dst0w, ._, ._, ._ }, |
| 7359 | | }, |
| 7360 | | .ne => &.{ |
| 7361 | | .{ ._, ._, .xor, .dst0w, .src1w, ._, ._ }, |
| 7362 | | }, |
| 14667 | .dst_temps = .{.{ .mut_rc_mask = .{ |
| 14668 | .ref = .src0, |
| 14669 | .rc = .sse, |
| 14670 | .info = .{ .kind = .all, .scalar = .qword }, |
| 14671 | } }}, |
| 14672 | .each = .{ .once = &.{ |
| 14673 | .{ ._, .v_pd, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) { |
| 14674 | else => unreachable, |
| 14675 | .e => 0b00000, |
| 14676 | .ne => 0b00100, |
| 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 | 14685 | .patterns = &.{ |
| 7367 | | .{ .src = .{ .mut_mem, .imm32 } }, |
| 7368 | | .{ .src = .{ .imm32, .mut_mem }, .commute = .{ 0, 1 } }, |
| 7369 | | .{ .src = .{ .to_mut_gpr, .imm32 } }, |
| 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 } }, |
| 14686 | .{ .src = .{ .to_mut_sse, .mem } }, |
| 14687 | .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } }, |
| 14688 | .{ .src = .{ .to_mut_sse, .to_sse } }, |
| 7376 | 14689 | }, |
| 7377 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 7378 | | .clobbers = .{ .eflags = true }, |
| 7379 | | .each = .{ .once = switch (cc) { |
| 7380 | | else => unreachable, |
| 7381 | | .e => &.{ |
| 7382 | | .{ ._, ._, .xor, .dst0d, .src1d, ._, ._ }, |
| 7383 | | .{ ._, ._, .not, .dst0d, ._, ._, ._ }, |
| 7384 | | }, |
| 7385 | | .ne => &.{ |
| 7386 | | .{ ._, ._, .xor, .dst0d, .src1d, ._, ._ }, |
| 7387 | | }, |
| 14690 | .dst_temps = .{.{ .ref_mask = .{ |
| 14691 | .ref = .src0, |
| 14692 | .info = .{ .kind = .all, .scalar = .qword }, |
| 14693 | } }}, |
| 14694 | .each = .{ .once = &.{ |
| 14695 | .{ ._, ._pd, .cmp, .dst0x, .src1x, .ui(switch (cc) { |
| 14696 | else => unreachable, |
| 14697 | .e => 0b00000, |
| 14698 | .ne => 0b00100, |
| 14699 | }), ._ }, |
| 7388 | 14700 | } }, |
| 7389 | 14701 | }, .{ |
| 7390 | | .required_features = .{ .@"64bit", null, null, null }, |
| 7391 | | .src_constraints = .{ .{ .bool_vec = .qword }, .{ .bool_vec = .qword } }, |
| 14702 | .required_features = .{ .avx, null, null, null }, |
| 14703 | .src_constraints = .{ |
| 14704 | .{ .scalar_float = .{ .of = .yword, .is = .qword } }, |
| 14705 | .{ .scalar_float = .{ .of = .yword, .is = .qword } }, |
| 14706 | }, |
| 7392 | 14707 | .patterns = &.{ |
| 7393 | | .{ .src = .{ .mut_mem, .simm32 } }, |
| 7394 | | .{ .src = .{ .simm32, .mut_mem }, .commute = .{ 0, 1 } }, |
| 7395 | | .{ .src = .{ .to_mut_gpr, .simm32 } }, |
| 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 } }, |
| 14708 | .{ .src = .{ .to_sse, .mem } }, |
| 14709 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 14710 | .{ .src = .{ .to_sse, .to_sse } }, |
| 7402 | 14711 | }, |
| 7403 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 7404 | | .clobbers = .{ .eflags = true }, |
| 7405 | | .each = .{ .once = switch (cc) { |
| 7406 | | else => unreachable, |
| 7407 | | .e => &.{ |
| 7408 | | .{ ._, ._, .xor, .dst0q, .src1q, ._, ._ }, |
| 7409 | | .{ ._, ._, .not, .dst0q, ._, ._, ._ }, |
| 7410 | | }, |
| 7411 | | .ne => &.{ |
| 7412 | | .{ ._, ._, .xor, .dst0q, .src1q, ._, ._ }, |
| 7413 | | }, |
| 14712 | .dst_temps = .{.{ .mut_rc_mask = .{ |
| 14713 | .ref = .src0, |
| 14714 | .rc = .sse, |
| 14715 | .info = .{ .kind = .all, .scalar = .qword }, |
| 14716 | } }}, |
| 14717 | .each = .{ .once = &.{ |
| 14718 | .{ ._, .v_pd, .cmp, .dst0y, .src0y, .src1y, .ui(switch (cc) { |
| 14719 | else => unreachable, |
| 14720 | .e => 0b00000, |
| 14721 | .ne => 0b00100, |
| 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 | 14730 | .patterns = &.{ |
| 7418 | 14731 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7419 | 14732 | }, |
| 7420 | 14733 | .extra_temps = .{ |
| 7421 | 14734 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7422 | 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 | 14739 | .unused, |
| 7424 | 14740 | .unused, |
| 7425 | 14741 | .unused, |
| ... | ... | @@ -7427,1367 +14743,2028 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 7427 | 14743 | }, |
| 7428 | 14744 | .dst_temps = .{.mem}, |
| 7429 | 14745 | .clobbers = .{ .eflags = true }, |
| 7430 | | .each = .{ .once = switch (cc) { |
| 7431 | | else => unreachable, |
| 7432 | | .e => &.{ |
| 7433 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7434 | | .{ .@"0:", ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ }, |
| 7435 | | .{ ._, ._, .xor, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ }, |
| 7436 | | .{ ._, ._, .not, .tmp1p, ._, ._, ._ }, |
| 7437 | | .{ ._, ._, .mov, .memia(.dst0p, .tmp0, .add_size), .tmp1p, ._, ._ }, |
| 7438 | | .{ ._, ._, .add, .tmp0p, .sa(.tmp1, .add_size), ._, ._ }, |
| 7439 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7440 | | }, |
| 7441 | | .ne => &.{ |
| 7442 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7443 | | .{ .@"0:", ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ }, |
| 7444 | | .{ ._, ._, .xor, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ }, |
| 7445 | | .{ ._, ._, .mov, .memia(.dst0p, .tmp0, .add_size), .tmp1p, ._, ._ }, |
| 7446 | | .{ ._, ._, .add, .tmp0p, .sa(.tmp1, .add_size), ._, ._ }, |
| 7447 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7448 | | }, |
| 14746 | .each = .{ .once = &.{ |
| 14747 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 14748 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 14749 | .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 14750 | .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 14751 | .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .ui(switch (cc) { |
| 14752 | else => unreachable, |
| 14753 | .e => 0b00000, |
| 14754 | .ne => 0b00100, |
| 14755 | }) }, |
| 14756 | .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ }, |
| 14757 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, |
| 14758 | .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, |
| 14759 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 14760 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7449 | 14761 | } }, |
| 7450 | 14762 | }, .{ |
| 7451 | | .required_features = .{ .avx2, null, null, null }, |
| 7452 | | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| 14763 | .required_features = .{ .f16c, null, null, null }, |
| 14764 | .src_constraints = .{ |
| 14765 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, |
| 14766 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, |
| 14767 | }, |
| 7453 | 14768 | .patterns = &.{ |
| 7454 | 14769 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7455 | 14770 | }, |
| 7456 | 14771 | .extra_temps = .{ |
| 7457 | 14772 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7458 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 7459 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 7460 | | .{ .kind = .{ .rc = .sse } }, |
| 14773 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 14774 | .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } }, |
| 14775 | .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } }, |
| 14776 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 14777 | .unused, |
| 14778 | .unused, |
| 7461 | 14779 | .unused, |
| 7462 | 14780 | .unused, |
| 7463 | 14781 | }, |
| 7464 | 14782 | .dst_temps = .{.mem}, |
| 7465 | 14783 | .clobbers = .{ .eflags = true }, |
| 7466 | | .each = .{ .once = switch (cc) { |
| 7467 | | else => unreachable, |
| 7468 | | .e => &.{ |
| 7469 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7470 | | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 7471 | | .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 7472 | | .{ ._, .vp_b, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 7473 | | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, |
| 7474 | | .{ ._, ._, .mov, .memi(.dst0d, .tmp1), .tmp2d, ._, ._ }, |
| 7475 | | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| 7476 | | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 7477 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7478 | | }, |
| 7479 | | .ne => &.{ |
| 7480 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 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 | | }, |
| 14784 | .each = .{ .once = &.{ |
| 14785 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 14786 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 14787 | .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 14788 | .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 14789 | .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .ui(switch (cc) { |
| 14790 | else => unreachable, |
| 14791 | .e => 0b00000, |
| 14792 | .ne => 0b00100, |
| 14793 | }) }, |
| 14794 | .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ }, |
| 14795 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, |
| 14796 | .{ ._, ._c, .in, .tmp1p, ._, ._, ._ }, |
| 14797 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 14798 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7491 | 14799 | } }, |
| 7492 | 14800 | }, .{ |
| 7493 | | .required_features = .{ .avx2, null, null, null }, |
| 7494 | | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, |
| 14801 | .required_features = .{ .avx, .slow_incdec, null, null }, |
| 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 | 14807 | .patterns = &.{ |
| 7496 | 14808 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7497 | 14809 | }, |
| 14810 | .call_frame = .{ .alignment = .@"16" }, |
| 7498 | 14811 | .extra_temps = .{ |
| 7499 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7500 | 14812 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 7501 | | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| 7502 | | .{ .kind = .{ .rc = .sse } }, |
| 14813 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 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 | 14823 | .unused, |
| 7504 | 14824 | .unused, |
| 7505 | 14825 | }, |
| 7506 | | .dst_temps = .{.mem}, |
| 7507 | | .clobbers = .{ .eflags = true }, |
| 7508 | | .each = .{ .once = switch (cc) { |
| 7509 | | else => unreachable, |
| 7510 | | .e => &.{ |
| 7511 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7512 | | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 7513 | | .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 7514 | | .{ ._, .vp_w, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 7515 | | .{ ._, .vp_b, .ackssw, .tmp3y, .tmp3y, .tmp3y, ._ }, |
| 7516 | | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, |
| 7517 | | .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, |
| 7518 | | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| 7519 | | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 7520 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7521 | | }, |
| 7522 | | .ne => &.{ |
| 7523 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 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 | | }, |
| 14826 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 14827 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 14828 | .each = .{ .once = &.{ |
| 14829 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 14830 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 14831 | .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ }, |
| 14832 | .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0) }, |
| 14833 | .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0) }, |
| 14834 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 14835 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| 14836 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, |
| 14837 | .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ }, |
| 14838 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 14839 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, |
| 14840 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, |
| 14841 | .{ ._, ._, .add, .tmp0d, .si(1), ._, ._ }, |
| 14842 | .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ }, |
| 14843 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| 7535 | 14844 | } }, |
| 7536 | 14845 | }, .{ |
| 7537 | | .required_features = .{ .avx2, null, null, null }, |
| 7538 | | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, |
| 14846 | .required_features = .{ .avx, null, null, null }, |
| 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 | 14852 | .patterns = &.{ |
| 7540 | 14853 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7541 | 14854 | }, |
| 14855 | .call_frame = .{ .alignment = .@"16" }, |
| 7542 | 14856 | .extra_temps = .{ |
| 7543 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7544 | 14857 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 7545 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 7546 | | .{ .kind = .{ .rc = .sse } }, |
| 14858 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 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 | 14868 | .unused, |
| 7548 | 14869 | .unused, |
| 7549 | 14870 | }, |
| 7550 | | .dst_temps = .{.mem}, |
| 7551 | | .clobbers = .{ .eflags = true }, |
| 7552 | | .each = .{ .once = switch (cc) { |
| 7553 | | else => unreachable, |
| 7554 | | .e => &.{ |
| 7555 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7556 | | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 7557 | | .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 7558 | | .{ ._, .vp_d, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 7559 | | .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ }, |
| 7560 | | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, |
| 7561 | | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| 7562 | | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 7563 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7564 | | }, |
| 7565 | | .ne => &.{ |
| 7566 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7567 | | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 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 | | }, |
| 14871 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 14872 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 14873 | .each = .{ .once = &.{ |
| 14874 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 14875 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 14876 | .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ }, |
| 14877 | .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0) }, |
| 14878 | .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0) }, |
| 14879 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 14880 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| 14881 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, |
| 14882 | .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ }, |
| 14883 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 14884 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, |
| 14885 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, |
| 14886 | .{ ._, ._c, .in, .tmp0d, ._, ._, ._ }, |
| 14887 | .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ }, |
| 14888 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| 7577 | 14889 | } }, |
| 7578 | 14890 | }, .{ |
| 7579 | | .required_features = .{ .avx2, null, null, null }, |
| 7580 | | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, |
| 14891 | .required_features = .{ .sse2, .slow_incdec, null, null }, |
| 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 | 14897 | .patterns = &.{ |
| 7582 | 14898 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7583 | 14899 | }, |
| 14900 | .call_frame = .{ .alignment = .@"16" }, |
| 7584 | 14901 | .extra_temps = .{ |
| 7585 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7586 | | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| 7587 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 7588 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 7589 | | .{ .kind = .{ .rc = .sse } }, |
| 14902 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 14903 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 14904 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| 14905 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| 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 | 14914 | .unused, |
| 7591 | 14915 | }, |
| 7592 | | .dst_temps = .{.mem}, |
| 7593 | | .clobbers = .{ .eflags = true }, |
| 7594 | | .each = .{ .once = switch (cc) { |
| 7595 | | else => unreachable, |
| 7596 | | .e => &.{ |
| 7597 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7598 | | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 7599 | | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 7600 | | .{ .@"0:", .v_dqu, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 7601 | | .{ ._, .vp_q, .cmpeq, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 7602 | | .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4y, ._, ._ }, |
| 7603 | | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| 7604 | | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| 7605 | | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| 7606 | | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| 7607 | | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 7608 | | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| 7609 | | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| 7610 | | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| 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 | | }, |
| 14916 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 14917 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 14918 | .each = .{ .once = &.{ |
| 14919 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 14920 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 14921 | .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| 14922 | .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ }, |
| 14923 | .{ ._, .p_w, .insr, .tmp1x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ }, |
| 14924 | .{ ._, .p_w, .insr, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ }, |
| 14925 | .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, |
| 14926 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| 14927 | .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ }, |
| 14928 | .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ }, |
| 14929 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 14930 | .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ }, |
| 14931 | .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ }, |
| 14932 | .{ ._, ._, .add, .tmp0d, .si(1), ._, ._ }, |
| 14933 | .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ }, |
| 14934 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| 7645 | 14935 | } }, |
| 7646 | 14936 | }, .{ |
| 7647 | | .required_features = .{ .avx, null, null, null }, |
| 7648 | | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| 14937 | .required_features = .{ .sse2, null, null, null }, |
| 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 | 14943 | .patterns = &.{ |
| 7650 | 14944 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7651 | 14945 | }, |
| 14946 | .call_frame = .{ .alignment = .@"16" }, |
| 7652 | 14947 | .extra_temps = .{ |
| 7653 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7654 | 14948 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 7655 | | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| 7656 | | .{ .kind = .{ .rc = .sse } }, |
| 14949 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 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 | 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 | 15101 | .unused, |
| 7659 | 15102 | }, |
| 7660 | 15103 | .dst_temps = .{.mem}, |
| 7661 | | .clobbers = .{ .eflags = true }, |
| 7662 | | .each = .{ .once = switch (cc) { |
| 7663 | | else => unreachable, |
| 7664 | | .e => &.{ |
| 7665 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7666 | | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 7667 | | .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7668 | | .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 7669 | | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, |
| 7670 | | .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, |
| 7671 | | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| 7672 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 7673 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7674 | | }, |
| 7675 | | .ne => &.{ |
| 7676 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7677 | | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 7678 | | .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7679 | | .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 7680 | | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, |
| 7681 | | .{ ._, ._, .not, .tmp2d, ._, ._, ._ }, |
| 7682 | | .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, |
| 7683 | | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| 7684 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 7685 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7686 | | }, |
| 15104 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 15105 | .each = .{ .once = &.{ |
| 15106 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 15107 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 15108 | .{ .@"0:", .vp_, .xor, .tmp3x, .tmp3x, .tmp3x, ._ }, |
| 15109 | .{ ._, .vp_w, .insr, .tmp2x, .tmp3x, .memsi(.src0w, .@"2", .tmp0), .ui(0) }, |
| 15110 | .{ ._, .vp_w, .insr, .tmp3x, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0) }, |
| 15111 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 15112 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 15113 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 15114 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 15115 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, |
| 15116 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, |
| 15117 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, |
| 15118 | .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 1), ._, ._ }, |
| 15119 | .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, |
| 15120 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 15121 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 15122 | .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ }, |
| 15123 | .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ }, |
| 15124 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 15125 | .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ }, |
| 15126 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| 15127 | .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, |
| 15128 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 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 }, |
| 7690 | | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, |
| 15134 | .required_features = .{ .@"64bit", .avx, null, null }, |
| 15135 | .src_constraints = .{ |
| 15136 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 15137 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 15138 | }, |
| 7691 | 15139 | .patterns = &.{ |
| 7692 | 15140 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7693 | 15141 | }, |
| 15142 | .call_frame = .{ .alignment = .@"16" }, |
| 7694 | 15143 | .extra_temps = .{ |
| 7695 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7696 | 15144 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 7697 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 7698 | | .{ .kind = .{ .rc = .sse } }, |
| 15145 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 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 | 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 | 15211 | .unused, |
| 7701 | 15212 | }, |
| 7702 | 15213 | .dst_temps = .{.mem}, |
| 7703 | | .clobbers = .{ .eflags = true }, |
| 7704 | | .each = .{ .once = switch (cc) { |
| 7705 | | else => unreachable, |
| 7706 | | .e => &.{ |
| 7707 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7708 | | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 7709 | | .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7710 | | .{ ._, .vp_w, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 7711 | | .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ }, |
| 7712 | | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, |
| 7713 | | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, |
| 7714 | | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| 7715 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 7716 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7717 | | }, |
| 7718 | | .ne => &.{ |
| 7719 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7720 | | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 7721 | | .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7722 | | .{ ._, .vp_w, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 7723 | | .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ }, |
| 7724 | | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, |
| 7725 | | .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, |
| 7726 | | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, |
| 7727 | | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| 7728 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 7729 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7730 | | }, |
| 15214 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 15215 | .each = .{ .once = &.{ |
| 15216 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 15217 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 15218 | .{ .@"0:", .p_, .xor, .tmp2x, .tmp2x, ._, ._ }, |
| 15219 | .{ ._, .p_w, .insr, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ }, |
| 15220 | .{ ._, .p_, .xor, .tmp3x, .tmp3x, ._, ._ }, |
| 15221 | .{ ._, .p_w, .insr, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ }, |
| 15222 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 15223 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 15224 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 15225 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 15226 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, |
| 15227 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, |
| 15228 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, |
| 15229 | .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 1), ._, ._ }, |
| 15230 | .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, |
| 15231 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 15232 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 15233 | .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ }, |
| 15234 | .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ }, |
| 15235 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 15236 | .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ }, |
| 15237 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| 15238 | .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, |
| 15239 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 15240 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 15241 | .{ ._, ._r, .sh, .tmp5d, .si(9), ._, ._ }, |
| 15242 | .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp5), .tmp1q, ._, ._ }, |
| 7731 | 15243 | } }, |
| 7732 | 15244 | }, .{ |
| 7733 | | .required_features = .{ .avx, null, null, null }, |
| 7734 | | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, |
| 15245 | .required_features = .{ .@"64bit", .sse2, null, null }, |
| 15246 | .src_constraints = .{ |
| 15247 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 15248 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 15249 | }, |
| 7735 | 15250 | .patterns = &.{ |
| 7736 | 15251 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7737 | 15252 | }, |
| 15253 | .call_frame = .{ .alignment = .@"16" }, |
| 7738 | 15254 | .extra_temps = .{ |
| 7739 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7740 | | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| 7741 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 7742 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 7743 | | .{ .kind = .{ .rc = .sse } }, |
| 15255 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 15256 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 15257 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 15258 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| 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 | 15267 | .unused, |
| 7745 | 15268 | }, |
| 7746 | 15269 | .dst_temps = .{.mem}, |
| 7747 | | .clobbers = .{ .eflags = true }, |
| 7748 | | .each = .{ .once = switch (cc) { |
| 7749 | | else => unreachable, |
| 7750 | | .e => &.{ |
| 7751 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7752 | | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 7753 | | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 7754 | | .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7755 | | .{ ._, .vp_d, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 7756 | | .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ }, |
| 7757 | | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| 7758 | | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| 7759 | | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| 7760 | | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| 7761 | | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 7762 | | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| 7763 | | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| 7764 | | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| 7765 | | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 7766 | | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 7767 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7768 | | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| 7769 | | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 7770 | | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| 7771 | | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| 7772 | | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| 7773 | | }, |
| 7774 | | .ne => &.{ |
| 7775 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7776 | | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 7777 | | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 7778 | | .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7779 | | .{ ._, .vp_d, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 7780 | | .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ }, |
| 7781 | | .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ }, |
| 7782 | | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| 7783 | | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| 7784 | | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| 7785 | | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| 7786 | | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 7787 | | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| 7788 | | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| 7789 | | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| 7790 | | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 7791 | | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 7792 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7793 | | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| 7794 | | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 7795 | | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| 7796 | | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| 7797 | | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| 7798 | | }, |
| 15270 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 15271 | .each = .{ .once = &.{ |
| 15272 | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 15273 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 15274 | .{ .@"0:", .p_, .xor, .tmp2x, .tmp2x, ._, ._ }, |
| 15275 | .{ ._, .p_w, .insr, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ }, |
| 15276 | .{ ._, .p_, .xor, .tmp3x, .tmp3x, ._, ._ }, |
| 15277 | .{ ._, .p_w, .insr, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ }, |
| 15278 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 15279 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 15280 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 15281 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 15282 | .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, |
| 15283 | .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, |
| 15284 | .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, |
| 15285 | .{ ._, ._c, .in, .tmp0d, ._, ._, ._ }, |
| 15286 | .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, |
| 15287 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 15288 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 15289 | .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ }, |
| 15290 | .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ }, |
| 15291 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 15292 | .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ }, |
| 15293 | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| 15294 | .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, |
| 15295 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 15296 | .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, |
| 15297 | .{ ._, ._r, .sh, .tmp5d, .si(9), ._, ._ }, |
| 15298 | .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp5), .tmp1q, ._, ._ }, |
| 15299 | } }, |
| 15300 | }, .{ |
| 15301 | .required_features = .{ .@"64bit", .sse, .slow_incdec, null }, |
| 15302 | .src_constraints = .{ |
| 15303 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 15304 | .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, |
| 15305 | }, |
| 15306 | .patterns = &.{ |
| 15307 | .{ .src = .{ .to_mem, .to_mem } }, |
| 15308 | }, |
| 15309 | .call_frame = .{ .alignment = .@"16" }, |
| 15310 | .extra_temps = .{ |
| 15311 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 15312 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 15313 | .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, |
| 15314 | .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, |
| 15315 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| 15316 | else => unreachable, |
| 15317 | .e => "__eqhf2", |
| 15318 | .ne => "__nehf2", |
| 15319 | } } } }, |
| 15320 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| 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 }, |
| 7802 | | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, |
| 15359 | .required_features = .{ .@"64bit", .sse, null, null }, |
| 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 | 15422 | .patterns = &.{ |
| 7804 | 15423 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7805 | 15424 | }, |
| 7806 | 15425 | .extra_temps = .{ |
| 7807 | 15426 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7808 | | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| 7809 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 15427 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 15428 | .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, |
| 7810 | 15429 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 7811 | | .{ .kind = .{ .rc = .sse } }, |
| 15430 | .unused, |
| 15431 | .unused, |
| 15432 | .unused, |
| 15433 | .unused, |
| 7812 | 15434 | .unused, |
| 7813 | 15435 | }, |
| 7814 | 15436 | .dst_temps = .{.mem}, |
| 7815 | 15437 | .clobbers = .{ .eflags = true }, |
| 7816 | | .each = .{ .once = switch (cc) { |
| 7817 | | else => unreachable, |
| 7818 | | .e => &.{ |
| 7819 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7820 | | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 7821 | | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 7822 | | .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7823 | | .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 7824 | | .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4x, ._, ._ }, |
| 7825 | | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| 7826 | | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| 7827 | | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| 7828 | | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| 7829 | | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 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 | | }, |
| 15438 | .each = .{ .once = &.{ |
| 15439 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 15440 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 15441 | .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 15442 | .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) { |
| 15443 | else => unreachable, |
| 15444 | .e => 0b00000, |
| 15445 | .ne => 0b00100, |
| 15446 | }) }, |
| 15447 | .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ }, |
| 15448 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, |
| 15449 | .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, |
| 15450 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 15451 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7867 | 15452 | } }, |
| 7868 | 15453 | }, .{ |
| 7869 | | .required_features = .{ .sse2, null, null, null }, |
| 7870 | | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| 15454 | .required_features = .{ .avx, null, null, null }, |
| 15455 | .src_constraints = .{ |
| 15456 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, |
| 15457 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, |
| 15458 | }, |
| 7871 | 15459 | .patterns = &.{ |
| 7872 | 15460 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7873 | 15461 | }, |
| 7874 | 15462 | .extra_temps = .{ |
| 7875 | 15463 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 7876 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 7877 | | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| 7878 | | .{ .kind = .{ .rc = .sse } }, |
| 15464 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 15465 | .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, |
| 15466 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 15467 | .unused, |
| 15468 | .unused, |
| 15469 | .unused, |
| 7879 | 15470 | .unused, |
| 7880 | 15471 | .unused, |
| 7881 | 15472 | }, |
| 7882 | 15473 | .dst_temps = .{.mem}, |
| 7883 | 15474 | .clobbers = .{ .eflags = true }, |
| 7884 | | .each = .{ .once = switch (cc) { |
| 7885 | | else => unreachable, |
| 7886 | | .e => &.{ |
| 7887 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7888 | | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 7889 | | .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7890 | | .{ ._, .p_b, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7891 | | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, |
| 7892 | | .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, |
| 7893 | | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| 7894 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 7895 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7896 | | }, |
| 7897 | | .ne => &.{ |
| 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 | | }, |
| 15475 | .each = .{ .once = &.{ |
| 15476 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 15477 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 15478 | .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 15479 | .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) { |
| 15480 | else => unreachable, |
| 15481 | .e => 0b00000, |
| 15482 | .ne => 0b00100, |
| 15483 | }) }, |
| 15484 | .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ }, |
| 15485 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, |
| 15486 | .{ ._, ._c, .in, .tmp1q, ._, ._, ._ }, |
| 15487 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 15488 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7909 | 15489 | } }, |
| 7910 | 15490 | }, .{ |
| 7911 | 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 | 15496 | .patterns = &.{ |
| 7914 | 15497 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7915 | 15498 | }, |
| 7916 | 15499 | .extra_temps = .{ |
| 7917 | 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 | 15504 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 7920 | | .{ .kind = .{ .rc = .sse } }, |
| 15505 | .unused, |
| 15506 | .unused, |
| 7921 | 15507 | .unused, |
| 7922 | 15508 | .unused, |
| 7923 | 15509 | }, |
| 7924 | 15510 | .dst_temps = .{.mem}, |
| 7925 | 15511 | .clobbers = .{ .eflags = true }, |
| 7926 | | .each = .{ .once = switch (cc) { |
| 7927 | | else => unreachable, |
| 7928 | | .e => &.{ |
| 7929 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7930 | | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 7931 | | .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7932 | | .{ ._, .p_w, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7933 | | .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ }, |
| 7934 | | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, |
| 7935 | | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, |
| 7936 | | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| 7937 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 7938 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7939 | | }, |
| 7940 | | .ne => &.{ |
| 7941 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7942 | | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 7943 | | .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7944 | | .{ ._, .p_w, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7945 | | .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ }, |
| 7946 | | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, |
| 7947 | | .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, |
| 7948 | | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, |
| 7949 | | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| 7950 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 7951 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7952 | | }, |
| 15512 | .each = .{ .once = &.{ |
| 15513 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 15514 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 15515 | .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 15516 | .{ ._, ._ps, .mova, .tmp3x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ }, |
| 15517 | .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) { |
| 15518 | else => unreachable, |
| 15519 | .e => 0b00000, |
| 15520 | .ne => 0b00100, |
| 15521 | }), ._ }, |
| 15522 | .{ ._, ._ps, .cmp, .tmp3x, .memiad(.src1x, .tmp0, .add_size, 16), .ui(switch (cc) { |
| 15523 | else => unreachable, |
| 15524 | .e => 0b00000, |
| 15525 | .ne => 0b00100, |
| 15526 | }), ._ }, |
| 15527 | .{ ._, .p_w, .ackssd, .tmp2x, .tmp3x, ._, ._ }, |
| 15528 | .{ ._, .p_b, .ackssw, .tmp2x, .tmp2x, ._, ._ }, |
| 15529 | .{ ._, .p_b, .movmsk, .tmp4d, .tmp2x, ._, ._ }, |
| 15530 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, |
| 15531 | .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, |
| 15532 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 15533 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7953 | 15534 | } }, |
| 7954 | 15535 | }, .{ |
| 7955 | | .required_features = .{ .sse2, null, null, null }, |
| 7956 | | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, |
| 15536 | .required_features = .{ .sse, null, null, null }, |
| 15537 | .src_constraints = .{ |
| 15538 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, |
| 15539 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, |
| 15540 | }, |
| 7957 | 15541 | .patterns = &.{ |
| 7958 | 15542 | .{ .src = .{ .to_mem, .to_mem } }, |
| 7959 | 15543 | }, |
| 7960 | 15544 | .extra_temps = .{ |
| 7961 | 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 | 15548 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 7964 | 15549 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 7965 | | .{ .kind = .{ .rc = .sse } }, |
| 15550 | .unused, |
| 15551 | .unused, |
| 15552 | .unused, |
| 7966 | 15553 | .unused, |
| 7967 | 15554 | }, |
| 7968 | 15555 | .dst_temps = .{.mem}, |
| 7969 | 15556 | .clobbers = .{ .eflags = true }, |
| 7970 | | .each = .{ .once = switch (cc) { |
| 7971 | | else => unreachable, |
| 7972 | | .e => &.{ |
| 7973 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 7974 | | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 7975 | | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 7976 | | .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 7977 | | .{ ._, .p_d, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 7978 | | .{ ._, ._ps, .movmsk, .tmp3d, .tmp4x, ._, ._ }, |
| 7979 | | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| 7980 | | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| 7981 | | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| 7982 | | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| 7983 | | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 7984 | | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| 7985 | | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| 7986 | | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| 7987 | | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 7988 | | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 7989 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 7990 | | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| 7991 | | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 7992 | | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| 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 | | }, |
| 15557 | .each = .{ .once = &.{ |
| 15558 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 15559 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 15560 | .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 15561 | .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) { |
| 15562 | else => unreachable, |
| 15563 | .e => 0b00000, |
| 15564 | .ne => 0b00100, |
| 15565 | }), ._ }, |
| 15566 | .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ }, |
| 15567 | .{ ._, ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ }, |
| 15568 | .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, 16), .ui(switch (cc) { |
| 15569 | else => unreachable, |
| 15570 | .e => 0b00000, |
| 15571 | .ne => 0b00100, |
| 15572 | }), ._ }, |
| 15573 | .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ }, |
| 15574 | .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ }, |
| 15575 | .{ ._, ._, .@"or", .tmp3b, .tmp4b, ._, ._ }, |
| 15576 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, |
| 15577 | .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, |
| 15578 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 15579 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8021 | 15580 | } }, |
| 8022 | 15581 | }, .{ |
| 8023 | | .required_features = .{ .sse4_1, null, null, null }, |
| 8024 | | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, |
| 15582 | .required_features = .{ .sse, null, null, null }, |
| 15583 | .src_constraints = .{ |
| 15584 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, |
| 15585 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, |
| 15586 | }, |
| 8025 | 15587 | .patterns = &.{ |
| 8026 | 15588 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8027 | 15589 | }, |
| 8028 | 15590 | .extra_temps = .{ |
| 8029 | 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 | 15594 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 8032 | 15595 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 8033 | | .{ .kind = .{ .rc = .sse } }, |
| 15596 | .unused, |
| 15597 | .unused, |
| 15598 | .unused, |
| 8034 | 15599 | .unused, |
| 8035 | 15600 | }, |
| 8036 | 15601 | .dst_temps = .{.mem}, |
| 8037 | 15602 | .clobbers = .{ .eflags = true }, |
| 8038 | | .each = .{ .once = switch (cc) { |
| 8039 | | else => unreachable, |
| 8040 | | .e => &.{ |
| 8041 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8042 | | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8043 | | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 8044 | | .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 8045 | | .{ ._, .p_q, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 8046 | | .{ ._, ._pd, .movmsk, .tmp3d, .tmp4x, ._, ._ }, |
| 8047 | | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| 8048 | | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| 8049 | | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| 8050 | | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| 8051 | | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 8052 | | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| 8053 | | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| 8054 | | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| 8055 | | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 8056 | | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 8057 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8058 | | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| 8059 | | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 8060 | | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| 8061 | | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| 8062 | | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| 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 | | }, |
| 15603 | .each = .{ .once = &.{ |
| 15604 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 15605 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 15606 | .{ ._, ._mp, .j, .@"1f", ._, ._, ._ }, |
| 15607 | .{ .@"0:", ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, -16), ._, ._ }, |
| 15608 | .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, -16), .ui(switch (cc) { |
| 15609 | else => unreachable, |
| 15610 | .e => 0b00000, |
| 15611 | .ne => 0b00100, |
| 15612 | }), ._ }, |
| 15613 | .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ }, |
| 15614 | .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ }, |
| 15615 | .{ ._, ._, .@"or", .tmp3b, .tmp4b, ._, ._ }, |
| 15616 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, |
| 15617 | .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, |
| 15618 | .{ .@"1:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 15619 | .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) { |
| 15620 | else => unreachable, |
| 15621 | .e => 0b00000, |
| 15622 | .ne => 0b00100, |
| 15623 | }), ._ }, |
| 15624 | .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ }, |
| 15625 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 15626 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 15627 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, |
| 8089 | 15628 | } }, |
| 8090 | 15629 | }, .{ |
| 8091 | | .required_features = .{ .sse, .mmx, null, null }, |
| 8092 | | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| 15630 | .required_features = .{ .avx, .slow_incdec, null, null }, |
| 15631 | .src_constraints = .{ |
| 15632 | .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } }, |
| 15633 | .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } }, |
| 15634 | }, |
| 8093 | 15635 | .patterns = &.{ |
| 8094 | 15636 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8095 | 15637 | }, |
| 8096 | 15638 | .extra_temps = .{ |
| 8097 | 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 | 15643 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 8100 | | .{ .kind = .{ .rc = .mmx } }, |
| 15644 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 15645 | .unused, |
| 8101 | 15646 | .unused, |
| 8102 | 15647 | .unused, |
| 8103 | 15648 | }, |
| 8104 | 15649 | .dst_temps = .{.mem}, |
| 8105 | 15650 | .clobbers = .{ .eflags = true }, |
| 8106 | | .each = .{ .once = switch (cc) { |
| 8107 | | else => unreachable, |
| 8108 | | .e => &.{ |
| 8109 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8110 | | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8111 | | .{ .@"0:", ._q, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 8112 | | .{ ._, .p_b, .cmpeq, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 8113 | | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ }, |
| 8114 | | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, |
| 8115 | | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| 8116 | | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 8117 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8118 | | }, |
| 8119 | | .ne => &.{ |
| 8120 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8121 | | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8122 | | .{ .@"0:", ._q, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 8123 | | .{ ._, .p_b, .cmpeq, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 8124 | | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ }, |
| 8125 | | .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, |
| 8126 | | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, |
| 8127 | | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| 8128 | | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 8129 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8130 | | }, |
| 15651 | .each = .{ .once = &.{ |
| 15652 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 15653 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 15654 | .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 15655 | .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ }, |
| 15656 | .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) { |
| 15657 | else => unreachable, |
| 15658 | .e => 0b00000, |
| 15659 | .ne => 0b00100, |
| 15660 | }) }, |
| 15661 | .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .ui(switch (cc) { |
| 15662 | else => unreachable, |
| 15663 | .e => 0b00000, |
| 15664 | .ne => 0b00100, |
| 15665 | }) }, |
| 15666 | .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ }, |
| 15667 | .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ }, |
| 15668 | .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ }, |
| 15669 | .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ }, |
| 15670 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, |
| 15671 | .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, |
| 15672 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 15673 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8131 | 15674 | } }, |
| 8132 | 15675 | }, .{ |
| 8133 | | .required_features = .{ .sse, .mmx, null, null }, |
| 8134 | | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, |
| 15676 | .required_features = .{ .avx, null, null, null }, |
| 15677 | .src_constraints = .{ |
| 15678 | .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } }, |
| 15679 | .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } }, |
| 15680 | }, |
| 8135 | 15681 | .patterns = &.{ |
| 8136 | 15682 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8137 | 15683 | }, |
| 8138 | 15684 | .extra_temps = .{ |
| 8139 | 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 | 15689 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 8142 | | .{ .kind = .{ .rc = .mmx } }, |
| 8143 | 15690 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 8144 | | .{ .kind = .{ .rc = .mmx } }, |
| 15691 | .unused, |
| 15692 | .unused, |
| 15693 | .unused, |
| 8145 | 15694 | }, |
| 8146 | 15695 | .dst_temps = .{.mem}, |
| 8147 | 15696 | .clobbers = .{ .eflags = true }, |
| 8148 | | .each = .{ .once = switch (cc) { |
| 8149 | | else => unreachable, |
| 8150 | | .e => &.{ |
| 8151 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8152 | | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8153 | | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 8154 | | .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ }, |
| 8155 | | .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 8156 | | .{ ._, .p_w, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 8157 | | .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ }, |
| 8158 | | .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ }, |
| 8159 | | .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, |
| 8160 | | .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, |
| 8161 | | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| 8162 | | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| 8163 | | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 8164 | | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| 8165 | | .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ }, |
| 8166 | | .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ }, |
| 8167 | | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 8168 | | .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 8169 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8170 | | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| 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 | | }, |
| 15697 | .each = .{ .once = &.{ |
| 15698 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 15699 | .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, |
| 15700 | .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 15701 | .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ }, |
| 15702 | .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) { |
| 15703 | else => unreachable, |
| 15704 | .e => 0b00000, |
| 15705 | .ne => 0b00100, |
| 15706 | }) }, |
| 15707 | .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .ui(switch (cc) { |
| 15708 | else => unreachable, |
| 15709 | .e => 0b00000, |
| 15710 | .ne => 0b00100, |
| 15711 | }) }, |
| 15712 | .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ }, |
| 15713 | .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ }, |
| 15714 | .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ }, |
| 15715 | .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ }, |
| 15716 | .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, |
| 15717 | .{ ._, ._c, .in, .tmp1q, ._, ._, ._ }, |
| 15718 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 15719 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8203 | 15720 | } }, |
| 8204 | 15721 | }, .{ |
| 8205 | | .required_features = .{ .sse, .mmx, null, null }, |
| 8206 | | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, |
| 15722 | .required_features = .{ .avx, null, null, null }, |
| 15723 | .src_constraints = .{ |
| 15724 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, |
| 15725 | .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, |
| 15726 | }, |
| 8207 | 15727 | .patterns = &.{ |
| 8208 | 15728 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8209 | 15729 | }, |
| 8210 | 15730 | .extra_temps = .{ |
| 8211 | 15731 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8212 | 15732 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| 15733 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 15734 | .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, |
| 8213 | 15735 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 8214 | | .{ .kind = .{ .rc = .mmx } }, |
| 8215 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 8216 | | .{ .kind = .{ .rc = .mmx } }, |
| 15736 | .unused, |
| 15737 | .unused, |
| 15738 | .unused, |
| 15739 | .unused, |
| 8217 | 15740 | }, |
| 8218 | 15741 | .dst_temps = .{.mem}, |
| 8219 | 15742 | .clobbers = .{ .eflags = true }, |
| 8220 | | .each = .{ .once = switch (cc) { |
| 8221 | | else => unreachable, |
| 8222 | | .e => &.{ |
| 8223 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8224 | | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8225 | | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 8226 | | .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ }, |
| 8227 | | .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 8228 | | .{ ._, .p_d, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 8229 | | .{ ._, .p_w, .ackssd, .tmp5q, .tmp3q, ._, ._ }, |
| 8230 | | .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ }, |
| 8231 | | .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ }, |
| 8232 | | .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, |
| 8233 | | .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, |
| 8234 | | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| 8235 | | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| 8236 | | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 8237 | | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| 8238 | | .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ }, |
| 8239 | | .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ }, |
| 8240 | | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 8241 | | .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 8242 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8243 | | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| 8244 | | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 8245 | | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| 8246 | | .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ }, |
| 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 | | }, |
| 15743 | .each = .{ .once = &.{ |
| 15744 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 15745 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 15746 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 15747 | .{ .@"0:", .v_pd, .mova, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 15748 | .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) { |
| 15749 | else => unreachable, |
| 15750 | .e => 0b00000, |
| 15751 | .ne => 0b00100, |
| 15752 | }) }, |
| 15753 | .{ ._, .v_pd, .movmsk, .tmp4d, .tmp3y, ._, ._ }, |
| 15754 | .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, |
| 15755 | .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, |
| 15756 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| 15757 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| 15758 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 15759 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| 15760 | .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ }, |
| 15761 | .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ }, |
| 15762 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 15763 | .{ .@"1:", ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 15764 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 15765 | .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, |
| 15766 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 15767 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| 15768 | .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ }, |
| 15769 | .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ }, |
| 8277 | 15770 | } }, |
| 8278 | 15771 | }, .{ |
| 8279 | | .dst_constraints = .{.{ .bool_vec = .byte }}, |
| 8280 | | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| 15772 | .required_features = .{ .sse2, null, null, null }, |
| 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 | 15827 | .patterns = &.{ |
| 8282 | 15828 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8283 | 15829 | }, |
| 8284 | 15830 | .extra_temps = .{ |
| 8285 | 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 | 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 | 15838 | .unused, |
| 8290 | 15839 | .unused, |
| 8291 | 15840 | }, |
| 8292 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 15841 | .dst_temps = .{.mem}, |
| 8293 | 15842 | .clobbers = .{ .eflags = true }, |
| 8294 | 15843 | .each = .{ .once = &.{ |
| 8295 | | .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ }, |
| 8296 | 15844 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8297 | | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| 8298 | | .{ .@"0:", ._, .mov, .tmp2b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 8299 | | .{ ._, ._, .cmp, .tmp2b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 8300 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 8301 | | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, |
| 8302 | | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, |
| 8303 | | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| 8304 | | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 15845 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 15846 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 15847 | .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ }, |
| 15848 | .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, |
| 15849 | .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ }, |
| 15850 | .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ }, |
| 15851 | .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ }, |
| 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 | 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 }}, |
| 8309 | | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, |
| 15882 | .required_features = .{ .x87, .cmov, null, null }, |
| 15883 | .src_constraints = .{ |
| 15884 | .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, |
| 15885 | .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, |
| 15886 | }, |
| 8310 | 15887 | .patterns = &.{ |
| 8311 | 15888 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8312 | 15889 | }, |
| 8313 | 15890 | .extra_temps = .{ |
| 8314 | 15891 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8315 | | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 8316 | | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| 8317 | | .unused, |
| 15892 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| 15893 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 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 | 15898 | .unused, |
| 8319 | 15899 | .unused, |
| 8320 | 15900 | }, |
| 8321 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 15901 | .dst_temps = .{.mem}, |
| 8322 | 15902 | .clobbers = .{ .eflags = true }, |
| 8323 | 15903 | .each = .{ .once = &.{ |
| 8324 | | .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ }, |
| 8325 | 15904 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8326 | | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| 8327 | | .{ .@"0:", ._, .mov, .tmp2w, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 8328 | | .{ ._, ._, .cmp, .tmp2w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 8329 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 8330 | | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| 8331 | | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| 8332 | | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| 8333 | | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 15905 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 15906 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 15907 | .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ }, |
| 15908 | .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, |
| 15909 | .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ }, |
| 15910 | .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ }, |
| 15911 | .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ }, |
| 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 | 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 }}, |
| 8338 | | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, |
| 15942 | .required_features = .{ .x87, null, null, null }, |
| 15943 | .src_constraints = .{ |
| 15944 | .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, |
| 15945 | .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, |
| 15946 | }, |
| 8339 | 15947 | .patterns = &.{ |
| 8340 | 15948 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8341 | 15949 | }, |
| 8342 | 15950 | .extra_temps = .{ |
| 8343 | 15951 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8344 | | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 15952 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| 8345 | 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 | 15958 | .unused, |
| 8348 | 15959 | .unused, |
| 8349 | 15960 | }, |
| 8350 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 15961 | .dst_temps = .{.mem}, |
| 8351 | 15962 | .clobbers = .{ .eflags = true }, |
| 8352 | 15963 | .each = .{ .once = &.{ |
| 8353 | | .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ }, |
| 8354 | 15964 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8355 | | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| 8356 | | .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 8357 | | .{ ._, ._, .cmp, .tmp2d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 8358 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 8359 | | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, |
| 8360 | | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, |
| 8361 | | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| 8362 | | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| 15965 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 15966 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 15967 | .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ }, |
| 15968 | .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ }, |
| 15969 | .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ }, |
| 15970 | .{ ._, .f_pp, .ucom, ._, ._, ._, ._ }, |
| 15971 | .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ }, |
| 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 | 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 }, |
| 8367 | | .dst_constraints = .{.{ .bool_vec = .byte }}, |
| 8368 | | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, |
| 15993 | .required_features = .{ .x87, .cmov, .slow_incdec, null }, |
| 15994 | .src_constraints = .{ |
| 15995 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 15996 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 15997 | }, |
| 8369 | 15998 | .patterns = &.{ |
| 8370 | 15999 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8371 | 16000 | }, |
| 8372 | 16001 | .extra_temps = .{ |
| 8373 | 16002 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8374 | | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 8375 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 8376 | | .unused, |
| 16003 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| 16004 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 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 | 16009 | .unused, |
| 8378 | 16010 | .unused, |
| 8379 | 16011 | }, |
| 8380 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 16012 | .dst_temps = .{.mem}, |
| 8381 | 16013 | .clobbers = .{ .eflags = true }, |
| 8382 | 16014 | .each = .{ .once = &.{ |
| 8383 | | .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ }, |
| 8384 | 16015 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8385 | | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| 8386 | | .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 8387 | | .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 8388 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 8389 | | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, |
| 8390 | | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, |
| 8391 | | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| 8392 | | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 16016 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 16017 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 16018 | .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ }, |
| 16019 | .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, |
| 16020 | .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ }, |
| 16021 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 16022 | .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ }, |
| 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 | 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 | 16058 | .patterns = &.{ |
| 8398 | 16059 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8399 | 16060 | }, |
| 8400 | 16061 | .extra_temps = .{ |
| 8401 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 8402 | | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 16062 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 16063 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| 8403 | 16064 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 8404 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 8405 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 16065 | .{ .type = .u8, .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 | 16070 | .unused, |
| 8407 | 16071 | }, |
| 8408 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 16072 | .dst_temps = .{.mem}, |
| 8409 | 16073 | .clobbers = .{ .eflags = true }, |
| 8410 | 16074 | .each = .{ .once = &.{ |
| 8411 | | .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ }, |
| 8412 | | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 8413 | | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| 8414 | | .{ .@"0:", ._, .mov, .tmp2d, .sa(.src0p, .add_elem_limbs), ._, ._ }, |
| 8415 | | .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, |
| 8416 | | .{ .@"1:", ._, .mov, .tmp4p, .memi(.src0p, .tmp0), ._, ._ }, |
| 8417 | | .{ ._, ._, .xor, .tmp4p, .memi(.src1p, .tmp0), ._, ._ }, |
| 8418 | | .{ ._, ._, .@"or", .tmp3p, .tmp4p, ._, ._ }, |
| 8419 | | .{ ._, ._, .add, .tmp0p, .sa(.tmp4, .add_size), ._, ._ }, |
| 8420 | | .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ }, |
| 8421 | | .{ ._, ._b, .j, .@"1b", ._, ._, ._ }, |
| 8422 | | .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ }, |
| 8423 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 8424 | | .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ }, |
| 8425 | | .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ }, |
| 8426 | | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| 8427 | | .{ ._, ._, .cmp, .tmp1b, .sa(.dst0, .add_len), ._, ._ }, |
| 8428 | | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| 16075 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 16076 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 16077 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 16078 | .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ }, |
| 16079 | .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, |
| 16080 | .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ }, |
| 16081 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 16082 | .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ }, |
| 16083 | .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ }, |
| 16084 | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, |
| 16085 | .{ ._, switch (cc) { |
| 16086 | else => unreachable, |
| 16087 | .e => ._np, |
| 16088 | .ne => ._p, |
| 16089 | }, .set, .tmp4b, ._, ._, ._ }, |
| 16090 | .{ ._, ._, switch (cc) { |
| 16091 | else => unreachable, |
| 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 }}, |
| 8432 | | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| 16113 | .required_features = .{ .x87, null, null, null }, |
| 16114 | .src_constraints = .{ |
| 16115 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 16116 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, |
| 16117 | }, |
| 8433 | 16118 | .patterns = &.{ |
| 8434 | 16119 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8435 | 16120 | }, |
| 8436 | 16121 | .extra_temps = .{ |
| 8437 | 16122 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8438 | | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 16123 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| 8439 | 16124 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 8440 | 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 | 16129 | .unused, |
| 8442 | 16130 | .unused, |
| 8443 | 16131 | }, |
| 8444 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 16132 | .dst_temps = .{.mem}, |
| 8445 | 16133 | .clobbers = .{ .eflags = true }, |
| 8446 | 16134 | .each = .{ .once = &.{ |
| 8447 | | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 8448 | 16135 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8449 | | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| 8450 | | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8451 | | .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 8452 | | .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 8453 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 8454 | | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| 8455 | | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| 8456 | | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| 8457 | | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 16136 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 16137 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 16138 | .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ }, |
| 16139 | .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ }, |
| 16140 | .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ }, |
| 16141 | .{ ._, .f_pp, .ucom, ._, ._, ._, ._ }, |
| 16142 | .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ }, |
| 16143 | .{ ._, ._, .xor, .tmp6b, .si(0b0_1_000_000), ._, ._ }, |
| 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 | 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 | 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 | 16170 | .patterns = &.{ |
| 8464 | 16171 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8465 | 16172 | }, |
| 16173 | .call_frame = .{ .alignment = .@"16" }, |
| 8466 | 16174 | .extra_temps = .{ |
| 8467 | 16175 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8468 | | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 8469 | 16176 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 8470 | | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| 8471 | | .unused, |
| 16177 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 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 | 16187 | .unused, |
| 8473 | 16188 | }, |
| 8474 | 16189 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 8475 | | .clobbers = .{ .eflags = true }, |
| 16190 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 8476 | 16191 | .each = .{ .once = &.{ |
| 8477 | 16192 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 8478 | 16193 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8479 | | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| 8480 | | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8481 | | .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 8482 | | .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 8483 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 8484 | | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| 8485 | | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| 8486 | | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| 8487 | | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 16194 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 16195 | .{ .@"0:", .v_dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 16196 | .{ ._, .v_dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 16197 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 16198 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 16199 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 16200 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 16201 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 16202 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| 16203 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| 16204 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| 16205 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 8488 | 16206 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8489 | 16207 | } }, |
| 8490 | 16208 | }, .{ |
| 16209 | .required_features = .{ .avx, .slow_incdec, null, null }, |
| 8491 | 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 | 16215 | .patterns = &.{ |
| 8494 | 16216 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8495 | 16217 | }, |
| 16218 | .call_frame = .{ .alignment = .@"16" }, |
| 8496 | 16219 | .extra_temps = .{ |
| 8497 | 16220 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8498 | | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 8499 | 16221 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 8500 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 8501 | | .unused, |
| 16222 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 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 | 16232 | .unused, |
| 8503 | 16233 | }, |
| 8504 | 16234 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 8505 | | .clobbers = .{ .eflags = true }, |
| 16235 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 8506 | 16236 | .each = .{ .once = &.{ |
| 8507 | 16237 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 8508 | 16238 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8509 | | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| 8510 | | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8511 | | .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 8512 | | .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 8513 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 8514 | | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| 8515 | | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| 8516 | | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| 8517 | | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| 16239 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 16240 | .{ .@"0:", .v_dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 16241 | .{ ._, .v_dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 16242 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 16243 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 16244 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 16245 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 16246 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 16247 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| 16248 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| 16249 | .{ ._, ._c, .in, .tmp1d, ._, ._, ._ }, |
| 16250 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 8518 | 16251 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8519 | 16252 | } }, |
| 8520 | 16253 | }, .{ |
| 8521 | | .required_features = .{ .@"64bit", null, null, null }, |
| 16254 | .required_features = .{ .sse2, .slow_incdec, null, null }, |
| 8522 | 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 | 16260 | .patterns = &.{ |
| 8525 | 16261 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8526 | 16262 | }, |
| 16263 | .call_frame = .{ .alignment = .@"16" }, |
| 8527 | 16264 | .extra_temps = .{ |
| 8528 | 16265 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8529 | | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 8530 | 16266 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 8531 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 8532 | | .unused, |
| 16267 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 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 | 16277 | .unused, |
| 8534 | 16278 | }, |
| 8535 | 16279 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 8536 | | .clobbers = .{ .eflags = true }, |
| 16280 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 8537 | 16281 | .each = .{ .once = &.{ |
| 8538 | 16282 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 8539 | 16283 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8540 | | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| 8541 | | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8542 | | .{ ._, ._, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 8543 | | .{ ._, ._, .cmp, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 8544 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 8545 | | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| 8546 | | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| 8547 | | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| 8548 | | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 16284 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 16285 | .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 16286 | .{ ._, ._dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 16287 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 16288 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 16289 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 16290 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 16291 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 16292 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| 16293 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| 16294 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| 16295 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 8549 | 16296 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8550 | 16297 | } }, |
| 8551 | 16298 | }, .{ |
| 16299 | .required_features = .{ .sse2, .slow_incdec, null, null }, |
| 8552 | 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 | 16305 | .patterns = &.{ |
| 8554 | 16306 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8555 | 16307 | }, |
| 16308 | .call_frame = .{ .alignment = .@"16" }, |
| 8556 | 16309 | .extra_temps = .{ |
| 8557 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 8558 | | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 16310 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8559 | 16311 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 8560 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 8561 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 16312 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 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 | 16322 | .unused, |
| 8563 | 16323 | }, |
| 8564 | 16324 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 8565 | | .clobbers = .{ .eflags = true }, |
| 16325 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 8566 | 16326 | .each = .{ .once = &.{ |
| 8567 | 16327 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 8568 | | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 8569 | | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| 8570 | | .{ .@"0:", ._, .mov, .tmp2d, .sa(.src0p, .add_elem_limbs), ._, ._ }, |
| 8571 | | .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, |
| 8572 | | .{ .@"1:", ._, .mov, .tmp4p, .memi(.src0p, .tmp0), ._, ._ }, |
| 8573 | | .{ ._, ._, .xor, .tmp4p, .memi(.src1p, .tmp0), ._, ._ }, |
| 8574 | | .{ ._, ._, .@"or", .tmp3p, .tmp4p, ._, ._ }, |
| 8575 | | .{ ._, ._, .add, .tmp0p, .sa(.tmp4, .add_size), ._, ._ }, |
| 8576 | | .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ }, |
| 8577 | | .{ ._, ._b, .j, .@"1b", ._, ._, ._ }, |
| 8578 | | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8579 | | .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ }, |
| 8580 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 8581 | | .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ }, |
| 8582 | | .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ }, |
| 8583 | | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| 8584 | | .{ ._, ._, .cmp, .tmp1b, .sa(.dst0, .add_len), ._, ._ }, |
| 8585 | | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| 16328 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 16329 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 16330 | .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 16331 | .{ ._, ._dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 16332 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 16333 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 16334 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 16335 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 16336 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 16337 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| 16338 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| 16339 | .{ ._, ._c, .in, .tmp1d, ._, ._, ._ }, |
| 16340 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 16341 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8586 | 16342 | } }, |
| 8587 | 16343 | }, .{ |
| 8588 | | .required_features = .{ .@"64bit", null, null, null }, |
| 8589 | | .dst_constraints = .{.{ .bool_vec = .qword }}, |
| 8590 | | .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, |
| 16344 | .required_features = .{ .sse, .slow_incdec, null, null }, |
| 16345 | .dst_constraints = .{.{ .bool_vec = .dword }}, |
| 16346 | .src_constraints = .{ |
| 16347 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 16348 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 16349 | }, |
| 8591 | 16350 | .patterns = &.{ |
| 8592 | 16351 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8593 | 16352 | }, |
| 16353 | .call_frame = .{ .alignment = .@"16" }, |
| 8594 | 16354 | .extra_temps = .{ |
| 8595 | 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 | 16365 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 8597 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 8598 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 8599 | | .unused, |
| 16366 | .{ .type = .u32, .kind = .{ .reg = .edx } }, |
| 8600 | 16367 | .unused, |
| 8601 | 16368 | }, |
| 8602 | 16369 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 8603 | | .clobbers = .{ .eflags = true }, |
| 16370 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 8604 | 16371 | .each = .{ .once = &.{ |
| 8605 | 16372 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 8606 | 16373 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8607 | | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| 8608 | | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8609 | | .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 8610 | | .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 8611 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 8612 | | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, |
| 8613 | | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, |
| 8614 | | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| 8615 | | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 16374 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 16375 | .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 16376 | .{ ._, ._ps, .mova, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 16377 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 16378 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 16379 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 16380 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 16381 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 16382 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| 16383 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| 16384 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| 16385 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 8616 | 16386 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8617 | 16387 | } }, |
| 8618 | 16388 | }, .{ |
| 8619 | | .required_features = .{ .@"64bit", null, null, null }, |
| 8620 | | .dst_constraints = .{.{ .bool_vec = .qword }}, |
| 8621 | | .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, |
| 16389 | .required_features = .{ .sse2, .slow_incdec, null, null }, |
| 16390 | .dst_constraints = .{.{ .bool_vec = .dword }}, |
| 16391 | .src_constraints = .{ |
| 16392 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 16393 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 16394 | }, |
| 8622 | 16395 | .patterns = &.{ |
| 8623 | 16396 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8624 | 16397 | }, |
| 16398 | .call_frame = .{ .alignment = .@"16" }, |
| 8625 | 16399 | .extra_temps = .{ |
| 8626 | 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 | 16410 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 8628 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 8629 | | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| 8630 | | .unused, |
| 16411 | .{ .type = .u32, .kind = .{ .reg = .edx } }, |
| 8631 | 16412 | .unused, |
| 8632 | 16413 | }, |
| 8633 | 16414 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 8634 | | .clobbers = .{ .eflags = true }, |
| 16415 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 8635 | 16416 | .each = .{ .once = &.{ |
| 8636 | 16417 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 8637 | 16418 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8638 | | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8639 | | .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ }, |
| 8640 | | .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ }, |
| 8641 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 8642 | | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, |
| 8643 | | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, |
| 8644 | | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| 8645 | | .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, |
| 16419 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 16420 | .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 16421 | .{ ._, ._ps, .mova, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 16422 | .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, |
| 16423 | .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ }, |
| 16424 | .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ }, |
| 16425 | .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ }, |
| 16426 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 16427 | .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, |
| 16428 | .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, |
| 16429 | .{ ._, ._c, .in, .tmp1d, ._, ._, ._ }, |
| 16430 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 8646 | 16431 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8647 | 16432 | } }, |
| 8648 | 16433 | }, .{ |
| 8649 | | .required_features = .{ .@"64bit", null, null, null }, |
| 8650 | | .dst_constraints = .{.{ .bool_vec = .qword }}, |
| 8651 | | .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, |
| 16434 | .required_features = .{ .@"64bit", .avx, .slow_incdec, null }, |
| 16435 | .src_constraints = .{ |
| 16436 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 16437 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 16438 | }, |
| 8652 | 16439 | .patterns = &.{ |
| 8653 | 16440 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8654 | 16441 | }, |
| 16442 | .call_frame = .{ .alignment = .@"16" }, |
| 8655 | 16443 | .extra_temps = .{ |
| 8656 | 16444 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8657 | | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 8658 | | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 8659 | 16445 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 8660 | | .unused, |
| 8661 | | .unused, |
| 16446 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 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 }}, |
| 8664 | | .clobbers = .{ .eflags = true }, |
| 16458 | .dst_temps = .{.mem}, |
| 16459 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 8665 | 16460 | .each = .{ .once = &.{ |
| 8666 | | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 8667 | 16461 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8668 | | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| 8669 | | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8670 | | .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ }, |
| 8671 | | .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ }, |
| 8672 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 8673 | | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, |
| 8674 | | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, |
| 8675 | | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| 8676 | | .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, |
| 16462 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 16463 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 16464 | .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 16465 | .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 16466 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| 16467 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, |
| 16468 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, |
| 16469 | .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ }, |
| 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 | 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 }, |
| 8681 | | .dst_constraints = .{.{ .bool_vec = .qword }}, |
| 8682 | | .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, |
| 16489 | .required_features = .{ .@"64bit", .avx, null, null }, |
| 16490 | .src_constraints = .{ |
| 16491 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 16492 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 16493 | }, |
| 8683 | 16494 | .patterns = &.{ |
| 8684 | 16495 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8685 | 16496 | }, |
| 16497 | .call_frame = .{ .alignment = .@"16" }, |
| 8686 | 16498 | .extra_temps = .{ |
| 8687 | 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 | 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 | 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 | 16611 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 8691 | | .unused, |
| 8692 | | .unused, |
| 16612 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 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 }}, |
| 8695 | | .clobbers = .{ .eflags = true }, |
| 16623 | .dst_temps = .{.mem}, |
| 16624 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 8696 | 16625 | .each = .{ .once = &.{ |
| 8697 | | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 8698 | 16626 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8699 | | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| 8700 | | .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8701 | | .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 8702 | | .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 8703 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 8704 | | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, |
| 8705 | | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, |
| 8706 | | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| 8707 | | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 16627 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 16628 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 16629 | .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 16630 | .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 16631 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| 16632 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, |
| 16633 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, |
| 16634 | .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ }, |
| 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 | 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 }, |
| 8712 | | .dst_constraints = .{.{ .bool_vec = .qword }}, |
| 16654 | .required_features = .{ .@"64bit", .sse, .slow_incdec, null }, |
| 16655 | .src_constraints = .{ |
| 16656 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 16657 | .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, |
| 16658 | }, |
| 8713 | 16659 | .patterns = &.{ |
| 8714 | 16660 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8715 | 16661 | }, |
| 16662 | .call_frame = .{ .alignment = .@"16" }, |
| 8716 | 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 | 16675 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 8719 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 8720 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 8721 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 8722 | | .unused, |
| 16676 | .{ .type = .u64, .kind = .{ .reg = .rdx } }, |
| 8723 | 16677 | }, |
| 8724 | | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 8725 | | .clobbers = .{ .eflags = true }, |
| 16678 | .dst_temps = .{.mem}, |
| 16679 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 8726 | 16680 | .each = .{ .once = &.{ |
| 8727 | | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 8728 | | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 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", ._, ._, ._ }, |
| 16681 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 16682 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8738 | 16683 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8739 | | .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ }, |
| 8740 | | .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ }, |
| 8741 | | .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ }, |
| 8742 | | .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ }, |
| 8743 | | .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ }, |
| 8744 | | .{ ._, ._, .cmp, .tmp1b, .sa(.dst0, .add_len), ._, ._ }, |
| 8745 | | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| 16684 | .{ .@"0:", ._ps, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 16685 | .{ ._, ._ps, .mova, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 16686 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| 16687 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, |
| 16688 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, |
| 16689 | .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ }, |
| 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 | 16714 | .patterns = &.{ |
| 8750 | 16715 | .{ .src = .{ .to_mem, .to_mem } }, |
| 8751 | 16716 | }, |
| 16717 | .call_frame = .{ .alignment = .@"16" }, |
| 8752 | 16718 | .extra_temps = .{ |
| 8753 | 16719 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 8754 | | .{ .type = .u32, .kind = .{ .reg = .ecx } }, |
| 8755 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 8756 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 8757 | | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 8758 | | .unused, |
| 16720 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 16721 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 16722 | .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, |
| 16723 | .{ .type = .f128, .kind = .{ .reg = .xmm1 } }, |
| 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 | 16733 | .dst_temps = .{.mem}, |
| 8761 | | .clobbers = .{ .eflags = true }, |
| 16734 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 8762 | 16735 | .each = .{ .once = &.{ |
| 8763 | 16736 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 8764 | 16737 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 8765 | 16738 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8766 | | .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ }, |
| 8767 | | .{ ._, ._, .mov, .tmp4b, .memia(.src0b, .tmp0, .add_size), ._, ._ }, |
| 8768 | | .{ ._, ._, .cmp, .tmp4b, .memia(.src1b, .tmp0, .add_size), ._, ._ }, |
| 8769 | | .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ }, |
| 8770 | | .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ }, |
| 8771 | | .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ }, |
| 8772 | | .{ ._, ._, .add, .tmp1d, .si(1), ._, ._ }, |
| 8773 | | .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ }, |
| 16739 | .{ .@"0:", ._ps, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 16740 | .{ ._, ._ps, .mova, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 16741 | .{ ._, ._, .call, .tmp5d, ._, ._, ._ }, |
| 16742 | .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ }, |
| 16743 | .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ }, |
| 16744 | .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ }, |
| 16745 | .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, |
| 16746 | .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, |
| 16747 | .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, |
| 16748 | .{ ._, ._c, .in, .tmp1d, ._, ._, ._ }, |
| 16749 | .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ }, |
| 8774 | 16750 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 8775 | | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| 8776 | | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| 8777 | | .{ ._, ._, .mov, .memia(.dst0p, .tmp3, .sub_ptr_size), .tmp2p, ._, ._ }, |
| 16751 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 16752 | .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ }, |
| 16753 | .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ }, |
| 8778 | 16754 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 8779 | | .{ .@"1:", ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 16755 | .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 8780 | 16756 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 8781 | | .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ }, |
| 16757 | .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ }, |
| 8782 | 16758 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 8783 | | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| 8784 | | .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ }, |
| 8785 | | .{ ._, ._, .mov, .memi(.dst0p, .tmp3), .tmp2p, ._, ._ }, |
| 16759 | .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, |
| 16760 | .{ ._, ._r, .sh, .tmp6d, .si(9), ._, ._ }, |
| 16761 | .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp6), .tmp2q, ._, ._ }, |
| 8786 | 16762 | } }, |
| 8787 | 16763 | } }, |
| 8788 | 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 | 16766 | @tagName(air_tag), |
| 16767 | @tagName(extra.compareOperator()), |
| 8791 | 16768 | cg.typeOf(extra.lhs).fmt(pt), |
| 8792 | 16769 | ops[0].tracking(cg), |
| 8793 | 16770 | ops[1].tracking(cg), |
| ... | ... | @@ -8797,15 +16774,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 8797 | 16774 | .gte => unreachable, |
| 8798 | 16775 | .gt => unreachable, |
| 8799 | 16776 | } |
| 8800 | | for (ops) |op| for (res) |r| { |
| 8801 | | if (op.index == r.index) break; |
| 8802 | | } else try op.die(cg); |
| 8803 | | try res[0].moveTo(inst, cg); |
| 16777 | try res[0].finish(inst, &.{ extra.lhs, extra.rhs }, &ops, 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 | 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 | 16782 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 8810 | 16783 | var res: [1]Temp = undefined; |
| 8811 | 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 | 16959 | .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, |
| 8987 | 16960 | .unused, |
| 8988 | 16961 | .unused, |
| 16962 | .unused, |
| 16963 | .unused, |
| 16964 | .unused, |
| 8989 | 16965 | }, |
| 8990 | 16966 | .dst_temps = .{.mem}, |
| 8991 | 16967 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9010,7 +16986,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9010 | 16986 | .{ .src = .{ .mem, .none } }, |
| 9011 | 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 | 16990 | .each = .{ .once = &.{ |
| 9015 | 16991 | .{ ._, .p_b, .abs, .dst0q, .src0q, ._, ._ }, |
| 9016 | 16992 | } }, |
| ... | ... | @@ -9021,7 +16997,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9021 | 16997 | .{ .src = .{ .mem, .none } }, |
| 9022 | 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 | 17001 | .each = .{ .once = &.{ |
| 9026 | 17002 | .{ ._, .p_w, .abs, .dst0q, .src0q, ._, ._ }, |
| 9027 | 17003 | } }, |
| ... | ... | @@ -9032,7 +17008,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9032 | 17008 | .{ .src = .{ .mem, .none } }, |
| 9033 | 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 | 17012 | .each = .{ .once = &.{ |
| 9037 | 17013 | .{ ._, .p_d, .abs, .dst0q, .src0q, ._, ._ }, |
| 9038 | 17014 | } }, |
| ... | ... | @@ -9043,7 +17019,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9043 | 17019 | .{ .src = .{ .mem, .none } }, |
| 9044 | 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 | 17023 | .each = .{ .once = &.{ |
| 9048 | 17024 | .{ ._, .p_b, .abs, .dst0x, .src0x, ._, ._ }, |
| 9049 | 17025 | } }, |
| ... | ... | @@ -9054,7 +17030,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9054 | 17030 | .{ .src = .{ .mem, .none } }, |
| 9055 | 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 | 17034 | .each = .{ .once = &.{ |
| 9059 | 17035 | .{ ._, .p_w, .abs, .dst0x, .src0x, ._, ._ }, |
| 9060 | 17036 | } }, |
| ... | ... | @@ -9065,7 +17041,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9065 | 17041 | .{ .src = .{ .mem, .none } }, |
| 9066 | 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 | 17045 | .each = .{ .once = &.{ |
| 9070 | 17046 | .{ ._, .p_d, .abs, .dst0x, .src0x, ._, ._ }, |
| 9071 | 17047 | } }, |
| ... | ... | @@ -9076,7 +17052,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9076 | 17052 | .{ .src = .{ .mem, .none } }, |
| 9077 | 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 | 17056 | .each = .{ .once = &.{ |
| 9081 | 17057 | .{ ._, .vp_b, .abs, .dst0x, .src0x, ._, ._ }, |
| 9082 | 17058 | } }, |
| ... | ... | @@ -9087,7 +17063,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9087 | 17063 | .{ .src = .{ .mem, .none } }, |
| 9088 | 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 | 17067 | .each = .{ .once = &.{ |
| 9092 | 17068 | .{ ._, .vp_w, .abs, .dst0x, .src0x, ._, ._ }, |
| 9093 | 17069 | } }, |
| ... | ... | @@ -9098,7 +17074,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9098 | 17074 | .{ .src = .{ .mem, .none } }, |
| 9099 | 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 | 17078 | .each = .{ .once = &.{ |
| 9103 | 17079 | .{ ._, .vp_d, .abs, .dst0x, .src0x, ._, ._ }, |
| 9104 | 17080 | } }, |
| ... | ... | @@ -9109,7 +17085,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9109 | 17085 | .{ .src = .{ .mem, .none } }, |
| 9110 | 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 | 17089 | .each = .{ .once = &.{ |
| 9114 | 17090 | .{ ._, .vp_b, .abs, .dst0y, .src0y, ._, ._ }, |
| 9115 | 17091 | } }, |
| ... | ... | @@ -9120,7 +17096,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9120 | 17096 | .{ .src = .{ .mem, .none } }, |
| 9121 | 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 | 17100 | .each = .{ .once = &.{ |
| 9125 | 17101 | .{ ._, .vp_w, .abs, .dst0y, .src0y, ._, ._ }, |
| 9126 | 17102 | } }, |
| ... | ... | @@ -9131,7 +17107,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9131 | 17107 | .{ .src = .{ .mem, .none } }, |
| 9132 | 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 | 17111 | .each = .{ .once = &.{ |
| 9136 | 17112 | .{ ._, .vp_d, .abs, .dst0y, .src0y, ._, ._ }, |
| 9137 | 17113 | } }, |
| ... | ... | @@ -9148,6 +17124,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9148 | 17124 | .unused, |
| 9149 | 17125 | .unused, |
| 9150 | 17126 | .unused, |
| 17127 | .unused, |
| 17128 | .unused, |
| 17129 | .unused, |
| 9151 | 17130 | }, |
| 9152 | 17131 | .dst_temps = .{.mem}, |
| 9153 | 17132 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9171,6 +17150,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9171 | 17150 | .unused, |
| 9172 | 17151 | .unused, |
| 9173 | 17152 | .unused, |
| 17153 | .unused, |
| 17154 | .unused, |
| 17155 | .unused, |
| 9174 | 17156 | }, |
| 9175 | 17157 | .dst_temps = .{.mem}, |
| 9176 | 17158 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9194,6 +17176,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9194 | 17176 | .unused, |
| 9195 | 17177 | .unused, |
| 9196 | 17178 | .unused, |
| 17179 | .unused, |
| 17180 | .unused, |
| 17181 | .unused, |
| 9197 | 17182 | }, |
| 9198 | 17183 | .dst_temps = .{.mem}, |
| 9199 | 17184 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9217,6 +17202,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9217 | 17202 | .unused, |
| 9218 | 17203 | .unused, |
| 9219 | 17204 | .unused, |
| 17205 | .unused, |
| 17206 | .unused, |
| 17207 | .unused, |
| 9220 | 17208 | }, |
| 9221 | 17209 | .dst_temps = .{.mem}, |
| 9222 | 17210 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9240,6 +17228,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9240 | 17228 | .unused, |
| 9241 | 17229 | .unused, |
| 9242 | 17230 | .unused, |
| 17231 | .unused, |
| 17232 | .unused, |
| 17233 | .unused, |
| 9243 | 17234 | }, |
| 9244 | 17235 | .dst_temps = .{.mem}, |
| 9245 | 17236 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9263,6 +17254,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9263 | 17254 | .unused, |
| 9264 | 17255 | .unused, |
| 9265 | 17256 | .unused, |
| 17257 | .unused, |
| 17258 | .unused, |
| 17259 | .unused, |
| 9266 | 17260 | }, |
| 9267 | 17261 | .dst_temps = .{.mem}, |
| 9268 | 17262 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9286,6 +17280,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9286 | 17280 | .unused, |
| 9287 | 17281 | .unused, |
| 9288 | 17282 | .unused, |
| 17283 | .unused, |
| 17284 | .unused, |
| 17285 | .unused, |
| 9289 | 17286 | }, |
| 9290 | 17287 | .dst_temps = .{.mem}, |
| 9291 | 17288 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9309,6 +17306,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9309 | 17306 | .unused, |
| 9310 | 17307 | .unused, |
| 9311 | 17308 | .unused, |
| 17309 | .unused, |
| 17310 | .unused, |
| 17311 | .unused, |
| 9312 | 17312 | }, |
| 9313 | 17313 | .dst_temps = .{.mem}, |
| 9314 | 17314 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9332,6 +17332,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9332 | 17332 | .unused, |
| 9333 | 17333 | .unused, |
| 9334 | 17334 | .unused, |
| 17335 | .unused, |
| 17336 | .unused, |
| 17337 | .unused, |
| 9335 | 17338 | }, |
| 9336 | 17339 | .dst_temps = .{.mem}, |
| 9337 | 17340 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9355,6 +17358,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9355 | 17358 | .unused, |
| 9356 | 17359 | .unused, |
| 9357 | 17360 | .unused, |
| 17361 | .unused, |
| 17362 | .unused, |
| 17363 | .unused, |
| 9358 | 17364 | }, |
| 9359 | 17365 | .dst_temps = .{.mem}, |
| 9360 | 17366 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9378,6 +17384,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9378 | 17384 | .unused, |
| 9379 | 17385 | .unused, |
| 9380 | 17386 | .unused, |
| 17387 | .unused, |
| 17388 | .unused, |
| 17389 | .unused, |
| 9381 | 17390 | }, |
| 9382 | 17391 | .dst_temps = .{.mem}, |
| 9383 | 17392 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9401,6 +17410,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9401 | 17410 | .unused, |
| 9402 | 17411 | .unused, |
| 9403 | 17412 | .unused, |
| 17413 | .unused, |
| 17414 | .unused, |
| 17415 | .unused, |
| 9404 | 17416 | }, |
| 9405 | 17417 | .dst_temps = .{.mem}, |
| 9406 | 17418 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9424,6 +17436,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9424 | 17436 | .unused, |
| 9425 | 17437 | .unused, |
| 9426 | 17438 | .unused, |
| 17439 | .unused, |
| 17440 | .unused, |
| 17441 | .unused, |
| 9427 | 17442 | }, |
| 9428 | 17443 | .dst_temps = .{.mem}, |
| 9429 | 17444 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9450,6 +17465,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9450 | 17465 | .unused, |
| 9451 | 17466 | .unused, |
| 9452 | 17467 | .unused, |
| 17468 | .unused, |
| 17469 | .unused, |
| 17470 | .unused, |
| 9453 | 17471 | }, |
| 9454 | 17472 | .dst_temps = .{.mem}, |
| 9455 | 17473 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9476,6 +17494,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9476 | 17494 | .unused, |
| 9477 | 17495 | .unused, |
| 9478 | 17496 | .unused, |
| 17497 | .unused, |
| 17498 | .unused, |
| 17499 | .unused, |
| 9479 | 17500 | }, |
| 9480 | 17501 | .dst_temps = .{.mem}, |
| 9481 | 17502 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9501,6 +17522,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9501 | 17522 | .unused, |
| 9502 | 17523 | .unused, |
| 9503 | 17524 | .unused, |
| 17525 | .unused, |
| 17526 | .unused, |
| 17527 | .unused, |
| 9504 | 17528 | }, |
| 9505 | 17529 | .dst_temps = .{.mem}, |
| 9506 | 17530 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9527,6 +17551,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9527 | 17551 | .unused, |
| 9528 | 17552 | .unused, |
| 9529 | 17553 | .unused, |
| 17554 | .unused, |
| 17555 | .unused, |
| 17556 | .unused, |
| 9530 | 17557 | }, |
| 9531 | 17558 | .dst_temps = .{.mem}, |
| 9532 | 17559 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9551,6 +17578,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9551 | 17578 | .unused, |
| 9552 | 17579 | .unused, |
| 9553 | 17580 | .unused, |
| 17581 | .unused, |
| 17582 | .unused, |
| 17583 | .unused, |
| 9554 | 17584 | }, |
| 9555 | 17585 | .dst_temps = .{.mem}, |
| 9556 | 17586 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9577,6 +17607,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9577 | 17607 | .unused, |
| 9578 | 17608 | .unused, |
| 9579 | 17609 | .unused, |
| 17610 | .unused, |
| 17611 | .unused, |
| 17612 | .unused, |
| 9580 | 17613 | }, |
| 9581 | 17614 | .dst_temps = .{.mem}, |
| 9582 | 17615 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9601,6 +17634,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9601 | 17634 | .unused, |
| 9602 | 17635 | .unused, |
| 9603 | 17636 | .unused, |
| 17637 | .unused, |
| 17638 | .unused, |
| 17639 | .unused, |
| 9604 | 17640 | }, |
| 9605 | 17641 | .dst_temps = .{.mem}, |
| 9606 | 17642 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9627,6 +17663,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9627 | 17663 | .unused, |
| 9628 | 17664 | .unused, |
| 9629 | 17665 | .unused, |
| 17666 | .unused, |
| 17667 | .unused, |
| 17668 | .unused, |
| 9630 | 17669 | }, |
| 9631 | 17670 | .dst_temps = .{.mem}, |
| 9632 | 17671 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9652,6 +17691,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9652 | 17691 | .unused, |
| 9653 | 17692 | .unused, |
| 9654 | 17693 | .unused, |
| 17694 | .unused, |
| 17695 | .unused, |
| 17696 | .unused, |
| 9655 | 17697 | }, |
| 9656 | 17698 | .dst_temps = .{.mem}, |
| 9657 | 17699 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9678,6 +17720,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9678 | 17720 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 9679 | 17721 | .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, |
| 9680 | 17722 | .unused, |
| 17723 | .unused, |
| 17724 | .unused, |
| 17725 | .unused, |
| 9681 | 17726 | }, |
| 9682 | 17727 | .dst_temps = .{.mem}, |
| 9683 | 17728 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -9699,15 +17744,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9699 | 17744 | .{ ._, ._, .cmp, .tmp0d, .sa(.none, .add_src0_unaligned_size), ._, ._ }, |
| 9700 | 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 | 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 | 17772 | .patterns = &.{ |
| 9706 | 17773 | .{ .src = .{ .to_mut_sse, .none } }, |
| 9707 | 17774 | }, |
| 9708 | 17775 | .extra_temps = .{ |
| 9709 | 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 | 17781 | .unused, |
| 9712 | 17782 | .unused, |
| 9713 | 17783 | .unused, |
| ... | ... | @@ -9719,33 +17789,61 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9719 | 17789 | .{ ._, ._ps, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ }, |
| 9720 | 17790 | } }, |
| 9721 | 17791 | }, .{ |
| 9722 | | .required_features = .{ .sse2, null, null, null }, |
| 9723 | | .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .qword } }, .any }, |
| 17792 | .required_features = .{ .avx, null, null, null }, |
| 17793 | .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .dword } }, .any }, |
| 9724 | 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 | 17819 | .extra_temps = .{ |
| 9728 | 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 | 17825 | .unused, |
| 9731 | 17826 | .unused, |
| 9732 | 17827 | .unused, |
| 9733 | 17828 | .unused, |
| 9734 | 17829 | }, |
| 9735 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 17830 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 9736 | 17831 | .each = .{ .once = &.{ |
| 9737 | 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 }, |
| 9742 | | .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .qword } }, .any }, |
| 17836 | .required_features = .{ .sse2, null, null, null }, |
| 17837 | .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any }, |
| 9743 | 17838 | .patterns = &.{ |
| 9744 | 17839 | .{ .src = .{ .to_mut_sse, .none } }, |
| 9745 | 17840 | }, |
| 9746 | 17841 | .extra_temps = .{ |
| 9747 | 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 | 17847 | .unused, |
| 9750 | 17848 | .unused, |
| 9751 | 17849 | .unused, |
| ... | ... | @@ -9754,210 +17852,383 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9754 | 17852 | .dst_temps = .{.{ .ref = .src0 }}, |
| 9755 | 17853 | .each = .{ .once = &.{ |
| 9756 | 17854 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 9757 | | .{ ._, ._ps, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ }, |
| 17855 | .{ ._, ._pd, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ }, |
| 9758 | 17856 | } }, |
| 9759 | 17857 | }, .{ |
| 9760 | 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 | 17860 | .patterns = &.{ |
| 9763 | 17861 | .{ .src = .{ .to_sse, .none } }, |
| 9764 | 17862 | }, |
| 9765 | 17863 | .extra_temps = .{ |
| 9766 | 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 | 17869 | .unused, |
| 9769 | 17870 | .unused, |
| 9770 | 17871 | .unused, |
| 9771 | 17872 | .unused, |
| 9772 | 17873 | }, |
| 9773 | | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, |
| 17874 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 9774 | 17875 | .each = .{ .once = &.{ |
| 9775 | 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 | 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 | 17906 | .patterns = &.{ |
| 9782 | 17907 | .{ .src = .{ .to_sse, .none } }, |
| 9783 | 17908 | }, |
| 9784 | 17909 | .extra_temps = .{ |
| 9785 | 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 | 17915 | .unused, |
| 9788 | 17916 | .unused, |
| 9789 | 17917 | .unused, |
| 9790 | 17918 | .unused, |
| 9791 | 17919 | }, |
| 9792 | | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, |
| 17920 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 9793 | 17921 | .each = .{ .once = &.{ |
| 9794 | 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 }, |
| 9799 | | .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .yword, .is = .dword } }, .any }, |
| 17926 | .required_features = .{ .sse2, null, null, null }, |
| 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 | 17972 | .patterns = &.{ |
| 9801 | 17973 | .{ .src = .{ .to_sse, .none } }, |
| 9802 | 17974 | }, |
| 9803 | 17975 | .extra_temps = .{ |
| 9804 | 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 | 17981 | .unused, |
| 9807 | 17982 | .unused, |
| 9808 | 17983 | .unused, |
| 9809 | 17984 | .unused, |
| 9810 | 17985 | }, |
| 9811 | | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, |
| 17986 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 9812 | 17987 | .each = .{ .once = &.{ |
| 9813 | 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 | 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 | 17994 | .patterns = &.{ |
| 9820 | 17995 | .{ .src = .{ .to_sse, .none } }, |
| 9821 | 17996 | }, |
| 9822 | 17997 | .extra_temps = .{ |
| 9823 | 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 | 18003 | .unused, |
| 9826 | 18004 | .unused, |
| 9827 | 18005 | .unused, |
| 9828 | 18006 | .unused, |
| 9829 | 18007 | }, |
| 9830 | | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, |
| 18008 | .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, |
| 9831 | 18009 | .each = .{ .once = &.{ |
| 9832 | 18010 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 9833 | 18011 | .{ ._, .v_pd, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, |
| 9834 | 18012 | } }, |
| 9835 | 18013 | }, .{ |
| 9836 | | .required_features = .{ .x87, null, null, null }, |
| 9837 | | .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .tbyte } }, .any }, |
| 18014 | .required_features = .{ .avx, null, null, null }, |
| 18015 | .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any }, |
| 9838 | 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 } }}, |
| 9842 | | .clobbers = .{ .st = 1 }, |
| 18030 | .dst_temps = .{.mem}, |
| 9843 | 18031 | .each = .{ .once = &.{ |
| 9844 | | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 9845 | | .{ ._, .f_, .abs, ._, ._, ._, ._ }, |
| 9846 | | .{ ._, .f_p, .st, .dst0t, ._, ._, ._ }, |
| 18032 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 18033 | .{ ._, .v_ps, .mova, .tmp2y, .lea(.yword, .tmp0), ._, ._ }, |
| 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 }, |
| 9850 | | .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any }, |
| 18041 | .required_features = .{ .sse, null, null, null }, |
| 18042 | .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any }, |
| 9851 | 18043 | .patterns = &.{ |
| 9852 | | .{ .src = .{ .to_sse, .none } }, |
| 18044 | .{ .src = .{ .to_mem, .none } }, |
| 9853 | 18045 | }, |
| 9854 | 18046 | .extra_temps = .{ |
| 9855 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 9856 | | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } }, |
| 18047 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 18048 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| 18049 | .{ .kind = .{ .rc = .sse } }, |
| 18050 | .{ .kind = .{ .rc = .sse } }, |
| 18051 | .unused, |
| 9857 | 18052 | .unused, |
| 9858 | 18053 | .unused, |
| 9859 | 18054 | .unused, |
| 9860 | 18055 | .unused, |
| 9861 | 18056 | }, |
| 9862 | | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, |
| 18057 | .dst_temps = .{.mem}, |
| 9863 | 18058 | .each = .{ .once = &.{ |
| 9864 | 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 | 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 | 18071 | .patterns = &.{ |
| 9871 | | .{ .src = .{ .to_sse, .none } }, |
| 18072 | .{ .src = .{ .to_mem, .none } }, |
| 9872 | 18073 | }, |
| 9873 | 18074 | .extra_temps = .{ |
| 9874 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 9875 | | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } }, |
| 18075 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 18076 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } }, |
| 18077 | .{ .kind = .{ .rc = .sse } }, |
| 18078 | .{ .kind = .{ .rc = .sse } }, |
| 18079 | .unused, |
| 9876 | 18080 | .unused, |
| 9877 | 18081 | .unused, |
| 9878 | 18082 | .unused, |
| 9879 | 18083 | .unused, |
| 9880 | 18084 | }, |
| 9881 | | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, |
| 18085 | .dst_temps = .{.mem}, |
| 9882 | 18086 | .each = .{ .once = &.{ |
| 9883 | 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 | 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 | 18098 | .patterns = &.{ |
| 9890 | | .{ .src = .{ .to_mut_sse, .none } }, |
| 18099 | .{ .src = .{ .to_mem, .none } }, |
| 9891 | 18100 | }, |
| 9892 | 18101 | .extra_temps = .{ |
| 9893 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 9894 | | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } }, |
| 18102 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 18103 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| 18104 | .{ .kind = .{ .rc = .sse } }, |
| 18105 | .{ .kind = .{ .rc = .sse } }, |
| 18106 | .unused, |
| 9895 | 18107 | .unused, |
| 9896 | 18108 | .unused, |
| 9897 | 18109 | .unused, |
| 9898 | 18110 | .unused, |
| 9899 | 18111 | }, |
| 9900 | | .dst_temps = .{.{ .ref = .src0 }}, |
| 18112 | .dst_temps = .{.mem}, |
| 9901 | 18113 | .each = .{ .once = &.{ |
| 9902 | 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 }, |
| 9907 | | .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any }, |
| 18124 | .required_features = .{ .avx2, null, null, null }, |
| 18125 | .src_constraints = .{ .{ .multiple_scalar_any_float = .yword }, .any }, |
| 9908 | 18126 | .patterns = &.{ |
| 9909 | | .{ .src = .{ .to_mut_sse, .none } }, |
| 18127 | .{ .src = .{ .to_mem, .none } }, |
| 9910 | 18128 | }, |
| 9911 | 18129 | .extra_temps = .{ |
| 9912 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 9913 | | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } }, |
| 18130 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 18131 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } }, |
| 18132 | .{ .kind = .{ .rc = .sse } }, |
| 18133 | .{ .kind = .{ .rc = .sse } }, |
| 18134 | .unused, |
| 9914 | 18135 | .unused, |
| 9915 | 18136 | .unused, |
| 9916 | 18137 | .unused, |
| 9917 | 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 | 18168 | .each = .{ .once = &.{ |
| 9921 | 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 }, |
| 9926 | | .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .xword } }, .any }, |
| 18178 | .required_features = .{ .sse2, null, null, null }, |
| 18179 | .src_constraints = .{ .{ .multiple_scalar_any_float = .xword }, .any }, |
| 9927 | 18180 | .patterns = &.{ |
| 9928 | | .{ .src = .{ .to_sse, .none } }, |
| 18181 | .{ .src = .{ .to_mem, .none } }, |
| 9929 | 18182 | }, |
| 9930 | 18183 | .extra_temps = .{ |
| 9931 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 9932 | | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } }, |
| 18184 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 18185 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| 18186 | .{ .kind = .{ .rc = .sse } }, |
| 18187 | .{ .kind = .{ .rc = .sse } }, |
| 18188 | .unused, |
| 9933 | 18189 | .unused, |
| 9934 | 18190 | .unused, |
| 9935 | 18191 | .unused, |
| 9936 | 18192 | .unused, |
| 9937 | 18193 | }, |
| 9938 | | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, |
| 18194 | .dst_temps = .{.mem}, |
| 9939 | 18195 | .each = .{ .once = &.{ |
| 9940 | 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 }, |
| 9945 | | .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .xword } }, .any }, |
| 18206 | .required_features = .{ .sse, null, null, null }, |
| 18207 | .src_constraints = .{ .{ .multiple_scalar_any_float = .xword }, .any }, |
| 9946 | 18208 | .patterns = &.{ |
| 9947 | | .{ .src = .{ .to_sse, .none } }, |
| 18209 | .{ .src = .{ .to_mem, .none } }, |
| 9948 | 18210 | }, |
| 9949 | 18211 | .extra_temps = .{ |
| 9950 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 9951 | | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } }, |
| 18212 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 18213 | .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } }, |
| 18214 | .{ .kind = .{ .rc = .sse } }, |
| 18215 | .{ .kind = .{ .rc = .sse } }, |
| 18216 | .unused, |
| 9952 | 18217 | .unused, |
| 9953 | 18218 | .unused, |
| 9954 | 18219 | .unused, |
| 9955 | 18220 | .unused, |
| 9956 | 18221 | }, |
| 9957 | | .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }}, |
| 18222 | .dst_temps = .{.mem}, |
| 9958 | 18223 | .each = .{ .once = &.{ |
| 9959 | 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 | 18233 | } }) catch |err| switch (err) { |
| 9963 | 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 | 18238 | }), |
| 9968 | 18239 | else => |e| return e, |
| 9969 | 18240 | }; |
| 9970 | | for (ops) |op| for (res) |r| { |
| 9971 | | if (op.index == r.index) break; |
| 9972 | | } else try op.die(cg); |
| 9973 | | try res[0].moveTo(inst, cg); |
| 18241 | try res[0].finish(inst, &.{ty_op.operand}, &ops, cg); |
| 9974 | 18242 | }, |
| 9975 | 18243 | |
| 9976 | 18244 | .cmp_lt, |
| ... | ... | @@ -10138,6 +18406,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10138 | 18406 | .unused, |
| 10139 | 18407 | .unused, |
| 10140 | 18408 | .unused, |
| 18409 | .unused, |
| 18410 | .unused, |
| 18411 | .unused, |
| 10141 | 18412 | }, |
| 10142 | 18413 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 10143 | 18414 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -10166,10 +18437,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10166 | 18437 | }), |
| 10167 | 18438 | else => |e| return e, |
| 10168 | 18439 | }; |
| 10169 | | for (ops) |op| for (res) |r| { |
| 10170 | | if (op.index == r.index) break; |
| 10171 | | } else try op.die(cg); |
| 10172 | | try res[0].moveTo(inst, cg); |
| 18440 | try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); |
| 10173 | 18441 | }, |
| 10174 | 18442 | .cmp_eq, |
| 10175 | 18443 | .cmp_eq_optimized, |
| ... | ... | @@ -10182,7 +18450,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10182 | 18450 | }) else fallback: { |
| 10183 | 18451 | const bin_op = air_datas[@intFromEnum(inst)].bin_op; |
| 10184 | 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 | 18454 | else => unreachable, |
| 10187 | 18455 | .cmp_eq, .cmp_eq_optimized => .eq, |
| 10188 | 18456 | .cmp_neq, .cmp_neq_optimized => .neq, |
| ... | ... | @@ -10275,26 +18543,564 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10275 | 18543 | .unused, |
| 10276 | 18544 | .unused, |
| 10277 | 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 | 19084 | .clobbers = .{ .eflags = true }, |
| 10281 | 19085 | .each = .{ .once = &.{ |
| 10282 | | .{ ._, .p_, .xor, .tmp1q, .tmp1q, ._, ._ }, |
| 10283 | | .{ ._, .p_, .xor, .src0q, .src1q, ._, ._ }, |
| 10284 | | .{ ._, .p_b, .cmpeq, .tmp1q, .src0q, ._, ._ }, |
| 10285 | | .{ ._, .p_b, .movmsk, .tmp0d, .tmp1q, ._, ._ }, |
| 10286 | | .{ ._, ._, .xor, .tmp0d, .si(0xff), ._, ._ }, |
| 19086 | .{ ._, ._ss, .ucomi, .src0x, .src1d, ._, ._ }, |
| 10287 | 19087 | } }, |
| 10288 | 19088 | }, .{ |
| 10289 | | .required_features = .{ .avx, null, null, null }, |
| 10290 | | .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword } }, |
| 19089 | .required_features = .{ .sse, null, null, null }, |
| 19090 | .src_constraints = .{ .{ .float = .dword }, .{ .float = .word } }, |
| 10291 | 19091 | .patterns = &.{ |
| 10292 | | .{ .src = .{ .to_xmm, .mem } }, |
| 10293 | | .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } }, |
| 10294 | | .{ .src = .{ .to_xmm, .to_xmm } }, |
| 19092 | .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } }, |
| 10295 | 19093 | }, |
| 19094 | .call_frame = .{ .alignment = .@"16" }, |
| 10296 | 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 | 19104 | .unused, |
| 10299 | 19105 | .unused, |
| 10300 | 19106 | .unused, |
| ... | ... | @@ -10302,82 +19108,83 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10302 | 19108 | .unused, |
| 10303 | 19109 | }, |
| 10304 | 19110 | .dst_temps = .{.{ .cc = cc }}, |
| 10305 | | .clobbers = .{ .eflags = true }, |
| 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 }, |
| 19111 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 10320 | 19112 | .each = .{ .once = &.{ |
| 10321 | | .{ ._, .p_, .xor, .src0x, .src1x, ._, ._ }, |
| 10322 | | .{ ._, .p_, .@"test", .src0x, .src0x, ._, ._ }, |
| 19113 | .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, |
| 19114 | .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ }, |
| 10323 | 19115 | } }, |
| 10324 | 19116 | }, .{ |
| 10325 | | .required_features = .{ .sse2, null, null, null }, |
| 10326 | | .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword } }, |
| 19117 | .required_features = .{ .avx, null, null, null }, |
| 19118 | .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword } }, |
| 10327 | 19119 | .patterns = &.{ |
| 10328 | | .{ .src = .{ .to_mut_xmm, .mem } }, |
| 10329 | | .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } }, |
| 10330 | | .{ .src = .{ .to_mut_xmm, .to_xmm } }, |
| 19120 | .{ .src = .{ .to_sse, .mem } }, |
| 19121 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 19122 | .{ .src = .{ .to_sse, .to_sse } }, |
| 10331 | 19123 | }, |
| 10332 | 19124 | .extra_temps = .{ |
| 10333 | | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 10334 | | .{ .kind = .{ .rc = .sse } }, |
| 19125 | .{ .type = .f16, .kind = .{ .rc = .sse } }, |
| 19126 | .{ .type = .f16, .kind = .{ .rc = .sse } }, |
| 19127 | .unused, |
| 19128 | .unused, |
| 19129 | .unused, |
| 10335 | 19130 | .unused, |
| 10336 | 19131 | .unused, |
| 10337 | 19132 | .unused, |
| 10338 | 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 | 19140 | .clobbers = .{ .eflags = true }, |
| 10342 | 19141 | .each = .{ .once = &.{ |
| 10343 | | .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| 10344 | | .{ ._, .p_, .xor, .src0x, .src1x, ._, ._ }, |
| 10345 | | .{ ._, .p_b, .cmpeq, .tmp1x, .src0x, ._, ._ }, |
| 10346 | | .{ ._, .p_b, .movmsk, .tmp0d, .tmp1x, ._, ._ }, |
| 10347 | | .{ ._, ._, .xor, .tmp0d, .si(0xffff), ._, ._ }, |
| 19142 | .{ ._, .v_sd, .ucomi, .src0x, .src1q, ._, ._ }, |
| 10348 | 19143 | } }, |
| 10349 | 19144 | }, .{ |
| 10350 | | .required_features = .{ .avx2, null, null, null }, |
| 10351 | | .src_constraints = .{ .{ .int = .yword }, .{ .int = .yword } }, |
| 19145 | .required_features = .{ .sse2, null, null, null }, |
| 19146 | .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword } }, |
| 10352 | 19147 | .patterns = &.{ |
| 10353 | | .{ .src = .{ .to_ymm, .mem } }, |
| 10354 | | .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } }, |
| 10355 | | .{ .src = .{ .to_ymm, .to_ymm } }, |
| 19148 | .{ .src = .{ .to_sse, .mem } }, |
| 19149 | .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } }, |
| 19150 | .{ .src = .{ .to_sse, .to_sse } }, |
| 10356 | 19151 | }, |
| 10357 | 19152 | .extra_temps = .{ |
| 10358 | | .{ .kind = .{ .rc = .sse } }, |
| 19153 | .{ .type = .f16, .kind = .{ .rc = .sse } }, |
| 19154 | .{ .type = .f16, .kind = .{ .rc = .sse } }, |
| 19155 | .unused, |
| 19156 | .unused, |
| 10359 | 19157 | .unused, |
| 10360 | 19158 | .unused, |
| 10361 | 19159 | .unused, |
| 10362 | 19160 | .unused, |
| 10363 | 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 | 19168 | .clobbers = .{ .eflags = true }, |
| 10367 | 19169 | .each = .{ .once = &.{ |
| 10368 | | .{ ._, .vp_, .xor, .tmp0y, .src0y, .src1y, ._ }, |
| 10369 | | .{ ._, .vp_, .@"test", .tmp0y, .tmp0y, ._, ._ }, |
| 19170 | .{ ._, ._sd, .ucomi, .src0x, .src1q, ._, ._ }, |
| 10370 | 19171 | } }, |
| 10371 | 19172 | }, .{ |
| 10372 | | .required_features = .{ .avx, null, null, null }, |
| 10373 | | .src_constraints = .{ .{ .int = .yword }, .{ .int = .yword } }, |
| 19173 | .required_features = .{ .sse, null, null, null }, |
| 19174 | .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword } }, |
| 10374 | 19175 | .patterns = &.{ |
| 10375 | | .{ .src = .{ .to_ymm, .mem } }, |
| 10376 | | .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } }, |
| 10377 | | .{ .src = .{ .to_ymm, .to_ymm } }, |
| 19176 | .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } }, |
| 10378 | 19177 | }, |
| 19178 | .call_frame = .{ .alignment = .@"16" }, |
| 10379 | 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 | 19188 | .unused, |
| 10382 | 19189 | .unused, |
| 10383 | 19190 | .unused, |
| ... | ... | @@ -10385,109 +19192,112 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10385 | 19192 | .unused, |
| 10386 | 19193 | }, |
| 10387 | 19194 | .dst_temps = .{.{ .cc = cc }}, |
| 10388 | | .clobbers = .{ .eflags = true }, |
| 19195 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 10389 | 19196 | .each = .{ .once = &.{ |
| 10390 | | .{ ._, .v_pd, .xor, .tmp0y, .src0y, .src1y, ._ }, |
| 10391 | | .{ ._, .vp_, .@"test", .tmp0y, .tmp0y, ._, ._ }, |
| 19197 | .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, |
| 19198 | .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ }, |
| 10392 | 19199 | } }, |
| 10393 | 19200 | }, .{ |
| 10394 | | .required_features = .{ .avx2, null, null, null }, |
| 10395 | | .src_constraints = .{ |
| 10396 | | .{ .remainder_int = .{ .of = .yword, .is = .xword } }, |
| 10397 | | .{ .remainder_int = .{ .of = .yword, .is = .xword } }, |
| 10398 | | }, |
| 19201 | .required_features = .{ .x87, .cmov, null, null }, |
| 19202 | .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } }, |
| 10399 | 19203 | .patterns = &.{ |
| 10400 | | .{ .src = .{ .to_mem, .to_mem } }, |
| 19204 | .{ .src = .{ .mem, .mem } }, |
| 10401 | 19205 | }, |
| 10402 | 19206 | .extra_temps = .{ |
| 10403 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 10404 | | .{ .kind = .{ .rc = .sse } }, |
| 10405 | | .{ .kind = .{ .rc = .sse } }, |
| 19207 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 19208 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 19209 | .unused, |
| 19210 | .unused, |
| 19211 | .unused, |
| 19212 | .unused, |
| 10406 | 19213 | .unused, |
| 10407 | 19214 | .unused, |
| 10408 | 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 | 19222 | .clobbers = .{ .eflags = true }, |
| 10412 | 19223 | .each = .{ .once = &.{ |
| 10413 | | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| 10414 | | .{ ._, .vp_, .xor, .tmp1y, .tmp1y, .tmp1y, ._ }, |
| 10415 | | .{ .@"0:", .v_dqu, .mov, .tmp2y, .memiad(.src0y, .tmp0, .add_size, -16), ._, ._ }, |
| 10416 | | .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .memiad(.src1y, .tmp0, .add_size, -16), ._ }, |
| 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, ._, ._ }, |
| 19224 | .{ ._, .f_, .ld, .src1t, ._, ._, ._ }, |
| 19225 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 19226 | .{ ._, .f_p, .ucomi, .tmp0t, .tmp1t, ._, ._ }, |
| 19227 | .{ ._, .f_p, .st, .tmp1t, ._, ._, ._ }, |
| 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 | 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 | 19237 | .extra_temps = .{ |
| 10431 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 10432 | | .{ .kind = .{ .rc = .sse } }, |
| 10433 | | .{ .kind = .{ .rc = .sse } }, |
| 19238 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 19239 | .unused, |
| 19240 | .unused, |
| 19241 | .unused, |
| 19242 | .unused, |
| 19243 | .unused, |
| 10434 | 19244 | .unused, |
| 10435 | 19245 | .unused, |
| 10436 | 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 | 19253 | .clobbers = .{ .eflags = true }, |
| 10440 | 19254 | .each = .{ .once = &.{ |
| 10441 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 10442 | | .{ ._, .vp_, .xor, .tmp1y, .tmp1y, .tmp1y, ._ }, |
| 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, ._, ._ }, |
| 19255 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 19256 | .{ ._, .f_p, .ucomi, .tmp0t, .src1t, ._, ._ }, |
| 10449 | 19257 | } }, |
| 10450 | 19258 | }, .{ |
| 10451 | | .required_features = .{ .avx, null, null, null }, |
| 10452 | | .src_constraints = .{ |
| 10453 | | .{ .remainder_int = .{ .of = .yword, .is = .xword } }, |
| 10454 | | .{ .remainder_int = .{ .of = .yword, .is = .xword } }, |
| 10455 | | }, |
| 19259 | .required_features = .{ .sahf, .x87, null, null }, |
| 19260 | .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } }, |
| 10456 | 19261 | .patterns = &.{ |
| 10457 | | .{ .src = .{ .to_mem, .to_mem } }, |
| 19262 | .{ .src = .{ .mem, .mem } }, |
| 10458 | 19263 | }, |
| 10459 | 19264 | .extra_temps = .{ |
| 10460 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 10461 | | .{ .kind = .{ .rc = .sse } }, |
| 10462 | | .{ .kind = .{ .rc = .sse } }, |
| 19265 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 19266 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 19267 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 19268 | .unused, |
| 19269 | .unused, |
| 19270 | .unused, |
| 10463 | 19271 | .unused, |
| 10464 | 19272 | .unused, |
| 10465 | 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 | 19280 | .clobbers = .{ .eflags = true }, |
| 10469 | 19281 | .each = .{ .once = &.{ |
| 10470 | | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| 10471 | | .{ ._, .v_pd, .xor, .tmp1y, .tmp1y, .tmp1y, ._ }, |
| 10472 | | .{ .@"0:", .v_pd, .movu, .tmp2y, .memiad(.src0y, .tmp0, .add_size, -16), ._, ._ }, |
| 10473 | | .{ ._, .v_pd, .xor, .tmp2y, .tmp2y, .memiad(.src1y, .tmp0, .add_size, -16), ._ }, |
| 10474 | | .{ ._, .v_pd, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ }, |
| 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, ._, ._ }, |
| 19282 | .{ ._, .f_, .ld, .src1t, ._, ._, ._ }, |
| 19283 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 19284 | .{ ._, .f_pp, .ucom, ._, ._, ._, ._ }, |
| 19285 | .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ }, |
| 19286 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 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 | 19291 | .patterns = &.{ |
| 10485 | | .{ .src = .{ .to_mem, .to_mem } }, |
| 19292 | .{ .src = .{ .mem, .mem } }, |
| 10486 | 19293 | }, |
| 10487 | 19294 | .extra_temps = .{ |
| 10488 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 10489 | | .{ .kind = .{ .rc = .sse } }, |
| 10490 | | .{ .kind = .{ .rc = .sse } }, |
| 19295 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 19296 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 19297 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 19298 | .unused, |
| 19299 | .unused, |
| 19300 | .unused, |
| 10491 | 19301 | .unused, |
| 10492 | 19302 | .unused, |
| 10493 | 19303 | .unused, |
| ... | ... | @@ -10495,74 +19305,89 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10495 | 19305 | .dst_temps = .{.{ .cc = cc }}, |
| 10496 | 19306 | .clobbers = .{ .eflags = true }, |
| 10497 | 19307 | .each = .{ .once = &.{ |
| 10498 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 10499 | | .{ ._, .v_pd, .xor, .tmp1y, .tmp1y, .tmp1y, ._ }, |
| 10500 | | .{ .@"0:", .v_pd, .movu, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 10501 | | .{ ._, .v_pd, .xor, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 10502 | | .{ ._, .v_pd, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ }, |
| 10503 | | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 10504 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 10505 | | .{ ._, .vp_, .@"test", .tmp1y, .tmp1y, ._, ._ }, |
| 19308 | .{ ._, .f_, .ld, .src1t, ._, ._, ._ }, |
| 19309 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 19310 | .{ ._, .f_pp, .ucom, ._, ._, ._, ._ }, |
| 19311 | .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ }, |
| 19312 | .{ ._, ._, .xor, .tmp2b, .si(0b0_1_000_000), ._, ._ }, |
| 19313 | .{ ._, ._, .@"test", .tmp2b, .si(0b0_1_000_100), ._, ._ }, |
| 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 | 19318 | .patterns = &.{ |
| 10510 | | .{ .src = .{ .to_mem, .to_mem } }, |
| 19319 | .{ .src = .{ .mem, .mem } }, |
| 10511 | 19320 | }, |
| 10512 | 19321 | .extra_temps = .{ |
| 10513 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 10514 | | .{ .kind = .{ .rc = .sse } }, |
| 10515 | | .{ .kind = .{ .rc = .sse } }, |
| 19322 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 19323 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 19324 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 19325 | .unused, |
| 19326 | .unused, |
| 19327 | .unused, |
| 10516 | 19328 | .unused, |
| 10517 | 19329 | .unused, |
| 10518 | 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 | 19337 | .clobbers = .{ .eflags = true }, |
| 10522 | 19338 | .each = .{ .once = &.{ |
| 10523 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 10524 | | .{ ._, .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ }, |
| 10525 | | .{ .@"0:", .v_dqu, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 10526 | | .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 10527 | | .{ ._, .vp_, .@"or", .tmp1x, .tmp1x, .tmp2x, ._ }, |
| 10528 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 10529 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 10530 | | .{ ._, .vp_, .@"test", .tmp1x, .tmp1x, ._, ._ }, |
| 19339 | .{ ._, .f_, .ld, .src1t, ._, ._, ._ }, |
| 19340 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 19341 | .{ ._, .f_pp, .ucom, ._, ._, ._, ._ }, |
| 19342 | .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ }, |
| 19343 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 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 | 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 | 19353 | .extra_temps = .{ |
| 10538 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 10539 | | .{ .kind = .{ .rc = .sse } }, |
| 10540 | | .{ .kind = .{ .rc = .sse } }, |
| 19354 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 19355 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 19356 | .{ .type = .u16, .kind = .{ .reg = .ah } }, |
| 19357 | .unused, |
| 19358 | .unused, |
| 19359 | .unused, |
| 10541 | 19360 | .unused, |
| 10542 | 19361 | .unused, |
| 10543 | 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 | 19369 | .clobbers = .{ .eflags = true }, |
| 10547 | 19370 | .each = .{ .once = &.{ |
| 10548 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 10549 | | .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| 10550 | | .{ .@"0:", ._dqu, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 10551 | | .{ ._, .p_, .xor, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 10552 | | .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ }, |
| 10553 | | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 10554 | | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 10555 | | .{ ._, .p_, .@"test", .tmp1x, .tmp1x, ._, ._ }, |
| 19371 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 19372 | .{ ._, .f_p, .ucom, .src1t, ._, ._, ._ }, |
| 19373 | .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ }, |
| 19374 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 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 | 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 | 19384 | .extra_temps = .{ |
| 10563 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 10564 | | .{ .kind = .{ .rc = .sse } }, |
| 10565 | | .{ .kind = .{ .rc = .sse } }, |
| 19385 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 19386 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 19387 | .{ .type = .u8, .kind = .{ .reg = .ah } }, |
| 19388 | .unused, |
| 19389 | .unused, |
| 19390 | .unused, |
| 10566 | 19391 | .unused, |
| 10567 | 19392 | .unused, |
| 10568 | 19393 | .unused, |
| ... | ... | @@ -10570,69 +19395,70 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10570 | 19395 | .dst_temps = .{.{ .cc = cc }}, |
| 10571 | 19396 | .clobbers = .{ .eflags = true }, |
| 10572 | 19397 | .each = .{ .once = &.{ |
| 10573 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 10574 | | .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| 10575 | | .{ .@"0:", ._dqu, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 10576 | | .{ ._, .p_, .xor, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 10577 | | .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ }, |
| 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), ._, ._ }, |
| 19398 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 19399 | .{ ._, .f_p, .ucom, .src1t, ._, ._, ._ }, |
| 19400 | .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ }, |
| 19401 | .{ ._, ._, .xor, .tmp2b, .si(0b0_1_000_000), ._, ._ }, |
| 19402 | .{ ._, ._, .@"test", .tmp2b, .si(0b0_1_000_100), ._, ._ }, |
| 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 | 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 | 19412 | .extra_temps = .{ |
| 10591 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 10592 | | .{ .kind = .{ .rc = .mmx } }, |
| 10593 | | .{ .kind = .{ .rc = .mmx } }, |
| 19413 | .{ .type = .f80, .kind = .{ .reg = .st6 } }, |
| 19414 | .{ .type = .f80, .kind = .{ .reg = .st7 } }, |
| 19415 | .{ .type = .u16, .kind = .{ .reg = .ah } }, |
| 19416 | .unused, |
| 19417 | .unused, |
| 19418 | .unused, |
| 10594 | 19419 | .unused, |
| 10595 | 19420 | .unused, |
| 10596 | 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 | 19428 | .clobbers = .{ .eflags = true }, |
| 10600 | 19429 | .each = .{ .once = &.{ |
| 10601 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 10602 | | .{ ._, .p_, .xor, .tmp1q, .tmp1q, ._, ._ }, |
| 10603 | | .{ .@"0:", ._q, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 10604 | | .{ ._, .p_, .xor, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 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), ._, ._ }, |
| 19430 | .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, |
| 19431 | .{ ._, .f_p, .ucom, .src1t, ._, ._, ._ }, |
| 19432 | .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ }, |
| 19433 | .{ ._, ._, .sahf, ._, ._, ._, ._ }, |
| 10612 | 19434 | } }, |
| 10613 | 19435 | }, .{ |
| 19436 | .required_features = .{ .sse, null, null, null }, |
| 19437 | .src_constraints = .{ .{ .float = .xword }, .{ .float = .xword } }, |
| 10614 | 19438 | .patterns = &.{ |
| 10615 | | .{ .src = .{ .to_mem, .to_mem } }, |
| 19439 | .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } }, |
| 10616 | 19440 | }, |
| 19441 | .call_frame = .{ .alignment = .@"16" }, |
| 10617 | 19442 | .extra_temps = .{ |
| 10618 | | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 10619 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 10620 | | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 19443 | .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) { |
| 19444 | else => unreachable, |
| 19445 | .e => "__eqtf2", |
| 19446 | .ne => "__netf2", |
| 19447 | } } } }, |
| 19448 | .{ .type = .i32, .kind = .{ .reg = .eax } }, |
| 19449 | .unused, |
| 19450 | .unused, |
| 19451 | .unused, |
| 19452 | .unused, |
| 10621 | 19453 | .unused, |
| 10622 | 19454 | .unused, |
| 10623 | 19455 | .unused, |
| 10624 | 19456 | }, |
| 10625 | 19457 | .dst_temps = .{.{ .cc = cc }}, |
| 10626 | | .clobbers = .{ .eflags = true }, |
| 19458 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 10627 | 19459 | .each = .{ .once = &.{ |
| 10628 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 10629 | | .{ ._, ._, .xor, .tmp1p, .tmp1p, ._, ._ }, |
| 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, ._, ._ }, |
| 19460 | .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, |
| 19461 | .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ }, |
| 10636 | 19462 | } }, |
| 10637 | 19463 | } }, |
| 10638 | 19464 | }) catch |err| switch (err) { |
| ... | ... | @@ -10644,10 +19470,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10644 | 19470 | }), |
| 10645 | 19471 | else => |e| return e, |
| 10646 | 19472 | }; |
| 10647 | | for (ops) |op| for (res) |r| { |
| 10648 | | if (op.index == r.index) break; |
| 10649 | | } else try op.die(cg); |
| 10650 | | try res[0].moveTo(inst, cg); |
| 19473 | try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); |
| 10651 | 19474 | }, |
| 10652 | 19475 | |
| 10653 | 19476 | .cond_br => try cg.airCondBr(inst), |
| ... | ... | @@ -10718,9 +19541,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10718 | 19541 | .fromSize(opt_child_abi_size) }), |
| 10719 | 19542 | .u(0), |
| 10720 | 19543 | ); |
| 10721 | | var is_null = try cg.tempInit(.bool, .{ .eflags = .e }); |
| 10722 | | try ops[0].die(cg); |
| 10723 | | try is_null.moveTo(inst, cg); |
| 19544 | const is_null = try cg.tempInit(.bool, .{ .eflags = .e }); |
| 19545 | try is_null.finish(inst, &.{un_op}, &ops, cg); |
| 10724 | 19546 | }, |
| 10725 | 19547 | .is_non_null_ptr => if (use_old) try cg.airIsNonNullPtr(inst) else { |
| 10726 | 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 | 19563 | .fromSize(opt_child_abi_size) }), |
| 10742 | 19564 | .u(0), |
| 10743 | 19565 | ); |
| 10744 | | var is_non_null = try cg.tempInit(.bool, .{ .eflags = .ne }); |
| 10745 | | try ops[0].die(cg); |
| 10746 | | try is_non_null.moveTo(inst, cg); |
| 19566 | const is_non_null = try cg.tempInit(.bool, .{ .eflags = .ne }); |
| 19567 | try is_non_null.finish(inst, &.{un_op}, &ops, cg); |
| 10747 | 19568 | }, |
| 10748 | 19569 | .is_err_ptr => if (use_old) try cg.airIsErrPtr(inst) else { |
| 10749 | 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 | 19580 | try ops[0].tracking(cg).short.deref().mem(cg, .{ .size = cg.memSize(eu_err_ty) }), |
| 10760 | 19581 | .u(0), |
| 10761 | 19582 | ); |
| 10762 | | var is_err = try cg.tempInit(.bool, .{ .eflags = .ne }); |
| 10763 | | try ops[0].die(cg); |
| 10764 | | try is_err.moveTo(inst, cg); |
| 19583 | const is_err = try cg.tempInit(.bool, .{ .eflags = .ne }); |
| 19584 | try is_err.finish(inst, &.{un_op}, &ops, cg); |
| 10765 | 19585 | }, |
| 10766 | 19586 | .is_non_err_ptr => if (use_old) try cg.airIsNonErrPtr(inst) else { |
| 10767 | 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 | 19597 | try ops[0].tracking(cg).short.deref().mem(cg, .{ .size = cg.memSize(eu_err_ty) }), |
| 10778 | 19598 | .u(0), |
| 10779 | 19599 | ); |
| 10780 | | var is_non_err = try cg.tempInit(.bool, .{ .eflags = .e }); |
| 10781 | | try ops[0].die(cg); |
| 10782 | | try is_non_err.moveTo(inst, cg); |
| 19600 | const is_non_err = try cg.tempInit(.bool, .{ .eflags = .e }); |
| 19601 | try is_non_err.finish(inst, &.{un_op}, &ops, cg); |
| 10783 | 19602 | }, |
| 10784 | 19603 | .load => if (use_old) try cg.airLoad(inst) else fallback: { |
| 10785 | 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 | 19609 | (ptr_info.flags.vector_index == .none or val_ty.toIntern() == .bool_type)) |
| 10791 | 19610 | break :fallback try cg.airLoad(inst); |
| 10792 | 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 | 19613 | .disp = switch (ptr_info.flags.vector_index) { |
| 10795 | 19614 | .none => 0, |
| 10796 | 19615 | .runtime => unreachable, |
| 10797 | 19616 | else => |vector_index| @intCast(val_ty.abiSize(zcu) * @intFromEnum(vector_index)), |
| 10798 | 19617 | }, |
| 10799 | 19618 | }, cg); |
| 10800 | | for (ops) |op| if (op.index != res.index) try op.die(cg); |
| 10801 | | try res.moveTo(inst, cg); |
| 19619 | try res.finish(inst, &.{ty_op.operand}, &ops, cg); |
| 10802 | 19620 | }, |
| 10803 | 19621 | .int_from_ptr => if (use_old) try cg.airIntFromPtr(inst) else { |
| 10804 | 19622 | const un_op = air_datas[@intFromEnum(inst)].un_op; |
| 10805 | 19623 | var ops = try cg.tempsFromOperands(inst, .{un_op}); |
| 10806 | 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 | 19627 | .int_from_bool => if (use_old) try cg.airIntFromBool(inst) else { |
| 10810 | 19628 | const un_op = air_datas[@intFromEnum(inst)].un_op; |
| 10811 | | var ops = try cg.tempsFromOperands(inst, .{un_op}); |
| 10812 | | try ops[0].moveTo(inst, cg); |
| 19629 | const ops = try cg.tempsFromOperands(inst, .{un_op}); |
| 19630 | try ops[0].finish(inst, &.{un_op}, &ops, cg); |
| 10813 | 19631 | }, |
| 10814 | 19632 | .ret => try cg.airRet(inst, false), |
| 10815 | 19633 | .ret_safe => try cg.airRet(inst, true), |
| ... | ... | @@ -10848,8 +19666,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10848 | 19666 | .unreach => {}, |
| 10849 | 19667 | .optional_payload_ptr => if (use_old) try cg.airOptionalPayloadPtr(inst) else { |
| 10850 | 19668 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| 10851 | | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 10852 | | try ops[0].moveTo(inst, cg); |
| 19669 | const ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 19670 | try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg); |
| 10853 | 19671 | }, |
| 10854 | 19672 | .optional_payload_ptr_set => if (use_old) try cg.airOptionalPayloadPtrSet(inst) else { |
| 10855 | 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 | 19682 | try has_value.die(cg); |
| 10865 | 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 | 19687 | .unwrap_errunion_payload_ptr => if (use_old) try cg.airUnwrapErrUnionPayloadPtr(inst) else { |
| 10870 | 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 | 19691 | const eu_pl_off: i32 = @intCast(codegen.errUnionPayloadOffset(eu_pl_ty, zcu)); |
| 10874 | 19692 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 10875 | 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 | 19696 | .unwrap_errunion_err_ptr => if (use_old) try cg.airUnwrapErrUnionErrPtr(inst) else { |
| 10879 | 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 | 19700 | const eu_err_off: i32 = @intCast(codegen.errUnionErrorOffset(eu_pl_ty, zcu)); |
| 10883 | 19701 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 10884 | 19702 | try ops[0].toOffset(eu_err_off, cg); |
| 10885 | | var err = try ops[0].load(eu_ty.errorUnionSet(zcu), .{}, cg); |
| 10886 | | try ops[0].die(cg); |
| 10887 | | try err.moveTo(inst, cg); |
| 19703 | const err = try ops[0].load(eu_ty.errorUnionSet(zcu), .{}, cg); |
| 19704 | try err.finish(inst, &.{ty_op.operand}, &ops, cg); |
| 10888 | 19705 | }, |
| 10889 | 19706 | .errunion_payload_ptr_set => if (use_old) try cg.airErrUnionPayloadPtrSet(inst) else { |
| 10890 | 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 | 19716 | try ops[0].store(&no_err, .{}, cg); |
| 10900 | 19717 | try no_err.die(cg); |
| 10901 | 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 | 19721 | .struct_field_ptr => if (use_old) try cg.airStructFieldPtr(inst) else { |
| 10905 | 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 | 19727 | ty_pl.ty.toType(), |
| 10911 | 19728 | extra.field_index, |
| 10912 | 19729 | ), cg); |
| 10913 | | try ops[0].moveTo(inst, cg); |
| 19730 | try ops[0].finish(inst, &.{extra.struct_operand}, &ops, cg); |
| 10914 | 19731 | }, |
| 10915 | 19732 | .struct_field_ptr_index_0, |
| 10916 | 19733 | .struct_field_ptr_index_1, |
| ... | ... | @@ -10936,7 +19753,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 10936 | 19753 | .struct_field_ptr_index_3 => 3, |
| 10937 | 19754 | }, |
| 10938 | 19755 | ), cg); |
| 10939 | | try ops[0].moveTo(inst, cg); |
| 19756 | try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg); |
| 10940 | 19757 | }, |
| 10941 | 19758 | .struct_field_val => if (use_old) try cg.airStructFieldVal(inst) else fallback: { |
| 10942 | 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 | 19770 | try ops[0].read(field_ty, .{ .disp = field_off }, cg) |
| 10954 | 19771 | else |
| 10955 | 19772 | try cg.tempInit(field_ty, .none); |
| 10956 | | for (ops) |op| if (op.index != res.index) try op.die(cg); |
| 10957 | | try res.moveTo(inst, cg); |
| 19773 | try res.finish(inst, &.{extra.struct_operand}, &ops, cg); |
| 10958 | 19774 | }, |
| 10959 | 19775 | .set_union_tag => if (use_old) try cg.airSetUnionTag(inst) else { |
| 10960 | 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 | 19781 | if (union_layout.tag_size > 0) try ops[0].store(&ops[1], .{ |
| 10966 | 19782 | .disp = @intCast(union_layout.tagOffset()), |
| 10967 | 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 | 19787 | .get_union_tag => if (use_old) try cg.airGetUnionTag(inst) else { |
| 10971 | 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 | 19790 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 10974 | 19791 | const union_layout = union_ty.unionGetLayout(zcu); |
| 10975 | 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 | 19794 | .disp = @intCast(union_layout.tagOffset()), |
| 10978 | 19795 | }, cg); |
| 10979 | | for (ops) |op| if (op.index != res.index) try op.die(cg); |
| 10980 | | try res.moveTo(inst, cg); |
| 19796 | try res.finish(inst, &.{ty_op.operand}, &ops, cg); |
| 10981 | 19797 | }, |
| 10982 | 19798 | .slice => if (use_old) try cg.airSlice(inst) else { |
| 10983 | 19799 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; |
| 10984 | 19800 | const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data; |
| 10985 | 19801 | var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs }); |
| 10986 | 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 | 19805 | .slice_len => if (use_old) try cg.airSliceLen(inst) else { |
| 10990 | 19806 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| 10991 | 19807 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 10992 | 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 | 19811 | .slice_ptr => if (use_old) try cg.airSlicePtr(inst) else { |
| 10996 | 19812 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| 10997 | 19813 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 10998 | 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 | 19817 | .ptr_slice_len_ptr => if (use_old) try cg.airPtrSliceLenPtr(inst) else { |
| 11002 | 19818 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| 11003 | 19819 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 11004 | 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 | 19823 | .ptr_slice_ptr_ptr => if (use_old) try cg.airPtrSlicePtrPtr(inst) else { |
| 11008 | 19824 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| 11009 | 19825 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 11010 | 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 | 19829 | .slice_elem_val, .ptr_elem_val => |air_tag| if (use_old) switch (air_tag) { |
| 11014 | 19830 | else => unreachable, |
| ... | ... | @@ -11139,10 +19955,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 11139 | 19955 | // hack around Sema OPV bugs |
| 11140 | 19956 | res[0] = try cg.tempInit(res_ty, .none); |
| 11141 | 19957 | } |
| 11142 | | for (ops) |op| for (res) |r| { |
| 11143 | | if (op.index == r.index) break; |
| 11144 | | } else try op.die(cg); |
| 11145 | | try res[0].moveTo(inst, cg); |
| 19958 | try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); |
| 11146 | 19959 | }, |
| 11147 | 19960 | .slice_elem_ptr, .ptr_elem_ptr => |air_tag| if (use_old) switch (air_tag) { |
| 11148 | 19961 | else => unreachable, |
| ... | ... | @@ -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); |
| 11199 | | try ops[0].moveTo(inst, cg); |
| 20011 | try ops[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); |
| 11200 | 20012 | }, |
| 11201 | 20013 | .array_to_slice => if (use_old) try cg.airArrayToSlice(inst) else { |
| 11202 | 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 | 20017 | .immediate = cg.typeOf(ty_op.operand).childType(zcu).arrayLen(zcu), |
| 11206 | 20018 | }); |
| 11207 | 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 | 20022 | .error_set_has_value => return cg.fail("TODO implement error_set_has_value", .{}), |
| 11211 | 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 | 20040 | try res.write(&ops[0], .{ |
| 11229 | 20041 | .disp = @intCast(union_layout.payloadOffset()), |
| 11230 | 20042 | }, cg); |
| 11231 | | try ops[0].die(cg); |
| 11232 | | try res.moveTo(inst, cg); |
| 20043 | try res.finish(inst, &.{extra.init}, &ops, cg); |
| 11233 | 20044 | }, |
| 11234 | 20045 | .field_parent_ptr => if (use_old) try cg.airFieldParentPtr(inst) else { |
| 11235 | 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 | 20051 | cg.typeOf(extra.field_ptr), |
| 11241 | 20052 | extra.field_index, |
| 11242 | 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 | 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 | 20061 | |
| 11251 | 20062 | .err_return_trace => { |
| 11252 | 20063 | const ert: Temp = .{ .index = err_ret_trace_index }; |
| 11253 | | try ert.moveTo(inst, cg); |
| 20064 | try ert.finish(inst, &.{}, &.{}, cg); |
| 11254 | 20065 | }, |
| 11255 | 20066 | .set_err_return_trace => { |
| 11256 | 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 | 20085 | |
| 11275 | 20086 | .addrspace_cast => { |
| 11276 | 20087 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| 11277 | | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 11278 | | try ops[0].moveTo(inst, cg); |
| 20088 | const ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 20089 | try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg); |
| 11279 | 20090 | }, |
| 11280 | 20091 | |
| 11281 | 20092 | .save_err_return_trace_index => { |
| ... | ... | @@ -11285,7 +20096,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 11285 | 20096 | var ert: Temp = .{ .index = err_ret_trace_index }; |
| 11286 | 20097 | var res = try ert.load(.usize, .{ .disp = @intCast(agg_ty.structFieldOffset(ty_pl.payload, zcu)) }, cg); |
| 11287 | 20098 | try ert.die(cg); |
| 11288 | | try res.moveTo(inst, cg); |
| 20099 | try res.finish(inst, &.{}, &.{}, cg); |
| 11289 | 20100 | }, |
| 11290 | 20101 | |
| 11291 | 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 | 20920 | const src_mcv = try self.resolveInst(ty_op.operand); |
| 12110 | 20921 | if (dst_ty.isVector(zcu)) { |
| 12111 | 20922 | const max_abi_size = @max(dst_abi_size, src_abi_size); |
| 12112 | | if (max_abi_size > self.vectorSize(.int)) break :result null; |
| 12113 | 20923 | const has_avx = self.hasFeature(.avx); |
| 12114 | 20924 | |
| 12115 | 20925 | const dst_elem_abi_size = dst_ty.childType(zcu).abiSize(zcu); |
| 12116 | 20926 | const src_elem_abi_size = src_ty.childType(zcu).abiSize(zcu); |
| 12117 | 20927 | switch (std.math.order(dst_elem_abi_size, src_elem_abi_size)) { |
| 12118 | 20928 | .lt => { |
| 20929 | if (max_abi_size > self.vectorSize(.int)) break :result null; |
| 12119 | 20930 | const mir_tag: Mir.Inst.FixedTag = switch (dst_elem_abi_size) { |
| 12120 | 20931 | else => break :result null, |
| 12121 | 20932 | 1 => switch (src_elem_abi_size) { |
| ... | ... | @@ -12172,6 +20983,7 @@ fn airIntCast(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 12172 | 20983 | break :result dst_mcv; |
| 12173 | 20984 | }, |
| 12174 | 20985 | .gt => if (self.hasFeature(.sse4_1)) { |
| 20986 | if (max_abi_size > self.vectorSize(.int)) break :result null; |
| 12175 | 20987 | const mir_tag: Mir.Inst.FixedTag = .{ switch (dst_elem_abi_size) { |
| 12176 | 20988 | else => break :result null, |
| 12177 | 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 | 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 | 21425 | const pt = self.pt; |
| 12614 | 21426 | const zcu = pt.zcu; |
| 12615 | 21427 | const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op; |
| 12616 | 21428 | const result = result: { |
| 12617 | | const tag = self.air.instructions.items(.tag)[@intFromEnum(inst)]; |
| 12618 | 21429 | const dst_ty = self.typeOfIndex(inst); |
| 12619 | 21430 | switch (dst_ty.zigTypeTag(zcu)) { |
| 12620 | 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 | 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 | 24767 | const pt = self.pt; |
| 15957 | 24768 | const zcu = pt.zcu; |
| 15958 | | const tag = self.air.instructions.items(.tag)[@intFromEnum(inst)]; |
| 15959 | 24769 | |
| 15960 | 24770 | const result = result: { |
| 15961 | 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 | 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 | 24894 | const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op; |
| 16085 | 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 | 24899 | const RoundMode = packed struct(u5) { |
| ... | ... | @@ -16366,7 +25176,7 @@ fn airAbs(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 16366 | 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 | 25180 | .vector => switch (ty.childType(zcu).zigTypeTag(zcu)) { |
| 16371 | 25181 | else => null, |
| 16372 | 25182 | .int => switch (ty.childType(zcu).intInfo(zcu).bits) { |
| ... | ... | @@ -16402,7 +25212,7 @@ fn airAbs(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 16402 | 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 | 25217 | }) orelse return self.fail("TODO implement airAbs for {}", .{ty.fmt(pt)}); |
| 16408 | 25218 | |
| ... | ... | @@ -19263,7 +28073,7 @@ fn genBinOp( |
| 19263 | 28073 | .mul => .{ .v_ss, .mul }, |
| 19264 | 28074 | .div_float, .div_trunc, .div_floor, .div_exact => .{ .v_ss, .div }, |
| 19265 | 28075 | .max => .{ .v_ss, .max }, |
| 19266 | | .min => .{ .v_ss, .max }, |
| 28076 | .min => .{ .v_ss, .min }, |
| 19267 | 28077 | else => unreachable, |
| 19268 | 28078 | }, |
| 19269 | 28079 | dst_reg, |
| ... | ... | @@ -21474,11 +30284,16 @@ fn airRet(self: *CodeGen, inst: Air.Inst.Index, safety: bool) !void { |
| 21474 | 30284 | const ret_ty = self.fn_type.fnReturnType(zcu); |
| 21475 | 30285 | switch (self.ret_mcv.short) { |
| 21476 | 30286 | .none => {}, |
| 21477 | | .register, |
| 21478 | | .register_pair, |
| 21479 | | .register_triple, |
| 21480 | | .register_quadruple, |
| 21481 | | => try self.genCopy(ret_ty, self.ret_mcv.short, .{ .air_ref = un_op }, .{ .safety = safety }), |
| 30287 | .register => |reg| { |
| 30288 | const reg_lock = self.register_manager.lockRegAssumeUnused(reg); |
| 30289 | defer self.register_manager.unlockReg(reg_lock); |
| 30290 | 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 | 30297 | .indirect => |reg_off| { |
| 21483 | 30298 | try self.register_manager.getReg(reg_off.reg, null); |
| 21484 | 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 | 31420 | .resurrect = true, |
| 22606 | 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 | 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 | 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 | 31763 | self.scope_generation += 1; |
| 22942 | 31764 | const state = try self.saveState(); |
| 22943 | 31765 | |
| ... | ... | @@ -22960,47 +31782,63 @@ fn airSwitchDispatch(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 22960 | 31782 | |
| 22961 | 31783 | const block_ty = self.typeOfIndex(br.block_inst); |
| 22962 | 31784 | const loop_data = self.loops.getPtr(br.block_inst).?; |
| 22963 | | if (self.loop_switches.getPtr(br.block_inst)) |table| { |
| 22964 | | // Process operand death so that it is properly accounted for in the State below. |
| 22965 | | const condition_dies = self.liveness.operandDies(inst, 0); |
| 22966 | | |
| 22967 | | try self.restoreState(loop_data.state, &.{}, .{ |
| 22968 | | .emit_instructions = true, |
| 22969 | | .update_tracking = false, |
| 22970 | | .resurrect = false, |
| 22971 | | .close_scope = false, |
| 22972 | | }); |
| 31785 | const block_tracking = self.inst_tracking.getPtr(br.block_inst).?; |
| 31786 | { |
| 31787 | try self.getValue(block_tracking.short, null); |
| 31788 | const src_mcv = try self.resolveInst(br.operand); |
| 31789 | |
| 31790 | if (self.reuseOperandAdvanced(inst, br.operand, 0, src_mcv, br.block_inst)) { |
| 31791 | try self.getValue(block_tracking.short, br.block_inst); |
| 31792 | // .long = .none to avoid merging operand and block result stack frames. |
| 31793 | const current_tracking: InstTracking = .{ .long = .none, .short = src_mcv }; |
| 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 | 31815 | const condition_ty = self.typeOf(br.operand); |
| 22975 | | const condition = try self.resolveInst(br.operand); |
| 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 | | }; |
| 31816 | const condition_mcv = block_tracking.short; |
| 22981 | 31817 | try self.spillEflagsIfOccupied(); |
| 22982 | 31818 | if (table.min.orderAgainstZero(self.pt.zcu).compare(.neq)) try self.genBinOpMir( |
| 22983 | 31819 | .{ ._, .sub }, |
| 22984 | 31820 | condition_ty, |
| 22985 | | condition_index, |
| 31821 | condition_mcv, |
| 22986 | 31822 | .{ .air_ref = Air.internedToRef(table.min.toIntern()) }, |
| 22987 | 31823 | ); |
| 22988 | 31824 | switch (table.else_relocs) { |
| 22989 | 31825 | .@"unreachable" => {}, |
| 22990 | 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 | 31828 | try else_relocs.append(self.gpa, try self.asmJccReloc(.a, undefined)); |
| 22993 | 31829 | }, |
| 22994 | 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 | 31832 | _ = try self.asmJccReloc(.a, else_reloc); |
| 22997 | 31833 | }, |
| 22998 | 31834 | } |
| 22999 | 31835 | { |
| 23000 | | const condition_index_reg = if (condition_index.isRegister()) |
| 23001 | | condition_index.getReg().? |
| 23002 | | else |
| 23003 | | try self.copyToTmpRegister(.usize, condition_index); |
| 31836 | const condition_index_reg = if (condition_mcv.isRegister()) condition_mcv.getReg().? else cond: { |
| 31837 | const condition_index_reg = |
| 31838 | RegisterManager.regAtTrackedIndex(@intCast(loop_data.state.free_registers.findFirstSet().?)); |
| 31839 | try self.genSetReg(condition_index_reg, condition_ty, condition_mcv, .{}); |
| 31840 | break :cond condition_index_reg; |
| 31841 | }; |
| 23004 | 31842 | const condition_index_lock = self.register_manager.lockReg(condition_index_reg); |
| 23005 | 31843 | defer if (condition_index_lock) |lock| self.register_manager.unlockReg(lock); |
| 23006 | 31844 | try self.truncateRegister(condition_ty, condition_index_reg); |
| ... | ... | @@ -23019,38 +31857,6 @@ fn airSwitchDispatch(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 23019 | 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 | 31860 | // Emit a jump with a relocation. It will be patched up after the block ends. |
| 23055 | 31861 | // Leave the jump offset undefined |
| 23056 | 31862 | _ = try self.asmJmpReloc(loop_data.target); |
| ... | ... | @@ -24115,13 +32921,15 @@ fn moveStrategy(self: *CodeGen, ty: Type, class: Register.Class, aligned: bool) |
| 24115 | 32921 | 64 => switch (ty.vectorLen(zcu)) { |
| 24116 | 32922 | 1...2 => return .{ .move = if (self.hasFeature(.avx)) |
| 24117 | 32923 | .{ .v_pd, if (aligned) .mova else .movu } |
| 32924 | else if (self.hasFeature(.sse2)) |
| 32925 | .{ ._pd, if (aligned) .mova else .movu } |
| 24118 | 32926 | else |
| 24119 | | .{ ._pd, if (aligned) .mova else .movu } }, |
| 32927 | .{ ._ps, if (aligned) .mova else .movu } }, |
| 24120 | 32928 | 3...4 => if (self.hasFeature(.avx)) |
| 24121 | 32929 | return .{ .move = .{ .v_pd, if (aligned) .mova else .movu } }, |
| 24122 | 32930 | else => {}, |
| 24123 | 32931 | }, |
| 24124 | | 128 => switch (ty.vectorLen(zcu)) { |
| 32932 | 80, 128 => switch (ty.vectorLen(zcu)) { |
| 24125 | 32933 | 1 => return .{ .move = if (self.hasFeature(.avx)) |
| 24126 | 32934 | .{ if (aligned) .v_dqa else .v_dqu, .mov } |
| 24127 | 32935 | else if (self.hasFeature(.sse2)) |
| ... | ... | @@ -24450,7 +33258,7 @@ fn genSetReg( |
| 24450 | 33258 | }, |
| 24451 | 33259 | .mmx => unreachable, |
| 24452 | 33260 | .sse => switch (src_reg.class()) { |
| 24453 | | .general_purpose => try self.asmRegisterRegister( |
| 33261 | .general_purpose => if (self.hasFeature(.sse2)) try self.asmRegisterRegister( |
| 24454 | 33262 | switch (abi_size) { |
| 24455 | 33263 | 1...4 => if (self.hasFeature(.avx)) .{ .v_d, .mov } else .{ ._d, .mov }, |
| 24456 | 33264 | 5...8 => if (self.hasFeature(.avx)) .{ .v_q, .mov } else .{ ._q, .mov }, |
| ... | ... | @@ -24458,7 +33266,26 @@ fn genSetReg( |
| 24458 | 33266 | }, |
| 24459 | 33267 | dst_reg.to128(), |
| 24460 | 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 | 33289 | .segment => try self.genSetReg( |
| 24463 | 33290 | dst_reg, |
| 24464 | 33291 | ty, |
| ... | ... | @@ -24469,7 +33296,12 @@ fn genSetReg( |
| 24469 | 33296 | .sse => try self.asmRegisterRegister( |
| 24470 | 33297 | @as(?Mir.Inst.FixedTag, switch (ty.scalarType(zcu).zigTypeTag(zcu)) { |
| 24471 | 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 | 33305 | 17...32 => if (self.hasFeature(.avx)) .{ .v_dqa, .mov } else null, |
| 24474 | 33306 | else => null, |
| 24475 | 33307 | }, |
| ... | ... | @@ -24477,13 +33309,20 @@ fn genSetReg( |
| 24477 | 33309 | 16, 128 => switch (abi_size) { |
| 24478 | 33310 | 2...16 => if (self.hasFeature(.avx)) |
| 24479 | 33311 | .{ .v_dqa, .mov } |
| 33312 | else if (self.hasFeature(.sse2)) |
| 33313 | .{ ._dqa, .mov } |
| 24480 | 33314 | else |
| 24481 | | .{ ._dqa, .mov }, |
| 33315 | .{ ._ps, .mova }, |
| 24482 | 33316 | 17...32 => if (self.hasFeature(.avx)) .{ .v_dqa, .mov } else null, |
| 24483 | 33317 | else => null, |
| 24484 | 33318 | }, |
| 24485 | 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 | 33326 | 80 => null, |
| 24488 | 33327 | else => unreachable, |
| 24489 | 33328 | }, |
| ... | ... | @@ -25180,15 +34019,19 @@ fn airBitCast(self: *CodeGen, inst: Air.Inst.Index) !void { |
| 25180 | 34019 | const src_lock = if (src_mcv.getReg()) |src_reg| self.register_manager.lockReg(src_reg) else null; |
| 25181 | 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 | 34024 | dst_rc.supersetOf(src_rc) and dst_ty.abiSize(zcu) <= src_ty.abiSize(zcu) and |
| 25185 | 34025 | dst_ty.abiAlignment(zcu).order(src_ty.abiAlignment(zcu)).compare(.lte) and |
| 25186 | 34026 | self.reuseOperand(inst, ty_op.operand, 0, src_mcv)) src_mcv else dst: { |
| 25187 | 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))) { |
| 25189 | | .lt => dst_ty, |
| 25190 | | .eq => if (!dst_mcv.isBase() or src_mcv.isBase()) dst_ty else src_ty, |
| 25191 | | .gt => src_ty, |
| 34028 | try self.genCopy(switch (src_mcv) { |
| 34029 | else => switch (std.math.order(dst_ty.abiSize(zcu), src_ty.abiSize(zcu))) { |
| 34030 | .lt => dst_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 | 34035 | }, dst_mcv, src_mcv, .{}); |
| 25193 | 34036 | break :dst dst_mcv; |
| 25194 | 34037 | }; |
| ... | ... | @@ -28614,9 +37457,8 @@ fn limitImmediateType(self: *CodeGen, operand: Air.Inst.Ref, comptime T: type) ! |
| 28614 | 37457 | return mcv; |
| 28615 | 37458 | } |
| 28616 | 37459 | |
| 28617 | | fn genTypedValue(self: *CodeGen, val: Value) InnerError!MCValue { |
| 28618 | | const pt = self.pt; |
| 28619 | | return switch (try codegen.genTypedValue(self.bin_file, pt, self.src_loc, val, self.target.*)) { |
| 37460 | fn genResult(self: *CodeGen, res: codegen.GenResult) InnerError!MCValue { |
| 37461 | return switch (res) { |
| 28620 | 37462 | .mcv => |mcv| switch (mcv) { |
| 28621 | 37463 | .none => .none, |
| 28622 | 37464 | .undef => .undef, |
| ... | ... | @@ -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 | 37486 | const CallMCValues = struct { |
| 28637 | 37487 | args: []MCValue, |
| 28638 | 37488 | return_value: InstTracking, |
| ... | ... | @@ -29772,6 +38622,7 @@ const Temp = struct { |
| 29772 | 38622 | cg.temp_type[@intFromEnum(result_temp_index)] = .slice_const_u8; |
| 29773 | 38623 | result_temp_index.tracking(cg).* = .init(result); |
| 29774 | 38624 | first_temp.* = result_temp; |
| 38625 | second_temp.* = result_temp; |
| 29775 | 38626 | } |
| 29776 | 38627 | |
| 29777 | 38628 | fn asMask(temp: Temp, info: MaskInfo, cg: *CodeGen) void { |
| ... | ... | @@ -30248,7 +39099,20 @@ const Temp = struct { |
| 30248 | 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 | 39116 | if (cg.liveness.isUnused(inst)) try temp.die(cg) else switch (temp.unwrap(cg)) { |
| 30253 | 39117 | .ref, .err_ret_trace => { |
| 30254 | 39118 | const result = try cg.allocRegOrMem(inst, true); |
| ... | ... | @@ -30410,6 +39274,10 @@ fn tempFromValue(cg: *CodeGen, value: Value) !Temp { |
| 30410 | 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 | 39281 | fn tempFromOperand( |
| 30414 | 39282 | cg: *CodeGen, |
| 30415 | 39283 | inst: Air.Inst.Index, |
| ... | ... | @@ -30529,35 +39397,94 @@ const Select = struct { |
| 30529 | 39397 | }; |
| 30530 | 39398 | switch (mir_tag[0]) { |
| 30531 | 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 | 39435 | .ld => s.top -%= 1, |
| 30534 | | else => { |
| 30535 | | const fixes = @tagName(mir_tag[0]); |
| 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 | | }, |
| 39436 | .prem => {}, |
| 39437 | else => unreachable, |
| 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 | 39456 | .st => s.top +%= 1, |
| 30547 | | else => { |
| 30548 | | const fixes = @tagName(mir_tag[0]); |
| 30549 | | const fixes_blank = std.mem.indexOfScalar(u8, fixes, '_').?; |
| 30550 | | std.debug.panic("{s}: {s}{s}{s}\n", .{ |
| 30551 | | @src().fn_name, |
| 30552 | | fixes[0..fixes_blank], |
| 30553 | | @tagName(mir_tag[1]), |
| 30554 | | fixes[fixes_blank + 1 ..], |
| 30555 | | }); |
| 30556 | | }, |
| 39457 | else => unreachable, |
| 39458 | }, |
| 39459 | .fi_ => switch (mir_tag[1]) { |
| 39460 | .add, .com, .div, .divr, .mul, .st, .stt, .sub, .subr => {}, |
| 39461 | .ld => s.top -%= 1, |
| 39462 | else => unreachable, |
| 39463 | }, |
| 39464 | .fi_p => switch (mir_tag[1]) { |
| 39465 | .com, .st => s.top +%= 1, |
| 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, |
| 30559 | | => switch (mir_tag[1]) { |
| 39482 | .f_l2e, .f_l2t, .f_lg2, .f_ln2, .f_pi, .f_z => switch (mir_tag[1]) { |
| 30560 | 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 | 39488 | else => { |
| 30562 | 39489 | const fixes = @tagName(mir_tag[0]); |
| 30563 | 39490 | const fixes_blank = std.mem.indexOfScalar(u8, fixes, '_').?; |
| ... | ... | @@ -30569,41 +39496,13 @@ const Select = struct { |
| 30569 | 39496 | }); |
| 30570 | 39497 | }, |
| 30571 | 39498 | }, |
| 30572 | | .f_l2e, |
| 30573 | | .f_l2t, |
| 30574 | | .f_lg2, |
| 30575 | | .f_ln2, |
| 30576 | | .f_pi, |
| 30577 | | .f_z, |
| 30578 | | => switch (mir_tag[1]) { |
| 30579 | | .ld => s.top -%= 1, |
| 39499 | .f_pp => switch (mir_tag[1]) { |
| 39500 | .com, .ucom => s.top +%= 2, |
| 30580 | 39501 | else => unreachable, |
| 30581 | 39502 | }, |
| 30582 | | .f_b, |
| 30583 | | .f_be, |
| 30584 | | .f_cw, |
| 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, |
| 39503 | .fx_ => switch (mir_tag[1]) { |
| 39504 | .rstor => unreachable, |
| 39505 | .save => {}, |
| 30607 | 39506 | else => unreachable, |
| 30608 | 39507 | }, |
| 30609 | 39508 | else => {}, |
| ... | ... | @@ -30620,9 +39519,13 @@ const Select = struct { |
| 30620 | 39519 | dst_constraints: [@intFromEnum(Select.Operand.Ref.src0) - @intFromEnum(Select.Operand.Ref.dst0)]Constraint = @splat(.any), |
| 30621 | 39520 | src_constraints: [@intFromEnum(Select.Operand.Ref.none) - @intFromEnum(Select.Operand.Ref.src0)]Constraint = @splat(.any), |
| 30622 | 39521 | patterns: []const Select.Pattern, |
| 39522 | call_frame: packed struct(u16) { size: u10 = 0, alignment: InternPool.Alignment } = .{ .size = 0, .alignment = .none }, |
| 30623 | 39523 | extra_temps: [@intFromEnum(Select.Operand.Ref.dst0) - @intFromEnum(Select.Operand.Ref.tmp0)]TempSpec = @splat(.unused), |
| 30624 | 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 | 39529 | each: union(enum) { |
| 30627 | 39530 | once: []const Instruction, |
| 30628 | 39531 | }, |
| ... | ... | @@ -30633,7 +39536,10 @@ const Select = struct { |
| 30633 | 39536 | any_bool_vec, |
| 30634 | 39537 | any_int, |
| 30635 | 39538 | any_signed_int, |
| 39539 | any_unsigned_int, |
| 30636 | 39540 | any_scalar_int, |
| 39541 | any_scalar_signed_int, |
| 39542 | any_scalar_unsigned_int, |
| 30637 | 39543 | any_float, |
| 30638 | 39544 | po2_any, |
| 30639 | 39545 | bool_vec: Memory.Size, |
| ... | ... | @@ -30645,13 +39551,20 @@ const Select = struct { |
| 30645 | 39551 | multiple_size: Memory.Size, |
| 30646 | 39552 | int: Memory.Size, |
| 30647 | 39553 | scalar_int_is: Memory.Size, |
| 30648 | | scalar_int: struct { of: Memory.Size, is: Memory.Size }, |
| 30649 | | scalar_signed_int: Memory.Size, |
| 30650 | | scalar_unsigned_int: Memory.Size, |
| 30651 | | scalar_remainder_int: struct { of: Memory.Size, is: Memory.Size }, |
| 30652 | | scalar_float: struct { of: Memory.Size, is: Memory.Size }, |
| 30653 | | scalar_exact_float: struct { of: Memory.Size, is: Memory.Size }, |
| 30654 | | multiple_scalar_int: struct { of: Memory.Size, is: Memory.Size }, |
| 39554 | scalar_signed_int_is: Memory.Size, |
| 39555 | scalar_unsigned_int_is: Memory.Size, |
| 39556 | scalar_int: OfIsSizes, |
| 39557 | scalar_signed_int: OfIsSizes, |
| 39558 | scalar_unsigned_int: OfIsSizes, |
| 39559 | multiple_scalar_int: OfIsSizes, |
| 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 | 39568 | exact_int: u16, |
| 30656 | 39569 | exact_signed_int: u16, |
| 30657 | 39570 | exact_unsigned_int: u16, |
| ... | ... | @@ -30660,16 +39573,18 @@ const Select = struct { |
| 30660 | 39573 | po2_int: Memory.Size, |
| 30661 | 39574 | signed_po2_int: Memory.Size, |
| 30662 | 39575 | unsigned_po2_or_exact_int: Memory.Size, |
| 30663 | | remainder_int: struct { of: Memory.Size, is: Memory.Size }, |
| 30664 | | exact_remainder_int: struct { of: Memory.Size, is: Memory.Size }, |
| 30665 | | signed_or_exact_remainder_int: struct { of: Memory.Size, is: Memory.Size }, |
| 30666 | | unsigned_or_exact_remainder_int: struct { of: Memory.Size, is: Memory.Size }, |
| 39576 | remainder_int: OfIsSizes, |
| 39577 | exact_remainder_int: OfIsSizes, |
| 39578 | signed_or_exact_remainder_int: OfIsSizes, |
| 39579 | unsigned_or_exact_remainder_int: OfIsSizes, |
| 30667 | 39580 | signed_int: Memory.Size, |
| 30668 | 39581 | unsigned_int: Memory.Size, |
| 30669 | 39582 | elem_size_is: u8, |
| 30670 | 39583 | po2_elem_size, |
| 30671 | 39584 | elem_int: Memory.Size, |
| 30672 | 39585 | |
| 39586 | const OfIsSizes = struct { of: Memory.Size, is: Memory.Size }; |
| 39587 | |
| 30673 | 39588 | fn accepts(constraint: Constraint, ty: Type, cg: *CodeGen) bool { |
| 30674 | 39589 | const zcu = cg.pt.zcu; |
| 30675 | 39590 | return switch (constraint) { |
| ... | ... | @@ -30677,7 +39592,10 @@ const Select = struct { |
| 30677 | 39592 | .any_bool_vec => ty.isVector(zcu) and ty.childType(zcu).toIntern() == .bool_type, |
| 30678 | 39593 | .any_int => cg.intInfo(ty) != null, |
| 30679 | 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 | 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 | 39599 | .any_float => ty.isRuntimeFloat(), |
| 30682 | 39600 | .po2_any => std.math.isPowerOfTwo(ty.abiSize(zcu)), |
| 30683 | 39601 | .bool_vec => |size| ty.isVector(zcu) and ty.scalarType(zcu).toIntern() == .bool_type and |
| ... | ... | @@ -30700,25 +39618,42 @@ const Select = struct { |
| 30700 | 39618 | size.bitSize(cg.target) >= int_info.bits |
| 30701 | 39619 | else |
| 30702 | 39620 | false, |
| 30703 | | .scalar_int => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= ty.abiSize(zcu) and |
| 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) { |
| 39621 | .scalar_signed_int_is => |size| if (cg.intInfo(ty.scalarType(zcu))) |int_info| switch (int_info.signedness) { |
| 30706 | 39622 | .signed => size.bitSize(cg.target) >= int_info.bits, |
| 30707 | 39623 | .unsigned => false, |
| 30708 | 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 | 39626 | .signed => false, |
| 30711 | 39627 | .unsigned => size.bitSize(cg.target) >= int_info.bits, |
| 30712 | 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 | 39637 | .multiple_scalar_int => |of_is| ty.abiSize(zcu) % @divExact(of_is.of.bitSize(cg.target), 8) == 0 and |
| 30714 | 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 | 39645 | .scalar_remainder_int => |of_is| if (cg.intInfo(ty.scalarType(zcu))) |int_info| |
| 30716 | 39646 | of_is.is.bitSize(cg.target) >= (int_info.bits - 1) % of_is.of.bitSize(cg.target) + 1 |
| 30717 | 39647 | else |
| 30718 | 39648 | false, |
| 30719 | | .scalar_float => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= ty.abiSize(zcu) and |
| 30720 | | if (cg.floatBits(ty.scalarType(zcu))) |float_bits| of_is.is.bitSize(cg.target) >= float_bits else false, |
| 30721 | | .scalar_exact_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, |
| 39650 | .scalar_any_float => |size| @divExact(size.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 | 39657 | if (cg.floatBits(ty.scalarType(zcu))) |float_bits| of_is.is.bitSize(cg.target) == float_bits else false, |
| 30723 | 39658 | .exact_int => |bit_size| if (cg.intInfo(ty)) |int_info| bit_size == int_info.bits else false, |
| 30724 | 39659 | .exact_signed_int => |bit_size| if (cg.intInfo(ty)) |int_info| switch (int_info.signedness) { |
| ... | ... | @@ -30787,13 +39722,14 @@ const Select = struct { |
| 30787 | 39722 | src: [2]Src, |
| 30788 | 39723 | commute: struct { u8, u8 } = .{ 0, 0 }, |
| 30789 | 39724 | |
| 30790 | | const Src = enum { |
| 39725 | const Src = union(enum) { |
| 30791 | 39726 | none, |
| 30792 | 39727 | any, |
| 30793 | 39728 | imm8, |
| 30794 | 39729 | imm16, |
| 30795 | 39730 | imm32, |
| 30796 | 39731 | simm32, |
| 39732 | to_reg: Register, |
| 30797 | 39733 | mem, |
| 30798 | 39734 | to_mem, |
| 30799 | 39735 | mut_mem, |
| ... | ... | @@ -30806,6 +39742,10 @@ const Select = struct { |
| 30806 | 39742 | to_x87, |
| 30807 | 39743 | mut_x87, |
| 30808 | 39744 | to_mut_x87, |
| 39745 | mmx, |
| 39746 | to_mmx, |
| 39747 | mut_mmx, |
| 39748 | to_mut_mmx, |
| 30809 | 39749 | mm, |
| 30810 | 39750 | to_mm, |
| 30811 | 39751 | mut_mm, |
| ... | ... | @@ -30846,6 +39786,7 @@ const Select = struct { |
| 30846 | 39786 | .mem => temp.tracking(cg).short.isMemory(), |
| 30847 | 39787 | .to_mem, .to_mut_mem => true, |
| 30848 | 39788 | .mut_mem => temp.isMut(cg) and temp.tracking(cg).short.isMemory(), |
| 39789 | .to_reg => true, |
| 30849 | 39790 | .gpr => temp.typeOf(cg).abiSize(cg.pt.zcu) <= 8 and switch (temp.tracking(cg).short) { |
| 30850 | 39791 | .register => |reg| reg.class() == .general_purpose, |
| 30851 | 39792 | .register_offset => |reg_off| reg_off.reg.class() == .general_purpose and reg_off.off == 0, |
| ... | ... | @@ -30868,6 +39809,17 @@ const Select = struct { |
| 30868 | 39809 | else => false, |
| 30869 | 39810 | }, |
| 30870 | 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 | 39823 | .mm => temp.typeOf(cg).abiSize(cg.pt.zcu) == 8 and switch (temp.tracking(cg).short) { |
| 30872 | 39824 | .register => |reg| reg.class() == .mmx, |
| 30873 | 39825 | .register_offset => |reg_off| reg_off.reg.class() == .mmx and reg_off.off == 0, |
| ... | ... | @@ -30920,12 +39872,13 @@ const Select = struct { |
| 30920 | 39872 | .none => unreachable, |
| 30921 | 39873 | .any, .imm8, .imm16, .imm32, .simm32 => false, |
| 30922 | 39874 | .mem, .to_mem, .mut_mem, .to_mut_mem => try temp.toBase(cg), |
| 39875 | .to_reg => |reg| try temp.toReg(reg, cg), |
| 30923 | 39876 | .gpr, .to_gpr => try temp.toRegClass(false, .general_purpose, cg), |
| 30924 | 39877 | .mut_gpr, .to_mut_gpr => try temp.toRegClass(true, .general_purpose, cg), |
| 30925 | 39878 | .x87, .to_x87 => try temp.toRegClass(false, .x87, cg), |
| 30926 | 39879 | .mut_x87, .to_mut_x87 => try temp.toRegClass(true, .x87, cg), |
| 30927 | | .mm, .to_mm => try temp.toRegClass(false, .mmx, cg), |
| 30928 | | .mut_mm, .to_mut_mm => try temp.toRegClass(true, .mmx, cg), |
| 39880 | .mmx, .to_mmx, .mm, .to_mm => try temp.toRegClass(false, .mmx, cg), |
| 39881 | .mut_mmx, .to_mut_mmx, .mut_mm, .to_mut_mm => try temp.toRegClass(true, .mmx, cg), |
| 30929 | 39882 | .sse, .to_sse, .xmm, .to_xmm, .ymm, .to_ymm => try temp.toRegClass(false, .sse, cg), |
| 30930 | 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 | 39896 | unused, |
| 30944 | 39897 | any, |
| 30945 | 39898 | cc: Condition, |
| 39899 | ref: Select.Operand.Ref, |
| 30946 | 39900 | reg: Register, |
| 30947 | 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 | 39904 | rc_mask: struct { rc: Register.Class, info: MaskInfo }, |
| 39905 | mut_rc_mask: struct { ref: Select.Operand.Ref, rc: Register.Class, info: MaskInfo }, |
| 30949 | 39906 | mem, |
| 30950 | 39907 | smin_mem: ConstInfo, |
| 30951 | 39908 | smax_mem: ConstInfo, |
| 30952 | 39909 | umin_mem: ConstInfo, |
| 30953 | 39910 | umax_mem: ConstInfo, |
| 30954 | | ref: Select.Operand.Ref, |
| 30955 | | ref_mask: struct { ref: Select.Operand.Ref, info: MaskInfo }, |
| 30956 | | mut_reg: struct { ref: Select.Operand.Ref, rc: Register.Class }, |
| 39911 | symbol: *const struct { lib: ?[]const u8 = null, name: []const u8 }, |
| 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 | 39915 | fn finish(kind: Kind, temp: Temp, s: *const Select) void { |
| 30961 | 39916 | switch (kind) { |
| 30962 | 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 | 39932 | const cg = s.cg; |
| 30970 | 39933 | return switch (spec.kind) { |
| 30971 | | .unused => null, |
| 39934 | .unused => unreachable, |
| 30972 | 39935 | .any => try cg.tempAlloc(spec.type), |
| 30973 | 39936 | .cc => |cc| try cg.tempInit(spec.type, .{ .eflags = cc }), |
| 39937 | .ref => |ref| ref.deref(s), |
| 30974 | 39938 | .reg => |reg| try cg.tempInit(spec.type, .{ .register = reg }), |
| 30975 | 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 | 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 | 39960 | .mem => try cg.tempAllocMem(spec.type), |
| 30978 | 39961 | .smin_mem, .smax_mem, .umin_mem, .umax_mem => |const_info| { |
| 30979 | 39962 | const pt = cg.pt; |
| 30980 | 39963 | const zcu = pt.zcu; |
| 30981 | 39964 | const ip = &zcu.intern_pool; |
| 30982 | | const ty = const_info.ref.deref(s).typeOf(s.cg); |
| 30983 | | const vector_len: ?u32, const scalar_ty: Type = switch (ip.indexToKey(ty.toIntern())) { |
| 30984 | | else => .{ if (const_info.vectorize) 1 else null, ty }, |
| 39965 | const ty = const_info.ref.deref(s).typeOf(cg); |
| 39966 | const vector_len, const scalar_ty: Type = switch (ip.indexToKey(ty.toIntern())) { |
| 39967 | else => .{ null, ty }, |
| 30985 | 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 | 39974 | const res_scalar_ty, const res_scalar_val: Value = res_scalar: switch (scalar_ty.toIntern()) { |
| 30988 | 39975 | .bool_type => .{ |
| 30989 | 39976 | scalar_ty, |
| ... | ... | @@ -31028,26 +40015,20 @@ const Select = struct { |
| 31028 | 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 | 40019 | .ty = (try pt.vectorType(.{ |
| 31033 | 40020 | .len = len, |
| 31034 | 40021 | .child = res_scalar_ty.toIntern(), |
| 31035 | 40022 | })).toIntern(), |
| 31036 | 40023 | .storage = .{ .repeated_elem = res_scalar_val.toIntern() }, |
| 31037 | 40024 | } })) else res_scalar_val; |
| 31038 | | return try cg.tempFromValue(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)); |
| 40025 | return try cg.tempMemFromValue(res_val); |
| 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 | 40064 | mem, |
| 31084 | 40065 | }; |
| 31085 | 40066 | const Adjust = packed struct(u8) { |
| 31086 | | factor: i2, |
| 31087 | | scale: Memory.Scale, |
| 31088 | | amount: enum(u4) { |
| 40067 | sign: enum(u1) { neg, pos }, |
| 40068 | lhs: enum(u4) { |
| 31089 | 40069 | none, |
| 31090 | 40070 | ptr_size, |
| 31091 | 40071 | ptr_bit_size, |
| 31092 | 40072 | size, |
| 40073 | size_sub_elem_size, |
| 31093 | 40074 | src0_unaligned_size, |
| 31094 | 40075 | bit_size, |
| 31095 | 40076 | src0_bit_size, |
| ... | ... | @@ -31102,35 +40083,41 @@ const Select = struct { |
| 31102 | 40083 | smax, |
| 31103 | 40084 | umax, |
| 31104 | 40085 | }, |
| 31105 | | |
| 31106 | | const none: Adjust = .{ .factor = 0, .scale = .@"1", .amount = .none }; |
| 31107 | | const sub_ptr_size: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .ptr_size }; |
| 31108 | | const add_ptr_bit_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .ptr_bit_size }; |
| 31109 | | const add_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .size }; |
| 31110 | | const sub_size: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .size }; |
| 31111 | | const add_src0_unaligned_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .src0_unaligned_size }; |
| 31112 | | const sub_src0_unaligned_size: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .src0_unaligned_size }; |
| 31113 | | const add_2_bit_size: Adjust = .{ .factor = 1, .scale = .@"2", .amount = .bit_size }; |
| 31114 | | const add_bit_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .bit_size }; |
| 31115 | | const sub_bit_size: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .bit_size }; |
| 31116 | | const add_src0_bit_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .src0_bit_size }; |
| 31117 | | const sub_src0_bit_size: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .src0_bit_size }; |
| 31118 | | const add_8_len: Adjust = .{ .factor = 1, .scale = .@"8", .amount = .len }; |
| 31119 | | const add_4_len: Adjust = .{ .factor = 1, .scale = .@"4", .amount = .len }; |
| 31120 | | const add_3_len: Adjust = .{ .factor = 1, .scale = .@"3", .amount = .len }; |
| 31121 | | const add_2_len: Adjust = .{ .factor = 1, .scale = .@"2", .amount = .len }; |
| 31122 | | const add_len: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .len }; |
| 31123 | | const sub_len: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .len }; |
| 31124 | | const add_src0_elem_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .src0_elem_size }; |
| 31125 | | const add_2_src0_elem_size: Adjust = .{ .factor = 1, .scale = .@"2", .amount = .src0_elem_size }; |
| 31126 | | const add_4_src0_elem_size: Adjust = .{ .factor = 1, .scale = .@"4", .amount = .src0_elem_size }; |
| 31127 | | const add_8_src0_elem_size: Adjust = .{ .factor = 1, .scale = .@"8", .amount = .src0_elem_size }; |
| 31128 | | const sub_src0_elem_size: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .src0_elem_size }; |
| 31129 | | const add_src0_elem_size_times_src1: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .src0_elem_size_times_src1 }; |
| 31130 | | const sub_src0_elem_size_times_src1: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .src0_elem_size_times_src1 }; |
| 31131 | | const add_log2_src0_elem_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .log2_src0_elem_size }; |
| 31132 | | const add_elem_limbs: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .elem_limbs }; |
| 31133 | | const add_umax: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .umax }; |
| 40086 | op: enum(u1) { mul, div }, |
| 40087 | rhs: Memory.Scale, |
| 40088 | |
| 40089 | const none: Adjust = .{ .sign = .pos, .lhs = .none, .op = .mul, .rhs = .@"1" }; |
| 40090 | const sub_ptr_size: Adjust = .{ .sign = .neg, .lhs = .ptr_size, .op = .mul, .rhs = .@"1" }; |
| 40091 | const add_ptr_bit_size: Adjust = .{ .sign = .pos, .lhs = .ptr_bit_size, .op = .mul, .rhs = .@"1" }; |
| 40092 | const add_size: Adjust = .{ .sign = .pos, .lhs = .size, .op = .mul, .rhs = .@"1" }; |
| 40093 | const add_size_div_8: Adjust = .{ .sign = .pos, .lhs = .size, .op = .div, .rhs = .@"8" }; |
| 40094 | const sub_size_div_8: Adjust = .{ .sign = .neg, .lhs = .size, .op = .div, .rhs = .@"8" }; |
| 40095 | const sub_size: Adjust = .{ .sign = .neg, .lhs = .size, .op = .mul, .rhs = .@"1" }; |
| 40096 | const add_size_sub_elem_size: Adjust = .{ .sign = .pos, .lhs = .size_sub_elem_size, .op = .mul, .rhs = .@"1" }; |
| 40097 | const add_src0_unaligned_size: Adjust = .{ .sign = .pos, .lhs = .src0_unaligned_size, .op = .mul, .rhs = .@"1" }; |
| 40098 | const sub_src0_unaligned_size: Adjust = .{ .sign = .neg, .lhs = .src0_unaligned_size, .op = .mul, .rhs = .@"1" }; |
| 40099 | const add_2_bit_size: Adjust = .{ .sign = .pos, .lhs = .bit_size, .op = .mul, .rhs = .@"2" }; |
| 40100 | const add_bit_size: Adjust = .{ .sign = .pos, .lhs = .bit_size, .op = .mul, .rhs = .@"1" }; |
| 40101 | const sub_bit_size: Adjust = .{ .sign = .neg, .lhs = .bit_size, .op = .mul, .rhs = .@"1" }; |
| 40102 | const add_src0_bit_size: Adjust = .{ .sign = .pos, .lhs = .src0_bit_size, .op = .mul, .rhs = .@"1" }; |
| 40103 | const sub_src0_bit_size: Adjust = .{ .sign = .neg, .lhs = .src0_bit_size, .op = .mul, .rhs = .@"1" }; |
| 40104 | const add_8_len: Adjust = .{ .sign = .pos, .lhs = .len, .op = .mul, .rhs = .@"8" }; |
| 40105 | const add_4_len: Adjust = .{ .sign = .pos, .lhs = .len, .op = .mul, .rhs = .@"4" }; |
| 40106 | const add_3_len: Adjust = .{ .sign = .pos, .lhs = .len, .op = .mul, .rhs = .@"3" }; |
| 40107 | const add_2_len: Adjust = .{ .sign = .pos, .lhs = .len, .op = .mul, .rhs = .@"2" }; |
| 40108 | const add_len: Adjust = .{ .sign = .pos, .lhs = .len, .op = .mul, .rhs = .@"1" }; |
| 40109 | const sub_len: Adjust = .{ .sign = .neg, .lhs = .len, .op = .mul, .rhs = .@"1" }; |
| 40110 | const add_src0_elem_size: Adjust = .{ .sign = .pos, .lhs = .src0_elem_size, .op = .mul, .rhs = .@"1" }; |
| 40111 | const add_2_src0_elem_size: Adjust = .{ .sign = .pos, .lhs = .src0_elem_size, .op = .mul, .rhs = .@"2" }; |
| 40112 | const add_4_src0_elem_size: Adjust = .{ .sign = .pos, .lhs = .src0_elem_size, .op = .mul, .rhs = .@"4" }; |
| 40113 | const add_8_src0_elem_size: Adjust = .{ .sign = .pos, .lhs = .src0_elem_size, .op = .mul, .rhs = .@"8" }; |
| 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 | 40122 | const Ref = enum(u4) { |
| 31136 | 40123 | tmp0, |
| ... | ... | @@ -31139,6 +40126,9 @@ const Select = struct { |
| 31139 | 40126 | tmp3, |
| 31140 | 40127 | tmp4, |
| 31141 | 40128 | tmp5, |
| 40129 | tmp6, |
| 40130 | tmp7, |
| 40131 | tmp8, |
| 31142 | 40132 | dst0, |
| 31143 | 40133 | src0, |
| 31144 | 40134 | src1, |
| ... | ... | @@ -31210,6 +40200,36 @@ const Select = struct { |
| 31210 | 40200 | const tmp5x: Sized = .{ .ref = .tmp5, .size = .xword }; |
| 31211 | 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 | 40233 | const dst0: Sized = .{ .ref = .dst0, .size = .none }; |
| 31214 | 40234 | const dst0b: Sized = .{ .ref = .dst0, .size = .byte }; |
| 31215 | 40235 | const dst0w: Sized = .{ .ref = .dst0, .size = .word }; |
| ... | ... | @@ -31307,6 +40327,33 @@ const Select = struct { |
| 31307 | 40327 | const tmp5x: Select.Operand = .{ .tag = .ref, .base = .tmp5x }; |
| 31308 | 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 | 40357 | const dst0b: Select.Operand = .{ .tag = .ref, .base = .dst0b }; |
| 31311 | 40358 | const dst0w: Select.Operand = .{ .tag = .ref, .base = .dst0w }; |
| 31312 | 40359 | const dst0d: Select.Operand = .{ .tag = .ref, .base = .dst0d }; |
| ... | ... | @@ -31518,11 +40565,15 @@ const Select = struct { |
| 31518 | 40565 | const UnsignedImm = @Type(.{ |
| 31519 | 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 | 40569 | .none => 0, |
| 31523 | 40570 | .ptr_size => @divExact(s.cg.target.ptrBitWidth(), 8), |
| 31524 | 40571 | .ptr_bit_size => s.cg.target.ptrBitWidth(), |
| 31525 | 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 | 40577 | .src0_unaligned_size => @intCast(s.cg.unalignedSize(Select.Operand.Ref.src0.deref(s).typeOf(s.cg))), |
| 31527 | 40578 | .bit_size => @intCast(op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu)), |
| 31528 | 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 | 40595 | .umax => @bitCast(@as(UnsignedImm, std.math.maxInt(UnsignedImm)) >> @truncate( |
| 31545 | 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 | 40614 | fn lower(op: Select.Operand, s: *Select) !CodeGen.Operand { |
| ... | ... | @@ -31566,6 +40630,7 @@ const Select = struct { |
| 31566 | 40630 | } }, |
| 31567 | 40631 | else => |mcv| .{ .mem = try mcv.mem(s.cg, .{ .size = op.base.size }) }, |
| 31568 | 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 | 40635 | .simm => .{ .imm = .s(op.adjustedImm(i32, s)) }, |
| 31571 | 40636 | .uimm => .{ .imm = .u(@bitCast(op.adjustedImm(i64, s))) }, |
| ... | ... | @@ -31601,6 +40666,7 @@ fn select( |
| 31601 | 40666 | src_temps: []Temp, |
| 31602 | 40667 | cases: []const Select.Case, |
| 31603 | 40668 | ) !void { |
| 40669 | @setEvalBranchQuota(33_600); |
| 31604 | 40670 | cases: for (cases) |case| { |
| 31605 | 40671 | for (case.required_features) |required_feature| if (required_feature) |feature| if (!cg.hasFeature(feature)) continue :cases; |
| 31606 | 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 | 40679 | for (pattern.src[0..src_temps.len], src_temps) |src_pattern, src_temp| if (!src_pattern.matches(src_temp, cg)) continue :patterns; |
| 31614 | 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 | 40692 | var s: Select = .{ |
| 31617 | 40693 | .cg = cg, |
| 31618 | 40694 | .temps = undefined, |
| ... | ... | @@ -31623,15 +40699,32 @@ fn select( |
| 31623 | 40699 | const dst_slots = s.temps[@intFromEnum(Select.Operand.Ref.dst0)..@intFromEnum(Select.Operand.Ref.src0)]; |
| 31624 | 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| { |
| 31627 | | const tracked_index: RegisterManager.TrackedIndex = @intCast(RegisterManager.indexOfKnownRegIntoTracked(.st6).? - i); |
| 31628 | | try cg.register_manager.getRegIndex(tracked_index, null); |
| 31629 | | _ = cg.register_manager.lockRegIndexAssumeUnused(tracked_index); |
| 40702 | caller_preserved: { |
| 40703 | const cc = switch (case.clobbers.caller_preserved) { |
| 40704 | .none => break :caller_preserved, |
| 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 | 40723 | @memcpy(src_slots[0..src_temps.len], src_temps); |
| 31633 | 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 | 40729 | while (true) for (pattern.src[0..src_temps.len], src_temps) |src_pattern, *src_temp| { |
| 31637 | 40730 | if (try src_pattern.convert(src_temp, cg)) break; |
| ... | ... | @@ -31642,7 +40735,7 @@ fn select( |
| 31642 | 40735 | if (case.clobbers.eflags) try cg.spillEflagsIfOccupied(); |
| 31643 | 40736 | |
| 31644 | 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 | 40739 | @memcpy(dst_slots[0..dst_temps.len], dst_temps); |
| 31647 | 40740 | |
| 31648 | 40741 | switch (case.each) { |
| ... | ... | @@ -31653,9 +40746,24 @@ fn select( |
| 31653 | 40746 | } |
| 31654 | 40747 | assert(s.top == 0); |
| 31655 | 40748 | |
| 31656 | | for (0..case.clobbers.st -| 1) |i| cg.register_manager.unlockReg(.{ |
| 31657 | | .tracked_index = @intCast(RegisterManager.indexOfKnownRegIntoTracked(.st6).? - i), |
| 31658 | | }); |
| 40749 | caller_preserved: { |
| 40750 | const cc = switch (case.clobbers.caller_preserved) { |
| 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 | 40767 | for (dst_temps, case.dst_temps[0..dst_temps.len]) |dst_temp, dst_kind| dst_kind.finish(dst_temp, &s); |
| 31660 | 40768 | for (case.extra_temps, tmp_slots) |spec, temp| if (spec.kind != .unused) try temp.die(cg); |
| 31661 | 40769 | return; |