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