| ... | ... | @@ -1481,6 +1481,7 @@ test "subArrayPtr" { |
| 1481 | 1481 | } |
| 1482 | 1482 | |
| 1483 | 1483 | /// Round an address up to the nearest aligned address |
| 1484 | /// The alignment must be greater than 0. |
| 1484 | 1485 | pub fn alignForward(addr: usize, alignment: usize) usize { |
| 1485 | 1486 | return alignBackward(addr + (alignment - 1), alignment); |
| 1486 | 1487 | } |
| ... | ... | @@ -1500,6 +1501,8 @@ test "alignForward" { |
| 1500 | 1501 | testing.expect(alignForward(17, 8) == 24); |
| 1501 | 1502 | } |
| 1502 | 1503 | |
| 1504 | /// Round an address up to the previous aligned address |
| 1505 | /// The alignment must be greater than 0. |
| 1503 | 1506 | pub fn alignBackward(addr: usize, alignment: usize) usize { |
| 1504 | 1507 | // 000010000 // example addr |
| 1505 | 1508 | // 000001111 // subtract 1 |
| ... | ... | @@ -1507,6 +1510,8 @@ pub fn alignBackward(addr: usize, alignment: usize) usize { |
| 1507 | 1510 | return addr & ~(alignment - 1); |
| 1508 | 1511 | } |
| 1509 | 1512 | |
| 1513 | /// 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. |
| 1510 | 1515 | pub fn isAligned(addr: usize, alignment: usize) bool { |
| 1511 | 1516 | return alignBackward(addr, alignment) == addr; |
| 1512 | 1517 | } |