2062 } |
2062 } |
2063 |
2063 |
2064 return true; // Per default match rules are supported. |
2064 return true; // Per default match rules are supported. |
2065 } |
2065 } |
2066 |
2066 |
|
2067 const bool Matcher::match_rule_supported_vector(int opcode, int vlen) { |
|
2068 |
|
2069 // TODO |
|
2070 // identify extra cases that we might want to provide match rules for |
|
2071 // e.g. Op_ vector nodes and other intrinsics while guarding with vlen |
|
2072 bool ret_value = match_rule_supported(opcode); |
|
2073 // Add rules here. |
|
2074 |
|
2075 return ret_value; // Per default match rules are supported. |
|
2076 } |
|
2077 |
2067 const int Matcher::float_pressure(int default_pressure_threshold) { |
2078 const int Matcher::float_pressure(int default_pressure_threshold) { |
2068 return default_pressure_threshold; |
2079 return default_pressure_threshold; |
2069 } |
2080 } |
2070 |
2081 |
2071 int Matcher::regnum_to_fpu_offset(int regnum) { |
2082 int Matcher::regnum_to_fpu_offset(int regnum) { |
3463 |
3474 |
3464 assert(_method, "execute next statement conditionally"); |
3475 assert(_method, "execute next statement conditionally"); |
3465 // The stub for call to interpreter. |
3476 // The stub for call to interpreter. |
3466 address stub = CompiledStaticCall::emit_to_interp_stub(cbuf); |
3477 address stub = CompiledStaticCall::emit_to_interp_stub(cbuf); |
3467 if (stub == NULL) { |
3478 if (stub == NULL) { |
3468 ciEnv::current()->record_failure("CodeCache is full"); |
3479 ciEnv::current()->record_failure("CodeCache is full"); |
3469 return; |
3480 return; |
3470 } |
3481 } |
3471 |
3482 |
3472 // Restore original sp. |
3483 // Restore original sp. |
3473 __ ld(R11_scratch1, 0, R1_SP); // Load caller sp. |
3484 __ ld(R11_scratch1, 0, R1_SP); // Load caller sp. |
6909 cmpN_reg_imm0Node *n_compare = new cmpN_reg_imm0Node(); |
6920 cmpN_reg_imm0Node *n_compare = new cmpN_reg_imm0Node(); |
6910 n_compare->add_req(n_region, n_src); |
6921 n_compare->add_req(n_region, n_src); |
6911 n_compare->_opnds[0] = op_crx; |
6922 n_compare->_opnds[0] = op_crx; |
6912 n_compare->_opnds[1] = op_src; |
6923 n_compare->_opnds[1] = op_src; |
6913 n_compare->_opnds[2] = new immN_0Oper(TypeNarrowOop::NULL_PTR); |
6924 n_compare->_opnds[2] = new immN_0Oper(TypeNarrowOop::NULL_PTR); |
6914 |
6925 |
6915 decodeN_mergeDisjointNode *n2 = new decodeN_mergeDisjointNode(); |
6926 decodeN_mergeDisjointNode *n2 = new decodeN_mergeDisjointNode(); |
6916 n2->add_req(n_region, n_src, n1); |
6927 n2->add_req(n_region, n_src, n1); |
6917 n2->_opnds[0] = op_dst; |
6928 n2->_opnds[0] = op_dst; |
6918 n2->_opnds[1] = op_src; |
6929 n2->_opnds[1] = op_src; |
6919 n2->_opnds[2] = op_dst; |
6930 n2->_opnds[2] = op_dst; |
10586 |
10597 |
10587 //----------Float Compares---------------------------------------------------- |
10598 //----------Float Compares---------------------------------------------------- |
10588 |
10599 |
10589 instruct cmpFUnordered_reg_reg(flagsReg crx, regF src1, regF src2) %{ |
10600 instruct cmpFUnordered_reg_reg(flagsReg crx, regF src1, regF src2) %{ |
10590 // Needs matchrule, see cmpDUnordered. |
10601 // Needs matchrule, see cmpDUnordered. |
10591 match(Set crx (CmpF src1 src2)); |
10602 match(Set crx (CmpF src1 src2)); |
10592 // no match-rule, false predicate |
10603 // no match-rule, false predicate |
10593 predicate(false); |
10604 predicate(false); |
10594 |
10605 |
10595 format %{ "cmpFUrd $crx, $src1, $src2" %} |
10606 format %{ "cmpFUrd $crx, $src1, $src2" %} |
10596 size(4); |
10607 size(4); |
10695 cmovI_conIvalueMinus1_conIvalue0_conIvalue1_Ex(dst, tmp1); |
10706 cmovI_conIvalueMinus1_conIvalue0_conIvalue1_Ex(dst, tmp1); |
10696 %} |
10707 %} |
10697 %} |
10708 %} |
10698 |
10709 |
10699 instruct cmpDUnordered_reg_reg(flagsReg crx, regD src1, regD src2) %{ |
10710 instruct cmpDUnordered_reg_reg(flagsReg crx, regD src1, regD src2) %{ |
10700 // Needs matchrule so that ideal opcode is Cmp. This causes that gcm places the |
10711 // Needs matchrule so that ideal opcode is Cmp. This causes that gcm places the |
10701 // node right before the conditional move using it. |
10712 // node right before the conditional move using it. |
10702 // In jck test api/java_awt/geom/QuadCurve2DFloat/index.html#SetCurveTesttestCase7, |
10713 // In jck test api/java_awt/geom/QuadCurve2DFloat/index.html#SetCurveTesttestCase7, |
10703 // compilation of java.awt.geom.RectangularShape::getBounds()Ljava/awt/Rectangle |
10714 // compilation of java.awt.geom.RectangularShape::getBounds()Ljava/awt/Rectangle |
10704 // crashed in register allocation where the flags Reg between cmpDUnoredered and a |
10715 // crashed in register allocation where the flags Reg between cmpDUnoredered and a |
10705 // conditional move was supposed to be spilled. |
10716 // conditional move was supposed to be spilled. |
10706 match(Set crx (CmpD src1 src2)); |
10717 match(Set crx (CmpD src1 src2)); |
10707 // False predicate, shall not be matched. |
10718 // False predicate, shall not be matched. |
10708 predicate(false); |
10719 predicate(false); |
10709 |
10720 |
10710 format %{ "cmpFUrd $crx, $src1, $src2" %} |
10721 format %{ "cmpFUrd $crx, $src1, $src2" %} |
10711 size(4); |
10722 size(4); |