comparison src/cpu/ppc/vm/methodHandles_ppc.cpp @ 14684:e5e8aa897002

8035647: PPC64: Support for elf v2 abi. Summary: ELFv2 ABI used by the little endian PowerPC64 on Linux. Reviewed-by: kvn Contributed-by: asmundak@google.com
author goetz
date Thu, 06 Mar 2014 10:55:28 -0800
parents 67fa91961822
children 92aa6797d639 71a71b0bc844
comparison
equal deleted inserted replaced
14682:84eafecdb9a9 14684:e5e8aa897002
451 tty->print_cr("MH %s %s="INTPTR_FORMAT " sp=" INTPTR_FORMAT, 451 tty->print_cr("MH %s %s="INTPTR_FORMAT " sp=" INTPTR_FORMAT,
452 adaptername, mh_reg_name, (intptr_t) mh, entry_sp); 452 adaptername, mh_reg_name, (intptr_t) mh, entry_sp);
453 453
454 if (Verbose) { 454 if (Verbose) {
455 tty->print_cr("Registers:"); 455 tty->print_cr("Registers:");
456 const int abi_offset = frame::abi_112_size / 8; 456 const int abi_offset = frame::abi_reg_args_size / 8;
457 for (int i = R3->encoding(); i <= R12->encoding(); i++) { 457 for (int i = R3->encoding(); i <= R12->encoding(); i++) {
458 Register r = as_Register(i); 458 Register r = as_Register(i);
459 int count = i - R3->encoding(); 459 int count = i - R3->encoding();
460 // The registers are stored in reverse order on the stack (by save_volatile_gprs(R1_SP, abi_112_size)). 460 // The registers are stored in reverse order on the stack (by save_volatile_gprs(R1_SP, abi_reg_args_size)).
461 tty->print("%3s=" PTR_FORMAT, r->name(), saved_regs[abi_offset + count]); 461 tty->print("%3s=" PTR_FORMAT, r->name(), saved_regs[abi_offset + count]);
462 if ((count + 1) % 4 == 0) { 462 if ((count + 1) % 4 == 0) {
463 tty->cr(); 463 tty->cr();
464 } else { 464 } else {
465 tty->print(", "); 465 tty->print(", ");
522 522
523 int nbytes_save = 10 * 8; // 10 volatile gprs 523 int nbytes_save = 10 * 8; // 10 volatile gprs
524 __ save_LR_CR(R0); 524 __ save_LR_CR(R0);
525 __ mr(R0, R1_SP); // saved_sp 525 __ mr(R0, R1_SP); // saved_sp
526 assert(Assembler::is_simm(-nbytes_save, 16), "Overwriting R0"); 526 assert(Assembler::is_simm(-nbytes_save, 16), "Overwriting R0");
527 // push_frame_abi112 only uses R0 if nbytes_save is wider than 16 bit 527 // Push_frame_reg_args only uses R0 if nbytes_save is wider than 16 bit.
528 __ push_frame_abi112(nbytes_save, R0); 528 __ push_frame_reg_args(nbytes_save, R0);
529 __ save_volatile_gprs(R1_SP, frame::abi_112_size); // Except R0. 529 __ save_volatile_gprs(R1_SP, frame::abi_reg_args_size); // Except R0.
530 530
531 __ load_const(R3_ARG1, (address)adaptername); 531 __ load_const(R3_ARG1, (address)adaptername);
532 __ mr(R4_ARG2, R23_method_handle); 532 __ mr(R4_ARG2, R23_method_handle);
533 __ mr(R5_ARG3, R0); // saved_sp 533 __ mr(R5_ARG3, R0); // saved_sp
534 __ mr(R6_ARG4, R1_SP); 534 __ mr(R6_ARG4, R1_SP);