equal
deleted
inserted
replaced
6655 jccb(Assembler::notZero, VECTOR_NOT_EQUAL); |
6655 jccb(Assembler::notZero, VECTOR_NOT_EQUAL); |
6656 addptr(result, stride2); |
6656 addptr(result, stride2); |
6657 subl(cnt2, stride2); |
6657 subl(cnt2, stride2); |
6658 jccb(Assembler::notZero, COMPARE_WIDE_VECTORS_LOOP); |
6658 jccb(Assembler::notZero, COMPARE_WIDE_VECTORS_LOOP); |
6659 // clean upper bits of YMM registers |
6659 // clean upper bits of YMM registers |
6660 vzeroupper(); |
6660 vpxor(vec1, vec1); |
6661 |
6661 |
6662 // compare wide vectors tail |
6662 // compare wide vectors tail |
6663 bind(COMPARE_WIDE_TAIL); |
6663 bind(COMPARE_WIDE_TAIL); |
6664 testptr(result, result); |
6664 testptr(result, result); |
6665 jccb(Assembler::zero, LENGTH_DIFF_LABEL); |
6665 jccb(Assembler::zero, LENGTH_DIFF_LABEL); |
6670 jmpb(COMPARE_WIDE_VECTORS_LOOP); |
6670 jmpb(COMPARE_WIDE_VECTORS_LOOP); |
6671 |
6671 |
6672 // Identifies the mismatching (higher or lower)16-bytes in the 32-byte vectors. |
6672 // Identifies the mismatching (higher or lower)16-bytes in the 32-byte vectors. |
6673 bind(VECTOR_NOT_EQUAL); |
6673 bind(VECTOR_NOT_EQUAL); |
6674 // clean upper bits of YMM registers |
6674 // clean upper bits of YMM registers |
6675 vzeroupper(); |
6675 vpxor(vec1, vec1); |
6676 lea(str1, Address(str1, result, scale)); |
6676 lea(str1, Address(str1, result, scale)); |
6677 lea(str2, Address(str2, result, scale)); |
6677 lea(str2, Address(str2, result, scale)); |
6678 jmp(COMPARE_16_CHARS); |
6678 jmp(COMPARE_16_CHARS); |
6679 |
6679 |
6680 // Compare tail chars, length between 1 to 15 chars |
6680 // Compare tail chars, length between 1 to 15 chars |
6929 |
6929 |
6930 // That's it |
6930 // That's it |
6931 bind(DONE); |
6931 bind(DONE); |
6932 if (UseAVX >= 2) { |
6932 if (UseAVX >= 2) { |
6933 // clean upper bits of YMM registers |
6933 // clean upper bits of YMM registers |
6934 vzeroupper(); |
6934 vpxor(vec1, vec1); |
|
6935 vpxor(vec2, vec2); |
6935 } |
6936 } |
6936 } |
6937 } |
6937 |
6938 |
6938 void MacroAssembler::generate_fill(BasicType t, bool aligned, |
6939 void MacroAssembler::generate_fill(BasicType t, bool aligned, |
6939 Register to, Register value, Register count, |
6940 Register to, Register value, Register count, |
7063 addptr(to, 32); |
7064 addptr(to, 32); |
7064 subl(count, 8 << shift); |
7065 subl(count, 8 << shift); |
7065 |
7066 |
7066 BIND(L_check_fill_8_bytes); |
7067 BIND(L_check_fill_8_bytes); |
7067 // clean upper bits of YMM registers |
7068 // clean upper bits of YMM registers |
7068 vzeroupper(); |
7069 movdl(xtmp, value); |
|
7070 pshufd(xtmp, xtmp, 0); |
7069 } else { |
7071 } else { |
7070 // Fill 32-byte chunks |
7072 // Fill 32-byte chunks |
7071 pshufd(xtmp, xtmp, 0); |
7073 pshufd(xtmp, xtmp, 0); |
7072 |
7074 |
7073 subl(count, 8 << shift); |
7075 subl(count, 8 << shift); |
7226 jccb(Assembler::lessEqual, L_copy_16_chars); |
7228 jccb(Assembler::lessEqual, L_copy_16_chars); |
7227 |
7229 |
7228 bind(L_copy_16_chars_exit); |
7230 bind(L_copy_16_chars_exit); |
7229 if (UseAVX >= 2) { |
7231 if (UseAVX >= 2) { |
7230 // clean upper bits of YMM registers |
7232 // clean upper bits of YMM registers |
7231 vzeroupper(); |
7233 vpxor(tmp2Reg, tmp2Reg); |
|
7234 vpxor(tmp3Reg, tmp3Reg); |
|
7235 vpxor(tmp4Reg, tmp4Reg); |
|
7236 movdl(tmp1Reg, tmp5); |
|
7237 pshufd(tmp1Reg, tmp1Reg, 0); |
7232 } |
7238 } |
7233 subptr(len, 8); |
7239 subptr(len, 8); |
7234 jccb(Assembler::greater, L_copy_8_chars_exit); |
7240 jccb(Assembler::greater, L_copy_8_chars_exit); |
7235 |
7241 |
7236 bind(L_copy_8_chars); |
7242 bind(L_copy_8_chars); |