src/cpu/x86/vm/interp_masm_x86_64.cpp

changeset 2868
2e038ad0c1d0
parent 2698
38fea01eb669
child 3005
341a57af9b0a
equal deleted inserted replaced
2867:49d67a090fe2 2868:2e038ad0c1d0
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);

mercurial