< prev index next >

src/hotspot/cpu/aarch64/c1_LIRGenerator_aarch64.cpp

Print this page

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











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

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