RFR: 8178489: Make align functions more type safe and consistent

Stefan Karlsson stefan.karlsson at oracle.com
Fri Jun 30 09:16:32 UTC 2017


Hi all,

Please review this patch to make the align functions more type safe and 
consistent.

http://cr.openjdk.java.net/~stefank/8178489/webrev.00
https://bugs.openjdk.java.net/browse/JDK-8178489

Note that this patch needs to be applied on top of the following patches 
that are out for review:
  http://cr.openjdk.java.net/~stefank/8178491/webrev.02
  http://cr.openjdk.java.net/~stefank/8178495/webrev.01

Currently, the align functions forces the user to often explicitly cast 
either the input parameters, or the return type, or both.

Two examples of the current API:
inline intptr_t align_size_up(intptr_t size, intptr_t alignment);
inline void* align_ptr_up(const void* ptr, size_t alignment);

I propose that we change the API to use templates to return the aligned 
value as the same type as the type of the unaligned input.

The proposed API would look like this:

template <typename T, typename A>
inline T align_size_up(T size, A alignment);

template <typename T, typename A>
inline T* align_ptr_up(T* ptr, A alignment);

and a follow-up RFE (JDK-8178499) would get rid of _size_ and _ptr_ from 
the names.

Usages of these align functions would then look like:

size_t aligned_size = align_up(alloc_size, os::vm_page_size())
HeapWord* aligned_top = align_up(top, region_size)

Please, take an extra close look at the reinterpret_cast I added in 
atomic.hpp. This was needed because the align_ptr_down now returns T* 
and not void*, and the compiler complained when we tried to do a static 
cast from a volatile jbyte* to a volatile jint*.

Tested with the align unit test and JPRT.

Thanks,
StefanK


More information about the hotspot-dev mailing list