authorgravatar for shawn@git.icuShawn Landden <shawn@git.icu> 2019-06-08 14:34:15-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-06-08 17:24:30-04:00
log720ed74413f086a93f5ed66159300d8dd48e8034
tree872e89106fc138feff34c5f9a5814d6fbab283c3
parent404e4b026888471d50ff74306a9c3ec75039f6a9

add bcmp implementation as LLVM 9 now emits those

The optimizer will now convert calls to memcmp into a calls to bcmp in some circumstances. Users who are building freestanding code (not depending on the platform’s libc) without specifying -ffreestanding may need to either pass -fno-builtin-bcmp, or provide a bcmp function. http://llvm.org/docs/ReleaseNotes.html#non-comprehensive-list-of-changes-in-this-release

1 files changed, 26 insertions(+), 2 deletions(-)

std/special/c.zig+26-2
......@@ -136,8 +136,32 @@ test "test_memcmp" {
136136 const arr3 = []u8{ 1, 2, 1 };
137137
138138 std.testing.expect(memcmp(base_arr[0..].ptr, arr1[0..].ptr, base_arr.len) == 0);
139 std.testing.expect(memcmp(base_arr[0..].ptr, arr2[0..].ptr, base_arr.len) == 1);
140 std.testing.expect(memcmp(base_arr[0..].ptr, arr3[0..].ptr, base_arr.len) == -1);
139 std.testing.expect(memcmp(base_arr[0..].ptr, arr2[0..].ptr, base_arr.len) > 0);
140 std.testing.expect(memcmp(base_arr[0..].ptr, arr3[0..].ptr, base_arr.len) < 0);
141}
142
143export fn bcmp(vl: [*]allowzero const u8, vr: [*]allowzero const u8, n: usize) isize {
144 @setRuntimeSafety(false);
145
146 var index: usize = 0;
147 while (index != n) : (index += 1) {
148 if (vl[index] != vr[index]) {
149 return 1;
150 }
151 }
152
153 return 0;
154}
155
156test "test_bcmp" {
157 const base_arr = []u8{ 1, 1, 1 };
158 const arr1 = []u8{ 1, 1, 1 };
159 const arr2 = []u8{ 1, 0, 1 };
160 const arr3 = []u8{ 1, 2, 1 };
161
162 std.testing.expect(bcmp(base_arr[0..].ptr, arr1[0..].ptr, base_arr.len) == 0);
163 std.testing.expect(bcmp(base_arr[0..].ptr, arr2[0..].ptr, base_arr.len) != 0);
164 std.testing.expect(bcmp(base_arr[0..].ptr, arr3[0..].ptr, base_arr.len) != 0);
141165}
142166
143167comptime {