Mercurial > hg > graal-jvmci-8
comparison src/cpu/x86/vm/graalRuntime_x86.cpp @ 9595:db2125285960
replaced wb_pre_call and wb_post_call assembler stubs with compiled stubs (GRAAL-81)
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Tue, 07 May 2013 01:53:01 +0200 |
parents | 743326387173 |
children |
comparison
equal
deleted
inserted
replaced
9594:743326387173 | 9595:db2125285960 |
---|---|
415 return map; | 415 return map; |
416 } | 416 } |
417 | 417 |
418 #define __ sasm-> | 418 #define __ sasm-> |
419 | 419 |
420 static OopMap* save_live_registers(GraalStubAssembler* sasm, int num_rt_args, | 420 OopMap* save_live_registers(GraalStubAssembler* sasm, int num_rt_args, |
421 bool save_fpu_registers = true) { | 421 bool save_fpu_registers = true) { |
422 __ block_comment("save_live_registers"); | 422 __ block_comment("save_live_registers"); |
423 | 423 |
424 __ pusha(); // integer registers | 424 __ pusha(); // integer registers |
425 | 425 |
586 | 586 |
587 // stub code & info for the different stubs | 587 // stub code & info for the different stubs |
588 OopMapSet* oop_maps = NULL; | 588 OopMapSet* oop_maps = NULL; |
589 switch (id) { | 589 switch (id) { |
590 | 590 |
591 case wb_pre_call_id: { | |
592 Register obj = j_rarg0; | |
593 { | |
594 GraalStubFrame f(sasm, "graal_wb_pre_call", dont_gc_arguments); | |
595 OopMap* map = save_live_registers(sasm, 2, save_fpu_registers); | |
596 | |
597 // note: really a leaf routine but must setup last java sp | |
598 // => use call_RT for now (speed can be improved by | |
599 // doing last java sp setup manually) | |
600 int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, wb_pre_call), obj); | |
601 | |
602 oop_maps = new OopMapSet(); | |
603 oop_maps->add_gc_map(call_offset, map); | |
604 restore_live_registers(sasm); | |
605 } | |
606 __ ret(0); | |
607 break; | |
608 } | |
609 case wb_post_call_id: { | |
610 Register obj = j_rarg0; | |
611 Register caddr = j_rarg1; | |
612 { | |
613 GraalStubFrame f(sasm, "graal_wb_post_call", dont_gc_arguments); | |
614 OopMap* map = save_live_registers(sasm, 2, save_fpu_registers); | |
615 | |
616 // note: really a leaf routine but must setup last java sp | |
617 // => use call_RT for now (speed can be improved by | |
618 // doing last java sp setup manually) | |
619 int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, wb_post_call), obj, caddr); | |
620 | |
621 oop_maps = new OopMapSet(); | |
622 oop_maps->add_gc_map(call_offset, map); | |
623 restore_live_registers(sasm); | |
624 } | |
625 __ ret(0); | |
626 break; | |
627 } | |
628 | |
629 default: | 591 default: |
630 { GraalStubFrame f(sasm, "unimplemented entry", dont_gc_arguments); | 592 { GraalStubFrame f(sasm, "unimplemented entry", dont_gc_arguments); |
631 __ movptr(rax, (int)id); | 593 __ movptr(rax, (int)id); |
632 __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, unimplemented_entry), rax); | 594 __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, unimplemented_entry), rax); |
633 __ should_not_reach_here(); | 595 __ should_not_reach_here(); |