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