5555 "ISYNC" %}
5556 size(12);
5557 ins_encode( enc_lwz_ac(dst, mem) );
5558 ins_pipe(pipe_class_memory);
5559 %}
5560
5561 // Load Compressed Pointer and decode it if narrow_oop_shift == 0.
5562 instruct loadN2P_unscaled(iRegPdst dst, memory mem) %{
5563 match(Set dst (DecodeN (LoadN mem)));
5564 predicate(_kids[0]->_leaf->as_Load()->is_unordered() && Universe::narrow_oop_shift() == 0);
5565 ins_cost(MEMORY_REF_COST);
5566
5567 format %{ "LWZ $dst, $mem \t// DecodeN (unscaled)" %}
5568 size(4);
5569 ins_encode( enc_lwz(dst, mem) );
5570 ins_pipe(pipe_class_memory);
5571 %}
5572
5573 instruct loadN2P_klass_unscaled(iRegPdst dst, memory mem) %{
5574 match(Set dst (DecodeNKlass (LoadNKlass mem)));
5575 // SAPJVM GL 2014-05-21 Differs.
5576 predicate(Universe::narrow_klass_base() == NULL && Universe::narrow_klass_shift() == 0 &&
5577 _kids[0]->_leaf->as_Load()->is_unordered());
5578 ins_cost(MEMORY_REF_COST);
5579
5580 format %{ "LWZ $dst, $mem \t// DecodeN (unscaled)" %}
5581 size(4);
5582 ins_encode( enc_lwz(dst, mem) );
5583 ins_pipe(pipe_class_memory);
5584 %}
5585
5586 // Load Pointer
5587 instruct loadP(iRegPdst dst, memoryAlg4 mem) %{
5588 match(Set dst (LoadP mem));
5589 predicate(n->as_Load()->is_unordered() || followed_by_acquire(n));
5590 ins_cost(MEMORY_REF_COST);
5591
5592 format %{ "LD $dst, $mem \t// ptr" %}
5593 size(4);
5594 ins_encode( enc_ld(dst, mem) );
5595 ins_pipe(pipe_class_memory);
10932 ins_encode %{
10933 // TODO: PPC port $archOpcode(ppc64Opcode_compound);
10934 __ check_klass_subtype_slow_path($subklass$$Register, $superklass$$Register, $tmp_arrayptr$$Register,
10935 $tmp_klass$$Register, NULL, $result$$Register);
10936 %}
10937 ins_pipe(pipe_class_default);
10938 %}
10939
10940 // inlined locking and unlocking
10941
10942 instruct cmpFastLock(flagsReg crx, iRegPdst oop, iRegPdst box, iRegPdst tmp1, iRegPdst tmp2, iRegPdst tmp3) %{
10943 match(Set crx (FastLock oop box));
10944 effect(TEMP tmp1, TEMP tmp2, TEMP tmp3);
10945 predicate(!Compile::current()->use_rtm());
10946
10947 format %{ "FASTLOCK $oop, $box, $tmp1, $tmp2, $tmp3" %}
10948 ins_encode %{
10949 // TODO: PPC port $archOpcode(ppc64Opcode_compound);
10950 __ compiler_fast_lock_object($crx$$CondRegister, $oop$$Register, $box$$Register,
10951 $tmp3$$Register, $tmp1$$Register, $tmp2$$Register,
10952 UseBiasedLocking && !UseOptoBiasInlining); // SAPJVM MD 2014-11-06 UseOptoBiasInlining
10953 // If locking was successfull, crx should indicate 'EQ'.
10954 // The compiler generates a branch to the runtime call to
10955 // _complete_monitor_locking_Java for the case where crx is 'NE'.
10956 %}
10957 ins_pipe(pipe_class_compare);
10958 %}
10959
10960 // Separate version for TM. Use bound register for box to enable USE_KILL.
10961 instruct cmpFastLock_tm(flagsReg crx, iRegPdst oop, rarg2RegP box, iRegPdst tmp1, iRegPdst tmp2, iRegPdst tmp3) %{
10962 match(Set crx (FastLock oop box));
10963 effect(TEMP tmp1, TEMP tmp2, TEMP tmp3, USE_KILL box);
10964 predicate(Compile::current()->use_rtm());
10965
10966 format %{ "FASTLOCK $oop, $box, $tmp1, $tmp2, $tmp3 (TM)" %}
10967 ins_encode %{
10968 // TODO: PPC port $archOpcode(ppc64Opcode_compound);
10969 __ compiler_fast_lock_object($crx$$CondRegister, $oop$$Register, $box$$Register,
10970 $tmp3$$Register, $tmp1$$Register, $tmp2$$Register,
10971 /*Biased Locking*/ false,
10972 _rtm_counters, _stack_rtm_counters,
|
5555 "ISYNC" %}
5556 size(12);
5557 ins_encode( enc_lwz_ac(dst, mem) );
5558 ins_pipe(pipe_class_memory);
5559 %}
5560
5561 // Load Compressed Pointer and decode it if narrow_oop_shift == 0.
5562 instruct loadN2P_unscaled(iRegPdst dst, memory mem) %{
5563 match(Set dst (DecodeN (LoadN mem)));
5564 predicate(_kids[0]->_leaf->as_Load()->is_unordered() && Universe::narrow_oop_shift() == 0);
5565 ins_cost(MEMORY_REF_COST);
5566
5567 format %{ "LWZ $dst, $mem \t// DecodeN (unscaled)" %}
5568 size(4);
5569 ins_encode( enc_lwz(dst, mem) );
5570 ins_pipe(pipe_class_memory);
5571 %}
5572
5573 instruct loadN2P_klass_unscaled(iRegPdst dst, memory mem) %{
5574 match(Set dst (DecodeNKlass (LoadNKlass mem)));
5575 predicate(Universe::narrow_klass_base() == NULL && Universe::narrow_klass_shift() == 0 &&
5576 _kids[0]->_leaf->as_Load()->is_unordered());
5577 ins_cost(MEMORY_REF_COST);
5578
5579 format %{ "LWZ $dst, $mem \t// DecodeN (unscaled)" %}
5580 size(4);
5581 ins_encode( enc_lwz(dst, mem) );
5582 ins_pipe(pipe_class_memory);
5583 %}
5584
5585 // Load Pointer
5586 instruct loadP(iRegPdst dst, memoryAlg4 mem) %{
5587 match(Set dst (LoadP mem));
5588 predicate(n->as_Load()->is_unordered() || followed_by_acquire(n));
5589 ins_cost(MEMORY_REF_COST);
5590
5591 format %{ "LD $dst, $mem \t// ptr" %}
5592 size(4);
5593 ins_encode( enc_ld(dst, mem) );
5594 ins_pipe(pipe_class_memory);
10931 ins_encode %{
10932 // TODO: PPC port $archOpcode(ppc64Opcode_compound);
10933 __ check_klass_subtype_slow_path($subklass$$Register, $superklass$$Register, $tmp_arrayptr$$Register,
10934 $tmp_klass$$Register, NULL, $result$$Register);
10935 %}
10936 ins_pipe(pipe_class_default);
10937 %}
10938
10939 // inlined locking and unlocking
10940
10941 instruct cmpFastLock(flagsReg crx, iRegPdst oop, iRegPdst box, iRegPdst tmp1, iRegPdst tmp2, iRegPdst tmp3) %{
10942 match(Set crx (FastLock oop box));
10943 effect(TEMP tmp1, TEMP tmp2, TEMP tmp3);
10944 predicate(!Compile::current()->use_rtm());
10945
10946 format %{ "FASTLOCK $oop, $box, $tmp1, $tmp2, $tmp3" %}
10947 ins_encode %{
10948 // TODO: PPC port $archOpcode(ppc64Opcode_compound);
10949 __ compiler_fast_lock_object($crx$$CondRegister, $oop$$Register, $box$$Register,
10950 $tmp3$$Register, $tmp1$$Register, $tmp2$$Register,
10951 UseBiasedLocking && !UseOptoBiasInlining);
10952 // If locking was successfull, crx should indicate 'EQ'.
10953 // The compiler generates a branch to the runtime call to
10954 // _complete_monitor_locking_Java for the case where crx is 'NE'.
10955 %}
10956 ins_pipe(pipe_class_compare);
10957 %}
10958
10959 // Separate version for TM. Use bound register for box to enable USE_KILL.
10960 instruct cmpFastLock_tm(flagsReg crx, iRegPdst oop, rarg2RegP box, iRegPdst tmp1, iRegPdst tmp2, iRegPdst tmp3) %{
10961 match(Set crx (FastLock oop box));
10962 effect(TEMP tmp1, TEMP tmp2, TEMP tmp3, USE_KILL box);
10963 predicate(Compile::current()->use_rtm());
10964
10965 format %{ "FASTLOCK $oop, $box, $tmp1, $tmp2, $tmp3 (TM)" %}
10966 ins_encode %{
10967 // TODO: PPC port $archOpcode(ppc64Opcode_compound);
10968 __ compiler_fast_lock_object($crx$$CondRegister, $oop$$Register, $box$$Register,
10969 $tmp3$$Register, $tmp1$$Register, $tmp2$$Register,
10970 /*Biased Locking*/ false,
10971 _rtm_counters, _stack_rtm_counters,
|