306 void Runtime1::initialize_pd() {
307 int i;
308 int sp_offset = 0;
309
310 // all float registers are saved explicitly
311 assert(FrameMap::nof_fpu_regs == 32, "double registers not handled here");
312 for (i = 0; i < FrameMap::nof_fpu_regs; i++) {
313 fpu_reg_save_offsets[i] = sp_offset;
314 sp_offset += 2; // SP offsets are in halfwords
315 }
316
317 for (i = 0; i < FrameMap::nof_cpu_regs; i++) {
318 Register r = as_Register(i);
319 cpu_reg_save_offsets[i] = sp_offset;
320 sp_offset += 2; // SP offsets are in halfwords
321 }
322 }
323
324
325 // target: the entry point of the method that creates and posts the exception oop
326 // has_argument: true if the exception needs an argument (passed in rscratch1)
327
328 OopMapSet* Runtime1::generate_exception_throw(StubAssembler* sasm, address target, bool has_argument) {
329 // make a frame and preserve the caller's caller-save registers
330 OopMap* oop_map = save_live_registers(sasm);
331 int call_offset;
332 if (!has_argument) {
333 call_offset = __ call_RT(noreg, noreg, target);
334 } else {
335 call_offset = __ call_RT(noreg, noreg, target, rscratch1);
336 }
337 OopMapSet* oop_maps = new OopMapSet();
338 oop_maps->add_gc_map(call_offset, oop_map);
339
340 __ should_not_reach_here();
341 return oop_maps;
342 }
343
344
345 OopMapSet* Runtime1::generate_handle_exception(StubID id, StubAssembler *sasm) {
346 __ block_comment("generate_handle_exception");
347
348 // incoming parameters
349 const Register exception_oop = r0;
350 const Register exception_pc = r3;
351 // other registers used in this stub
352
353 // Save registers, if required.
354 OopMapSet* oop_maps = new OopMapSet();
355 OopMap* oop_map = NULL;
|
306 void Runtime1::initialize_pd() {
307 int i;
308 int sp_offset = 0;
309
310 // all float registers are saved explicitly
311 assert(FrameMap::nof_fpu_regs == 32, "double registers not handled here");
312 for (i = 0; i < FrameMap::nof_fpu_regs; i++) {
313 fpu_reg_save_offsets[i] = sp_offset;
314 sp_offset += 2; // SP offsets are in halfwords
315 }
316
317 for (i = 0; i < FrameMap::nof_cpu_regs; i++) {
318 Register r = as_Register(i);
319 cpu_reg_save_offsets[i] = sp_offset;
320 sp_offset += 2; // SP offsets are in halfwords
321 }
322 }
323
324
325 // target: the entry point of the method that creates and posts the exception oop
326 // has_argument: true if the exception needs arguments (passed in r22 and r23)
327
328 OopMapSet* Runtime1::generate_exception_throw(StubAssembler* sasm, address target, bool has_argument) {
329 // make a frame and preserve the caller's caller-save registers
330 OopMap* oop_map = save_live_registers(sasm);
331 int call_offset;
332 if (!has_argument) {
333 call_offset = __ call_RT(noreg, noreg, target);
334 } else {
335 call_offset = __ call_RT(noreg, noreg, target, r22, r23);
336 }
337 OopMapSet* oop_maps = new OopMapSet();
338 oop_maps->add_gc_map(call_offset, oop_map);
339
340 __ should_not_reach_here();
341 return oop_maps;
342 }
343
344
345 OopMapSet* Runtime1::generate_handle_exception(StubID id, StubAssembler *sasm) {
346 __ block_comment("generate_handle_exception");
347
348 // incoming parameters
349 const Register exception_oop = r0;
350 const Register exception_pc = r3;
351 // other registers used in this stub
352
353 // Save registers, if required.
354 OopMapSet* oop_maps = new OopMapSet();
355 OopMap* oop_map = NULL;
|