< prev index next >

src/hotspot/cpu/aarch64/c1_LIRGenerator_aarch64.cpp

Print this page

 338   // this CodeEmitInfo must not have the xhandlers because here the
 339   // object is already locked (xhandlers expect object to be unlocked)
 340   CodeEmitInfo* info = state_for(x, x->state(), true);
 341   monitor_enter(obj.result(), lock, syncTempOpr(), LIR_OprFact::illegalOpr,
 342                         x->monitor_no(), info_for_exception, info);
 343 }
 344 
 345 
 346 void LIRGenerator::do_MonitorExit(MonitorExit* x) {
 347   assert(x->is_pinned(),"");
 348 
 349   LIRItem obj(x->obj(), this);
 350   obj.dont_load_item();
 351 
 352   LIR_Opr lock = new_register(T_INT);
 353   LIR_Opr obj_temp = new_register(T_INT);
 354   set_no_result(x);
 355   monitor_exit(obj_temp, lock, syncTempOpr(), LIR_OprFact::illegalOpr, x->monitor_no());
 356 }
 357 











 358 
 359 void LIRGenerator::do_NegateOp(NegateOp* x) {
 360 
 361   LIRItem from(x->x(), this);
 362   from.load_item();
 363   LIR_Opr result = rlock_result(x);
 364   __ negate (from.result(), result);
 365 
 366 }
 367 
 368 // for  _fadd, _fmul, _fsub, _fdiv, _frem
 369 //      _dadd, _dmul, _dsub, _ddiv, _drem
 370 void LIRGenerator::do_ArithmeticOp_FPU(ArithmeticOp* x) {
 371 
 372   if (x->op() == Bytecodes::_frem || x->op() == Bytecodes::_drem) {
 373     // float remainder is implemented as a direct call into the runtime
 374     LIRItem right(x->x(), this);
 375     LIRItem left(x->y(), this);
 376 
 377     BasicTypeList signature(2);

 338   // this CodeEmitInfo must not have the xhandlers because here the
 339   // object is already locked (xhandlers expect object to be unlocked)
 340   CodeEmitInfo* info = state_for(x, x->state(), true);
 341   monitor_enter(obj.result(), lock, syncTempOpr(), LIR_OprFact::illegalOpr,
 342                         x->monitor_no(), info_for_exception, info);
 343 }
 344 
 345 
 346 void LIRGenerator::do_MonitorExit(MonitorExit* x) {
 347   assert(x->is_pinned(),"");
 348 
 349   LIRItem obj(x->obj(), this);
 350   obj.dont_load_item();
 351 
 352   LIR_Opr lock = new_register(T_INT);
 353   LIR_Opr obj_temp = new_register(T_INT);
 354   set_no_result(x);
 355   monitor_exit(obj_temp, lock, syncTempOpr(), LIR_OprFact::illegalOpr, x->monitor_no());
 356 }
 357 
 358 void LIRGenerator::do_continuation_doYield(Intrinsic* x) {
 359   BasicTypeList signature(0);
 360   CallingConvention* cc = frame_map()->java_calling_convention(&signature, true);
 361 
 362   const LIR_Opr result_reg = result_register_for(x->type());
 363   address entry = StubRoutines::cont_doYield();
 364   LIR_Opr result = rlock_result(x);
 365   CodeEmitInfo* info = state_for(x, x->state());
 366   __ call_runtime(entry, LIR_OprFact::illegalOpr, result_reg, cc->args(), info);
 367   __ move(result_reg, result);
 368 }
 369 
 370 void LIRGenerator::do_NegateOp(NegateOp* x) {
 371 
 372   LIRItem from(x->x(), this);
 373   from.load_item();
 374   LIR_Opr result = rlock_result(x);
 375   __ negate (from.result(), result);
 376 
 377 }
 378 
 379 // for  _fadd, _fmul, _fsub, _fdiv, _frem
 380 //      _dadd, _dmul, _dsub, _ddiv, _drem
 381 void LIRGenerator::do_ArithmeticOp_FPU(ArithmeticOp* x) {
 382 
 383   if (x->op() == Bytecodes::_frem || x->op() == Bytecodes::_drem) {
 384     // float remainder is implemented as a direct call into the runtime
 385     LIRItem right(x->x(), this);
 386     LIRItem left(x->y(), this);
 387 
 388     BasicTypeList signature(2);
< prev index next >