src/cpu/mips/vm/c1_Runtime1_mips.cpp

changeset 9228
617b86d17edb
parent 9207
874b8588c4ae
child 9248
610b27224729
equal deleted inserted replaced
9227:f1560009a081 9228:617b86d17edb
117 bind(L); 117 bind(L);
118 } 118 }
119 super_pop(V0); 119 super_pop(V0);
120 #endif 120 #endif
121 // discard thread and arguments 121 // discard thread and arguments
122 ld_ptr(SP, thread, in_bytes(JavaThread::last_Java_sp_offset())); //by yyq 122 ld_ptr(SP, thread, in_bytes(JavaThread::last_Java_sp_offset()));
123 reset_last_Java_frame(thread, true); 123 reset_last_Java_frame(thread, true);
124 // check for pending exceptions 124 // check for pending exceptions
125 { 125 {
126 Label L; 126 Label L;
127 ld_ptr(AT, thread, in_bytes(Thread::pending_exception_offset())); 127 ld_ptr(AT, thread, in_bytes(Thread::pending_exception_offset()));
327 // have to save the FPU registers twice if we describe them and on P4 327 // have to save the FPU registers twice if we describe them and on P4
328 // saving FPU registers which don't contain anything appears 328 // saving FPU registers which don't contain anything appears
329 // expensive. The deopt blob is the only thing which needs to 329 // expensive. The deopt blob is the only thing which needs to
330 // describe FPU registers. In all other cases it should be sufficient 330 // describe FPU registers. In all other cases it should be sufficient
331 // to simply save their current value. 331 // to simply save their current value.
332 //FIXME, I have no idea which register should be saved . @jerome
333 static OopMap* generate_oop_map(StubAssembler* sasm, int num_rt_args, 332 static OopMap* generate_oop_map(StubAssembler* sasm, int num_rt_args,
334 bool save_fpu_registers = true, bool describe_fpu_registers = false) { 333 bool save_fpu_registers = true, bool describe_fpu_registers = false) {
335 334
336 LP64_ONLY(num_rt_args = 0); 335 LP64_ONLY(num_rt_args = 0);
337 LP64_ONLY(assert((reg_save_frame_size * VMRegImpl::stack_slot_size) % 16 == 0, "must be 16 byte aligned");) 336 LP64_ONLY(assert((reg_save_frame_size * VMRegImpl::stack_slot_size) % 16 == 0, "must be 16 byte aligned");)
411 map->set_callee_saved(VMRegImpl::stack2reg(A3H_off + num_rt_args), A3->as_VMReg()->next()); 410 map->set_callee_saved(VMRegImpl::stack2reg(A3H_off + num_rt_args), A3->as_VMReg()->next());
412 #endif 411 #endif
413 return map; 412 return map;
414 } 413 }
415 414
416 //FIXME, Is it enough to save this registers by yyq
417 static OopMap* save_live_registers(StubAssembler* sasm, int num_rt_args, 415 static OopMap* save_live_registers(StubAssembler* sasm, int num_rt_args,
418 bool save_fpu_registers = true, 416 bool save_fpu_registers = true,
419 bool describe_fpu_registers = false) { 417 bool describe_fpu_registers = false) {
420 //const int reg_save_frame_size = return_off + 1 + num_rt_args; 418 //const int reg_save_frame_size = return_off + 1 + num_rt_args;
421 __ block_comment("save_live_registers"); 419 __ block_comment("save_live_registers");

mercurial