Mercurial > hg > truffle
comparison src/cpu/sparc/vm/assembler_sparc.cpp @ 178:6d172e3548cb
6695819: verify_oopx rax: broken oop in decode_heap_oop
Summary: Code in gen_subtype_check was encoding rax as an oop on a path where rax was not an oop.
Reviewed-by: never, kvn
author | coleenp |
---|---|
date | Thu, 05 Jun 2008 17:02:54 -0400 |
parents | b130b98db9cf |
children | 1f809e010142 |
comparison
equal
deleted
inserted
replaced
177:2a8ec427fbe1 | 178:6d172e3548cb |
---|---|
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 |