src/share/vm/c1/c1_LIR.hpp

changeset 1
2d8a650513c2
parent 0
f90c822e73f8
child 6876
710a3c8b516e
     1.1 --- a/src/share/vm/c1/c1_LIR.hpp	Wed Apr 27 01:25:04 2016 +0800
     1.2 +++ b/src/share/vm/c1/c1_LIR.hpp	Fri Apr 29 00:06:10 2016 +0800
     1.3 @@ -22,6 +22,12 @@
     1.4   *
     1.5   */
     1.6  
     1.7 +/*
     1.8 + * This file has been modified by Loongson Technology in 2015. These
     1.9 + * modifications are Copyright (c) 2015 Loongson Technology, and are made
    1.10 + * available on the same license terms set forth above.
    1.11 + */
    1.12 +
    1.13  #ifndef SHARE_VM_C1_C1_LIR_HPP
    1.14  #define SHARE_VM_C1_C1_LIR_HPP
    1.15  
    1.16 @@ -455,6 +461,14 @@
    1.17    FloatRegister as_float_reg   () const;
    1.18    FloatRegister as_double_reg  () const;
    1.19  #endif
    1.20 +#ifdef MIPS64
    1.21 +  FloatRegister as_float_reg   () const;
    1.22 +  FloatRegister as_double_reg  () const;
    1.23 +
    1.24 +  FloatRegister as_fpu_lo   () const;
    1.25 +  FloatRegister as_fpu_hi   () const;
    1.26 +
    1.27 +#endif
    1.28  
    1.29    jint      as_jint()    const { return as_constant_ptr()->as_jint(); }
    1.30    jlong     as_jlong()   const { return as_constant_ptr()->as_jlong(); }
    1.31 @@ -527,7 +541,11 @@
    1.32       , _type(type)
    1.33       , _disp(0) { verify(); }
    1.34  
    1.35 +#ifndef MIPS64
    1.36    LIR_Address(LIR_Opr base, intx disp, BasicType type):
    1.37 +#else
    1.38 +  LIR_Address(LIR_Opr base, int disp, BasicType type):
    1.39 +#endif
    1.40         _base(base)
    1.41       , _index(LIR_OprDesc::illegalOpr())
    1.42       , _scale(times_1)
    1.43 @@ -622,6 +640,13 @@
    1.44                                                                               LIR_OprDesc::fpu_register         |
    1.45                                                                               LIR_OprDesc::double_size); }
    1.46  #endif
    1.47 +#ifdef MIPS64
    1.48 +  static LIR_Opr double_fpu(int reg)            { return (LIR_Opr)(intptr_t)((reg  << LIR_OprDesc::reg1_shift) |
    1.49 +                                                                             (reg  << LIR_OprDesc::reg2_shift) |
    1.50 +                                                                             LIR_OprDesc::double_type          |
    1.51 +                                                                             LIR_OprDesc::fpu_register         |
    1.52 +                                                                             LIR_OprDesc::double_size); }
    1.53 +#endif
    1.54  #ifdef X86
    1.55    static LIR_Opr double_fpu(int reg)            { return (LIR_Opr)(intptr_t)((reg  << LIR_OprDesc::reg1_shift) |
    1.56                                                                               (reg  << LIR_OprDesc::reg2_shift) |
    1.57 @@ -922,8 +947,10 @@
    1.58        , lir_return
    1.59        , lir_leal
    1.60        , lir_neg
    1.61 +#ifndef MIPS64
    1.62        , lir_branch
    1.63        , lir_cond_float_branch
    1.64 +#endif
    1.65        , lir_move
    1.66        , lir_prefetchr
    1.67        , lir_prefetchw
    1.68 @@ -937,7 +964,13 @@
    1.69        , lir_unwind
    1.70    , end_op1
    1.71    , begin_op2
    1.72 +#ifdef MIPS64
    1.73 +      , lir_branch
    1.74 +      , lir_cond_float_branch
    1.75 +      , lir_null_check_for_branch
    1.76 +#else
    1.77        , lir_cmp
    1.78 +#endif
    1.79        , lir_cmp_l2i
    1.80        , lir_ucmp_fd2i
    1.81        , lir_cmp_fd2i
    1.82 @@ -971,6 +1004,9 @@
    1.83        , lir_xchg
    1.84    , end_op2
    1.85    , begin_op3
    1.86 +#ifdef MIPS64
    1.87 +      , lir_frem
    1.88 +#endif
    1.89        , lir_idiv
    1.90        , lir_irem
    1.91    , end_op3
    1.92 @@ -1421,7 +1457,7 @@
    1.93    virtual void verify() const;
    1.94  };
    1.95  
    1.96 -
    1.97 +#ifndef MIPS64
    1.98  class LIR_OpBranch: public LIR_Op {
    1.99   friend class LIR_OpVisitState;
   1.100  
   1.101 @@ -1464,7 +1500,7 @@
   1.102    virtual LIR_OpBranch* as_OpBranch() { return this; }
   1.103    virtual void print_instr(outputStream* out) const PRODUCT_RETURN;
   1.104  };
   1.105 -
   1.106 +#endif
   1.107  
   1.108  class ConversionStub;
   1.109  
   1.110 @@ -1513,7 +1549,7 @@
   1.111    static void print_bytecode(outputStream* out, Bytecodes::Code code) PRODUCT_RETURN;
   1.112  };
   1.113  
   1.114 -
   1.115 +#ifndef MIPS64
   1.116  // LIR_OpAllocObj
   1.117  class LIR_OpAllocObj : public LIR_Op1 {
   1.118   friend class LIR_OpVisitState;
   1.119 @@ -1557,7 +1593,56 @@
   1.120    virtual LIR_OpAllocObj * as_OpAllocObj () { return this; }
   1.121    virtual void print_instr(outputStream* out) const PRODUCT_RETURN;
   1.122  };
   1.123 -
   1.124 +#else
   1.125 +class LIR_OpAllocObj : public LIR_Op1 {
   1.126 + friend class LIR_OpVisitState;
   1.127 +
   1.128 + private:
   1.129 +  LIR_Opr _tmp1;
   1.130 +  LIR_Opr _tmp2;
   1.131 +  LIR_Opr _tmp3;
   1.132 +  LIR_Opr _tmp4;
   1.133 +  LIR_Opr _tmp5;
   1.134 +  LIR_Opr _tmp6;
   1.135 +  int     _hdr_size;
   1.136 +  int     _obj_size;
   1.137 +  CodeStub* _stub;
   1.138 +  bool    _init_check;
   1.139 +
   1.140 + public:
   1.141 +  LIR_OpAllocObj(LIR_Opr klass, LIR_Opr result,
   1.142 +                 LIR_Opr t1, LIR_Opr t2, LIR_Opr t3, LIR_Opr t4,LIR_Opr t5, LIR_Opr t6,
   1.143 +                 int hdr_size, int obj_size, bool init_check, CodeStub* stub)
   1.144 +    : LIR_Op1(lir_alloc_object, klass, result)
   1.145 +    , _tmp1(t1)
   1.146 +    , _tmp2(t2)
   1.147 +    , _tmp3(t3)
   1.148 +    , _tmp4(t4)
   1.149 +    , _tmp5(t5)
   1.150 +    , _tmp6(t6)
   1.151 +    , _hdr_size(hdr_size)
   1.152 +    , _obj_size(obj_size)
   1.153 +    , _init_check(init_check)
   1.154 +    , _stub(stub)                                { }
   1.155 +
   1.156 +  LIR_Opr klass()        const                   { return in_opr();     }
   1.157 +  LIR_Opr obj()          const                   { return result_opr(); }
   1.158 +  LIR_Opr tmp1()         const                   { return _tmp1;        }
   1.159 +  LIR_Opr tmp2()         const                   { return _tmp2;        }
   1.160 +  LIR_Opr tmp3()         const                   { return _tmp3;        }
   1.161 +  LIR_Opr tmp4()         const                   { return _tmp4;        }
   1.162 +  LIR_Opr tmp5()         const                   { return _tmp5;        }
   1.163 +  LIR_Opr tmp6()         const                   { return _tmp6;        }
   1.164 +  int     header_size()  const                   { return _hdr_size;    }
   1.165 +  int     object_size()  const                   { return _obj_size;    }
   1.166 +  bool    init_check()   const                   { return _init_check;  }
   1.167 +  CodeStub* stub()       const                   { return _stub;        }
   1.168 +
   1.169 +  virtual void emit_code(LIR_Assembler* masm);
   1.170 +  virtual LIR_OpAllocObj * as_OpAllocObj () { return this; }
   1.171 +  virtual void print_instr(outputStream* out) const PRODUCT_RETURN;
   1.172 +};
   1.173 +#endif
   1.174  
   1.175  // LIR_OpRoundFP
   1.176  class LIR_OpRoundFP : public LIR_Op1 {
   1.177 @@ -1626,7 +1711,7 @@
   1.178    virtual LIR_OpTypeCheck* as_OpTypeCheck() { return this; }
   1.179    void print_instr(outputStream* out) const PRODUCT_RETURN;
   1.180  };
   1.181 -
   1.182 +#ifndef MIPS64
   1.183  // LIR_Op2
   1.184  class LIR_Op2: public LIR_Op {
   1.185   friend class LIR_OpVisitState;
   1.186 @@ -1735,6 +1820,138 @@
   1.187    virtual LIR_Op2* as_Op2() { return this; }
   1.188    virtual void print_instr(outputStream* out) const PRODUCT_RETURN;
   1.189  };
   1.190 +#else
   1.191 + class LIR_Op2: public LIR_Op {
   1.192 +  //friend class LIR_Optimizer;
   1.193 +   friend class LIR_OpVisitState;
   1.194 +  protected:
   1.195 +   LIR_Opr   _opr1;
   1.196 +   LIR_Opr   _opr2;
   1.197 +   BasicType _type;
   1.198 +   LIR_Opr   _tmp1;
   1.199 +   LIR_Opr   _tmp2;
   1.200 +   LIR_Opr   _tmp3;
   1.201 +   LIR_Opr   _tmp4;
   1.202 +   LIR_Opr   _tmp5;
   1.203 +
   1.204 +   virtual void verify() const;
   1.205 +  public:
   1.206 +   LIR_Op2(LIR_Code code, LIR_Condition condition, LIR_Opr opr1, LIR_Opr opr2,
   1.207 +     CodeEmitInfo* info = NULL, BasicType type = T_ILLEGAL)
   1.208 +     : LIR_Op(code, LIR_OprFact::illegalOpr, info),
   1.209 +                         _opr1(opr1), _opr2(opr2),
   1.210 +                         _type(type),
   1.211 +                         _tmp1(LIR_OprFact::illegalOpr),
   1.212 +                         _tmp2(LIR_OprFact::illegalOpr),
   1.213 +                         _tmp3(LIR_OprFact::illegalOpr),
   1.214 +                         _tmp4(LIR_OprFact::illegalOpr),
   1.215 +                         _tmp5(LIR_OprFact::illegalOpr) {
   1.216 +   }
   1.217 + 
   1.218 +   LIR_Op2(LIR_Code code, LIR_Opr opr1, LIR_Opr opr2, LIR_Opr result = LIR_OprFact::illegalOpr,
   1.219 +           CodeEmitInfo* info = NULL, BasicType type = T_ILLEGAL)
   1.220 +     : LIR_Op(code, result, info),
   1.221 +                         _opr1(opr1), _opr2(opr2),
   1.222 +                         _type(type),
   1.223 +                         _tmp1(LIR_OprFact::illegalOpr),
   1.224 +                         _tmp2(LIR_OprFact::illegalOpr),
   1.225 +                         _tmp3(LIR_OprFact::illegalOpr),
   1.226 +                         _tmp4(LIR_OprFact::illegalOpr),
   1.227 +                         _tmp5(LIR_OprFact::illegalOpr) {
   1.228 +
   1.229 +     assert(is_in_range(code, begin_op2, end_op2), "code check");
   1.230 +   }
   1.231 + 
   1.232 + 
   1.233 +   LIR_Op2(LIR_Code code, LIR_Opr opr1, LIR_Opr opr2, LIR_Opr result, LIR_Opr tmp1, LIR_Opr tmp2 = LIR_OprFact::illegalOpr, LIR_Opr tmp3 = LIR_OprFact::illegalOpr, LIR_Opr tmp4 = LIR_OprFact::illegalOpr, LIR_Opr tmp5 = LIR_OprFact::illegalOpr)
   1.234 +     : LIR_Op(code, result, NULL),
   1.235 +                         _opr1(opr1), _opr2(opr2),
   1.236 +                         _type(T_ILLEGAL),
   1.237 +                         _tmp1(tmp1),
   1.238 +                         _tmp2(tmp2),
   1.239 +                         _tmp3(tmp3),
   1.240 +                         _tmp4(tmp4),
   1.241 +                         _tmp5(tmp5) {
   1.242 +     assert(is_in_range(code, begin_op2, end_op2), "code check");
   1.243 +   }
   1.244 + 
   1.245 +   LIR_Opr in_opr1() const                        { return _opr1; }
   1.246 +   LIR_Opr in_opr2() const                        { return _opr2; }
   1.247 +   BasicType type()  const                        { return _type; }
   1.248 +   LIR_Opr tmp1_opr() const                        { return _tmp1; }
   1.249 +   LIR_Opr tmp2_opr() const                        { return _tmp2; }
   1.250 +   LIR_Opr tmp3_opr() const                        { return _tmp3; }
   1.251 +   LIR_Opr tmp4_opr() const                        { return _tmp4; }
   1.252 +   LIR_Opr tmp5_opr() const                        { return _tmp5; }
   1.253 +
   1.254 + 
   1.255 +   void set_in_opr1(LIR_Opr opr)                  { _opr1 = opr; }
   1.256 +   void set_in_opr2(LIR_Opr opr)                  { _opr2 = opr; }
   1.257 +   // where is the defination of LIR_AbstractAssembler?, 12/21,2006, jerome
   1.258 +   //virtual void emit_code(LIR_AbstractAssembler* masm);
   1.259 +   virtual void emit_code(LIR_Assembler* masm);
   1.260 +   virtual LIR_Op2* as_Op2() { return this; }
   1.261 + 
   1.262 +   // virtual void print_instr() const PRODUCT_RETURN;
   1.263 +   virtual void print_instr(outputStream* out) const PRODUCT_RETURN;
   1.264 + };
   1.265 + 
   1.266 + 
   1.267 + class LIR_OpBranch: public LIR_Op2 {
   1.268 + friend class LIR_OpVisitState;
   1.269 + public:
   1.270 + 
   1.271 +  private:
   1.272 +   LIR_Condition _cond;
   1.273 +   BasicType     _type;
   1.274 +   Label*        _label;
   1.275 +   BlockBegin*   _block;  // if this is a branch to a block, this is the block
   1.276 +   BlockBegin*   _ublock;  // if this is a float branch , this is the unorder block
   1.277 +   CodeStub*     _stub;   // if this is a branch to a stub, this is the stub
   1.278 + 
   1.279 +  public:
   1.280 +   // these are temporary constructors until we start using the conditional register  
   1.281 +   LIR_OpBranch(LIR_Condition cond, LIR_Opr left, LIR_Opr right, Label* lbl)
   1.282 +     : LIR_Op2(lir_branch, left, right, LIR_OprFact::illegalOpr, (CodeEmitInfo*)(NULL)),
   1.283 +       _cond(cond), _label(lbl), _block(NULL), _ublock(NULL),_stub(NULL)
   1.284 +   {
   1.285 +   }
   1.286 + 
   1.287 +   LIR_OpBranch(LIR_Condition cond, LIR_Opr left, LIR_Opr right, BasicType type, BlockBegin* block);
   1.288 + 
   1.289 +   LIR_OpBranch(LIR_Condition cond, LIR_Opr left, LIR_Opr right, BasicType type, CodeStub* stub);
   1.290 +   
   1.291 +   //LIR_OpBranch(LIR_Condition cond, BasicType type, CodeStub* stub);
   1.292 +
   1.293 +   LIR_OpBranch(LIR_Condition cond, LIR_Opr left, LIR_Opr right, BasicType type,
   1.294 +                 BlockBegin *block,BlockBegin *ublock);
   1.295 + 
   1.296 +   LIR_Condition cond()        const              { return _cond;        }
   1.297 +   BasicType     type()        const              { return _type;        }
   1.298 +   LIR_Opr       left()        const              { return in_opr1();    }
   1.299 +   LIR_Opr       right()       const              { return in_opr2();    }
   1.300 +   Label*        label()       const              { return _label;       }
   1.301 +   BlockBegin*   block()       const              { return _block;       }
   1.302 +   BlockBegin*   ublock()      const              { return _ublock;      }
   1.303 +   CodeStub*     stub()        const              { return _stub;        }
   1.304 + 
   1.305 + 
   1.306 +   void          change_block(BlockBegin* b);
   1.307 +   void          change_ublock(BlockBegin* b);
   1.308 +   void          negate_cond();
   1.309 +
   1.310 +
   1.311 +  // 12/21,06,jerome 
   1.312 +  //virtual void emit_code(LIR_AbstractAssembler* masm);
   1.313 +  virtual void emit_code(LIR_Assembler* masm);
   1.314 +  virtual LIR_OpBranch* as_OpBranch() { return this; }
   1.315 +  //virtual void print_instr() const PRODUCT_RETURN;
   1.316 +  virtual void print_instr(outputStream* out) const PRODUCT_RETURN;
   1.317 +
   1.318 + };
   1.319 +#endif
   1.320 +
   1.321 +#ifndef MIPS64
   1.322  
   1.323  class LIR_OpAllocArray : public LIR_Op {
   1.324   friend class LIR_OpVisitState;
   1.325 @@ -1775,6 +1992,50 @@
   1.326    virtual LIR_OpAllocArray * as_OpAllocArray () { return this; }
   1.327    virtual void print_instr(outputStream* out) const PRODUCT_RETURN;
   1.328  };
   1.329 +#else
   1.330 +class LIR_OpAllocArray : public LIR_Op {
   1.331 + friend class LIR_OpVisitState;
   1.332 +
   1.333 + private:
   1.334 +  LIR_Opr   _klass;
   1.335 +  LIR_Opr   _len;
   1.336 +  LIR_Opr   _tmp1;
   1.337 +  LIR_Opr   _tmp2;
   1.338 +  LIR_Opr   _tmp3;
   1.339 +  LIR_Opr   _tmp4;
   1.340 +  LIR_Opr   _tmp5;
   1.341 +  BasicType _type;
   1.342 +  CodeStub* _stub;
   1.343 +
   1.344 + public:
   1.345 +  LIR_OpAllocArray(LIR_Opr klass, LIR_Opr len, LIR_Opr result, LIR_Opr t1, LIR_Opr t2, LIR_Opr t3, LIR_Opr t4,  LIR_Opr t5, BasicType type, CodeStub* stub)
   1.346 +    : LIR_Op(lir_alloc_array, result, NULL)
   1.347 +    , _klass(klass)
   1.348 +    , _len(len)
   1.349 +    , _tmp1(t1)
   1.350 +    , _tmp2(t2)
   1.351 +    , _tmp3(t3)
   1.352 +    , _tmp4(t4)
   1.353 +    , _tmp5(t5)
   1.354 +    , _type(type)
   1.355 +    , _stub(stub) {}
   1.356 +
   1.357 +  LIR_Opr   klass()   const                      { return _klass;       }
   1.358 +  LIR_Opr   len()     const                      { return _len;         }
   1.359 +  LIR_Opr   obj()     const                      { return result_opr(); }
   1.360 +  LIR_Opr   tmp1()    const                      { return _tmp1;        }
   1.361 +  LIR_Opr   tmp2()    const                      { return _tmp2;        }
   1.362 +  LIR_Opr   tmp3()    const                      { return _tmp3;        }
   1.363 +  LIR_Opr   tmp4()    const                      { return _tmp4;        }
   1.364 +  LIR_Opr   tmp5()    const                      { return _tmp5;        }
   1.365 +  BasicType type()    const                      { return _type;        }
   1.366 +  CodeStub* stub()    const                      { return _stub;        }
   1.367 +
   1.368 +  virtual void emit_code(LIR_Assembler* masm);
   1.369 +  virtual LIR_OpAllocArray * as_OpAllocArray () { return this; }
   1.370 +  virtual void print_instr(outputStream* out) const PRODUCT_RETURN;
   1.371 +};
   1.372 +#endif
   1.373  
   1.374  
   1.375  class LIR_Op3: public LIR_Op {
   1.376 @@ -2168,6 +2429,7 @@
   1.377    void push(LIR_Opr opr)                                   { append(new LIR_Op1(lir_push, opr)); }
   1.378    void pop(LIR_Opr reg)                                    { append(new LIR_Op1(lir_pop,  reg)); }
   1.379  
   1.380 +#ifndef MIPS64
   1.381    void cmp(LIR_Condition condition, LIR_Opr left, LIR_Opr right, CodeEmitInfo* info = NULL) {
   1.382      append(new LIR_Op2(lir_cmp, condition, left, right, info));
   1.383    }
   1.384 @@ -2182,12 +2444,46 @@
   1.385      append(new LIR_Op2(lir_cmove, condition, src1, src2, dst, type));
   1.386    }
   1.387  
   1.388 +#else
   1.389 +  void null_check_for_branch(LIR_Condition condition, LIR_Opr left, LIR_Opr right,
   1.390 +    CodeEmitInfo* info = NULL) {
   1.391 +    append(new LIR_Op2(lir_null_check_for_branch, condition, left, right, info));
   1.392 +  }
   1.393 +
   1.394 +  void null_check_for_branch(LIR_Condition condition, LIR_Opr left, int right,
   1.395 +    CodeEmitInfo* info = NULL) {
   1.396 +    append(new LIR_Op2(lir_null_check_for_branch, condition, left, LIR_OprFact::intConst(right), info));
   1.397 +  }
   1.398 +
   1.399 +  void null_check_for_branch(LIR_Condition condition, LIR_Opr base, int disp, int c,
   1.400 +    CodeEmitInfo* info) {
   1.401 +    append(new LIR_Op2(lir_null_check_for_branch, condition,
   1.402 +                        LIR_OprFact::address(new LIR_Address(base, disp, T_INT)),
   1.403 +                        LIR_OprFact::intConst(c),
   1.404 +                        info, T_INT));
   1.405 +  }
   1.406 +
   1.407 +  void null_check_branch(LIR_Condition condition, LIR_Opr reg, LIR_Address* addr,
   1.408 +    CodeEmitInfo* info) {
   1.409 +    append(new LIR_Op2(lir_null_check_for_branch, condition,
   1.410 +                        reg,
   1.411 +                        LIR_OprFact::address(addr),
   1.412 +                        info));
   1.413 +  }
   1.414 +
   1.415 +#endif
   1.416 +#ifndef MIPS64
   1.417    void cas_long(LIR_Opr addr, LIR_Opr cmp_value, LIR_Opr new_value,
   1.418                  LIR_Opr t1, LIR_Opr t2, LIR_Opr result = LIR_OprFact::illegalOpr);
   1.419    void cas_obj(LIR_Opr addr, LIR_Opr cmp_value, LIR_Opr new_value,
   1.420                 LIR_Opr t1, LIR_Opr t2, LIR_Opr result = LIR_OprFact::illegalOpr);
   1.421    void cas_int(LIR_Opr addr, LIR_Opr cmp_value, LIR_Opr new_value,
   1.422                 LIR_Opr t1, LIR_Opr t2, LIR_Opr result = LIR_OprFact::illegalOpr);
   1.423 +#else
   1.424 +  void cas_long(LIR_Opr addr, LIR_Opr cmp_value, LIR_Opr new_value, LIR_Opr t1, LIR_Opr t2, LIR_Opr result);
   1.425 +  void cas_obj(LIR_Opr addr, LIR_Opr cmp_value, LIR_Opr new_value, LIR_Opr t1, LIR_Opr t2, LIR_Opr result);
   1.426 +  void cas_int(LIR_Opr addr, LIR_Opr cmp_value, LIR_Opr new_value, LIR_Opr t1, LIR_Opr t2, LIR_Opr result);
   1.427 +#endif
   1.428  
   1.429    void abs (LIR_Opr from, LIR_Opr to, LIR_Opr tmp)                { append(new LIR_Op2(lir_abs , from, tmp, to)); }
   1.430    void sqrt(LIR_Opr from, LIR_Opr to, LIR_Opr tmp)                { append(new LIR_Op2(lir_sqrt, from, tmp, to)); }
   1.431 @@ -2220,21 +2516,40 @@
   1.432    void volatile_store_mem_reg(LIR_Opr src, LIR_Address* address, CodeEmitInfo* info, LIR_PatchCode patch_code = lir_patch_none);
   1.433    void volatile_store_unsafe_reg(LIR_Opr src, LIR_Opr base, LIR_Opr offset, BasicType type, CodeEmitInfo* info, LIR_PatchCode patch_code);
   1.434  
   1.435 +#ifdef MIPS64
   1.436 +  void frem(LIR_Opr left, LIR_Opr right, LIR_Opr res, LIR_Opr tmp, CodeEmitInfo* info = NULL);
   1.437 +#endif
   1.438 +
   1.439    void idiv(LIR_Opr left, LIR_Opr right, LIR_Opr res, LIR_Opr tmp, CodeEmitInfo* info);
   1.440    void idiv(LIR_Opr left, int   right, LIR_Opr res, LIR_Opr tmp, CodeEmitInfo* info);
   1.441    void irem(LIR_Opr left, LIR_Opr right, LIR_Opr res, LIR_Opr tmp, CodeEmitInfo* info);
   1.442    void irem(LIR_Opr left, int   right, LIR_Opr res, LIR_Opr tmp, CodeEmitInfo* info);
   1.443 -
   1.444 +#ifndef MIPS64
   1.445    void allocate_object(LIR_Opr dst, LIR_Opr t1, LIR_Opr t2, LIR_Opr t3, LIR_Opr t4, int header_size, int object_size, LIR_Opr klass, bool init_check, CodeStub* stub);
   1.446    void allocate_array(LIR_Opr dst, LIR_Opr len, LIR_Opr t1,LIR_Opr t2, LIR_Opr t3,LIR_Opr t4, BasicType type, LIR_Opr klass, CodeStub* stub);
   1.447 +#else
   1.448 +  void allocate_object(LIR_Opr dst, LIR_Opr t1, LIR_Opr t2, LIR_Opr t3, LIR_Opr t4, LIR_Opr t5, LIR_Opr t6,int header_size, int object_size, LIR_Opr klass, bool init_check, CodeStub* stub);
   1.449 +  void allocate_array(LIR_Opr dst, LIR_Opr len, LIR_Opr t1,LIR_Opr t2, LIR_Opr t3,LIR_Opr t4, LIR_Opr t5,BasicType type, LIR_Opr klass, CodeStub* stub);
   1.450 +#endif
   1.451  
   1.452    // jump is an unconditional branch
   1.453    void jump(BlockBegin* block) {
   1.454 +#ifndef MIPS64
   1.455      append(new LIR_OpBranch(lir_cond_always, T_ILLEGAL, block));
   1.456 +#else
   1.457 +    append(new LIR_OpBranch(lir_cond_always, LIR_OprFact::illegalOpr,LIR_OprFact::illegalOpr,T_ILLEGAL, block));
   1.458 +#endif
   1.459 +
   1.460    }
   1.461    void jump(CodeStub* stub) {
   1.462 +#ifndef MIPS64
   1.463      append(new LIR_OpBranch(lir_cond_always, T_ILLEGAL, stub));
   1.464 +#else
   1.465 +    append(new LIR_OpBranch(lir_cond_always, LIR_OprFact::illegalOpr, LIR_OprFact::illegalOpr,T_ILLEGAL, stub));
   1.466 +#endif
   1.467 +
   1.468    }
   1.469 +#ifndef MIPS64
   1.470    void branch(LIR_Condition cond, BasicType type, Label* lbl)        { append(new LIR_OpBranch(cond, type, lbl)); }
   1.471    void branch(LIR_Condition cond, BasicType type, BlockBegin* block) {
   1.472      assert(type != T_FLOAT && type != T_DOUBLE, "no fp comparisons");
   1.473 @@ -2248,6 +2563,25 @@
   1.474      assert(type == T_FLOAT || type == T_DOUBLE, "fp comparisons only");
   1.475      append(new LIR_OpBranch(cond, type, block, unordered));
   1.476    }
   1.477 +#else
   1.478 +   void branch(LIR_Condition cond, LIR_Opr left, LIR_Opr right, Label* lbl) {
   1.479 +          append(new LIR_OpBranch(cond, left, right, lbl));
   1.480 +  }
   1.481 +
   1.482 +  void branch(LIR_Condition cond, LIR_Opr left, LIR_Opr right, BasicType type, BlockBegin* block) {
   1.483 +                append(new LIR_OpBranch(cond, left, right, type, block));
   1.484 +  }
   1.485 +
   1.486 +  void branch(LIR_Condition cond, LIR_Opr left, LIR_Opr right, BasicType type, CodeStub* stub) {
   1.487 +          append(new LIR_OpBranch(cond, left, right, type, stub));
   1.488 +  }
   1.489 +
   1.490 +  void branch(LIR_Condition cond, LIR_Opr left, LIR_Opr right, BasicType type,
   1.491 +    BlockBegin* block, BlockBegin* unordered) {
   1.492 +          append(new LIR_OpBranch(cond, left, right, type, block, unordered));
   1.493 +  }
   1.494 +
   1.495 +#endif
   1.496  
   1.497    void shift_left(LIR_Opr value, LIR_Opr count, LIR_Opr dst, LIR_Opr tmp);
   1.498    void shift_right(LIR_Opr value, LIR_Opr count, LIR_Opr dst, LIR_Opr tmp);

mercurial