| ... | @@ -2669,7 +2669,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2669,7 +2669,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2669 | .{ .src = .{ .to_mem, .to_mem } }, | 2669 | .{ .src = .{ .to_mem, .to_mem } }, |
| 2670 | }, | 2670 | }, |
| 2671 | .extra_temps = .{ | 2671 | .extra_temps = .{ |
| 2672 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 2672 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 2673 | .{ .kind = .{ .rc = .sse } }, | 2673 | .{ .kind = .{ .rc = .sse } }, |
| 2674 | .unused, | 2674 | .unused, |
| 2675 | .unused, | 2675 | .unused, |
| ... | @@ -2677,13 +2677,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2677,13 +2677,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2677 | .unused, | 2677 | .unused, |
| 2678 | }, | 2678 | }, |
| 2679 | .dst_temps = .{.mem}, | 2679 | .dst_temps = .{.mem}, |
| 2680 | .each = .{ .limb = .{ | 2680 | .each = .{ .once = &.{ |
| 2681 | .of = .src0y, | 2681 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 2682 | .body = &.{ | 2682 | .{ .@"0:", .v_dqu, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 2683 | .{ ._, .v_dqu, .mov, .tmp1y, .limb(.src0y), ._, ._ }, | 2683 | .{ ._, .vp_, mir_tag, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 2684 | .{ ._, .vp_, mir_tag, .tmp1y, .tmp1y, .limb(.src1y), ._ }, | 2684 | .{ ._, .v_dqu, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 2685 | .{ ._, .v_dqu, .mov, .limb(.dst0y), .tmp1y, ._, ._ }, | 2685 | .{ ._, ._, .add, .tmp0p, .i(32), ._, ._ }, |
| 2686 | }, | 2686 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 2687 | } }, | 2687 | } }, |
| 2688 | }, .{ | 2688 | }, .{ |
| 2689 | .required_features = .{ .avx, null }, | 2689 | .required_features = .{ .avx, null }, |
| ... | @@ -2691,7 +2691,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2691,7 +2691,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2691 | .{ .src = .{ .to_mem, .to_mem } }, | 2691 | .{ .src = .{ .to_mem, .to_mem } }, |
| 2692 | }, | 2692 | }, |
| 2693 | .extra_temps = .{ | 2693 | .extra_temps = .{ |
| 2694 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 2694 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 2695 | .{ .kind = .{ .rc = .sse } }, | 2695 | .{ .kind = .{ .rc = .sse } }, |
| 2696 | .unused, | 2696 | .unused, |
| 2697 | .unused, | 2697 | .unused, |
| ... | @@ -2699,13 +2699,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2699,13 +2699,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2699 | .unused, | 2699 | .unused, |
| 2700 | }, | 2700 | }, |
| 2701 | .dst_temps = .{.mem}, | 2701 | .dst_temps = .{.mem}, |
| 2702 | .each = .{ .limb = .{ | 2702 | .each = .{ .once = &.{ |
| 2703 | .of = .src0y, | 2703 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 2704 | .body = &.{ | 2704 | .{ .@"0:", .v_pd, .movu, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 2705 | .{ ._, .v_pd, .movu, .tmp1y, .limb(.src0y), ._, ._ }, | 2705 | .{ ._, .v_pd, mir_tag, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 2706 | .{ ._, .v_pd, mir_tag, .tmp1y, .tmp1y, .limb(.src1y), ._ }, | 2706 | .{ ._, .v_pd, .movu, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, |
| 2707 | .{ ._, .v_pd, .movu, .limb(.dst0y), .tmp1y, ._, ._ }, | 2707 | .{ ._, ._, .add, .tmp0p, .i(32), ._, ._ }, |
| 2708 | }, | 2708 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 2709 | } }, | 2709 | } }, |
| 2710 | }, .{ | 2710 | }, .{ |
| 2711 | .required_features = .{ .avx, null }, | 2711 | .required_features = .{ .avx, null }, |
| ... | @@ -2713,7 +2713,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2713,7 +2713,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2713 | .{ .src = .{ .to_mem, .to_mem } }, | 2713 | .{ .src = .{ .to_mem, .to_mem } }, |
| 2714 | }, | 2714 | }, |
| 2715 | .extra_temps = .{ | 2715 | .extra_temps = .{ |
| 2716 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 2716 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 2717 | .{ .kind = .{ .rc = .sse } }, | 2717 | .{ .kind = .{ .rc = .sse } }, |
| 2718 | .unused, | 2718 | .unused, |
| 2719 | .unused, | 2719 | .unused, |
| ... | @@ -2721,13 +2721,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2721,13 +2721,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2721 | .unused, | 2721 | .unused, |
| 2722 | }, | 2722 | }, |
| 2723 | .dst_temps = .{.mem}, | 2723 | .dst_temps = .{.mem}, |
| 2724 | .each = .{ .limb = .{ | 2724 | .each = .{ .once = &.{ |
| 2725 | .of = .src0x, | 2725 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 2726 | .body = &.{ | 2726 | .{ .@"0:", .v_dqu, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 2727 | .{ ._, .v_dqu, .mov, .tmp1x, .limb(.src0x), ._, ._ }, | 2727 | .{ ._, .vp_, mir_tag, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 2728 | .{ ._, .vp_, mir_tag, .tmp1x, .tmp1x, .limb(.src1x), ._ }, | 2728 | .{ ._, .v_dqu, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 2729 | .{ ._, .v_dqu, .mov, .limb(.dst0x), .tmp1x, ._, ._ }, | 2729 | .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ }, |
| 2730 | }, | 2730 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 2731 | } }, | 2731 | } }, |
| 2732 | }, .{ | 2732 | }, .{ |
| 2733 | .required_features = .{ .sse2, null }, | 2733 | .required_features = .{ .sse2, null }, |
| ... | @@ -2735,7 +2735,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2735,7 +2735,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2735 | .{ .src = .{ .to_mem, .to_mem } }, | 2735 | .{ .src = .{ .to_mem, .to_mem } }, |
| 2736 | }, | 2736 | }, |
| 2737 | .extra_temps = .{ | 2737 | .extra_temps = .{ |
| 2738 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 2738 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 2739 | .{ .kind = .{ .rc = .sse } }, | 2739 | .{ .kind = .{ .rc = .sse } }, |
| 2740 | .unused, | 2740 | .unused, |
| 2741 | .unused, | 2741 | .unused, |
| ... | @@ -2743,13 +2743,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2743,13 +2743,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2743 | .unused, | 2743 | .unused, |
| 2744 | }, | 2744 | }, |
| 2745 | .dst_temps = .{.mem}, | 2745 | .dst_temps = .{.mem}, |
| 2746 | .each = .{ .limb = .{ | 2746 | .each = .{ .once = &.{ |
| 2747 | .of = .src0x, | 2747 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 2748 | .body = &.{ | 2748 | .{ .@"0:", ._dqu, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 2749 | .{ ._, ._dqu, .mov, .tmp1x, .limb(.src0x), ._, ._ }, | 2749 | .{ ._, .p_, mir_tag, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 2750 | .{ ._, .p_, mir_tag, .tmp1x, .limb(.src1x), ._, ._ }, | 2750 | .{ ._, ._dqu, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 2751 | .{ ._, ._dqu, .mov, .limb(.dst0x), .tmp1x, ._, ._ }, | 2751 | .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ }, |
| 2752 | }, | 2752 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 2753 | } }, | 2753 | } }, |
| 2754 | }, .{ | 2754 | }, .{ |
| 2755 | .required_features = .{ .sse, null }, | 2755 | .required_features = .{ .sse, null }, |
| ... | @@ -2757,7 +2757,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2757,7 +2757,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2757 | .{ .src = .{ .to_mem, .to_mem } }, | 2757 | .{ .src = .{ .to_mem, .to_mem } }, |
| 2758 | }, | 2758 | }, |
| 2759 | .extra_temps = .{ | 2759 | .extra_temps = .{ |
| 2760 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 2760 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 2761 | .{ .kind = .{ .rc = .sse } }, | 2761 | .{ .kind = .{ .rc = .sse } }, |
| 2762 | .unused, | 2762 | .unused, |
| 2763 | .unused, | 2763 | .unused, |
| ... | @@ -2765,13 +2765,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2765,13 +2765,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2765 | .unused, | 2765 | .unused, |
| 2766 | }, | 2766 | }, |
| 2767 | .dst_temps = .{.mem}, | 2767 | .dst_temps = .{.mem}, |
| 2768 | .each = .{ .limb = .{ | 2768 | .each = .{ .once = &.{ |
| 2769 | .of = .src0x, | 2769 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 2770 | .body = &.{ | 2770 | .{ .@"0:", ._ps, .movu, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 2771 | .{ ._, ._ps, .movu, .tmp1x, .limb(.src0x), ._, ._ }, | 2771 | .{ ._, ._ps, mir_tag, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 2772 | .{ ._, ._ps, mir_tag, .tmp1x, .limb(.src1x), ._, ._ }, | 2772 | .{ ._, ._ps, .movu, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, |
| 2773 | .{ ._, ._ps, .movu, .limb(.dst0x), .tmp1x, ._, ._ }, | 2773 | .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ }, |
| 2774 | }, | 2774 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 2775 | } }, | 2775 | } }, |
| 2776 | }, .{ | 2776 | }, .{ |
| 2777 | .required_features = .{ .mmx, null }, | 2777 | .required_features = .{ .mmx, null }, |
| ... | @@ -2779,7 +2779,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2779,7 +2779,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2779 | .{ .src = .{ .to_mem, .to_mem } }, | 2779 | .{ .src = .{ .to_mem, .to_mem } }, |
| 2780 | }, | 2780 | }, |
| 2781 | .extra_temps = .{ | 2781 | .extra_temps = .{ |
| 2782 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 2782 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 2783 | .{ .kind = .{ .rc = .mmx } }, | 2783 | .{ .kind = .{ .rc = .mmx } }, |
| 2784 | .unused, | 2784 | .unused, |
| 2785 | .unused, | 2785 | .unused, |
| ... | @@ -2787,20 +2787,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2787,20 +2787,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2787 | .unused, | 2787 | .unused, |
| 2788 | }, | 2788 | }, |
| 2789 | .dst_temps = .{.mem}, | 2789 | .dst_temps = .{.mem}, |
| 2790 | .each = .{ .limb = .{ | 2790 | .each = .{ .once = &.{ |
| 2791 | .of = .src0q, | 2791 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 2792 | .body = &.{ | 2792 | .{ .@"0:", ._q, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 2793 | .{ ._, ._q, .mov, .tmp1q, .limb(.src0q), ._, ._ }, | 2793 | .{ ._, .p_, mir_tag, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 2794 | .{ ._, .p_, mir_tag, .tmp1q, .limb(.src1q), ._, ._ }, | 2794 | .{ ._, ._q, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| 2795 | .{ ._, ._q, .mov, .limb(.dst0q), .tmp1q, ._, ._ }, | 2795 | .{ ._, ._, .add, .tmp0p, .i(8), ._, ._ }, |
| 2796 | }, | 2796 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 2797 | } }, | 2797 | } }, |
| 2798 | }, .{ | 2798 | }, .{ |
| 2799 | .patterns = &.{ | 2799 | .patterns = &.{ |
| 2800 | .{ .src = .{ .to_mem, .to_mem } }, | 2800 | .{ .src = .{ .to_mem, .to_mem } }, |
| 2801 | }, | 2801 | }, |
| 2802 | .extra_temps = .{ | 2802 | .extra_temps = .{ |
| 2803 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 2803 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 2804 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 2804 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 2805 | .unused, | 2805 | .unused, |
| 2806 | .unused, | 2806 | .unused, |
| ... | @@ -2808,13 +2808,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2808,13 +2808,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2808 | .unused, | 2808 | .unused, |
| 2809 | }, | 2809 | }, |
| 2810 | .dst_temps = .{.mem}, | 2810 | .dst_temps = .{.mem}, |
| 2811 | .each = .{ .limb = .{ | 2811 | .each = .{ .once = &.{ |
| 2812 | .of = .src0p, | 2812 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 2813 | .body = &.{ | 2813 | .{ .@"0:", ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ }, |
| 2814 | .{ ._, ._, .mov, .tmp1p, .limb(.src0p), ._, ._ }, | 2814 | .{ ._, ._, mir_tag, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ }, |
| 2815 | .{ ._, ._, mir_tag, .tmp1p, .limb(.src1p), ._, ._ }, | 2815 | .{ ._, ._, .mov, .memia(.dst0p, .tmp0, .add_size), .tmp1p, ._, ._ }, |
| 2816 | .{ ._, ._, .mov, .limb(.dst0p), .tmp1p, ._, ._ }, | 2816 | .{ ._, ._, .add, .tmp0p, .a(.tmp1, .add_size), ._, ._ }, |
| 2817 | }, | 2817 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 2818 | } }, | 2818 | } }, |
| 2819 | } }, | 2819 | } }, |
| 2820 | }) catch |err2| switch (err2) { | 2820 | }) catch |err2| switch (err2) { |
| ... | @@ -3306,7 +3306,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3306,7 +3306,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3306 | }, | 3306 | }, |
| 3307 | .clobbers = .{ .eflags = true }, | 3307 | .clobbers = .{ .eflags = true }, |
| 3308 | .extra_temps = .{ | 3308 | .extra_temps = .{ |
| 3309 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3309 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3310 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3310 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 3311 | .unused, | 3311 | .unused, |
| 3312 | .unused, | 3312 | .unused, |
| ... | @@ -3341,32 +3341,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3341,32 +3341,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3341 | .{ .src = .{ .to_mem, .to_mem } }, | 3341 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3342 | }, | 3342 | }, |
| 3343 | .extra_temps = .{ | 3343 | .extra_temps = .{ |
| 3344 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3344 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3345 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3345 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 3346 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 3346 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 3347 | .{ .kind = .{ .rc = .sse } }, | 3347 | .{ .kind = .{ .rc = .sse } }, |
| 3348 | .unused, | 3348 | .unused, |
| 3349 | .unused, | 3349 | .unused, |
| 3350 | }, | 3350 | }, |
| 3351 | .dst_temps = .{.mem}, | 3351 | .dst_temps = .{.mem}, |
| 3352 | .each = .{ .limb_and_mask_limb = .{ | 3352 | .each = .{ .once = switch (cc) { |
| 3353 | .of = .src0y, | 3353 | else => unreachable, |
| 3354 | .of_mask = .dst0b, | 3354 | .e => &.{ |
| 3355 | .body = switch (cc) { | 3355 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 3356 | else => unreachable, | 3356 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 3357 | .e => &.{ | 3357 | .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 3358 | .{ ._, .v_dqu, .mov, .tmp3y, .limb(.src0y), ._, ._ }, | 3358 | .{ ._, .vp_b, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 3359 | .{ ._, .vp_b, .cmpeq, .tmp3y, .tmp3y, .limb(.src1y), ._ }, | 3359 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, |
| 3360 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, | 3360 | .{ ._, ._, .mov, .memi(.dst0d, .tmp1), .tmp2d, ._, ._ }, |
| 3361 | .{ ._, ._, .mov, .maskLimb(.dst0d), .tmp2d, ._, ._ }, | 3361 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| 3362 | }, | 3362 | .{ ._, ._, .add, .tmp0p, .i(32), ._, ._ }, |
| 3363 | .ne => &.{ | 3363 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3364 | .{ ._, .v_dqu, .mov, .tmp3y, .limb(.src0y), ._, ._ }, | 3364 | }, |
| 3365 | .{ ._, .vp_b, .cmpeq, .tmp3y, .tmp3y, .limb(.src1y), ._ }, | 3365 | .ne => &.{ |
| 3366 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, | 3366 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 3367 | .{ ._, ._, .not, .tmp2d, ._, ._, ._ }, | 3367 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 3368 | .{ ._, ._, .mov, .maskLimb(.dst0d), .tmp2d, ._, ._ }, | 3368 | .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 3369 | }, | 3369 | .{ ._, .vp_b, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| | 3370 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, |
| | 3371 | .{ ._, ._, .not, .tmp2d, ._, ._, ._ }, |
| | 3372 | .{ ._, ._, .mov, .memi(.dst0d, .tmp1), .tmp2d, ._, ._ }, |
| | 3373 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| | 3374 | .{ ._, ._, .add, .tmp0p, .i(32), ._, ._ }, |
| | 3375 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3370 | }, | 3376 | }, |
| 3371 | } }, | 3377 | } }, |
| 3372 | }, .{ | 3378 | }, .{ |
| ... | @@ -3376,34 +3382,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3376,34 +3382,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3376 | .{ .src = .{ .to_mem, .to_mem } }, | 3382 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3377 | }, | 3383 | }, |
| 3378 | .extra_temps = .{ | 3384 | .extra_temps = .{ |
| 3379 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3385 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3380 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3386 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 3381 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, | 3387 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| 3382 | .{ .kind = .{ .rc = .sse } }, | 3388 | .{ .kind = .{ .rc = .sse } }, |
| 3383 | .unused, | 3389 | .unused, |
| 3384 | .unused, | 3390 | .unused, |
| 3385 | }, | 3391 | }, |
| 3386 | .dst_temps = .{.mem}, | 3392 | .dst_temps = .{.mem}, |
| 3387 | .each = .{ .limb_and_mask_limb = .{ | 3393 | .each = .{ .once = switch (cc) { |
| 3388 | .of = .src0y, | 3394 | else => unreachable, |
| 3389 | .of_mask = .dst0w, | 3395 | .e => &.{ |
| 3390 | .body = switch (cc) { | 3396 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 3391 | else => unreachable, | 3397 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 3392 | .e => &.{ | 3398 | .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 3393 | .{ ._, .v_dqu, .mov, .tmp3y, .limb(.src0y), ._, ._ }, | 3399 | .{ ._, .vp_w, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 3394 | .{ ._, .vp_w, .cmpeq, .tmp3y, .tmp3y, .limb(.src1y), ._ }, | 3400 | .{ ._, .vp_b, .ackssw, .tmp3y, .tmp3y, .tmp3y, ._ }, |
| 3395 | .{ ._, .vp_b, .ackssw, .tmp3y, .tmp3y, .tmp3y, ._ }, | 3401 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, |
| 3396 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, | 3402 | .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, |
| 3397 | .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2w, ._, ._ }, | 3403 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| 3398 | }, | 3404 | .{ ._, ._, .add, .tmp0p, .i(32), ._, ._ }, |
| 3399 | .ne => &.{ | 3405 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3400 | .{ ._, .v_dqu, .mov, .tmp3y, .limb(.src0y), ._, ._ }, | 3406 | }, |
| 3401 | .{ ._, .vp_w, .cmpeq, .tmp3y, .tmp3y, .limb(.src1y), ._ }, | 3407 | .ne => &.{ |
| 3402 | .{ ._, .vp_b, .ackssw, .tmp3y, .tmp3y, .tmp3y, ._ }, | 3408 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 3403 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, | 3409 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 3404 | .{ ._, ._, .not, .tmp2w, ._, ._, ._ }, | 3410 | .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 3405 | .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2w, ._, ._ }, | 3411 | .{ ._, .vp_w, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 3406 | }, | 3412 | .{ ._, .vp_b, .ackssw, .tmp3y, .tmp3y, .tmp3y, ._ }, |
| | 3413 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, |
| | 3414 | .{ ._, ._, .not, .tmp2d, ._, ._, ._ }, |
| | 3415 | .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, |
| | 3416 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| | 3417 | .{ ._, ._, .add, .tmp0p, .i(32), ._, ._ }, |
| | 3418 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3407 | }, | 3419 | }, |
| 3408 | } }, | 3420 | } }, |
| 3409 | }, .{ | 3421 | }, .{ |
| ... | @@ -3413,32 +3425,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3413,32 +3425,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3413 | .{ .src = .{ .to_mem, .to_mem } }, | 3425 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3414 | }, | 3426 | }, |
| 3415 | .extra_temps = .{ | 3427 | .extra_temps = .{ |
| 3416 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3428 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3417 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3429 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 3418 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 3430 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 3419 | .{ .kind = .{ .rc = .sse } }, | 3431 | .{ .kind = .{ .rc = .sse } }, |
| 3420 | .unused, | 3432 | .unused, |
| 3421 | .unused, | 3433 | .unused, |
| 3422 | }, | 3434 | }, |
| 3423 | .dst_temps = .{.mem}, | 3435 | .dst_temps = .{.mem}, |
| 3424 | .each = .{ .limb_and_mask_limb = .{ | 3436 | .each = .{ .once = switch (cc) { |
| 3425 | .of = .src0y, | 3437 | else => unreachable, |
| 3426 | .of_mask = .dst0d, | 3438 | .e => &.{ |
| 3427 | .body = switch (cc) { | 3439 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 3428 | else => unreachable, | 3440 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 3429 | .e => &.{ | 3441 | .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 3430 | .{ ._, .v_dqu, .mov, .tmp3y, .limb(.src0y), ._, ._ }, | 3442 | .{ ._, .vp_d, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 3431 | .{ ._, .vp_d, .cmpeq, .tmp3y, .tmp3y, .limb(.src1y), ._ }, | 3443 | .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ }, |
| 3432 | .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ }, | 3444 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, |
| 3433 | .{ ._, ._, .mov, .maskLimb(.dst0b), .tmp2b, ._, ._ }, | 3445 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| 3434 | }, | 3446 | .{ ._, ._, .add, .tmp0p, .i(32), ._, ._ }, |
| 3435 | .ne => &.{ | 3447 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3436 | .{ ._, .v_dqu, .mov, .tmp3y, .limb(.src0y), ._, ._ }, | 3448 | }, |
| 3437 | .{ ._, .vp_d, .cmpeq, .tmp3y, .tmp3y, .limb(.src1y), ._ }, | 3449 | .ne => &.{ |
| 3438 | .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ }, | 3450 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 3439 | .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, | 3451 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 3440 | .{ ._, ._, .mov, .maskLimb(.dst0b), .tmp2b, ._, ._ }, | 3452 | .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 3441 | }, | 3453 | .{ ._, .vp_d, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| | 3454 | .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ }, |
| | 3455 | .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, |
| | 3456 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, |
| | 3457 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| | 3458 | .{ ._, ._, .add, .tmp0p, .i(32), ._, ._ }, |
| | 3459 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3442 | }, | 3460 | }, |
| 3443 | } }, | 3461 | } }, |
| 3444 | }, .{ | 3462 | }, .{ |
| ... | @@ -3448,34 +3466,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3448,34 +3466,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3448 | .{ .src = .{ .to_mem, .to_mem } }, | 3466 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3449 | }, | 3467 | }, |
| 3450 | .extra_temps = .{ | 3468 | .extra_temps = .{ |
| 3451 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3469 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3452 | .{ .type = .usize, .kind = .{ .reg = .rcx } }, | 3470 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| 3453 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3471 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 3454 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3472 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 3455 | .{ .kind = .{ .rc = .sse } }, | 3473 | .{ .kind = .{ .rc = .sse } }, |
| 3456 | .unused, | 3474 | .unused, |
| 3457 | }, | 3475 | }, |
| 3458 | .dst_temps = .{.mem}, | 3476 | .dst_temps = .{.mem}, |
| 3459 | .each = .{ .limb_and_mask_limb = .{ | 3477 | .each = .{ .once = switch (cc) { |
| 3460 | .of = .src0y, | 3478 | else => unreachable, |
| 3461 | .of_mask = .dst0q, | 3479 | .e => &.{ |
| 3462 | .body = switch (cc) { | 3480 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 3463 | else => unreachable, | 3481 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 3464 | .e => &.{ | 3482 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 3465 | .{ ._, .v_dqu, .mov, .tmp4y, .limb(.src0y), ._, ._ }, | 3483 | .{ .@"0:", .v_dqu, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 3466 | .{ ._, .vp_q, .cmpeq, .tmp4y, .tmp4y, .limb(.src1y), ._ }, | 3484 | .{ ._, .vp_q, .cmpeq, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 3467 | .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4y, ._, ._ }, | 3485 | .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4y, ._, ._ }, |
| 3468 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | 3486 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| 3469 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | 3487 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| 3470 | }, | 3488 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| 3471 | .ne => &.{ | 3489 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| 3472 | .{ ._, .v_dqu, .mov, .tmp4y, .limb(.src0y), ._, ._ }, | 3490 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 3473 | .{ ._, .vp_q, .cmpeq, .tmp4y, .tmp4y, .limb(.src1y), ._ }, | 3491 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| 3474 | .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4y, ._, ._ }, | 3492 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| 3475 | .{ ._, ._, .xor, .tmp3b, .i(0b1111), ._, ._ }, | 3493 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| 3476 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | 3494 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 3477 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | 3495 | .{ .@"1:", ._, .add, .tmp0p, .i(32), ._, ._ }, |
| 3478 | }, | 3496 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 3497 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| | 3498 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 3499 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 3500 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| | 3501 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| | 3502 | }, |
| | 3503 | .ne => &.{ |
| | 3504 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| | 3505 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 3506 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 3507 | .{ .@"0:", .v_dqu, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| | 3508 | .{ ._, .vp_q, .cmpeq, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| | 3509 | .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4y, ._, ._ }, |
| | 3510 | .{ ._, ._, .xor, .tmp3b, .i(0b1111), ._, ._ }, |
| | 3511 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| | 3512 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| | 3513 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| | 3514 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| | 3515 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 3516 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 3517 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| | 3518 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| | 3519 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 3520 | .{ .@"1:", ._, .add, .tmp0p, .i(32), ._, ._ }, |
| | 3521 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 3522 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| | 3523 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 3524 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 3525 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| | 3526 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| 3479 | }, | 3527 | }, |
| 3480 | } }, | 3528 | } }, |
| 3481 | }, .{ | 3529 | }, .{ |
| ... | @@ -3485,32 +3533,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3485,32 +3533,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3485 | .{ .src = .{ .to_mem, .to_mem } }, | 3533 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3486 | }, | 3534 | }, |
| 3487 | .extra_temps = .{ | 3535 | .extra_temps = .{ |
| 3488 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3536 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3489 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3537 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 3490 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, | 3538 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| 3491 | .{ .kind = .{ .rc = .sse } }, | 3539 | .{ .kind = .{ .rc = .sse } }, |
| 3492 | .unused, | 3540 | .unused, |
| 3493 | .unused, | 3541 | .unused, |
| 3494 | }, | 3542 | }, |
| 3495 | .dst_temps = .{.mem}, | 3543 | .dst_temps = .{.mem}, |
| 3496 | .each = .{ .limb_and_mask_limb = .{ | 3544 | .each = .{ .once = switch (cc) { |
| 3497 | .of = .src0x, | 3545 | else => unreachable, |
| 3498 | .of_mask = .dst0b, | 3546 | .e => &.{ |
| 3499 | .body = switch (cc) { | 3547 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 3500 | else => unreachable, | 3548 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 3501 | .e => &.{ | 3549 | .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3502 | .{ ._, .v_dqu, .mov, .tmp3x, .limb(.src0x), ._, ._ }, | 3550 | .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 3503 | .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .limb(.src1x), ._ }, | 3551 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, |
| 3504 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, | 3552 | .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, |
| 3505 | .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2w, ._, ._ }, | 3553 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| 3506 | }, | 3554 | .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ }, |
| 3507 | .ne => &.{ | 3555 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3508 | .{ ._, .v_dqu, .mov, .tmp3x, .limb(.src0x), ._, ._ }, | 3556 | }, |
| 3509 | .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .limb(.src1x), ._ }, | 3557 | .ne => &.{ |
| 3510 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, | 3558 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 3511 | .{ ._, ._, .not, .tmp2w, ._, ._, ._ }, | 3559 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 3512 | .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2w, ._, ._ }, | 3560 | .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3513 | }, | 3561 | .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 3562 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, |
| | 3563 | .{ ._, ._, .not, .tmp2d, ._, ._, ._ }, |
| | 3564 | .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, |
| | 3565 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| | 3566 | .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ }, |
| | 3567 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3514 | }, | 3568 | }, |
| 3515 | } }, | 3569 | } }, |
| 3516 | }, .{ | 3570 | }, .{ |
| ... | @@ -3520,34 +3574,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3520,34 +3574,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3520 | .{ .src = .{ .to_mem, .to_mem } }, | 3574 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3521 | }, | 3575 | }, |
| 3522 | .extra_temps = .{ | 3576 | .extra_temps = .{ |
| 3523 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3577 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3524 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3578 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 3525 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 3579 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 3526 | .{ .kind = .{ .rc = .sse } }, | 3580 | .{ .kind = .{ .rc = .sse } }, |
| 3527 | .unused, | 3581 | .unused, |
| 3528 | .unused, | 3582 | .unused, |
| 3529 | }, | 3583 | }, |
| 3530 | .dst_temps = .{.mem}, | 3584 | .dst_temps = .{.mem}, |
| 3531 | .each = .{ .limb_and_mask_limb = .{ | 3585 | .each = .{ .once = switch (cc) { |
| 3532 | .of = .src0x, | 3586 | else => unreachable, |
| 3533 | .of_mask = .dst0w, | 3587 | .e => &.{ |
| 3534 | .body = switch (cc) { | 3588 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 3535 | else => unreachable, | 3589 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 3536 | .e => &.{ | 3590 | .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3537 | .{ ._, .v_dqu, .mov, .tmp3x, .limb(.src0x), ._, ._ }, | 3591 | .{ ._, .vp_w, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 3538 | .{ ._, .vp_w, .cmpeq, .tmp3x, .tmp3x, .limb(.src1x), ._ }, | 3592 | .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ }, |
| 3539 | .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ }, | 3593 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, |
| 3540 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, | 3594 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, |
| 3541 | .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2b, ._, ._ }, | 3595 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| 3542 | }, | 3596 | .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ }, |
| 3543 | .ne => &.{ | 3597 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3544 | .{ ._, .v_dqu, .mov, .tmp3x, .limb(.src0x), ._, ._ }, | 3598 | }, |
| 3545 | .{ ._, .vp_w, .cmpeq, .tmp3x, .tmp3x, .limb(.src1x), ._ }, | 3599 | .ne => &.{ |
| 3546 | .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ }, | 3600 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 3547 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, | 3601 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 3548 | .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, | 3602 | .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3549 | .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2b, ._, ._ }, | 3603 | .{ ._, .vp_w, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 3550 | }, | 3604 | .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ }, |
| | 3605 | .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, |
| | 3606 | .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, |
| | 3607 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, |
| | 3608 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| | 3609 | .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ }, |
| | 3610 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3551 | }, | 3611 | }, |
| 3552 | } }, | 3612 | } }, |
| 3553 | }, .{ | 3613 | }, .{ |
| ... | @@ -3557,34 +3617,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3557,34 +3617,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3557 | .{ .src = .{ .to_mem, .to_mem } }, | 3617 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3558 | }, | 3618 | }, |
| 3559 | .extra_temps = .{ | 3619 | .extra_temps = .{ |
| 3560 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3620 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3561 | .{ .type = .usize, .kind = .{ .reg = .rcx } }, | 3621 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| 3562 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3622 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 3563 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3623 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 3564 | .{ .kind = .{ .rc = .sse } }, | 3624 | .{ .kind = .{ .rc = .sse } }, |
| 3565 | .unused, | 3625 | .unused, |
| 3566 | }, | 3626 | }, |
| 3567 | .dst_temps = .{.mem}, | 3627 | .dst_temps = .{.mem}, |
| 3568 | .each = .{ .limb_and_mask_limb = .{ | 3628 | .each = .{ .once = switch (cc) { |
| 3569 | .of = .src0x, | 3629 | else => unreachable, |
| 3570 | .of_mask = .dst0d, | 3630 | .e => &.{ |
| 3571 | .body = switch (cc) { | 3631 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 3572 | else => unreachable, | 3632 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 3573 | .e => &.{ | 3633 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 3574 | .{ ._, .v_dqu, .mov, .tmp4x, .limb(.src0x), ._, ._ }, | 3634 | .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3575 | .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .limb(.src1x), ._ }, | 3635 | .{ ._, .vp_d, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 3576 | .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ }, | 3636 | .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ }, |
| 3577 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | 3637 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| 3578 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | 3638 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| 3579 | }, | 3639 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| 3580 | .ne => &.{ | 3640 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| 3581 | .{ ._, .v_dqu, .mov, .tmp4x, .limb(.src0x), ._, ._ }, | 3641 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 3582 | .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .limb(.src1x), ._ }, | 3642 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| 3583 | .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ }, | 3643 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| 3584 | .{ ._, ._, .xor, .tmp3b, .i(0b1111), ._, ._ }, | 3644 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| 3585 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | 3645 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 3586 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | 3646 | .{ .@"1:", ._, .add, .tmp0p, .i(16), ._, ._ }, |
| 3587 | }, | 3647 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 3648 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| | 3649 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 3650 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 3651 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| | 3652 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| | 3653 | }, |
| | 3654 | .ne => &.{ |
| | 3655 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| | 3656 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 3657 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 3658 | .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 3659 | .{ ._, .vp_d, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 3660 | .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ }, |
| | 3661 | .{ ._, ._, .xor, .tmp3b, .i(0b1111), ._, ._ }, |
| | 3662 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| | 3663 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| | 3664 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| | 3665 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| | 3666 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 3667 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 3668 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| | 3669 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| | 3670 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 3671 | .{ .@"1:", ._, .add, .tmp0p, .i(16), ._, ._ }, |
| | 3672 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 3673 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| | 3674 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 3675 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 3676 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| | 3677 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| 3588 | }, | 3678 | }, |
| 3589 | } }, | 3679 | } }, |
| 3590 | }, .{ | 3680 | }, .{ |
| ... | @@ -3594,34 +3684,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3594,34 +3684,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3594 | .{ .src = .{ .to_mem, .to_mem } }, | 3684 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3595 | }, | 3685 | }, |
| 3596 | .extra_temps = .{ | 3686 | .extra_temps = .{ |
| 3597 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3687 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3598 | .{ .type = .usize, .kind = .{ .reg = .rcx } }, | 3688 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| 3599 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3689 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 3600 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3690 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 3601 | .{ .kind = .{ .rc = .sse } }, | 3691 | .{ .kind = .{ .rc = .sse } }, |
| 3602 | .unused, | 3692 | .unused, |
| 3603 | }, | 3693 | }, |
| 3604 | .dst_temps = .{.mem}, | 3694 | .dst_temps = .{.mem}, |
| 3605 | .each = .{ .limb_and_mask_limb = .{ | 3695 | .each = .{ .once = switch (cc) { |
| 3606 | .of = .src0x, | 3696 | else => unreachable, |
| 3607 | .of_mask = .dst0q, | 3697 | .e => &.{ |
| 3608 | .body = switch (cc) { | 3698 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 3609 | else => unreachable, | 3699 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 3610 | .e => &.{ | 3700 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 3611 | .{ ._, .v_dqu, .mov, .tmp4x, .limb(.src0x), ._, ._ }, | 3701 | .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3612 | .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .limb(.src1x), ._ }, | 3702 | .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 3613 | .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4x, ._, ._ }, | 3703 | .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4x, ._, ._ }, |
| 3614 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | 3704 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| 3615 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | 3705 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| 3616 | }, | 3706 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| 3617 | .ne => &.{ | 3707 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| 3618 | .{ ._, .v_dqu, .mov, .tmp4x, .limb(.src0x), ._, ._ }, | 3708 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 3619 | .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .limb(.src1x), ._ }, | 3709 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| 3620 | .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4x, ._, ._ }, | 3710 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| 3621 | .{ ._, ._, .xor, .tmp3b, .i(0b11), ._, ._ }, | 3711 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| 3622 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | 3712 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 3623 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | 3713 | .{ .@"1:", ._, .add, .tmp0p, .i(16), ._, ._ }, |
| 3624 | }, | 3714 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 3715 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| | 3716 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 3717 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 3718 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| | 3719 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| | 3720 | }, |
| | 3721 | .ne => &.{ |
| | 3722 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| | 3723 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 3724 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 3725 | .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 3726 | .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| | 3727 | .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4x, ._, ._ }, |
| | 3728 | .{ ._, ._, .xor, .tmp3b, .i(0b11), ._, ._ }, |
| | 3729 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| | 3730 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| | 3731 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| | 3732 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| | 3733 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 3734 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 3735 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| | 3736 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| | 3737 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 3738 | .{ .@"1:", ._, .add, .tmp0p, .i(16), ._, ._ }, |
| | 3739 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 3740 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| | 3741 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 3742 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 3743 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| | 3744 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| 3625 | }, | 3745 | }, |
| 3626 | } }, | 3746 | } }, |
| 3627 | }, .{ | 3747 | }, .{ |
| ... | @@ -3631,32 +3751,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3631,32 +3751,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3631 | .{ .src = .{ .to_mem, .to_mem } }, | 3751 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3632 | }, | 3752 | }, |
| 3633 | .extra_temps = .{ | 3753 | .extra_temps = .{ |
| 3634 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3754 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3635 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3755 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 3636 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, | 3756 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| 3637 | .{ .kind = .{ .rc = .sse } }, | 3757 | .{ .kind = .{ .rc = .sse } }, |
| 3638 | .unused, | 3758 | .unused, |
| 3639 | .unused, | 3759 | .unused, |
| 3640 | }, | 3760 | }, |
| 3641 | .dst_temps = .{.mem}, | 3761 | .dst_temps = .{.mem}, |
| 3642 | .each = .{ .limb_and_mask_limb = .{ | 3762 | .each = .{ .once = switch (cc) { |
| 3643 | .of = .src0x, | 3763 | else => unreachable, |
| 3644 | .of_mask = .dst0b, | 3764 | .e => &.{ |
| 3645 | .body = switch (cc) { | 3765 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 3646 | else => unreachable, | 3766 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 3647 | .e => &.{ | 3767 | .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3648 | .{ ._, ._dqu, .mov, .tmp3x, .limb(.src0x), ._, ._ }, | 3768 | .{ ._, .p_b, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 3649 | .{ ._, .p_b, .cmpeq, .tmp3x, .limb(.src1x), ._, ._ }, | 3769 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, |
| 3650 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, | 3770 | .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, |
| 3651 | .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2w, ._, ._ }, | 3771 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| 3652 | }, | 3772 | .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ }, |
| 3653 | .ne => &.{ | 3773 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3654 | .{ ._, ._dqu, .mov, .tmp3x, .limb(.src0x), ._, ._ }, | 3774 | }, |
| 3655 | .{ ._, .p_b, .cmpeq, .tmp3x, .limb(.src1x), ._, ._ }, | 3775 | .ne => &.{ |
| 3656 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, | 3776 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 3657 | .{ ._, ._, .not, .tmp2w, ._, ._, ._ }, | 3777 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 3658 | .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2w, ._, ._ }, | 3778 | .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3659 | }, | 3779 | .{ ._, .p_b, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 3780 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, |
| | 3781 | .{ ._, ._, .not, .tmp2d, ._, ._, ._ }, |
| | 3782 | .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, |
| | 3783 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| | 3784 | .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ }, |
| | 3785 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3660 | }, | 3786 | }, |
| 3661 | } }, | 3787 | } }, |
| 3662 | }, .{ | 3788 | }, .{ |
| ... | @@ -3666,34 +3792,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3666,34 +3792,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3666 | .{ .src = .{ .to_mem, .to_mem } }, | 3792 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3667 | }, | 3793 | }, |
| 3668 | .extra_temps = .{ | 3794 | .extra_temps = .{ |
| 3669 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3795 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3670 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3796 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 3671 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 3797 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 3672 | .{ .kind = .{ .rc = .sse } }, | 3798 | .{ .kind = .{ .rc = .sse } }, |
| 3673 | .unused, | 3799 | .unused, |
| 3674 | .unused, | 3800 | .unused, |
| 3675 | }, | 3801 | }, |
| 3676 | .dst_temps = .{.mem}, | 3802 | .dst_temps = .{.mem}, |
| 3677 | .each = .{ .limb_and_mask_limb = .{ | 3803 | .each = .{ .once = switch (cc) { |
| 3678 | .of = .src0x, | 3804 | else => unreachable, |
| 3679 | .of_mask = .dst0w, | 3805 | .e => &.{ |
| 3680 | .body = switch (cc) { | 3806 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 3681 | else => unreachable, | 3807 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 3682 | .e => &.{ | 3808 | .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3683 | .{ ._, ._dqu, .mov, .tmp3x, .limb(.src0x), ._, ._ }, | 3809 | .{ ._, .p_w, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 3684 | .{ ._, .p_w, .cmpeq, .tmp3x, .limb(.src1x), ._, ._ }, | 3810 | .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ }, |
| 3685 | .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ }, | 3811 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, |
| 3686 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, | 3812 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, |
| 3687 | .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2b, ._, ._ }, | 3813 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| 3688 | }, | 3814 | .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ }, |
| 3689 | .ne => &.{ | 3815 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3690 | .{ ._, ._dqu, .mov, .tmp3x, .limb(.src0x), ._, ._ }, | 3816 | }, |
| 3691 | .{ ._, .p_w, .cmpeq, .tmp3x, .limb(.src1x), ._, ._ }, | 3817 | .ne => &.{ |
| 3692 | .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ }, | 3818 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 3693 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, | 3819 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 3694 | .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, | 3820 | .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3695 | .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2b, ._, ._ }, | 3821 | .{ ._, .p_w, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 3696 | }, | 3822 | .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ }, |
| | 3823 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, |
| | 3824 | .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, |
| | 3825 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, |
| | 3826 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| | 3827 | .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ }, |
| | 3828 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3697 | }, | 3829 | }, |
| 3698 | } }, | 3830 | } }, |
| 3699 | }, .{ | 3831 | }, .{ |
| ... | @@ -3703,34 +3835,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3703,34 +3835,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3703 | .{ .src = .{ .to_mem, .to_mem } }, | 3835 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3704 | }, | 3836 | }, |
| 3705 | .extra_temps = .{ | 3837 | .extra_temps = .{ |
| 3706 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3838 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3707 | .{ .type = .usize, .kind = .{ .reg = .rcx } }, | 3839 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| 3708 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3840 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 3709 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3841 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 3710 | .{ .kind = .{ .rc = .sse } }, | 3842 | .{ .kind = .{ .rc = .sse } }, |
| 3711 | .unused, | 3843 | .unused, |
| 3712 | }, | 3844 | }, |
| 3713 | .dst_temps = .{.mem}, | 3845 | .dst_temps = .{.mem}, |
| 3714 | .each = .{ .limb_and_mask_limb = .{ | 3846 | .each = .{ .once = switch (cc) { |
| 3715 | .of = .src0x, | 3847 | else => unreachable, |
| 3716 | .of_mask = .dst0d, | 3848 | .e => &.{ |
| 3717 | .body = switch (cc) { | 3849 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 3718 | else => unreachable, | 3850 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 3719 | .e => &.{ | 3851 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 3720 | .{ ._, ._dqu, .mov, .tmp4x, .limb(.src0x), ._, ._ }, | 3852 | .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3721 | .{ ._, .p_q, .cmpeq, .tmp4x, .limb(.src1x), ._, ._ }, | 3853 | .{ ._, .p_d, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 3722 | .{ ._, ._ps, .movmsk, .tmp3d, .tmp4x, ._, ._ }, | 3854 | .{ ._, ._ps, .movmsk, .tmp3d, .tmp4x, ._, ._ }, |
| 3723 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | 3855 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| 3724 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | 3856 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| 3725 | }, | 3857 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| 3726 | .ne => &.{ | 3858 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| 3727 | .{ ._, ._dqu, .mov, .tmp4x, .limb(.src0x), ._, ._ }, | 3859 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 3728 | .{ ._, .p_d, .cmpeq, .tmp4x, .limb(.src1x), ._, ._ }, | 3860 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| 3729 | .{ ._, ._ps, .movmsk, .tmp3d, .tmp4x, ._, ._ }, | 3861 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| 3730 | .{ ._, ._, .xor, .tmp3b, .i(0b1111), ._, ._ }, | 3862 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| 3731 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | 3863 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 3732 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | 3864 | .{ .@"1:", ._, .add, .tmp0p, .i(16), ._, ._ }, |
| 3733 | }, | 3865 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 3866 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| | 3867 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 3868 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 3869 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| | 3870 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| | 3871 | }, |
| | 3872 | .ne => &.{ |
| | 3873 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| | 3874 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 3875 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 3876 | .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 3877 | .{ ._, .p_d, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 3878 | .{ ._, ._ps, .movmsk, .tmp3d, .tmp4x, ._, ._ }, |
| | 3879 | .{ ._, ._, .xor, .tmp3b, .i(0b1111), ._, ._ }, |
| | 3880 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| | 3881 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| | 3882 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| | 3883 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| | 3884 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 3885 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 3886 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| | 3887 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| | 3888 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 3889 | .{ .@"1:", ._, .add, .tmp0p, .i(16), ._, ._ }, |
| | 3890 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 3891 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| | 3892 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 3893 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 3894 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| | 3895 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| 3734 | }, | 3896 | }, |
| 3735 | } }, | 3897 | } }, |
| 3736 | }, .{ | 3898 | }, .{ |
| ... | @@ -3740,143 +3902,249 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3740,143 +3902,249 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3740 | .{ .src = .{ .to_mem, .to_mem } }, | 3902 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3741 | }, | 3903 | }, |
| 3742 | .extra_temps = .{ | 3904 | .extra_temps = .{ |
| 3743 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3905 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3744 | .{ .type = .usize, .kind = .{ .reg = .rcx } }, | 3906 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| 3745 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3907 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 3746 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3908 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 3747 | .{ .kind = .{ .rc = .sse } }, | 3909 | .{ .kind = .{ .rc = .sse } }, |
| 3748 | .unused, | 3910 | .unused, |
| 3749 | }, | 3911 | }, |
| 3750 | .dst_temps = .{.mem}, | 3912 | .dst_temps = .{.mem}, |
| 3751 | .each = .{ .limb_and_mask_limb = .{ | 3913 | .each = .{ .once = switch (cc) { |
| 3752 | .of = .src0x, | 3914 | else => unreachable, |
| 3753 | .of_mask = .dst0q, | 3915 | .e => &.{ |
| 3754 | .body = switch (cc) { | 3916 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 3755 | else => unreachable, | 3917 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 3756 | .e => &.{ | 3918 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 3757 | .{ ._, ._dqu, .mov, .tmp4x, .limb(.src0x), ._, ._ }, | 3919 | .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 3758 | .{ ._, .p_q, .cmpeq, .tmp4x, .limb(.src1x), ._, ._ }, | 3920 | .{ ._, .p_q, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 3759 | .{ ._, ._pd, .movmsk, .tmp3d, .tmp4x, ._, ._ }, | 3921 | .{ ._, ._pd, .movmsk, .tmp3d, .tmp4x, ._, ._ }, |
| 3760 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | 3922 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| 3761 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | 3923 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| 3762 | }, | 3924 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| 3763 | .ne => &.{ | 3925 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| 3764 | .{ ._, ._dqu, .mov, .tmp4x, .limb(.src0x), ._, ._ }, | 3926 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 3765 | .{ ._, .p_q, .cmpeq, .tmp4x, .limb(.src1x), ._, ._ }, | 3927 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| 3766 | .{ ._, ._pd, .movmsk, .tmp3d, .tmp4x, ._, ._ }, | 3928 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| 3767 | .{ ._, ._, .xor, .tmp3b, .i(0b11), ._, ._ }, | 3929 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| 3768 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | 3930 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 3769 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | 3931 | .{ .@"1:", ._, .add, .tmp0p, .i(16), ._, ._ }, |
| 3770 | }, | 3932 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 3933 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| | 3934 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 3935 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 3936 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| | 3937 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| | 3938 | }, |
| | 3939 | .ne => &.{ |
| | 3940 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| | 3941 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 3942 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 3943 | .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| | 3944 | .{ ._, .p_q, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| | 3945 | .{ ._, ._pd, .movmsk, .tmp3d, .tmp4x, ._, ._ }, |
| | 3946 | .{ ._, ._, .xor, .tmp3b, .i(0b11), ._, ._ }, |
| | 3947 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, |
| | 3948 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, |
| | 3949 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| | 3950 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| | 3951 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 3952 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 3953 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| | 3954 | .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ }, |
| | 3955 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 3956 | .{ .@"1:", ._, .add, .tmp0p, .i(16), ._, ._ }, |
| | 3957 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 3958 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| | 3959 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 3960 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| | 3961 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| | 3962 | .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ }, |
| 3771 | }, | 3963 | }, |
| 3772 | } }, | 3964 | } }, |
| 3773 | }, .{ | 3965 | }, .{ |
| 3774 | .required_features = .{ .mmx, null }, | 3966 | .required_features = .{ .sse, .mmx }, |
| 3775 | .src_constraints = .{ .{ .int = .byte }, .{ .int = .byte } }, | 3967 | .src_constraints = .{ .{ .int = .byte }, .{ .int = .byte } }, |
| 3776 | .patterns = &.{ | 3968 | .patterns = &.{ |
| 3777 | .{ .src = .{ .to_mem, .to_mem } }, | 3969 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3778 | }, | 3970 | }, |
| 3779 | .extra_temps = .{ | 3971 | .extra_temps = .{ |
| 3780 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3972 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3781 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 3973 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 3782 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, | 3974 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 3783 | .{ .kind = .{ .rc = .mmx } }, | 3975 | .{ .kind = .{ .rc = .mmx } }, |
| 3784 | .unused, | 3976 | .unused, |
| 3785 | .unused, | 3977 | .unused, |
| 3786 | }, | 3978 | }, |
| 3787 | .dst_temps = .{.mem}, | 3979 | .dst_temps = .{.mem}, |
| 3788 | .each = .{ .limb_and_mask_limb = .{ | 3980 | .each = .{ .once = switch (cc) { |
| 3789 | .of = .src0q, | 3981 | else => unreachable, |
| 3790 | .of_mask = .dst0b, | 3982 | .e => &.{ |
| 3791 | .body = switch (cc) { | 3983 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 3792 | else => unreachable, | 3984 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 3793 | .e => &.{ | 3985 | .{ .@"0:", ._q, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 3794 | .{ ._, ._dqu, .mov, .tmp3q, .limb(.src0q), ._, ._ }, | 3986 | .{ ._, .p_b, .cmpeq, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 3795 | .{ ._, .p_b, .cmpeq, .tmp3q, .limb(.src1q), ._, ._ }, | 3987 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ }, |
| 3796 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ }, | 3988 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, |
| 3797 | .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2w, ._, ._ }, | 3989 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| 3798 | }, | 3990 | .{ ._, ._, .add, .tmp0p, .i(8), ._, ._ }, |
| 3799 | .ne => &.{ | 3991 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3800 | .{ ._, ._dqu, .mov, .tmp3q, .limb(.src0q), ._, ._ }, | 3992 | }, |
| 3801 | .{ ._, .p_b, .cmpeq, .tmp3q, .limb(.src1q), ._, ._ }, | 3993 | .ne => &.{ |
| 3802 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ }, | 3994 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 3803 | .{ ._, ._, .not, .tmp2w, ._, ._, ._ }, | 3995 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 3804 | .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2w, ._, ._ }, | 3996 | .{ .@"0:", ._q, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 3805 | }, | 3997 | .{ ._, .p_b, .cmpeq, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 3998 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ }, |
| | 3999 | .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, |
| | 4000 | .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, |
| | 4001 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, |
| | 4002 | .{ ._, ._, .add, .tmp0p, .i(8), ._, ._ }, |
| | 4003 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 3806 | }, | 4004 | }, |
| 3807 | } }, | 4005 | } }, |
| 3808 | }, .{ | 4006 | }, .{ |
| 3809 | .required_features = .{ .mmx, null }, | 4007 | .required_features = .{ .sse, .mmx }, |
| 3810 | .src_constraints = .{ .{ .int = .word }, .{ .int = .word } }, | 4008 | .src_constraints = .{ .{ .int = .word }, .{ .int = .word } }, |
| 3811 | .patterns = &.{ | 4009 | .patterns = &.{ |
| 3812 | .{ .src = .{ .to_mem, .to_mem } }, | 4010 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3813 | }, | 4011 | }, |
| 3814 | .extra_temps = .{ | 4012 | .extra_temps = .{ |
| 3815 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4013 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3816 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4014 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| | 4015 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| | 4016 | .{ .kind = .{ .rc = .mmx } }, |
| 3817 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 4017 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 3818 | .{ .kind = .{ .rc = .mmx } }, | 4018 | .{ .kind = .{ .rc = .mmx } }, |
| 3819 | .unused, | | |
| 3820 | .unused, | | |
| 3821 | }, | 4019 | }, |
| 3822 | .dst_temps = .{.mem}, | 4020 | .dst_temps = .{.mem}, |
| 3823 | .each = .{ .limb_and_mask_limb = .{ | 4021 | .each = .{ .once = switch (cc) { |
| 3824 | .of = .src0q, | 4022 | else => unreachable, |
| 3825 | .of_mask = .dst0w, | 4023 | .e => &.{ |
| 3826 | .body = switch (cc) { | 4024 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 3827 | else => unreachable, | 4025 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 3828 | .e => &.{ | 4026 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 3829 | .{ ._, ._dqu, .mov, .tmp3q, .limb(.src0q), ._, ._ }, | 4027 | .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ }, |
| 3830 | .{ ._, .p_w, .cmpeq, .tmp3q, .limb(.src1q), ._, ._ }, | 4028 | .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 3831 | .{ ._, .p_b, .ackssw, .tmp3q, .tmp3q, ._, ._ }, | 4029 | .{ ._, .p_w, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 3832 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ }, | 4030 | .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ }, |
| 3833 | .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2b, ._, ._ }, | 4031 | .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ }, |
| 3834 | }, | 4032 | .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, |
| 3835 | .ne => &.{ | 4033 | .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, |
| 3836 | .{ ._, ._dqu, .mov, .tmp3q, .limb(.src0q), ._, ._ }, | 4034 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| 3837 | .{ ._, .p_w, .cmpeq, .tmp3q, .limb(.src1q), ._, ._ }, | 4035 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| 3838 | .{ ._, .p_b, .ackssw, .tmp3q, .tmp3q, ._, ._ }, | 4036 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 3839 | .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ }, | 4037 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| 3840 | .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, | 4038 | .{ ._, ._r, .sh, .tmp4d, .i(3), ._, ._ }, |
| 3841 | .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2b, ._, ._ }, | 4039 | .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ }, |
| 3842 | }, | 4040 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 4041 | .{ .@"1:", ._, .add, .tmp0p, .i(8), ._, ._ }, |
| | 4042 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 4043 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| | 4044 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 4045 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| | 4046 | .{ ._, ._r, .sh, .tmp4d, .i(3), ._, ._ }, |
| | 4047 | .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ }, |
| | 4048 | }, |
| | 4049 | .ne => &.{ |
| | 4050 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| | 4051 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 4052 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 4053 | .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ }, |
| | 4054 | .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 4055 | .{ ._, .p_w, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 4056 | .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ }, |
| | 4057 | .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ }, |
| | 4058 | .{ ._, ._, .xor, .tmp4b, .i(0b1111), ._, ._ }, |
| | 4059 | .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, |
| | 4060 | .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, |
| | 4061 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, |
| | 4062 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| | 4063 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 4064 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| | 4065 | .{ ._, ._r, .sh, .tmp4d, .i(3), ._, ._ }, |
| | 4066 | .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ }, |
| | 4067 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 4068 | .{ .@"1:", ._, .add, .tmp0p, .i(8), ._, ._ }, |
| | 4069 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 4070 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| | 4071 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 4072 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| | 4073 | .{ ._, ._r, .sh, .tmp4d, .i(3), ._, ._ }, |
| | 4074 | .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ }, |
| 3843 | }, | 4075 | }, |
| 3844 | } }, | 4076 | } }, |
| 3845 | }, .{ | 4077 | }, .{ |
| 3846 | .required_features = .{ .mmx, null }, | 4078 | .required_features = .{ .sse, .mmx }, |
| 3847 | .src_constraints = .{ .{ .int = .dword }, .{ .int = .dword } }, | 4079 | .src_constraints = .{ .{ .int = .dword }, .{ .int = .dword } }, |
| 3848 | .patterns = &.{ | 4080 | .patterns = &.{ |
| 3849 | .{ .src = .{ .to_mem, .to_mem } }, | 4081 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3850 | }, | 4082 | }, |
| 3851 | .extra_temps = .{ | 4083 | .extra_temps = .{ |
| 3852 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4084 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3853 | .{ .type = .usize, .kind = .{ .reg = .rcx } }, | 4085 | .{ .type = .u32, .kind = .{ .reg = .rcx } }, |
| 3854 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4086 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 3855 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4087 | .{ .kind = .{ .rc = .mmx } }, |
| | 4088 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 3856 | .{ .kind = .{ .rc = .mmx } }, | 4089 | .{ .kind = .{ .rc = .mmx } }, |
| 3857 | .unused, | | |
| 3858 | }, | 4090 | }, |
| 3859 | .dst_temps = .{.mem}, | 4091 | .dst_temps = .{.mem}, |
| 3860 | .each = .{ .limb_and_mask_limb = .{ | 4092 | .each = .{ .once = switch (cc) { |
| 3861 | .of = .src0q, | 4093 | else => unreachable, |
| 3862 | .of_mask = .dst0d, | 4094 | .e => &.{ |
| 3863 | .body = switch (cc) { | 4095 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 3864 | else => unreachable, | 4096 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| 3865 | .e => &.{ | 4097 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| 3866 | .{ ._, ._dqu, .mov, .tmp4q, .limb(.src0q), ._, ._ }, | 4098 | .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ }, |
| 3867 | .{ ._, .p_q, .cmpeq, .tmp4q, .limb(.src1q), ._, ._ }, | 4099 | .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 3868 | .{ ._, ._ps, .movmsk, .tmp3d, .tmp4q, ._, ._ }, | 4100 | .{ ._, .p_d, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 3869 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | 4101 | .{ ._, .p_w, .ackssd, .tmp5q, .tmp3q, ._, ._ }, |
| 3870 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | 4102 | .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ }, |
| 3871 | }, | 4103 | .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ }, |
| 3872 | .ne => &.{ | 4104 | .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, |
| 3873 | .{ ._, ._dqu, .mov, .tmp4q, .limb(.src0q), ._, ._ }, | 4105 | .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, |
| 3874 | .{ ._, .p_q, .cmpeq, .tmp4q, .limb(.src1q), ._, ._ }, | 4106 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| 3875 | .{ ._, ._ps, .movmsk, .tmp3d, .tmp4q, ._, ._ }, | 4107 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| 3876 | .{ ._, ._, .xor, .tmp3b, .i(0b1111), ._, ._ }, | 4108 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 3877 | .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, | 4109 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| 3878 | .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, | 4110 | .{ ._, ._r, .sh, .tmp4d, .i(3), ._, ._ }, |
| 3879 | }, | 4111 | .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ }, |
| | 4112 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 4113 | .{ .@"1:", ._, .add, .tmp0p, .i(8), ._, ._ }, |
| | 4114 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 4115 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| | 4116 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 4117 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| | 4118 | .{ ._, ._r, .sh, .tmp4d, .i(3), ._, ._ }, |
| | 4119 | .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ }, |
| | 4120 | }, |
| | 4121 | .ne => &.{ |
| | 4122 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| | 4123 | .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, |
| | 4124 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 4125 | .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ }, |
| | 4126 | .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| | 4127 | .{ ._, .p_d, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| | 4128 | .{ ._, .p_w, .ackssd, .tmp5q, .tmp3q, ._, ._ }, |
| | 4129 | .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ }, |
| | 4130 | .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ }, |
| | 4131 | .{ ._, ._, .xor, .tmp4b, .i(0b11), ._, ._ }, |
| | 4132 | .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, |
| | 4133 | .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, |
| | 4134 | .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, |
| | 4135 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| | 4136 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| | 4137 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| | 4138 | .{ ._, ._r, .sh, .tmp4d, .i(3), ._, ._ }, |
| | 4139 | .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ }, |
| | 4140 | .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }, |
| | 4141 | .{ .@"1:", ._, .add, .tmp0p, .i(8), ._, ._ }, |
| | 4142 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| | 4143 | .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }, |
| | 4144 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| | 4145 | .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, |
| | 4146 | .{ ._, ._r, .sh, .tmp4d, .i(3), ._, ._ }, |
| | 4147 | .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ }, |
| 3880 | }, | 4148 | }, |
| 3881 | } }, | 4149 | } }, |
| 3882 | }, .{ | 4150 | }, .{ |
| ... | @@ -3887,7 +4155,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3887,7 +4155,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3887 | .{ .src = .{ .to_mem, .to_mem } }, | 4155 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3888 | }, | 4156 | }, |
| 3889 | .extra_temps = .{ | 4157 | .extra_temps = .{ |
| 3890 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4158 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3891 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4159 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 3892 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 4160 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 3893 | .unused, | 4161 | .unused, |
| ... | @@ -3915,7 +4183,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3915,7 +4183,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3915 | .{ .src = .{ .to_mem, .to_mem } }, | 4183 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3916 | }, | 4184 | }, |
| 3917 | .extra_temps = .{ | 4185 | .extra_temps = .{ |
| 3918 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4186 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3919 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4187 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 3920 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 4188 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| 3921 | .unused, | 4189 | .unused, |
| ... | @@ -3944,7 +4212,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3944,7 +4212,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3944 | .{ .src = .{ .to_mem, .to_mem } }, | 4212 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3945 | }, | 4213 | }, |
| 3946 | .extra_temps = .{ | 4214 | .extra_temps = .{ |
| 3947 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4215 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3948 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4216 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 3949 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, | 4217 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| 3950 | .unused, | 4218 | .unused, |
| ... | @@ -3972,7 +4240,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3972,7 +4240,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3972 | .{ .src = .{ .to_mem, .to_mem } }, | 4240 | .{ .src = .{ .to_mem, .to_mem } }, |
| 3973 | }, | 4241 | }, |
| 3974 | .extra_temps = .{ | 4242 | .extra_temps = .{ |
| 3975 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4243 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 3976 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4244 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 3977 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, | 4245 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| 3978 | .unused, | 4246 | .unused, |
| ... | @@ -4001,7 +4269,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4001,7 +4269,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4001 | .{ .src = .{ .to_mem, .to_mem } }, | 4269 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4002 | }, | 4270 | }, |
| 4003 | .extra_temps = .{ | 4271 | .extra_temps = .{ |
| 4004 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4272 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4005 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4273 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 4006 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4274 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 4007 | .unused, | 4275 | .unused, |
| ... | @@ -4029,7 +4297,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4029,7 +4297,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4029 | .{ .src = .{ .to_mem, .to_mem } }, | 4297 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4030 | }, | 4298 | }, |
| 4031 | .extra_temps = .{ | 4299 | .extra_temps = .{ |
| 4032 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4300 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4033 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4301 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 4034 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4302 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 4035 | .unused, | 4303 | .unused, |
| ... | @@ -4058,7 +4326,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4058,7 +4326,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4058 | .{ .src = .{ .to_mem, .to_mem } }, | 4326 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4059 | }, | 4327 | }, |
| 4060 | .extra_temps = .{ | 4328 | .extra_temps = .{ |
| 4061 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4329 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4062 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4330 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 4063 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 4331 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 4064 | .unused, | 4332 | .unused, |
| ... | @@ -4087,7 +4355,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4087,7 +4355,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4087 | .{ .src = .{ .to_mem, .to_mem } }, | 4355 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4088 | }, | 4356 | }, |
| 4089 | .extra_temps = .{ | 4357 | .extra_temps = .{ |
| 4090 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4358 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4091 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4359 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 4092 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 4360 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 4093 | .unused, | 4361 | .unused, |
| ... | @@ -4185,7 +4453,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4185,7 +4453,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4185 | .{ .src = .{ .to_mem, .to_mem } }, | 4453 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4186 | }, | 4454 | }, |
| 4187 | .extra_temps = .{ | 4455 | .extra_temps = .{ |
| 4188 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4456 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4189 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4457 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 4190 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4458 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 4191 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 4459 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| ... | @@ -4214,7 +4482,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4214,7 +4482,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4214 | .{ .src = .{ .to_mem, .to_mem } }, | 4482 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4215 | }, | 4483 | }, |
| 4216 | .extra_temps = .{ | 4484 | .extra_temps = .{ |
| 4217 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4485 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4218 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4486 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 4219 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4487 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 4220 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 4488 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| ... | @@ -4244,7 +4512,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4244,7 +4512,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4244 | .{ .src = .{ .to_mem, .to_mem } }, | 4512 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4245 | }, | 4513 | }, |
| 4246 | .extra_temps = .{ | 4514 | .extra_temps = .{ |
| 4247 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4515 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4248 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4516 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 4249 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4517 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 4250 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, | 4518 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| ... | @@ -4273,7 +4541,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4273,7 +4541,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4273 | .{ .src = .{ .to_mem, .to_mem } }, | 4541 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4274 | }, | 4542 | }, |
| 4275 | .extra_temps = .{ | 4543 | .extra_temps = .{ |
| 4276 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4544 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4277 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4545 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 4278 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4546 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 4279 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, | 4547 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| ... | @@ -4303,7 +4571,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4303,7 +4571,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4303 | .{ .src = .{ .to_mem, .to_mem } }, | 4571 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4304 | }, | 4572 | }, |
| 4305 | .extra_temps = .{ | 4573 | .extra_temps = .{ |
| 4306 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4574 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4307 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4575 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 4308 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4576 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 4309 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4577 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| ... | @@ -4332,7 +4600,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4332,7 +4600,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4332 | .{ .src = .{ .to_mem, .to_mem } }, | 4600 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4333 | }, | 4601 | }, |
| 4334 | .extra_temps = .{ | 4602 | .extra_temps = .{ |
| 4335 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4603 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4336 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4604 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 4337 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4605 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 4338 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4606 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| ... | @@ -4362,7 +4630,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4362,7 +4630,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4362 | .{ .src = .{ .to_mem, .to_mem } }, | 4630 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4363 | }, | 4631 | }, |
| 4364 | .extra_temps = .{ | 4632 | .extra_temps = .{ |
| 4365 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4633 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4366 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4634 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 4367 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4635 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 4368 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 4636 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| ... | @@ -4392,7 +4660,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4392,7 +4660,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4392 | .{ .src = .{ .to_mem, .to_mem } }, | 4660 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4393 | }, | 4661 | }, |
| 4394 | .extra_temps = .{ | 4662 | .extra_temps = .{ |
| 4395 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4663 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4396 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4664 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 4397 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4665 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 4398 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 4666 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| ... | @@ -4493,7 +4761,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4493,7 +4761,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4493 | .{ .src = .{ .to_mem, .to_mem } }, | 4761 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4494 | }, | 4762 | }, |
| 4495 | .extra_temps = .{ | 4763 | .extra_temps = .{ |
| 4496 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4764 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4497 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4765 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 4498 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 4766 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 4499 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 4767 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| ... | @@ -4523,7 +4791,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4523,7 +4791,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4523 | .{ .src = .{ .to_mem, .to_mem } }, | 4791 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4524 | }, | 4792 | }, |
| 4525 | .extra_temps = .{ | 4793 | .extra_temps = .{ |
| 4526 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4794 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4527 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4795 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 4528 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 4796 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 4529 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, | 4797 | .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, |
| ... | @@ -4553,7 +4821,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4553,7 +4821,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4553 | .{ .src = .{ .to_mem, .to_mem } }, | 4821 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4554 | }, | 4822 | }, |
| 4555 | .extra_temps = .{ | 4823 | .extra_temps = .{ |
| 4556 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4824 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4557 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4825 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 4558 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 4826 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 4559 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, | 4827 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| ... | @@ -4582,7 +4850,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4582,7 +4850,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4582 | .{ .src = .{ .to_mem, .to_mem } }, | 4850 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4583 | }, | 4851 | }, |
| 4584 | .extra_temps = .{ | 4852 | .extra_temps = .{ |
| 4585 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4853 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4586 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4854 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 4587 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 4855 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 4588 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, | 4856 | .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, |
| ... | @@ -4612,7 +4880,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4612,7 +4880,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4612 | .{ .src = .{ .to_mem, .to_mem } }, | 4880 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4613 | }, | 4881 | }, |
| 4614 | .extra_temps = .{ | 4882 | .extra_temps = .{ |
| 4615 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4883 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4616 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4884 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 4617 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 4885 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 4618 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4886 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| ... | @@ -4642,7 +4910,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4642,7 +4910,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4642 | .{ .src = .{ .to_mem, .to_mem } }, | 4910 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4643 | }, | 4911 | }, |
| 4644 | .extra_temps = .{ | 4912 | .extra_temps = .{ |
| 4645 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4913 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4646 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4914 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 4647 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 4915 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 4648 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, | 4916 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| ... | @@ -4672,7 +4940,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4672,7 +4940,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4672 | .{ .src = .{ .to_mem, .to_mem } }, | 4940 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4673 | }, | 4941 | }, |
| 4674 | .extra_temps = .{ | 4942 | .extra_temps = .{ |
| 4675 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4943 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4676 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4944 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 4677 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 4945 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 4678 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 4946 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| ... | @@ -4702,7 +4970,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4702,7 +4970,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4702 | .{ .src = .{ .to_mem, .to_mem } }, | 4970 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4703 | }, | 4971 | }, |
| 4704 | .extra_temps = .{ | 4972 | .extra_temps = .{ |
| 4705 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 4973 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4706 | .{ .type = .u8, .kind = .{ .reg = .cl } }, | 4974 | .{ .type = .u8, .kind = .{ .reg = .cl } }, |
| 4707 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 4975 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 4708 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, | 4976 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| ... | @@ -4803,7 +5071,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4803,7 +5071,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4803 | .{ .src = .{ .to_mem, .to_mem } }, | 5071 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4804 | }, | 5072 | }, |
| 4805 | .extra_temps = .{ | 5073 | .extra_temps = .{ |
| 4806 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 5074 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4807 | .{ .type = .u32, .kind = .{ .reg = .ecx } }, | 5075 | .{ .type = .u32, .kind = .{ .reg = .ecx } }, |
| 4808 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 5076 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 4809 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 5077 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | @@ -4822,15 +5090,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4822,15 +5090,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4822 | .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ }, | 5090 | .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ }, |
| 4823 | .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ }, | 5091 | .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ }, |
| 4824 | .{ ._, ._, .add, .tmp1d, .i(1), ._, ._ }, | 5092 | .{ ._, ._, .add, .tmp1d, .i(1), ._, ._ }, |
| 4825 | .{ ._, ._, .@"test", .tmp1d, .ia(-1, .tmp2, .add_bit_size), ._, ._ }, | 5093 | .{ ._, ._, .@"test", .tmp1d, .ia(-1, .none, .add_ptr_bit_size), ._, ._ }, |
| 4826 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, | 5094 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 4827 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | 5095 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| 4828 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, | 5096 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| 4829 | .{ ._, ._, .mov, .memia(.dst0p, .tmp3, .sub_access_size), .tmp2p, ._, ._ }, | 5097 | .{ ._, ._, .mov, .memia(.dst0p, .tmp3, .sub_ptr_size), .tmp2p, ._, ._ }, |
| 4830 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 5098 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 4831 | .{ .@"1:", ._, .add, .tmp0p, .i(1), ._, ._ }, | 5099 | .{ .@"1:", ._, .add, .tmp0p, .i(1), ._, ._ }, |
| 4832 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, | 5100 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 4833 | .{ ._, ._, .@"test", .tmp1d, .ia(-1, .tmp2, .add_bit_size), ._, ._ }, | 5101 | .{ ._, ._, .@"test", .tmp1d, .ia(-1, .none, .add_ptr_bit_size), ._, ._ }, |
| 4834 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | 5102 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 4835 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | 5103 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| 4836 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, | 5104 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| ... | @@ -4842,7 +5110,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4842,7 +5110,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4842 | .{ .src = .{ .to_mem, .to_mem } }, | 5110 | .{ .src = .{ .to_mem, .to_mem } }, |
| 4843 | }, | 5111 | }, |
| 4844 | .extra_temps = .{ | 5112 | .extra_temps = .{ |
| 4845 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 5113 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 4846 | .{ .type = .u32, .kind = .{ .reg = .ecx } }, | 5114 | .{ .type = .u32, .kind = .{ .reg = .ecx } }, |
| 4847 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 5115 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 4848 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 5116 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | @@ -4861,15 +5129,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -4861,15 +5129,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 4861 | .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ }, | 5129 | .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ }, |
| 4862 | .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ }, | 5130 | .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ }, |
| 4863 | .{ ._, ._, .inc, .tmp1d, ._, ._, ._ }, | 5131 | .{ ._, ._, .inc, .tmp1d, ._, ._, ._ }, |
| 4864 | .{ ._, ._, .@"test", .tmp1d, .ia(-1, .tmp2, .add_bit_size), ._, ._ }, | 5132 | .{ ._, ._, .@"test", .tmp1d, .ia(-1, .none, .add_ptr_bit_size), ._, ._ }, |
| 4865 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, | 5133 | .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, |
| 4866 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | 5134 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| 4867 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, | 5135 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| 4868 | .{ ._, ._, .mov, .memia(.dst0p, .tmp3, .sub_access_size), .tmp2p, ._, ._ }, | 5136 | .{ ._, ._, .mov, .memia(.dst0p, .tmp3, .sub_ptr_size), .tmp2p, ._, ._ }, |
| 4869 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, | 5137 | .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, |
| 4870 | .{ .@"1:", ._, .inc, .tmp0p, ._, ._, ._ }, | 5138 | .{ .@"1:", ._, .inc, .tmp0p, ._, ._, ._ }, |
| 4871 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, | 5139 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 4872 | .{ ._, ._, .@"test", .tmp1d, .ia(-1, .tmp2, .add_bit_size), ._, ._ }, | 5140 | .{ ._, ._, .@"test", .tmp1d, .ia(-1, .none, .add_ptr_bit_size), ._, ._ }, |
| 4873 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, | 5141 | .{ ._, ._z, .j, .@"0f", ._, ._, ._ }, |
| 4874 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, | 5142 | .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, |
| 4875 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, | 5143 | .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }, |
| ... | @@ -5040,8 +5308,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5040,8 +5308,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5040 | .{ .src = .{ .to_mem, .to_mem } }, | 5308 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5041 | }, | 5309 | }, |
| 5042 | .extra_temps = .{ | 5310 | .extra_temps = .{ |
| | 5311 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5043 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 5312 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 5044 | .{ .type = .bool, .kind = .{ .rc = .general_purpose } }, | | |
| 5045 | .unused, | 5313 | .unused, |
| 5046 | .unused, | 5314 | .unused, |
| 5047 | .unused, | 5315 | .unused, |
| ... | @@ -5049,18 +5317,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5049,18 +5317,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5049 | }, | 5317 | }, |
| 5050 | .clobbers = .{ .eflags = true }, | 5318 | .clobbers = .{ .eflags = true }, |
| 5051 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5319 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| 5052 | .each = .{ .limb = .{ | 5320 | .each = .{ .once = &.{ |
| 5053 | .of = .src0p, | 5321 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 5054 | .header = &.{ | 5322 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, |
| 5055 | .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ }, | 5323 | .{ .@"0:", ._r, .sh, .tmp1b, .i(1), ._, ._ }, |
| 5056 | }, | 5324 | .{ ._, ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ }, |
| 5057 | .body = &.{ | 5325 | .{ ._, ._, .sbb, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ }, |
| 5058 | .{ ._, ._, .mov, .tmp0p, .limb(.src0p), ._, ._ }, | 5326 | .{ ._, ._c, .set, .tmp1b, ._, ._, ._ }, |
| 5059 | .{ ._, ._r, .sh, .tmp1b, .i(1), ._, ._ }, | 5327 | .{ ._, .fromCondition(cc), .set, .dst0b, ._, ._, ._ }, |
| 5060 | .{ ._, ._, .sbb, .tmp0p, .limb(.src1p), ._, ._ }, | 5328 | .{ ._, ._, .add, .tmp0p, .a(.tmp1, .add_size), ._, ._ }, |
| 5061 | .{ ._, ._c, .set, .tmp1b, ._, ._, ._ }, | 5329 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5062 | .{ ._, .fromCondition(cc), .set, .dst0b, ._, ._, ._ }, | | |
| 5063 | }, | | |
| 5064 | } }, | 5330 | } }, |
| 5065 | } }, | 5331 | } }, |
| 5066 | }) catch |err| switch (err) { | 5332 | }) catch |err| switch (err) { |
| ... | @@ -5296,35 +5562,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5296,35 +5562,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5296 | .{ .src = .{ .to_mem, .to_mem } }, | 5562 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5297 | }, | 5563 | }, |
| 5298 | .extra_temps = .{ | 5564 | .extra_temps = .{ |
| 5299 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 5565 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5300 | .{ .kind = .{ .rc = .sse } }, | | |
| 5301 | .{ .kind = .{ .rc = .sse } }, | | |
| 5302 | .unused, | | |
| 5303 | .unused, | | |
| 5304 | .unused, | | |
| 5305 | }, | | |
| 5306 | .dst_temps = .{.{ .cc = cc }}, | | |
| 5307 | .each = .{ .limb = .{ | | |
| 5308 | .of = .src0y, | | |
| 5309 | .header = &.{ | | |
| 5310 | .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .tmp2y, ._ }, | | |
| 5311 | }, | | |
| 5312 | .body = &.{ | | |
| 5313 | .{ ._, .v_dqu, .mov, .tmp1y, .limb(.src0y), ._, ._ }, | | |
| 5314 | .{ ._, .vp_, .xor, .tmp1y, .tmp1y, .limb(.src1y), ._ }, | | |
| 5315 | .{ ._, .vp_, .@"or", .tmp2y, .tmp2y, .tmp1y, ._ }, | | |
| 5316 | }, | | |
| 5317 | .trailer = &.{ | | |
| 5318 | .{ ._, .vp_, .@"test", .tmp2y, .tmp2y, ._, ._ }, | | |
| 5319 | }, | | |
| 5320 | } }, | | |
| 5321 | }, .{ | | |
| 5322 | .required_features = .{ .avx, null }, | | |
| 5323 | .patterns = &.{ | | |
| 5324 | .{ .src = .{ .to_mem, .to_mem } }, | | |
| 5325 | }, | | |
| 5326 | .extra_temps = .{ | | |
| 5327 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | | |
| 5328 | .{ .kind = .{ .rc = .sse } }, | 5566 | .{ .kind = .{ .rc = .sse } }, |
| 5329 | .{ .kind = .{ .rc = .sse } }, | 5567 | .{ .kind = .{ .rc = .sse } }, |
| 5330 | .unused, | 5568 | .unused, |
| ... | @@ -5332,19 +5570,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5332,19 +5570,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5332 | .unused, | 5570 | .unused, |
| 5333 | }, | 5571 | }, |
| 5334 | .dst_temps = .{.{ .cc = cc }}, | 5572 | .dst_temps = .{.{ .cc = cc }}, |
| 5335 | .each = .{ .limb = .{ | 5573 | .each = .{ .once = &.{ |
| 5336 | .of = .src0y, | 5574 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 5337 | .header = &.{ | 5575 | .{ ._, .vp_, .xor, .tmp1y, .tmp1y, .tmp1y, ._ }, |
| 5338 | .{ ._, .v_pd, .xor, .tmp2y, .tmp2y, .tmp2y, ._ }, | 5576 | .{ .@"0:", .v_dqu, .mov, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 5339 | }, | 5577 | .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 5340 | .body = &.{ | 5578 | .{ ._, .vp_, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ }, |
| 5341 | .{ ._, .v_pd, .movu, .tmp1y, .limb(.src0y), ._, ._ }, | 5579 | .{ ._, ._, .add, .tmp0p, .i(32), ._, ._ }, |
| 5342 | .{ ._, .v_pd, .xor, .tmp1y, .tmp1y, .limb(.src1y), ._ }, | 5580 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5343 | .{ ._, .v_pd, .@"or", .tmp2y, .tmp2y, .tmp1y, ._ }, | 5581 | .{ ._, .vp_, .@"test", .tmp1y, .tmp1y, ._, ._ }, |
| 5344 | }, | | |
| 5345 | .trailer = &.{ | | |
| 5346 | .{ ._, .vp_, .@"test", .tmp2y, .tmp2y, ._, ._ }, | | |
| 5347 | }, | | |
| 5348 | } }, | 5582 | } }, |
| 5349 | }, .{ | 5583 | }, .{ |
| 5350 | .required_features = .{ .avx, null }, | 5584 | .required_features = .{ .avx, null }, |
| ... | @@ -5352,7 +5586,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5352,7 +5586,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5352 | .{ .src = .{ .to_mem, .to_mem } }, | 5586 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5353 | }, | 5587 | }, |
| 5354 | .extra_temps = .{ | 5588 | .extra_temps = .{ |
| 5355 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 5589 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5356 | .{ .kind = .{ .rc = .sse } }, | 5590 | .{ .kind = .{ .rc = .sse } }, |
| 5357 | .{ .kind = .{ .rc = .sse } }, | 5591 | .{ .kind = .{ .rc = .sse } }, |
| 5358 | .unused, | 5592 | .unused, |
| ... | @@ -5360,19 +5594,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5360,19 +5594,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5360 | .unused, | 5594 | .unused, |
| 5361 | }, | 5595 | }, |
| 5362 | .dst_temps = .{.{ .cc = cc }}, | 5596 | .dst_temps = .{.{ .cc = cc }}, |
| 5363 | .each = .{ .limb = .{ | 5597 | .each = .{ .once = &.{ |
| 5364 | .of = .src0x, | 5598 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 5365 | .header = &.{ | 5599 | .{ ._, .v_pd, .xor, .tmp1y, .tmp1y, .tmp1y, ._ }, |
| 5366 | .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ }, | 5600 | .{ .@"0:", .v_pd, .movu, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, |
| 5367 | }, | 5601 | .{ ._, .v_pd, .xor, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._ }, |
| 5368 | .body = &.{ | 5602 | .{ ._, .v_pd, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ }, |
| 5369 | .{ ._, .v_dqu, .mov, .tmp1x, .limb(.src0x), ._, ._ }, | 5603 | .{ ._, ._, .add, .tmp0p, .i(32), ._, ._ }, |
| 5370 | .{ ._, .vp_, .xor, .tmp1x, .tmp1x, .limb(.src1x), ._ }, | 5604 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5371 | .{ ._, .vp_, .@"or", .tmp2x, .tmp2x, .tmp1x, ._ }, | 5605 | .{ ._, .vp_, .@"test", .tmp1y, .tmp1y, ._, ._ }, |
| 5372 | }, | | |
| 5373 | .trailer = &.{ | | |
| 5374 | .{ ._, .vp_, .@"test", .tmp2x, .tmp2x, ._, ._ }, | | |
| 5375 | }, | | |
| 5376 | } }, | 5606 | } }, |
| 5377 | }, .{ | 5607 | }, .{ |
| 5378 | .required_features = .{ .avx, null }, | 5608 | .required_features = .{ .avx, null }, |
| ... | @@ -5380,7 +5610,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5380,7 +5610,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5380 | .{ .src = .{ .to_mem, .to_mem } }, | 5610 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5381 | }, | 5611 | }, |
| 5382 | .extra_temps = .{ | 5612 | .extra_temps = .{ |
| 5383 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 5613 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5384 | .{ .kind = .{ .rc = .sse } }, | 5614 | .{ .kind = .{ .rc = .sse } }, |
| 5385 | .{ .kind = .{ .rc = .sse } }, | 5615 | .{ .kind = .{ .rc = .sse } }, |
| 5386 | .unused, | 5616 | .unused, |
| ... | @@ -5388,19 +5618,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5388,19 +5618,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5388 | .unused, | 5618 | .unused, |
| 5389 | }, | 5619 | }, |
| 5390 | .dst_temps = .{.{ .cc = cc }}, | 5620 | .dst_temps = .{.{ .cc = cc }}, |
| 5391 | .each = .{ .limb = .{ | 5621 | .each = .{ .once = &.{ |
| 5392 | .of = .src0x, | 5622 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 5393 | .header = &.{ | 5623 | .{ ._, .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ }, |
| 5394 | .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ }, | 5624 | .{ .@"0:", .v_dqu, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5395 | }, | 5625 | .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._ }, |
| 5396 | .body = &.{ | 5626 | .{ ._, .vp_, .@"or", .tmp1x, .tmp1x, .tmp2x, ._ }, |
| 5397 | .{ ._, .v_dqu, .mov, .tmp1x, .limb(.src0x), ._, ._ }, | 5627 | .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ }, |
| 5398 | .{ ._, .vp_, .xor, .tmp1x, .tmp1x, .limb(.src1x), ._ }, | 5628 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5399 | .{ ._, .vp_, .@"or", .tmp2x, .tmp2x, .tmp1x, ._ }, | 5629 | .{ ._, .vp_, .@"test", .tmp1x, .tmp1x, ._, ._ }, |
| 5400 | }, | | |
| 5401 | .trailer = &.{ | | |
| 5402 | .{ ._, .vp_, .@"test", .tmp2x, .tmp2x, ._, ._ }, | | |
| 5403 | }, | | |
| 5404 | } }, | 5630 | } }, |
| 5405 | }, .{ | 5631 | }, .{ |
| 5406 | .required_features = .{ .sse4_1, null }, | 5632 | .required_features = .{ .sse4_1, null }, |
| ... | @@ -5408,7 +5634,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5408,7 +5634,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5408 | .{ .src = .{ .to_mem, .to_mem } }, | 5634 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5409 | }, | 5635 | }, |
| 5410 | .extra_temps = .{ | 5636 | .extra_temps = .{ |
| 5411 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 5637 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5412 | .{ .kind = .{ .rc = .sse } }, | 5638 | .{ .kind = .{ .rc = .sse } }, |
| 5413 | .{ .kind = .{ .rc = .sse } }, | 5639 | .{ .kind = .{ .rc = .sse } }, |
| 5414 | .unused, | 5640 | .unused, |
| ... | @@ -5416,19 +5642,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5416,19 +5642,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5416 | .unused, | 5642 | .unused, |
| 5417 | }, | 5643 | }, |
| 5418 | .dst_temps = .{.{ .cc = cc }}, | 5644 | .dst_temps = .{.{ .cc = cc }}, |
| 5419 | .each = .{ .limb = .{ | 5645 | .each = .{ .once = &.{ |
| 5420 | .of = .src0x, | 5646 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 5421 | .header = &.{ | 5647 | .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| 5422 | .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ }, | 5648 | .{ .@"0:", ._dqu, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5423 | }, | 5649 | .{ ._, .p_, .xor, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 5424 | .body = &.{ | 5650 | .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ }, |
| 5425 | .{ ._, ._dqu, .mov, .tmp1x, .limb(.src0x), ._, ._ }, | 5651 | .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ }, |
| 5426 | .{ ._, .p_, .xor, .tmp1x, .limb(.src1x), ._, ._ }, | 5652 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5427 | .{ ._, .p_, .@"or", .tmp2x, .tmp1x, ._, ._ }, | 5653 | .{ ._, .p_, .@"test", .tmp1x, .tmp1x, ._, ._ }, |
| 5428 | }, | | |
| 5429 | .trailer = &.{ | | |
| 5430 | .{ ._, .p_, .@"test", .tmp2x, .tmp2x, ._, ._ }, | | |
| 5431 | }, | | |
| 5432 | } }, | 5654 | } }, |
| 5433 | }, .{ | 5655 | }, .{ |
| 5434 | .required_features = .{ .sse2, null }, | 5656 | .required_features = .{ .sse2, null }, |
| ... | @@ -5436,7 +5658,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5436,7 +5658,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5436 | .{ .src = .{ .to_mem, .to_mem } }, | 5658 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5437 | }, | 5659 | }, |
| 5438 | .extra_temps = .{ | 5660 | .extra_temps = .{ |
| 5439 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 5661 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5440 | .{ .kind = .{ .rc = .sse } }, | 5662 | .{ .kind = .{ .rc = .sse } }, |
| 5441 | .{ .kind = .{ .rc = .sse } }, | 5663 | .{ .kind = .{ .rc = .sse } }, |
| 5442 | .unused, | 5664 | .unused, |
| ... | @@ -5444,22 +5666,18 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5444,22 +5666,18 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5444 | .unused, | 5666 | .unused, |
| 5445 | }, | 5667 | }, |
| 5446 | .dst_temps = .{.{ .cc = cc }}, | 5668 | .dst_temps = .{.{ .cc = cc }}, |
| 5447 | .each = .{ .limb = .{ | 5669 | .each = .{ .once = &.{ |
| 5448 | .of = .src0x, | 5670 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 5449 | .header = &.{ | 5671 | .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| 5450 | .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ }, | 5672 | .{ .@"0:", ._dqu, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 5451 | }, | 5673 | .{ ._, .p_, .xor, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, |
| 5452 | .body = &.{ | 5674 | .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ }, |
| 5453 | .{ ._, ._dqu, .mov, .tmp1x, .limb(.src0x), ._, ._ }, | 5675 | .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ }, |
| 5454 | .{ ._, .p_, .xor, .tmp1x, .limb(.src1x), ._, ._ }, | 5676 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5455 | .{ ._, .p_, .@"or", .tmp2x, .tmp1x, ._, ._ }, | 5677 | .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ }, |
| 5456 | }, | 5678 | .{ ._, .p_b, .cmpeq, .tmp1x, .tmp2x, ._, ._ }, |
| 5457 | .trailer = &.{ | 5679 | .{ ._, .p_b, .movmsk, .tmp0d, .tmp1x, ._, ._ }, |
| 5458 | .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, | 5680 | .{ ._, ._, .cmp, .tmp0d, .i(0xffff), ._, ._ }, |
| 5459 | .{ ._, .p_b, .cmpeq, .tmp2x, .tmp1x, ._, ._ }, | | |
| 5460 | .{ ._, .p_b, .movmsk, .tmp0d, .tmp2x, ._, ._ }, | | |
| 5461 | .{ ._, ._, .xor, .tmp0d, .i(0xffff), ._, ._ }, | | |
| 5462 | }, | | |
| 5463 | } }, | 5681 | } }, |
| 5464 | }, .{ | 5682 | }, .{ |
| 5465 | .required_features = .{ .sse, .mmx }, | 5683 | .required_features = .{ .sse, .mmx }, |
| ... | @@ -5467,7 +5685,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5467,7 +5685,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5467 | .{ .src = .{ .to_mem, .to_mem } }, | 5685 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5468 | }, | 5686 | }, |
| 5469 | .extra_temps = .{ | 5687 | .extra_temps = .{ |
| 5470 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 5688 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5471 | .{ .kind = .{ .rc = .mmx } }, | 5689 | .{ .kind = .{ .rc = .mmx } }, |
| 5472 | .{ .kind = .{ .rc = .mmx } }, | 5690 | .{ .kind = .{ .rc = .mmx } }, |
| 5473 | .unused, | 5691 | .unused, |
| ... | @@ -5475,29 +5693,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5475,29 +5693,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5475 | .unused, | 5693 | .unused, |
| 5476 | }, | 5694 | }, |
| 5477 | .dst_temps = .{.{ .cc = cc }}, | 5695 | .dst_temps = .{.{ .cc = cc }}, |
| 5478 | .each = .{ .limb = .{ | 5696 | .each = .{ .once = &.{ |
| 5479 | .of = .src0q, | 5697 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 5480 | .header = &.{ | 5698 | .{ ._, .p_, .xor, .tmp1q, .tmp1q, ._, ._ }, |
| 5481 | .{ ._, .p_, .xor, .tmp2q, .tmp2q, ._, ._ }, | 5699 | .{ .@"0:", ._q, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 5482 | }, | 5700 | .{ ._, .p_, .xor, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, |
| 5483 | .body = &.{ | 5701 | .{ ._, .p_, .@"or", .tmp1q, .tmp2q, ._, ._ }, |
| 5484 | .{ ._, ._q, .mov, .tmp1q, .limb(.src0q), ._, ._ }, | 5702 | .{ ._, ._, .add, .tmp0p, .i(8), ._, ._ }, |
| 5485 | .{ ._, .p_, .xor, .tmp1q, .limb(.src1q), ._, ._ }, | 5703 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5486 | .{ ._, .p_, .@"or", .tmp2q, .tmp1q, ._, ._ }, | 5704 | .{ ._, .p_, .xor, .tmp2q, .tmp2q, ._, ._ }, |
| 5487 | }, | 5705 | .{ ._, .p_b, .cmpeq, .tmp1q, .tmp2q, ._, ._ }, |
| 5488 | .trailer = &.{ | 5706 | .{ ._, .p_b, .movmsk, .tmp0d, .tmp1q, ._, ._ }, |
| 5489 | .{ ._, .p_, .xor, .tmp1q, .tmp1q, ._, ._ }, | 5707 | .{ ._, ._, .cmp, .tmp0d, .i(0xff), ._, ._ }, |
| 5490 | .{ ._, .p_b, .cmpeq, .tmp2q, .tmp1q, ._, ._ }, | | |
| 5491 | .{ ._, .p_b, .movmsk, .tmp0d, .tmp2q, ._, ._ }, | | |
| 5492 | .{ ._, ._, .xor, .tmp0d, .i(0xff), ._, ._ }, | | |
| 5493 | }, | | |
| 5494 | } }, | 5708 | } }, |
| 5495 | }, .{ | 5709 | }, .{ |
| 5496 | .patterns = &.{ | 5710 | .patterns = &.{ |
| 5497 | .{ .src = .{ .to_mem, .to_mem } }, | 5711 | .{ .src = .{ .to_mem, .to_mem } }, |
| 5498 | }, | 5712 | }, |
| 5499 | .extra_temps = .{ | 5713 | .extra_temps = .{ |
| 5500 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 5714 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 5501 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 5715 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 5502 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, | 5716 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 5503 | .unused, | 5717 | .unused, |
| ... | @@ -5505,19 +5719,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5505,19 +5719,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5505 | .unused, | 5719 | .unused, |
| 5506 | }, | 5720 | }, |
| 5507 | .dst_temps = .{.{ .cc = cc }}, | 5721 | .dst_temps = .{.{ .cc = cc }}, |
| 5508 | .each = .{ .limb = .{ | 5722 | .each = .{ .once = &.{ |
| 5509 | .of = .src0p, | 5723 | .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ }, |
| 5510 | .header = &.{ | 5724 | .{ ._, ._, .xor, .tmp1p, .tmp1p, ._, ._ }, |
| 5511 | .{ ._, ._, .xor, .tmp2p, .tmp2p, ._, ._ }, | 5725 | .{ .@"0:", ._, .mov, .tmp2p, .memia(.src0p, .tmp0, .add_size), ._, ._ }, |
| 5512 | }, | 5726 | .{ ._, ._, .xor, .tmp2p, .memia(.src1p, .tmp0, .add_size), ._, ._ }, |
| 5513 | .body = &.{ | 5727 | .{ ._, ._, .@"or", .tmp1p, .tmp2p, ._, ._ }, |
| 5514 | .{ ._, ._, .mov, .tmp1p, .limb(.src0p), ._, ._ }, | 5728 | .{ ._, ._, .add, .tmp0p, .a(.tmp2, .add_size), ._, ._ }, |
| 5515 | .{ ._, ._, .xor, .tmp1p, .limb(.src1p), ._, ._ }, | 5729 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 5516 | .{ ._, ._, .@"or", .tmp2p, .tmp1p, ._, ._ }, | 5730 | .{ ._, ._, .@"test", .tmp1p, .tmp1p, ._, ._ }, |
| 5517 | }, | | |
| 5518 | .trailer = &.{ | | |
| 5519 | .{ ._, ._, .@"test", .tmp2p, .tmp2p, ._, ._ }, | | |
| 5520 | }, | | |
| 5521 | } }, | 5731 | } }, |
| 5522 | } }, | 5732 | } }, |
| 5523 | }) catch |err| switch (err) { | 5733 | }) catch |err| switch (err) { |
| ... | @@ -24063,8 +24273,6 @@ const Select = struct { | ... | @@ -24063,8 +24273,6 @@ const Select = struct { |
| 24063 | backward: ?Mir.Inst.Index, | 24273 | backward: ?Mir.Inst.Index, |
| 24064 | forward: [1]?Mir.Inst.Index, | 24274 | forward: [1]?Mir.Inst.Index, |
| 24065 | }, | 24275 | }, |
| 24066 | limb: Memory.Mod.Rm, | | |
| 24067 | mask_limb: Memory.Mod.Rm, | | |
| 24068 | | 24276 | |
| 24069 | fn emitLabel(s: *Select, label_index: Label) void { | 24277 | fn emitLabel(s: *Select, label_index: Label) void { |
| 24070 | if (label_index == ._) return; | 24278 | if (label_index == ._) return; |
| ... | @@ -24112,23 +24320,6 @@ const Select = struct { | ... | @@ -24112,23 +24320,6 @@ const Select = struct { |
| 24112 | dst_temps: [@intFromEnum(Select.Operand.Ref.src0) - @intFromEnum(Select.Operand.Ref.dst0)]TempSpec.Kind = @splat(.unused), | 24320 | dst_temps: [@intFromEnum(Select.Operand.Ref.src0) - @intFromEnum(Select.Operand.Ref.dst0)]TempSpec.Kind = @splat(.unused), |
| 24113 | each: union(enum) { | 24321 | each: union(enum) { |
| 24114 | once: []const Instruction, | 24322 | once: []const Instruction, |
| 24115 | limb: struct { | | |
| 24116 | of: Select.Operand.Ref.Sized, | | |
| 24117 | header: []const Instruction = &.{}, | | |
| 24118 | first: ?[]const Instruction = null, | | |
| 24119 | body: []const Instruction, | | |
| 24120 | last: ?[]const Instruction = null, | | |
| 24121 | trailer: []const Instruction = &.{}, | | |
| 24122 | }, | | |
| 24123 | limb_and_mask_limb: struct { | | |
| 24124 | of: Select.Operand.Ref.Sized, | | |
| 24125 | of_mask: Select.Operand.Ref.Sized, | | |
| 24126 | header: []const Instruction = &.{}, | | |
| 24127 | first: ?[]const Instruction = null, | | |
| 24128 | body: []const Instruction, | | |
| 24129 | last: ?[]const Instruction = null, | | |
| 24130 | trailer: []const Instruction = &.{}, | | |
| 24131 | }, | | |
| 24132 | }, | 24323 | }, |
| 24133 | }; | 24324 | }; |
| 24134 | | 24325 | |
| ... | @@ -24349,26 +24540,20 @@ const Select = struct { | ... | @@ -24349,26 +24540,20 @@ const Select = struct { |
| 24349 | backward_label, | 24540 | backward_label, |
| 24350 | forward_label, | 24541 | forward_label, |
| 24351 | ref, | 24542 | ref, |
| 24352 | limb, | | |
| 24353 | mask_limb, | | |
| 24354 | simm, | 24543 | simm, |
| 24355 | lea, | 24544 | lea, |
| 24356 | mem, | 24545 | mem, |
| 24357 | }; | 24546 | }; |
| 24358 | const Adjust = enum { | 24547 | const Adjust = enum { |
| 24359 | none, | 24548 | none, |
| 24360 | add_access_size, | 24549 | add_ptr_size, |
| 24361 | sub_access_size, | 24550 | sub_ptr_size, |
| | 24551 | add_ptr_bit_size, |
| | 24552 | sub_ptr_bit_size, |
| 24362 | add_size, | 24553 | add_size, |
| 24363 | sub_size, | 24554 | sub_size, |
| 24364 | add_bit_size, | | |
| 24365 | sub_bit_size, | | |
| 24366 | add_limbs, | | |
| 24367 | sub_limbs, | | |
| 24368 | add_len, | 24555 | add_len, |
| 24369 | sub_len, | 24556 | sub_len, |
| 24370 | add_elem_size, | | |
| 24371 | sub_elem_size, | | |
| 24372 | add_elem_limbs, | 24557 | add_elem_limbs, |
| 24373 | sub_elem_limbs, | 24558 | sub_elem_limbs, |
| 24374 | }; | 24559 | }; |
| ... | @@ -24435,6 +24620,15 @@ const Select = struct { | ... | @@ -24435,6 +24620,15 @@ const Select = struct { |
| 24435 | const tmp4x: Sized = .{ .ref = .tmp4, .size = .xword }; | 24620 | const tmp4x: Sized = .{ .ref = .tmp4, .size = .xword }; |
| 24436 | const tmp4y: Sized = .{ .ref = .tmp4, .size = .yword }; | 24621 | const tmp4y: Sized = .{ .ref = .tmp4, .size = .yword }; |
| 24437 | | 24622 | |
| | 24623 | const tmp5: Sized = .{ .ref = .tmp5, .size = .none }; |
| | 24624 | const tmp5b: Sized = .{ .ref = .tmp5, .size = .byte }; |
| | 24625 | const tmp5w: Sized = .{ .ref = .tmp5, .size = .word }; |
| | 24626 | const tmp5d: Sized = .{ .ref = .tmp5, .size = .dword }; |
| | 24627 | const tmp5p: Sized = .{ .ref = .tmp5, .size = .ptr }; |
| | 24628 | const tmp5q: Sized = .{ .ref = .tmp5, .size = .qword }; |
| | 24629 | const tmp5x: Sized = .{ .ref = .tmp5, .size = .xword }; |
| | 24630 | const tmp5y: Sized = .{ .ref = .tmp5, .size = .yword }; |
| | 24631 | |
| 24438 | const dst0: Sized = .{ .ref = .dst0, .size = .none }; | 24632 | const dst0: Sized = .{ .ref = .dst0, .size = .none }; |
| 24439 | const dst0b: Sized = .{ .ref = .dst0, .size = .byte }; | 24633 | const dst0b: Sized = .{ .ref = .dst0, .size = .byte }; |
| 24440 | const dst0w: Sized = .{ .ref = .dst0, .size = .word }; | 24634 | const dst0w: Sized = .{ .ref = .dst0, .size = .word }; |
| ... | @@ -24515,6 +24709,14 @@ const Select = struct { | ... | @@ -24515,6 +24709,14 @@ const Select = struct { |
| 24515 | const tmp4x: Select.Operand = .{ .tag = .ref, .base = .tmp4x }; | 24709 | const tmp4x: Select.Operand = .{ .tag = .ref, .base = .tmp4x }; |
| 24516 | const tmp4y: Select.Operand = .{ .tag = .ref, .base = .tmp4y }; | 24710 | const tmp4y: Select.Operand = .{ .tag = .ref, .base = .tmp4y }; |
| 24517 | | 24711 | |
| | 24712 | const tmp5b: Select.Operand = .{ .tag = .ref, .base = .tmp5b }; |
| | 24713 | const tmp5w: Select.Operand = .{ .tag = .ref, .base = .tmp5w }; |
| | 24714 | const tmp5d: Select.Operand = .{ .tag = .ref, .base = .tmp5d }; |
| | 24715 | const tmp5p: Select.Operand = .{ .tag = .ref, .base = .tmp5p }; |
| | 24716 | const tmp5q: Select.Operand = .{ .tag = .ref, .base = .tmp5q }; |
| | 24717 | const tmp5x: Select.Operand = .{ .tag = .ref, .base = .tmp5x }; |
| | 24718 | const tmp5y: Select.Operand = .{ .tag = .ref, .base = .tmp5y }; |
| | 24719 | |
| 24518 | const dst0b: Select.Operand = .{ .tag = .ref, .base = .dst0b }; | 24720 | const dst0b: Select.Operand = .{ .tag = .ref, .base = .dst0b }; |
| 24519 | const dst0w: Select.Operand = .{ .tag = .ref, .base = .dst0w }; | 24721 | const dst0w: Select.Operand = .{ .tag = .ref, .base = .dst0w }; |
| 24520 | const dst0d: Select.Operand = .{ .tag = .ref, .base = .dst0d }; | 24722 | const dst0d: Select.Operand = .{ .tag = .ref, .base = .dst0d }; |
| ... | @@ -24539,13 +24741,6 @@ const Select = struct { | ... | @@ -24539,13 +24741,6 @@ const Select = struct { |
| 24539 | const src1x: Select.Operand = .{ .tag = .ref, .base = .src1x }; | 24741 | const src1x: Select.Operand = .{ .tag = .ref, .base = .src1x }; |
| 24540 | const src1y: Select.Operand = .{ .tag = .ref, .base = .src1y }; | 24742 | const src1y: Select.Operand = .{ .tag = .ref, .base = .src1y }; |
| 24541 | | 24743 | |
| 24542 | fn limb(ref: Ref.Sized) Select.Operand { | | |
| 24543 | return .{ .tag = .limb, .base = ref }; | | |
| 24544 | } | | |
| 24545 | fn maskLimb(ref: Ref.Sized) Select.Operand { | | |
| 24546 | return .{ .tag = .mask_limb, .base = ref }; | | |
| 24547 | } | | |
| 24548 | | | |
| 24549 | fn i(imm: i32) Select.Operand { | 24744 | fn i(imm: i32) Select.Operand { |
| 24550 | return .{ .tag = .simm, .imm = imm }; | 24745 | return .{ .tag = .simm, .imm = imm }; |
| 24551 | } | 24746 | } |
| ... | @@ -24673,28 +24868,14 @@ const Select = struct { | ... | @@ -24673,28 +24868,14 @@ const Select = struct { |
| 24673 | fn adjustedImm(op: Select.Operand, s: *const Select) i32 { | 24868 | fn adjustedImm(op: Select.Operand, s: *const Select) i32 { |
| 24674 | return switch (op.adjust) { | 24869 | return switch (op.adjust) { |
| 24675 | .none => op.imm, | 24870 | .none => op.imm, |
| 24676 | .add_access_size => op.imm + @as(i32, @intCast(@divExact(op.base.size.bitSize(s.cg.target), 8))), | 24871 | .add_ptr_size => op.imm + @divExact(s.cg.target.ptrBitWidth(), 8), |
| 24677 | .sub_access_size => op.imm - @as(i32, @intCast(@divExact(op.base.size.bitSize(s.cg.target), 8))), | 24872 | .sub_ptr_size => op.imm - @divExact(s.cg.target.ptrBitWidth(), 8), |
| | 24873 | .add_ptr_bit_size => op.imm + s.cg.target.ptrBitWidth(), |
| | 24874 | .sub_ptr_bit_size => op.imm - s.cg.target.ptrBitWidth(), |
| 24678 | .add_size => op.imm + @as(i32, @intCast(op.base.ref.deref(s).typeOf(s.cg).abiSize(s.cg.pt.zcu))), | 24875 | .add_size => op.imm + @as(i32, @intCast(op.base.ref.deref(s).typeOf(s.cg).abiSize(s.cg.pt.zcu))), |
| 24679 | .sub_size => op.imm - @as(i32, @intCast(op.base.ref.deref(s).typeOf(s.cg).abiSize(s.cg.pt.zcu))), | 24876 | .sub_size => op.imm - @as(i32, @intCast(op.base.ref.deref(s).typeOf(s.cg).abiSize(s.cg.pt.zcu))), |
| 24680 | .add_bit_size => op.imm + @as(i32, @intCast(op.base.ref.deref(s).typeOf(s.cg).bitSize(s.cg.pt.zcu))), | | |
| 24681 | .sub_bit_size => op.imm - @as(i32, @intCast(op.base.ref.deref(s).typeOf(s.cg).bitSize(s.cg.pt.zcu))), | | |
| 24682 | .add_limbs => op.imm + @as(i32, @intCast(@divExact( | | |
| 24683 | op.base.ref.deref(s).typeOf(s.cg).abiSize(s.cg.pt.zcu), | | |
| 24684 | @divExact(op.base.size.bitSize(s.cg.target), 8), | | |
| 24685 | ))), | | |
| 24686 | .sub_limbs => op.imm + @as(i32, @intCast(@divExact( | | |
| 24687 | op.base.ref.deref(s).typeOf(s.cg).abiSize(s.cg.pt.zcu), | | |
| 24688 | @divExact(op.base.size.bitSize(s.cg.target), 8), | | |
| 24689 | ))), | | |
| 24690 | .add_len => op.imm + @as(i32, @intCast(op.base.ref.deref(s).typeOf(s.cg).vectorLen(s.cg.pt.zcu))), | 24877 | .add_len => op.imm + @as(i32, @intCast(op.base.ref.deref(s).typeOf(s.cg).vectorLen(s.cg.pt.zcu))), |
| 24691 | .sub_len => op.imm - @as(i32, @intCast(op.base.ref.deref(s).typeOf(s.cg).vectorLen(s.cg.pt.zcu))), | 24878 | .sub_len => op.imm - @as(i32, @intCast(op.base.ref.deref(s).typeOf(s.cg).vectorLen(s.cg.pt.zcu))), |
| 24692 | .add_elem_size => op.imm + @as(i32, @intCast( | | |
| 24693 | op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).abiSize(s.cg.pt.zcu), | | |
| 24694 | )), | | |
| 24695 | .sub_elem_size => op.imm - @as(i32, @intCast( | | |
| 24696 | op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).abiSize(s.cg.pt.zcu), | | |
| 24697 | )), | | |
| 24698 | .add_elem_limbs => op.imm + @as(i32, @intCast(@divExact( | 24879 | .add_elem_limbs => op.imm + @as(i32, @intCast(@divExact( |
| 24699 | op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).abiSize(s.cg.pt.zcu), | 24880 | op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).abiSize(s.cg.pt.zcu), |
| 24700 | @divExact(op.base.size.bitSize(s.cg.target), 8), | 24881 | @divExact(op.base.size.bitSize(s.cg.target), 8), |
| ... | @@ -24726,7 +24907,6 @@ const Select = struct { | ... | @@ -24726,7 +24907,6 @@ const Select = struct { |
| 24726 | else => |mcv| .{ .mem = try mcv.mem(s.cg, .{ .size = op.base.size }) }, | 24907 | else => |mcv| .{ .mem = try mcv.mem(s.cg, .{ .size = op.base.size }) }, |
| 24727 | .register => |reg| .{ .reg = registerAlias(reg, @intCast(@divExact(op.base.size.bitSize(s.cg.target), 8))) }, | 24908 | .register => |reg| .{ .reg = registerAlias(reg, @intCast(@divExact(op.base.size.bitSize(s.cg.target), 8))) }, |
| 24728 | }, | 24909 | }, |
| 24729 | inline .limb, .mask_limb => |kind| .{ .mem = try op.base.ref.deref(s).tracking(s.cg).short.mem(s.cg, @field(s, @tagName(kind))) }, | | |
| 24730 | .simm => .{ .imm = .s(op.adjustedImm(s)) }, | 24910 | .simm => .{ .imm = .s(op.adjustedImm(s)) }, |
| 24731 | .lea => .{ .mem = .{ | 24911 | .lea => .{ .mem = .{ |
| 24732 | .base = .{ .reg = registerAlias(op.base.ref.deref(s).tracking(s.cg).short.register, @divExact(s.cg.target.ptrBitWidth(), 8)) }, | 24912 | .base = .{ .reg = registerAlias(op.base.ref.deref(s).tracking(s.cg).short.register, @divExact(s.cg.target.ptrBitWidth(), 8)) }, |
| ... | @@ -24775,8 +24955,6 @@ fn select( | ... | @@ -24775,8 +24955,6 @@ fn select( |
| 24775 | .cg = cg, | 24955 | .cg = cg, |
| 24776 | .temps = undefined, | 24956 | .temps = undefined, |
| 24777 | .labels = @splat(.{ .forward = @splat(null), .backward = null }), | 24957 | .labels = @splat(.{ .forward = @splat(null), .backward = null }), |
| 24778 | .limb = undefined, | | |
| 24779 | .mask_limb = undefined, | | |
| 24780 | }; | 24958 | }; |
| 24781 | const tmp_slots = s.temps[@intFromEnum(Select.Operand.Ref.tmp0)..@intFromEnum(Select.Operand.Ref.dst0)]; | 24959 | const tmp_slots = s.temps[@intFromEnum(Select.Operand.Ref.tmp0)..@intFromEnum(Select.Operand.Ref.dst0)]; |
| 24782 | const dst_slots = s.temps[@intFromEnum(Select.Operand.Ref.dst0)..@intFromEnum(Select.Operand.Ref.src0)]; | 24960 | const dst_slots = s.temps[@intFromEnum(Select.Operand.Ref.dst0)..@intFromEnum(Select.Operand.Ref.src0)]; |
| ... | @@ -24797,74 +24975,11 @@ fn select( | ... | @@ -24797,74 +24975,11 @@ fn select( |
| 24797 | @memcpy(dst_slots[0..dst_temps.len], dst_temps); | 24975 | @memcpy(dst_slots[0..dst_temps.len], dst_temps); |
| 24798 | | 24976 | |
| 24799 | switch (case.each) { | 24977 | switch (case.each) { |
| 24800 | .once => |body| for (body) |inst| try s.emit(inst), | 24978 | .once => |body| { |
| 24801 | .limb => |limb| { | 24979 | for (body) |inst| try s.emit(inst); |
| 24802 | const limb_of_size: i32 = @intCast(limb.of.ref.deref(&s).typeOf(cg).abiSize(cg.pt.zcu)); | 24980 | s.emitLabel(.@"0:"); |
| 24803 | s.limb = .{ | | |
| 24804 | .size = limb.of.size, | | |
| 24805 | .index = (try Select.Operand.tmp0p.lower(&s)).reg, | | |
| 24806 | .disp = limb_of_size, | | |
| 24807 | }; | | |
| 24808 | for (limb.header) |inst| try s.emit(inst); | | |
| 24809 | try s.emit(.{ ._, ._, .mov, .tmp0p, .i(-limb_of_size), ._, ._ }); | | |
| 24810 | assert(s.labels[0].backward == null); | | |
| 24811 | s.labels[0].backward = @intCast(cg.mir_instructions.len); | | |
| 24812 | for (limb.body) |inst| try s.emit(inst); | | |
| 24813 | try s.emit(.{ ._, ._, .add, .tmp0p, .i(@intCast(@divExact(limb.of.size.bitSize(cg.target), 8))), ._, ._ }); | | |
| 24814 | try s.emit(.{ ._, ._nc, .j, .@"0b", ._, ._, ._ }); | | |
| 24815 | for (limb.trailer) |inst| try s.emit(inst); | | |
| 24816 | }, | | |
| 24817 | .limb_and_mask_limb => |limb| { | | |
| 24818 | const limb_of_size: i32 = @intCast(limb.of.ref.deref(&s).typeOf(cg).abiSize(cg.pt.zcu)); | | |
| 24819 | s.limb = .{ | | |
| 24820 | .size = limb.of.size, | | |
| 24821 | .index = (try Select.Operand.tmp0p.lower(&s)).reg, | | |
| 24822 | .disp = limb_of_size, | | |
| 24823 | }; | | |
| 24824 | const mask_limb_bit_size: u31 = @intCast(@divExact( | | |
| 24825 | limb.of.size.bitSize(cg.target), | | |
| 24826 | limb.of_mask.size.bitSize(cg.target), | | |
| 24827 | )); | | |
| 24828 | if (mask_limb_bit_size >= 8) { | | |
| 24829 | s.mask_limb = .{ | | |
| 24830 | .size = .fromBitSize(mask_limb_bit_size), | | |
| 24831 | .index = (try Select.Operand.tmp1p.lower(&s)).reg, | | |
| 24832 | }; | | |
| 24833 | for (limb.header) |inst| try s.emit(inst); | | |
| 24834 | try s.emit(.{ ._, ._, .mov, .tmp0p, .i(-limb_of_size), ._, ._ }); | | |
| 24835 | try s.emit(.{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }); | | |
| 24836 | assert(s.labels[0].backward == null); | | |
| 24837 | s.labels[0].backward = @intCast(cg.mir_instructions.len); | | |
| 24838 | for (limb.body) |inst| try s.emit(inst); | | |
| 24839 | try s.emit(.{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, @divExact(mask_limb_bit_size, 8)), ._, ._ }); | | |
| 24840 | try s.emit(.{ ._, ._, .add, .tmp0p, .i(@intCast(@divExact(limb.of.size.bitSize(cg.target), 8))), ._, ._ }); | | |
| 24841 | try s.emit(.{ ._, ._nc, .j, .@"0b", ._, ._, ._ }); | | |
| 24842 | for (limb.trailer) |inst| try s.emit(inst); | | |
| 24843 | } else { | | |
| 24844 | for (limb.header) |inst| try s.emit(inst); | | |
| 24845 | try s.emit(.{ ._, ._, .mov, .tmp0p, .i(-limb_of_size), ._, ._ }); | | |
| 24846 | try s.emit(.{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }); | | |
| 24847 | try s.emit(.{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }); | | |
| 24848 | assert(s.labels[0].backward == null); | | |
| 24849 | s.labels[0].backward = @intCast(cg.mir_instructions.len); | | |
| 24850 | for (limb.body) |inst| try s.emit(inst); | | |
| 24851 | try s.emit(.{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, mask_limb_bit_size), ._, ._ }); | | |
| 24852 | try s.emit(.{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ }); | | |
| 24853 | try s.emit(.{ ._, ._nz, .j, .@"1f", ._, ._, ._ }); | | |
| 24854 | try s.emit(.{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }); | | |
| 24855 | try s.emit(.{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }); | | |
| 24856 | try s.emit(.{ ._, ._, .mov, .memid(.{ .ref = limb.of_mask.ref, .size = .byte }, .tmp3, -1), .tmp2b, ._, ._ }); | | |
| 24857 | try s.emit(.{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ }); | | |
| 24858 | try s.emit(.{ .@"1:", ._, .add, .tmp0p, .i(@intCast(@divExact(limb.of.size.bitSize(cg.target), 8))), ._, ._ }); | | |
| 24859 | try s.emit(.{ ._, ._nc, .j, .@"0b", ._, ._, ._ }); | | |
| 24860 | try s.emit(.{ ._, ._, .lea, .tmp3d, .lead(.none, .tmp1, -1), ._, ._ }); | | |
| 24861 | try s.emit(.{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ }); | | |
| 24862 | try s.emit(.{ ._, ._, .mov, .memi(.{ .ref = limb.of_mask.ref, .size = .byte }, .tmp3), .tmp2b, ._, ._ }); | | |
| 24863 | for (limb.trailer) |inst| try s.emit(inst); | | |
| 24864 | } | | |
| 24865 | }, | 24981 | }, |
| 24866 | } | 24982 | } |
| 24867 | s.emitLabel(.@"0:"); | | |
| 24868 | | 24983 | |
| 24869 | for (dst_temps, case.dst_temps[0..dst_temps.len]) |dst_temp, dst_kind| dst_kind.finish(dst_temp, &s); | 24984 | for (dst_temps, case.dst_temps[0..dst_temps.len]) |dst_temp, dst_kind| dst_kind.finish(dst_temp, &s); |
| 24870 | for (case.extra_temps, tmp_slots) |spec, temp| if (spec.kind != .unused) try temp.die(cg); | 24985 | for (case.extra_temps, tmp_slots) |spec, temp| if (spec.kind != .unused) try temp.die(cg); |