< prev index next >

src/cpu/aarch64/vm/aarch64.ad

Print this page
rev 10232 : 8150038: aarch64: make use of CBZ and CBNZ when comparing narrow pointer with zero
Summary: aarch64: c2 make use of CBZ and CBNZ when comparing narrow pointer with zero
Reviewed-by: duke
Contributed-by: felix.yang@linaro.org

*** 14317,14326 **** --- 14317,14345 ---- __ cbnz($op1$$Register, *L); %} ins_pipe(pipe_cmp_branch); %} + instruct cmpN_imm0_branch(cmpOp cmp, iRegN op1, immN0 op2, label labl, rFlagsReg cr) %{ + match(If cmp (CmpN op1 op2)); + predicate(n->in(1)->as_Bool()->_test._test == BoolTest::ne + || n->in(1)->as_Bool()->_test._test == BoolTest::eq); + effect(USE labl); + + ins_cost(BRANCH_COST); + format %{ "cbw$cmp $op1, $labl" %} + ins_encode %{ + Label* L = $labl$$label; + Assembler::Condition cond = (Assembler::Condition)$cmp$$cmpcode; + if (cond == Assembler::EQ) + __ cbzw($op1$$Register, *L); + else + __ cbnzw($op1$$Register, *L); + %} + ins_pipe(pipe_cmp_branch); + %} + instruct cmpP_narrowOop_imm0_branch(cmpOp cmp, iRegN oop, immP0 zero, label labl, rFlagsReg cr) %{ match(If cmp (CmpP (DecodeN oop) zero)); predicate(n->in(1)->as_Bool()->_test._test == BoolTest::ne || n->in(1)->as_Bool()->_test._test == BoolTest::eq); effect(USE labl);
< prev index next >