Mercurial > hg > truffle
diff src/share/vm/oops/oop.inline.hpp @ 1579:e9ff18c4ace7
Merge
author | jrose |
---|---|
date | Wed, 02 Jun 2010 22:45:42 -0700 |
parents | c18cbe5936b8 2d127394260e |
children | d55217dc206f |
line wrap: on
line diff
--- a/src/share/vm/oops/oop.inline.hpp Tue Jun 01 11:48:33 2010 -0700 +++ b/src/share/vm/oops/oop.inline.hpp Wed Jun 02 22:45:42 2010 -0700 @@ -146,8 +146,13 @@ // offset from the heap base. Saving the check for null can save instructions // in inner GC loops so these are separated. +inline bool check_obj_alignment(oop obj) { + return (intptr_t)obj % MinObjAlignmentInBytes == 0; +} + inline narrowOop oopDesc::encode_heap_oop_not_null(oop v) { assert(!is_null(v), "oop value can never be zero"); + assert(check_obj_alignment(v), "Address not aligned"); assert(Universe::heap()->is_in_reserved(v), "Address not in heap"); address base = Universe::narrow_oop_base(); int shift = Universe::narrow_oop_shift(); @@ -167,7 +172,9 @@ assert(!is_null(v), "narrow oop value can never be zero"); address base = Universe::narrow_oop_base(); int shift = Universe::narrow_oop_shift(); - return (oop)(void*)((uintptr_t)base + ((uintptr_t)v << shift)); + oop result = (oop)(void*)((uintptr_t)base + ((uintptr_t)v << shift)); + assert(check_obj_alignment(result), "Address not aligned"); + return result; } inline oop oopDesc::decode_heap_oop(narrowOop v) { @@ -522,10 +529,6 @@ return mark()->has_bias_pattern(); } -inline bool check_obj_alignment(oop obj) { - return (intptr_t)obj % MinObjAlignmentInBytes == 0; -} - // used only for asserts inline bool oopDesc::is_oop(bool ignore_mark_word) const { @@ -600,6 +603,8 @@ // Used by scavengers inline void oopDesc::forward_to(oop p) { + assert(check_obj_alignment(p), + "forwarding to something not aligned"); assert(Universe::heap()->is_in_reserved(p), "forwarding to something not in heap"); markOop m = markOopDesc::encode_pointer_as_mark(p); @@ -609,6 +614,8 @@ // Used by parallel scavengers inline bool oopDesc::cas_forward_to(oop p, markOop compare) { + assert(check_obj_alignment(p), + "forwarding to something not aligned"); assert(Universe::heap()->is_in_reserved(p), "forwarding to something not in heap"); markOop m = markOopDesc::encode_pointer_as_mark(p);