Mercurial > hg > graal-jvmci-8
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); |