hotspot/src/cpu/ppc/vm/ppc.ad
changeset 34185 ee71c590a456
parent 33813 4f376e851453
parent 34162 16b54851eaf6
child 35085 839c8ba29724
child 35201 996db89f378e
equal deleted inserted replaced
33813:4f376e851453 34185:ee71c590a456
  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) {
  3414       __ bl(__ pc());  // Emits a relocation.
  3425       __ bl(__ pc());  // Emits a relocation.
  3415 
  3426 
  3416       // The stub for call to interpreter.
  3427       // The stub for call to interpreter.
  3417       address stub = CompiledStaticCall::emit_to_interp_stub(cbuf);
  3428       address stub = CompiledStaticCall::emit_to_interp_stub(cbuf);
  3418       if (stub == NULL) {
  3429       if (stub == NULL) {
  3419         ciEnv::current()->record_failure("CodeCache is full"); 
  3430         ciEnv::current()->record_failure("CodeCache is full");
  3420         return;
  3431         return;
  3421       }
  3432       }
  3422     }
  3433     }
  3423   %}
  3434   %}
  3424 
  3435 
  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);