13610 ins_encode(enc_rethrow);
13611 ins_pipe( pipe_jmp );
13612 %}
13613
13614 // inlined locking and unlocking
13615
13616 instruct cmpFastLock(eFlagsReg cr, eRegP object, eBXRegP box, eAXRegI tmp, eRegP scr, eRegP thread) %{
13617 predicate(LockingMode != LM_LIGHTWEIGHT);
13618 match(Set cr (FastLock object box));
13619 effect(TEMP tmp, TEMP scr, USE_KILL box, TEMP thread);
13620 ins_cost(300);
13621 format %{ "FASTLOCK $object,$box\t! kills $box,$tmp,$scr" %}
13622 ins_encode %{
13623 __ get_thread($thread$$Register);
13624 __ fast_lock($object$$Register, $box$$Register, $tmp$$Register,
13625 $scr$$Register, noreg, noreg, $thread$$Register, nullptr);
13626 %}
13627 ins_pipe(pipe_slow);
13628 %}
13629
13630 instruct cmpFastUnlock(eFlagsReg cr, eRegP object, eAXRegP box, eRegP tmp ) %{
13631 predicate(LockingMode != LM_LIGHTWEIGHT);
13632 match(Set cr (FastUnlock object box));
13633 effect(TEMP tmp, USE_KILL box);
13634 ins_cost(300);
13635 format %{ "FASTUNLOCK $object,$box\t! kills $box,$tmp" %}
13636 ins_encode %{
13637 __ fast_unlock($object$$Register, $box$$Register, $tmp$$Register);
13638 %}
13639 ins_pipe(pipe_slow);
13640 %}
13641
13642 instruct cmpFastLockLightweight(eFlagsReg cr, eRegP object, eBXRegP box, eAXRegI eax_reg, eRegP tmp, eRegP thread) %{
13643 predicate(LockingMode == LM_LIGHTWEIGHT);
13644 match(Set cr (FastLock object box));
13645 effect(TEMP eax_reg, TEMP tmp, USE_KILL box, TEMP thread);
13646 ins_cost(300);
13647 format %{ "FASTLOCK $object,$box\t! kills $box,$eax_reg,$tmp" %}
13648 ins_encode %{
13649 __ get_thread($thread$$Register);
13650 __ fast_lock_lightweight($object$$Register, $box$$Register, $eax_reg$$Register, $tmp$$Register, $thread$$Register);
13651 %}
13652 ins_pipe(pipe_slow);
13653 %}
13654
13655 instruct cmpFastUnlockLightweight(eFlagsReg cr, eRegP object, eAXRegP eax_reg, eRegP tmp, eRegP thread) %{
13656 predicate(LockingMode == LM_LIGHTWEIGHT);
13657 match(Set cr (FastUnlock object eax_reg));
13658 effect(TEMP tmp, USE_KILL eax_reg, TEMP thread);
13659 ins_cost(300);
13660 format %{ "FASTUNLOCK $object,$eax_reg\t! kills $eax_reg,$tmp" %}
13661 ins_encode %{
13662 __ get_thread($thread$$Register);
13663 __ fast_unlock_lightweight($object$$Register, $eax_reg$$Register, $tmp$$Register, $thread$$Register);
13664 %}
13665 ins_pipe(pipe_slow);
13666 %}
13667
13668 instruct mask_all_evexL_LT32(kReg dst, eRegL src) %{
13669 predicate(Matcher::vector_length(n) <= 32);
13670 match(Set dst (MaskAll src));
13671 format %{ "mask_all_evexL_LE32 $dst, $src \t" %}
13672 ins_encode %{
13673 int mask_len = Matcher::vector_length(this);
13674 __ vector_maskall_operation($dst$$KRegister, $src$$Register, mask_len);
13675 %}
13676 ins_pipe( pipe_slow );
13677 %}
13678
13679 instruct mask_all_evexL_GT32(kReg dst, eRegL src, kReg ktmp) %{
13680 predicate(Matcher::vector_length(n) > 32);
13681 match(Set dst (MaskAll src));
13682 effect(TEMP ktmp);
13683 format %{ "mask_all_evexL_GT32 $dst, $src \t! using $ktmp as TEMP " %}
|
13610 ins_encode(enc_rethrow);
13611 ins_pipe( pipe_jmp );
13612 %}
13613
13614 // inlined locking and unlocking
13615
13616 instruct cmpFastLock(eFlagsReg cr, eRegP object, eBXRegP box, eAXRegI tmp, eRegP scr, eRegP thread) %{
13617 predicate(LockingMode != LM_LIGHTWEIGHT);
13618 match(Set cr (FastLock object box));
13619 effect(TEMP tmp, TEMP scr, USE_KILL box, TEMP thread);
13620 ins_cost(300);
13621 format %{ "FASTLOCK $object,$box\t! kills $box,$tmp,$scr" %}
13622 ins_encode %{
13623 __ get_thread($thread$$Register);
13624 __ fast_lock($object$$Register, $box$$Register, $tmp$$Register,
13625 $scr$$Register, noreg, noreg, $thread$$Register, nullptr);
13626 %}
13627 ins_pipe(pipe_slow);
13628 %}
13629
13630 instruct cmpFastUnlock(eFlagsReg cr, eRegP object, eAXRegP box, eRegP tmp, eRegP scr) %{
13631 predicate(LockingMode != LM_LIGHTWEIGHT);
13632 match(Set cr (FastUnlock object box));
13633 effect(TEMP tmp, TEMP scr, USE_KILL box);
13634 ins_cost(300);
13635 format %{ "FASTUNLOCK $object,$box\t! kills $box,$tmp" %}
13636 ins_encode %{
13637 __ fast_unlock($object$$Register, $box$$Register, $tmp$$Register, $scr$$Register);
13638 %}
13639 ins_pipe(pipe_slow);
13640 %}
13641
13642 instruct cmpFastLockLightweight(eFlagsReg cr, eRegP object, eBXRegP box, eAXRegI eax_reg, eRegP tmp, eRegP thread) %{
13643 predicate(LockingMode == LM_LIGHTWEIGHT);
13644 match(Set cr (FastLock object box));
13645 effect(TEMP eax_reg, TEMP tmp, USE_KILL box, TEMP thread);
13646 ins_cost(300);
13647 format %{ "FASTLOCK $object,$box\t! kills $box,$eax_reg,$tmp" %}
13648 ins_encode %{
13649 __ get_thread($thread$$Register);
13650 __ fast_lock_lightweight($object$$Register, $box$$Register, $eax_reg$$Register, $tmp$$Register, $thread$$Register);
13651 %}
13652 ins_pipe(pipe_slow);
13653 %}
13654
13655 instruct cmpFastUnlockLightweight(eFlagsReg cr, eRegP object, eAXRegP eax_reg, eRegP tmp, eRegP scr, eRegP thread) %{
13656 predicate(LockingMode == LM_LIGHTWEIGHT);
13657 match(Set cr (FastUnlock object eax_reg));
13658 effect(TEMP tmp, TEMP scr, USE_KILL eax_reg, TEMP thread);
13659 ins_cost(300);
13660 format %{ "FASTUNLOCK $object,$eax_reg\t! kills $eax_reg,$tmp" %}
13661 ins_encode %{
13662 __ get_thread($thread$$Register);
13663 __ fast_unlock_lightweight($object$$Register, $eax_reg$$Register, $tmp$$Register, $scr$$Register, $thread$$Register);
13664 %}
13665 ins_pipe(pipe_slow);
13666 %}
13667
13668 instruct mask_all_evexL_LT32(kReg dst, eRegL src) %{
13669 predicate(Matcher::vector_length(n) <= 32);
13670 match(Set dst (MaskAll src));
13671 format %{ "mask_all_evexL_LE32 $dst, $src \t" %}
13672 ins_encode %{
13673 int mask_len = Matcher::vector_length(this);
13674 __ vector_maskall_operation($dst$$KRegister, $src$$Register, mask_len);
13675 %}
13676 ins_pipe( pipe_slow );
13677 %}
13678
13679 instruct mask_all_evexL_GT32(kReg dst, eRegL src, kReg ktmp) %{
13680 predicate(Matcher::vector_length(n) > 32);
13681 match(Set dst (MaskAll src));
13682 effect(TEMP ktmp);
13683 format %{ "mask_all_evexL_GT32 $dst, $src \t! using $ktmp as TEMP " %}
|