< prev index next >
src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp
Print this page
rev 52936 : 8215202: AArch64: jtreg test test/jdk/sun/nio/cs/FindEncoderBugs.java fails
Reviewed-by: duke
Contributed-by: nick.gasson@arm.com
@@ -5648,16 +5648,16 @@
prfm(Address(src, SoftwarePrefetchHintDistance));
orr(v4, T16B, Vtmp1, Vtmp2);
orr(v5, T16B, Vtmp3, Vtmp4);
uzp1(Vtmp1, T16B, Vtmp1, Vtmp2);
uzp1(Vtmp3, T16B, Vtmp3, Vtmp4);
- stpq(Vtmp1, Vtmp3, dst);
uzp2(v5, T16B, v4, v5); // high bytes
umov(tmp2, v5, D, 1);
fmovd(tmp1, v5);
orr(tmp1, tmp1, tmp2);
cbnz(tmp1, LOOP_8);
+ stpq(Vtmp1, Vtmp3, dst);
sub(len, len, 32);
add(dst, dst, 32);
add(src, src, 64);
subs(tmp2, len, SoftwarePrefetchHintDistance/2 + 16);
br(GE, NEXT_32_PRFM);
@@ -5671,18 +5671,18 @@
ld1(Vtmp1, Vtmp2, Vtmp3, Vtmp4, T8H, src);
}
prfm(Address(src, SoftwarePrefetchHintDistance));
uzp1(v4, T16B, Vtmp1, Vtmp2);
uzp1(v5, T16B, Vtmp3, Vtmp4);
- stpq(v4, v5, dst);
orr(Vtmp1, T16B, Vtmp1, Vtmp2);
orr(Vtmp3, T16B, Vtmp3, Vtmp4);
uzp2(Vtmp1, T16B, Vtmp1, Vtmp3); // high bytes
umov(tmp2, Vtmp1, D, 1);
fmovd(tmp1, Vtmp1);
orr(tmp1, tmp1, tmp2);
cbnz(tmp1, LOOP_8);
+ stpq(v4, v5, dst);
sub(len, len, 32);
add(dst, dst, 32);
add(src, src, 64);
cmp(len, (u1)32);
br(GE, NEXT_32);
@@ -5693,13 +5693,13 @@
br(LT, LOOP_1);
BIND(NEXT_8);
ld1(Vtmp1, T8H, src);
uzp1(Vtmp2, T16B, Vtmp1, Vtmp1); // low bytes
uzp2(Vtmp3, T16B, Vtmp1, Vtmp1); // high bytes
- strd(Vtmp2, dst);
fmovd(tmp1, Vtmp3);
cbnz(tmp1, NEXT_1);
+ strd(Vtmp2, dst);
sub(len, len, 8);
add(dst, dst, 8);
add(src, src, 16);
cmp(len, (u1)8);
@@ -5708,13 +5708,13 @@
BIND(LOOP_1);
#endif
cbz(len, DONE);
BIND(NEXT_1);
ldrh(tmp1, Address(post(src, 2)));
- strb(tmp1, Address(post(dst, 1)));
tst(tmp1, 0xff00);
br(NE, SET_RESULT);
+ strb(tmp1, Address(post(dst, 1)));
subs(len, len, 1);
br(GT, NEXT_1);
BIND(SET_RESULT);
sub(result, result, len); // Return index where we stopped
< prev index next >