| ... | @@ -1481,6 +1481,7 @@ test "subArrayPtr" { | ... | @@ -1481,6 +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 | pub fn alignForward(addr: usize, alignment: usize) usize { | 1485 | pub fn alignForward(addr: usize, alignment: usize) usize { |
| 1485 | return alignBackward(addr + (alignment - 1), alignment); | 1486 | return alignBackward(addr + (alignment - 1), alignment); |
| 1486 | } | 1487 | } |
| ... | @@ -1500,6 +1501,8 @@ test "alignForward" { | ... | @@ -1500,6 +1501,8 @@ test "alignForward" { |
| 1500 | testing.expect(alignForward(17, 8) == 24); | 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 | pub fn alignBackward(addr: usize, alignment: usize) usize { | 1506 | pub fn alignBackward(addr: usize, alignment: usize) usize { |
| 1504 | // 000010000 // example addr | 1507 | // 000010000 // example addr |
| 1505 | // 000001111 // subtract 1 | 1508 | // 000001111 // subtract 1 |
| ... | @@ -1507,6 +1510,8 @@ pub fn alignBackward(addr: usize, alignment: usize) usize { | ... | @@ -1507,6 +1510,8 @@ pub fn alignBackward(addr: usize, alignment: usize) usize { |
| 1507 | return addr & ~(alignment - 1); | 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 | pub fn isAligned(addr: usize, alignment: usize) bool { | 1515 | pub fn isAligned(addr: usize, alignment: usize) bool { |
| 1511 | return alignBackward(addr, alignment) == addr; | 1516 | return alignBackward(addr, alignment) == addr; |
| 1512 | } | 1517 | } |