9678 ins_encode( form3_mem_reg_little(src, dst) ); 9679 ins_pipe( iload_mem ); 9680 %} 9681 9682 instruct bytes_reverse_long(iRegL dst, stackSlotL src) %{ 9683 match(Set dst (ReverseBytesL src)); 9684 effect(DEF dst, USE src); 9685 9686 // Op cost is artificially doubled to make sure that load or store 9687 // instructions are preferred over this one which requires a spill 9688 // onto a stack slot. 9689 ins_cost(2*DEFAULT_COST + MEMORY_REF_COST); 9690 size(8); 9691 format %{ "LDXA $src, $dst\t!asi=primary_little" %} 9692 9693 opcode(Assembler::ldxa_op3); 9694 ins_encode( form3_mem_reg_little(src, dst) ); 9695 ins_pipe( iload_mem ); 9696 %} 9697 9698 // Load Integer reversed byte order 9699 instruct loadI_reversed(iRegI dst, memory src) %{ 9700 match(Set dst (ReverseBytesI (LoadI src))); 9701 9702 ins_cost(DEFAULT_COST + MEMORY_REF_COST); 9703 size(8); 9704 format %{ "LDUWA $src, $dst\t!asi=primary_little" %} 9705 9706 opcode(Assembler::lduwa_op3); 9707 ins_encode( form3_mem_reg_little( src, dst) ); 9708 ins_pipe(iload_mem); 9709 %} 9710 9711 // Load Long - aligned and reversed 9712 instruct loadL_reversed(iRegL dst, memory src) %{ 9713 match(Set dst (ReverseBytesL (LoadL src))); 9714 9715 ins_cost(DEFAULT_COST + MEMORY_REF_COST); 9716 size(8); 9717 format %{ "LDXA $src, $dst\t!asi=primary_little" %} 9718 9719 opcode(Assembler::ldxa_op3); 9720 ins_encode( form3_mem_reg_little( src, dst ) ); 9721 ins_pipe(iload_mem); 9722 %} 9723 9724 // Store Integer reversed byte order 9725 instruct storeI_reversed(memory dst, iRegI src) %{ 9726 match(Set dst (StoreI dst (ReverseBytesI src))); 9727 9728 ins_cost(MEMORY_REF_COST); 9729 size(8); 9730 format %{ "STWA $src, $dst\t!asi=primary_little" %} 9731 9732 opcode(Assembler::stwa_op3); 9733 ins_encode( form3_mem_reg_little( dst, src) ); 9734 ins_pipe(istore_mem_reg); 9735 %} 9736 9737 // Store Long reversed byte order 9738 instruct storeL_reversed(memory dst, iRegL src) %{ 9739 match(Set dst (StoreL dst (ReverseBytesL src))); 9740 9741 ins_cost(MEMORY_REF_COST); 9742 size(8); 9743 format %{ "STXA $src, $dst\t!asi=primary_little" %} 9744 9745 opcode(Assembler::stxa_op3); 9746 ins_encode( form3_mem_reg_little( dst, src) ); 9747 ins_pipe(istore_mem_reg); 9748 %} 9749 9750 //----------PEEPHOLE RULES----------------------------------------------------- 9751 // These must follow all instruction definitions as they use the names 9752 // defined in the instructions definitions. 9753 // 9754 // peepmatch ( root_instr_name [preceding_instruction]* ); 9755 // 9756 // peepconstraint %{ 9757 // (instruction_number.operand_name relational_op instruction_number.operand_name 9758 // [, ...] ); 9759 // // instruction numbers are zero-based using left to right order in peepmatch 9760 // 9761 // peepreplace ( instr_name ( [instruction_number.operand_name]* ) ); 9762 // // provide an instruction_number.operand_name for each operand that appears 9763 // // in the replacement instruction's match rule 9764 // 9765 // ---------VM FLAGS--------------------------------------------------------- 9766 // 9767 // All peephole optimizations can be turned off using -XX:-OptoPeephole 9768 // 9769 // Each peephole rule is given an identifying number starting with zero and | 9678 ins_encode( form3_mem_reg_little(src, dst) ); 9679 ins_pipe( iload_mem ); 9680 %} 9681 9682 instruct bytes_reverse_long(iRegL dst, stackSlotL src) %{ 9683 match(Set dst (ReverseBytesL src)); 9684 effect(DEF dst, USE src); 9685 9686 // Op cost is artificially doubled to make sure that load or store 9687 // instructions are preferred over this one which requires a spill 9688 // onto a stack slot. 9689 ins_cost(2*DEFAULT_COST + MEMORY_REF_COST); 9690 size(8); 9691 format %{ "LDXA $src, $dst\t!asi=primary_little" %} 9692 9693 opcode(Assembler::ldxa_op3); 9694 ins_encode( form3_mem_reg_little(src, dst) ); 9695 ins_pipe( iload_mem ); 9696 %} 9697 9698 instruct bytes_reverse_char(iRegI dst, stackSlotI src) %{ 9699 match(Set dst (ReverseBytesC src)); 9700 effect(DEF dst, USE src); 9701 9702 // Op cost is artificially doubled to make sure that load or store 9703 // instructions are preferred over this one which requires a spill 9704 // onto a stack slot. 9705 ins_cost(2*DEFAULT_COST + MEMORY_REF_COST); 9706 size(8); 9707 format %{ "LDUHA $src, $dst\t!asi=primary_little\n\t" %} 9708 ins_encode %{ 9709 emit_form3_mem_reg_asi(cbuf, this, Assembler::lduh_op3, -1, 9710 $src$$base, $src$$disp, $src$$index, 9711 $dst$$reg, Assembler::ASI_PRIMARY_LITTLE); 9712 %} 9713 ins_pipe( iload_mem ); 9714 %} 9715 9716 instruct bytes_reverse_short(iRegI dst, stackSlotI src) %{ 9717 match(Set dst (ReverseBytesS src)); 9718 effect(DEF dst, USE src); 9719 9720 // Op cost is artificially doubled to make sure that load or store 9721 // instructions are preferred over this one which requires a spill 9722 // onto a stack slot. 9723 ins_cost(2*DEFAULT_COST + MEMORY_REF_COST); 9724 size(8); 9725 format %{ "LDSHA $src, $dst\t!asi=primary_little\n\t" %} 9726 ins_encode %{ 9727 emit_form3_mem_reg_asi(cbuf, this, Assembler::ldsh_op3, -1, 9728 $src$$base, $src$$disp, $src$$index, 9729 $dst$$reg, Assembler::ASI_PRIMARY_LITTLE); 9730 %} 9731 ins_pipe( iload_mem ); 9732 %} 9733 9734 // Load Integer reversed byte order 9735 instruct loadI_reversed(iRegI dst, memory src) %{ 9736 match(Set dst (ReverseBytesI (LoadI src))); 9737 9738 ins_cost(DEFAULT_COST + MEMORY_REF_COST); 9739 size(8); 9740 format %{ "LDUWA $src, $dst\t!asi=primary_little" %} 9741 9742 opcode(Assembler::lduwa_op3); 9743 ins_encode( form3_mem_reg_little( src, dst) ); 9744 ins_pipe(iload_mem); 9745 %} 9746 9747 // Load Long - aligned and reversed 9748 instruct loadL_reversed(iRegL dst, memory src) %{ 9749 match(Set dst (ReverseBytesL (LoadL src))); 9750 9751 ins_cost(DEFAULT_COST + MEMORY_REF_COST); 9752 size(8); 9753 format %{ "LDXA $src, $dst\t!asi=primary_little" %} 9754 9755 opcode(Assembler::ldxa_op3); 9756 ins_encode( form3_mem_reg_little( src, dst ) ); 9757 ins_pipe(iload_mem); 9758 %} 9759 9760 // Load char reversed byte order 9761 instruct loadC_reversed(iRegI dst, memory src) %{ 9762 match(Set dst (ReverseBytesC (LoadUS src))); 9763 9764 ins_cost(MEMORY_REF_COST); 9765 size(8); 9766 format %{ "LDUHA $src, $dst\t!asi=primary_little" %} 9767 9768 ins_encode %{ 9769 emit_form3_mem_reg_asi(cbuf, this, Assembler::lduh_op3, -1, 9770 $src$$base, $src$$disp, $src$$index, 9771 $dst$$reg, Assembler::ASI_PRIMARY_LITTLE); 9772 %} 9773 ins_pipe(iload_mem); 9774 %} 9775 9776 // Load short reversed byte order 9777 instruct loadS_reversed(iRegI dst, memory src) %{ 9778 match(Set dst (ReverseBytesS (LoadS src))); 9779 9780 ins_cost(MEMORY_REF_COST); 9781 size(8); 9782 format %{ "LDSHA $src, $dst\t!asi=primary_little" %} 9783 9784 ins_encode %{ 9785 emit_form3_mem_reg_asi(cbuf, this, Assembler::ldsh_op3, -1, 9786 $src$$base, $src$$disp, $src$$index, 9787 $dst$$reg, Assembler::ASI_PRIMARY_LITTLE); 9788 %} 9789 ins_pipe(iload_mem); 9790 %} 9791 9792 // Store Integer reversed byte order 9793 instruct storeI_reversed(memory dst, iRegI src) %{ 9794 match(Set dst (StoreI dst (ReverseBytesI src))); 9795 9796 ins_cost(MEMORY_REF_COST); 9797 size(8); 9798 format %{ "STWA $src, $dst\t!asi=primary_little" %} 9799 9800 opcode(Assembler::stwa_op3); 9801 ins_encode( form3_mem_reg_little( dst, src) ); 9802 ins_pipe(istore_mem_reg); 9803 %} 9804 9805 // Store Long reversed byte order 9806 instruct storeL_reversed(memory dst, iRegL src) %{ 9807 match(Set dst (StoreL dst (ReverseBytesL src))); 9808 9809 ins_cost(MEMORY_REF_COST); 9810 size(8); 9811 format %{ "STXA $src, $dst\t!asi=primary_little" %} 9812 9813 opcode(Assembler::stxa_op3); 9814 ins_encode( form3_mem_reg_little( dst, src) ); 9815 ins_pipe(istore_mem_reg); 9816 %} 9817 9818 // Store char reversed byte order 9819 instruct storeC_reversed(memory dst, iRegI src) %{ 9820 match(Set dst (StoreUS dst (ReverseBytesC src))); 9821 9822 ins_cost(MEMORY_REF_COST); 9823 size(8); 9824 format %{ "STWA $src, $dst\t!asi=primary_little" %} 9825 9826 ins_encode %{ 9827 emit_form3_mem_reg_asi(cbuf, this, Assembler::sth_op3, -1, 9828 $dst$$base, $dst$$disp, $dst$$index, 9829 $src$$reg, Assembler::ASI_PRIMARY_LITTLE); 9830 %} 9831 ins_pipe(istore_mem_reg); 9832 %} 9833 9834 // Store short reversed byte order 9835 instruct storeS_reversed(memory dst, iRegI src) %{ 9836 match(Set dst (StoreS dst (ReverseBytesS src))); 9837 9838 ins_cost(MEMORY_REF_COST); 9839 size(8); 9840 format %{ "STWA $src, $dst\t!asi=primary_little" %} 9841 9842 ins_encode %{ 9843 emit_form3_mem_reg_asi(cbuf, this, Assembler::sth_op3, -1, 9844 $dst$$base, $dst$$disp, $dst$$index, 9845 $src$$reg, Assembler::ASI_PRIMARY_LITTLE); 9846 %} 9847 ins_pipe(istore_mem_reg); 9848 %} 9849 9850 //----------PEEPHOLE RULES----------------------------------------------------- 9851 // These must follow all instruction definitions as they use the names 9852 // defined in the instructions definitions. 9853 // 9854 // peepmatch ( root_instr_name [preceding_instruction]* ); 9855 // 9856 // peepconstraint %{ 9857 // (instruction_number.operand_name relational_op instruction_number.operand_name 9858 // [, ...] ); 9859 // // instruction numbers are zero-based using left to right order in peepmatch 9860 // 9861 // peepreplace ( instr_name ( [instruction_number.operand_name]* ) ); 9862 // // provide an instruction_number.operand_name for each operand that appears 9863 // // in the replacement instruction's match rule 9864 // 9865 // ---------VM FLAGS--------------------------------------------------------- 9866 // 9867 // All peephole optimizations can be turned off using -XX:-OptoPeephole 9868 // 9869 // Each peephole rule is given an identifying number starting with zero and |