< prev index next >

src/hotspot/cpu/riscv/riscv.ad

Print this page

10536   ins_pipe(pipe_serial);
10537 %}
10538 
10539 // using t1 as the 'flag' register to bridge the BoolNode producers and consumers
10540 instruct cmpFastUnlock(rFlagsReg cr, iRegP object, iRegP box, iRegPNoSp tmp1, iRegPNoSp tmp2)
10541 %{
10542   predicate(LockingMode != LM_LIGHTWEIGHT);
10543   match(Set cr (FastUnlock object box));
10544   effect(TEMP tmp1, TEMP tmp2);
10545 
10546   ins_cost(10 * DEFAULT_COST);
10547   format %{ "fastunlock $object,$box\t! kills $tmp1, $tmp2, #@cmpFastUnlock" %}
10548 
10549   ins_encode %{
10550     __ fast_unlock($object$$Register, $box$$Register, $tmp1$$Register, $tmp2$$Register);
10551   %}
10552 
10553   ins_pipe(pipe_serial);
10554 %}
10555 
10556 instruct cmpFastLockLightweight(rFlagsReg cr, iRegP object, iRegP box, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3)

10557 %{
10558   predicate(LockingMode == LM_LIGHTWEIGHT);
10559   match(Set cr (FastLock object box));
10560   effect(TEMP tmp1, TEMP tmp2, TEMP tmp3);
10561 
10562   ins_cost(10 * DEFAULT_COST);
10563   format %{ "fastlock $object,$box\t! kills $tmp1,$tmp2,$tmp3 #@cmpFastLockLightweight" %}
10564 
10565   ins_encode %{
10566     __ fast_lock_lightweight($object$$Register, $box$$Register, $tmp1$$Register, $tmp2$$Register, $tmp3$$Register);

10567   %}
10568 
10569   ins_pipe(pipe_serial);
10570 %}
10571 
10572 instruct cmpFastUnlockLightweight(rFlagsReg cr, iRegP object, iRegP box, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3)

10573 %{
10574   predicate(LockingMode == LM_LIGHTWEIGHT);
10575   match(Set cr (FastUnlock object box));
10576   effect(TEMP tmp1, TEMP tmp2, TEMP tmp3);
10577 
10578   ins_cost(10 * DEFAULT_COST);
10579   format %{ "fastunlock $object,$box\t! kills $tmp1,$tmp2,$tmp3 #@cmpFastUnlockLightweight" %}
10580 
10581   ins_encode %{
10582     __ fast_unlock_lightweight($object$$Register, $box$$Register, $tmp1$$Register, $tmp2$$Register, $tmp3$$Register);

10583   %}
10584 
10585   ins_pipe(pipe_serial);
10586 %}
10587 
10588 // Tail Call; Jump from runtime stub to Java code.
10589 // Also known as an 'interprocedural jump'.
10590 // Target of jump will eventually return to caller.
10591 // TailJump below removes the return address.
10592 // Don't use fp for 'jump_target' because a MachEpilogNode has already been
10593 // emitted just above the TailCall which has reset fp to the caller state.
10594 instruct TailCalljmpInd(iRegPNoSpNoFp jump_target, inline_cache_RegP method_oop)
10595 %{
10596   match(TailCall jump_target method_oop);
10597 
10598   ins_cost(BRANCH_COST);
10599 
10600   format %{ "jalr $jump_target\t# $method_oop holds method oop, #@TailCalljmpInd." %}
10601 
10602   ins_encode(riscv_enc_tail_call(jump_target));

10536   ins_pipe(pipe_serial);
10537 %}
10538 
10539 // using t1 as the 'flag' register to bridge the BoolNode producers and consumers
10540 instruct cmpFastUnlock(rFlagsReg cr, iRegP object, iRegP box, iRegPNoSp tmp1, iRegPNoSp tmp2)
10541 %{
10542   predicate(LockingMode != LM_LIGHTWEIGHT);
10543   match(Set cr (FastUnlock object box));
10544   effect(TEMP tmp1, TEMP tmp2);
10545 
10546   ins_cost(10 * DEFAULT_COST);
10547   format %{ "fastunlock $object,$box\t! kills $tmp1, $tmp2, #@cmpFastUnlock" %}
10548 
10549   ins_encode %{
10550     __ fast_unlock($object$$Register, $box$$Register, $tmp1$$Register, $tmp2$$Register);
10551   %}
10552 
10553   ins_pipe(pipe_serial);
10554 %}
10555 
10556 instruct cmpFastLockLightweight(rFlagsReg cr, iRegP object, iRegP box,
10557                                 iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3, iRegPNoSp tmp4)
10558 %{
10559   predicate(LockingMode == LM_LIGHTWEIGHT);
10560   match(Set cr (FastLock object box));
10561   effect(TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4);
10562 
10563   ins_cost(10 * DEFAULT_COST);
10564   format %{ "fastlock $object,$box\t! kills $tmp1,$tmp2,$tmp3,$tmp4 #@cmpFastLockLightweight" %}
10565 
10566   ins_encode %{
10567     __ fast_lock_lightweight($object$$Register, $box$$Register,
10568                              $tmp1$$Register, $tmp2$$Register, $tmp3$$Register, $tmp4$$Register);
10569   %}
10570 
10571   ins_pipe(pipe_serial);
10572 %}
10573 
10574 instruct cmpFastUnlockLightweight(rFlagsReg cr, iRegP object, iRegP box,
10575                                   iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3)
10576 %{
10577   predicate(LockingMode == LM_LIGHTWEIGHT);
10578   match(Set cr (FastUnlock object box));
10579   effect(TEMP tmp1, TEMP tmp2, TEMP tmp3);
10580 
10581   ins_cost(10 * DEFAULT_COST);
10582   format %{ "fastunlock $object,$box\t! kills $tmp1,$tmp2,$tmp3 #@cmpFastUnlockLightweight" %}
10583 
10584   ins_encode %{
10585     __ fast_unlock_lightweight($object$$Register, $box$$Register,
10586                                $tmp1$$Register, $tmp2$$Register, $tmp3$$Register);
10587   %}
10588 
10589   ins_pipe(pipe_serial);
10590 %}
10591 
10592 // Tail Call; Jump from runtime stub to Java code.
10593 // Also known as an 'interprocedural jump'.
10594 // Target of jump will eventually return to caller.
10595 // TailJump below removes the return address.
10596 // Don't use fp for 'jump_target' because a MachEpilogNode has already been
10597 // emitted just above the TailCall which has reset fp to the caller state.
10598 instruct TailCalljmpInd(iRegPNoSpNoFp jump_target, inline_cache_RegP method_oop)
10599 %{
10600   match(TailCall jump_target method_oop);
10601 
10602   ins_cost(BRANCH_COST);
10603 
10604   format %{ "jalr $jump_target\t# $method_oop holds method oop, #@TailCalljmpInd." %}
10605 
10606   ins_encode(riscv_enc_tail_call(jump_target));
< prev index next >