2344 __ lsrw(cnt_words, count, 3 - shift); // number of words |
2344 __ lsrw(cnt_words, count, 3 - shift); // number of words |
2345 __ bfi(value, value, 32, 32); // 32 bit -> 64 bit |
2345 __ bfi(value, value, 32, 32); // 32 bit -> 64 bit |
2346 __ subw(count, count, cnt_words, Assembler::LSL, 3 - shift); |
2346 __ subw(count, count, cnt_words, Assembler::LSL, 3 - shift); |
2347 if (UseBlockZeroing) { |
2347 if (UseBlockZeroing) { |
2348 Label non_block_zeroing, rest; |
2348 Label non_block_zeroing, rest; |
|
2349 Register tmp = rscratch1; |
2349 // count >= BlockZeroingLowLimit && value == 0 |
2350 // count >= BlockZeroingLowLimit && value == 0 |
2350 __ cmp(cnt_words, BlockZeroingLowLimit >> 3); |
2351 __ subs(tmp, cnt_words, BlockZeroingLowLimit >> 3); |
2351 __ ccmp(value, 0 /* comparing value */, 0 /* NZCV */, Assembler::GE); |
2352 __ ccmp(value, 0 /* comparing value */, 0 /* NZCV */, Assembler::GE); |
2352 __ br(Assembler::NE, non_block_zeroing); |
2353 __ br(Assembler::NE, non_block_zeroing); |
2353 __ mov(bz_base, to); |
2354 __ mov(bz_base, to); |
2354 __ block_zero(bz_base, cnt_words, true); |
2355 __ block_zero(bz_base, cnt_words, true); |
2355 __ mov(to, bz_base); |
2356 __ mov(to, bz_base); |