456 // only a float use just part of the slot
457 __ strs(r_1->as_FloatRegister(), Address(sp, st_off));
458 } else {
459 #ifdef ASSERT
460 // Overwrite the unused slot with known junk
461 __ mov(rscratch1, 0xdeadffffdeadaaacul);
462 __ str(rscratch1, Address(sp, st_off));
463 #endif /* ASSERT */
464 __ strd(r_1->as_FloatRegister(), Address(sp, next_off));
465 }
466 }
467 }
468
469 __ mov(esp, sp); // Interp expects args on caller's expression stack
470
471 __ ldr(rscratch1, Address(rmethod, in_bytes(Method::interpreter_entry_offset())));
472 __ br(rscratch1);
473 }
474
475
476 static void gen_i2c_adapter(MacroAssembler *masm,
477 int total_args_passed,
478 int comp_args_on_stack,
479 const BasicType *sig_bt,
480 const VMRegPair *regs) {
481
482 // Note: r13 contains the senderSP on entry. We must preserve it since
483 // we may do a i2c -> c2i transition if we lose a race where compiled
484 // code goes non-entrant while we get args ready.
485
486 // In addition we use r13 to locate all the interpreter args because
487 // we must align the stack to 16 bytes.
488
489 // Adapters are frameless.
490
491 // An i2c adapter is frameless because the *caller* frame, which is
492 // interpreted, routinely repairs its own esp (from
493 // interpreter_frame_last_sp), even if a callee has modified the
494 // stack pointer. It also recalculates and aligns sp.
495
496 // A c2i adapter is frameless because the *callee* frame, which is
|
456 // only a float use just part of the slot
457 __ strs(r_1->as_FloatRegister(), Address(sp, st_off));
458 } else {
459 #ifdef ASSERT
460 // Overwrite the unused slot with known junk
461 __ mov(rscratch1, 0xdeadffffdeadaaacul);
462 __ str(rscratch1, Address(sp, st_off));
463 #endif /* ASSERT */
464 __ strd(r_1->as_FloatRegister(), Address(sp, next_off));
465 }
466 }
467 }
468
469 __ mov(esp, sp); // Interp expects args on caller's expression stack
470
471 __ ldr(rscratch1, Address(rmethod, in_bytes(Method::interpreter_entry_offset())));
472 __ br(rscratch1);
473 }
474
475
476 void SharedRuntime::gen_i2c_adapter(MacroAssembler *masm,
477 int total_args_passed,
478 int comp_args_on_stack,
479 const BasicType *sig_bt,
480 const VMRegPair *regs) {
481
482 // Note: r13 contains the senderSP on entry. We must preserve it since
483 // we may do a i2c -> c2i transition if we lose a race where compiled
484 // code goes non-entrant while we get args ready.
485
486 // In addition we use r13 to locate all the interpreter args because
487 // we must align the stack to 16 bytes.
488
489 // Adapters are frameless.
490
491 // An i2c adapter is frameless because the *caller* frame, which is
492 // interpreted, routinely repairs its own esp (from
493 // interpreter_frame_last_sp), even if a callee has modified the
494 // stack pointer. It also recalculates and aligns sp.
495
496 // A c2i adapter is frameless because the *callee* frame, which is
|