< prev index next >

src/hotspot/cpu/x86/c1_LIRGenerator_x86.cpp

Print this page
@@ -311,10 +311,22 @@
    LIR_Opr obj_temp = new_register(T_INT);
    set_no_result(x);
    monitor_exit(obj_temp, lock, syncTempOpr(), LIR_OprFact::illegalOpr, x->monitor_no());
  }
  
+ void LIRGenerator::do_continuation_doYield(Intrinsic* x) {
+   BasicTypeList signature(0);
+   // signature.append(T_INT);
+   CallingConvention* cc = frame_map()->java_calling_convention(&signature, true);
+ 
+   const LIR_Opr result_reg = result_register_for(x->type());
+   address entry = StubRoutines::cont_doYield();
+   LIR_Opr result = rlock_result(x);
+   CodeEmitInfo* info = state_for(x, x->state());
+   __ call_runtime(entry, LIR_OprFact::illegalOpr, result_reg, cc->args(), info);
+   __ move(result_reg, result);
+ }
  
  // _ineg, _lneg, _fneg, _dneg
  void LIRGenerator::do_NegateOp(NegateOp* x) {
    LIRItem value(x->x(), this);
    value.set_destroys_register();

@@ -337,11 +349,10 @@
    __ negate(value.result(), reg, tmp);
  
    set_result(x, round_item(reg));
  }
  
- 
  // for  _fadd, _fmul, _fsub, _fdiv, _frem
  //      _dadd, _dmul, _dsub, _ddiv, _drem
  void LIRGenerator::do_ArithmeticOp_FPU(ArithmeticOp* x) {
    LIRItem left(x->x(),  this);
    LIRItem right(x->y(), this);
< prev index next >