8184900: AArch64: Fix overflow in immediate cmp instruction

Use subs instead of cmp to compare BlockZeroingLowLimit.

Reviewed-by: aph
This commit is contained in:
Yang Zhang 2017-07-26 15:54:13 +08:00 committed by Yang Zhang
parent 0c193dfdad
commit 415f7bea0b
2 changed files with 2 additions and 1 deletions

@ -169,6 +169,7 @@ class MacroAssembler: public Assembler {
template<class T>
inline void cmpw(Register Rd, T imm) { subsw(zr, Rd, imm); }
// imm is limited to 12 bits.
inline void cmp(Register Rd, unsigned imm) { subs(zr, Rd, imm); }
inline void cmnw(Register Rd, unsigned imm) { addsw(zr, Rd, imm); }

@ -764,7 +764,7 @@ class StubGenerator: public StubCodeGenerator {
// alignment.
Label small;
int low_limit = MAX2(zva_length * 2, (int)BlockZeroingLowLimit);
__ cmp(cnt, low_limit >> 3);
__ subs(rscratch1, cnt, low_limit >> 3);
__ br(Assembler::LT, small);
__ zero_dcache_blocks(base, cnt);
__ bind(small);