Mercurial > hg > graal-compiler
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); |