RFR(XS): 8015437: SPARC cbcond offset value out of range

Morris Meyer morris.meyer at oracle.com
Fri Jun 7 03:54:58 PDT 2013


I needed to have the delayed()->nop() in there as ba() crashed for me.


      --mm


On Jun 7, 2013, at 12:35 AM, Vladimir Kozlov <vladimir.kozlov at oracle.com> wrote:

> Morris,
> 
> Why you used br(always, false, pt, slow_case) instead of ba(slow_case)?
> 
> Which is the same but simpler and it was specially added to avoid messing with parameters of br() instruction.
> 
> Thanks,
> Vladimir
> 
> On 6/6/13 9:22 PM, Morris Meyer wrote:
>> Folks,
>> 
>> Could I get a review for this issue?  The problem exists that we
>> optimistically assign forward branch labels and re-patch later. When we
>> emit a cbcond instruction - we check if the Label out of bounds.  If it
>> is already bound the check is fine - if not bound a zero offset is
>> emitted and the label is patched later
>> 
>> With Vladimir Kozlov's urgings I put about 4,000 lines of changes to add
>> __FILE__ and __LINE__ parameters to every assembler.bind() call and
>> checked the return of every patched branch to find out the line and
>> location of the offending bind.  The bind distance from
>> NewInstanceStub::emit_code() in c1_CodeStubs_sparc.cpp was to far from
>> __ allocate_object macro assembler call in LIRGenerator::new_instance
>> which uses the short branch in MacroAssembler::eden_allocate()
>> 
>> This change has been through JPRT.
>> 
>>         --morris
>> 
>> WEBREV - http://cr.openjdk.java.net/~morris/JDK-8015437.01
>> JBS - https://jbs.oracle.com/bugs/browse/JDK-8015437
>> 
>> 


More information about the hotspot-compiler-dev mailing list