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(" "); |