src/hotspot/cpu/ppc/ppc.ad
Print this page
*** 2207,2219 ****
switch (opcode) {
case Op_SqrtD:
return VM_Version::has_fsqrt();
case Op_CountLeadingZerosI:
case Op_CountLeadingZerosL:
case Op_CountTrailingZerosI:
case Op_CountTrailingZerosL:
! if (!UseCountLeadingZerosInstructionsPPC64)
return false;
break;
case Op_PopCountI:
case Op_PopCountL:
--- 2207,2223 ----
switch (opcode) {
case Op_SqrtD:
return VM_Version::has_fsqrt();
case Op_CountLeadingZerosI:
case Op_CountLeadingZerosL:
+ if (!UseCountLeadingZerosInstructionsPPC64)
+ return false;
+ break;
case Op_CountTrailingZerosI:
case Op_CountTrailingZerosL:
! if (!UseCountLeadingZerosInstructionsPPC64 &&
! !UseCountTrailingZerosInstructionsPPC64)
return false;
break;
case Op_PopCountI:
case Op_PopCountL:
*** 13423,13433 ****
ins_pipe(pipe_class_default);
%}
instruct countTrailingZerosI_Ex(iRegIdst dst, iRegIsrc src) %{
match(Set dst (CountTrailingZerosI src));
! predicate(UseCountLeadingZerosInstructionsPPC64);
ins_cost(DEFAULT_COST);
expand %{
immI16 imm1 %{ (int)-1 %}
immI16 imm2 %{ (int)32 %}
--- 13427,13437 ----
ins_pipe(pipe_class_default);
%}
instruct countTrailingZerosI_Ex(iRegIdst dst, iRegIsrc src) %{
match(Set dst (CountTrailingZerosI src));
! predicate(UseCountLeadingZerosInstructionsPPC64 && !UseCountTrailingZerosInstructionsPPC64);
ins_cost(DEFAULT_COST);
expand %{
immI16 imm1 %{ (int)-1 %}
immI16 imm2 %{ (int)32 %}
*** 13440,13452 ****
countLeadingZerosI(tmpI3, tmpI2);
subI_imm16_reg(dst, imm2, tmpI3);
%}
%}
instruct countTrailingZerosL_Ex(iRegIdst dst, iRegLsrc src) %{
match(Set dst (CountTrailingZerosL src));
! predicate(UseCountLeadingZerosInstructionsPPC64);
ins_cost(DEFAULT_COST);
expand %{
immL16 imm1 %{ (long)-1 %}
immI16 imm2 %{ (int)64 %}
--- 13444,13469 ----
countLeadingZerosI(tmpI3, tmpI2);
subI_imm16_reg(dst, imm2, tmpI3);
%}
%}
+ instruct countTrailingZerosI_cnttzw_Ex(iRegIdst dst, iRegIsrc src) %{
+ match(Set dst (CountTrailingZerosI src));
+ predicate(UseCountTrailingZerosInstructionsPPC64);
+ ins_cost(DEFAULT_COST);
+
+ format %{ "CNTTZW $dst, $src" %}
+ size(4);
+ ins_encode %{
+ __ cnttzw($dst$$Register, $src$$Register);
+ %}
+ ins_pipe(pipe_class_default);
+ %}
+
instruct countTrailingZerosL_Ex(iRegIdst dst, iRegLsrc src) %{
match(Set dst (CountTrailingZerosL src));
! predicate(UseCountLeadingZerosInstructionsPPC64 && !UseCountTrailingZerosInstructionsPPC64);
ins_cost(DEFAULT_COST);
expand %{
immL16 imm1 %{ (long)-1 %}
immI16 imm2 %{ (int)64 %}
*** 13458,13467 ****
--- 13475,13497 ----
countLeadingZerosL(tmpL3, tmpL2);
subI_imm16_reg(dst, imm2, tmpL3);
%}
%}
+ instruct countTrailingZerosL_cnttzd_Ex(iRegIdst dst, iRegLsrc src) %{
+ match(Set dst (CountTrailingZerosL src));
+ predicate(UseCountTrailingZerosInstructionsPPC64);
+ ins_cost(DEFAULT_COST);
+
+ format %{ "CNTTZD $dst, $src" %}
+ size(4);
+ ins_encode %{
+ __ cnttzd($dst$$Register, $src$$Register);
+ %}
+ ins_pipe(pipe_class_default);
+ %}
+
// Expand nodes for byte_reverse_int.
instruct insrwi_a(iRegIdst dst, iRegIsrc src, immI16 pos, immI16 shift) %{
effect(DEF dst, USE src, USE pos, USE shift);
predicate(false);