| ... | @@ -1481,7 +1481,7 @@ test "subArrayPtr" { | ... | @@ -1481,7 +1481,7 @@ test "subArrayPtr" { |
| 1481 | } | 1481 | } |
| 1482 | | 1482 | |
| 1483 | /// Round an address up to the nearest aligned address | 1483 | /// 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. |
| 1485 | pub fn alignForward(addr: usize, alignment: usize) usize { | 1485 | pub fn alignForward(addr: usize, alignment: usize) usize { |
| 1486 | return alignBackward(addr + (alignment - 1), alignment); | 1486 | return alignBackward(addr + (alignment - 1), alignment); |
| 1487 | } | 1487 | } |
| ... | @@ -1502,8 +1502,9 @@ test "alignForward" { | ... | @@ -1502,8 +1502,9 @@ test "alignForward" { |
| 1502 | } | 1502 | } |
| 1503 | | 1503 | |
| 1504 | /// Round an address up to the previous aligned address | 1504 | /// 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. |
| 1506 | pub fn alignBackward(addr: usize, alignment: usize) usize { | 1506 | pub fn alignBackward(addr: usize, alignment: usize) usize { |
| | 1507 | assert(@popCount(usize, alignment) == 1); |
| 1507 | // 000010000 // example addr | 1508 | // 000010000 // example addr |
| 1508 | // 000001111 // subtract 1 | 1509 | // 000001111 // subtract 1 |
| 1509 | // 111110000 // binary not | 1510 | // 111110000 // binary not |
| ... | @@ -1511,7 +1512,7 @@ pub fn alignBackward(addr: usize, alignment: usize) usize { | ... | @@ -1511,7 +1512,7 @@ pub fn alignBackward(addr: usize, alignment: usize) usize { |
| 1511 | } | 1512 | } |
| 1512 | | 1513 | |
| 1513 | /// Given an address and an alignment, return true if the address is a multiple of the alignment | 1514 | /// 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. |
| 1515 | pub fn isAligned(addr: usize, alignment: usize) bool { | 1516 | pub fn isAligned(addr: usize, alignment: usize) bool { |
| 1516 | return alignBackward(addr, alignment) == addr; | 1517 | return alignBackward(addr, alignment) == addr; |
| 1517 | } | 1518 | } |