7018849: 7017124 fix broke VM build on some platforms
Use atomic load and store in inc_stat_counter() only on SPARC and X86. Reviewed-by: iveresov
This commit is contained in:
parent
5d3ab72d1d
commit
c13062093b
@ -32,12 +32,20 @@
|
|||||||
void trace_heap_malloc(size_t size, const char* name, void *p);
|
void trace_heap_malloc(size_t size, const char* name, void *p);
|
||||||
void trace_heap_free(void *p);
|
void trace_heap_free(void *p);
|
||||||
|
|
||||||
|
#ifndef PRODUCT
|
||||||
// Increments unsigned long value for statistics (not atomic on MP).
|
// Increments unsigned long value for statistics (not atomic on MP).
|
||||||
inline void inc_stat_counter(volatile julong* dest, julong add_value) {
|
inline void inc_stat_counter(volatile julong* dest, julong add_value) {
|
||||||
|
#if defined(SPARC) || defined(X86)
|
||||||
|
// Sparc and X86 have atomic jlong (8 bytes) instructions
|
||||||
julong value = Atomic::load((volatile jlong*)dest);
|
julong value = Atomic::load((volatile jlong*)dest);
|
||||||
value += add_value;
|
value += add_value;
|
||||||
Atomic::store((jlong)value, (volatile jlong*)dest);
|
Atomic::store((jlong)value, (volatile jlong*)dest);
|
||||||
|
#else
|
||||||
|
// possible word-tearing during load/store
|
||||||
|
*dest += add_value;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// allocate using malloc; will fail if no memory available
|
// allocate using malloc; will fail if no memory available
|
||||||
inline char* AllocateHeap(size_t size, const char* name = NULL) {
|
inline char* AllocateHeap(size_t size, const char* name = NULL) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user