366 case stos: // fall through 367 case itos: push_i(rax); break; 368 case ltos: push_l(rax, rdx); break; 369 case ftos: push_f(); break; 370 case dtos: push_d(rax); break; 371 case vtos: /* nothing to do */ break; 372 default : ShouldNotReachHere(); 373 } 374 } 375 376 377 // Helpers for swap and dup 378 void InterpreterMacroAssembler::load_ptr(int n, Register val) { 379 movptr(val, Address(rsp, Interpreter::expr_offset_in_bytes(n))); 380 } 381 382 void InterpreterMacroAssembler::store_ptr(int n, Register val) { 383 movptr(Address(rsp, Interpreter::expr_offset_in_bytes(n)), val); 384 } 385 386 void InterpreterMacroAssembler::super_call_VM_leaf(address entry_point) { 387 MacroAssembler::call_VM_leaf_base(entry_point, 0); 388 } 389 390 391 void InterpreterMacroAssembler::super_call_VM_leaf(address entry_point, Register arg_1) { 392 push(arg_1); 393 MacroAssembler::call_VM_leaf_base(entry_point, 1); 394 } 395 396 397 void InterpreterMacroAssembler::super_call_VM_leaf(address entry_point, Register arg_1, Register arg_2) { 398 push(arg_2); 399 push(arg_1); 400 MacroAssembler::call_VM_leaf_base(entry_point, 2); 401 } 402 403 404 void InterpreterMacroAssembler::super_call_VM_leaf(address entry_point, Register arg_1, Register arg_2, Register arg_3) { 405 push(arg_3); 406 push(arg_2); 407 push(arg_1); 408 MacroAssembler::call_VM_leaf_base(entry_point, 3); 409 } 410 411 412 void InterpreterMacroAssembler::prepare_to_jump_from_interpreted() { 413 // set sender sp 414 lea(rsi, Address(rsp, wordSize)); 415 // record last_sp 416 movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), rsi); 417 } 418 419 420 // Jump to from_interpreted entry of a call unless single stepping is possible 421 // in this thread in which case we must call the i2i entry 422 void InterpreterMacroAssembler::jump_from_interpreted(Register method, Register temp) { 423 prepare_to_jump_from_interpreted(); 424 425 if (JvmtiExport::can_post_interpreter_events()) { 426 Label run_compiled_code; 427 // JVMTI events, such as single-stepping, are implemented partly by avoiding running 428 // compiled code in threads for which the event is enabled. Check here for 429 // interp_only_mode if these events CAN be enabled. 430 get_thread(temp); 431 // interp_only is an int, on little endian it is sufficient to test the byte only | 366 case stos: // fall through 367 case itos: push_i(rax); break; 368 case ltos: push_l(rax, rdx); break; 369 case ftos: push_f(); break; 370 case dtos: push_d(rax); break; 371 case vtos: /* nothing to do */ break; 372 default : ShouldNotReachHere(); 373 } 374 } 375 376 377 // Helpers for swap and dup 378 void InterpreterMacroAssembler::load_ptr(int n, Register val) { 379 movptr(val, Address(rsp, Interpreter::expr_offset_in_bytes(n))); 380 } 381 382 void InterpreterMacroAssembler::store_ptr(int n, Register val) { 383 movptr(Address(rsp, Interpreter::expr_offset_in_bytes(n)), val); 384 } 385 386 void InterpreterMacroAssembler::prepare_to_jump_from_interpreted() { 387 // set sender sp 388 lea(rsi, Address(rsp, wordSize)); 389 // record last_sp 390 movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), rsi); 391 } 392 393 394 // Jump to from_interpreted entry of a call unless single stepping is possible 395 // in this thread in which case we must call the i2i entry 396 void InterpreterMacroAssembler::jump_from_interpreted(Register method, Register temp) { 397 prepare_to_jump_from_interpreted(); 398 399 if (JvmtiExport::can_post_interpreter_events()) { 400 Label run_compiled_code; 401 // JVMTI events, such as single-stepping, are implemented partly by avoiding running 402 // compiled code in threads for which the event is enabled. Check here for 403 // interp_only_mode if these events CAN be enabled. 404 get_thread(temp); 405 // interp_only is an int, on little endian it is sufficient to test the byte only |