< prev index next >

src/hotspot/share/c1/c1_LIRGenerator.cpp

Print this page
rev 50307 : [mq]: cont


3051     break;
3052   case vmIntrinsics::_Reference_get:
3053     do_Reference_get(x);
3054     break;
3055 
3056   case vmIntrinsics::_updateCRC32:
3057   case vmIntrinsics::_updateBytesCRC32:
3058   case vmIntrinsics::_updateByteBufferCRC32:
3059     do_update_CRC32(x);
3060     break;
3061 
3062   case vmIntrinsics::_updateBytesCRC32C:
3063   case vmIntrinsics::_updateDirectByteBufferCRC32C:
3064     do_update_CRC32C(x);
3065     break;
3066 
3067   case vmIntrinsics::_vectorizedMismatch:
3068     do_vectorizedMismatch(x);
3069     break;
3070 



















3071   default: ShouldNotReachHere(); break;
3072   }
3073 }
3074 





3075 void LIRGenerator::profile_arguments(ProfileCall* x) {
3076   if (compilation()->profile_arguments()) {
3077     int bci = x->bci_of_invoke();
3078     ciMethodData* md = x->method()->method_data_or_null();
3079     ciProfileData* data = md->bci_to_data(bci);
3080     if (data != NULL) {
3081       if ((data->is_CallTypeData() && data->as_CallTypeData()->has_arguments()) ||
3082           (data->is_VirtualCallTypeData() && data->as_VirtualCallTypeData()->has_arguments())) {
3083         ByteSize extra = data->is_CallTypeData() ? CallTypeData::args_data_offset() : VirtualCallTypeData::args_data_offset();
3084         int base_offset = md->byte_offset_of_slot(data, extra);
3085         LIR_Opr mdp = LIR_OprFact::illegalOpr;
3086         ciTypeStackSlotEntries* args = data->is_CallTypeData() ? ((ciCallTypeData*)data)->args() : ((ciVirtualCallTypeData*)data)->args();
3087 
3088         Bytecodes::Code bc = x->method()->java_code_at_bci(bci);
3089         int start = 0;
3090         int stop = data->is_CallTypeData() ? ((ciCallTypeData*)data)->number_of_arguments() : ((ciVirtualCallTypeData*)data)->number_of_arguments();
3091         if (x->callee()->is_loaded() && x->callee()->is_static() && Bytecodes::has_receiver(bc)) {
3092           // first argument is not profiled at call (method handle invoke)
3093           assert(x->method()->raw_code_at_bci(bci) == Bytecodes::_invokehandle, "invokehandle expected");
3094           start = 1;




3051     break;
3052   case vmIntrinsics::_Reference_get:
3053     do_Reference_get(x);
3054     break;
3055 
3056   case vmIntrinsics::_updateCRC32:
3057   case vmIntrinsics::_updateBytesCRC32:
3058   case vmIntrinsics::_updateByteBufferCRC32:
3059     do_update_CRC32(x);
3060     break;
3061 
3062   case vmIntrinsics::_updateBytesCRC32C:
3063   case vmIntrinsics::_updateDirectByteBufferCRC32C:
3064     do_update_CRC32C(x);
3065     break;
3066 
3067   case vmIntrinsics::_vectorizedMismatch:
3068     do_vectorizedMismatch(x);
3069     break;
3070 
3071   case vmIntrinsics::_Continuation_getFP:
3072     do_continuation_getFP(x);
3073     break;
3074   case vmIntrinsics::_Continuation_getSP:
3075     do_continuation_getSP(x);
3076     break;
3077   case vmIntrinsics::_Continuation_getPC:
3078     do_continuation_getPC(x);
3079     break;
3080   case vmIntrinsics::_Continuation_doContinue:
3081     do_continuation_doContinue(x);
3082     break;
3083   case vmIntrinsics::_Continuation_doYield:
3084     do_continuation_doYield(x);
3085     break;
3086   case vmIntrinsics::_Continuation_runLevel:
3087     do_continuation_runLevel(x);
3088     break;
3089 
3090   default: ShouldNotReachHere(); break;
3091   }
3092 }
3093 
3094 void LIRGenerator::do_continuation_runLevel(Intrinsic* x) {
3095   LIR_Opr result = rlock_result(x);
3096   __ move(LIR_OprFact::intConst(1), result);
3097 }
3098 
3099 void LIRGenerator::profile_arguments(ProfileCall* x) {
3100   if (compilation()->profile_arguments()) {
3101     int bci = x->bci_of_invoke();
3102     ciMethodData* md = x->method()->method_data_or_null();
3103     ciProfileData* data = md->bci_to_data(bci);
3104     if (data != NULL) {
3105       if ((data->is_CallTypeData() && data->as_CallTypeData()->has_arguments()) ||
3106           (data->is_VirtualCallTypeData() && data->as_VirtualCallTypeData()->has_arguments())) {
3107         ByteSize extra = data->is_CallTypeData() ? CallTypeData::args_data_offset() : VirtualCallTypeData::args_data_offset();
3108         int base_offset = md->byte_offset_of_slot(data, extra);
3109         LIR_Opr mdp = LIR_OprFact::illegalOpr;
3110         ciTypeStackSlotEntries* args = data->is_CallTypeData() ? ((ciCallTypeData*)data)->args() : ((ciVirtualCallTypeData*)data)->args();
3111 
3112         Bytecodes::Code bc = x->method()->java_code_at_bci(bci);
3113         int start = 0;
3114         int stop = data->is_CallTypeData() ? ((ciCallTypeData*)data)->number_of_arguments() : ((ciVirtualCallTypeData*)data)->number_of_arguments();
3115         if (x->callee()->is_loaded() && x->callee()->is_static() && Bytecodes::has_receiver(bc)) {
3116           // first argument is not profiled at call (method handle invoke)
3117           assert(x->method()->raw_code_at_bci(bci) == Bytecodes::_invokehandle, "invokehandle expected");
3118           start = 1;


< prev index next >