349 #ifndef AARCH64
350 static void restore_live_registers_except_FP_LR(StubAssembler* sasm, bool restore_fpu_registers = HaveVFP) {
351 restore_live_registers(sasm, true, false, false, restore_fpu_registers);
352 }
353 #endif // !AARCH64
354
355 static void restore_live_registers_without_return(StubAssembler* sasm, bool restore_fpu_registers = HaveVFP) {
356 restore_live_registers(sasm, true, true, false, restore_fpu_registers);
357 }
358
359
360 void Runtime1::initialize_pd() {
361 }
362
363
364 OopMapSet* Runtime1::generate_exception_throw(StubAssembler* sasm, address target, bool has_argument) {
365 OopMap* oop_map = save_live_registers(sasm);
366
367 if (has_argument) {
368 __ ldr(R1, Address(SP, arg1_offset));
369 }
370
371 int call_offset = __ call_RT(noreg, noreg, target);
372 OopMapSet* oop_maps = new OopMapSet();
373 oop_maps->add_gc_map(call_offset, oop_map);
374
375 DEBUG_ONLY(STOP("generate_exception_throw");) // Should not reach here
376 return oop_maps;
377 }
378
379
380 static void restore_sp_for_method_handle(StubAssembler* sasm) {
381 // Restore SP from its saved reg (FP) if the exception PC is a MethodHandle call site.
382 __ ldr_s32(Rtemp, Address(Rthread, JavaThread::is_method_handle_return_offset()));
383 #ifdef AARCH64
384 Label skip;
385 __ cbz(Rtemp, skip);
386 __ mov(SP, Rmh_SP_save);
387 __ bind(skip);
388 #else
|
349 #ifndef AARCH64
350 static void restore_live_registers_except_FP_LR(StubAssembler* sasm, bool restore_fpu_registers = HaveVFP) {
351 restore_live_registers(sasm, true, false, false, restore_fpu_registers);
352 }
353 #endif // !AARCH64
354
355 static void restore_live_registers_without_return(StubAssembler* sasm, bool restore_fpu_registers = HaveVFP) {
356 restore_live_registers(sasm, true, true, false, restore_fpu_registers);
357 }
358
359
360 void Runtime1::initialize_pd() {
361 }
362
363
364 OopMapSet* Runtime1::generate_exception_throw(StubAssembler* sasm, address target, bool has_argument) {
365 OopMap* oop_map = save_live_registers(sasm);
366
367 if (has_argument) {
368 __ ldr(R1, Address(SP, arg1_offset));
369 __ ldr(R2, Address(SP, arg2_offset));
370 }
371
372 int call_offset = __ call_RT(noreg, noreg, target);
373 OopMapSet* oop_maps = new OopMapSet();
374 oop_maps->add_gc_map(call_offset, oop_map);
375
376 DEBUG_ONLY(STOP("generate_exception_throw");) // Should not reach here
377 return oop_maps;
378 }
379
380
381 static void restore_sp_for_method_handle(StubAssembler* sasm) {
382 // Restore SP from its saved reg (FP) if the exception PC is a MethodHandle call site.
383 __ ldr_s32(Rtemp, Address(Rthread, JavaThread::is_method_handle_return_offset()));
384 #ifdef AARCH64
385 Label skip;
386 __ cbz(Rtemp, skip);
387 __ mov(SP, Rmh_SP_save);
388 __ bind(skip);
389 #else
|