8224671: AArch64: mauve System.arraycopy test failure
Reviewed-by: adinn
This commit is contained in:
parent
12b2a50bb2
commit
671d15c078
@ -1491,6 +1491,25 @@ public:
|
|||||||
INSN(eorw, 0, 0b10, 0);
|
INSN(eorw, 0, 0b10, 0);
|
||||||
INSN(andsw, 0, 0b11, 0);
|
INSN(andsw, 0, 0b11, 0);
|
||||||
|
|
||||||
|
#undef INSN
|
||||||
|
|
||||||
|
#define INSN(NAME, size, op, N) \
|
||||||
|
void NAME(Register Rd, Register Rn, Register Rm, \
|
||||||
|
enum shift_kind kind = LSL, unsigned shift = 0) { \
|
||||||
|
starti; \
|
||||||
|
f(N, 21); \
|
||||||
|
zrf(Rm, 16), zrf(Rn, 5), zrf(Rd, 0); \
|
||||||
|
op_shifted_reg(0b01010, kind, shift, size, op); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
/* These instructions have no immediate form. Provide an overload so \
|
||||||
|
that if anyone does try to use an immediate operand -- this has \
|
||||||
|
happened! -- we'll get a compile-time error. */ \
|
||||||
|
void NAME(Register Rd, Register Rn, unsigned imm, \
|
||||||
|
enum shift_kind kind = LSL, unsigned shift = 0) { \
|
||||||
|
assert(false, " can't be used with immediate operand"); \
|
||||||
|
}
|
||||||
|
|
||||||
INSN(bic, 1, 0b00, 1);
|
INSN(bic, 1, 0b00, 1);
|
||||||
INSN(orn, 1, 0b01, 1);
|
INSN(orn, 1, 0b01, 1);
|
||||||
INSN(eon, 1, 0b10, 1);
|
INSN(eon, 1, 0b10, 1);
|
||||||
|
@ -2268,7 +2268,7 @@ void LIR_Assembler::emit_arraycopy(LIR_OpArrayCopy* op) {
|
|||||||
__ ldr(src, Address(sp, 4*BytesPerWord));
|
__ ldr(src, Address(sp, 4*BytesPerWord));
|
||||||
|
|
||||||
// r0 is -1^K where K == partial copied count
|
// r0 is -1^K where K == partial copied count
|
||||||
__ eonw(rscratch1, r0, 0);
|
__ eonw(rscratch1, r0, zr);
|
||||||
// adjust length down and src/end pos up by partial copied count
|
// adjust length down and src/end pos up by partial copied count
|
||||||
__ subw(length, length, rscratch1);
|
__ subw(length, length, rscratch1);
|
||||||
__ addw(src_pos, src_pos, rscratch1);
|
__ addw(src_pos, src_pos, rscratch1);
|
||||||
|
Loading…
Reference in New Issue
Block a user