[aarch64-port-dev ] RFR: 8139674: aarch64: guarantee failure in TestOptionsWithRanges.java

Andrew Dinn adinn at redhat.com
Fri Oct 16 09:43:44 UTC 2015


On 16/10/15 10:02, Roland Westrelin wrote:
>> I don't think removing next line is right:
>>
>> -        add(mdp, mdp, to_add);
>>
>> it shifts to next metadata cell.
> 
> Yes, we shift to the next argument slot. We also do:
> 
> off_to_args += to_add;
> 
> and then data in the slot is addressed with:
> 
> in_bytes(TypeEntriesAtCall::stack_slot_offset(i))-off_to_args
> 
> that is relative to the current argument slot.
> 
> before the change. After the change, it’s adjusted to:
> 
> in_bytes(TypeEntriesAtCall::stack_slot_offset(i))
> 
> that is relative to the beginning of the space allocated for all arguments. So I think it’s good.

I agree with Roland that this change set is good. As he points out, in
the new code off_to_args is being updated every time round the loop

  1575         off_to_args += to_add;

So, the add instructions generated at

  1557           add(rscratch1, mdp, off_to_args);

and

  1583       add(rscratch1, mdp, off_to_args);

will be inserting different positive constants into the generated
instruction stream depending on the current value of off_to_args.

> This said, this:
> 
>>> What is happening is that the code in InterpreterMacroAssembler::profile_arguments_type adjusts mdp to point past the arguments and uses negative offsets to index fields at the start of the method data structure.
> 
> is not correct I think. We don’t move past the arguments. We move to the beginning of the slot dedicated to the next argument, not past it. The only source of negative offsets I can see is:
> 
> 1555           ldr(tmp, Address(mdp, in_bytes(TypeEntriesAtCall::cell_count_offset())-off_to_args));

What Ed said made sense to me. The old code executed

1550       add(mdp, mdp, off_to_args);

before the loop i.e. it left mdp pointing just past the args. Subsequent
ldr instructions then used a negative offset from this updated mdp
register to address the arg slots which precede the slot addressed by mdp.

Anyway, whatever the status regarding validity/clarity of the
explanation Ed provided in the accompanying mail note the actual code
changes look correct to me.

regards,


Andrew Dinn
-----------
Senior Principal Software Engineer
Red Hat UK Ltd
Registered in UK and Wales under Company Registration No. 3798903
Directors: Michael Cunningham (USA), Matt Parson (USA), Charlie Peters
(USA), Michael O'Neill (Ireland)


More information about the hotspot-compiler-dev mailing list