10913 instruct partialSubtypeCheck(iRegPdst result, iRegP_N2P subklass, iRegP_N2P superklass,
10914 iRegPdst tmp_klass, iRegPdst tmp_arrayptr) %{
10915 match(Set result (PartialSubtypeCheck subklass superklass));
10916 effect(TEMP_DEF result, TEMP tmp_klass, TEMP tmp_arrayptr);
10917 ins_cost(DEFAULT_COST*10);
10918
10919 format %{ "PartialSubtypeCheck $result = ($subklass instanceOf $superklass) tmp: $tmp_klass, $tmp_arrayptr" %}
10920 ins_encode %{
10921 // TODO: PPC port $archOpcode(ppc64Opcode_compound);
10922 __ check_klass_subtype_slow_path($subklass$$Register, $superklass$$Register, $tmp_arrayptr$$Register,
10923 $tmp_klass$$Register, NULL, $result$$Register);
10924 %}
10925 ins_pipe(pipe_class_default);
10926 %}
10927
10928 // inlined locking and unlocking
10929
10930 instruct cmpFastLock(flagsReg crx, iRegPdst oop, iRegPdst box, iRegPdst tmp1, iRegPdst tmp2, iRegPdst tmp3) %{
10931 match(Set crx (FastLock oop box));
10932 effect(TEMP tmp1, TEMP tmp2, TEMP tmp3);
10933 predicate(/*(!UseNewFastLockPPC64 || UseBiasedLocking) &&*/ !Compile::current()->use_rtm());
10934
10935 format %{ "FASTLOCK $oop, $box, $tmp1, $tmp2, $tmp3" %}
10936 ins_encode %{
10937 // TODO: PPC port $archOpcode(ppc64Opcode_compound);
10938 __ compiler_fast_lock_object($crx$$CondRegister, $oop$$Register, $box$$Register,
10939 $tmp3$$Register, $tmp1$$Register, $tmp2$$Register,
10940 UseBiasedLocking && !UseOptoBiasInlining); // SAPJVM MD 2014-11-06 UseOptoBiasInlining
10941 // If locking was successfull, crx should indicate 'EQ'.
10942 // The compiler generates a branch to the runtime call to
10943 // _complete_monitor_locking_Java for the case where crx is 'NE'.
10944 %}
10945 ins_pipe(pipe_class_compare);
10946 %}
10947
10948 // Separate version for TM. Use bound register for box to enable USE_KILL.
10949 instruct cmpFastLock_tm(flagsReg crx, iRegPdst oop, rarg2RegP box, iRegPdst tmp1, iRegPdst tmp2, iRegPdst tmp3) %{
10950 match(Set crx (FastLock oop box));
10951 effect(TEMP tmp1, TEMP tmp2, TEMP tmp3, USE_KILL box);
10952 predicate(Compile::current()->use_rtm());
10953
|
10913 instruct partialSubtypeCheck(iRegPdst result, iRegP_N2P subklass, iRegP_N2P superklass,
10914 iRegPdst tmp_klass, iRegPdst tmp_arrayptr) %{
10915 match(Set result (PartialSubtypeCheck subklass superklass));
10916 effect(TEMP_DEF result, TEMP tmp_klass, TEMP tmp_arrayptr);
10917 ins_cost(DEFAULT_COST*10);
10918
10919 format %{ "PartialSubtypeCheck $result = ($subklass instanceOf $superklass) tmp: $tmp_klass, $tmp_arrayptr" %}
10920 ins_encode %{
10921 // TODO: PPC port $archOpcode(ppc64Opcode_compound);
10922 __ check_klass_subtype_slow_path($subklass$$Register, $superklass$$Register, $tmp_arrayptr$$Register,
10923 $tmp_klass$$Register, NULL, $result$$Register);
10924 %}
10925 ins_pipe(pipe_class_default);
10926 %}
10927
10928 // inlined locking and unlocking
10929
10930 instruct cmpFastLock(flagsReg crx, iRegPdst oop, iRegPdst box, iRegPdst tmp1, iRegPdst tmp2, iRegPdst tmp3) %{
10931 match(Set crx (FastLock oop box));
10932 effect(TEMP tmp1, TEMP tmp2, TEMP tmp3);
10933 predicate(!Compile::current()->use_rtm());
10934
10935 format %{ "FASTLOCK $oop, $box, $tmp1, $tmp2, $tmp3" %}
10936 ins_encode %{
10937 // TODO: PPC port $archOpcode(ppc64Opcode_compound);
10938 __ compiler_fast_lock_object($crx$$CondRegister, $oop$$Register, $box$$Register,
10939 $tmp3$$Register, $tmp1$$Register, $tmp2$$Register,
10940 UseBiasedLocking && !UseOptoBiasInlining); // SAPJVM MD 2014-11-06 UseOptoBiasInlining
10941 // If locking was successfull, crx should indicate 'EQ'.
10942 // The compiler generates a branch to the runtime call to
10943 // _complete_monitor_locking_Java for the case where crx is 'NE'.
10944 %}
10945 ins_pipe(pipe_class_compare);
10946 %}
10947
10948 // Separate version for TM. Use bound register for box to enable USE_KILL.
10949 instruct cmpFastLock_tm(flagsReg crx, iRegPdst oop, rarg2RegP box, iRegPdst tmp1, iRegPdst tmp2, iRegPdst tmp3) %{
10950 match(Set crx (FastLock oop box));
10951 effect(TEMP tmp1, TEMP tmp2, TEMP tmp3, USE_KILL box);
10952 predicate(Compile::current()->use_rtm());
10953
|