RFR(M): 8028580: PPC64 (part 114/120): Support for Call nodes with constants.
Vladimir Kozlov
vladimir.kozlov at oracle.com
Wed Nov 20 11:10:17 PST 2013
Looks good. I am pushing it through JPRT.
Thanks,
Vladimir
On 11/20/13 12:22 AM, Lindenmaier, Goetz wrote:
> Hi Vladimir,
>
> I fixed it and updated the webrev.
>
> Best regards,
> Goetz.
>
> -----Original Message-----
> From: hotspot-dev-bounces at openjdk.java.net [mailto:hotspot-dev-bounces at openjdk.java.net] On Behalf Of Vladimir Kozlov
> Sent: Mittwoch, 20. November 2013 00:36
> To: hotspot-dev at openjdk.java.net
> Subject: Re: RFR(M): 8028580: PPC64 (part 114/120): Support for Call nodes with constants.
>
> On 11/19/13 3:24 PM, Lindenmaier, Goetz wrote:
>> Hi Vladimir,
>>
>>> I think the next code should be more general
>> I know what you mean. But I have no way to find out what kind of constant the
>> nodes will put into the table. So I can not check for their size in this loop.
>> That's all hidden in the emitters, which are platform dependent.
>> So I must assume 8 bytes of size.
>
> Add comment that code reserves maximum expected size for referenced
> constants since we don't know actual size at this point. And may be use
> sizeof(jlong) instead of 8.
>
> Thanks,
> Vladimir
>
>>
>> Therefore I proposed to move the functionality from MachConstantNode
>> to operands, and add operands to calls (similar to TEMP operands). Then
>> I could check the operands in this loop and find out about the constants
>> But I guess that's far more change, out of scope for the PPC port.
>>
>> I updated the webrev with the improved formatting.
>>
>> Thanks a lot for the review!
>> Best regards,
>> Goetz
>>
>>
>> -----Original Message-----
>> From: Vladimir Kozlov [mailto:vladimir.kozlov at oracle.com]
>> Sent: Tuesday, November 19, 2013 11:04 PM
>> To: Lindenmaier, Goetz; 'hotspot-dev at openjdk.java.net'; 'ppc-aix-port-dev at openjdk.java.net'
>> Subject: Re: RFR(M): 8028580: PPC64 (part 114/120): Support for Call nodes with constants.
>>
>> It is much better than I expected!
>> This is too good to be true :) Are you sure it is complete changes?
>>
>> Few small notes:
>>
>> Could you, please, change code (new and old) in in_RegMask() methods you
>> touched in machnode.cpp to put 'return' on separate line after condition
>> and use {} ?
>>
>> I think the next code should be more general where you loop over all
>> const inputs and ask each one for size:
>>
>> add_size += (n->as_Mach()->ins_num_consts() * 8);
>>
>> In ConstantTable::calculate_offsets_and_size() we have:
>>
>> int typesize = type_to_size_in_bytes(con->type());
>> offset = align_size_up(offset, typesize);
>>
>> Thanks,
>> Vladimir
>>
>> On 11/19/13 3:58 AM, Lindenmaier, Goetz wrote:
>>> Hi,
>>>
>>> C2 Call nodes use several constant values. So far C2 does not
>>> support placing these values in the constant table of the nmethod.
>>>
>>> Among others, these constants are
>>> - the called address
>>> - the inline cache
>>> - values required by the C-calling convention (on PPC, env pointer
>>> and toc from function descriptor)
>>>
>>> This change extends Call nodes so that they can issue constants
>>> to the constant table.
>>> http://cr.openjdk.java.net/~goetz/webrevs/8028580-0-call/
>>>
>>> - Extend adlc to add edge to MachConstantBaseNode if
>>> $constanttablebase is used in the specification.
>>> - Extend Call nodes to deliver proper register mask to
>>> register allocation for this new input.
>>> - Add method ins_num_consts() so that number of required
>>> constants can be specified in the call node.
>>> - Extend output() so that it reserves space for the
>>> constants in the Calls, using ins_num_consts().
>>>
>>> Please review and test this change.
>>>
>>> Thanks and best regards,
>>> Goetz.
>>>
More information about the ppc-aix-port-dev
mailing list