Mercurial > hg > truffle
comparison src/share/vm/oops/oop.pcgc.inline.hpp @ 2044:06f017f7daa7
Merge.
author | Thomas Wuerthinger <wuerthinger@ssw.jku.at> |
---|---|
date | Fri, 07 Jan 2011 18:18:08 +0100 |
parents | 3cd116fd11be |
children | e5383553fd4e |
comparison
equal
deleted
inserted
replaced
1942:00bc9eaf0e24 | 2044:06f017f7daa7 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
20 * or visit www.oracle.com if you need additional information or have any | 20 * or visit www.oracle.com if you need additional information or have any |
21 * questions. | 21 * questions. |
22 * | 22 * |
23 */ | 23 */ |
24 | |
25 #ifndef SHARE_VM_OOPS_OOP_PCGC_INLINE_HPP | |
26 #define SHARE_VM_OOPS_OOP_PCGC_INLINE_HPP | |
27 | |
28 #ifndef SERIALGC | |
29 #include "gc_implementation/parNew/parNewGeneration.hpp" | |
30 #include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" | |
31 #include "gc_implementation/parallelScavenge/psCompactionManager.hpp" | |
32 #include "gc_implementation/parallelScavenge/psParallelCompact.hpp" | |
33 #include "gc_implementation/parallelScavenge/psScavenge.hpp" | |
34 #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" | |
35 #endif | |
24 | 36 |
25 inline void oopDesc::update_contents(ParCompactionManager* cm) { | 37 inline void oopDesc::update_contents(ParCompactionManager* cm) { |
26 // The klass field must be updated before anything else | 38 // The klass field must be updated before anything else |
27 // can be done. | 39 // can be done. |
28 DEBUG_ONLY(klassOopDesc* original_klass = klass()); | 40 DEBUG_ONLY(klassOopDesc* original_klass = klass()); |
104 markOop curMark; | 116 markOop curMark; |
105 | 117 |
106 assert(forwardPtrMark->decode_pointer() == p, "encoding must be reversable"); | 118 assert(forwardPtrMark->decode_pointer() == p, "encoding must be reversable"); |
107 assert(sizeof(markOop) == sizeof(intptr_t), "CAS below requires this."); | 119 assert(sizeof(markOop) == sizeof(intptr_t), "CAS below requires this."); |
108 | 120 |
109 while (!is_forwarded()) { | 121 while (!oldMark->is_marked()) { |
110 curMark = (markOop)Atomic::cmpxchg_ptr(forwardPtrMark, &_mark, oldMark); | 122 curMark = (markOop)Atomic::cmpxchg_ptr(forwardPtrMark, &_mark, oldMark); |
123 assert(is_forwarded(), "object should have been forwarded"); | |
111 if (curMark == oldMark) { | 124 if (curMark == oldMark) { |
112 assert(is_forwarded(), "the CAS should have succeeded."); | |
113 return NULL; | 125 return NULL; |
114 } | 126 } |
127 // If the CAS was unsuccessful then curMark->is_marked() | |
128 // should return true as another thread has CAS'd in another | |
129 // forwarding pointer. | |
115 oldMark = curMark; | 130 oldMark = curMark; |
116 } | 131 } |
117 return forwardee(); | 132 return forwardee(); |
118 } | 133 } |
119 | 134 |
131 beg_addr, end_addr); | 146 beg_addr, end_addr); |
132 } else { | 147 } else { |
133 PSParallelCompact::adjust_pointer(klass_addr(), beg_addr, end_addr); | 148 PSParallelCompact::adjust_pointer(klass_addr(), beg_addr, end_addr); |
134 } | 149 } |
135 } | 150 } |
151 | |
152 #endif // SHARE_VM_OOPS_OOP_PCGC_INLINE_HPP |