Thu, 16 Feb 2017 05:45:03 -0500
[C2] Optimize cmpF3_reg_reg, cmpD3_reg_reg and cmpL3_reg_reg in mips_64.ad
src/cpu/mips/vm/mips_64.ad | file | annotate | diff | comparison | revisions |
1.1 --- a/src/cpu/mips/vm/mips_64.ad Thu Feb 16 03:58:02 2017 -0500 1.2 +++ b/src/cpu/mips/vm/mips_64.ad Thu Feb 16 05:45:03 2017 -0500 1.3 @@ -9442,19 +9442,16 @@ 1.4 Register opr2 = as_Register($src2$$reg); 1.5 Register dst = as_Register($dst$$reg); 1.6 1.7 - Label p_one, done; 1.8 - 1.9 - __ subu(dst, opr1, opr2); 1.10 - 1.11 - __ beq(dst, R0, done); 1.12 - __ nop(); 1.13 - 1.14 - __ bgtz(dst, done); 1.15 - __ delayed()->addiu32(dst, R0, 1); 1.16 - 1.17 - __ addiu32(dst, R0, -1); 1.18 - 1.19 - __ bind(done); 1.20 + Label Done; 1.21 + 1.22 + __ subu(AT, opr1, opr2); 1.23 + __ bltz(AT, Done); 1.24 + __ delayed()->daddiu(dst, R0, -1); 1.25 + 1.26 + __ move(dst, 1); 1.27 + __ movz(dst, R0, AT); 1.28 + 1.29 + __ bind(Done); 1.30 %} 1.31 ins_pipe( pipe_slow ); 1.32 %} 1.33 @@ -9474,24 +9471,17 @@ 1.34 FloatRegister src2 = as_FloatRegister($src2$$reg); 1.35 Register dst = as_Register($dst$$reg); 1.36 1.37 - Label EQU, LESS, DONE; 1.38 - 1.39 + Label Done; 1.40 + 1.41 + __ c_ult_s(src1, src2); 1.42 + __ bc1t(Done); 1.43 + __ delayed()->daddiu(dst, R0, -1); 1.44 + 1.45 + __ c_eq_s(src1, src2); 1.46 __ move(dst, 1); 1.47 - __ c_eq_s(src1, src2); 1.48 - __ bc1t(EQU); 1.49 - __ nop(); 1.50 - __ c_ult_s(src1, src2); 1.51 - __ bc1t(LESS); 1.52 - __ nop(); 1.53 - __ beq(R0, R0, DONE); 1.54 - __ nop(); 1.55 - __ bind(EQU); 1.56 - __ move(dst, 0); 1.57 - __ beq(R0, R0, DONE); 1.58 - __ nop(); 1.59 - __ bind(LESS); 1.60 - __ move(dst, -1); 1.61 - __ bind(DONE); 1.62 + __ movt(dst, R0); 1.63 + 1.64 + __ bind(Done); 1.65 %} 1.66 ins_pipe( pipe_slow ); 1.67 %} 1.68 @@ -9505,24 +9495,17 @@ 1.69 FloatRegister src2 = as_FloatRegister($src2$$reg); 1.70 Register dst = as_Register($dst$$reg); 1.71 1.72 - Label EQU, LESS, DONE; 1.73 - 1.74 + Label Done; 1.75 + 1.76 + __ c_ult_d(src1, src2); 1.77 + __ bc1t(Done); 1.78 + __ delayed()->daddiu(dst, R0, -1); 1.79 + 1.80 + __ c_eq_d(src1, src2); 1.81 __ move(dst, 1); 1.82 - __ c_eq_d(src1, src2); 1.83 - __ bc1t(EQU); 1.84 - __ nop(); 1.85 - __ c_ult_d(src1, src2); 1.86 - __ bc1t(LESS); 1.87 - __ nop(); 1.88 - __ beq(R0, R0, DONE); 1.89 - __ nop(); 1.90 - __ bind(EQU); 1.91 - __ move(dst, 0); 1.92 - __ beq(R0, R0, DONE); 1.93 - __ nop(); 1.94 - __ bind(LESS); 1.95 - __ move(dst, -1); 1.96 - __ bind(DONE); 1.97 + __ movt(dst, R0); 1.98 + 1.99 + __ bind(Done); 1.100 %} 1.101 ins_pipe( pipe_slow ); 1.102 %}