217 #if[CAS] |
221 #if[CAS] |
218 UNSAFE.put$Type$(base, offset, $value1$); |
222 UNSAFE.put$Type$(base, offset, $value1$); |
219 |
223 |
220 // Compare |
224 // Compare |
221 { |
225 { |
|
226 #if[JdkInternalMisc] |
|
227 boolean r = UNSAFE.compareAndSet$Type$(base, offset, $value1$, $value2$); |
|
228 assertEquals(r, true, "success compareAndSet $type$"); |
|
229 #else[JdkInternalMisc] |
222 boolean r = UNSAFE.compareAndSwap$Type$(base, offset, $value1$, $value2$); |
230 boolean r = UNSAFE.compareAndSwap$Type$(base, offset, $value1$, $value2$); |
223 assertEquals(r, true, "success compareAndSwap $type$"); |
231 assertEquals(r, true, "success compareAndSwap $type$"); |
224 $type$ x = UNSAFE.get$Type$(base, offset); |
232 #end[JdkInternalMisc] |
|
233 $type$ x = UNSAFE.get$Type$(base, offset); |
|
234 #if[JdkInternalMisc] |
|
235 assertEquals(x, $value2$, "success compareAndSet $type$ value"); |
|
236 #else[JdkInternalMisc] |
225 assertEquals(x, $value2$, "success compareAndSwap $type$ value"); |
237 assertEquals(x, $value2$, "success compareAndSwap $type$ value"); |
226 } |
238 #end[JdkInternalMisc] |
227 |
239 } |
228 { |
240 |
|
241 { |
|
242 #if[JdkInternalMisc] |
|
243 boolean r = UNSAFE.compareAndSet$Type$(base, offset, $value1$, $value3$); |
|
244 assertEquals(r, false, "failing compareAndSet $type$"); |
|
245 #else[JdkInternalMisc] |
229 boolean r = UNSAFE.compareAndSwap$Type$(base, offset, $value1$, $value3$); |
246 boolean r = UNSAFE.compareAndSwap$Type$(base, offset, $value1$, $value3$); |
230 assertEquals(r, false, "failing compareAndSwap $type$"); |
247 assertEquals(r, false, "failing compareAndSwap $type$"); |
231 $type$ x = UNSAFE.get$Type$(base, offset); |
248 #end[JdkInternalMisc] |
|
249 $type$ x = UNSAFE.get$Type$(base, offset); |
|
250 #if[JdkInternalMisc] |
|
251 assertEquals(x, $value2$, "failing compareAndSet $type$ value"); |
|
252 #else[JdkInternalMisc] |
232 assertEquals(x, $value2$, "failing compareAndSwap $type$ value"); |
253 assertEquals(x, $value2$, "failing compareAndSwap $type$ value"); |
|
254 #end[JdkInternalMisc] |
233 } |
255 } |
234 |
256 |
235 #if[JdkInternalMisc] |
257 #if[JdkInternalMisc] |
236 // Advanced compare |
258 // Advanced compare |
237 { |
259 { |
238 $type$ r = UNSAFE.compareAndExchange$Type$Volatile(base, offset, $value2$, $value1$); |
260 $type$ r = UNSAFE.compareAndExchange$Type$(base, offset, $value2$, $value1$); |
239 assertEquals(r, $value2$, "success compareAndExchangeVolatile $type$"); |
261 assertEquals(r, $value2$, "success compareAndExchange $type$"); |
240 $type$ x = UNSAFE.get$Type$(base, offset); |
262 $type$ x = UNSAFE.get$Type$(base, offset); |
241 assertEquals(x, $value1$, "success compareAndExchangeVolatile $type$ value"); |
263 assertEquals(x, $value1$, "success compareAndExchange $type$ value"); |
242 } |
264 } |
243 |
265 |
244 { |
266 { |
245 $type$ r = UNSAFE.compareAndExchange$Type$Volatile(base, offset, $value2$, $value3$); |
267 $type$ r = UNSAFE.compareAndExchange$Type$(base, offset, $value2$, $value3$); |
246 assertEquals(r, $value1$, "failing compareAndExchangeVolatile $type$"); |
268 assertEquals(r, $value1$, "failing compareAndExchange $type$"); |
247 $type$ x = UNSAFE.get$Type$(base, offset); |
269 $type$ x = UNSAFE.get$Type$(base, offset); |
248 assertEquals(x, $value1$, "failing compareAndExchangeVolatile $type$ value"); |
270 assertEquals(x, $value1$, "failing compareAndExchange $type$ value"); |
249 } |
271 } |
250 |
272 |
251 { |
273 { |
252 $type$ r = UNSAFE.compareAndExchange$Type$Acquire(base, offset, $value1$, $value2$); |
274 $type$ r = UNSAFE.compareAndExchange$Type$Acquire(base, offset, $value1$, $value2$); |
253 assertEquals(r, $value1$, "success compareAndExchangeAcquire $type$"); |
275 assertEquals(r, $value1$, "success compareAndExchangeAcquire $type$"); |
277 } |
299 } |
278 |
300 |
279 { |
301 { |
280 boolean success = false; |
302 boolean success = false; |
281 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
303 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
282 success = UNSAFE.weakCompareAndSwap$Type$(base, offset, $value1$, $value2$); |
304 success = UNSAFE.weakCompareAndSet$Type$Plain(base, offset, $value1$, $value2$); |
283 } |
305 } |
284 assertEquals(success, true, "weakCompareAndSwap $type$"); |
306 assertEquals(success, true, "weakCompareAndSetPlain $type$"); |
285 $type$ x = UNSAFE.get$Type$(base, offset); |
307 $type$ x = UNSAFE.get$Type$(base, offset); |
286 assertEquals(x, $value2$, "weakCompareAndSwap $type$ value"); |
308 assertEquals(x, $value2$, "weakCompareAndSetPlain $type$ value"); |
287 } |
309 } |
288 |
310 |
289 { |
311 { |
290 boolean success = false; |
312 boolean success = false; |
291 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
313 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
292 success = UNSAFE.weakCompareAndSwap$Type$Acquire(base, offset, $value2$, $value1$); |
314 success = UNSAFE.weakCompareAndSet$Type$Acquire(base, offset, $value2$, $value1$); |
293 } |
315 } |
294 assertEquals(success, true, "weakCompareAndSwapAcquire $type$"); |
316 assertEquals(success, true, "weakCompareAndSetAcquire $type$"); |
295 $type$ x = UNSAFE.get$Type$(base, offset); |
317 $type$ x = UNSAFE.get$Type$(base, offset); |
296 assertEquals(x, $value1$, "weakCompareAndSwapAcquire $type$"); |
318 assertEquals(x, $value1$, "weakCompareAndSetAcquire $type$"); |
297 } |
319 } |
298 |
320 |
299 { |
321 { |
300 boolean success = false; |
322 boolean success = false; |
301 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
323 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
302 success = UNSAFE.weakCompareAndSwap$Type$Release(base, offset, $value1$, $value2$); |
324 success = UNSAFE.weakCompareAndSet$Type$Release(base, offset, $value1$, $value2$); |
303 } |
325 } |
304 assertEquals(success, true, "weakCompareAndSwapRelease $type$"); |
326 assertEquals(success, true, "weakCompareAndSetRelease $type$"); |
305 $type$ x = UNSAFE.get$Type$(base, offset); |
327 $type$ x = UNSAFE.get$Type$(base, offset); |
306 assertEquals(x, $value2$, "weakCompareAndSwapRelease $type$"); |
328 assertEquals(x, $value2$, "weakCompareAndSetRelease $type$"); |
307 } |
329 } |
308 |
330 |
309 { |
331 { |
310 boolean success = false; |
332 boolean success = false; |
311 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
333 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
312 success = UNSAFE.weakCompareAndSwap$Type$Volatile(base, offset, $value2$, $value1$); |
334 success = UNSAFE.weakCompareAndSet$Type$(base, offset, $value2$, $value1$); |
313 } |
335 } |
314 assertEquals(success, true, "weakCompareAndSwapVolatile $type$"); |
336 assertEquals(success, true, "weakCompareAndSet $type$"); |
315 $type$ x = UNSAFE.get$Type$(base, offset); |
337 $type$ x = UNSAFE.get$Type$(base, offset); |
316 assertEquals(x, $value1$, "weakCompareAndSwapVolatile $type$"); |
338 assertEquals(x, $value1$, "weakCompareAndSet $type$"); |
317 } |
339 } |
318 |
340 |
319 #end[JdkInternalMisc] |
341 #end[JdkInternalMisc] |
320 UNSAFE.put$Type$(base, offset, $value2$); |
342 UNSAFE.put$Type$(base, offset, $value2$); |
321 |
343 |