src/cpu/mips/vm/mips_64.ad

changeset 308
36371d10c6f0
parent 307
dcdc859b9e15
child 309
0d8a9d37f03a
     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  %}

mercurial