Value array element size represented as log2

David Simms david.simms at oracle.com
Tue Oct 2 07:55:55 UTC 2018


What is it you are asking here ? That you want to 20 bytes rather than 
pow 2 aligned ?

A long time ago we discussed that mul was too expensive compared to 
shift, so that encoding is intentional (addressing uses shift)


On 2/10/2018 8:01 a.m., Ioi Lam wrote:
> (Not sure if this has been discussed before. I did a quick JBS search 
> of "valueArrayKlass" but couldn't find anything).
>
> For example, if my VT has 5 integers (20 bytes) it will take up 32 
> bytes inside the array. This seems kind of wasteful, especially when 
> you have larger VT types.
>
> See:
>
> http://hg.openjdk.java.net/valhalla/valhalla/file/e0c13ab0b852/src/hotspot/share/oops/valueArrayKlass.cpp#l182 
>
>
> jint ValueArrayKlass::array_layout_helper(ValueKlass* vk) {
>   BasicType etype = T_VALUETYPE;
>   int atag  = _lh_array_tag_vt_value;
>   int esize = upper_log2(vk->raw_value_byte_size());
>
> klass.hpp:
>
>   // For arrays, layout helper is a negative number, containing four
>   // distinct bytes, as follows:
>   //    MSB:[tag, hsz, ebt, log2(esz)]:LSB
>   // where:
>   //    tag is 0x80 if the elements are oops, 0xC0 if non-oops
>   //    hsz is array header size in bytes (i.e., offset of first element)
>   //    ebt is the BasicType of the elements
>   //    esz is the element size in bytes
>
>



More information about the valhalla-dev mailing list