379 void InterpreterMacroAssembler::store_ptr(int n, Register val) { |
379 void InterpreterMacroAssembler::store_ptr(int n, Register val) { |
380 movptr(Address(rsp, Interpreter::expr_offset_in_bytes(n)), val); |
380 movptr(Address(rsp, Interpreter::expr_offset_in_bytes(n)), val); |
381 } |
381 } |
382 |
382 |
383 |
383 |
384 void InterpreterMacroAssembler::super_call_VM_leaf(address entry_point) { |
|
385 MacroAssembler::call_VM_leaf_base(entry_point, 0); |
|
386 } |
|
387 |
|
388 |
|
389 void InterpreterMacroAssembler::super_call_VM_leaf(address entry_point, |
|
390 Register arg_1) { |
|
391 if (c_rarg0 != arg_1) { |
|
392 mov(c_rarg0, arg_1); |
|
393 } |
|
394 MacroAssembler::call_VM_leaf_base(entry_point, 1); |
|
395 } |
|
396 |
|
397 |
|
398 void InterpreterMacroAssembler::super_call_VM_leaf(address entry_point, |
|
399 Register arg_1, |
|
400 Register arg_2) { |
|
401 assert(c_rarg0 != arg_2, "smashed argument"); |
|
402 assert(c_rarg1 != arg_1, "smashed argument"); |
|
403 if (c_rarg0 != arg_1) { |
|
404 mov(c_rarg0, arg_1); |
|
405 } |
|
406 if (c_rarg1 != arg_2) { |
|
407 mov(c_rarg1, arg_2); |
|
408 } |
|
409 MacroAssembler::call_VM_leaf_base(entry_point, 2); |
|
410 } |
|
411 |
|
412 void InterpreterMacroAssembler::super_call_VM_leaf(address entry_point, |
|
413 Register arg_1, |
|
414 Register arg_2, |
|
415 Register arg_3) { |
|
416 assert(c_rarg0 != arg_2, "smashed argument"); |
|
417 assert(c_rarg0 != arg_3, "smashed argument"); |
|
418 assert(c_rarg1 != arg_1, "smashed argument"); |
|
419 assert(c_rarg1 != arg_3, "smashed argument"); |
|
420 assert(c_rarg2 != arg_1, "smashed argument"); |
|
421 assert(c_rarg2 != arg_2, "smashed argument"); |
|
422 if (c_rarg0 != arg_1) { |
|
423 mov(c_rarg0, arg_1); |
|
424 } |
|
425 if (c_rarg1 != arg_2) { |
|
426 mov(c_rarg1, arg_2); |
|
427 } |
|
428 if (c_rarg2 != arg_3) { |
|
429 mov(c_rarg2, arg_3); |
|
430 } |
|
431 MacroAssembler::call_VM_leaf_base(entry_point, 3); |
|
432 } |
|
433 |
|
434 void InterpreterMacroAssembler::prepare_to_jump_from_interpreted() { |
384 void InterpreterMacroAssembler::prepare_to_jump_from_interpreted() { |
435 // set sender sp |
385 // set sender sp |
436 lea(r13, Address(rsp, wordSize)); |
386 lea(r13, Address(rsp, wordSize)); |
437 // record last_sp |
387 // record last_sp |
438 movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), r13); |
388 movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), r13); |