From 63ffc486171b8fb7402fd345c2544318a53111aa Mon Sep 17 00:00:00 2001
From: Johannes Singler
Date: Fri, 2 Oct 2009 07:47:48 +0000
Subject: [PATCH] base.h: Take integer types from .
2009-10-02 Johannes Singler
* include/parallel/base.h: Take integer types from .
* include/parallel/compatibility.h: Likewise.
* include/parallel/multiseq_selection.h: Likewise.
* include/parallel/random_shuffle.h: Likewise.
* include/parallel/random_number.h: Likewise;
use numeric_limits<>::digit instead of sizeof()*8.
* include/parallel/types.h: Likewise.
* doc/html/manual/bk01pt12ch31s03.html:
Document dependency on stdint.h.
From-SVN: r152396
---
libstdc++-v3/ChangeLog | 12 ++++
.../doc/html/manual/bk01pt12ch31s03.html | 6 +-
libstdc++-v3/include/parallel/base.h | 4 +-
libstdc++-v3/include/parallel/compatibility.h | 66 ++++++++++---------
.../include/parallel/multiseq_selection.h | 2 +-
libstdc++-v3/include/parallel/random_number.h | 33 +++++-----
.../include/parallel/random_shuffle.h | 5 +-
libstdc++-v3/include/parallel/types.h | 33 ++--------
8 files changed, 82 insertions(+), 79 deletions(-)
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 77a60a883bc..860b2000214 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,15 @@
+2009-10-02 Johannes Singler
+
+ * include/parallel/base.h: Take integer types from .
+ * include/parallel/compatibility.h: Likewise.
+ * include/parallel/multiseq_selection.h: Likewise.
+ * include/parallel/random_shuffle.h: Likewise.
+ * include/parallel/random_number.h: Likewise;
+ use numeric_limits<>::digit instead of sizeof()*8.
+ * include/parallel/types.h: Likewise.
+ * doc/html/manual/bk01pt12ch31s03.html:
+ Document dependency on stdint.h.
+
2009-10-01 Phil Muldoon
* python/libstdcxx/v6/printers.py (StdListPrinter):
diff --git a/libstdc++-v3/doc/html/manual/bk01pt12ch31s03.html b/libstdc++-v3/doc/html/manual/bk01pt12ch31s03.html
index b3441ea5e17..cdd2f3df46a 100644
--- a/libstdc++-v3/doc/html/manual/bk01pt12ch31s03.html
+++ b/libstdc++-v3/doc/html/manual/bk01pt12ch31s03.html
@@ -17,7 +17,11 @@ In addition, hardware that supports atomic operations and a compiler
as -march=i686
,
-march=native
or -mcpu=v9
. See
the GCC manual for more information.
-
To use the libstdc++ parallel mode, compile your application with
the prerequisite flags as detailed above, and in addition
add -D_GLIBCXX_PARALLEL
. This will convert all
diff --git a/libstdc++-v3/include/parallel/base.h b/libstdc++-v3/include/parallel/base.h
index 21c354829d1..6bdcedc206a 100644
--- a/libstdc++-v3/include/parallel/base.h
+++ b/libstdc++-v3/include/parallel/base.h
@@ -392,8 +392,8 @@ template
public:
typedef _DifferenceTp _DifferenceType;
- // Better case down to uint64, than up to _DifferenceTp.
- typedef _PseudoSequenceIterator<_Tp, uint64> iterator;
+ // Better cast down to uint64_t, than up to _DifferenceTp.
+ typedef _PseudoSequenceIterator<_Tp, uint64_t> iterator;
/** @brief Constructor.
* @param _M_val Element of the sequence.
diff --git a/libstdc++-v3/include/parallel/compatibility.h b/libstdc++-v3/include/parallel/compatibility.h
index e10370b6f54..c4f691e5b77 100644
--- a/libstdc++-v3/include/parallel/compatibility.h
+++ b/libstdc++-v3/include/parallel/compatibility.h
@@ -62,7 +62,7 @@ namespace __gnu_parallel
{
#if defined(__ICC)
template
- int32 __faa32(int32* __x, int32 __inc)
+ int32_t __faa32(int32_t* __x, int32_t __inc)
{
asm volatile("lock xadd %0,%1"
: "=__r" (__inc), "=__m" (*__x)
@@ -72,7 +72,7 @@ namespace __gnu_parallel
}
#if defined(__x86_64)
template
- int64 __faa64(int64* __x, int64 __inc)
+ int64_t __faa64(int64_t* __x, int64_t __inc)
{
asm volatile("lock xadd %0,%1"
: "=__r" (__inc), "=__m" (*__x)
@@ -91,8 +91,8 @@ namespace __gnu_parallel
* @param __ptr Pointer to a 32-bit signed integer.
* @param __addend Value to add.
*/
- inline int32
- __fetch_and_add_32(volatile int32* __ptr, int32 __addend)
+ inline int32_t
+ __fetch_and_add_32(volatile int32_t* __ptr, int32_t __addend)
{
#if defined(__ICC) //x86 version
return _InterlockedExchangeAdd((void*)__ptr, __addend);
@@ -104,7 +104,7 @@ namespace __gnu_parallel
#elif defined(__GNUC__)
return __sync_fetch_and_add(__ptr, __addend);
#elif defined(__SUNPRO_CC) && defined(__sparc)
- volatile int32 __before, __after;
+ volatile int32_t __before, __after;
do
{
__before = *__ptr;
@@ -114,7 +114,7 @@ namespace __gnu_parallel
return __before;
#else //fallback, slow
#pragma message("slow __fetch_and_add_32")
- int32 __res;
+ int32_t __res;
#pragma omp critical
{
__res = *__ptr;
@@ -130,11 +130,11 @@ namespace __gnu_parallel
* @param __ptr Pointer to a 64-bit signed integer.
* @param __addend Value to add.
*/
- inline int64
- __fetch_and_add_64(volatile int64* __ptr, int64 __addend)
+ inline int64_t
+ __fetch_and_add_64(volatile int64_t* __ptr, int64_t __addend)
{
#if defined(__ICC) && defined(__x86_64) //x86 version
- return __faa64((int64*)__ptr, __addend);
+ return __faa64((int64_t*)__ptr, __addend);
#elif defined(__ECC) //IA-64 version
return _InterlockedExchangeAdd64((void*)__ptr, __addend);
#elif defined(__ICL) || defined(_MSC_VER)
@@ -150,7 +150,7 @@ namespace __gnu_parallel
(defined(__i686) || defined(__pentium4) || defined(__athlon))
return __sync_fetch_and_add(__ptr, __addend);
#elif defined(__SUNPRO_CC) && defined(__sparc)
- volatile int64 __before, __after;
+ volatile int64_t __before, __after;
do
{
__before = *__ptr;
@@ -164,7 +164,7 @@ namespace __gnu_parallel
//#warning "please compile with -march=i686 or better"
#endif
#pragma message("slow __fetch_and_add_64")
- int64 __res;
+ int64_t __res;
#pragma omp critical
{
__res = *__ptr;
@@ -184,10 +184,12 @@ namespace __gnu_parallel
inline _Tp
__fetch_and_add(volatile _Tp* __ptr, _Tp __addend)
{
- if (sizeof(_Tp) == sizeof(int32))
- return (_Tp)__fetch_and_add_32((volatile int32*) __ptr, (int32)__addend);
- else if (sizeof(_Tp) == sizeof(int64))
- return (_Tp)__fetch_and_add_64((volatile int64*) __ptr, (int64)__addend);
+ if (sizeof(_Tp) == sizeof(int32_t))
+ return
+ (_Tp)__fetch_and_add_32((volatile int32_t*) __ptr, (int32_t)__addend);
+ else if (sizeof(_Tp) == sizeof(int64_t))
+ return
+ (_Tp)__fetch_and_add_64((volatile int64_t*) __ptr, (int64_t)__addend);
else
_GLIBCXX_PARALLEL_ASSERT(false);
}
@@ -196,10 +198,10 @@ namespace __gnu_parallel
#if defined(__ICC)
template
- inline int32
- __cas32(volatile int32* __ptr, int32 __old, int32 __nw)
+ inline int32_t
+ __cas32(volatile int32_t* __ptr, int32_t __old, int32_t __nw)
{
- int32 __before;
+ int32_t __before;
__asm__ __volatile__("lock; cmpxchgl %1,%2"
: "=a"(__before)
: "q"(__nw), "__m"(*(volatile long long*)(__ptr)),
@@ -210,10 +212,10 @@ namespace __gnu_parallel
#if defined(__x86_64)
template
- inline int64
- __cas64(volatile int64 *__ptr, int64 __old, int64 __nw)
+ inline int64_t
+ __cas64(volatile int64_t *__ptr, int64_t __old, int64_t __nw)
{
- int64 __before;
+ int64_t __before;
__asm__ __volatile__("lock; cmpxchgq %1,%2"
: "=a"(__before)
: "q"(__nw), "__m"(*(volatile long long*)(__ptr)),
@@ -234,8 +236,8 @@ namespace __gnu_parallel
* @param __replacement Replacement value.
*/
inline bool
- __compare_and_swap_32(volatile int32* __ptr, int32 __comparand,
- int32 __replacement)
+ __compare_and_swap_32(volatile int32_t* __ptr, int32_t __comparand,
+ int32_t __replacement)
{
#if defined(__ICC) //x86 version
return _InterlockedCompareExchange((void*)__ptr, __replacement,
@@ -277,8 +279,8 @@ namespace __gnu_parallel
* @param __replacement Replacement value.
*/
inline bool
- __compare_and_swap_64(volatile int64* __ptr, int64 __comparand,
- int64 __replacement)
+ __compare_and_swap_64(volatile int64_t* __ptr, int64_t __comparand,
+ int64_t __replacement)
{
#if defined(__ICC) && defined(__x86_64) //x86 version
return __cas64(__ptr, __comparand, __replacement) == __comparand;
@@ -332,12 +334,14 @@ namespace __gnu_parallel
inline bool
__compare_and_swap(volatile _Tp* __ptr, _Tp __comparand, _Tp __replacement)
{
- if (sizeof(_Tp) == sizeof(int32))
- return __compare_and_swap_32((volatile int32*) __ptr, (int32)__comparand,
- (int32)__replacement);
- else if (sizeof(_Tp) == sizeof(int64))
- return __compare_and_swap_64((volatile int64*) __ptr, (int64)__comparand,
- (int64)__replacement);
+ if (sizeof(_Tp) == sizeof(int32_t))
+ return __compare_and_swap_32((volatile int32_t*) __ptr,
+ (int32_t)__comparand,
+ (int32_t)__replacement);
+ else if (sizeof(_Tp) == sizeof(int64_t))
+ return __compare_and_swap_64((volatile int64_t*) __ptr,
+ (int64_t)__comparand,
+ (int64_t)__replacement);
else
_GLIBCXX_PARALLEL_ASSERT(false);
}
diff --git a/libstdc++-v3/include/parallel/multiseq_selection.h b/libstdc++-v3/include/parallel/multiseq_selection.h
index 221470cc16c..fdce872c5a1 100644
--- a/libstdc++-v3/include/parallel/multiseq_selection.h
+++ b/libstdc++-v3/include/parallel/multiseq_selection.h
@@ -273,7 +273,7 @@ namespace __gnu_parallel
}
_DifferenceType __skew = static_cast<_DifferenceType>
- (static_cast(__total) * __rank / __N - __leftsize);
+ (static_cast(__total) * __rank / __N - __leftsize);
if (__skew > 0)
{
diff --git a/libstdc++-v3/include/parallel/random_number.h b/libstdc++-v3/include/parallel/random_number.h
index 6447087ebbb..4df91df0583 100644
--- a/libstdc++-v3/include/parallel/random_number.h
+++ b/libstdc++-v3/include/parallel/random_number.h
@@ -34,6 +34,7 @@
#include
#include
+#include
namespace __gnu_parallel
{
@@ -42,29 +43,29 @@ namespace __gnu_parallel
{
private:
std::tr1::mt19937 _M_mt;
- uint64 _M_supremum;
- uint64 _M_rand_sup;
+ uint64_t _M_supremum;
+ uint64_t _M_rand_sup;
double _M_supremum_reciprocal;
double _M_rand_sup_reciprocal;
// Assumed to be twice as long as the usual random number.
- uint64 __cache;
+ uint64_t __cache;
// Bit results.
int __bits_left;
- static uint32
- __scale_down(uint64 __x,
+ static uint32_t
+ __scale_down(uint64_t __x,
#if _GLIBCXX_SCALE_DOWN_FPU
- uint64 /*_M_supremum*/, double _M_supremum_reciprocal)
+ uint64_t /*_M_supremum*/, double _M_supremum_reciprocal)
#else
- uint64 _M_supremum, double /*_M_supremum_reciprocal*/)
+ uint64_t _M_supremum, double /*_M_supremum_reciprocal*/)
#endif
{
#if _GLIBCXX_SCALE_DOWN_FPU
- return uint32(__x * _M_supremum_reciprocal);
+ return uint32_t(__x * _M_supremum_reciprocal);
#else
- return static_cast(__x % _M_supremum);
+ return static_cast(__x % _M_supremum);
#endif
}
@@ -72,7 +73,7 @@ namespace __gnu_parallel
/** @brief Default constructor. Seed with 0. */
_RandomNumber()
: _M_mt(0), _M_supremum(0x100000000ULL),
- _M_rand_sup(1ULL << (sizeof(uint32) * 8)),
+ _M_rand_sup(1ULL << std::numeric_limits::digits),
_M_supremum_reciprocal(double(_M_supremum) / double(_M_rand_sup)),
_M_rand_sup_reciprocal(1.0 / double(_M_rand_sup)),
__cache(0), __bits_left(0) { }
@@ -81,22 +82,22 @@ namespace __gnu_parallel
* @param __seed Random __seed.
* @param _M_supremum Generate integer random numbers in the
* interval @__c [0,_M_supremum). */
- _RandomNumber(uint32 __seed, uint64 _M_supremum = 0x100000000ULL)
+ _RandomNumber(uint32_t __seed, uint64_t _M_supremum = 0x100000000ULL)
: _M_mt(__seed), _M_supremum(_M_supremum),
- _M_rand_sup(1ULL << (sizeof(uint32) * 8)),
+ _M_rand_sup(1ULL << std::numeric_limits::digits),
_M_supremum_reciprocal(double(_M_supremum) / double(_M_rand_sup)),
_M_rand_sup_reciprocal(1.0 / double(_M_rand_sup)),
__cache(0), __bits_left(0) { }
/** @brief Generate unsigned random 32-bit integer. */
- uint32
+ uint32_t
operator()()
{ return __scale_down(_M_mt(), _M_supremum, _M_supremum_reciprocal); }
/** @brief Generate unsigned random 32-bit integer in the
interval @__c [0,local_supremum). */
- uint32
- operator()(uint64 local_supremum)
+ uint32_t
+ operator()(uint64_t local_supremum)
{
return __scale_down(_M_mt(), local_supremum,
double(local_supremum * _M_rand_sup_reciprocal));
@@ -112,7 +113,7 @@ namespace __gnu_parallel
__bits_left -= __bits;
if (__bits_left < 32)
{
- __cache |= ((uint64(_M_mt())) << __bits_left);
+ __cache |= ((uint64_t(_M_mt())) << __bits_left);
__bits_left += 32;
}
return __res;
diff --git a/libstdc++-v3/include/parallel/random_shuffle.h b/libstdc++-v3/include/parallel/random_shuffle.h
index cb6d4278b85..a74b9ac82ac 100644
--- a/libstdc++-v3/include/parallel/random_shuffle.h
+++ b/libstdc++-v3/include/parallel/random_shuffle.h
@@ -100,7 +100,7 @@ template
_BinIndex __bins_end;
/** @brief Random _M_seed for this thread. */
- uint32 _M_seed;
+ uint32_t _M_seed;
/** @brief Pointer to global data. */
_DRandomShufflingGlobalData<_RAIter>* _M_sd;
@@ -372,7 +372,8 @@ template
for (; __j < bin_cursor; ++__j)
_M_sd._M_bin_proc[__j] = __i;
__pus[__i]._M_num_threads = __num_threads;
- __pus[__i]._M_seed = __rng(std::numeric_limits::max());
+ __pus[__i]._M_seed =
+ __rng(std::numeric_limits::max());
__pus[__i]._M_sd = &_M_sd;
}
_M_starts[__num_threads] = __start;
diff --git a/libstdc++-v3/include/parallel/types.h b/libstdc++-v3/include/parallel/types.h
index 3321f2d5bad..bb6eaa5ed8b 100644
--- a/libstdc++-v3/include/parallel/types.h
+++ b/libstdc++-v3/include/parallel/types.h
@@ -33,6 +33,8 @@
#define _GLIBCXX_PARALLEL_TYPES_H 1
#include
+#include
+#include
namespace __gnu_parallel
{
@@ -108,45 +110,24 @@ namespace __gnu_parallel
EQUAL_SPLIT
};
- /// _Integer Types.
- // XXX need to use
- /** @brief 16-bit signed integer. */
- typedef short int16;
-
- /** @brief 16-bit unsigned integer. */
- typedef unsigned short uint16;
-
- /** @brief 32-bit signed integer. */
- typedef int int32;
-
- /** @brief 32-bit unsigned integer. */
- typedef unsigned int uint32;
-
- /** @brief 64-bit signed integer. */
- typedef long long int64;
-
- /** @brief 64-bit unsigned integer. */
- typedef unsigned long long uint64;
-
/**
* @brief Unsigned integer to index __elements.
* The total number of elements for each algorithm must fit into this type.
*/
- typedef uint64 _SequenceIndex;
+ typedef uint64_t _SequenceIndex;
/**
* @brief Unsigned integer to index a thread number.
* The maximum thread number (for each processor) must fit into this type.
*/
- typedef uint16 _ThreadIndex;
+ typedef uint16_t _ThreadIndex;
// XXX atomics interface?
/// Longest compare-and-swappable integer type on this platform.
- typedef int64 _CASable;
+ typedef int64_t _CASable;
- // XXX numeric_limits::digits?
- /// Number of bits of ::_CASable.
- static const int _CASable_bits = sizeof(_CASable) * 8;
+ /// Number of bits of _CASable.
+ static const int _CASable_bits = std::numeric_limits<_CASable>::digits;
/// ::_CASable with the right half of bits set to 1.
static const _CASable _CASable_mask =
--
2.30.2