< prev index next >

src/cpu/ppc/vm/ppc.ad

Print this page
rev 9211 : 8140645: Recent Developments for AIX
Summary: Port recent developments from SAP for AIX to the OpenJDK


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,


< prev index next >