Always add or subtract ((char *)_ALIGN(p) - p) which is small (<16)
rather than the individual components. This prevents pointers from
being taken out of bounds and makes the copy size calculations more
consistant with the buffer offset calculations.
Obtained from: CheriBSD
Effort: CHERI upstreaming
Sponsored by: DARPA