From 1c0282d658f494674b93fe9aa8ded3160fe6290d Mon Sep 17 00:00:00 2001 From: NikoMalik Date: Sun, 5 Oct 2025 12:30:51 +0300 Subject: [PATCH 1/2] fix:use builtin memmove --- src/fastmem.zig | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/src/fastmem.zig b/src/fastmem.zig index bdea44155..47009a0a7 100644 --- a/src/fastmem.zig +++ b/src/fastmem.zig @@ -5,18 +5,7 @@ const assert = std.debug.assert; /// Same as std.mem.copyForwards/Backwards but prefers libc memmove if it is /// available because it is generally much faster. pub inline fn move(comptime T: type, dest: []T, source: []const T) void { - if (builtin.link_libc) { - _ = memmove(dest.ptr, source.ptr, source.len * @sizeOf(T)); - } else { - // Depending on the ordering of the copy, we need to use the - // proper call here. Unfortunately this function call is - // too generic to know this at comptime. - if (@intFromPtr(dest.ptr) <= @intFromPtr(source.ptr)) { - std.mem.copyForwards(T, dest, source); - } else { - std.mem.copyBackwards(T, dest, source); - } - } + @memmove(dest, source); } /// Same as @memcpy but prefers libc memcpy if it is available From ff3a6d06503f22cd38b4f741c9c63327805df6ca Mon Sep 17 00:00:00 2001 From: NikoMalik Date: Sun, 5 Oct 2025 17:35:58 +0300 Subject: [PATCH 2/2] fix: do not remove libc memmove until performance comparisons have been conducted --- src/fastmem.zig | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/fastmem.zig b/src/fastmem.zig index 47009a0a7..d4a0a7750 100644 --- a/src/fastmem.zig +++ b/src/fastmem.zig @@ -2,10 +2,14 @@ const std = @import("std"); const builtin = @import("builtin"); const assert = std.debug.assert; -/// Same as std.mem.copyForwards/Backwards but prefers libc memmove if it is -/// available because it is generally much faster. +/// Same as @memmove but prefers libc memmove if it is +/// available because it is generally much faster?. pub inline fn move(comptime T: type, dest: []T, source: []const T) void { - @memmove(dest, source); + if (builtin.link_libc) { + _ = memmove(dest.ptr, source.ptr, source.len * @sizeOf(T)); + } else { + @memmove(dest, source); + } } /// Same as @memcpy but prefers libc memcpy if it is available