[Assembler] Redefine the sll instruction for MIPS.

Mon, 20 Feb 2017 21:27:49 +0800

author
fujie
date
Mon, 20 Feb 2017 21:27:49 +0800
changeset 318
b7127982c97c
parent 317
001d396b2d46
child 319
2d7d048236e1

[Assembler] Redefine the sll instruction for MIPS.

src/cpu/mips/vm/assembler_mips.hpp file | annotate | diff | comparison | revisions
src/cpu/mips/vm/mips_64.ad file | annotate | diff | comparison | revisions
     1.1 --- a/src/cpu/mips/vm/assembler_mips.hpp	Sat Feb 18 19:19:48 2017 -0500
     1.2 +++ b/src/cpu/mips/vm/assembler_mips.hpp	Mon Feb 20 21:27:49 2017 +0800
     1.3 @@ -1183,15 +1183,9 @@
     1.4    void mflo (Register rd)              { emit_long( ((int)rd->encoding()<<11) | mflo_op ); }
     1.5    void mthi (Register rs)              { emit_long( ((int)rs->encoding()<<21) | mthi_op ); }
     1.6    void mtlo (Register rs)              { emit_long( ((int)rs->encoding()<<21) | mtlo_op ); }
     1.7 -// Do mult and div need both 32-bit and 64-bit version? FIXME aoqi
     1.8 -//#ifndef _LP64
     1.9 -#if 1
    1.10 +
    1.11    void mult (Register rs, Register rt) { emit_long(insn_RRRO((int)rs->encoding(), (int)rt->encoding(), 0, mult_op)); }
    1.12    void multu(Register rs, Register rt) { emit_long(insn_RRRO((int)rs->encoding(), (int)rt->encoding(), 0, multu_op)); }
    1.13 -#else
    1.14 -  void mult (Register rs, Register rt) { dmult  (rs, rt); }
    1.15 -  void multu(Register rs, Register rt) { dmultu (rs, rt); }
    1.16 -#endif
    1.17  
    1.18    void nor(Register rd, Register rs, Register rt) { emit_long(insn_RRRO((int)rs->encoding(), (int)rt->encoding(), (int)rd->encoding(), nor_op)); }
    1.19  
    1.20 @@ -1205,30 +1199,17 @@
    1.21    void sdl  (Register rt, Register base, int off)     { emit_long(insn_ORRI(sdl_op,   (int)base->encoding(), (int)rt->encoding(), off)); }
    1.22    void sdr  (Register rt, Register base, int off)     { emit_long(insn_ORRI(sdr_op,   (int)base->encoding(), (int)rt->encoding(), off)); }
    1.23    void sh   (Register rt, Register base, int off)     { emit_long(insn_ORRI(sh_op,    (int)base->encoding(), (int)rt->encoding(), off)); }
    1.24 -//#ifndef _LP64
    1.25 -#if 1
    1.26 -  void sll  (Register rd, Register rt ,  int sa)      { emit_long(insn_RRSO((int)rt->encoding(),  (int)rd->encoding(),   sa,      sll_op)); }
    1.27 +  void sll  (Register rd, Register rt ,  int sa)      { emit_long(insn_RRSO((int)rt->encoding(),  (int)rd->encoding(),   low(sa, 5),      sll_op)); }
    1.28    void sllv (Register rd, Register rt,   Register rs) { emit_long(insn_RRRO((int)rs->encoding(),  (int)rt->encoding(),   (int)rd->encoding(), sllv_op)); }
    1.29 -#else
    1.30 -  void sll  (Register rd, Register rt ,  int sa)      { dsll  (rd, rt, sa);}
    1.31 -  void sllv (Register rd, Register rt,   Register rs) { dsllv (rd, rt, rs); }
    1.32 -#endif
    1.33    void slt  (Register rd, Register rs,   Register rt) { emit_long(insn_RRRO((int)rs->encoding(),  (int)rt->encoding(),   (int)rd->encoding(), slt_op)); }
    1.34    void slti (Register rt, Register rs,   int imm)     { emit_long(insn_ORRI(slti_op,  (int)rs->encoding(),   (int)rt->encoding(), imm)); }
    1.35    void sltiu(Register rt, Register rs,   int imm)     { emit_long(insn_ORRI(sltiu_op, (int)rs->encoding(),   (int)rt->encoding(), imm)); }
    1.36    void sltu (Register rd, Register rs,   Register rt) { emit_long(insn_RRRO((int)rs->encoding(),  (int)rt->encoding(),   (int)rd->encoding(), sltu_op)); }
    1.37 -//#ifndef _LP64
    1.38 -#if 1
    1.39    void sra  (Register rd, Register rt ,  int sa)      { emit_long(insn_RRSO((int)rt->encoding(),  (int)rd->encoding(),   sa,      sra_op)); }
    1.40    void srav (Register rd, Register rt,   Register rs) { emit_long(insn_RRRO((int)rs->encoding(),  (int)rt->encoding(),   (int)rd->encoding(), srav_op)); }
    1.41    void srl  (Register rd, Register rt ,  int sa)      { emit_long(insn_RRSO((int)rt->encoding(),  (int)rd->encoding(),   sa,      srl_op)); }
    1.42    void srlv (Register rd, Register rt,   Register rs) { emit_long(insn_RRRO((int)rs->encoding(),  (int)rt->encoding(),   (int)rd->encoding(), srlv_op)); }
    1.43 -#else
    1.44 -  void sra  (Register rd, Register rt ,  int sa)      { dsra  (rd, rt, sa); }
    1.45 -  void srav (Register rd, Register rt,   Register rs) { dsrav (rd, rt, rs); }
    1.46 -  void srl  (Register rd, Register rt ,  int sa)      { dsrl  (rd, rt, sa); }
    1.47 -  void srlv (Register rd, Register rt,   Register rs) { dsrlv (rd, rt, rs); }
    1.48 -#endif
    1.49 +
    1.50  #ifndef _LP64
    1.51    void sub  (Register rd, Register rs,   Register rt) { emit_long(insn_RRRO((int)rs->encoding(),  (int)rt->encoding(),   (int)rd->encoding(), sub_op)); }
    1.52    void subu (Register rd, Register rs,   Register rt) { emit_long(insn_RRRO((int)rs->encoding(),  (int)rt->encoding(),   (int)rd->encoding(), subu_op)); }
     2.1 --- a/src/cpu/mips/vm/mips_64.ad	Sat Feb 18 19:19:48 2017 -0500
     2.2 +++ b/src/cpu/mips/vm/mips_64.ad	Mon Feb 20 21:27:49 2017 +0800
     2.3 @@ -10754,19 +10754,7 @@
     2.4      Register dst = $dst$$Register;
     2.5      int    shamt = $shift$$constant;
     2.6  
     2.7 -/*
     2.8 -     094     SHL    S0, S0, #-7 #@salI_Reg_imm    
     2.9 -     static int insn_RRSO(int rt, int rd, int sa,   int op) { return (rt<<16) | (rd<<11) | (sa<<6)   | op; }
    2.10 -     void sll  (Register rd, Register rt ,  int sa) { 
    2.11 -         emit_long(insn_RRSO((int)rt->encoding(), (int)rd->encoding(), sa, sll_op));
    2.12 -     }
    2.13 -*/
    2.14 -
    2.15 -    if(0 <= shamt && shamt < 32) __ sll(dst, src, shamt);
    2.16 -    else {
    2.17 -       __ move(AT, shamt);
    2.18 -       __ sllv(dst, src, AT);
    2.19 -    }
    2.20 +    __ sll(dst, src, shamt);
    2.21    %}
    2.22    ins_pipe( ialu_regI_regI );
    2.23  %}
    2.24 @@ -10842,11 +10830,7 @@
    2.25      Register dst = $dst$$Register;
    2.26      int    shamt = $shift$$constant;
    2.27  
    2.28 -    if(0 <= shamt && shamt < 32) __ sll(dst, src, shamt);
    2.29 -    else {
    2.30 -       __ move(AT, shamt);
    2.31 -       __ sllv(dst, src, AT);
    2.32 -    }
    2.33 +    __ sll(dst, src, shamt);
    2.34    %}
    2.35    ins_pipe( ialu_regI_regI );
    2.36  %}

mercurial