RFR(XS): 8148353: [linux-sparc] Crash in libawt.so on Linux SPARC
Dean Long
dean.long at oracle.com
Wed Feb 24 00:22:04 UTC 2016
Vladimir, my understanding is that this is just because of the way LONG
and DOUBLE are represented internally, and doesn't mean we use two
native stack slots. So we are forcing C2 to treat int args as longs:
JRT_BLOCK_ENTRY(void, OptoRuntime::new_array_C(Klass* array_type, int
len, JavaThread *thread))
we generate code as if it was
JRT_BLOCK_ENTRY(void, OptoRuntime::new_array_C(Klass* array_type,
int64_t len, JavaThread *thread))
and we wrap a ConvI2LNode around "len" when we call.
dl
On 2/23/2016 1:32 PM, Vladimir Kozlov wrote:
> Code in sharedRuntime_sparc.cpp looks fine but I am worry about
> CCallingConventionRequiresIntsAsLongs change. You get additional slots
> on stack which is not expected on sparc:
> if (CCallingConventionRequiresIntsAsLongs && f->isa_int()) {
> fields[cnt++] = TypeLong::LONG;
> fields[cnt] = Type::HALF; // Must add an additional half for a
> long.
>
> I found next text which says that integer values takes one stack slot
> only (but it does requires sign extension to 64 bits):
> https://docs.oracle.com/cd/E26502_01/html/E28387/gentextid-2734.html#scrolltoc
>
>
> Thanks,
> Vladimir
>
> On 2/23/16 8:28 AM, Roland Westrelin wrote:
>> Another webrev because using L5 is not necessary when the argument is
>> moved from register to register:
>>
>> http://cr.openjdk.java.net/~roland/8148353/webrev.02/
>>
>> Roland.
>>
More information about the hotspot-compiler-dev
mailing list