comparison src/share/vm/c1/c1_CodeStubs.hpp @ 12160:f98f5d48f511

7199175: JSR 292: C1 needs patching when invokedynamic/invokehandle call site is not linked Summary: Do patching rather bailing out for unlinked call with appendix Reviewed-by: twisti, kvn
author roland
date Wed, 21 Aug 2013 13:34:45 +0200
parents 46f6f063b272
children de6a9e811145
comparison
equal deleted inserted replaced
12159:b17d8f6d9ed7 12160:f98f5d48f511
362 class PatchingStub: public CodeStub { 362 class PatchingStub: public CodeStub {
363 public: 363 public:
364 enum PatchID { 364 enum PatchID {
365 access_field_id, 365 access_field_id,
366 load_klass_id, 366 load_klass_id,
367 load_mirror_id 367 load_mirror_id,
368 load_appendix_id
368 }; 369 };
369 enum constants { 370 enum constants {
370 patch_info_size = 3 371 patch_info_size = 3
371 }; 372 };
372 private: 373 private:
415 case lir_patch_normal: field_offset = 0; break; 416 case lir_patch_normal: field_offset = 0; break;
416 default: ShouldNotReachHere(); 417 default: ShouldNotReachHere();
417 } 418 }
418 NativeMovRegMem* n_move = nativeMovRegMem_at(pc_start()); 419 NativeMovRegMem* n_move = nativeMovRegMem_at(pc_start());
419 n_move->set_offset(field_offset); 420 n_move->set_offset(field_offset);
420 } else if (_id == load_klass_id || _id == load_mirror_id) { 421 } else if (_id == load_klass_id || _id == load_mirror_id || _id == load_appendix_id) {
421 assert(_obj != noreg, "must have register object for load_klass/load_mirror"); 422 assert(_obj != noreg, "must have register object for load_klass/load_mirror");
422 #ifdef ASSERT 423 #ifdef ASSERT
423 // verify that we're pointing at a NativeMovConstReg 424 // verify that we're pointing at a NativeMovConstReg
424 nativeMovConstReg_at(pc_start()); 425 nativeMovConstReg_at(pc_start());
425 #endif 426 #endif