Wed, 03 Apr 2019 11:55:18 +0800
#8761 Backport of #8672 string_equals optimization
Reviewed-by: aoqi
src/cpu/mips/vm/mips_64.ad | file | annotate | diff | comparison | revisions |
1.1 --- a/src/cpu/mips/vm/mips_64.ad Tue Apr 02 16:06:52 2019 +0800 1.2 +++ b/src/cpu/mips/vm/mips_64.ad Wed Apr 03 11:55:18 2019 +0800 1.3 @@ -10891,27 +10891,32 @@ 1.4 Register tmp = $temp$$Register; 1.5 Register result = $result$$Register; 1.6 1.7 - Label Loop, done; 1.8 - 1.9 - 1.10 - __ beq(str1, str2, done); // same char[] ? 1.11 - __ delayed()->daddiu(result, R0, 1); 1.12 - 1.13 - __ bind(Loop); // Loop begin 1.14 - __ beq(cnt, R0, done); 1.15 - __ delayed()->daddiu(result, R0, 1); // count == 0 1.16 - 1.17 - // compare current character 1.18 - __ lhu(AT, str1, 0);; 1.19 - __ lhu(tmp, str2, 0); 1.20 - __ bne(AT, tmp, done); 1.21 - __ delayed()->daddi(result, R0, 0); 1.22 - __ addi(str1, str1, 2); 1.23 - __ addi(str2, str2, 2); 1.24 - __ b(Loop); 1.25 - __ delayed()->addi(cnt, cnt, -1); // Loop end 1.26 - 1.27 - __ bind(done); 1.28 + Label Loop, True, False; 1.29 + 1.30 + __ beq(str1, str2, True); // same char[] ? 1.31 + __ delayed()->daddiu(result, R0, 1); 1.32 + 1.33 + __ beq(cnt, R0, True); 1.34 + __ delayed()->nop(); // count == 0 1.35 + 1.36 + __ bind(Loop); 1.37 + 1.38 + // compare current character 1.39 + __ lhu(AT, str1, 0); 1.40 + __ lhu(tmp, str2, 0); 1.41 + __ bne(AT, tmp, False); 1.42 + __ delayed()->addi(str1, str1, 2); 1.43 + __ addi(cnt, cnt, -1); 1.44 + __ bne(cnt, R0, Loop); 1.45 + __ delayed()->addi(str2, str2, 2); 1.46 + 1.47 + __ b(True); 1.48 + __ delayed()->nop(); 1.49 + 1.50 + __ bind(False); 1.51 + __ daddi(result, R0, 0); 1.52 + 1.53 + __ bind(True); 1.54 %} 1.55 1.56 ins_pipe( pipe_slow );