equal
deleted
inserted
replaced
932 address ShenandoahBarrierSetAssembler::generate_shenandoah_lrb(StubCodeGenerator* cgen) { |
932 address ShenandoahBarrierSetAssembler::generate_shenandoah_lrb(StubCodeGenerator* cgen) { |
933 __ align(CodeEntryAlignment); |
933 __ align(CodeEntryAlignment); |
934 StubCodeMark mark(cgen, "StubRoutines", "shenandoah_lrb"); |
934 StubCodeMark mark(cgen, "StubRoutines", "shenandoah_lrb"); |
935 address start = __ pc(); |
935 address start = __ pc(); |
936 |
936 |
937 Label resolve_oop, slow_path, done; |
937 Label resolve_oop, slow_path; |
938 |
938 |
939 // We use RDI, which also serves as argument register for slow call. |
939 // We use RDI, which also serves as argument register for slow call. |
940 // RAX always holds the src object ptr, except after the slow call, |
940 // RAX always holds the src object ptr, except after the slow call, |
941 // then it holds the result. R8/RBX is used as temporary register. |
941 // then it holds the result. R8/RBX is used as temporary register. |
942 |
942 |
969 __ orptr(tmp2, markWord::marked_value); |
969 __ orptr(tmp2, markWord::marked_value); |
970 __ notptr(tmp2); |
970 __ notptr(tmp2); |
971 // At this point, tmp2 contains the decoded forwarding pointer. |
971 // At this point, tmp2 contains the decoded forwarding pointer. |
972 __ mov(rax, tmp2); |
972 __ mov(rax, tmp2); |
973 |
973 |
974 __ bind(done); |
|
975 __ pop(tmp2); |
974 __ pop(tmp2); |
976 __ pop(tmp1); |
975 __ pop(tmp1); |
977 __ ret(0); |
976 __ ret(0); |
978 |
977 |
979 __ bind(slow_path); |
978 __ bind(slow_path); |
990 __ push(r12); |
989 __ push(r12); |
991 __ push(r13); |
990 __ push(r13); |
992 __ push(r14); |
991 __ push(r14); |
993 __ push(r15); |
992 __ push(r15); |
994 #endif |
993 #endif |
995 |
994 __ push(rbp); |
|
995 __ movptr(rbp, rsp); |
|
996 __ andptr(rsp, -StackAlignmentInBytes); |
|
997 __ push_FPU_state(); |
996 __ call_VM_leaf(CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier), rax); |
998 __ call_VM_leaf(CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier), rax); |
997 |
999 __ pop_FPU_state(); |
|
1000 __ movptr(rsp, rbp); |
|
1001 __ pop(rbp); |
998 #ifdef _LP64 |
1002 #ifdef _LP64 |
999 __ pop(r15); |
1003 __ pop(r15); |
1000 __ pop(r14); |
1004 __ pop(r14); |
1001 __ pop(r13); |
1005 __ pop(r13); |
1002 __ pop(r12); |
1006 __ pop(r12); |