comparison src/share/vm/c1/c1_Runtime1.cpp @ 3464:be4ca325525a

Merge.
author Thomas Wuerthinger <thomas@wuerthinger.net>
date Wed, 27 Jul 2011 17:32:44 -0700
parents f9c6d9bc4fbc 7ec4bb02d5f0
children bc95d122df79
comparison
equal deleted inserted replaced
3239:7c4b4daac19b 3464:be4ca325525a
1066 if (do_patch) { 1066 if (do_patch) {
1067 // replace instructions 1067 // replace instructions
1068 // first replace the tail, then the call 1068 // first replace the tail, then the call
1069 #ifdef ARM 1069 #ifdef ARM
1070 if(stub_id == Runtime1::load_klass_patching_id && !VM_Version::supports_movw()) { 1070 if(stub_id == Runtime1::load_klass_patching_id && !VM_Version::supports_movw()) {
1071 nmethod* nm = CodeCache::find_nmethod(instr_pc);
1072 oop* oop_addr = NULL;
1073 assert(nm != NULL, "invalid nmethod_pc");
1074 RelocIterator oops(nm, copy_buff, copy_buff + 1);
1075 while (oops.next()) {
1076 if (oops.type() == relocInfo::oop_type) {
1077 oop_Relocation* r = oops.oop_reloc();
1078 oop_addr = r->oop_addr();
1079 break;
1080 }
1081 }
1082 assert(oop_addr != NULL, "oop relocation must exist");
1071 copy_buff -= *byte_count; 1083 copy_buff -= *byte_count;
1072 NativeMovConstReg* n_copy2 = nativeMovConstReg_at(copy_buff); 1084 NativeMovConstReg* n_copy2 = nativeMovConstReg_at(copy_buff);
1073 n_copy2->set_data((intx) (load_klass()), instr_pc); 1085 n_copy2->set_pc_relative_offset((address)oop_addr, instr_pc);
1074 } 1086 }
1075 #endif 1087 #endif
1076 1088
1077 for (int i = NativeCall::instruction_size; i < *byte_count; i++) { 1089 for (int i = NativeCall::instruction_size; i < *byte_count; i++) {
1078 address ptr = copy_buff + i; 1090 address ptr = copy_buff + i;