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);