aboutsummaryrefslogtreecommitdiff
path: root/std/mem.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-02-06 20:21:13 -0500
committerGitHub <noreply@github.com>2019-02-06 20:21:13 -0500
commit8a5d3e2eaf72195993e4932bfda66d08a36c6064 (patch)
tree6a09c68ee70d00e97feeae55b213203fbaddc295 /std/mem.zig
parent3abf293a84b4dc052c0d735018db520eade6274b (diff)
parent89ffb5819703c81514e4f29d2cadb5b74ea1f840 (diff)
downloadzig-8a5d3e2eaf72195993e4932bfda66d08a36c6064.tar.gz
zig-8a5d3e2eaf72195993e4932bfda66d08a36c6064.zip
Merge pull request #1924 from ziglang/tls
Implement Thread Local Variables
Diffstat (limited to 'std/mem.zig')
-rw-r--r--std/mem.zig20
1 files changed, 20 insertions, 0 deletions
diff --git a/std/mem.zig b/std/mem.zig
index 26ae4ef089..178a5f6c6f 100644
--- a/std/mem.zig
+++ b/std/mem.zig
@@ -1366,3 +1366,23 @@ test "std.mem.subArrayPtr" {
sub2[1] = 'X';
debug.assert(std.mem.eql(u8, a2, "abcXef"));
}
+
+/// Round an address up to the nearest aligned address
+pub fn alignForward(addr: usize, alignment: usize) usize {
+ return (addr + alignment - 1) & ~(alignment - 1);
+}
+
+test "std.mem.alignForward" {
+ debug.assertOrPanic(alignForward(1, 1) == 1);
+ debug.assertOrPanic(alignForward(2, 1) == 2);
+ debug.assertOrPanic(alignForward(1, 2) == 2);
+ debug.assertOrPanic(alignForward(2, 2) == 2);
+ debug.assertOrPanic(alignForward(3, 2) == 4);
+ debug.assertOrPanic(alignForward(4, 2) == 4);
+ debug.assertOrPanic(alignForward(7, 8) == 8);
+ debug.assertOrPanic(alignForward(8, 8) == 8);
+ debug.assertOrPanic(alignForward(9, 8) == 16);
+ debug.assertOrPanic(alignForward(15, 8) == 16);
+ debug.assertOrPanic(alignForward(16, 8) == 16);
+ debug.assertOrPanic(alignForward(17, 8) == 24);
+}