authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-08-04 23:14:54-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-08-05 09:56:02-07:00
log6f545683f3d53917df816ca6cd5c9c20474071f3
tree1ad7438ccb144ea3739cfb452027150e322494ea
parent82961a8c9f66c03b7f1a802d2d47d26bf0af7dca

std: replace various mem copies with `@memmove`


5 files changed, 16 insertions(+), 26 deletions(-)

lib/std/Progress.zig+1-1
...@@ -1006,7 +1006,7 @@ fn serializeIpc(start_serialized_len: usize, serialized_buffer: *Serialized.Buff...@@ -1006,7 +1006,7 @@ fn serializeIpc(start_serialized_len: usize, serialized_buffer: *Serialized.Buff
1006 continue;1006 continue;
1007 }1007 }
1008 const src = pipe_buf[m.remaining_read_trash_bytes..n];1008 const src = pipe_buf[m.remaining_read_trash_bytes..n];
1009 std.mem.copyForwards(u8, &pipe_buf, src);1009 @memmove(pipe_buf[0..src.len], src);
1010 m.remaining_read_trash_bytes = 0;1010 m.remaining_read_trash_bytes = 0;
1011 bytes_read = src.len;1011 bytes_read = src.len;
1012 continue;1012 continue;
lib/std/array_list.zig+6-9
...@@ -158,7 +158,7 @@ pub fn ArrayListAligned(comptime T: type, comptime alignment: ?mem.Alignment) ty...@@ -158,7 +158,7 @@ pub fn ArrayListAligned(comptime T: type, comptime alignment: ?mem.Alignment) ty
158 assert(self.items.len < self.capacity);158 assert(self.items.len < self.capacity);
159 self.items.len += 1;159 self.items.len += 1;
160160
161 mem.copyBackwards(T, self.items[i + 1 .. self.items.len], self.items[i .. self.items.len - 1]);161 @memmove(self.items[i + 1 .. self.items.len], self.items[i .. self.items.len - 1]);
162 self.items[i] = item;162 self.items[i] = item;
163 }163 }
164164
...@@ -216,7 +216,7 @@ pub fn ArrayListAligned(comptime T: type, comptime alignment: ?mem.Alignment) ty...@@ -216,7 +216,7 @@ pub fn ArrayListAligned(comptime T: type, comptime alignment: ?mem.Alignment) ty
216 assert(self.capacity >= new_len);216 assert(self.capacity >= new_len);
217 const to_move = self.items[index..];217 const to_move = self.items[index..];
218 self.items.len = new_len;218 self.items.len = new_len;
219 mem.copyBackwards(T, self.items[index + count ..], to_move);219 @memmove(self.items[index + count ..][0..to_move.len], to_move);
220 const result = self.items[index..][0..count];220 const result = self.items[index..][0..count];
221 @memset(result, undefined);221 @memset(result, undefined);
222 return result;222 return result;
...@@ -746,7 +746,7 @@ pub fn ArrayListAlignedUnmanaged(comptime T: type, comptime alignment: ?mem.Alig...@@ -746,7 +746,7 @@ pub fn ArrayListAlignedUnmanaged(comptime T: type, comptime alignment: ?mem.Alig
746 assert(self.items.len < self.capacity);746 assert(self.items.len < self.capacity);
747 self.items.len += 1;747 self.items.len += 1;
748748
749 mem.copyBackwards(T, self.items[i + 1 .. self.items.len], self.items[i .. self.items.len - 1]);749 @memmove(self.items[i + 1 .. self.items.len], self.items[i .. self.items.len - 1]);
750 self.items[i] = item;750 self.items[i] = item;
751 }751 }
752752
...@@ -782,7 +782,7 @@ pub fn ArrayListAlignedUnmanaged(comptime T: type, comptime alignment: ?mem.Alig...@@ -782,7 +782,7 @@ pub fn ArrayListAlignedUnmanaged(comptime T: type, comptime alignment: ?mem.Alig
782 assert(self.capacity >= new_len);782 assert(self.capacity >= new_len);
783 const to_move = self.items[index..];783 const to_move = self.items[index..];
784 self.items.len = new_len;784 self.items.len = new_len;
785 mem.copyBackwards(T, self.items[index + count ..], to_move);785 @memmove(self.items[index + count ..][0..to_move.len], to_move);
786 const result = self.items[index..][0..count];786 const result = self.items[index..][0..count];
787 @memset(result, undefined);787 @memset(result, undefined);
788 return result;788 return result;
...@@ -848,11 +848,8 @@ pub fn ArrayListAlignedUnmanaged(comptime T: type, comptime alignment: ?mem.Alig...@@ -848,11 +848,8 @@ pub fn ArrayListAlignedUnmanaged(comptime T: type, comptime alignment: ?mem.Alig
848 } else {848 } else {
849 const extra = range.len - new_items.len;849 const extra = range.len - new_items.len;
850 @memcpy(range[0..new_items.len], new_items);850 @memcpy(range[0..new_items.len], new_items);
851 std.mem.copyForwards(851 const src = self.items[after_range..];
852 T,852 @memmove(self.items[after_range - extra ..][0..src.len], src);
853 self.items[after_range - extra ..],
854 self.items[after_range..],
855 );
856 @memset(self.items[self.items.len - extra ..], undefined);853 @memset(self.items[self.items.len - extra ..], undefined);
857 self.items.len -= extra;854 self.items.len -= extra;
858 }855 }
lib/std/math/big/int.zig+3-5
...@@ -1710,7 +1710,7 @@ pub const Mutable = struct {...@@ -1710,7 +1710,7 @@ pub const Mutable = struct {
17101710
1711 if (xy_trailing != 0 and r.limbs[r.len - 1] != 0) {1711 if (xy_trailing != 0 and r.limbs[r.len - 1] != 0) {
1712 // Manually shift here since we know its limb aligned.1712 // Manually shift here since we know its limb aligned.
1713 mem.copyBackwards(Limb, r.limbs[xy_trailing..], r.limbs[0..r.len]);1713 @memmove(r.limbs[xy_trailing..][0..r.len], r.limbs[0..r.len]);
1714 @memset(r.limbs[0..xy_trailing], 0);1714 @memset(r.limbs[0..xy_trailing], 0);
1715 r.len += xy_trailing;1715 r.len += xy_trailing;
1716 }1716 }
...@@ -3836,8 +3836,7 @@ fn llshl(r: []Limb, a: []const Limb, shift: usize) usize {...@@ -3836,8 +3836,7 @@ fn llshl(r: []Limb, a: []const Limb, shift: usize) usize {
3836 std.debug.assert(@intFromPtr(r.ptr) >= @intFromPtr(a.ptr));3836 std.debug.assert(@intFromPtr(r.ptr) >= @intFromPtr(a.ptr));
38373837
3838 if (shift == 0) {3838 if (shift == 0) {
3839 if (a.ptr != r.ptr)3839 if (a.ptr != r.ptr) @memmove(r[0..a.len], a);
3840 std.mem.copyBackwards(Limb, r[0..a.len], a);
3841 return a.len;3840 return a.len;
3842 }3841 }
3843 if (shift >= limb_bits) {3842 if (shift >= limb_bits) {
...@@ -3891,8 +3890,7 @@ fn llshr(r: []Limb, a: []const Limb, shift: usize) usize {...@@ -3891,8 +3890,7 @@ fn llshr(r: []Limb, a: []const Limb, shift: usize) usize {
3891 if (shift == 0) {3890 if (shift == 0) {
3892 std.debug.assert(r.len >= a.len);3891 std.debug.assert(r.len >= a.len);
38933892
3894 if (a.ptr != r.ptr)3893 if (a.ptr != r.ptr) @memmove(r[0..a.len], a);
3895 std.mem.copyForwards(Limb, r[0..a.len], a);
3896 return a.len;3894 return a.len;
3897 }3895 }
3898 if (shift >= limb_bits) {3896 if (shift >= limb_bits) {
lib/std/os/windows.zig+3-8
...@@ -1332,7 +1332,7 @@ pub fn GetFinalPathNameByHandle(...@@ -1332,7 +1332,7 @@ pub fn GetFinalPathNameByHandle(
1332 // dropping the \Device\Mup\ and making sure the path begins with \\1332 // dropping the \Device\Mup\ and making sure the path begins with \\
1333 if (mem.eql(u16, device_name_u16, std.unicode.utf8ToUtf16LeStringLiteral("Mup"))) {1333 if (mem.eql(u16, device_name_u16, std.unicode.utf8ToUtf16LeStringLiteral("Mup"))) {
1334 out_buffer[0] = '\\';1334 out_buffer[0] = '\\';
1335 mem.copyForwards(u16, out_buffer[1..][0..file_name_u16.len], file_name_u16);1335 @memmove(out_buffer[1..][0..file_name_u16.len], file_name_u16);
1336 return out_buffer[0 .. 1 + file_name_u16.len];1336 return out_buffer[0 .. 1 + file_name_u16.len];
1337 }1337 }
13381338
...@@ -1400,7 +1400,7 @@ pub fn GetFinalPathNameByHandle(...@@ -1400,7 +1400,7 @@ pub fn GetFinalPathNameByHandle(
1400 if (out_buffer.len < drive_letter.len + file_name_u16.len) return error.NameTooLong;1400 if (out_buffer.len < drive_letter.len + file_name_u16.len) return error.NameTooLong;
14011401
1402 @memcpy(out_buffer[0..drive_letter.len], drive_letter);1402 @memcpy(out_buffer[0..drive_letter.len], drive_letter);
1403 mem.copyForwards(u16, out_buffer[drive_letter.len..][0..file_name_u16.len], file_name_u16);1403 @memmove(out_buffer[drive_letter.len..][0..file_name_u16.len], file_name_u16);
1404 const total_len = drive_letter.len + file_name_u16.len;1404 const total_len = drive_letter.len + file_name_u16.len;
14051405
1406 // Validate that DOS does not contain any spurious nul bytes.1406 // Validate that DOS does not contain any spurious nul bytes.
...@@ -1449,12 +1449,7 @@ pub fn GetFinalPathNameByHandle(...@@ -1449,12 +1449,7 @@ pub fn GetFinalPathNameByHandle(
1449 // to copy backwards. We also need to do this before copying the volume path because1449 // to copy backwards. We also need to do this before copying the volume path because
1450 // it could overwrite the file_name_u16 memory.1450 // it could overwrite the file_name_u16 memory.
1451 const file_name_dest = out_buffer[volume_path.len..][0..file_name_u16.len];1451 const file_name_dest = out_buffer[volume_path.len..][0..file_name_u16.len];
1452 const file_name_byte_offset = @intFromPtr(file_name_u16.ptr) - @intFromPtr(out_buffer.ptr);1452 @memmove(file_name_dest, file_name_u16);
1453 const file_name_index = file_name_byte_offset / @sizeOf(u16);
1454 if (volume_path.len > file_name_index)
1455 mem.copyBackwards(u16, file_name_dest, file_name_u16)
1456 else
1457 mem.copyForwards(u16, file_name_dest, file_name_u16);
1458 @memcpy(out_buffer[0..volume_path.len], volume_path);1453 @memcpy(out_buffer[0..volume_path.len], volume_path);
1459 const total_len = volume_path.len + file_name_u16.len;1454 const total_len = volume_path.len + file_name_u16.len;
14601455
src/Sema.zig+3-3
...@@ -2631,7 +2631,7 @@ fn reparentOwnedErrorMsg(...@@ -2631,7 +2631,7 @@ fn reparentOwnedErrorMsg(
26312631
2632 const orig_notes = msg.notes.len;2632 const orig_notes = msg.notes.len;
2633 msg.notes = try sema.gpa.realloc(msg.notes, orig_notes + 1);2633 msg.notes = try sema.gpa.realloc(msg.notes, orig_notes + 1);
2634 std.mem.copyBackwards(Zcu.ErrorMsg, msg.notes[1..], msg.notes[0..orig_notes]);2634 @memmove(msg.notes[1..][0..orig_notes], msg.notes[0..orig_notes]);
2635 msg.notes[0] = .{2635 msg.notes[0] = .{
2636 .src_loc = msg.src_loc,2636 .src_loc = msg.src_loc,
2637 .msg = msg.msg,2637 .msg = msg.msg,
...@@ -14464,8 +14464,8 @@ fn analyzeTupleMul(...@@ -14464,8 +14464,8 @@ fn analyzeTupleMul(
14464 }14464 }
14465 }14465 }
14466 for (0..factor) |i| {14466 for (0..factor) |i| {
14467 mem.copyForwards(InternPool.Index, types[tuple_len * i ..], types[0..tuple_len]);14467 @memmove(types[tuple_len * i ..][0..tuple_len], types[0..tuple_len]);
14468 mem.copyForwards(InternPool.Index, values[tuple_len * i ..], values[0..tuple_len]);14468 @memmove(values[tuple_len * i ..][0..tuple_len], values[0..tuple_len]);
14469 }14469 }
14470 break :rs runtime_src;14470 break :rs runtime_src;
14471 };14471 };