RFR (S): 8003853: specify offset of IC load in java_to_interp stub [Was: Re: RFR (S): Specify offset of IC load in java_to_interp stub.]
Christian Thalinger
christian.thalinger at oracle.com
Wed Nov 28 16:35:17 PST 2012
On Nov 27, 2012, at 4:24 AM, "Lindenmaier, Goetz" <goetz.lindenmaier at sap.com> wrote:
> Hi Chris,
>
>> Why do you need all these shared code changes when you have this in emit_java_to_interp_stub?
> Shared code (class CompiledStaticCall) wants to patch the inline cache
> in the stub which is emitted in platform code.
> So the platform code should specify how the shared code can find the inline cache
> in the stub, which it does through the constant I introduced.
>
>> Do you need two relocations? I'm confused.
> No, three ;)
> The relocation you mention is used to find the stub given the call.
> The other relocations are needed to find the inline cache / call target
> once the stub is found (see CompiledStaticCall::set_to_interpreted()).
> It's just the same on x86_64:
>
> // static stub relocation stores the instruction address of the call
> __ relocate(static_stub_Relocation::spec(mark), RELOC_IMM64);
> // static stub relocation also tags the methodOop in the code-stream.
> __ movoop(rbx, (jobject) NULL); // method is zapped till fixup time
> // This is recognized as unresolved by relocs/nativeinst/ic code
> __ jump(RuntimeAddress(__ pc()));
>
> On PPC, we have to load the base of the constant table after generating the
> static_stub_relocation and before emitting the ppc equivalent for moveoop(). This offset is
> exactly what we store in the CompiledStaticCall::comp_to_int_load_offset constant.
Why can't you point the relocation to the method load instruction? It doesn't seem right to do that in shared code.
-- Chris
>
> Best regards,
> Goetz.
>
>
>
> -----Original Message-----
> From: Christian Thalinger [mailto:christian.thalinger at oracle.com]
> Sent: Dienstag, 27. November 2012 01:53
> To: Lindenmaier, Goetz
> Cc: hotspot-compiler-dev at openjdk.java.net
> Subject: Re: RFR (S): 8003853: specify offset of IC load in java_to_interp stub [Was: Re: RFR (S): Specify offset of IC load in java_to_interp stub.]
>
>
> On Nov 22, 2012, at 8:51 AM, "Lindenmaier, Goetz" <goetz.lindenmaier at sap.com> wrote:
>
>> Hi Chris,
>>
>> We put it into the ad file because it describes an offset into the stub that is
>> generated from the ad file by emit_java_to_interp(CodeBuffer& cbuf),
>> used by ir node CallStaticJavaDirect. Maybe I should not call it stub, but it's
>> generated into the stubs section of the code buffer.
>> If that stub generator is moved out of the ad file to shared compiler code, one should
>> move the field with it, but for the current implementation I think that's fine.
>>
>> Does C1 generate the same stub? Or is the CompiledStaticCall a C2 feature?
>> If so, one could protect the whole thing by #ifdef COMPILER2.
>
> Why do you need all these shared code changes when you have this in emit_java_to_interp_stub?
>
> // Create a static stub relocation which relates this stub
> // with the call instruction at insts_call_instruction_offset in the
> // instructions code-section.
> __ relocate(static_stub_Relocation::spec(__ code()->insts()->start() + insts_relocation_offset));
>
> Do you need two relocations? I'm confused.
>
> -- Chris
>
>>
>> Thanks for all the bugids!
>>
>> Best regards,
>> Goetz.
>>
>> -----Original Message-----
>> From: Christian Thalinger [mailto:christian.thalinger at oracle.com]
>> Sent: Mittwoch, 21. November 2012 19:53
>> To: Lindenmaier, Goetz
>> Cc: hotspot-compiler-dev at openjdk.java.net
>> Subject: RFR (S): 8003853: specify offset of IC load in java_to_interp stub [Was: Re: RFR (S): Specify offset of IC load in java_to_interp stub.]
>>
>>
>> On Nov 21, 2012, at 12:15 AM, "Lindenmaier, Goetz" <goetz.lindenmaier at sap.com> wrote:
>>
>>> Hi Chris,
>>>
>>> yes, there is no C1 on ppc.
>>> We do tiered compilation with a stripped C2.
>>
>> Right. But some other architecture (or in the future) might need this for C1 as well. We should find a better place for the value than the ad file. The obvious place would be compiledIC_<arch>.hpp but we don't have that file, yet.
>>
>> I filed:
>>
>> 8003853: specify offset of IC load in java_to_interp stub
>>
>> -- Chris
>>
>>>
>>> Best regards,
>>> Goetz
>>>
>>> -----Original Message-----
>>> From: Christian Thalinger [mailto:christian.thalinger at oracle.com]
>>> Sent: Dienstag, 20. November 2012 22:19
>>> To: Lindenmaier, Goetz
>>> Cc: hotspot-compiler-dev at openjdk.java.net
>>> Subject: Re: RFR (S): Specify offset of IC load in java_to_interp stub.
>>>
>>>
>>> On Nov 20, 2012, at 3:08 AM, "Lindenmaier, Goetz" <goetz.lindenmaier at sap.com> wrote:
>>>
>>>> Hi,
>>>>
>>>> The class CompiledStaticCall must know the location of the IC load in the java_to_interp stub
>>>> to update the IC with NativeMovConstReg. The current implementation assumes that
>>>> the load is always the first instruction in the stub. This is an artificial restriction. E.g.,
>>>> it might be useful to load the constant pool address (MachConstantBase) before the
>>>> IC load (as we do on PPC).
>>>>
>>>> This change adds a constant specifying an offset from the beginning of the stub to
>>>> the IC load. The offset is platform specific and 0 on sparc and x86.
>>>>
>>>> You can find the change here:
>>>> http://cr.openjdk.java.net/~goetz/webrevs/webrev-IC_offset/
>>>
>>> That should be fixed indeed.
>>>
>>> +#ifndef COMPILER2
>>> +const int CompiledStaticCall::comp_to_int_load_offset = 0;
>>>
>>> There is no C1 for PPC (sorry, I didn't check)?
>>>
>>> -- Chris
>>>
>>>>
>>>> or in our ppc port:
>>>> http://hg.openjdk.java.net/ppc-aix-port/jdk7u/hotspot/rev/c6f9c897ea33
>>>>
>>>> Thank you and best regards,
>>>> Goetz
>>>>
>>>>
>>>>
>>>
>>
>
More information about the hotspot-compiler-dev
mailing list