comparison src/share/vm/memory/allocation.inline.hpp @ 2255:bf29934d2f4f

7018849: 7017124 fix broke VM build on some platforms Summary: Use atomic load and store in inc_stat_counter() only on SPARC and X86. Reviewed-by: iveresov
author kvn
date Thu, 10 Feb 2011 19:34:48 -0800
parents f7de3327c683
children d2a62e0f25eb
comparison
equal deleted inserted replaced
2254:ab42c7e1cf83 2255:bf29934d2f4f
30 // Explicit C-heap memory management 30 // Explicit C-heap memory management
31 31
32 void trace_heap_malloc(size_t size, const char* name, void *p); 32 void trace_heap_malloc(size_t size, const char* name, void *p);
33 void trace_heap_free(void *p); 33 void trace_heap_free(void *p);
34 34
35 #ifndef PRODUCT
35 // Increments unsigned long value for statistics (not atomic on MP). 36 // Increments unsigned long value for statistics (not atomic on MP).
36 inline void inc_stat_counter(volatile julong* dest, julong add_value) { 37 inline void inc_stat_counter(volatile julong* dest, julong add_value) {
38 #if defined(SPARC) || defined(X86)
39 // Sparc and X86 have atomic jlong (8 bytes) instructions
37 julong value = Atomic::load((volatile jlong*)dest); 40 julong value = Atomic::load((volatile jlong*)dest);
38 value += add_value; 41 value += add_value;
39 Atomic::store((jlong)value, (volatile jlong*)dest); 42 Atomic::store((jlong)value, (volatile jlong*)dest);
43 #else
44 // possible word-tearing during load/store
45 *dest += add_value;
46 #endif
40 } 47 }
48 #endif
41 49
42 // allocate using malloc; will fail if no memory available 50 // allocate using malloc; will fail if no memory available
43 inline char* AllocateHeap(size_t size, const char* name = NULL) { 51 inline char* AllocateHeap(size_t size, const char* name = NULL) {
44 char* p = (char*) os::malloc(size); 52 char* p = (char*) os::malloc(size);
45 #ifdef ASSERT 53 #ifdef ASSERT