794 // Copy 64-byte chunks |
794 // Copy 64-byte chunks |
795 __ jmpb(L_copy_64_bytes); |
795 __ jmpb(L_copy_64_bytes); |
796 __ align(OptoLoopAlignment); |
796 __ align(OptoLoopAlignment); |
797 __ BIND(L_copy_64_bytes_loop); |
797 __ BIND(L_copy_64_bytes_loop); |
798 |
798 |
799 if(UseUnalignedLoadStores) { |
799 if (UseUnalignedLoadStores) { |
800 __ movdqu(xmm0, Address(from, 0)); |
800 if (UseAVX >= 2) { |
801 __ movdqu(Address(from, to_from, Address::times_1, 0), xmm0); |
801 __ vmovdqu(xmm0, Address(from, 0)); |
802 __ movdqu(xmm1, Address(from, 16)); |
802 __ vmovdqu(Address(from, to_from, Address::times_1, 0), xmm0); |
803 __ movdqu(Address(from, to_from, Address::times_1, 16), xmm1); |
803 __ vmovdqu(xmm1, Address(from, 32)); |
804 __ movdqu(xmm2, Address(from, 32)); |
804 __ vmovdqu(Address(from, to_from, Address::times_1, 32), xmm1); |
805 __ movdqu(Address(from, to_from, Address::times_1, 32), xmm2); |
805 } else { |
806 __ movdqu(xmm3, Address(from, 48)); |
806 __ movdqu(xmm0, Address(from, 0)); |
807 __ movdqu(Address(from, to_from, Address::times_1, 48), xmm3); |
807 __ movdqu(Address(from, to_from, Address::times_1, 0), xmm0); |
808 |
808 __ movdqu(xmm1, Address(from, 16)); |
|
809 __ movdqu(Address(from, to_from, Address::times_1, 16), xmm1); |
|
810 __ movdqu(xmm2, Address(from, 32)); |
|
811 __ movdqu(Address(from, to_from, Address::times_1, 32), xmm2); |
|
812 __ movdqu(xmm3, Address(from, 48)); |
|
813 __ movdqu(Address(from, to_from, Address::times_1, 48), xmm3); |
|
814 } |
809 } else { |
815 } else { |
810 __ movq(xmm0, Address(from, 0)); |
816 __ movq(xmm0, Address(from, 0)); |
811 __ movq(Address(from, to_from, Address::times_1, 0), xmm0); |
817 __ movq(Address(from, to_from, Address::times_1, 0), xmm0); |
812 __ movq(xmm1, Address(from, 8)); |
818 __ movq(xmm1, Address(from, 8)); |
813 __ movq(Address(from, to_from, Address::times_1, 8), xmm1); |
819 __ movq(Address(from, to_from, Address::times_1, 8), xmm1); |