Mercurial > hg > truffle
comparison src/cpu/x86/vm/assembler_x86_64.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 |
---|---|
5263 | 5263 |
5264 void MacroAssembler::decode_heap_oop_not_null(Register r) { | 5264 void MacroAssembler::decode_heap_oop_not_null(Register r) { |
5265 assert (UseCompressedOops, "should only be used for compressed headers"); | 5265 assert (UseCompressedOops, "should only be used for compressed headers"); |
5266 // Cannot assert, unverified entry point counts instructions (see .ad file) | 5266 // Cannot assert, unverified entry point counts instructions (see .ad file) |
5267 // vtableStubs also counts instructions in pd_code_size_limit. | 5267 // vtableStubs also counts instructions in pd_code_size_limit. |
5268 // Also do not verify_oop as this is called by verify_oop. | |
5268 assert(Address::times_8 == LogMinObjAlignmentInBytes, "decode alg wrong"); | 5269 assert(Address::times_8 == LogMinObjAlignmentInBytes, "decode alg wrong"); |
5269 leaq(r, Address(r12_heapbase, r, Address::times_8, 0)); | 5270 leaq(r, Address(r12_heapbase, r, Address::times_8, 0)); |
5270 } | 5271 } |
5271 | 5272 |
5272 void MacroAssembler::decode_heap_oop_not_null(Register dst, Register src) { | 5273 void MacroAssembler::decode_heap_oop_not_null(Register dst, Register src) { |
5273 assert (UseCompressedOops, "should only be used for compressed headers"); | 5274 assert (UseCompressedOops, "should only be used for compressed headers"); |
5274 // Cannot assert, unverified entry point counts instructions (see .ad file) | 5275 // Cannot assert, unverified entry point counts instructions (see .ad file) |
5275 // vtableStubs also counts instructions in pd_code_size_limit. | 5276 // vtableStubs also counts instructions in pd_code_size_limit. |
5277 // Also do not verify_oop as this is called by verify_oop. | |
5276 assert(Address::times_8 == LogMinObjAlignmentInBytes, "decode alg wrong"); | 5278 assert(Address::times_8 == LogMinObjAlignmentInBytes, "decode alg wrong"); |
5277 leaq(dst, Address(r12_heapbase, src, Address::times_8, 0)); | 5279 leaq(dst, Address(r12_heapbase, src, Address::times_8, 0)); |
5278 } | 5280 } |
5279 | 5281 |
5280 Assembler::Condition MacroAssembler::negate_condition(Assembler::Condition cond) { | 5282 Assembler::Condition MacroAssembler::negate_condition(Assembler::Condition cond) { |