| ... | ... | @@ -55,6 +55,31 @@ export fn memmove(dest: ?[*]u8, src: ?[*]const u8, n: usize) ?[*]u8 { |
| 55 | 55 | return dest; |
| 56 | 56 | } |
| 57 | 57 | |
| 58 | export fn memcmp(vl: ?[*]const u8, vr: ?[*]const u8, n: usize) isize { |
| 59 | @setRuntimeSafety(false); |
| 60 | |
| 61 | var index: usize = 0; |
| 62 | while (index != n) : (index += 1) { |
| 63 | const compare_val = @bitCast(i8, vl.?[index] -% vr.?[index]); |
| 64 | if (compare_val != 0) { |
| 65 | return compare_val; |
| 66 | } |
| 67 | } |
| 68 | |
| 69 | return 0; |
| 70 | } |
| 71 | |
| 72 | test "test_memcmp" { |
| 73 | const base_arr = []u8{ 1, 1, 1 }; |
| 74 | const arr1 = []u8{ 1, 1, 1 }; |
| 75 | const arr2 = []u8{ 1, 0, 1 }; |
| 76 | const arr3 = []u8{ 1, 2, 1 }; |
| 77 | |
| 78 | std.testing.expect(memcmp(base_arr[0..].ptr, arr1[0..].ptr, base_arr.len) == 0); |
| 79 | std.testing.expect(memcmp(base_arr[0..].ptr, arr2[0..].ptr, base_arr.len) == 1); |
| 80 | std.testing.expect(memcmp(base_arr[0..].ptr, arr3[0..].ptr, base_arr.len) == -1); |
| 81 | } |
| 82 | |
| 58 | 83 | comptime { |
| 59 | 84 | if (builtin.mode != builtin.Mode.ReleaseFast and |
| 60 | 85 | builtin.mode != builtin.Mode.ReleaseSmall and |