# HG changeset patch # User roland # Date 1500551952 -7200 # Node ID 9f8ef620301e0c9ad29cf234e6cbe073120ca4f4 # Parent d2661aa42bff322badbe6c1337fc638d2e0f5730 8183551: Aarch64 platform specific code for 8173770 Reviewed-by: aph, kvn diff -r d2661aa42bff -r 9f8ef620301e src/cpu/aarch64/vm/aarch64.ad --- a/src/cpu/aarch64/vm/aarch64.ad Thu Jul 13 21:32:55 2017 -0700 +++ b/src/cpu/aarch64/vm/aarch64.ad Thu Jul 20 13:59:12 2017 +0200 @@ -14392,7 +14392,7 @@ ins_pipe(icmp_reg_reg); %} -instruct compL_reg_immI0(rFlagsReg cr, iRegL op1, immI0 zero) +instruct compL_reg_immL0(rFlagsReg cr, iRegL op1, immL0 zero) %{ match(Set cr (CmpL op1 zero)); @@ -14434,6 +14434,62 @@ ins_pipe(icmp_reg_imm); %} +instruct compUL_reg_reg(rFlagsRegU cr, iRegL op1, iRegL op2) +%{ + match(Set cr (CmpUL op1 op2)); + + effect(DEF cr, USE op1, USE op2); + + ins_cost(INSN_COST); + format %{ "cmp $op1, $op2" %} + + ins_encode(aarch64_enc_cmp(op1, op2)); + + ins_pipe(icmp_reg_reg); +%} + +instruct compUL_reg_immL0(rFlagsRegU cr, iRegL op1, immL0 zero) +%{ + match(Set cr (CmpUL op1 zero)); + + effect(DEF cr, USE op1); + + ins_cost(INSN_COST); + format %{ "tst $op1" %} + + ins_encode(aarch64_enc_cmp_imm_addsub(op1, zero)); + + ins_pipe(icmp_reg_imm); +%} + +instruct compUL_reg_immLAddSub(rFlagsRegU cr, iRegL op1, immLAddSub op2) +%{ + match(Set cr (CmpUL op1 op2)); + + effect(DEF cr, USE op1); + + ins_cost(INSN_COST); + format %{ "cmp $op1, $op2" %} + + ins_encode(aarch64_enc_cmp_imm_addsub(op1, op2)); + + ins_pipe(icmp_reg_imm); +%} + +instruct compUL_reg_immL(rFlagsRegU cr, iRegL op1, immL op2) +%{ + match(Set cr (CmpUL op1 op2)); + + effect(DEF cr, USE op1); + + ins_cost(INSN_COST * 2); + format %{ "cmp $op1, $op2" %} + + ins_encode(aarch64_enc_cmp_imm(op1, op2)); + + ins_pipe(icmp_reg_imm); +%} + instruct compP_reg_reg(rFlagsRegU cr, iRegP op1, iRegP op2) %{ match(Set cr (CmpP op1 op2)); @@ -14918,7 +14974,7 @@ %} instruct cmpUL_imm0_branch(cmpOpUEqNeLtGe cmp, iRegL op1, immL0 op2, label labl, rFlagsRegU cr) %{ - match(If cmp (CmpU op1 op2)); + match(If cmp (CmpUL op1 op2)); effect(USE labl); ins_cost(BRANCH_COST);