comparison src/cpu/x86/vm/stubGenerator_x86_32.cpp @ 7475:e2e6bf86682c

8005544: Use 256bit YMM registers in arraycopy stubs on x86 Summary: Use YMM registers in arraycopy and array_fill stubs. Reviewed-by: roland, twisti
author kvn
date Thu, 03 Jan 2013 16:30:47 -0800
parents 2c7f594145dc
children 989155e2d07a e961c11b85fe
comparison
equal deleted inserted replaced
7474:00af3a3a8df4 7475:e2e6bf86682c
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);