authorgravatar for samuel.tebbs@gmail.comSamTebbs33 <samuel.tebbs@gmail.com> 2019-06-27 22:23:09+01:00
committergravatar for samuel.tebbs@gmail.comSamTebbs33 <samuel.tebbs@gmail.com> 2019-06-27 22:23:09+01:00
log623dbb73df7d8350f79f62c13587a354fdcd56d5
tree53e71aec6311c88cf91753e262460039a642bd52
parent14abf0fda5080b52ddfc0976d0e7c93928dbe543

Add check for power of 2 to std.mem.alignBackward


1 files changed, 4 insertions(+), 3 deletions(-)

std/mem.zig+4-3
......@@ -1481,7 +1481,7 @@ test "subArrayPtr" {
14811481}
14821482
14831483/// Round an address up to the nearest aligned address
1484/// The alignment must be greater than 0.
1484/// The alignment must be a power of 2 and greater than 0.
14851485pub fn alignForward(addr: usize, alignment: usize) usize {
14861486 return alignBackward(addr + (alignment - 1), alignment);
14871487}
......@@ -1502,8 +1502,9 @@ test "alignForward" {
15021502}
15031503
15041504/// Round an address up to the previous aligned address
1505/// The alignment must be greater than 0.
1505/// The alignment must be a power of 2 and greater than 0.
15061506pub fn alignBackward(addr: usize, alignment: usize) usize {
1507 assert(@popCount(usize, alignment) == 1);
15071508 // 000010000 // example addr
15081509 // 000001111 // subtract 1
15091510 // 111110000 // binary not
......@@ -1511,7 +1512,7 @@ pub fn alignBackward(addr: usize, alignment: usize) usize {
15111512}
15121513
15131514/// Given an address and an alignment, return true if the address is a multiple of the alignment
1514/// The alignment must be greater than 0.
1515/// The alignment must be a power of 2 and greater than 0.
15151516pub fn isAligned(addr: usize, alignment: usize) bool {
15161517 return alignBackward(addr, alignment) == addr;
15171518}