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);