mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-22 12:04:39 +02:00
8037295: Add size_t versions of Atomic::add, dec, and inc
Reviewed-by: dholmes, fparain
This commit is contained in:
parent
f190cc8c67
commit
91dcc35215
3 changed files with 26 additions and 10 deletions
|
@ -245,7 +245,7 @@ private:
|
|||
|
||||
enum ParIterState { Unclaimed, Claimed, Complete };
|
||||
volatile ParIterState _iter_state;
|
||||
volatile jlong _iter_claimed;
|
||||
volatile size_t _iter_claimed;
|
||||
|
||||
// Unused unless G1RecordHRRSOops is true.
|
||||
|
||||
|
@ -319,16 +319,12 @@ public:
|
|||
bool iter_is_complete();
|
||||
|
||||
// Support for claiming blocks of cards during iteration
|
||||
size_t iter_claimed() const { return (size_t)_iter_claimed; }
|
||||
size_t iter_claimed() const { return _iter_claimed; }
|
||||
// Claim the next block of cards
|
||||
size_t iter_claimed_next(size_t step) {
|
||||
size_t current, next;
|
||||
do {
|
||||
current = iter_claimed();
|
||||
next = current + step;
|
||||
} while (Atomic::cmpxchg((jlong)next, &_iter_claimed, (jlong)current) != (jlong)current);
|
||||
return current;
|
||||
return Atomic::add(step, &_iter_claimed) - step;
|
||||
}
|
||||
|
||||
void reset_for_par_iteration();
|
||||
|
||||
bool verify_ready_for_par_iteration() {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -57,6 +57,7 @@ class Atomic : AllStatic {
|
|||
|
||||
// Atomically add to a location, return updated value
|
||||
inline static jint add (jint add_value, volatile jint* dest);
|
||||
inline static size_t add (size_t add_value, volatile size_t* dest);
|
||||
inline static intptr_t add_ptr(intptr_t add_value, volatile intptr_t* dest);
|
||||
inline static void* add_ptr(intptr_t add_value, volatile void* dest);
|
||||
// See comment above about using jlong atomics on 32-bit platforms
|
||||
|
@ -65,12 +66,14 @@ class Atomic : AllStatic {
|
|||
// Atomically increment location
|
||||
inline static void inc (volatile jint* dest);
|
||||
static void inc (volatile jshort* dest);
|
||||
inline static void inc (volatile size_t* dest);
|
||||
inline static void inc_ptr(volatile intptr_t* dest);
|
||||
inline static void inc_ptr(volatile void* dest);
|
||||
|
||||
// Atomically decrement a location
|
||||
inline static void dec (volatile jint* dest);
|
||||
static void dec (volatile jshort* dest);
|
||||
inline static void dec (volatile size_t* dest);
|
||||
inline static void dec_ptr(volatile intptr_t* dest);
|
||||
inline static void dec_ptr(volatile void* dest);
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -70,4 +70,21 @@
|
|||
# include "atomic_bsd_zero.inline.hpp"
|
||||
#endif
|
||||
|
||||
// size_t casts...
|
||||
#if (SIZE_MAX != UINTPTR_MAX)
|
||||
#error size_t is not WORD_SIZE, interesting platform, but missing implementation here
|
||||
#endif
|
||||
|
||||
inline size_t Atomic::add(size_t add_value, volatile size_t* dest) {
|
||||
return (size_t) add_ptr((intptr_t) add_value, (volatile intptr_t*) dest);
|
||||
}
|
||||
|
||||
inline void Atomic::inc(volatile size_t* dest) {
|
||||
inc_ptr((volatile intptr_t*) dest);
|
||||
}
|
||||
|
||||
inline void Atomic::dec(volatile size_t* dest) {
|
||||
dec_ptr((volatile intptr_t*) dest);
|
||||
}
|
||||
|
||||
#endif // SHARE_VM_RUNTIME_ATOMIC_INLINE_HPP
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue