Skip to content

Commit 5584836

Browse files
kada49alexrp
andauthored
libc: implement common abs for various integer sizes (#23893)
* libc: implement common `abs` for various integer sizes * libc: move imaxabs to inttypes.zig and don't use cInclude * libc: delete `fabs` c implementations because already implemented in compiler_rt * libc: export functions depending on the target libc Previously all the functions that were exported were handled equally, though some may exist and some not inside the same file. Moving the checks inside the file allows handling different functions differently * remove empty ifs in inttypes Co-authored-by: Alex Rønne Petersen <[email protected]> * remove empty ifs in stdlib Co-authored-by: Alex Rønne Petersen <[email protected]> * libc: use `@abs` for the absolute value calculation --------- Co-authored-by: Alex Rønne Petersen <[email protected]>
1 parent a63f787 commit 5584836

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+65
-428
lines changed

lib/c.zig

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ else
1414
std.debug.no_panic;
1515

1616
comptime {
17+
_ = @import("c/inttypes.zig");
18+
_ = @import("c/stdlib.zig");
19+
1720
if (builtin.target.isMuslLibC() or builtin.target.isWasiLibC()) {
1821
// Files specific to musl and wasi-libc.
1922
_ = @import("c/string.zig");

lib/c/inttypes.zig

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
const std = @import("std");
2+
const common = @import("common.zig");
3+
const builtin = @import("builtin");
4+
const intmax_t = std.c.intmax_t;
5+
6+
comptime {
7+
if (builtin.target.isMuslLibC() or builtin.target.isWasiLibC()) {
8+
// Functions specific to musl and wasi-libc.
9+
@export(&imaxabs, .{ .name = "imaxabs", .linkage = common.linkage, .visibility = common.visibility });
10+
}
11+
}
12+
13+
fn imaxabs(a: intmax_t) callconv(.c) intmax_t {
14+
return @intCast(@abs(a));
15+
}
16+
17+
test imaxabs {
18+
const val: intmax_t = -10;
19+
try std.testing.expectEqual(10, imaxabs(val));
20+
}

lib/c/stdlib.zig

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
const std = @import("std");
2+
const common = @import("common.zig");
3+
const builtin = @import("builtin");
4+
5+
comptime {
6+
if (builtin.target.isMuslLibC() or builtin.target.isWasiLibC()) {
7+
// Functions specific to musl and wasi-libc.
8+
@export(&abs, .{ .name = "abs", .linkage = common.linkage, .visibility = common.visibility });
9+
@export(&labs, .{ .name = "labs", .linkage = common.linkage, .visibility = common.visibility });
10+
@export(&llabs, .{ .name = "llabs", .linkage = common.linkage, .visibility = common.visibility });
11+
}
12+
}
13+
14+
fn abs(a: c_int) callconv(.c) c_int {
15+
return @intCast(@abs(a));
16+
}
17+
18+
fn labs(a: c_long) callconv(.c) c_long {
19+
return @intCast(@abs(a));
20+
}
21+
22+
fn llabs(a: c_longlong) callconv(.c) c_longlong {
23+
return @intCast(@abs(a));
24+
}
25+
26+
test abs {
27+
const val: c_int = -10;
28+
try std.testing.expectEqual(10, abs(val));
29+
}
30+
31+
test labs {
32+
const val: c_long = -10;
33+
try std.testing.expectEqual(10, labs(val));
34+
}
35+
36+
test llabs {
37+
const val: c_longlong = -10;
38+
try std.testing.expectEqual(10, llabs(val));
39+
}

lib/libc/mingw/math/fabsf.c

Lines changed: 0 additions & 18 deletions
This file was deleted.

lib/libc/mingw/math/fabsl.c

Lines changed: 0 additions & 18 deletions
This file was deleted.

lib/libc/musl/src/math/aarch64/fabs.c

Lines changed: 0 additions & 7 deletions
This file was deleted.

lib/libc/musl/src/math/aarch64/fabsf.c

Lines changed: 0 additions & 7 deletions
This file was deleted.

lib/libc/musl/src/math/arm/fabs.c

Lines changed: 0 additions & 15 deletions
This file was deleted.

lib/libc/musl/src/math/arm/fabsf.c

Lines changed: 0 additions & 15 deletions
This file was deleted.

lib/libc/musl/src/math/fabs.c

Lines changed: 0 additions & 9 deletions
This file was deleted.

lib/libc/musl/src/math/fabsf.c

Lines changed: 0 additions & 9 deletions
This file was deleted.

lib/libc/musl/src/math/fabsl.c

Lines changed: 0 additions & 15 deletions
This file was deleted.

lib/libc/musl/src/math/i386/fabs.c

Lines changed: 0 additions & 7 deletions
This file was deleted.

lib/libc/musl/src/math/i386/fabsf.c

Lines changed: 0 additions & 7 deletions
This file was deleted.

lib/libc/musl/src/math/i386/fabsl.c

Lines changed: 0 additions & 7 deletions
This file was deleted.

lib/libc/musl/src/math/mips/fabs.c

Lines changed: 0 additions & 16 deletions
This file was deleted.

lib/libc/musl/src/math/mips/fabsf.c

Lines changed: 0 additions & 16 deletions
This file was deleted.

lib/libc/musl/src/math/powerpc/fabs.c

Lines changed: 0 additions & 15 deletions
This file was deleted.

lib/libc/musl/src/math/powerpc/fabsf.c

Lines changed: 0 additions & 15 deletions
This file was deleted.

lib/libc/musl/src/math/powerpc64/fabs.c

Lines changed: 0 additions & 7 deletions
This file was deleted.

lib/libc/musl/src/math/powerpc64/fabsf.c

Lines changed: 0 additions & 7 deletions
This file was deleted.

lib/libc/musl/src/math/riscv32/fabs.c

Lines changed: 0 additions & 15 deletions
This file was deleted.

lib/libc/musl/src/math/riscv32/fabsf.c

Lines changed: 0 additions & 15 deletions
This file was deleted.

lib/libc/musl/src/math/riscv64/fabs.c

Lines changed: 0 additions & 15 deletions
This file was deleted.

lib/libc/musl/src/math/riscv64/fabsf.c

Lines changed: 0 additions & 15 deletions
This file was deleted.

lib/libc/musl/src/math/s390x/fabs.c

Lines changed: 0 additions & 15 deletions
This file was deleted.

lib/libc/musl/src/math/s390x/fabsf.c

Lines changed: 0 additions & 15 deletions
This file was deleted.

0 commit comments

Comments
 (0)