hotspot/src/share/vm/c1/c1_LIR.cpp
changeset 12739 09f26b73ae66
parent 11886 feebf5c9f40c
child 13728 882756847a04
equal deleted inserted replaced
12623:09fcb0dc71ad 12739:09f26b73ae66
   622     case lir_shr:
   622     case lir_shr:
   623     case lir_ushr:
   623     case lir_ushr:
   624     {
   624     {
   625       assert(op->as_Op2() != NULL, "must be");
   625       assert(op->as_Op2() != NULL, "must be");
   626       LIR_Op2* op2 = (LIR_Op2*)op;
   626       LIR_Op2* op2 = (LIR_Op2*)op;
       
   627       assert(op2->_tmp2->is_illegal() && op2->_tmp3->is_illegal() &&
       
   628              op2->_tmp4->is_illegal() && op2->_tmp5->is_illegal(), "not used");
   627 
   629 
   628       if (op2->_info)                     do_info(op2->_info);
   630       if (op2->_info)                     do_info(op2->_info);
   629       if (op2->_opr1->is_valid())         do_input(op2->_opr1);
   631       if (op2->_opr1->is_valid())         do_input(op2->_opr1);
   630       if (op2->_opr2->is_valid())         do_input(op2->_opr2);
   632       if (op2->_opr2->is_valid())         do_input(op2->_opr2);
   631       if (op2->_tmp->is_valid())          do_temp(op2->_tmp);
   633       if (op2->_tmp1->is_valid())         do_temp(op2->_tmp1);
   632       if (op2->_result->is_valid())       do_output(op2->_result);
   634       if (op2->_result->is_valid())       do_output(op2->_result);
   633 
   635 
   634       break;
   636       break;
   635     }
   637     }
   636 
   638 
   639     case lir_cmove:
   641     case lir_cmove:
   640     {
   642     {
   641       assert(op->as_Op2() != NULL, "must be");
   643       assert(op->as_Op2() != NULL, "must be");
   642       LIR_Op2* op2 = (LIR_Op2*)op;
   644       LIR_Op2* op2 = (LIR_Op2*)op;
   643 
   645 
   644       assert(op2->_info == NULL && op2->_tmp->is_illegal(), "not used");
   646       assert(op2->_info == NULL && op2->_tmp1->is_illegal() && op2->_tmp2->is_illegal() &&
       
   647              op2->_tmp3->is_illegal() && op2->_tmp4->is_illegal() && op2->_tmp5->is_illegal(), "not used");
   645       assert(op2->_opr1->is_valid() && op2->_opr2->is_valid() && op2->_result->is_valid(), "used");
   648       assert(op2->_opr1->is_valid() && op2->_opr2->is_valid() && op2->_result->is_valid(), "used");
   646 
   649 
   647       do_input(op2->_opr1);
   650       do_input(op2->_opr1);
   648       do_input(op2->_opr2);
   651       do_input(op2->_opr2);
   649       do_temp(op2->_opr2);
   652       do_temp(op2->_opr2);
   663 
   666 
   664       assert(op2->_info == NULL, "not used");
   667       assert(op2->_info == NULL, "not used");
   665       assert(op2->_opr1->is_valid(), "used");
   668       assert(op2->_opr1->is_valid(), "used");
   666       assert(op2->_opr2->is_valid(), "used");
   669       assert(op2->_opr2->is_valid(), "used");
   667       assert(op2->_result->is_valid(), "used");
   670       assert(op2->_result->is_valid(), "used");
       
   671       assert(op2->_tmp2->is_illegal() && op2->_tmp3->is_illegal() &&
       
   672              op2->_tmp4->is_illegal() && op2->_tmp5->is_illegal(), "not used");
   668 
   673 
   669       do_input(op2->_opr1); do_temp(op2->_opr1);
   674       do_input(op2->_opr1); do_temp(op2->_opr1);
   670       do_input(op2->_opr2); do_temp(op2->_opr2);
   675       do_input(op2->_opr2); do_temp(op2->_opr2);
   671       if (op2->_tmp->is_valid()) do_temp(op2->_tmp);
   676       if (op2->_tmp1->is_valid()) do_temp(op2->_tmp1);
   672       do_output(op2->_result);
   677       do_output(op2->_result);
   673 
   678 
   674       break;
   679       break;
   675     }
   680     }
   676 
   681 
   680 
   685 
   681       if (op2->_info)                     do_info(op2->_info);
   686       if (op2->_info)                     do_info(op2->_info);
   682       if (op2->_opr1->is_valid())         do_temp(op2->_opr1);
   687       if (op2->_opr1->is_valid())         do_temp(op2->_opr1);
   683       if (op2->_opr2->is_valid())         do_input(op2->_opr2); // exception object is input parameter
   688       if (op2->_opr2->is_valid())         do_input(op2->_opr2); // exception object is input parameter
   684       assert(op2->_result->is_illegal(), "no result");
   689       assert(op2->_result->is_illegal(), "no result");
       
   690       assert(op2->_tmp2->is_illegal() && op2->_tmp3->is_illegal() &&
       
   691              op2->_tmp4->is_illegal() && op2->_tmp5->is_illegal(), "not used");
   685 
   692 
   686       break;
   693       break;
   687     }
   694     }
   688 
   695 
   689     case lir_unwind: {
   696     case lir_unwind: {
   700 
   707 
   701     case lir_tan:
   708     case lir_tan:
   702     case lir_sin:
   709     case lir_sin:
   703     case lir_cos:
   710     case lir_cos:
   704     case lir_log:
   711     case lir_log:
   705     case lir_log10: {
   712     case lir_log10:
       
   713     case lir_exp: {
   706       assert(op->as_Op2() != NULL, "must be");
   714       assert(op->as_Op2() != NULL, "must be");
   707       LIR_Op2* op2 = (LIR_Op2*)op;
   715       LIR_Op2* op2 = (LIR_Op2*)op;
   708 
   716 
   709       // On x86 tan/sin/cos need two temporary fpu stack slots and
   717       // On x86 tan/sin/cos need two temporary fpu stack slots and
   710       // log/log10 need one so handle opr2 and tmp as temp inputs.
   718       // log/log10 need one so handle opr2 and tmp as temp inputs.
   711       // Register input operand as temp to guarantee that it doesn't
   719       // Register input operand as temp to guarantee that it doesn't
   712       // overlap with the input.
   720       // overlap with the input.
   713       assert(op2->_info == NULL, "not used");
   721       assert(op2->_info == NULL, "not used");
       
   722       assert(op2->_tmp5->is_illegal(), "not used");
       
   723       assert(op2->_tmp2->is_valid() == (op->code() == lir_exp), "not used");
       
   724       assert(op2->_tmp3->is_valid() == (op->code() == lir_exp), "not used");
       
   725       assert(op2->_tmp4->is_valid() == (op->code() == lir_exp), "not used");
   714       assert(op2->_opr1->is_valid(), "used");
   726       assert(op2->_opr1->is_valid(), "used");
   715       do_input(op2->_opr1); do_temp(op2->_opr1);
   727       do_input(op2->_opr1); do_temp(op2->_opr1);
   716 
   728 
   717       if (op2->_opr2->is_valid())         do_temp(op2->_opr2);
   729       if (op2->_opr2->is_valid())         do_temp(op2->_opr2);
   718       if (op2->_tmp->is_valid())          do_temp(op2->_tmp);
   730       if (op2->_tmp1->is_valid())         do_temp(op2->_tmp1);
       
   731       if (op2->_tmp2->is_valid())         do_temp(op2->_tmp2);
       
   732       if (op2->_tmp3->is_valid())         do_temp(op2->_tmp3);
       
   733       if (op2->_tmp4->is_valid())         do_temp(op2->_tmp4);
   719       if (op2->_result->is_valid())       do_output(op2->_result);
   734       if (op2->_result->is_valid())       do_output(op2->_result);
   720 
   735 
   721       break;
   736       break;
   722     }
   737     }
   723 
   738 
       
   739     case lir_pow: {
       
   740       assert(op->as_Op2() != NULL, "must be");
       
   741       LIR_Op2* op2 = (LIR_Op2*)op;
       
   742 
       
   743       // On x86 pow needs two temporary fpu stack slots: tmp1 and
       
   744       // tmp2. Register input operands as temps to guarantee that it
       
   745       // doesn't overlap with the temporary slots.
       
   746       assert(op2->_info == NULL, "not used");
       
   747       assert(op2->_opr1->is_valid() && op2->_opr2->is_valid(), "used");
       
   748       assert(op2->_tmp1->is_valid() && op2->_tmp2->is_valid() && op2->_tmp3->is_valid()
       
   749              && op2->_tmp4->is_valid() && op2->_tmp5->is_valid(), "used");
       
   750       assert(op2->_result->is_valid(), "used");
       
   751 
       
   752       do_input(op2->_opr1); do_temp(op2->_opr1);
       
   753       do_input(op2->_opr2); do_temp(op2->_opr2);
       
   754       do_temp(op2->_tmp1);
       
   755       do_temp(op2->_tmp2);
       
   756       do_temp(op2->_tmp3);
       
   757       do_temp(op2->_tmp4);
       
   758       do_temp(op2->_tmp5);
       
   759       do_output(op2->_result);
       
   760 
       
   761       break;
       
   762     }
   724 
   763 
   725 // LIR_Op3
   764 // LIR_Op3
   726     case lir_idiv:
   765     case lir_idiv:
   727     case lir_irem: {
   766     case lir_irem: {
   728       assert(op->as_Op3() != NULL, "must be");
   767       assert(op->as_Op3() != NULL, "must be");
  1668      case lir_sin:                   s = "sin";           break;
  1707      case lir_sin:                   s = "sin";           break;
  1669      case lir_cos:                   s = "cos";           break;
  1708      case lir_cos:                   s = "cos";           break;
  1670      case lir_tan:                   s = "tan";           break;
  1709      case lir_tan:                   s = "tan";           break;
  1671      case lir_log:                   s = "log";           break;
  1710      case lir_log:                   s = "log";           break;
  1672      case lir_log10:                 s = "log10";         break;
  1711      case lir_log10:                 s = "log10";         break;
       
  1712      case lir_exp:                   s = "exp";           break;
       
  1713      case lir_pow:                   s = "pow";           break;
  1673      case lir_logic_and:             s = "logic_and";     break;
  1714      case lir_logic_and:             s = "logic_and";     break;
  1674      case lir_logic_or:              s = "logic_or";      break;
  1715      case lir_logic_or:              s = "logic_or";      break;
  1675      case lir_logic_xor:             s = "logic_xor";     break;
  1716      case lir_logic_xor:             s = "logic_xor";     break;
  1676      case lir_shl:                   s = "shift_left";    break;
  1717      case lir_shl:                   s = "shift_left";    break;
  1677      case lir_shr:                   s = "shift_right";   break;
  1718      case lir_shr:                   s = "shift_right";   break;
  1890   if (code() == lir_cmove) {
  1931   if (code() == lir_cmove) {
  1891     print_condition(out, condition());         out->print(" ");
  1932     print_condition(out, condition());         out->print(" ");
  1892   }
  1933   }
  1893   in_opr1()->print(out);    out->print(" ");
  1934   in_opr1()->print(out);    out->print(" ");
  1894   in_opr2()->print(out);    out->print(" ");
  1935   in_opr2()->print(out);    out->print(" ");
  1895   if (tmp_opr()->is_valid()) { tmp_opr()->print(out);    out->print(" "); }
  1936   if (tmp1_opr()->is_valid()) { tmp1_opr()->print(out);    out->print(" "); }
       
  1937   if (tmp2_opr()->is_valid()) { tmp2_opr()->print(out);    out->print(" "); }
       
  1938   if (tmp3_opr()->is_valid()) { tmp3_opr()->print(out);    out->print(" "); }
       
  1939   if (tmp4_opr()->is_valid()) { tmp4_opr()->print(out);    out->print(" "); }
       
  1940   if (tmp5_opr()->is_valid()) { tmp5_opr()->print(out);    out->print(" "); }
  1896   result_opr()->print(out);
  1941   result_opr()->print(out);
  1897 }
  1942 }
  1898 
  1943 
  1899 void LIR_OpAllocArray::print_instr(outputStream* out) const {
  1944 void LIR_OpAllocArray::print_instr(outputStream* out) const {
  1900   klass()->print(out);                   out->print(" ");
  1945   klass()->print(out);                   out->print(" ");