< prev index next >

src/share/vm/c1/c1_LIRGenerator.cpp

Print this page
rev 7508 : 8028595: WhiteBox API for stress testing of TieredCompilation
Reviewed-by:


1192     LIR_OprList* args = new LIR_OprList();
1193     args->append(getThreadPointer());
1194     LIR_Opr meth = new_register(T_METADATA);
1195     __ metadata2reg(method()->constant_encoding(), meth);
1196     args->append(meth);
1197     call_runtime(&signature, args, CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit), voidType, NULL);
1198   }
1199 
1200   if (x->type()->is_void()) {
1201     __ return_op(LIR_OprFact::illegalOpr);
1202   } else {
1203     LIR_Opr reg = result_register_for(x->type(), /*callee=*/true);
1204     LIRItem result(x->result(), this);
1205 
1206     result.load_item_force(reg);
1207     __ return_op(result.result());
1208   }
1209   set_no_result(x);
1210 }
1211 





1212 // Examble: ref.get()
1213 // Combination of LoadField and g1 pre-write barrier
1214 void LIRGenerator::do_Reference_get(Intrinsic* x) {
1215 
1216   const int referent_offset = java_lang_ref_Reference::referent_offset;
1217   guarantee(referent_offset > 0, "referent offset not initialized");
1218 
1219   assert(x->number_of_arguments() == 1, "wrong type");
1220 
1221   LIRItem reference(x->argument_at(0), this);
1222   reference.load_item();
1223 
1224   // need to perform the null check on the reference objecy
1225   CodeEmitInfo* info = NULL;
1226   if (x->needs_null_check()) {
1227     info = state_for(x);
1228   }
1229 
1230   LIR_Address* referent_field_adr =
1231     new LIR_Address(reference.result(), referent_offset, T_OBJECT);


3152   case vmIntrinsics::_checkIndex:     do_NIOCheckIndex(x); break;
3153 
3154   case vmIntrinsics::_compareAndSwapObject:
3155     do_CompareAndSwap(x, objectType);
3156     break;
3157   case vmIntrinsics::_compareAndSwapInt:
3158     do_CompareAndSwap(x, intType);
3159     break;
3160   case vmIntrinsics::_compareAndSwapLong:
3161     do_CompareAndSwap(x, longType);
3162     break;
3163 
3164   case vmIntrinsics::_loadFence :
3165     if (os::is_MP()) __ membar_acquire();
3166     break;
3167   case vmIntrinsics::_storeFence:
3168     if (os::is_MP()) __ membar_release();
3169     break;
3170   case vmIntrinsics::_fullFence :
3171     if (os::is_MP()) __ membar();




3172     break;
3173 
3174   case vmIntrinsics::_Reference_get:
3175     do_Reference_get(x);
3176     break;
3177 
3178   case vmIntrinsics::_updateCRC32:
3179   case vmIntrinsics::_updateBytesCRC32:
3180   case vmIntrinsics::_updateByteBufferCRC32:
3181     do_update_CRC32(x);
3182     break;
3183 
3184   default: ShouldNotReachHere(); break;
3185   }
3186 }
3187 
3188 void LIRGenerator::profile_arguments(ProfileCall* x) {
3189   if (compilation()->profile_arguments()) {
3190     int bci = x->bci_of_invoke();
3191     ciMethodData* md = x->method()->method_data_or_null();




1192     LIR_OprList* args = new LIR_OprList();
1193     args->append(getThreadPointer());
1194     LIR_Opr meth = new_register(T_METADATA);
1195     __ metadata2reg(method()->constant_encoding(), meth);
1196     args->append(meth);
1197     call_runtime(&signature, args, CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit), voidType, NULL);
1198   }
1199 
1200   if (x->type()->is_void()) {
1201     __ return_op(LIR_OprFact::illegalOpr);
1202   } else {
1203     LIR_Opr reg = result_register_for(x->type(), /*callee=*/true);
1204     LIRItem result(x->result(), this);
1205 
1206     result.load_item_force(reg);
1207     __ return_op(result.result());
1208   }
1209   set_no_result(x);
1210 }
1211 
1212 void LIRGenerator::do_getCompiler(Intrinsic* x) {
1213    LIR_Opr value = load_constant(new Constant(new IntConstant(1)));
1214    set_result(x, value);
1215 }
1216 
1217 // Examble: ref.get()
1218 // Combination of LoadField and g1 pre-write barrier
1219 void LIRGenerator::do_Reference_get(Intrinsic* x) {
1220 
1221   const int referent_offset = java_lang_ref_Reference::referent_offset;
1222   guarantee(referent_offset > 0, "referent offset not initialized");
1223 
1224   assert(x->number_of_arguments() == 1, "wrong type");
1225 
1226   LIRItem reference(x->argument_at(0), this);
1227   reference.load_item();
1228 
1229   // need to perform the null check on the reference objecy
1230   CodeEmitInfo* info = NULL;
1231   if (x->needs_null_check()) {
1232     info = state_for(x);
1233   }
1234 
1235   LIR_Address* referent_field_adr =
1236     new LIR_Address(reference.result(), referent_offset, T_OBJECT);


3157   case vmIntrinsics::_checkIndex:     do_NIOCheckIndex(x); break;
3158 
3159   case vmIntrinsics::_compareAndSwapObject:
3160     do_CompareAndSwap(x, objectType);
3161     break;
3162   case vmIntrinsics::_compareAndSwapInt:
3163     do_CompareAndSwap(x, intType);
3164     break;
3165   case vmIntrinsics::_compareAndSwapLong:
3166     do_CompareAndSwap(x, longType);
3167     break;
3168 
3169   case vmIntrinsics::_loadFence :
3170     if (os::is_MP()) __ membar_acquire();
3171     break;
3172   case vmIntrinsics::_storeFence:
3173     if (os::is_MP()) __ membar_release();
3174     break;
3175   case vmIntrinsics::_fullFence :
3176     if (os::is_MP()) __ membar();
3177     break;
3178 
3179   case vmIntrinsics::_getCompiler:
3180     do_getCompiler(x);
3181     break;
3182 
3183   case vmIntrinsics::_Reference_get:
3184     do_Reference_get(x);
3185     break;
3186 
3187   case vmIntrinsics::_updateCRC32:
3188   case vmIntrinsics::_updateBytesCRC32:
3189   case vmIntrinsics::_updateByteBufferCRC32:
3190     do_update_CRC32(x);
3191     break;
3192 
3193   default: ShouldNotReachHere(); break;
3194   }
3195 }
3196 
3197 void LIRGenerator::profile_arguments(ProfileCall* x) {
3198   if (compilation()->profile_arguments()) {
3199     int bci = x->bci_of_invoke();
3200     ciMethodData* md = x->method()->method_data_or_null();


< prev index next >