RFR: 8312495: assert(0 <= i && i < _len) failed: illegal index after JDK-8287061 on big endian platforms [v2]

Richard Reingruber rrich at openjdk.org
Mon Jul 24 14:59:41 UTC 2023


On Mon, 24 Jul 2023 14:54:57 GMT, Richard Reingruber <rrich at openjdk.org> wrote:

>> On big endian platforms `jint` values are stored in the high part of `StackValue` values. Therefore the the `StackValue` cannot be cast directly to `jint`. More details why this has to be like this are given in the JBS issue.
>> 
>> This is a common pattern. See also
>> 
>> https://github.com/openjdk/jdk/blob/8d29329138d44800ee4c0c02dacc01a06097de66/src/hotspot/share/runtime/deoptimization.cpp#L1386-L1387
>> https://github.com/openjdk/jdk/blob/8d29329138d44800ee4c0c02dacc01a06097de66/src/hotspot/share/runtime/deoptimization.cpp#L1513-L1514
>> 
>> ### Testing
>> Manny iterations of vmTestbase/vm/mlvm/meth/stress/compiler/sequences/Test.java.
>> 
>> JTReg tests: tier1-4 of hotspot and jdk. All of Langtools and jaxp. Renaissance benchmarks as functional tests.
>> 
>> All testing was done with fastdebug and release builds on the main platforms and also on Linux/PPC64le.
>
> Richard Reingruber has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Encapsulate endianess dependencies in StackValue::get_jint and set_jint

I've done the the refactoring. There are a few places were I wasn't sure what to do:

* differences in the handling of `Location::dbl` and `lng` in `reassign_fields_by_klass` and `reassign_type_array_elements`
* Should the logic of `StackValueCollection::float_at` and similar be moved to `StackValue`?
* what to do with `byte_array_put`?
* Should `get_jint` be implemented as a simple (jint) cast of `_integer_value` on little endian platforms?

-------------

PR Comment: https://git.openjdk.org/jdk/pull/14976#issuecomment-1648074874


More information about the hotspot-compiler-dev mailing list