RFR(M): 8028580: PPC64 (part 114/120): Support for Call nodes with constants.
Vladimir Kozlov
vladimir.kozlov at oracle.com
Tue Nov 19 15:36:23 PST 2013
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