8155967: aarch64: fix register usage in block zeroing

Fix array fill stub to use r10 == base and r11 == count

Reviewed-by: aph
This commit is contained in:
Ed Nevill 2016-05-03 20:36:17 +00:00
parent 0091cd268a
commit fbac01c4e5
2 changed files with 7 additions and 2 deletions

View File

@ -4790,6 +4790,7 @@ void MacroAssembler::block_zero(Register base, Register cnt, bool is_large)
Label base_aligned;
assert_different_registers(base, cnt, rscratch1);
guarantee(base == r10 && cnt == r11, "fix register usage");
Register tmp = rscratch1;
Register tmp2 = rscratch2;

View File

@ -2082,7 +2082,9 @@ class StubGenerator: public StubCodeGenerator {
const Register to = c_rarg0; // source array address
const Register value = c_rarg1; // value
const Register count = c_rarg2; // elements count
const Register cnt_words = c_rarg3; // temp register
const Register bz_base = r10; // base for block_zero routine
const Register cnt_words = r11; // temp register
__ enter();
@ -2152,7 +2154,9 @@ class StubGenerator: public StubCodeGenerator {
__ cmp(cnt_words, BlockZeroingLowLimit >> 3);
__ ccmp(value, 0 /* comparing value */, 0 /* NZCV */, Assembler::GE);
__ br(Assembler::NE, non_block_zeroing);
__ block_zero(to, cnt_words, true);
__ mov(bz_base, to);
__ block_zero(bz_base, cnt_words, true);
__ mov(to, bz_base);
__ b(rest);
__ bind(non_block_zeroing);
__ fill_words(to, cnt_words, value);