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;
|