forked from KolibriOS/kolibrios
libstdc++-v3-gcc-4.8.5
git-svn-id: svn://kolibrios.org@6325 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
@@ -31,7 +31,7 @@
|
||||
#define _GLIBCXX_CXX_CONFIG_H 1
|
||||
|
||||
// The current version of the C++ library in compressed ISO date format.
|
||||
#define __GLIBCXX__ 20131016
|
||||
#define __GLIBCXX__ 20150623
|
||||
|
||||
// Macros for various attributes.
|
||||
// _GLIBCXX_PURE
|
||||
@@ -162,7 +162,7 @@
|
||||
}
|
||||
|
||||
namespace tr2 { }
|
||||
|
||||
|
||||
namespace decimal { }
|
||||
|
||||
namespace chrono { }
|
||||
@@ -193,7 +193,7 @@ namespace std
|
||||
|
||||
|
||||
// Defined if inline namespaces are used for versioning.
|
||||
# define _GLIBCXX_INLINE_VERSION 0
|
||||
# define _GLIBCXX_INLINE_VERSION 0
|
||||
|
||||
// Inline namespace for symbol versioning.
|
||||
#if _GLIBCXX_INLINE_VERSION
|
||||
@@ -599,7 +599,7 @@ namespace std
|
||||
#define _GLIBCXX_HAVE_FABSL 1
|
||||
|
||||
/* Define to 1 if you have the <fenv.h> header file. */
|
||||
#define _GLIBCXX_HAVE_FENV_H 1
|
||||
/* #undef _GLIBCXX_HAVE_FENV_H */
|
||||
|
||||
/* Define to 1 if you have the `finite' function. */
|
||||
#define _GLIBCXX_HAVE_FINITE 1
|
||||
@@ -653,7 +653,7 @@ namespace std
|
||||
#define _GLIBCXX_HAVE_HYPOTL 1
|
||||
|
||||
/* Define if you have the iconv() function. */
|
||||
/* #undef _GLIBCXX_HAVE_ICONV */
|
||||
#define _GLIBCXX_HAVE_ICONV 1
|
||||
|
||||
/* Define to 1 if you have the <ieeefp.h> header file. */
|
||||
/* #undef _GLIBCXX_HAVE_IEEEFP_H */
|
||||
@@ -737,10 +737,10 @@ namespace std
|
||||
#define _GLIBCXX_HAVE_LOGL 1
|
||||
|
||||
/* Define to 1 if you have the <machine/endian.h> header file. */
|
||||
#define _GLIBCXX_HAVE_MACHINE_ENDIAN_H 1
|
||||
/* #undef _GLIBCXX_HAVE_MACHINE_ENDIAN_H */
|
||||
|
||||
/* Define to 1 if you have the <machine/param.h> header file. */
|
||||
#define _GLIBCXX_HAVE_MACHINE_PARAM_H 1
|
||||
/* #undef _GLIBCXX_HAVE_MACHINE_PARAM_H */
|
||||
|
||||
/* Define if mbstate_t exists in wchar.h. */
|
||||
#define _GLIBCXX_HAVE_MBSTATE_T 1
|
||||
@@ -824,7 +824,7 @@ namespace std
|
||||
/* #undef _GLIBCXX_HAVE_STRERROR_L */
|
||||
|
||||
/* Define if strerror_r is available in <string.h>. */
|
||||
/* #undef _GLIBCXX_HAVE_STRERROR_R */
|
||||
#define _GLIBCXX_HAVE_STRERROR_R 1
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#define _GLIBCXX_HAVE_STRINGS_H 1
|
||||
@@ -836,7 +836,7 @@ namespace std
|
||||
#define _GLIBCXX_HAVE_STRTOF 1
|
||||
|
||||
/* Define to 1 if you have the `strtold' function. */
|
||||
//#define _GLIBCXX_HAVE_STRTOLD 1
|
||||
#define _GLIBCXX_HAVE_STRTOLD 1
|
||||
|
||||
/* Define if strxfrm_l is available in <string.h>. */
|
||||
/* #undef _GLIBCXX_HAVE_STRXFRM_L */
|
||||
@@ -909,7 +909,7 @@ namespace std
|
||||
/* #undef _GLIBCXX_HAVE_TGMATH_H */
|
||||
|
||||
/* Define to 1 if the target supports thread-local storage. */
|
||||
/* #undef _GLIBCXX_HAVE_TLS */
|
||||
#define _GLIBCXX_HAVE_TLS 1
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#define _GLIBCXX_HAVE_UNISTD_H 1
|
||||
@@ -1131,7 +1131,7 @@ namespace std
|
||||
/* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */
|
||||
|
||||
/* Define as const if the declaration of iconv() needs const. */
|
||||
/* #undef _GLIBCXX_ICONV_CONST */
|
||||
#define _GLIBCXX_ICONV_CONST
|
||||
|
||||
/* Define to the sub-directory in which libtool stores uninstalled libraries.
|
||||
*/
|
||||
@@ -1292,7 +1292,7 @@ namespace std
|
||||
#define _GLIBCXX_USE_FLOAT128 1
|
||||
|
||||
/* Defined if gettimeofday is available. */
|
||||
#define _GLIBCXX_USE_GETTIMEOFDAY 1
|
||||
/* #undef _GLIBCXX_USE_GETTIMEOFDAY */
|
||||
|
||||
/* Define if get_nprocs is available in <sys/sysinfo.h>. */
|
||||
/* #undef _GLIBCXX_USE_GET_NPROCS */
|
||||
@@ -1332,7 +1332,7 @@ namespace std
|
||||
/* #undef _GLIBCXX_USE_SYSCTL_HW_NCPU */
|
||||
|
||||
/* Define if code specialized for wchar_t should be used. */
|
||||
//#define _GLIBCXX_USE_WCHAR_T 1
|
||||
#define _GLIBCXX_USE_WCHAR_T 1
|
||||
|
||||
/* Define to 1 if a verbose library is built, or 0 otherwise. */
|
||||
#define _GLIBCXX_VERBOSE 1
|
||||
|
@@ -1,25 +0,0 @@
|
||||
// Locale internal implementation header -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2002-2013 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 3, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// Under Section 7 of GPL version 3, you are granted additional
|
||||
// permissions described in the GCC Runtime Library Exception, version
|
||||
// 3.1, as published by the Free Software Foundation.
|
||||
|
||||
// You should have received a copy of the GNU General Public License and
|
||||
// a copy of the GCC Runtime Library Exception along with this program;
|
||||
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
// The generic locale code doesn't need to do anything here (yet)
|
@@ -1,213 +0,0 @@
|
||||
// Compatibility symbols for previous versions -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2005-2013 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 3, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// Under Section 7 of GPL version 3, you are granted additional
|
||||
// permissions described in the GCC Runtime Library Exception, version
|
||||
// 3.1, as published by the Free Software Foundation.
|
||||
|
||||
// You should have received a copy of the GNU General Public License and
|
||||
// a copy of the GCC Runtime Library Exception along with this program;
|
||||
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
/** @file bits/compatibility.h
|
||||
* This is an internal header file, included by other library sources.
|
||||
* You should not attempt to use it directly.
|
||||
*/
|
||||
|
||||
// Switch for symbol version macro.
|
||||
#ifndef _GLIBCXX_APPLY_SYMVER
|
||||
#error must define _GLIBCXX_APPLY_SYMVER before including __FILE__
|
||||
#endif
|
||||
|
||||
/* gcc-3.4.4
|
||||
_ZNSt19istreambuf_iteratorIcSt11char_traitsIcEEppEv
|
||||
_ZNSt19istreambuf_iteratorIwSt11char_traitsIwEEppEv
|
||||
*/
|
||||
namespace
|
||||
{
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSt21istreambuf_iteratorXXIcSt11char_traitsIcEEppEv,
|
||||
_ZNSt19istreambuf_iteratorIcSt11char_traitsIcEEppEv)
|
||||
|
||||
#ifdef _GLIBCXX_USE_WCHAR_T
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSt21istreambuf_iteratorXXIwSt11char_traitsIwEEppEv,
|
||||
_ZNSt19istreambuf_iteratorIwSt11char_traitsIwEEppEv)
|
||||
#endif
|
||||
} // anonymous namespace
|
||||
|
||||
/* gcc-4.0.0
|
||||
_ZNSs4_Rep26_M_set_length_and_sharableEj
|
||||
_ZNSs7_M_copyEPcPKcj
|
||||
_ZNSs7_M_moveEPcPKcj
|
||||
_ZNSs9_M_assignEPcjc
|
||||
_ZNKSs11_M_disjunctEPKc
|
||||
_ZNKSs15_M_check_lengthEjjPKc
|
||||
_ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEj
|
||||
_ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwj
|
||||
_ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwj
|
||||
_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw
|
||||
_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw
|
||||
_ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEjjPKc
|
||||
|
||||
_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv
|
||||
_ZNKSt13basic_fstreamIwSt11char_traitsIwEE7is_openEv
|
||||
_ZNKSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv
|
||||
_ZNKSt14basic_ifstreamIwSt11char_traitsIwEE7is_openEv
|
||||
_ZNKSt14basic_ofstreamIcSt11char_traitsIcEE7is_openEv
|
||||
_ZNKSt14basic_ofstreamIwSt11char_traitsIwEE7is_openEv
|
||||
|
||||
_ZNSi6ignoreEi
|
||||
_ZNSi6ignoreEv
|
||||
_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi
|
||||
_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEv
|
||||
|
||||
_ZNSt11char_traitsIcE2eqERKcS2_
|
||||
_ZNSt11char_traitsIwE2eqERKwS2_
|
||||
*/
|
||||
namespace
|
||||
{
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSt11char_traitsIcE4eqXXERKcS2_,
|
||||
_ZNSt11char_traitsIcE2eqERKcS2_)
|
||||
|
||||
#ifdef _GLIBCXX_SIZE_T_IS_UINT
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSs9_M_copyXXEPcPKcj,
|
||||
_ZNSs7_M_copyEPcPKcj)
|
||||
#else
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSs9_M_copyXXEPcPKcm,
|
||||
_ZNSs7_M_copyEPcPKcm)
|
||||
#endif
|
||||
|
||||
#ifdef _GLIBCXX_SIZE_T_IS_UINT
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSs9_M_moveXXEPcPKcj,
|
||||
_ZNSs7_M_moveEPcPKcj)
|
||||
#else
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSs9_M_moveXXEPcPKcm,
|
||||
_ZNSs7_M_moveEPcPKcm)
|
||||
#endif
|
||||
|
||||
#ifdef _GLIBCXX_SIZE_T_IS_UINT
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSs11_M_assignXXEPcjc,
|
||||
_ZNSs9_M_assignEPcjc)
|
||||
#else
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSs11_M_assignXXEPcmc,
|
||||
_ZNSs9_M_assignEPcmc)
|
||||
#endif
|
||||
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNKSs13_M_disjunctXXEPKc,
|
||||
_ZNKSs11_M_disjunctEPKc)
|
||||
|
||||
#ifdef _GLIBCXX_SIZE_T_IS_UINT
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNKSs17_M_check_lengthXXEjjPKc,
|
||||
_ZNKSs15_M_check_lengthEjjPKc)
|
||||
#else
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNKSs17_M_check_lengthXXEmmPKc,
|
||||
_ZNKSs15_M_check_lengthEmmPKc)
|
||||
#endif
|
||||
|
||||
#ifdef _GLIBCXX_SIZE_T_IS_UINT
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSs4_Rep28_M_set_length_and_sharableXXEj,
|
||||
_ZNSs4_Rep26_M_set_length_and_sharableEj)
|
||||
#else
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSs4_Rep28_M_set_length_and_sharableXXEm,
|
||||
_ZNSs4_Rep26_M_set_length_and_sharableEm)
|
||||
#endif
|
||||
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSi8ignoreXXEv, _ZNSi6ignoreEv)
|
||||
|
||||
#ifdef _GLIBCXX_PTRDIFF_T_IS_INT
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSi8ignoreXXEi, _ZNSi6ignoreEi)
|
||||
#else
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSi8ignoreXXEl, _ZNSi6ignoreEl)
|
||||
#endif
|
||||
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNKSt15basic_fstreamXXIcSt11char_traitsIcEE7is_openEv,
|
||||
_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv)
|
||||
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNKSt16basic_ifstreamXXIcSt11char_traitsIcEE7is_openEv,
|
||||
_ZNKSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv)
|
||||
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNKSt16basic_ofstreamXXIcSt11char_traitsIcEE7is_openEv,
|
||||
_ZNKSt14basic_ofstreamIcSt11char_traitsIcEE7is_openEv)
|
||||
|
||||
// Support for wchar_t.
|
||||
#ifdef _GLIBCXX_USE_WCHAR_T
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSt11char_traitsIwE4eqXXERKwS2_,
|
||||
_ZNSt11char_traitsIwE2eqERKwS2_)
|
||||
|
||||
#ifdef _GLIBCXX_SIZE_T_IS_UINT
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSbIwSt11char_traitsIwESaIwEE9_M_copyXXEPwPKwj,
|
||||
_ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwj)
|
||||
#else
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSbIwSt11char_traitsIwESaIwEE9_M_copyXXEPwPKwm,
|
||||
_ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwm)
|
||||
#endif
|
||||
|
||||
#ifdef _GLIBCXX_SIZE_T_IS_UINT
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSbIwSt11char_traitsIwESaIwEE9_M_moveXXEPwPKwj,
|
||||
_ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwj)
|
||||
#else
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSbIwSt11char_traitsIwESaIwEE9_M_moveXXEPwPKwm,
|
||||
_ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwm)
|
||||
#endif
|
||||
|
||||
#ifdef _GLIBCXX_SIZE_T_IS_UINT
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSbIwSt11char_traitsIwESaIwEE11_M_assignXXEPwjw,
|
||||
_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw)
|
||||
#else
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSbIwSt11char_traitsIwESaIwEE11_M_assignXXEPwmw,
|
||||
_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw)
|
||||
#endif
|
||||
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNKSbIwSt11char_traitsIwESaIwEE13_M_disjunctXXEPKw,
|
||||
_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw)
|
||||
|
||||
#ifdef _GLIBCXX_SIZE_T_IS_UINT
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNKSbIwSt11char_traitsIwESaIwEE17_M_check_lengthXXEjjPKc,
|
||||
_ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEjjPKc)
|
||||
#else
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNKSbIwSt11char_traitsIwESaIwEE17_M_check_lengthXXEmmPKc,
|
||||
_ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEmmPKc)
|
||||
#endif
|
||||
|
||||
#ifdef _GLIBCXX_SIZE_T_IS_UINT
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSbIwSt11char_traitsIwESaIwEE4_Rep28_M_set_length_and_sharableXXEj,
|
||||
_ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEj)
|
||||
#else
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSbIwSt11char_traitsIwESaIwEE4_Rep28_M_set_length_and_sharableXXEm,
|
||||
_ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEm)
|
||||
#endif
|
||||
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSt13basic_istreamIwSt11char_traitsIwEE8ignoreXXEv,
|
||||
_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEv)
|
||||
|
||||
#ifdef _GLIBCXX_PTRDIFF_T_IS_INT
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSt13basic_istreamIwSt11char_traitsIwEE8ignoreXXEi,
|
||||
_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi)
|
||||
#else
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNSt13basic_istreamIwSt11char_traitsIwEE8ignoreXXEl,
|
||||
_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEl)
|
||||
#endif
|
||||
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNKSt15basic_fstreamXXIwSt11char_traitsIwEE7is_openEv,
|
||||
_ZNKSt13basic_fstreamIwSt11char_traitsIwEE7is_openEv)
|
||||
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNKSt16basic_ifstreamXXIwSt11char_traitsIwEE7is_openEv,
|
||||
_ZNKSt14basic_ifstreamIwSt11char_traitsIwEE7is_openEv)
|
||||
|
||||
_GLIBCXX_APPLY_SYMVER(_ZNKSt16basic_ofstreamXXIwSt11char_traitsIwEE7is_openEv,
|
||||
_ZNKSt14basic_ofstreamIwSt11char_traitsIwEE7is_openEv)
|
||||
#endif
|
||||
} // anonymous namespace
|
||||
|
@@ -1,4 +1,4 @@
|
||||
// Optimizations for random number handling, generic version -*- C++ -*-
|
||||
// Optimizations for random number functions, x86 version -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2012-2013 Free Software Foundation, Inc.
|
||||
//
|
||||
@@ -30,9 +30,190 @@
|
||||
#ifndef _BITS_OPT_RANDOM_H
|
||||
#define _BITS_OPT_RANDOM_H 1
|
||||
|
||||
#include <x86intrin.h>
|
||||
|
||||
|
||||
#pragma GCC system_header
|
||||
|
||||
|
||||
namespace std _GLIBCXX_VISIBILITY(default)
|
||||
{
|
||||
_GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
|
||||
#ifdef __SSE3__
|
||||
template<>
|
||||
template<typename _UniformRandomNumberGenerator>
|
||||
void
|
||||
normal_distribution<double>::
|
||||
__generate(typename normal_distribution<double>::result_type* __f,
|
||||
typename normal_distribution<double>::result_type* __t,
|
||||
_UniformRandomNumberGenerator& __urng,
|
||||
const param_type& __param)
|
||||
{
|
||||
typedef uint64_t __uctype;
|
||||
|
||||
if (__f == __t)
|
||||
return;
|
||||
|
||||
if (_M_saved_available)
|
||||
{
|
||||
_M_saved_available = false;
|
||||
*__f++ = _M_saved * __param.stddev() + __param.mean();
|
||||
|
||||
if (__f == __t)
|
||||
return;
|
||||
}
|
||||
|
||||
constexpr uint64_t __maskval = 0xfffffffffffffull;
|
||||
static const __m128i __mask = _mm_set1_epi64x(__maskval);
|
||||
static const __m128i __two = _mm_set1_epi64x(0x4000000000000000ull);
|
||||
static const __m128d __three = _mm_set1_pd(3.0);
|
||||
const __m128d __av = _mm_set1_pd(__param.mean());
|
||||
|
||||
const __uctype __urngmin = __urng.min();
|
||||
const __uctype __urngmax = __urng.max();
|
||||
const __uctype __urngrange = __urngmax - __urngmin;
|
||||
const __uctype __uerngrange = __urngrange + 1;
|
||||
|
||||
while (__f + 1 < __t)
|
||||
{
|
||||
double __le;
|
||||
__m128d __x;
|
||||
do
|
||||
{
|
||||
union
|
||||
{
|
||||
__m128i __i;
|
||||
__m128d __d;
|
||||
} __v;
|
||||
|
||||
if (__urngrange > __maskval)
|
||||
{
|
||||
if (__detail::_Power_of_2(__uerngrange))
|
||||
__v.__i = _mm_and_si128(_mm_set_epi64x(__urng(),
|
||||
__urng()),
|
||||
__mask);
|
||||
else
|
||||
{
|
||||
const __uctype __uerange = __maskval + 1;
|
||||
const __uctype __scaling = __urngrange / __uerange;
|
||||
const __uctype __past = __uerange * __scaling;
|
||||
uint64_t __v1;
|
||||
do
|
||||
__v1 = __uctype(__urng()) - __urngmin;
|
||||
while (__v1 >= __past);
|
||||
__v1 /= __scaling;
|
||||
uint64_t __v2;
|
||||
do
|
||||
__v2 = __uctype(__urng()) - __urngmin;
|
||||
while (__v2 >= __past);
|
||||
__v2 /= __scaling;
|
||||
|
||||
__v.__i = _mm_set_epi64x(__v1, __v2);
|
||||
}
|
||||
}
|
||||
else if (__urngrange == __maskval)
|
||||
__v.__i = _mm_set_epi64x(__urng(), __urng());
|
||||
else if ((__urngrange + 2) * __urngrange >= __maskval
|
||||
&& __detail::_Power_of_2(__uerngrange))
|
||||
{
|
||||
uint64_t __v1 = __urng() * __uerngrange + __urng();
|
||||
uint64_t __v2 = __urng() * __uerngrange + __urng();
|
||||
|
||||
__v.__i = _mm_and_si128(_mm_set_epi64x(__v1, __v2),
|
||||
__mask);
|
||||
}
|
||||
else
|
||||
{
|
||||
size_t __nrng = 2;
|
||||
__uctype __high = __maskval / __uerngrange / __uerngrange;
|
||||
while (__high > __uerngrange)
|
||||
{
|
||||
++__nrng;
|
||||
__high /= __uerngrange;
|
||||
}
|
||||
const __uctype __highrange = __high + 1;
|
||||
const __uctype __scaling = __urngrange / __highrange;
|
||||
const __uctype __past = __highrange * __scaling;
|
||||
__uctype __tmp;
|
||||
|
||||
uint64_t __v1;
|
||||
do
|
||||
{
|
||||
do
|
||||
__tmp = __uctype(__urng()) - __urngmin;
|
||||
while (__tmp >= __past);
|
||||
__v1 = __tmp / __scaling;
|
||||
for (size_t __cnt = 0; __cnt < __nrng; ++__cnt)
|
||||
{
|
||||
__tmp = __v1;
|
||||
__v1 *= __uerngrange;
|
||||
__v1 += __uctype(__urng()) - __urngmin;
|
||||
}
|
||||
}
|
||||
while (__v1 > __maskval || __v1 < __tmp);
|
||||
|
||||
uint64_t __v2;
|
||||
do
|
||||
{
|
||||
do
|
||||
__tmp = __uctype(__urng()) - __urngmin;
|
||||
while (__tmp >= __past);
|
||||
__v2 = __tmp / __scaling;
|
||||
for (size_t __cnt = 0; __cnt < __nrng; ++__cnt)
|
||||
{
|
||||
__tmp = __v2;
|
||||
__v2 *= __uerngrange;
|
||||
__v2 += __uctype(__urng()) - __urngmin;
|
||||
}
|
||||
}
|
||||
while (__v2 > __maskval || __v2 < __tmp);
|
||||
|
||||
__v.__i = _mm_set_epi64x(__v1, __v2);
|
||||
}
|
||||
|
||||
__v.__i = _mm_or_si128(__v.__i, __two);
|
||||
__x = _mm_sub_pd(__v.__d, __three);
|
||||
__m128d __m = _mm_mul_pd(__x, __x);
|
||||
__le = _mm_cvtsd_f64(_mm_hadd_pd (__m, __m));
|
||||
}
|
||||
while (__le == 0.0 || __le >= 1.0);
|
||||
|
||||
double __mult = (std::sqrt(-2.0 * std::log(__le) / __le)
|
||||
* __param.stddev());
|
||||
|
||||
__x = _mm_add_pd(_mm_mul_pd(__x, _mm_set1_pd(__mult)), __av);
|
||||
|
||||
_mm_storeu_pd(__f, __x);
|
||||
__f += 2;
|
||||
}
|
||||
|
||||
if (__f != __t)
|
||||
{
|
||||
result_type __x, __y, __r2;
|
||||
|
||||
__detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
|
||||
__aurng(__urng);
|
||||
|
||||
do
|
||||
{
|
||||
__x = result_type(2.0) * __aurng() - 1.0;
|
||||
__y = result_type(2.0) * __aurng() - 1.0;
|
||||
__r2 = __x * __x + __y * __y;
|
||||
}
|
||||
while (__r2 > 1.0 || __r2 == 0.0);
|
||||
|
||||
const result_type __mult = std::sqrt(-2 * std::log(__r2) / __r2);
|
||||
_M_saved = __x * __mult;
|
||||
_M_saved_available = true;
|
||||
*__f = __y * __mult * __param.stddev() + __param.mean();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
_GLIBCXX_END_NAMESPACE_VERSION
|
||||
} // namespace
|
||||
|
||||
|
||||
#endif // _BITS_OPT_RANDOM_H
|
||||
|
@@ -75,4 +75,7 @@
|
||||
#define _GLIBCXX_LLP64 1
|
||||
#endif
|
||||
|
||||
// See libstdc++/59807
|
||||
#define _GTHREAD_USE_MUTEX_INIT_FUNC 1
|
||||
|
||||
#endif
|
||||
|
@@ -1,4 +1,4 @@
|
||||
// Optimizations for random number extensions, generic version -*- C++ -*-
|
||||
// Optimizations for random number extensions, x86 version -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2012-2013 Free Software Foundation, Inc.
|
||||
//
|
||||
@@ -22,7 +22,7 @@
|
||||
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
/** @file ext/opt_random.h
|
||||
/** @file ext/random.tcc
|
||||
* This is an internal header file, included by other library headers.
|
||||
* Do not attempt to use it directly. @headername{ext/random}
|
||||
*/
|
||||
@@ -32,7 +32,109 @@
|
||||
|
||||
#pragma GCC system_header
|
||||
|
||||
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||
|
||||
#ifdef __SSE2__
|
||||
|
||||
namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
|
||||
{
|
||||
_GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
|
||||
namespace {
|
||||
|
||||
template<size_t __sl1, size_t __sl2, size_t __sr1, size_t __sr2,
|
||||
uint32_t __msk1, uint32_t __msk2, uint32_t __msk3, uint32_t __msk4>
|
||||
inline __m128i __sse2_recursion(__m128i __a, __m128i __b,
|
||||
__m128i __c, __m128i __d)
|
||||
{
|
||||
__m128i __y = _mm_srli_epi32(__b, __sr1);
|
||||
__m128i __z = _mm_srli_si128(__c, __sr2);
|
||||
__m128i __v = _mm_slli_epi32(__d, __sl1);
|
||||
__z = _mm_xor_si128(__z, __a);
|
||||
__z = _mm_xor_si128(__z, __v);
|
||||
__m128i __x = _mm_slli_si128(__a, __sl2);
|
||||
__y = _mm_and_si128(__y, _mm_set_epi32(__msk4, __msk3, __msk2, __msk1));
|
||||
__z = _mm_xor_si128(__z, __x);
|
||||
return _mm_xor_si128(__z, __y);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
#define _GLIBCXX_OPT_HAVE_RANDOM_SFMT_GEN_READ 1
|
||||
template<typename _UIntType, size_t __m,
|
||||
size_t __pos1, size_t __sl1, size_t __sl2,
|
||||
size_t __sr1, size_t __sr2,
|
||||
uint32_t __msk1, uint32_t __msk2,
|
||||
uint32_t __msk3, uint32_t __msk4,
|
||||
uint32_t __parity1, uint32_t __parity2,
|
||||
uint32_t __parity3, uint32_t __parity4>
|
||||
void simd_fast_mersenne_twister_engine<_UIntType, __m,
|
||||
__pos1, __sl1, __sl2, __sr1, __sr2,
|
||||
__msk1, __msk2, __msk3, __msk4,
|
||||
__parity1, __parity2, __parity3,
|
||||
__parity4>::
|
||||
_M_gen_rand(void)
|
||||
{
|
||||
__m128i __r1 = _mm_load_si128(&_M_state[_M_nstate - 2]);
|
||||
__m128i __r2 = _mm_load_si128(&_M_state[_M_nstate - 1]);
|
||||
|
||||
size_t __i;
|
||||
for (__i = 0; __i < _M_nstate - __pos1; ++__i)
|
||||
{
|
||||
__m128i __r = __sse2_recursion<__sl1, __sl2, __sr1, __sr2,
|
||||
__msk1, __msk2, __msk3, __msk4>
|
||||
(_M_state[__i], _M_state[__i + __pos1], __r1, __r2);
|
||||
_mm_store_si128(&_M_state[__i], __r);
|
||||
__r1 = __r2;
|
||||
__r2 = __r;
|
||||
}
|
||||
for (; __i < _M_nstate; ++__i)
|
||||
{
|
||||
__m128i __r = __sse2_recursion<__sl1, __sl2, __sr1, __sr2,
|
||||
__msk1, __msk2, __msk3, __msk4>
|
||||
(_M_state[__i], _M_state[__i + __pos1 - _M_nstate], __r1, __r2);
|
||||
_mm_store_si128(&_M_state[__i], __r);
|
||||
__r1 = __r2;
|
||||
__r2 = __r;
|
||||
}
|
||||
|
||||
_M_pos = 0;
|
||||
}
|
||||
|
||||
|
||||
#define _GLIBCXX_OPT_HAVE_RANDOM_SFMT_OPERATOREQUAL 1
|
||||
template<typename _UIntType, size_t __m,
|
||||
size_t __pos1, size_t __sl1, size_t __sl2,
|
||||
size_t __sr1, size_t __sr2,
|
||||
uint32_t __msk1, uint32_t __msk2,
|
||||
uint32_t __msk3, uint32_t __msk4,
|
||||
uint32_t __parity1, uint32_t __parity2,
|
||||
uint32_t __parity3, uint32_t __parity4>
|
||||
bool
|
||||
operator==(const __gnu_cxx::simd_fast_mersenne_twister_engine<_UIntType,
|
||||
__m, __pos1, __sl1, __sl2, __sr1, __sr2,
|
||||
__msk1, __msk2, __msk3, __msk4,
|
||||
__parity1, __parity2, __parity3, __parity4>& __lhs,
|
||||
const __gnu_cxx::simd_fast_mersenne_twister_engine<_UIntType,
|
||||
__m, __pos1, __sl1, __sl2, __sr1, __sr2,
|
||||
__msk1, __msk2, __msk3, __msk4,
|
||||
__parity1, __parity2, __parity3, __parity4>& __rhs)
|
||||
{
|
||||
__m128i __res = _mm_cmpeq_epi8(__lhs._M_state[0], __rhs._M_state[0]);
|
||||
for (size_t __i = 1; __i < __lhs._M_nstate; ++__i)
|
||||
__res = _mm_and_si128(__res, _mm_cmpeq_epi8(__lhs._M_state[__i],
|
||||
__rhs._M_state[__i]));
|
||||
return (_mm_movemask_epi8(__res) == 0xffff
|
||||
&& __lhs._M_pos == __rhs._M_pos);
|
||||
}
|
||||
|
||||
|
||||
_GLIBCXX_END_NAMESPACE_VERSION
|
||||
} // namespace
|
||||
|
||||
#endif // __SSE2__
|
||||
|
||||
#endif // __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||
|
||||
#endif // _EXT_OPT_RANDOM_H
|
||||
|
Reference in New Issue
Block a user