hotspot/src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp
changeset 6745 a34ef8968a84
parent 6461 cfc616b49f58
child 6774 a224d6a24120
equal deleted inserted replaced
6743:ef1795cd50a7 6745:a34ef8968a84
   309 //             visitor functions
   309 //             visitor functions
   310 //----------------------------------------------------------------------
   310 //----------------------------------------------------------------------
   311 
   311 
   312 
   312 
   313 void LIRGenerator::do_StoreIndexed(StoreIndexed* x) {
   313 void LIRGenerator::do_StoreIndexed(StoreIndexed* x) {
   314   assert(x->is_root(),"");
   314   assert(x->is_pinned(),"");
   315   bool needs_range_check = true;
   315   bool needs_range_check = true;
   316   bool use_length = x->length() != NULL;
   316   bool use_length = x->length() != NULL;
   317   bool obj_store = x->elt_type() == T_ARRAY || x->elt_type() == T_OBJECT;
   317   bool obj_store = x->elt_type() == T_ARRAY || x->elt_type() == T_OBJECT;
   318   bool needs_store_check = obj_store && (x->value()->as_Constant() == NULL ||
   318   bool needs_store_check = obj_store && (x->value()->as_Constant() == NULL ||
   319                                          !get_jobject_constant(x->value())->is_null_object());
   319                                          !get_jobject_constant(x->value())->is_null_object());
   384   }
   384   }
   385 }
   385 }
   386 
   386 
   387 
   387 
   388 void LIRGenerator::do_MonitorEnter(MonitorEnter* x) {
   388 void LIRGenerator::do_MonitorEnter(MonitorEnter* x) {
   389   assert(x->is_root(),"");
   389   assert(x->is_pinned(),"");
   390   LIRItem obj(x->obj(), this);
   390   LIRItem obj(x->obj(), this);
   391   obj.load_item();
   391   obj.load_item();
   392 
   392 
   393   set_no_result(x);
   393   set_no_result(x);
   394 
   394 
   396   LIR_Opr scratch = FrameMap::G3_opr;
   396   LIR_Opr scratch = FrameMap::G3_opr;
   397   LIR_Opr hdr     = FrameMap::G4_opr;
   397   LIR_Opr hdr     = FrameMap::G4_opr;
   398 
   398 
   399   CodeEmitInfo* info_for_exception = NULL;
   399   CodeEmitInfo* info_for_exception = NULL;
   400   if (x->needs_null_check()) {
   400   if (x->needs_null_check()) {
   401     info_for_exception = state_for(x, x->lock_stack_before());
   401     info_for_exception = state_for(x);
   402   }
   402   }
   403 
   403 
   404   // this CodeEmitInfo must not have the xhandlers because here the
   404   // this CodeEmitInfo must not have the xhandlers because here the
   405   // object is already locked (xhandlers expects object to be unlocked)
   405   // object is already locked (xhandlers expects object to be unlocked)
   406   CodeEmitInfo* info = state_for(x, x->state(), true);
   406   CodeEmitInfo* info = state_for(x, x->state(), true);
   407   monitor_enter(obj.result(), lock, hdr, scratch, x->monitor_no(), info_for_exception, info);
   407   monitor_enter(obj.result(), lock, hdr, scratch, x->monitor_no(), info_for_exception, info);
   408 }
   408 }
   409 
   409 
   410 
   410 
   411 void LIRGenerator::do_MonitorExit(MonitorExit* x) {
   411 void LIRGenerator::do_MonitorExit(MonitorExit* x) {
   412   assert(x->is_root(),"");
   412   assert(x->is_pinned(),"");
   413   LIRItem obj(x->obj(), this);
   413   LIRItem obj(x->obj(), this);
   414   obj.dont_load_item();
   414   obj.dont_load_item();
   415 
   415 
   416   set_no_result(x);
   416   set_no_result(x);
   417   LIR_Opr lock      = FrameMap::G1_opr;
   417   LIR_Opr lock      = FrameMap::G1_opr;
   869 
   869 
   870 void LIRGenerator::do_NewInstance(NewInstance* x) {
   870 void LIRGenerator::do_NewInstance(NewInstance* x) {
   871   // This instruction can be deoptimized in the slow path : use
   871   // This instruction can be deoptimized in the slow path : use
   872   // O0 as result register.
   872   // O0 as result register.
   873   const LIR_Opr reg = result_register_for(x->type());
   873   const LIR_Opr reg = result_register_for(x->type());
   874 
   874 #ifndef PRODUCT
   875   if (PrintNotLoaded && !x->klass()->is_loaded()) {
   875   if (PrintNotLoaded && !x->klass()->is_loaded()) {
   876     tty->print_cr("   ###class not loaded at new bci %d", x->bci());
   876     tty->print_cr("   ###class not loaded at new bci %d", x->printable_bci());
   877   }
   877   }
       
   878 #endif
   878   CodeEmitInfo* info = state_for(x, x->state());
   879   CodeEmitInfo* info = state_for(x, x->state());
   879   LIR_Opr tmp1 = FrameMap::G1_oop_opr;
   880   LIR_Opr tmp1 = FrameMap::G1_oop_opr;
   880   LIR_Opr tmp2 = FrameMap::G3_oop_opr;
   881   LIR_Opr tmp2 = FrameMap::G3_oop_opr;
   881   LIR_Opr tmp3 = FrameMap::G4_oop_opr;
   882   LIR_Opr tmp3 = FrameMap::G4_oop_opr;
   882   LIR_Opr tmp4 = FrameMap::O1_oop_opr;
   883   LIR_Opr tmp4 = FrameMap::O1_oop_opr;
  1016     patching_info = state_for(x, x->state_before());
  1017     patching_info = state_for(x, x->state_before());
  1017   }
  1018   }
  1018   obj.load_item();
  1019   obj.load_item();
  1019   LIR_Opr out_reg = rlock_result(x);
  1020   LIR_Opr out_reg = rlock_result(x);
  1020   CodeStub* stub;
  1021   CodeStub* stub;
  1021   CodeEmitInfo* info_for_exception = state_for(x, x->state()->copy_locks());
  1022   CodeEmitInfo* info_for_exception = state_for(x);
  1022 
  1023 
  1023   if (x->is_incompatible_class_change_check()) {
  1024   if (x->is_incompatible_class_change_check()) {
  1024     assert(patching_info == NULL, "can't patch this");
  1025     assert(patching_info == NULL, "can't patch this");
  1025     stub = new SimpleExceptionStub(Runtime1::throw_incompatible_class_change_error_id, LIR_OprFact::illegalOpr, info_for_exception);
  1026     stub = new SimpleExceptionStub(Runtime1::throw_incompatible_class_change_error_id, LIR_OprFact::illegalOpr, info_for_exception);
  1026   } else {
  1027   } else {