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));
|