173 174 assert(frame::interpreter_frame_monitor_size() == BasicObjectLock::size(), "adjust code below"); 175 int monitor_offset = (method()->max_locals() + 2 * (number_of_locks - 1)) * BytesPerWord; 176 for (int i = 0; i < number_of_locks; i++) { 177 int slot_offset = monitor_offset - (i * 2 * BytesPerWord); 178 __ ldr(R1, Address(OSR_buf, slot_offset + 0*BytesPerWord)); 179 __ ldr(R2, Address(OSR_buf, slot_offset + 1*BytesPerWord)); 180 __ str(R1, frame_map()->address_for_monitor_lock(i)); 181 __ str(R2, frame_map()->address_for_monitor_object(i)); 182 } 183 } 184 185 186 int LIR_Assembler::check_icache() { 187 Register receiver = LIR_Assembler::receiverOpr()->as_register(); 188 int offset = __ offset(); 189 __ inline_cache_check(receiver, Ricklass); 190 return offset; 191 } 192 193 194 void LIR_Assembler::jobject2reg_with_patching(Register reg, CodeEmitInfo* info) { 195 jobject o = (jobject)Universe::non_oop_word(); 196 int index = __ oop_recorder()->allocate_oop_index(o); 197 198 PatchingStub* patch = new PatchingStub(_masm, patching_id(info), index); 199 200 __ patchable_mov_oop(reg, o, index); 201 patching_epilog(patch, lir_patch_normal, reg, info); 202 } 203 204 205 void LIR_Assembler::klass2reg_with_patching(Register reg, CodeEmitInfo* info) { 206 Metadata* o = (Metadata*)Universe::non_oop_word(); 207 int index = __ oop_recorder()->allocate_metadata_index(o); 208 PatchingStub* patch = new PatchingStub(_masm, PatchingStub::load_klass_id, index); 209 210 __ patchable_mov_metadata(reg, o, index); 211 patching_epilog(patch, lir_patch_normal, reg, info); 212 } | 173 174 assert(frame::interpreter_frame_monitor_size() == BasicObjectLock::size(), "adjust code below"); 175 int monitor_offset = (method()->max_locals() + 2 * (number_of_locks - 1)) * BytesPerWord; 176 for (int i = 0; i < number_of_locks; i++) { 177 int slot_offset = monitor_offset - (i * 2 * BytesPerWord); 178 __ ldr(R1, Address(OSR_buf, slot_offset + 0*BytesPerWord)); 179 __ ldr(R2, Address(OSR_buf, slot_offset + 1*BytesPerWord)); 180 __ str(R1, frame_map()->address_for_monitor_lock(i)); 181 __ str(R2, frame_map()->address_for_monitor_object(i)); 182 } 183 } 184 185 186 int LIR_Assembler::check_icache() { 187 Register receiver = LIR_Assembler::receiverOpr()->as_register(); 188 int offset = __ offset(); 189 __ inline_cache_check(receiver, Ricklass); 190 return offset; 191 } 192 193 void LIR_Assembler::clinit_barrier(ciMethod* method) { 194 ShouldNotReachHere(); // not implemented 195 } 196 197 void LIR_Assembler::jobject2reg_with_patching(Register reg, CodeEmitInfo* info) { 198 jobject o = (jobject)Universe::non_oop_word(); 199 int index = __ oop_recorder()->allocate_oop_index(o); 200 201 PatchingStub* patch = new PatchingStub(_masm, patching_id(info), index); 202 203 __ patchable_mov_oop(reg, o, index); 204 patching_epilog(patch, lir_patch_normal, reg, info); 205 } 206 207 208 void LIR_Assembler::klass2reg_with_patching(Register reg, CodeEmitInfo* info) { 209 Metadata* o = (Metadata*)Universe::non_oop_word(); 210 int index = __ oop_recorder()->allocate_metadata_index(o); 211 PatchingStub* patch = new PatchingStub(_masm, PatchingStub::load_klass_id, index); 212 213 __ patchable_mov_metadata(reg, o, index); 214 patching_epilog(patch, lir_patch_normal, reg, info); 215 } |