| ... | ... | @@ -101617,7 +101617,7 @@ const Temp = struct { |
| 101617 | 101617 | .float_combine => 8, |
| 101618 | 101618 | .sseup, .x87up, .complex_x87, .none, .win_i128, .integer_per_element => unreachable, |
| 101619 | 101619 | }; |
| 101620 | | const part_ty: Type = switch (class) { |
| 101620 | try dst.writeReg(part_disp, switch (class) { |
| 101621 | 101621 | .integer => .u64, |
| 101622 | 101622 | .sse => switch (part_size) { |
| 101623 | 101623 | else => unreachable, |
| ... | ... | @@ -101629,36 +101629,7 @@ const Temp = struct { |
| 101629 | 101629 | .float => .f32, |
| 101630 | 101630 | .float_combine => .vector_2_f32, |
| 101631 | 101631 | .sseup, .x87up, .complex_x87, .memory, .none, .win_i128, .integer_per_element => unreachable, |
| 101632 | | }; |
| 101633 | | if (class == .x87 or std.math.isPowerOfTwo(part_size)) { |
| 101634 | | const strat = try cg.moveStrategy(part_ty, src_reg.class(), false); |
| 101635 | | try strat.write(cg, try dst.tracking(cg).short.mem(cg, .{ |
| 101636 | | .size = switch (class) { |
| 101637 | | else => .fromSize(part_size), |
| 101638 | | .x87 => .tbyte, |
| 101639 | | }, |
| 101640 | | .disp = part_disp, |
| 101641 | | }), registerAlias(src_reg, part_size)); |
| 101642 | | } else { |
| 101643 | | const frame_size = std.math.ceilPowerOfTwoAssert(u32, part_size); |
| 101644 | | const frame_index = try cg.allocFrameIndex(.init(.{ |
| 101645 | | .size = frame_size, |
| 101646 | | .alignment = .fromNonzeroByteUnits(frame_size), |
| 101647 | | })); |
| 101648 | | const strat = try cg.moveStrategy(part_ty, src_reg.class(), true); |
| 101649 | | try strat.write(cg, .{ |
| 101650 | | .base = .{ .frame = frame_index }, |
| 101651 | | .mod = .{ .rm = .{ .size = .fromSize(frame_size) } }, |
| 101652 | | }, registerAlias(src_reg, frame_size)); |
| 101653 | | var dst_ptr = try cg.tempInit(.usize, dst.tracking(cg).short.address()); |
| 101654 | | try dst_ptr.toOffset(part_disp, cg); |
| 101655 | | var src_ptr = try cg.tempInit(.usize, .{ .lea_frame = .{ .index = frame_index } }); |
| 101656 | | var len = try cg.tempInit(.usize, .{ .immediate = part_size }); |
| 101657 | | try dst_ptr.memcpy(&src_ptr, &len, cg); |
| 101658 | | try dst_ptr.die(cg); |
| 101659 | | try src_ptr.die(cg); |
| 101660 | | try len.die(cg); |
| 101661 | | } |
| 101632 | }, src_reg, cg); |
| 101662 | 101633 | part_disp += part_size; |
| 101663 | 101634 | remaining_abi_size -= part_size; |
| 101664 | 101635 | } |