| ... | @@ -2404,8 +2404,6 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2404,8 +2404,6 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2404 | .max, | 2404 | .max, |
| 2405 | => |air_tag| try cg.airBinOp(inst, air_tag), | 2405 | => |air_tag| try cg.airBinOp(inst, air_tag), |
| 2406 | | 2406 | |
| 2407 | .ptr_add, .ptr_sub => |air_tag| try cg.airPtrArithmetic(inst, air_tag), | | |
| 2408 | | | |
| 2409 | .shr, .shr_exact => try cg.airShlShrBinOp(inst), | 2407 | .shr, .shr_exact => try cg.airShlShrBinOp(inst), |
| 2410 | .shl, .shl_exact => try cg.airShlShrBinOp(inst), | 2408 | .shl, .shl_exact => try cg.airShlShrBinOp(inst), |
| 2411 | | 2409 | |
| ... | @@ -2524,14 +2522,262 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2524,14 +2522,262 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2524 | => return cg.fail("TODO implement optimized float mode", .{}), | 2522 | => return cg.fail("TODO implement optimized float mode", .{}), |
| 2525 | | 2523 | |
| 2526 | .arg => try cg.airDbgArg(inst), | 2524 | .arg => try cg.airDbgArg(inst), |
| | 2525 | .ptr_add => |air_tag| if (use_old) try cg.airPtrArithmetic(inst, air_tag) else { |
| | 2526 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; |
| | 2527 | const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data; |
| | 2528 | var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs }); |
| | 2529 | try ops[0].toSlicePtr(cg); |
| | 2530 | var res: [1]Temp = undefined; |
| | 2531 | cg.select(&res, &.{cg.typeOfIndex(inst)}, &ops, comptime &.{ .{ |
| | 2532 | .patterns = &.{ |
| | 2533 | .{ .src = .{ .to_gpr, .simm32 } }, |
| | 2534 | }, |
| | 2535 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 2536 | .each = .{ .once = &.{ |
| | 2537 | .{ ._, ._, .lea, .dst0p, .leaa(.none, .src0, .add_src0_elem_size_times_src1), ._, ._ }, |
| | 2538 | } }, |
| | 2539 | }, .{ |
| | 2540 | .dst_constraints = .{.{ .elem_size_is = 1 }}, |
| | 2541 | .patterns = &.{ |
| | 2542 | .{ .src = .{ .to_gpr, .to_gpr } }, |
| | 2543 | }, |
| | 2544 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 2545 | .each = .{ .once = &.{ |
| | 2546 | .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .src1), ._, ._ }, |
| | 2547 | } }, |
| | 2548 | }, .{ |
| | 2549 | .dst_constraints = .{.{ .elem_size_is = 2 }}, |
| | 2550 | .patterns = &.{ |
| | 2551 | .{ .src = .{ .to_gpr, .to_gpr } }, |
| | 2552 | }, |
| | 2553 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 2554 | .each = .{ .once = &.{ |
| | 2555 | .{ ._, ._, .lea, .dst0p, .leasi(.none, .src0, .@"2", .src1), ._, ._ }, |
| | 2556 | } }, |
| | 2557 | }, .{ |
| | 2558 | .dst_constraints = .{.{ .elem_size_is = 2 + 1 }}, |
| | 2559 | .patterns = &.{ |
| | 2560 | .{ .src = .{ .to_gpr, .to_gpr } }, |
| | 2561 | }, |
| | 2562 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 2563 | .each = .{ .once = &.{ |
| | 2564 | .{ ._, ._, .lea, .dst0p, .leasi(.none, .src1, .@"2", .src1), ._, ._ }, |
| | 2565 | .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, |
| | 2566 | } }, |
| | 2567 | }, .{ |
| | 2568 | .dst_constraints = .{.{ .elem_size_is = 4 }}, |
| | 2569 | .patterns = &.{ |
| | 2570 | .{ .src = .{ .to_gpr, .to_gpr } }, |
| | 2571 | }, |
| | 2572 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 2573 | .each = .{ .once = &.{ |
| | 2574 | .{ ._, ._, .lea, .dst0p, .leasi(.none, .src0, .@"4", .src1), ._, ._ }, |
| | 2575 | } }, |
| | 2576 | }, .{ |
| | 2577 | .dst_constraints = .{.{ .elem_size_is = 4 + 1 }}, |
| | 2578 | .patterns = &.{ |
| | 2579 | .{ .src = .{ .to_gpr, .to_gpr } }, |
| | 2580 | }, |
| | 2581 | .dst_temps = .{.{ .ref = .src1 }}, |
| | 2582 | .each = .{ .once = &.{ |
| | 2583 | .{ ._, ._, .lea, .dst0p, .leasi(.none, .src1, .@"4", .src1), ._, ._ }, |
| | 2584 | .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, |
| | 2585 | } }, |
| | 2586 | }, .{ |
| | 2587 | .required_features = .{ .@"64bit", null, null, null }, |
| | 2588 | .dst_constraints = .{.{ .elem_size_is = 8 }}, |
| | 2589 | .patterns = &.{ |
| | 2590 | .{ .src = .{ .to_gpr, .to_gpr } }, |
| | 2591 | }, |
| | 2592 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 2593 | .each = .{ .once = &.{ |
| | 2594 | .{ ._, ._, .lea, .dst0p, .leasi(.none, .src0, .@"8", .src1), ._, ._ }, |
| | 2595 | } }, |
| | 2596 | }, .{ |
| | 2597 | .required_features = .{ .@"64bit", null, null, null }, |
| | 2598 | .dst_constraints = .{.{ .elem_size_is = 8 + 1 }}, |
| | 2599 | .patterns = &.{ |
| | 2600 | .{ .src = .{ .to_gpr, .to_gpr } }, |
| | 2601 | }, |
| | 2602 | .dst_temps = .{.{ .ref = .src1 }}, |
| | 2603 | .each = .{ .once = &.{ |
| | 2604 | .{ ._, ._, .lea, .dst0p, .leasi(.none, .src1, .@"8", .src1), ._, ._ }, |
| | 2605 | .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, |
| | 2606 | } }, |
| | 2607 | }, .{ |
| | 2608 | .dst_constraints = .{.po2_elem_size}, |
| | 2609 | .patterns = &.{ |
| | 2610 | .{ .src = .{ .to_gpr, .to_mut_gpr } }, |
| | 2611 | }, |
| | 2612 | .dst_temps = .{.{ .ref = .src1 }}, |
| | 2613 | .clobbers = .{ .eflags = true }, |
| | 2614 | .each = .{ .once = &.{ |
| | 2615 | .{ ._, ._l, .sh, .src1p, .sa(.none, .add_log2_src0_elem_size), ._, ._ }, |
| | 2616 | .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .src1), ._, ._ }, |
| | 2617 | } }, |
| | 2618 | }, .{ |
| | 2619 | .patterns = &.{ |
| | 2620 | .{ .src = .{ .to_gpr, .to_gpr } }, |
| | 2621 | }, |
| | 2622 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 2623 | .clobbers = .{ .eflags = true }, |
| | 2624 | .each = .{ .once = &.{ |
| | 2625 | .{ ._, .i_, .mul, .dst0p, .src1p, .sa(.none, .add_src0_elem_size), ._ }, |
| | 2626 | .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, |
| | 2627 | } }, |
| | 2628 | } }) catch |err| switch (err) { |
| | 2629 | error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{ |
| | 2630 | @tagName(air_tag), |
| | 2631 | cg.typeOf(bin_op.lhs).fmt(pt), |
| | 2632 | ops[0].tracking(cg), |
| | 2633 | ops[1].tracking(cg), |
| | 2634 | }), |
| | 2635 | else => |e| return e, |
| | 2636 | }; |
| | 2637 | for (ops) |op| for (res) |r| { |
| | 2638 | if (op.index == r.index) break; |
| | 2639 | } else try op.die(cg); |
| | 2640 | try res[0].moveTo(inst, cg); |
| | 2641 | }, |
| | 2642 | .ptr_sub => |air_tag| if (use_old) try cg.airPtrArithmetic(inst, air_tag) else { |
| | 2643 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; |
| | 2644 | const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data; |
| | 2645 | var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs }); |
| | 2646 | try ops[0].toSlicePtr(cg); |
| | 2647 | var res: [1]Temp = undefined; |
| | 2648 | cg.select(&res, &.{cg.typeOfIndex(inst)}, &ops, comptime &.{ .{ |
| | 2649 | .patterns = &.{ |
| | 2650 | .{ .src = .{ .to_gpr, .simm32 } }, |
| | 2651 | }, |
| | 2652 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 2653 | .each = .{ .once = &.{ |
| | 2654 | .{ ._, ._, .lea, .dst0p, .leaa(.none, .src0, .sub_src0_elem_size_times_src1), ._, ._ }, |
| | 2655 | } }, |
| | 2656 | }, .{ |
| | 2657 | .dst_constraints = .{.{ .elem_size_is = 1 }}, |
| | 2658 | .patterns = &.{ |
| | 2659 | .{ .src = .{ .to_gpr, .to_mut_gpr } }, |
| | 2660 | }, |
| | 2661 | .dst_temps = .{.{ .ref = .src1 }}, |
| | 2662 | .clobbers = .{ .eflags = true }, |
| | 2663 | .each = .{ .once = &.{ |
| | 2664 | .{ ._, ._, .neg, .src1p, ._, ._, ._ }, |
| | 2665 | .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .src1), ._, ._ }, |
| | 2666 | } }, |
| | 2667 | }, .{ |
| | 2668 | .dst_constraints = .{.{ .elem_size_is = 2 }}, |
| | 2669 | .patterns = &.{ |
| | 2670 | .{ .src = .{ .to_gpr, .to_mut_gpr } }, |
| | 2671 | }, |
| | 2672 | .dst_temps = .{.{ .ref = .src1 }}, |
| | 2673 | .clobbers = .{ .eflags = true }, |
| | 2674 | .each = .{ .once = &.{ |
| | 2675 | .{ ._, ._, .neg, .src1p, ._, ._, ._ }, |
| | 2676 | .{ ._, ._, .lea, .dst0p, .leasi(.none, .src0, .@"2", .src1), ._, ._ }, |
| | 2677 | } }, |
| | 2678 | }, .{ |
| | 2679 | .dst_constraints = .{.{ .elem_size_is = 2 + 1 }}, |
| | 2680 | .patterns = &.{ |
| | 2681 | .{ .src = .{ .to_gpr, .to_gpr } }, |
| | 2682 | }, |
| | 2683 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 2684 | .clobbers = .{ .eflags = true }, |
| | 2685 | .each = .{ .once = &.{ |
| | 2686 | .{ ._, ._, .lea, .dst0p, .leasi(.none, .src1, .@"2", .src1), ._, ._ }, |
| | 2687 | .{ ._, ._, .neg, .dst0p, ._, ._, ._ }, |
| | 2688 | .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, |
| | 2689 | } }, |
| | 2690 | }, .{ |
| | 2691 | .dst_constraints = .{.{ .elem_size_is = 4 }}, |
| | 2692 | .patterns = &.{ |
| | 2693 | .{ .src = .{ .to_gpr, .to_mut_gpr } }, |
| | 2694 | }, |
| | 2695 | .dst_temps = .{.{ .ref = .src1 }}, |
| | 2696 | .clobbers = .{ .eflags = true }, |
| | 2697 | .each = .{ .once = &.{ |
| | 2698 | .{ ._, ._, .neg, .src1p, ._, ._, ._ }, |
| | 2699 | .{ ._, ._, .lea, .dst0p, .leasi(.none, .src0, .@"4", .src1), ._, ._ }, |
| | 2700 | } }, |
| | 2701 | }, .{ |
| | 2702 | .dst_constraints = .{.{ .elem_size_is = 4 + 1 }}, |
| | 2703 | .patterns = &.{ |
| | 2704 | .{ .src = .{ .to_gpr, .to_gpr } }, |
| | 2705 | }, |
| | 2706 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 2707 | .clobbers = .{ .eflags = true }, |
| | 2708 | .each = .{ .once = &.{ |
| | 2709 | .{ ._, ._, .lea, .dst0p, .leasi(.none, .src1, .@"4", .src1), ._, ._ }, |
| | 2710 | .{ ._, ._, .neg, .dst0p, ._, ._, ._ }, |
| | 2711 | .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, |
| | 2712 | } }, |
| | 2713 | }, .{ |
| | 2714 | .required_features = .{ .@"64bit", null, null, null }, |
| | 2715 | .dst_constraints = .{.{ .elem_size_is = 8 }}, |
| | 2716 | .patterns = &.{ |
| | 2717 | .{ .src = .{ .to_gpr, .to_mut_gpr } }, |
| | 2718 | }, |
| | 2719 | .dst_temps = .{.{ .ref = .src1 }}, |
| | 2720 | .clobbers = .{ .eflags = true }, |
| | 2721 | .each = .{ .once = &.{ |
| | 2722 | .{ ._, ._, .neg, .src1p, ._, ._, ._ }, |
| | 2723 | .{ ._, ._, .lea, .dst0p, .leasi(.none, .src0, .@"8", .src1), ._, ._ }, |
| | 2724 | } }, |
| | 2725 | }, .{ |
| | 2726 | .required_features = .{ .@"64bit", null, null, null }, |
| | 2727 | .dst_constraints = .{.{ .elem_size_is = 8 + 1 }}, |
| | 2728 | .patterns = &.{ |
| | 2729 | .{ .src = .{ .to_gpr, .to_gpr } }, |
| | 2730 | }, |
| | 2731 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 2732 | .clobbers = .{ .eflags = true }, |
| | 2733 | .each = .{ .once = &.{ |
| | 2734 | .{ ._, ._, .lea, .dst0p, .leasi(.none, .src1, .@"8", .src1), ._, ._ }, |
| | 2735 | .{ ._, ._, .neg, .dst0p, ._, ._, ._ }, |
| | 2736 | .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, |
| | 2737 | } }, |
| | 2738 | }, .{ |
| | 2739 | .dst_constraints = .{.po2_elem_size}, |
| | 2740 | .patterns = &.{ |
| | 2741 | .{ .src = .{ .to_gpr, .to_mut_gpr } }, |
| | 2742 | }, |
| | 2743 | .dst_temps = .{.{ .ref = .src1 }}, |
| | 2744 | .clobbers = .{ .eflags = true }, |
| | 2745 | .each = .{ .once = &.{ |
| | 2746 | .{ ._, ._l, .sa, .src1p, .sa(.none, .add_log2_src0_elem_size), ._, ._ }, |
| | 2747 | .{ ._, ._, .neg, .src1p, ._, ._, ._ }, |
| | 2748 | .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .src1), ._, ._ }, |
| | 2749 | } }, |
| | 2750 | }, .{ |
| | 2751 | .patterns = &.{ |
| | 2752 | .{ .src = .{ .to_gpr, .to_gpr } }, |
| | 2753 | }, |
| | 2754 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 2755 | .clobbers = .{ .eflags = true }, |
| | 2756 | .each = .{ .once = &.{ |
| | 2757 | .{ ._, .i_, .mul, .dst0p, .src1p, .sa(.none, .sub_src0_elem_size), ._ }, |
| | 2758 | .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, |
| | 2759 | } }, |
| | 2760 | } }) catch |err| switch (err) { |
| | 2761 | error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{ |
| | 2762 | @tagName(air_tag), |
| | 2763 | cg.typeOf(bin_op.lhs).fmt(pt), |
| | 2764 | ops[0].tracking(cg), |
| | 2765 | ops[1].tracking(cg), |
| | 2766 | }), |
| | 2767 | else => |e| return e, |
| | 2768 | }; |
| | 2769 | for (ops) |op| for (res) |r| { |
| | 2770 | if (op.index == r.index) break; |
| | 2771 | } else try op.die(cg); |
| | 2772 | try res[0].moveTo(inst, cg); |
| | 2773 | }, |
| 2527 | .alloc => if (use_old) try cg.airAlloc(inst) else { | 2774 | .alloc => if (use_old) try cg.airAlloc(inst) else { |
| 2528 | var slot = try cg.tempFromValue(cg.typeOfIndex(inst), .{ .lea_frame = .{ | 2775 | var slot = try cg.tempFromValue(cg.typeOfIndex(inst), .{ .lea_frame = .{ |
| 2529 | .index = try cg.allocMemPtr(inst), | 2776 | .index = try cg.allocMemPtr(inst), |
| 2530 | } }); | 2777 | } }); |
| 2531 | try slot.moveTo(inst, cg); | 2778 | try slot.moveTo(inst, cg); |
| 2532 | }, | 2779 | }, |
| 2533 | .inferred_alloc => unreachable, | 2780 | .inferred_alloc, .inferred_alloc_comptime => unreachable, |
| 2534 | .inferred_alloc_comptime => unreachable, | | |
| 2535 | .ret_ptr => if (use_old) try cg.airRetPtr(inst) else { | 2781 | .ret_ptr => if (use_old) try cg.airRetPtr(inst) else { |
| 2536 | var slot = switch (cg.ret_mcv.long) { | 2782 | var slot = switch (cg.ret_mcv.long) { |
| 2537 | else => unreachable, | 2783 | else => unreachable, |
| ... | @@ -2901,8 +3147,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -2901,8 +3147,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2901 | }), | 3147 | }), |
| 2902 | else => |e| return e, | 3148 | else => |e| return e, |
| 2903 | }; | 3149 | }; |
| 2904 | if (ops[0].index != res[0].index) try ops[0].die(cg); | 3150 | for (ops) |op| for (res) |r| { |
| 2905 | if (ops[1].index != res[0].index) try ops[1].die(cg); | 3151 | if (op.index == r.index) break; |
| | 3152 | } else try op.die(cg); |
| 2906 | try res[0].moveTo(inst, cg); | 3153 | try res[0].moveTo(inst, cg); |
| 2907 | }, | 3154 | }, |
| 2908 | .not => |air_tag| if (use_old) try cg.airUnOp(inst, air_tag) else { | 3155 | .not => |air_tag| if (use_old) try cg.airUnOp(inst, air_tag) else { |
| ... | @@ -3953,7 +4200,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -3953,7 +4200,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 3953 | }), | 4200 | }), |
| 3954 | else => |e| return e, | 4201 | else => |e| return e, |
| 3955 | }; | 4202 | }; |
| 3956 | if (ops[0].index != res[0].index) try ops[0].die(cg); | 4203 | for (ops) |op| for (res) |r| { |
| | 4204 | if (op.index == r.index) break; |
| | 4205 | } else try op.die(cg); |
| 3957 | try res[0].moveTo(inst, cg); | 4206 | try res[0].moveTo(inst, cg); |
| 3958 | }, | 4207 | }, |
| 3959 | | 4208 | |
| ... | @@ -5016,6 +5265,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5016,6 +5265,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5016 | .unused, | 5265 | .unused, |
| 5017 | }, | 5266 | }, |
| 5018 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5267 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 5268 | .clobbers = .{ .eflags = true }, |
| 5019 | .each = .{ .once = &.{ | 5269 | .each = .{ .once = &.{ |
| 5020 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, | 5270 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| 5021 | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, | 5271 | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| ... | @@ -5042,6 +5292,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5042,6 +5292,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5042 | .unused, | 5292 | .unused, |
| 5043 | }, | 5293 | }, |
| 5044 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5294 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 5295 | .clobbers = .{ .eflags = true }, |
| 5045 | .each = .{ .once = &.{ | 5296 | .each = .{ .once = &.{ |
| 5046 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, | 5297 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| 5047 | .{ .@"0:", ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, | 5298 | .{ .@"0:", ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, |
| ... | @@ -5067,6 +5318,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5067,6 +5318,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5067 | .unused, | 5318 | .unused, |
| 5068 | }, | 5319 | }, |
| 5069 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5320 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 5321 | .clobbers = .{ .eflags = true }, |
| 5070 | .each = .{ .once = &.{ | 5322 | .each = .{ .once = &.{ |
| 5071 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, | 5323 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| 5072 | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, | 5324 | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| ... | @@ -5094,6 +5346,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5094,6 +5346,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5094 | .unused, | 5346 | .unused, |
| 5095 | }, | 5347 | }, |
| 5096 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5348 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 5349 | .clobbers = .{ .eflags = true }, |
| 5097 | .each = .{ .once = &.{ | 5350 | .each = .{ .once = &.{ |
| 5098 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, | 5351 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| 5099 | .{ .@"0:", ._, .mov, .dst0d, .si(-1), ._, ._ }, | 5352 | .{ .@"0:", ._, .mov, .dst0d, .si(-1), ._, ._ }, |
| ... | @@ -5120,6 +5373,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5120,6 +5373,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5120 | .unused, | 5373 | .unused, |
| 5121 | }, | 5374 | }, |
| 5122 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5375 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 5376 | .clobbers = .{ .eflags = true }, |
| 5123 | .each = .{ .once = &.{ | 5377 | .each = .{ .once = &.{ |
| 5124 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, | 5378 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 5125 | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, | 5379 | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| ... | @@ -5146,6 +5400,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5146,6 +5400,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5146 | .unused, | 5400 | .unused, |
| 5147 | }, | 5401 | }, |
| 5148 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5402 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 5403 | .clobbers = .{ .eflags = true }, |
| 5149 | .each = .{ .once = &.{ | 5404 | .each = .{ .once = &.{ |
| 5150 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, | 5405 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 5151 | .{ .@"0:", ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, | 5406 | .{ .@"0:", ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ }, |
| ... | @@ -5171,6 +5426,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5171,6 +5426,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5171 | .unused, | 5426 | .unused, |
| 5172 | }, | 5427 | }, |
| 5173 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5428 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 5429 | .clobbers = .{ .eflags = true }, |
| 5174 | .each = .{ .once = &.{ | 5430 | .each = .{ .once = &.{ |
| 5175 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, | 5431 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 5176 | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, | 5432 | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| ... | @@ -5198,6 +5454,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5198,6 +5454,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5198 | .unused, | 5454 | .unused, |
| 5199 | }, | 5455 | }, |
| 5200 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5456 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 5457 | .clobbers = .{ .eflags = true }, |
| 5201 | .each = .{ .once = &.{ | 5458 | .each = .{ .once = &.{ |
| 5202 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, | 5459 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 5203 | .{ .@"0:", ._, .mov, .dst0d, .si(-1), ._, ._ }, | 5460 | .{ .@"0:", ._, .mov, .dst0d, .si(-1), ._, ._ }, |
| ... | @@ -5224,6 +5481,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5224,6 +5481,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5224 | .unused, | 5481 | .unused, |
| 5225 | }, | 5482 | }, |
| 5226 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5483 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 5484 | .clobbers = .{ .eflags = true }, |
| 5227 | .each = .{ .once = &.{ | 5485 | .each = .{ .once = &.{ |
| 5228 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, | 5486 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| 5229 | .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, | 5487 | .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| ... | @@ -5253,6 +5511,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5253,6 +5511,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5253 | .unused, | 5511 | .unused, |
| 5254 | }, | 5512 | }, |
| 5255 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5513 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 5514 | .clobbers = .{ .eflags = true }, |
| 5256 | .each = .{ .once = &.{ | 5515 | .each = .{ .once = &.{ |
| 5257 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, | 5516 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| 5258 | .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, | 5517 | .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| ... | @@ -5281,6 +5540,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5281,6 +5540,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5281 | .unused, | 5540 | .unused, |
| 5282 | }, | 5541 | }, |
| 5283 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5542 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 5543 | .clobbers = .{ .eflags = true }, |
| 5284 | .each = .{ .once = &.{ | 5544 | .each = .{ .once = &.{ |
| 5285 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, | 5545 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| 5286 | .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ }, | 5546 | .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ }, |
| ... | @@ -5309,6 +5569,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5309,6 +5569,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5309 | .unused, | 5569 | .unused, |
| 5310 | }, | 5570 | }, |
| 5311 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5571 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 5572 | .clobbers = .{ .eflags = true }, |
| 5312 | .each = .{ .once = &.{ | 5573 | .each = .{ .once = &.{ |
| 5313 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, | 5574 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 5314 | .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, | 5575 | .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| ... | @@ -5338,6 +5599,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5338,6 +5599,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5338 | .unused, | 5599 | .unused, |
| 5339 | }, | 5600 | }, |
| 5340 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5601 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 5602 | .clobbers = .{ .eflags = true }, |
| 5341 | .each = .{ .once = &.{ | 5603 | .each = .{ .once = &.{ |
| 5342 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, | 5604 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 5343 | .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, | 5605 | .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| ... | @@ -5366,6 +5628,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5366,6 +5628,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5366 | .unused, | 5628 | .unused, |
| 5367 | }, | 5629 | }, |
| 5368 | .dst_temps = .{.{ .rc = .general_purpose }}, | 5630 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 5631 | .clobbers = .{ .eflags = true }, |
| 5369 | .each = .{ .once = &.{ | 5632 | .each = .{ .once = &.{ |
| 5370 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, | 5633 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 5371 | .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ }, | 5634 | .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ }, |
| ... | @@ -5394,6 +5657,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5394,6 +5657,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5394 | .unused, | 5657 | .unused, |
| 5395 | }, | 5658 | }, |
| 5396 | .dst_temps = .{.mem}, | 5659 | .dst_temps = .{.mem}, |
| | 5660 | .clobbers = .{ .eflags = true }, |
| 5397 | .each = .{ .once = &.{ | 5661 | .each = .{ .once = &.{ |
| 5398 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 5662 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5399 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, | 5663 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, |
| ... | @@ -5419,6 +5683,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5419,6 +5683,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5419 | .unused, | 5683 | .unused, |
| 5420 | }, | 5684 | }, |
| 5421 | .dst_temps = .{.mem}, | 5685 | .dst_temps = .{.mem}, |
| | 5686 | .clobbers = .{ .eflags = true }, |
| 5422 | .each = .{ .once = &.{ | 5687 | .each = .{ .once = &.{ |
| 5423 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 5688 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5424 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, | 5689 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, |
| ... | @@ -5444,6 +5709,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5444,6 +5709,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5444 | .unused, | 5709 | .unused, |
| 5445 | }, | 5710 | }, |
| 5446 | .dst_temps = .{.mem}, | 5711 | .dst_temps = .{.mem}, |
| | 5712 | .clobbers = .{ .eflags = true }, |
| 5447 | .each = .{ .once = &.{ | 5713 | .each = .{ .once = &.{ |
| 5448 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 5714 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5449 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, | 5715 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, |
| ... | @@ -5469,6 +5735,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5469,6 +5735,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5469 | .unused, | 5735 | .unused, |
| 5470 | }, | 5736 | }, |
| 5471 | .dst_temps = .{.mem}, | 5737 | .dst_temps = .{.mem}, |
| | 5738 | .clobbers = .{ .eflags = true }, |
| 5472 | .each = .{ .once = &.{ | 5739 | .each = .{ .once = &.{ |
| 5473 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 5740 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5474 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, | 5741 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, |
| ... | @@ -5494,6 +5761,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5494,6 +5761,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5494 | .unused, | 5761 | .unused, |
| 5495 | }, | 5762 | }, |
| 5496 | .dst_temps = .{.mem}, | 5763 | .dst_temps = .{.mem}, |
| | 5764 | .clobbers = .{ .eflags = true }, |
| 5497 | .each = .{ .once = &.{ | 5765 | .each = .{ .once = &.{ |
| 5498 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 5766 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5499 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, | 5767 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, |
| ... | @@ -5519,6 +5787,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5519,6 +5787,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5519 | .unused, | 5787 | .unused, |
| 5520 | }, | 5788 | }, |
| 5521 | .dst_temps = .{.mem}, | 5789 | .dst_temps = .{.mem}, |
| | 5790 | .clobbers = .{ .eflags = true }, |
| 5522 | .each = .{ .once = &.{ | 5791 | .each = .{ .once = &.{ |
| 5523 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 5792 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5524 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, | 5793 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, |
| ... | @@ -5544,6 +5813,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5544,6 +5813,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5544 | .unused, | 5813 | .unused, |
| 5545 | }, | 5814 | }, |
| 5546 | .dst_temps = .{.mem}, | 5815 | .dst_temps = .{.mem}, |
| | 5816 | .clobbers = .{ .eflags = true }, |
| 5547 | .each = .{ .once = &.{ | 5817 | .each = .{ .once = &.{ |
| 5548 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 5818 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5549 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, | 5819 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| ... | @@ -5569,6 +5839,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5569,6 +5839,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5569 | .unused, | 5839 | .unused, |
| 5570 | }, | 5840 | }, |
| 5571 | .dst_temps = .{.mem}, | 5841 | .dst_temps = .{.mem}, |
| | 5842 | .clobbers = .{ .eflags = true }, |
| 5572 | .each = .{ .once = &.{ | 5843 | .each = .{ .once = &.{ |
| 5573 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 5844 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5574 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, | 5845 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| ... | @@ -5594,6 +5865,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5594,6 +5865,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5594 | .unused, | 5865 | .unused, |
| 5595 | }, | 5866 | }, |
| 5596 | .dst_temps = .{.mem}, | 5867 | .dst_temps = .{.mem}, |
| | 5868 | .clobbers = .{ .eflags = true }, |
| 5597 | .each = .{ .once = &.{ | 5869 | .each = .{ .once = &.{ |
| 5598 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 5870 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5599 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, | 5871 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, |
| ... | @@ -5622,6 +5894,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5622,6 +5894,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5622 | .unused, | 5894 | .unused, |
| 5623 | }, | 5895 | }, |
| 5624 | .dst_temps = .{.mem}, | 5896 | .dst_temps = .{.mem}, |
| | 5897 | .clobbers = .{ .eflags = true }, |
| 5625 | .each = .{ .once = &.{ | 5898 | .each = .{ .once = &.{ |
| 5626 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 5899 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5627 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, | 5900 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, |
| ... | @@ -5650,6 +5923,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5650,6 +5923,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5650 | .unused, | 5923 | .unused, |
| 5651 | }, | 5924 | }, |
| 5652 | .dst_temps = .{.mem}, | 5925 | .dst_temps = .{.mem}, |
| | 5926 | .clobbers = .{ .eflags = true }, |
| 5653 | .each = .{ .once = &.{ | 5927 | .each = .{ .once = &.{ |
| 5654 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 5928 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5655 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, | 5929 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, |
| ... | @@ -5678,6 +5952,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5678,6 +5952,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5678 | .unused, | 5952 | .unused, |
| 5679 | }, | 5953 | }, |
| 5680 | .dst_temps = .{.mem}, | 5954 | .dst_temps = .{.mem}, |
| | 5955 | .clobbers = .{ .eflags = true }, |
| 5681 | .each = .{ .once = &.{ | 5956 | .each = .{ .once = &.{ |
| 5682 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 5957 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5683 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, | 5958 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, |
| ... | @@ -5706,6 +5981,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5706,6 +5981,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5706 | .unused, | 5981 | .unused, |
| 5707 | }, | 5982 | }, |
| 5708 | .dst_temps = .{.mem}, | 5983 | .dst_temps = .{.mem}, |
| | 5984 | .clobbers = .{ .eflags = true }, |
| 5709 | .each = .{ .once = &.{ | 5985 | .each = .{ .once = &.{ |
| 5710 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 5986 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5711 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, | 5987 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, |
| ... | @@ -5732,6 +6008,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5732,6 +6008,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5732 | .unused, | 6008 | .unused, |
| 5733 | }, | 6009 | }, |
| 5734 | .dst_temps = .{.mem}, | 6010 | .dst_temps = .{.mem}, |
| | 6011 | .clobbers = .{ .eflags = true }, |
| 5735 | .each = .{ .once = &.{ | 6012 | .each = .{ .once = &.{ |
| 5736 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6013 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5737 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, | 6014 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ }, |
| ... | @@ -5759,6 +6036,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5759,6 +6036,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5759 | .unused, | 6036 | .unused, |
| 5760 | }, | 6037 | }, |
| 5761 | .dst_temps = .{.mem}, | 6038 | .dst_temps = .{.mem}, |
| | 6039 | .clobbers = .{ .eflags = true }, |
| 5762 | .each = .{ .once = &.{ | 6040 | .each = .{ .once = &.{ |
| 5763 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6041 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5764 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, | 6042 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, |
| ... | @@ -5787,6 +6065,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5787,6 +6065,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5787 | .unused, | 6065 | .unused, |
| 5788 | }, | 6066 | }, |
| 5789 | .dst_temps = .{.mem}, | 6067 | .dst_temps = .{.mem}, |
| | 6068 | .clobbers = .{ .eflags = true }, |
| 5790 | .each = .{ .once = &.{ | 6069 | .each = .{ .once = &.{ |
| 5791 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6070 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5792 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, | 6071 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, |
| ... | @@ -5815,6 +6094,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5815,6 +6094,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5815 | .unused, | 6094 | .unused, |
| 5816 | }, | 6095 | }, |
| 5817 | .dst_temps = .{.mem}, | 6096 | .dst_temps = .{.mem}, |
| | 6097 | .clobbers = .{ .eflags = true }, |
| 5818 | .each = .{ .once = &.{ | 6098 | .each = .{ .once = &.{ |
| 5819 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6099 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5820 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, | 6100 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, |
| ... | @@ -5843,6 +6123,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5843,6 +6123,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5843 | .unused, | 6123 | .unused, |
| 5844 | }, | 6124 | }, |
| 5845 | .dst_temps = .{.mem}, | 6125 | .dst_temps = .{.mem}, |
| | 6126 | .clobbers = .{ .eflags = true }, |
| 5846 | .each = .{ .once = &.{ | 6127 | .each = .{ .once = &.{ |
| 5847 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6128 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5848 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, | 6129 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, |
| ... | @@ -5871,6 +6152,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5871,6 +6152,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5871 | .unused, | 6152 | .unused, |
| 5872 | }, | 6153 | }, |
| 5873 | .dst_temps = .{.mem}, | 6154 | .dst_temps = .{.mem}, |
| | 6155 | .clobbers = .{ .eflags = true }, |
| 5874 | .each = .{ .once = &.{ | 6156 | .each = .{ .once = &.{ |
| 5875 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6157 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5876 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, | 6158 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, |
| ... | @@ -5897,6 +6179,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5897,6 +6179,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5897 | .unused, | 6179 | .unused, |
| 5898 | }, | 6180 | }, |
| 5899 | .dst_temps = .{.mem}, | 6181 | .dst_temps = .{.mem}, |
| | 6182 | .clobbers = .{ .eflags = true }, |
| 5900 | .each = .{ .once = &.{ | 6183 | .each = .{ .once = &.{ |
| 5901 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6184 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5902 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, | 6185 | .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ }, |
| ... | @@ -5924,6 +6207,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5924,6 +6207,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5924 | .unused, | 6207 | .unused, |
| 5925 | }, | 6208 | }, |
| 5926 | .dst_temps = .{.mem}, | 6209 | .dst_temps = .{.mem}, |
| | 6210 | .clobbers = .{ .eflags = true }, |
| 5927 | .each = .{ .once = &.{ | 6211 | .each = .{ .once = &.{ |
| 5928 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6212 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5929 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, | 6213 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, |
| ... | @@ -5952,6 +6236,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5952,6 +6236,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5952 | .unused, | 6236 | .unused, |
| 5953 | }, | 6237 | }, |
| 5954 | .dst_temps = .{.mem}, | 6238 | .dst_temps = .{.mem}, |
| | 6239 | .clobbers = .{ .eflags = true }, |
| 5955 | .each = .{ .once = &.{ | 6240 | .each = .{ .once = &.{ |
| 5956 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6241 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5957 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, | 6242 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, |
| ... | @@ -5980,6 +6265,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -5980,6 +6265,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 5980 | .unused, | 6265 | .unused, |
| 5981 | }, | 6266 | }, |
| 5982 | .dst_temps = .{.mem}, | 6267 | .dst_temps = .{.mem}, |
| | 6268 | .clobbers = .{ .eflags = true }, |
| 5983 | .each = .{ .once = &.{ | 6269 | .each = .{ .once = &.{ |
| 5984 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6270 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 5985 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, | 6271 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, |
| ... | @@ -6008,6 +6294,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6008,6 +6294,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6008 | .unused, | 6294 | .unused, |
| 6009 | }, | 6295 | }, |
| 6010 | .dst_temps = .{.mem}, | 6296 | .dst_temps = .{.mem}, |
| | 6297 | .clobbers = .{ .eflags = true }, |
| 6011 | .each = .{ .once = &.{ | 6298 | .each = .{ .once = &.{ |
| 6012 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6299 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6013 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, | 6300 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, |
| ... | @@ -6036,6 +6323,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6036,6 +6323,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6036 | .unused, | 6323 | .unused, |
| 6037 | }, | 6324 | }, |
| 6038 | .dst_temps = .{.mem}, | 6325 | .dst_temps = .{.mem}, |
| | 6326 | .clobbers = .{ .eflags = true }, |
| 6039 | .each = .{ .once = &.{ | 6327 | .each = .{ .once = &.{ |
| 6040 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6328 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6041 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, | 6329 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, |
| ... | @@ -6062,6 +6350,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6062,6 +6350,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6062 | .unused, | 6350 | .unused, |
| 6063 | }, | 6351 | }, |
| 6064 | .dst_temps = .{.mem}, | 6352 | .dst_temps = .{.mem}, |
| | 6353 | .clobbers = .{ .eflags = true }, |
| 6065 | .each = .{ .once = &.{ | 6354 | .each = .{ .once = &.{ |
| 6066 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6355 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6067 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, | 6356 | .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ }, |
| ... | @@ -6089,6 +6378,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6089,6 +6378,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6089 | .unused, | 6378 | .unused, |
| 6090 | }, | 6379 | }, |
| 6091 | .dst_temps = .{.mem}, | 6380 | .dst_temps = .{.mem}, |
| | 6381 | .clobbers = .{ .eflags = true }, |
| 6092 | .each = .{ .once = &.{ | 6382 | .each = .{ .once = &.{ |
| 6093 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6383 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6094 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, | 6384 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, |
| ... | @@ -6117,6 +6407,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6117,6 +6407,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6117 | .unused, | 6407 | .unused, |
| 6118 | }, | 6408 | }, |
| 6119 | .dst_temps = .{.mem}, | 6409 | .dst_temps = .{.mem}, |
| | 6410 | .clobbers = .{ .eflags = true }, |
| 6120 | .each = .{ .once = &.{ | 6411 | .each = .{ .once = &.{ |
| 6121 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6412 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6122 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, | 6413 | .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ }, |
| ... | @@ -6145,6 +6436,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6145,6 +6436,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6145 | .unused, | 6436 | .unused, |
| 6146 | }, | 6437 | }, |
| 6147 | .dst_temps = .{.mem}, | 6438 | .dst_temps = .{.mem}, |
| | 6439 | .clobbers = .{ .eflags = true }, |
| 6148 | .each = .{ .once = &.{ | 6440 | .each = .{ .once = &.{ |
| 6149 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6441 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6150 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, | 6442 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| ... | @@ -6173,6 +6465,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6173,6 +6465,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6173 | .unused, | 6465 | .unused, |
| 6174 | }, | 6466 | }, |
| 6175 | .dst_temps = .{.mem}, | 6467 | .dst_temps = .{.mem}, |
| | 6468 | .clobbers = .{ .eflags = true }, |
| 6176 | .each = .{ .once = &.{ | 6469 | .each = .{ .once = &.{ |
| 6177 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6470 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6178 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, | 6471 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| ... | @@ -6201,6 +6494,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6201,6 +6494,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6201 | .unused, | 6494 | .unused, |
| 6202 | }, | 6495 | }, |
| 6203 | .dst_temps = .{.mem}, | 6496 | .dst_temps = .{.mem}, |
| | 6497 | .clobbers = .{ .eflags = true }, |
| 6204 | .each = .{ .once = &.{ | 6498 | .each = .{ .once = &.{ |
| 6205 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6499 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6206 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, | 6500 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| ... | @@ -6228,6 +6522,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6228,6 +6522,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6228 | .unused, | 6522 | .unused, |
| 6229 | }, | 6523 | }, |
| 6230 | .dst_temps = .{.mem}, | 6524 | .dst_temps = .{.mem}, |
| | 6525 | .clobbers = .{ .eflags = true }, |
| 6231 | .each = .{ .once = &.{ | 6526 | .each = .{ .once = &.{ |
| 6232 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6527 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6233 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, | 6528 | .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, |
| ... | @@ -6256,6 +6551,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6256,6 +6551,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6256 | .unused, | 6551 | .unused, |
| 6257 | }, | 6552 | }, |
| 6258 | .dst_temps = .{.mem}, | 6553 | .dst_temps = .{.mem}, |
| | 6554 | .clobbers = .{ .eflags = true }, |
| 6259 | .each = .{ .once = &.{ | 6555 | .each = .{ .once = &.{ |
| 6260 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6556 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6261 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 6557 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| ... | @@ -6292,6 +6588,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6292,6 +6588,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6292 | .unused, | 6588 | .unused, |
| 6293 | }, | 6589 | }, |
| 6294 | .dst_temps = .{.mem}, | 6590 | .dst_temps = .{.mem}, |
| | 6591 | .clobbers = .{ .eflags = true }, |
| 6295 | .each = .{ .once = &.{ | 6592 | .each = .{ .once = &.{ |
| 6296 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6593 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6297 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 6594 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| ... | @@ -6327,6 +6624,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6327,6 +6624,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6327 | .unused, | 6624 | .unused, |
| 6328 | }, | 6625 | }, |
| 6329 | .dst_temps = .{.mem}, | 6626 | .dst_temps = .{.mem}, |
| | 6627 | .clobbers = .{ .eflags = true }, |
| 6330 | .each = .{ .once = &.{ | 6628 | .each = .{ .once = &.{ |
| 6331 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6629 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6332 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 6630 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| ... | @@ -6362,6 +6660,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6362,6 +6660,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6362 | .unused, | 6660 | .unused, |
| 6363 | }, | 6661 | }, |
| 6364 | .dst_temps = .{.mem}, | 6662 | .dst_temps = .{.mem}, |
| | 6663 | .clobbers = .{ .eflags = true }, |
| 6365 | .each = .{ .once = &.{ | 6664 | .each = .{ .once = &.{ |
| 6366 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6665 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6367 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 6666 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| ... | @@ -6398,6 +6697,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6398,6 +6697,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6398 | .unused, | 6697 | .unused, |
| 6399 | }, | 6698 | }, |
| 6400 | .dst_temps = .{.mem}, | 6699 | .dst_temps = .{.mem}, |
| | 6700 | .clobbers = .{ .eflags = true }, |
| 6401 | .each = .{ .once = &.{ | 6701 | .each = .{ .once = &.{ |
| 6402 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6702 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6403 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 6703 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| ... | @@ -6433,6 +6733,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6433,6 +6733,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6433 | .unused, | 6733 | .unused, |
| 6434 | }, | 6734 | }, |
| 6435 | .dst_temps = .{.mem}, | 6735 | .dst_temps = .{.mem}, |
| | 6736 | .clobbers = .{ .eflags = true }, |
| 6436 | .each = .{ .once = &.{ | 6737 | .each = .{ .once = &.{ |
| 6437 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6738 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6438 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 6739 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| ... | @@ -6468,6 +6769,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6468,6 +6769,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6468 | .unused, | 6769 | .unused, |
| 6469 | }, | 6770 | }, |
| 6470 | .dst_temps = .{.mem}, | 6771 | .dst_temps = .{.mem}, |
| | 6772 | .clobbers = .{ .eflags = true }, |
| 6471 | .each = .{ .once = &.{ | 6773 | .each = .{ .once = &.{ |
| 6472 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6774 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6473 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 6775 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| ... | @@ -6504,6 +6806,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6504,6 +6806,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6504 | .unused, | 6806 | .unused, |
| 6505 | }, | 6807 | }, |
| 6506 | .dst_temps = .{.mem}, | 6808 | .dst_temps = .{.mem}, |
| | 6809 | .clobbers = .{ .eflags = true }, |
| 6507 | .each = .{ .once = &.{ | 6810 | .each = .{ .once = &.{ |
| 6508 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6811 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6509 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 6812 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| ... | @@ -6539,6 +6842,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6539,6 +6842,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6539 | .unused, | 6842 | .unused, |
| 6540 | }, | 6843 | }, |
| 6541 | .dst_temps = .{.mem}, | 6844 | .dst_temps = .{.mem}, |
| | 6845 | .clobbers = .{ .eflags = true }, |
| 6542 | .each = .{ .once = &.{ | 6846 | .each = .{ .once = &.{ |
| 6543 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6847 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6544 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 6848 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| ... | @@ -6574,6 +6878,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6574,6 +6878,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6574 | .unused, | 6878 | .unused, |
| 6575 | }, | 6879 | }, |
| 6576 | .dst_temps = .{.mem}, | 6880 | .dst_temps = .{.mem}, |
| | 6881 | .clobbers = .{ .eflags = true }, |
| 6577 | .each = .{ .once = &.{ | 6882 | .each = .{ .once = &.{ |
| 6578 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6883 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6579 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 6884 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| ... | @@ -6610,6 +6915,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6610,6 +6915,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6610 | .unused, | 6915 | .unused, |
| 6611 | }, | 6916 | }, |
| 6612 | .dst_temps = .{.mem}, | 6917 | .dst_temps = .{.mem}, |
| | 6918 | .clobbers = .{ .eflags = true }, |
| 6613 | .each = .{ .once = &.{ | 6919 | .each = .{ .once = &.{ |
| 6614 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6920 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6615 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 6921 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| ... | @@ -6645,6 +6951,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6645,6 +6951,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6645 | .unused, | 6951 | .unused, |
| 6646 | }, | 6952 | }, |
| 6647 | .dst_temps = .{.mem}, | 6953 | .dst_temps = .{.mem}, |
| | 6954 | .clobbers = .{ .eflags = true }, |
| 6648 | .each = .{ .once = &.{ | 6955 | .each = .{ .once = &.{ |
| 6649 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, | 6956 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ }, |
| 6650 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, | 6957 | .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, |
| ... | @@ -6672,7 +6979,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -6672,7 +6979,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 6672 | }), | 6979 | }), |
| 6673 | else => |e| return e, | 6980 | else => |e| return e, |
| 6674 | }; | 6981 | }; |
| 6675 | if (ops[0].index != res[0].index) try ops[0].die(cg); | 6982 | for (ops) |op| for (res) |r| { |
| | 6983 | if (op.index == r.index) break; |
| | 6984 | } else try op.die(cg); |
| 6676 | try res[0].moveTo(inst, cg); | 6985 | try res[0].moveTo(inst, cg); |
| 6677 | }, | 6986 | }, |
| 6678 | | 6987 | |
| ... | @@ -8480,8 +8789,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -8480,8 +8789,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 8480 | .gte => unreachable, | 8789 | .gte => unreachable, |
| 8481 | .gt => unreachable, | 8790 | .gt => unreachable, |
| 8482 | } | 8791 | } |
| 8483 | if (ops[0].index != res[0].index) try ops[0].die(cg); | 8792 | for (ops) |op| for (res) |r| { |
| 8484 | if (ops[1].index != res[0].index) try ops[1].die(cg); | 8793 | if (op.index == r.index) break; |
| | 8794 | } else try op.die(cg); |
| 8485 | try res[0].moveTo(inst, cg); | 8795 | try res[0].moveTo(inst, cg); |
| 8486 | }, | 8796 | }, |
| 8487 | | 8797 | |
| ... | @@ -8678,8 +8988,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -8678,8 +8988,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 8678 | }), | 8988 | }), |
| 8679 | else => |e| return e, | 8989 | else => |e| return e, |
| 8680 | }; | 8990 | }; |
| 8681 | if (ops[0].index != res[0].index) try ops[0].die(cg); | 8991 | for (ops) |op| for (res) |r| { |
| 8682 | if (ops[1].index != res[0].index) try ops[1].die(cg); | 8992 | if (op.index == r.index) break; |
| | 8993 | } else try op.die(cg); |
| 8683 | try res[0].moveTo(inst, cg); | 8994 | try res[0].moveTo(inst, cg); |
| 8684 | }, | 8995 | }, |
| 8685 | .cmp_eq, | 8996 | .cmp_eq, |
| ... | @@ -9155,8 +9466,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9155,8 +9466,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9155 | }), | 9466 | }), |
| 9156 | else => |e| return e, | 9467 | else => |e| return e, |
| 9157 | }; | 9468 | }; |
| 9158 | if (ops[0].index != res[0].index) try ops[0].die(cg); | 9469 | for (ops) |op| for (res) |r| { |
| 9159 | if (ops[1].index != res[0].index) try ops[1].die(cg); | 9470 | if (op.index == r.index) break; |
| | 9471 | } else try op.die(cg); |
| 9160 | try res[0].moveTo(inst, cg); | 9472 | try res[0].moveTo(inst, cg); |
| 9161 | }, | 9473 | }, |
| 9162 | | 9474 | |
| ... | @@ -9294,7 +9606,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9294,7 +9606,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9294 | .int_from_ptr => if (use_old) try cg.airIntFromPtr(inst) else { | 9606 | .int_from_ptr => if (use_old) try cg.airIntFromPtr(inst) else { |
| 9295 | const un_op = air_datas[@intFromEnum(inst)].un_op; | 9607 | const un_op = air_datas[@intFromEnum(inst)].un_op; |
| 9296 | var ops = try cg.tempsFromOperands(inst, .{un_op}); | 9608 | var ops = try cg.tempsFromOperands(inst, .{un_op}); |
| 9297 | try ops[0].toLimb(0, cg); | 9609 | try ops[0].toSlicePtr(cg); |
| 9298 | try ops[0].moveTo(inst, cg); | 9610 | try ops[0].moveTo(inst, cg); |
| 9299 | }, | 9611 | }, |
| 9300 | .int_from_bool => if (use_old) try cg.airIntFromBool(inst) else { | 9612 | .int_from_bool => if (use_old) try cg.airIntFromBool(inst) else { |
| ... | @@ -9422,13 +9734,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9422,13 +9734,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9422 | .slice_len => if (use_old) try cg.airSliceLen(inst) else { | 9734 | .slice_len => if (use_old) try cg.airSliceLen(inst) else { |
| 9423 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; | 9735 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| 9424 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); | 9736 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 9425 | try ops[0].toLimb(1, cg); | 9737 | try ops[0].toSliceLen(cg); |
| 9426 | try ops[0].moveTo(inst, cg); | 9738 | try ops[0].moveTo(inst, cg); |
| 9427 | }, | 9739 | }, |
| 9428 | .slice_ptr => if (use_old) try cg.airSlicePtr(inst) else { | 9740 | .slice_ptr => if (use_old) try cg.airSlicePtr(inst) else { |
| 9429 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; | 9741 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| 9430 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); | 9742 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 9431 | try ops[0].toLimb(0, cg); | 9743 | try ops[0].toSlicePtr(cg); |
| 9432 | try ops[0].moveTo(inst, cg); | 9744 | try ops[0].moveTo(inst, cg); |
| 9433 | }, | 9745 | }, |
| 9434 | .ptr_slice_len_ptr => if (use_old) try cg.airPtrSliceLenPtr(inst) else { | 9746 | .ptr_slice_len_ptr => if (use_old) try cg.airPtrSliceLenPtr(inst) else { |
| ... | @@ -9450,17 +9762,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9450,17 +9762,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9450 | } else { | 9762 | } else { |
| 9451 | const bin_op = air_datas[@intFromEnum(inst)].bin_op; | 9763 | const bin_op = air_datas[@intFromEnum(inst)].bin_op; |
| 9452 | var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs }); | 9764 | var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs }); |
| 9453 | switch (air_tag) { | 9765 | try ops[0].toSlicePtr(cg); |
| 9454 | else => unreachable, | | |
| 9455 | .slice_elem_val => try ops[0].toLimb(0, cg), | | |
| 9456 | .ptr_elem_val => {}, | | |
| 9457 | } | | |
| 9458 | var res: [1]Temp = undefined; | 9766 | var res: [1]Temp = undefined; |
| 9459 | const res_ty = cg.typeOfIndex(inst); | 9767 | const res_ty = cg.typeOfIndex(inst); |
| 9460 | cg.select(&res, &.{res_ty}, &ops, comptime &.{ .{ | 9768 | cg.select(&res, &.{res_ty}, &ops, comptime &.{ .{ |
| 9461 | .dst_constraints = .{.{ .int = .byte }}, | 9769 | .dst_constraints = .{.{ .int = .byte }}, |
| 9462 | .patterns = &.{ | 9770 | .patterns = &.{ |
| 9463 | .{ .src = .{ .to_gpr, .simm32 } }, | 9771 | .{ .src = .{ .to_gpr, .simm32 } }, |
| | 9772 | }, |
| | 9773 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 9774 | .each = .{ .once = &.{ |
| | 9775 | .{ ._, ._, .movzx, .dst0d, .leaa(.byte, .src0, .add_src0_elem_size_times_src1), ._, ._ }, |
| | 9776 | } }, |
| | 9777 | }, .{ |
| | 9778 | .dst_constraints = .{.{ .int = .byte }}, |
| | 9779 | .patterns = &.{ |
| 9464 | .{ .src = .{ .to_gpr, .to_gpr } }, | 9780 | .{ .src = .{ .to_gpr, .to_gpr } }, |
| 9465 | }, | 9781 | }, |
| 9466 | .dst_temps = .{.{ .rc = .general_purpose }}, | 9782 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| ... | @@ -9471,6 +9787,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9471,6 +9787,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9471 | .dst_constraints = .{.{ .int = .word }}, | 9787 | .dst_constraints = .{.{ .int = .word }}, |
| 9472 | .patterns = &.{ | 9788 | .patterns = &.{ |
| 9473 | .{ .src = .{ .to_gpr, .simm32 } }, | 9789 | .{ .src = .{ .to_gpr, .simm32 } }, |
| | 9790 | }, |
| | 9791 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 9792 | .each = .{ .once = &.{ |
| | 9793 | .{ ._, ._, .movzx, .dst0d, .leaa(.word, .src0, .add_src0_elem_size_times_src1), ._, ._ }, |
| | 9794 | } }, |
| | 9795 | }, .{ |
| | 9796 | .dst_constraints = .{.{ .int = .word }}, |
| | 9797 | .patterns = &.{ |
| 9474 | .{ .src = .{ .to_gpr, .to_gpr } }, | 9798 | .{ .src = .{ .to_gpr, .to_gpr } }, |
| 9475 | }, | 9799 | }, |
| 9476 | .dst_temps = .{.{ .rc = .general_purpose }}, | 9800 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| ... | @@ -9481,6 +9805,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9481,6 +9805,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9481 | .dst_constraints = .{.{ .int = .dword }}, | 9805 | .dst_constraints = .{.{ .int = .dword }}, |
| 9482 | .patterns = &.{ | 9806 | .patterns = &.{ |
| 9483 | .{ .src = .{ .to_gpr, .simm32 } }, | 9807 | .{ .src = .{ .to_gpr, .simm32 } }, |
| | 9808 | }, |
| | 9809 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 9810 | .each = .{ .once = &.{ |
| | 9811 | .{ ._, ._, .mov, .dst0d, .leaa(.dword, .src0, .add_src0_elem_size_times_src1), ._, ._ }, |
| | 9812 | } }, |
| | 9813 | }, .{ |
| | 9814 | .dst_constraints = .{.{ .int = .dword }}, |
| | 9815 | .patterns = &.{ |
| 9484 | .{ .src = .{ .to_gpr, .to_gpr } }, | 9816 | .{ .src = .{ .to_gpr, .to_gpr } }, |
| 9485 | }, | 9817 | }, |
| 9486 | .dst_temps = .{.{ .rc = .general_purpose }}, | 9818 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| ... | @@ -9488,10 +9820,18 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9488,10 +9820,18 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9488 | .{ ._, ._, .mov, .dst0d, .leasi(.dword, .src0, .@"4", .src1), ._, ._ }, | 9820 | .{ ._, ._, .mov, .dst0d, .leasi(.dword, .src0, .@"4", .src1), ._, ._ }, |
| 9489 | } }, | 9821 | } }, |
| 9490 | }, .{ | 9822 | }, .{ |
| 9491 | .required_features = .{ .@"64bit", null, null, null }, | | |
| 9492 | .dst_constraints = .{.{ .int = .qword }}, | 9823 | .dst_constraints = .{.{ .int = .qword }}, |
| 9493 | .patterns = &.{ | 9824 | .patterns = &.{ |
| 9494 | .{ .src = .{ .to_gpr, .simm32 } }, | 9825 | .{ .src = .{ .to_gpr, .simm32 } }, |
| | 9826 | }, |
| | 9827 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| | 9828 | .each = .{ .once = &.{ |
| | 9829 | .{ ._, ._, .mov, .dst0q, .leaa(.qword, .src0, .add_src0_elem_size_times_src1), ._, ._ }, |
| | 9830 | } }, |
| | 9831 | }, .{ |
| | 9832 | .required_features = .{ .@"64bit", null, null, null }, |
| | 9833 | .dst_constraints = .{.{ .int = .qword }}, |
| | 9834 | .patterns = &.{ |
| 9495 | .{ .src = .{ .to_gpr, .to_gpr } }, | 9835 | .{ .src = .{ .to_gpr, .to_gpr } }, |
| 9496 | }, | 9836 | }, |
| 9497 | .dst_temps = .{.{ .rc = .general_purpose }}, | 9837 | .dst_temps = .{.{ .rc = .general_purpose }}, |
| ... | @@ -9543,8 +9883,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9543,8 +9883,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9543 | }, | 9883 | }, |
| 9544 | else => |e| return e, | 9884 | else => |e| return e, |
| 9545 | }; | 9885 | }; |
| 9546 | if (ops[0].index != res[0].index) try ops[0].die(cg); | 9886 | for (ops) |op| for (res) |r| { |
| 9547 | if (ops[1].index != res[0].index) try ops[1].die(cg); | 9887 | if (op.index == r.index) break; |
| | 9888 | } else try op.die(cg); |
| 9548 | try res[0].moveTo(inst, cg); | 9889 | try res[0].moveTo(inst, cg); |
| 9549 | }, | 9890 | }, |
| 9550 | .slice_elem_ptr, .ptr_elem_ptr => |air_tag| if (use_old) switch (air_tag) { | 9891 | .slice_elem_ptr, .ptr_elem_ptr => |air_tag| if (use_old) switch (air_tag) { |
| ... | @@ -9555,11 +9896,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -9555,11 +9896,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 9555 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; | 9896 | const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; |
| 9556 | const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data; | 9897 | const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data; |
| 9557 | var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs }); | 9898 | var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs }); |
| 9558 | switch (air_tag) { | 9899 | try ops[0].toSlicePtr(cg); |
| 9559 | else => unreachable, | | |
| 9560 | .slice_elem_ptr => try ops[0].toLimb(0, cg), | | |
| 9561 | .ptr_elem_ptr => {}, | | |
| 9562 | } | | |
| 9563 | const dst_ty = cg.typeOfIndex(inst); | 9900 | const dst_ty = cg.typeOfIndex(inst); |
| 9564 | if (dst_ty.ptrInfo(zcu).flags.vector_index == .none) zero_offset: { | 9901 | if (dst_ty.ptrInfo(zcu).flags.vector_index == .none) zero_offset: { |
| 9565 | const elem_size = dst_ty.childType(zcu).abiSize(zcu); | 9902 | const elem_size = dst_ty.childType(zcu).abiSize(zcu); |
| ... | @@ -27687,9 +28024,9 @@ const Temp = struct { | ... | @@ -27687,9 +28024,9 @@ const Temp = struct { |
| 27687 | temp.* = new_temp; | 28024 | temp.* = new_temp; |
| 27688 | } | 28025 | } |
| 27689 | | 28026 | |
| 27690 | fn getLimb(temp: Temp, limb_index: u28, cg: *CodeGen) !Temp { | 28027 | fn getLimb(temp: Temp, limb_ty: Type, limb_index: u28, cg: *CodeGen) !Temp { |
| 27691 | const new_temp_index = cg.next_temp_index; | 28028 | const new_temp_index = cg.next_temp_index; |
| 27692 | cg.temp_type[@intFromEnum(new_temp_index)] = .usize; | 28029 | cg.temp_type[@intFromEnum(new_temp_index)] = limb_ty; |
| 27693 | switch (temp.tracking(cg).short) { | 28030 | switch (temp.tracking(cg).short) { |
| 27694 | else => |mcv| std.debug.panic("{s}: {}\n", .{ @src().fn_name, mcv }), | 28031 | else => |mcv| std.debug.panic("{s}: {}\n", .{ @src().fn_name, mcv }), |
| 27695 | .immediate => |imm| { | 28032 | .immediate => |imm| { |
| ... | @@ -27759,7 +28096,7 @@ const Temp = struct { | ... | @@ -27759,7 +28096,7 @@ const Temp = struct { |
| 27759 | return .{ .index = new_temp_index.toIndex() }; | 28096 | return .{ .index = new_temp_index.toIndex() }; |
| 27760 | } | 28097 | } |
| 27761 | | 28098 | |
| 27762 | fn toLimb(temp: *Temp, limb_index: u28, cg: *CodeGen) !void { | 28099 | fn toLimb(temp: *Temp, limb_ty: Type, limb_index: u28, cg: *CodeGen) !void { |
| 27763 | switch (temp.unwrap(cg)) { | 28100 | switch (temp.unwrap(cg)) { |
| 27764 | .ref => {}, | 28101 | .ref => {}, |
| 27765 | .temp => |temp_index| { | 28102 | .temp => |temp_index| { |
| ... | @@ -27768,7 +28105,7 @@ const Temp = struct { | ... | @@ -27768,7 +28105,7 @@ const Temp = struct { |
| 27768 | else => {}, | 28105 | else => {}, |
| 27769 | .register, .lea_symbol, .lea_frame => { | 28106 | .register, .lea_symbol, .lea_frame => { |
| 27770 | assert(limb_index == 0); | 28107 | assert(limb_index == 0); |
| 27771 | cg.temp_type[@intFromEnum(temp_index)] = .usize; | 28108 | cg.temp_type[@intFromEnum(temp_index)] = limb_ty; |
| 27772 | return; | 28109 | return; |
| 27773 | }, | 28110 | }, |
| 27774 | .register_pair => |regs| { | 28111 | .register_pair => |regs| { |
| ... | @@ -27780,7 +28117,7 @@ const Temp = struct { | ... | @@ -27780,7 +28117,7 @@ const Temp = struct { |
| 27780 | for (regs, 0..) |reg, reg_index| if (reg_index != limb_index) | 28117 | for (regs, 0..) |reg, reg_index| if (reg_index != limb_index) |
| 27781 | cg.register_manager.freeReg(reg); | 28118 | cg.register_manager.freeReg(reg); |
| 27782 | temp_tracking.* = .init(.{ .register = regs[limb_index] }); | 28119 | temp_tracking.* = .init(.{ .register = regs[limb_index] }); |
| 27783 | cg.temp_type[@intFromEnum(temp_index)] = .usize; | 28120 | cg.temp_type[@intFromEnum(temp_index)] = limb_ty; |
| 27784 | return; | 28121 | return; |
| 27785 | }, | 28122 | }, |
| 27786 | .load_symbol => |sym_off| { | 28123 | .load_symbol => |sym_off| { |
| ... | @@ -27789,7 +28126,7 @@ const Temp = struct { | ... | @@ -27789,7 +28126,7 @@ const Temp = struct { |
| 27789 | .sym_index = sym_off.sym_index, | 28126 | .sym_index = sym_off.sym_index, |
| 27790 | .off = sym_off.off + @as(u31, limb_index) * 8, | 28127 | .off = sym_off.off + @as(u31, limb_index) * 8, |
| 27791 | } }); | 28128 | } }); |
| 27792 | cg.temp_type[@intFromEnum(temp_index)] = .usize; | 28129 | cg.temp_type[@intFromEnum(temp_index)] = limb_ty; |
| 27793 | return; | 28130 | return; |
| 27794 | }, | 28131 | }, |
| 27795 | .load_frame => |frame_addr| if (!frame_addr.index.isNamed()) { | 28132 | .load_frame => |frame_addr| if (!frame_addr.index.isNamed()) { |
| ... | @@ -27798,17 +28135,26 @@ const Temp = struct { | ... | @@ -27798,17 +28135,26 @@ const Temp = struct { |
| 27798 | .index = frame_addr.index, | 28135 | .index = frame_addr.index, |
| 27799 | .off = frame_addr.off + @as(u31, limb_index) * 8, | 28136 | .off = frame_addr.off + @as(u31, limb_index) * 8, |
| 27800 | } }); | 28137 | } }); |
| 27801 | cg.temp_type[@intFromEnum(temp_index)] = .usize; | 28138 | cg.temp_type[@intFromEnum(temp_index)] = limb_ty; |
| 27802 | return; | 28139 | return; |
| 27803 | }, | 28140 | }, |
| 27804 | } | 28141 | } |
| 27805 | }, | 28142 | }, |
| 27806 | } | 28143 | } |
| 27807 | const new_temp = try temp.getLimb(limb_index, cg); | 28144 | const new_temp = try temp.getLimb(limb_ty, limb_index, cg); |
| 27808 | try temp.die(cg); | 28145 | try temp.die(cg); |
| 27809 | temp.* = new_temp; | 28146 | temp.* = new_temp; |
| 27810 | } | 28147 | } |
| 27811 | | 28148 | |
| | 28149 | fn toSlicePtr(temp: *Temp, cg: *CodeGen) !void { |
| | 28150 | const temp_ty = temp.typeOf(cg); |
| | 28151 | if (temp_ty.isSlice(cg.pt.zcu)) try temp.toLimb(temp_ty.slicePtrFieldType(cg.pt.zcu), 0, cg); |
| | 28152 | } |
| | 28153 | |
| | 28154 | fn toSliceLen(temp: *Temp, cg: *CodeGen) !void { |
| | 28155 | try temp.toLimb(.usize, 1, cg); |
| | 28156 | } |
| | 28157 | |
| 27812 | fn toReg(temp: *Temp, new_reg: Register, cg: *CodeGen) !bool { | 28158 | fn toReg(temp: *Temp, new_reg: Register, cg: *CodeGen) !bool { |
| 27813 | const val, const ty = val_ty: switch (temp.unwrap(cg)) { | 28159 | const val, const ty = val_ty: switch (temp.unwrap(cg)) { |
| 27814 | .ref => |ref| .{ temp.tracking(cg).short, cg.typeOf(ref) }, | 28160 | .ref => |ref| .{ temp.tracking(cg).short, cg.typeOf(ref) }, |
| ... | @@ -28325,6 +28671,8 @@ const Select = struct { | ... | @@ -28325,6 +28671,8 @@ const Select = struct { |
| 28325 | unsigned_or_exact_remainder_int: struct { of: Memory.Size, is: Memory.Size }, | 28671 | unsigned_or_exact_remainder_int: struct { of: Memory.Size, is: Memory.Size }, |
| 28326 | signed_int: Memory.Size, | 28672 | signed_int: Memory.Size, |
| 28327 | unsigned_int: Memory.Size, | 28673 | unsigned_int: Memory.Size, |
| | 28674 | elem_size_is: u8, |
| | 28675 | po2_elem_size, |
| 28328 | elem_int: Memory.Size, | 28676 | elem_int: Memory.Size, |
| 28329 | | 28677 | |
| 28330 | fn accepts(constraint: Constraint, ty: Type, cg: *CodeGen) bool { | 28678 | fn accepts(constraint: Constraint, ty: Type, cg: *CodeGen) bool { |
| ... | @@ -28511,8 +28859,10 @@ const Select = struct { | ... | @@ -28511,8 +28859,10 @@ const Select = struct { |
| 28511 | const int_info = ty.intInfo(zcu); | 28859 | const int_info = ty.intInfo(zcu); |
| 28512 | return int_info.signedness == .unsigned and size.bitSize(cg.target) >= int_info.bits; | 28860 | return int_info.signedness == .unsigned and size.bitSize(cg.target) >= int_info.bits; |
| 28513 | }, | 28861 | }, |
| | 28862 | .elem_size_is => |size| return size == ty.elemType2(zcu).abiSize(zcu), |
| | 28863 | .po2_elem_size => return std.math.isPowerOfTwo(ty.elemType2(zcu).abiSize(zcu)), |
| 28514 | .elem_int => |size| { | 28864 | .elem_int => |size| { |
| 28515 | const elem_ty = ty.childType(zcu); | 28865 | const elem_ty = ty.elemType2(zcu); |
| 28516 | if (elem_ty.toIntern() == .bool_type) return true; | 28866 | if (elem_ty.toIntern() == .bool_type) return true; |
| 28517 | if (elem_ty.isPtrAtRuntime(zcu)) return size.bitSize(cg.target) >= cg.target.ptrBitWidth(); | 28867 | if (elem_ty.isPtrAtRuntime(zcu)) return size.bitSize(cg.target) >= cg.target.ptrBitWidth(); |
| 28518 | return elem_ty.isAbiInt(zcu) and size.bitSize(cg.target) >= elem_ty.intInfo(zcu).bits; | 28868 | return elem_ty.isAbiInt(zcu) and size.bitSize(cg.target) >= elem_ty.intInfo(zcu).bits; |
| ... | @@ -28794,6 +29144,8 @@ const Select = struct { | ... | @@ -28794,6 +29144,8 @@ const Select = struct { |
| 28794 | len, | 29144 | len, |
| 28795 | elem_limbs, | 29145 | elem_limbs, |
| 28796 | src0_elem_size, | 29146 | src0_elem_size, |
| | 29147 | src0_elem_size_times_src1, |
| | 29148 | log2_src0_elem_size, |
| 28797 | smin, | 29149 | smin, |
| 28798 | smax, | 29150 | smax, |
| 28799 | umax, | 29151 | umax, |
| ... | @@ -28818,7 +29170,13 @@ const Select = struct { | ... | @@ -28818,7 +29170,13 @@ const Select = struct { |
| 28818 | const add_len: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .len }; | 29170 | const add_len: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .len }; |
| 28819 | const sub_len: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .len }; | 29171 | const sub_len: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .len }; |
| 28820 | const add_src0_elem_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .src0_elem_size }; | 29172 | const add_src0_elem_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .src0_elem_size }; |
| | 29173 | const add_2_src0_elem_size: Adjust = .{ .factor = 1, .scale = .@"2", .amount = .src0_elem_size }; |
| | 29174 | const add_4_src0_elem_size: Adjust = .{ .factor = 1, .scale = .@"4", .amount = .src0_elem_size }; |
| | 29175 | const add_8_src0_elem_size: Adjust = .{ .factor = 1, .scale = .@"8", .amount = .src0_elem_size }; |
| 28821 | const sub_src0_elem_size: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .src0_elem_size }; | 29176 | const sub_src0_elem_size: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .src0_elem_size }; |
| | 29177 | const add_src0_elem_size_times_src1: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .src0_elem_size_times_src1 }; |
| | 29178 | const sub_src0_elem_size_times_src1: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .src0_elem_size_times_src1 }; |
| | 29179 | const add_log2_src0_elem_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .log2_src0_elem_size }; |
| 28822 | const add_elem_limbs: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .elem_limbs }; | 29180 | const add_elem_limbs: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .elem_limbs }; |
| 28823 | const add_umax: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .umax }; | 29181 | const add_umax: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .umax }; |
| 28824 | }; | 29182 | }; |
| ... | @@ -29190,14 +29548,7 @@ const Select = struct { | ... | @@ -29190,14 +29548,7 @@ const Select = struct { |
| 29190 | const UnsignedImm = @Type(.{ | 29548 | const UnsignedImm = @Type(.{ |
| 29191 | .int = .{ .signedness = .unsigned, .bits = @typeInfo(SignedImm).int.bits }, | 29549 | .int = .{ .signedness = .unsigned, .bits = @typeInfo(SignedImm).int.bits }, |
| 29192 | }); | 29550 | }); |
| 29193 | return switch (op.index.ref) { | 29551 | return @as(i5, op.adjust.factor) * op.adjust.scale.toFactor() * @as(SignedImm, switch (op.adjust.amount) { |
| 29194 | else => |ref| switch (ref.deref(s).tracking(s.cg).short) { | | |
| 29195 | else => unreachable, | | |
| 29196 | .immediate => |imm| op.index.scale.toFactor() * @as(i32, @intCast(imm)), | | |
| 29197 | .register => 0, | | |
| 29198 | }, | | |
| 29199 | .none => 0, | | |
| 29200 | } + @as(i5, op.adjust.factor) * op.adjust.scale.toFactor() * @as(SignedImm, switch (op.adjust.amount) { | | |
| 29201 | .none => 0, | 29552 | .none => 0, |
| 29202 | .ptr_size => @divExact(s.cg.target.ptrBitWidth(), 8), | 29553 | .ptr_size => @divExact(s.cg.target.ptrBitWidth(), 8), |
| 29203 | .ptr_bit_size => s.cg.target.ptrBitWidth(), | 29554 | .ptr_bit_size => s.cg.target.ptrBitWidth(), |
| ... | @@ -29210,7 +29561,10 @@ const Select = struct { | ... | @@ -29210,7 +29561,10 @@ const Select = struct { |
| 29210 | op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).abiSize(s.cg.pt.zcu), | 29561 | op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).abiSize(s.cg.pt.zcu), |
| 29211 | @divExact(op.base.size.bitSize(s.cg.target), 8), | 29562 | @divExact(op.base.size.bitSize(s.cg.target), 8), |
| 29212 | )), | 29563 | )), |
| 29213 | .src0_elem_size => @intCast(Select.Operand.Ref.src0.deref(s).typeOf(s.cg).childType(s.cg.pt.zcu).abiSize(s.cg.pt.zcu)), | 29564 | .src0_elem_size => @intCast(Select.Operand.Ref.src0.deref(s).typeOf(s.cg).elemType2(s.cg.pt.zcu).abiSize(s.cg.pt.zcu)), |
| | 29565 | .src0_elem_size_times_src1 => @intCast(Select.Operand.Ref.src0.deref(s).typeOf(s.cg).elemType2(s.cg.pt.zcu).abiSize(s.cg.pt.zcu) * |
| | 29566 | Select.Operand.Ref.src1.deref(s).tracking(s.cg).short.immediate), |
| | 29567 | .log2_src0_elem_size => @intCast(std.math.log2(Select.Operand.Ref.src0.deref(s).typeOf(s.cg).elemType2(s.cg.pt.zcu).abiSize(s.cg.pt.zcu))), |
| 29214 | .smin => @as(SignedImm, std.math.minInt(SignedImm)) >> @truncate( | 29568 | .smin => @as(SignedImm, std.math.minInt(SignedImm)) >> @truncate( |
| 29215 | -%op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu), | 29569 | -%op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu), |
| 29216 | ), | 29570 | ), |
| ... | @@ -29250,11 +29604,7 @@ const Select = struct { | ... | @@ -29250,11 +29604,7 @@ const Select = struct { |
| 29250 | .mod = .{ .rm = .{ | 29604 | .mod = .{ .rm = .{ |
| 29251 | .size = op.base.size, | 29605 | .size = op.base.size, |
| 29252 | .index = switch (op.index.ref) { | 29606 | .index = switch (op.index.ref) { |
| 29253 | else => |ref| switch (ref.deref(s).tracking(s.cg).short) { | 29607 | else => |ref| registerAlias(ref.deref(s).tracking(s.cg).short.register, @divExact(s.cg.target.ptrBitWidth(), 8)), |
| 29254 | else => unreachable, | | |
| 29255 | .immediate => .none, | | |
| 29256 | .register => |index_reg| registerAlias(index_reg, @divExact(s.cg.target.ptrBitWidth(), 8)), | | |
| 29257 | }, | | |
| 29258 | .none => .none, | 29608 | .none => .none, |
| 29259 | }, | 29609 | }, |
| 29260 | .scale = op.index.scale, | 29610 | .scale = op.index.scale, |
| ... | @@ -29264,11 +29614,7 @@ const Select = struct { | ... | @@ -29264,11 +29614,7 @@ const Select = struct { |
| 29264 | .mem => .{ .mem = try op.base.ref.deref(s).tracking(s.cg).short.mem(s.cg, .{ | 29614 | .mem => .{ .mem = try op.base.ref.deref(s).tracking(s.cg).short.mem(s.cg, .{ |
| 29265 | .size = op.base.size, | 29615 | .size = op.base.size, |
| 29266 | .index = switch (op.index.ref) { | 29616 | .index = switch (op.index.ref) { |
| 29267 | else => |ref| switch (ref.deref(s).tracking(s.cg).short) { | 29617 | else => |ref| registerAlias(ref.deref(s).tracking(s.cg).short.register, @divExact(s.cg.target.ptrBitWidth(), 8)), |
| 29268 | else => unreachable, | | |
| 29269 | .immediate => .none, | | |
| 29270 | .register => |index_reg| registerAlias(index_reg, @divExact(s.cg.target.ptrBitWidth(), 8)), | | |
| 29271 | }, | | |
| 29272 | .none => .none, | 29618 | .none => .none, |
| 29273 | }, | 29619 | }, |
| 29274 | .scale = op.index.scale, | 29620 | .scale = op.index.scale, |