< prev index next >

src/hotspot/cpu/aarch64/aarch64.ad

Print this page
rev 58322 : 8240615: is_power_of_2() has Undefined Behaviour and is inconsistent
Reviewed-by: duke

*** 14934,14969 **** ins_short_branch(1); %} instruct cmpL_branch_bit(cmpOpEqNe cmp, iRegL op1, immL op2, immL0 op3, label labl) %{ match(If cmp (CmpL (AndL op1 op2) op3)); ! predicate(is_power_of_2(n->in(2)->in(1)->in(2)->get_long())); effect(USE labl); ins_cost(BRANCH_COST); format %{ "tb$cmp $op1, $op2, $labl" %} ins_encode %{ Label* L = $labl$$label; Assembler::Condition cond = (Assembler::Condition)$cmp$$cmpcode; ! int bit = exact_log2($op2$$constant); __ tbr(cond, $op1$$Register, bit, *L); %} ins_pipe(pipe_cmp_branch); ins_short_branch(1); %} instruct cmpI_branch_bit(cmpOpEqNe cmp, iRegIorL2I op1, immI op2, immI0 op3, label labl) %{ match(If cmp (CmpI (AndI op1 op2) op3)); ! predicate(is_power_of_2(n->in(2)->in(1)->in(2)->get_int())); effect(USE labl); ins_cost(BRANCH_COST); format %{ "tb$cmp $op1, $op2, $labl" %} ins_encode %{ Label* L = $labl$$label; Assembler::Condition cond = (Assembler::Condition)$cmp$$cmpcode; ! int bit = exact_log2($op2$$constant); __ tbr(cond, $op1$$Register, bit, *L); %} ins_pipe(pipe_cmp_branch); ins_short_branch(1); %} --- 14934,14969 ---- ins_short_branch(1); %} instruct cmpL_branch_bit(cmpOpEqNe cmp, iRegL op1, immL op2, immL0 op3, label labl) %{ match(If cmp (CmpL (AndL op1 op2) op3)); ! predicate(is_power_of_2((julong)n->in(2)->in(1)->in(2)->get_long())); effect(USE labl); ins_cost(BRANCH_COST); format %{ "tb$cmp $op1, $op2, $labl" %} ins_encode %{ Label* L = $labl$$label; Assembler::Condition cond = (Assembler::Condition)$cmp$$cmpcode; ! int bit = exact_log2_long($op2$$constant); __ tbr(cond, $op1$$Register, bit, *L); %} ins_pipe(pipe_cmp_branch); ins_short_branch(1); %} instruct cmpI_branch_bit(cmpOpEqNe cmp, iRegIorL2I op1, immI op2, immI0 op3, label labl) %{ match(If cmp (CmpI (AndI op1 op2) op3)); ! predicate(is_power_of_2((juint)n->in(2)->in(1)->in(2)->get_int())); effect(USE labl); ins_cost(BRANCH_COST); format %{ "tb$cmp $op1, $op2, $labl" %} ins_encode %{ Label* L = $labl$$label; Assembler::Condition cond = (Assembler::Condition)$cmp$$cmpcode; ! int bit = exact_log2((juint)$op2$$constant); __ tbr(cond, $op1$$Register, bit, *L); %} ins_pipe(pipe_cmp_branch); ins_short_branch(1); %}
*** 14999,15033 **** ins_pipe(pipe_cmp_branch); %} instruct far_cmpL_branch_bit(cmpOpEqNe cmp, iRegL op1, immL op2, immL0 op3, label labl) %{ match(If cmp (CmpL (AndL op1 op2) op3)); ! predicate(is_power_of_2(n->in(2)->in(1)->in(2)->get_long())); effect(USE labl); ins_cost(BRANCH_COST); format %{ "tb$cmp $op1, $op2, $labl" %} ins_encode %{ Label* L = $labl$$label; Assembler::Condition cond = (Assembler::Condition)$cmp$$cmpcode; ! int bit = exact_log2($op2$$constant); __ tbr(cond, $op1$$Register, bit, *L, /*far*/true); %} ins_pipe(pipe_cmp_branch); %} instruct far_cmpI_branch_bit(cmpOpEqNe cmp, iRegIorL2I op1, immI op2, immI0 op3, label labl) %{ match(If cmp (CmpI (AndI op1 op2) op3)); ! predicate(is_power_of_2(n->in(2)->in(1)->in(2)->get_int())); effect(USE labl); ins_cost(BRANCH_COST); format %{ "tb$cmp $op1, $op2, $labl" %} ins_encode %{ Label* L = $labl$$label; Assembler::Condition cond = (Assembler::Condition)$cmp$$cmpcode; ! int bit = exact_log2($op2$$constant); __ tbr(cond, $op1$$Register, bit, *L, /*far*/true); %} ins_pipe(pipe_cmp_branch); %} --- 14999,15033 ---- ins_pipe(pipe_cmp_branch); %} instruct far_cmpL_branch_bit(cmpOpEqNe cmp, iRegL op1, immL op2, immL0 op3, label labl) %{ match(If cmp (CmpL (AndL op1 op2) op3)); ! predicate(is_power_of_2((julong)n->in(2)->in(1)->in(2)->get_long())); effect(USE labl); ins_cost(BRANCH_COST); format %{ "tb$cmp $op1, $op2, $labl" %} ins_encode %{ Label* L = $labl$$label; Assembler::Condition cond = (Assembler::Condition)$cmp$$cmpcode; ! int bit = exact_log2_long($op2$$constant); __ tbr(cond, $op1$$Register, bit, *L, /*far*/true); %} ins_pipe(pipe_cmp_branch); %} instruct far_cmpI_branch_bit(cmpOpEqNe cmp, iRegIorL2I op1, immI op2, immI0 op3, label labl) %{ match(If cmp (CmpI (AndI op1 op2) op3)); ! predicate(is_power_of_2((juint)n->in(2)->in(1)->in(2)->get_int())); effect(USE labl); ins_cost(BRANCH_COST); format %{ "tb$cmp $op1, $op2, $labl" %} ins_encode %{ Label* L = $labl$$label; Assembler::Condition cond = (Assembler::Condition)$cmp$$cmpcode; ! int bit = exact_log2((juint)$op2$$constant); __ tbr(cond, $op1$$Register, bit, *L, /*far*/true); %} ins_pipe(pipe_cmp_branch); %}
< prev index next >