< prev index next >
src/hotspot/cpu/x86/c1_LIRGenerator_x86.cpp
Print this page
rev 50307 : [mq]: cont
*** 323,332 ****
--- 323,377 ----
__ negate(value.result(), reg);
set_result(x, round_item(reg));
}
+ void LIRGenerator::do_continuation_getFP(Intrinsic* x) {
+ LIR_Opr result_reg = rlock_result(x);
+ __ getfp(result_reg);
+ }
+
+ void LIRGenerator::do_continuation_getSP(Intrinsic* x) {
+ LIR_Opr result_reg = rlock_result(x);
+ __ getsp(result_reg);
+ }
+
+ void LIRGenerator::do_continuation_getPC(Intrinsic* x) {
+ BasicTypeList signature(0);
+ //signature.append(T_LONG);
+ CallingConvention* cc = frame_map()->c_calling_convention(&signature);
+
+ const LIR_Opr result_reg = result_register_for(x->type());
+ address entry = StubRoutines::cont_getPC();
+ LIR_Opr result = rlock_result(x);
+ __ call_runtime_leaf(entry, getThreadTemp(), result_reg, cc->args());
+ __ move(result_reg, result);
+ }
+
+ void LIRGenerator::do_continuation_doContinue(Intrinsic* x) {
+ BasicTypeList signature(0);
+ CallingConvention* cc = frame_map()->c_calling_convention(&signature);
+
+ //const LIR_Opr result_reg = result_register_for(x->type());
+ address entry = StubRoutines::cont_thaw();
+ CodeEmitInfo* info = state_for(x, x->state());
+ __ call_runtime(entry, getThreadTemp(), getThreadTemp(), cc->args(), info);
+ }
+
+ void LIRGenerator::do_continuation_doYield(Intrinsic* x) {
+ BasicTypeList signature(1);
+ signature.append(T_INT);
+ CallingConvention* cc = frame_map()->c_calling_convention(&signature);
+
+ LIRItem value(x->argument_at(0), this);
+ value.load_item();
+ __ move(value.result(), cc->at(0));
+
+ address entry = StubRoutines::cont_doYield();
+ CodeEmitInfo* info = state_for(x, x->state());
+ __ call_runtime(entry, LIR_OprFact::illegalOpr, LIR_OprFact::illegalOpr, cc->args(), info);
+ }
// for _fadd, _fmul, _fsub, _fdiv, _frem
// _dadd, _dmul, _dsub, _ddiv, _drem
void LIRGenerator::do_ArithmeticOp_FPU(ArithmeticOp* x) {
LIRItem left(x->x(), this);
< prev index next >