3620 } |
3620 } |
3621 |
3621 |
3622 |
3622 |
3623 void MacroAssembler::encode_heap_oop(Register src, Register dst) { |
3623 void MacroAssembler::encode_heap_oop(Register src, Register dst) { |
3624 assert (UseCompressedOops, "must be compressed"); |
3624 assert (UseCompressedOops, "must be compressed"); |
|
3625 verify_oop(src); |
3625 Label done; |
3626 Label done; |
3626 if (src == dst) { |
3627 if (src == dst) { |
3627 // optimize for frequent case src == dst |
3628 // optimize for frequent case src == dst |
3628 bpr(rc_nz, true, Assembler::pt, src, done); |
3629 bpr(rc_nz, true, Assembler::pt, src, done); |
3629 delayed() -> sub(src, G6_heapbase, dst); // annuled if not taken |
3630 delayed() -> sub(src, G6_heapbase, dst); // annuled if not taken |
3641 } |
3642 } |
3642 |
3643 |
3643 |
3644 |
3644 void MacroAssembler::encode_heap_oop_not_null(Register r) { |
3645 void MacroAssembler::encode_heap_oop_not_null(Register r) { |
3645 assert (UseCompressedOops, "must be compressed"); |
3646 assert (UseCompressedOops, "must be compressed"); |
|
3647 verify_oop(r); |
3646 sub(r, G6_heapbase, r); |
3648 sub(r, G6_heapbase, r); |
3647 srlx(r, LogMinObjAlignmentInBytes, r); |
3649 srlx(r, LogMinObjAlignmentInBytes, r); |
3648 } |
3650 } |
3649 |
3651 |
3650 void MacroAssembler::encode_heap_oop_not_null(Register src, Register dst) { |
3652 void MacroAssembler::encode_heap_oop_not_null(Register src, Register dst) { |
3651 assert (UseCompressedOops, "must be compressed"); |
3653 assert (UseCompressedOops, "must be compressed"); |
|
3654 verify_oop(src); |
3652 sub(src, G6_heapbase, dst); |
3655 sub(src, G6_heapbase, dst); |
3653 srlx(dst, LogMinObjAlignmentInBytes, dst); |
3656 srlx(dst, LogMinObjAlignmentInBytes, dst); |
3654 } |
3657 } |
3655 |
3658 |
3656 // Same algorithm as oops.inline.hpp decode_heap_oop. |
3659 // Same algorithm as oops.inline.hpp decode_heap_oop. |
3659 Label done; |
3662 Label done; |
3660 sllx(src, LogMinObjAlignmentInBytes, dst); |
3663 sllx(src, LogMinObjAlignmentInBytes, dst); |
3661 bpr(rc_nz, true, Assembler::pt, dst, done); |
3664 bpr(rc_nz, true, Assembler::pt, dst, done); |
3662 delayed() -> add(dst, G6_heapbase, dst); // annuled if not taken |
3665 delayed() -> add(dst, G6_heapbase, dst); // annuled if not taken |
3663 bind(done); |
3666 bind(done); |
|
3667 verify_oop(dst); |
3664 } |
3668 } |
3665 |
3669 |
3666 void MacroAssembler::decode_heap_oop_not_null(Register r) { |
3670 void MacroAssembler::decode_heap_oop_not_null(Register r) { |
3667 // Do not add assert code to this unless you change vtableStubs_sparc.cpp |
3671 // Do not add assert code to this unless you change vtableStubs_sparc.cpp |
3668 // pd_code_size_limit. |
3672 // pd_code_size_limit. |
|
3673 // Also do not verify_oop as this is called by verify_oop. |
3669 assert (UseCompressedOops, "must be compressed"); |
3674 assert (UseCompressedOops, "must be compressed"); |
3670 sllx(r, LogMinObjAlignmentInBytes, r); |
3675 sllx(r, LogMinObjAlignmentInBytes, r); |
3671 add(r, G6_heapbase, r); |
3676 add(r, G6_heapbase, r); |
3672 } |
3677 } |
3673 |
3678 |
3674 void MacroAssembler::decode_heap_oop_not_null(Register src, Register dst) { |
3679 void MacroAssembler::decode_heap_oop_not_null(Register src, Register dst) { |
3675 // Do not add assert code to this unless you change vtableStubs_sparc.cpp |
3680 // Do not add assert code to this unless you change vtableStubs_sparc.cpp |
3676 // pd_code_size_limit. |
3681 // pd_code_size_limit. |
|
3682 // Also do not verify_oop as this is called by verify_oop. |
3677 assert (UseCompressedOops, "must be compressed"); |
3683 assert (UseCompressedOops, "must be compressed"); |
3678 sllx(src, LogMinObjAlignmentInBytes, dst); |
3684 sllx(src, LogMinObjAlignmentInBytes, dst); |
3679 add(dst, G6_heapbase, dst); |
3685 add(dst, G6_heapbase, dst); |
3680 } |
3686 } |
3681 |
3687 |