comparison src/cpu/x86/vm/graalRuntime_x86.cpp @ 9592:efb8c1918ea5

replaced create_out_of_bounds_exception assembler stub with compiled stub (GRAAL-81)
author Doug Simon <doug.simon@oracle.com>
date Mon, 06 May 2013 23:43:01 +0200
parents 0381c7937e7a
children a3b4bcc22313
comparison
equal deleted inserted replaced
9591:0381c7937e7a 9592:efb8c1918ea5
573 573
574 restore_fpu(sasm, restore_fpu_registers); 574 restore_fpu(sasm, restore_fpu_registers);
575 __ popa(); 575 __ popa();
576 } 576 }
577 577
578
579 static void restore_live_registers_except_rax(GraalStubAssembler* sasm, bool restore_fpu_registers = true) {
580 __ block_comment("restore_live_registers_except_rax");
581
582 restore_fpu(sasm, restore_fpu_registers);
583
584 #ifdef _LP64
585 __ movptr(r15, Address(rsp, 0));
586 __ movptr(r14, Address(rsp, wordSize));
587 __ movptr(r13, Address(rsp, 2 * wordSize));
588 __ movptr(r12, Address(rsp, 3 * wordSize));
589 __ movptr(r11, Address(rsp, 4 * wordSize));
590 __ movptr(r10, Address(rsp, 5 * wordSize));
591 __ movptr(r9, Address(rsp, 6 * wordSize));
592 __ movptr(r8, Address(rsp, 7 * wordSize));
593 __ movptr(rdi, Address(rsp, 8 * wordSize));
594 __ movptr(rsi, Address(rsp, 9 * wordSize));
595 __ movptr(rbp, Address(rsp, 10 * wordSize));
596 // skip rsp
597 __ movptr(rbx, Address(rsp, 12 * wordSize));
598 __ movptr(rdx, Address(rsp, 13 * wordSize));
599 __ movptr(rcx, Address(rsp, 14 * wordSize));
600
601 __ addptr(rsp, 16 * wordSize);
602 #else
603
604 __ pop(rdi);
605 __ pop(rsi);
606 __ pop(rbp);
607 __ pop(rbx); // skip this value
608 __ pop(rbx);
609 __ pop(rdx);
610 __ pop(rcx);
611 __ addptr(rsp, BytesPerWord);
612 #endif // _LP64
613 }
614
615 OopMapSet* GraalRuntime::generate_code_for(StubID id, GraalStubAssembler* sasm) { 578 OopMapSet* GraalRuntime::generate_code_for(StubID id, GraalStubAssembler* sasm) {
616 579
617 // for better readability 580 // for better readability
618 const bool must_gc_arguments = true; 581 const bool must_gc_arguments = true;
619 const bool dont_gc_arguments = false; 582 const bool dont_gc_arguments = false;
622 bool save_fpu_registers = true; 585 bool save_fpu_registers = true;
623 586
624 // stub code & info for the different stubs 587 // stub code & info for the different stubs
625 OopMapSet* oop_maps = NULL; 588 OopMapSet* oop_maps = NULL;
626 switch (id) { 589 switch (id) {
627
628 case create_out_of_bounds_exception_id: {
629 __ enter();
630 oop_maps = new OopMapSet();
631 OopMap* oop_map = save_live_registers(sasm, 1);
632 int call_offset = __ call_RT(rax, noreg, (address)create_out_of_bounds_exception, j_rarg0);
633 oop_maps->add_gc_map(call_offset, oop_map);
634 restore_live_registers_except_rax(sasm);
635 __ leave();
636 __ ret(0);
637 break;
638 }
639 590
640 case vm_error_id: { 591 case vm_error_id: {
641 __ enter(); 592 __ enter();
642 oop_maps = new OopMapSet(); 593 oop_maps = new OopMapSet();
643 OopMap* oop_map = save_live_registers(sasm, 3); 594 OopMap* oop_map = save_live_registers(sasm, 3);