Mercurial > hg > truffle
comparison src/os_cpu/solaris_x86/vm/atomic_solaris_x86.inline.hpp @ 894:665be97e8704
6863420: os::javaTimeNanos() go backward on Solaris x86
Summary: Use new atomic long load method Atomic::load() to load max_hrtime.
Reviewed-by: never, ysr, johnc, phh, dcubed, acorn
author | kvn |
---|---|
date | Sun, 26 Jul 2009 16:40:14 -0700 |
parents | a61af66fc99e |
children | 89e0543e1737 |
comparison
equal
deleted
inserted
replaced
893:dd0a4e1e219b | 894:665be97e8704 |
---|---|
97 | 97 |
98 inline void* Atomic::cmpxchg_ptr(void* exchange_value, volatile void* dest, void* compare_value) { | 98 inline void* Atomic::cmpxchg_ptr(void* exchange_value, volatile void* dest, void* compare_value) { |
99 return (void*)_Atomic_cmpxchg_long((jlong)exchange_value, (volatile jlong*)dest, (jlong)compare_value, (int) os::is_MP()); | 99 return (void*)_Atomic_cmpxchg_long((jlong)exchange_value, (volatile jlong*)dest, (jlong)compare_value, (int) os::is_MP()); |
100 } | 100 } |
101 | 101 |
102 inline jlong Atomic::load(volatile jlong* src) { return *src; } | |
103 | |
102 #else // !AMD64 | 104 #else // !AMD64 |
103 | 105 |
104 inline intptr_t Atomic::add_ptr(intptr_t add_value, volatile intptr_t* dest) { | 106 inline intptr_t Atomic::add_ptr(intptr_t add_value, volatile intptr_t* dest) { |
105 return (intptr_t)add((jint)add_value, (volatile jint*)dest); | 107 return (intptr_t)add((jint)add_value, (volatile jint*)dest); |
106 } | 108 } |
129 } | 131 } |
130 | 132 |
131 inline void* Atomic::cmpxchg_ptr(void* exchange_value, volatile void* dest, void* compare_value) { | 133 inline void* Atomic::cmpxchg_ptr(void* exchange_value, volatile void* dest, void* compare_value) { |
132 return (void*)cmpxchg((jint)exchange_value, (volatile jint*)dest, (jint)compare_value); | 134 return (void*)cmpxchg((jint)exchange_value, (volatile jint*)dest, (jint)compare_value); |
133 } | 135 } |
136 | |
137 extern "C" void _Atomic_load_long(volatile jlong* src, volatile jlong* dst); | |
138 | |
139 inline jlong Atomic::load(volatile jlong* src) { | |
140 volatile jlong dest; | |
141 _Atomic_load_long(src, &dest); | |
142 return dest; | |
143 } | |
144 | |
134 #endif // AMD64 | 145 #endif // AMD64 |
135 | 146 |
136 #ifdef _GNU_SOURCE | 147 #ifdef _GNU_SOURCE |
137 // Add a lock prefix to an instruction on an MP machine | 148 // Add a lock prefix to an instruction on an MP machine |
138 #define LOCK_IF_MP(mp) "cmp $0, " #mp "; je 1f; lock; 1: " | 149 #define LOCK_IF_MP(mp) "cmp $0, " #mp "; je 1f; lock; 1: " |