New ACC version.
committer: mfx <mfx> 1134926345 +0000
This commit is contained in:
parent
b5318602d1
commit
ab50d28bc4
624
src/miniacc.h
624
src/miniacc.h
@ -36,7 +36,7 @@
|
||||
|
||||
#ifndef __ACC_H_INCLUDED
|
||||
#define __ACC_H_INCLUDED 1
|
||||
#define ACC_VERSION 20051106L
|
||||
#define ACC_VERSION 20051212L
|
||||
#if defined(__CYGWIN32__) && !defined(__CYGWIN__)
|
||||
# define __CYGWIN__ __CYGWIN32__
|
||||
#endif
|
||||
@ -292,6 +292,9 @@
|
||||
#if defined(__WATCOMC__) && (__WATCOMC__ < 900)
|
||||
# define ACC_BROKEN_INTEGRAL_CONSTANTS 1
|
||||
#endif
|
||||
#if defined(_CRAY) && defined(_CRAY1)
|
||||
# define ACC_BROKEN_SIGNED_RIGHT_SHIFT 1
|
||||
#endif
|
||||
#define ACC_CPP_STRINGIZE(x) #x
|
||||
#define ACC_CPP_MACRO_EXPAND(x) ACC_CPP_STRINGIZE(x)
|
||||
#define ACC_CPP_CONCAT2(a,b) a ## b
|
||||
@ -468,6 +471,9 @@
|
||||
# elif defined(__ultrix__) || defined(__ultrix)
|
||||
# define ACC_OS_POSIX_ULTRIX 1
|
||||
# define ACC_INFO_OS_POSIX "ultrix"
|
||||
# elif defined(_UNICOS)
|
||||
# define ACC_OS_POSIX_UNICOS 1
|
||||
# define ACC_INFO_OS_POSIX "unicos"
|
||||
# else
|
||||
# define ACC_OS_POSIX_UNKNOWN 1
|
||||
# define ACC_INFO_OS_POSIX "unknown"
|
||||
@ -609,9 +615,23 @@
|
||||
# define ACC_INFO_CC "Symantec C"
|
||||
# define ACC_INFO_CCVER ACC_CPP_MACRO_EXPAND(__SC__)
|
||||
#elif defined(__SUNPRO_C)
|
||||
# define ACC_CC_SUNPROC 1
|
||||
# define ACC_INFO_CC "Sun C"
|
||||
# define ACC_INFO_CCVER "unknown"
|
||||
# define ACC_INFO_CC "SunPro C"
|
||||
# if ((__SUNPRO_C)+0 > 0)
|
||||
# define ACC_CC_SUNPROC __SUNPRO_C
|
||||
# define ACC_INFO_CCVER ACC_CPP_MACRO_EXPAND(__SUNPRO_C)
|
||||
# else
|
||||
# define ACC_CC_SUNPROC 1
|
||||
# define ACC_INFO_CCVER "unknown"
|
||||
# endif
|
||||
#elif defined(__SUNPRO_CC)
|
||||
# define ACC_INFO_CC "SunPro C"
|
||||
# if ((__SUNPRO_CC)+0 > 0)
|
||||
# define ACC_CC_SUNPROC __SUNPRO_CC
|
||||
# define ACC_INFO_CCVER ACC_CPP_MACRO_EXPAND(__SUNPRO_CC)
|
||||
# else
|
||||
# define ACC_CC_SUNPROC 1
|
||||
# define ACC_INFO_CCVER "unknown"
|
||||
# endif
|
||||
#elif defined(__TINYC__)
|
||||
# define ACC_CC_TINYC 1
|
||||
# define ACC_INFO_CC "Tiny C"
|
||||
@ -644,6 +664,15 @@
|
||||
#if 0 && (ACC_CC_MSC && (_MSC_VER >= 1200)) && !defined(_MSC_FULL_VER)
|
||||
# error "ACC_CC_MSC: _MSC_FULL_VER is not defined"
|
||||
#endif
|
||||
#if !defined(__ACC_ARCH_OVERRIDE) && !defined(ACC_ARCH_GENERIC) && defined(_CRAY)
|
||||
# if (UINT_MAX > ACC_0xffffffffL) && defined(_CRAY)
|
||||
# if defined(_CRAYMPP) || defined(_CRAYT3D) || defined(_CRAYT3E)
|
||||
# define ACC_ARCH_CRAY_MPP 1
|
||||
# elif defined(_CRAY1)
|
||||
# define ACC_ARCH_CRAY_PVP 1
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
#if !defined(__ACC_ARCH_OVERRIDE)
|
||||
#if defined(ACC_ARCH_GENERIC)
|
||||
# define ACC_INFO_ARCH "generic"
|
||||
@ -654,6 +683,9 @@
|
||||
#elif defined(__alpha__) || defined(__alpha) || defined(_M_ALPHA)
|
||||
# define ACC_ARCH_ALPHA 1
|
||||
# define ACC_INFO_ARCH "alpha"
|
||||
#elif (ACC_ARCH_CRAY_MPP) && (defined(_CRAYT3D) || defined(_CRAYT3E))
|
||||
# define ACC_ARCH_ALPHA 1
|
||||
# define ACC_INFO_ARCH "alpha"
|
||||
#elif defined(__amd64__) || defined(__x86_64__) || defined(_M_AMD64)
|
||||
# define ACC_ARCH_AMD64 1
|
||||
# define ACC_INFO_ARCH "amd64"
|
||||
@ -718,7 +750,7 @@
|
||||
#elif (UINT_MAX == ACC_0xffffL) && defined(__MSP430__)
|
||||
# define ACC_ARCH_MSP430 1
|
||||
# define ACC_INFO_ARCH "msp430"
|
||||
#elif defined(__powerpc__) || defined(__powerpc) || defined(__ppc__) || defined(__PPC__) || defined(_M_PPC)
|
||||
#elif defined(__powerpc__) || defined(__powerpc) || defined(__ppc__) || defined(__PPC__) || defined(_M_PPC) || defined(_ARCH_PPC) || defined(_ARCH_PWR)
|
||||
# define ACC_ARCH_POWERPC 1
|
||||
# define ACC_INFO_ARCH "powerpc"
|
||||
#elif defined(__s390__) || defined(__s390) || defined(__s390x__) || defined(__s390x)
|
||||
@ -730,9 +762,26 @@
|
||||
#elif defined(__sparc__) || defined(__sparc) || defined(__sparcv8)
|
||||
# define ACC_ARCH_SPARC 1
|
||||
# define ACC_INFO_ARCH "sparc"
|
||||
#elif defined(__SPU__)
|
||||
# define ACC_ARCH_SPU 1
|
||||
# define ACC_INFO_ARCH "spu"
|
||||
#elif (UINT_MAX == ACC_0xffffL) && defined(__z80)
|
||||
# define ACC_ARCH_Z80 1
|
||||
# define ACC_INFO_ARCH "z80"
|
||||
#elif (ACC_ARCH_CRAY_PVP)
|
||||
# if defined(_CRAYSV1)
|
||||
# define ACC_ARCH_CRAY_SV1 1
|
||||
# define ACC_INFO_ARCH "cray_sv1"
|
||||
# elif (_ADDR64)
|
||||
# define ACC_ARCH_CRAY_T90 1
|
||||
# define ACC_INFO_ARCH "cray_t90"
|
||||
# elif (_ADDR32)
|
||||
# define ACC_ARCH_CRAY_YMP 1
|
||||
# define ACC_INFO_ARCH "cray_ymp"
|
||||
# else
|
||||
# define ACC_ARCH_CRAY_XMP 1
|
||||
# define ACC_INFO_ARCH "cray_xmp"
|
||||
# endif
|
||||
#else
|
||||
# define ACC_ARCH_UNKNOWN 1
|
||||
# define ACC_INFO_ARCH "unknown"
|
||||
@ -919,23 +968,27 @@ extern "C" {
|
||||
#else
|
||||
# error "FIXME - MCS51 __MODEL__"
|
||||
#endif
|
||||
#elif (ACC_ARCH_CRAY_PVP)
|
||||
# define ACC_MM_PVP 1
|
||||
#else
|
||||
# define ACC_MM_FLAT 1
|
||||
#endif
|
||||
#if (ACC_MM_FLAT)
|
||||
# define ACC_INFO_MM "flat"
|
||||
#elif (ACC_MM_TINY)
|
||||
# define ACC_INFO_MM "tiny"
|
||||
#elif (ACC_MM_SMALL)
|
||||
# define ACC_INFO_MM "small"
|
||||
#elif (ACC_MM_MEDIUM)
|
||||
# define ACC_INFO_MM "medium"
|
||||
#elif (ACC_MM_COMPACT)
|
||||
#if (ACC_MM_COMPACT)
|
||||
# define ACC_INFO_MM "compact"
|
||||
#elif (ACC_MM_LARGE)
|
||||
# define ACC_INFO_MM "large"
|
||||
#elif (ACC_MM_FLAT)
|
||||
# define ACC_INFO_MM "flat"
|
||||
#elif (ACC_MM_HUGE)
|
||||
# define ACC_INFO_MM "huge"
|
||||
#elif (ACC_MM_LARGE)
|
||||
# define ACC_INFO_MM "large"
|
||||
#elif (ACC_MM_MEDIUM)
|
||||
# define ACC_INFO_MM "medium"
|
||||
#elif (ACC_MM_PVP)
|
||||
# define ACC_INFO_MM "pvp"
|
||||
#elif (ACC_MM_SMALL)
|
||||
# define ACC_INFO_MM "small"
|
||||
#elif (ACC_MM_TINY)
|
||||
# define ACC_INFO_MM "tiny"
|
||||
#else
|
||||
# error "unknown memory model"
|
||||
#endif
|
||||
@ -972,7 +1025,9 @@ extern "C" {
|
||||
#endif
|
||||
#define __ACC_LSR(x,b) (((x)+0ul) >> (b))
|
||||
#if !defined(ACC_SIZEOF_SHORT)
|
||||
# if (USHRT_MAX == ACC_0xffffL)
|
||||
# if (ACC_ARCH_CRAY_PVP)
|
||||
# define ACC_SIZEOF_SHORT 8
|
||||
# elif (USHRT_MAX == ACC_0xffffL)
|
||||
# define ACC_SIZEOF_SHORT 2
|
||||
# elif (__ACC_LSR(USHRT_MAX,7) == 1)
|
||||
# define ACC_SIZEOF_SHORT 1
|
||||
@ -989,7 +1044,9 @@ extern "C" {
|
||||
# endif
|
||||
#endif
|
||||
#if !defined(ACC_SIZEOF_INT)
|
||||
# if (UINT_MAX == ACC_0xffffL)
|
||||
# if (ACC_ARCH_CRAY_PVP)
|
||||
# define ACC_SIZEOF_INT 8
|
||||
# elif (UINT_MAX == ACC_0xffffL)
|
||||
# define ACC_SIZEOF_INT 2
|
||||
# elif (UINT_MAX == ACC_0xffffffffL)
|
||||
# define ACC_SIZEOF_INT 4
|
||||
@ -1042,9 +1099,9 @@ extern "C" {
|
||||
# define ACC_SIZEOF_LONG_LONG 8
|
||||
#elif (ACC_CC_GNUC || ACC_CC_LLVM || ACC_CC_PATHSCALE)
|
||||
# define ACC_SIZEOF_LONG_LONG 8
|
||||
#elif ((ACC_OS_WIN32 || ACC_OS_WIN64) && ACC_CC_MSC && (_MSC_VER >= 1400))
|
||||
#elif ((ACC_OS_WIN32 || ACC_OS_WIN64 || defined(_WIN32)) && ACC_CC_MSC && (_MSC_VER >= 1400))
|
||||
# define ACC_SIZEOF_LONG_LONG 8
|
||||
#elif (ACC_OS_WIN64)
|
||||
#elif (ACC_OS_WIN64 || defined(_WIN64))
|
||||
# define ACC_SIZEOF___INT64 8
|
||||
#elif (ACC_ARCH_I386 && (ACC_CC_DMC))
|
||||
# define ACC_SIZEOF_LONG_LONG 8
|
||||
@ -1056,7 +1113,7 @@ extern "C" {
|
||||
# define ACC_SIZEOF_LONG_LONG 8
|
||||
#elif (ACC_ARCH_I386 && (ACC_CC_INTELC || ACC_CC_MSC))
|
||||
# define ACC_SIZEOF___INT64 8
|
||||
#elif (ACC_OS_WIN32 && (ACC_CC_MSC))
|
||||
#elif ((ACC_OS_WIN32 || defined(_WIN32)) && (ACC_CC_MSC))
|
||||
# define ACC_SIZEOF___INT64 8
|
||||
#elif (ACC_ARCH_I386 && (ACC_CC_BORLANDC && (__BORLANDC__ >= 0x0520)))
|
||||
# define ACC_SIZEOF___INT64 8
|
||||
@ -1064,7 +1121,7 @@ extern "C" {
|
||||
# define ACC_SIZEOF___INT64 8
|
||||
#elif (ACC_CC_WATCOMC && defined(_INTEGRAL_MAX_BITS) && (_INTEGRAL_MAX_BITS == 64))
|
||||
# define ACC_SIZEOF___INT64 8
|
||||
#elif (ACC_OS_OS400) && defined(__LLP64_IFC__)
|
||||
#elif (ACC_OS_OS400 || defined(__OS400__)) && defined(__LLP64_IFC__)
|
||||
# define ACC_SIZEOF_LONG_LONG 8
|
||||
#elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64)
|
||||
# define ACC_SIZEOF_LONG_LONG 8
|
||||
@ -1125,11 +1182,11 @@ extern "C" {
|
||||
#elif defined(__LLP64__) || defined(__LLP64) || defined(_LLP64) || defined(_WIN64)
|
||||
# define __ACC_WORDSIZE 8
|
||||
# define ACC_SIZEOF_VOID_P 8
|
||||
#elif (ACC_OS_OS400) && defined(__LLP64_IFC__)
|
||||
#elif (ACC_OS_OS400 || defined(__OS400__)) && defined(__LLP64_IFC__)
|
||||
# define ACC_SIZEOF_VOID_P ACC_SIZEOF_LONG
|
||||
# define ACC_SIZEOF_SIZE_T ACC_SIZEOF_LONG
|
||||
# define ACC_SIZEOF_PTRDIFF_T ACC_SIZEOF_LONG
|
||||
#elif (ACC_OS_OS400)
|
||||
#elif (ACC_OS_OS400 || defined(__OS400__))
|
||||
# define __ACC_WORDSIZE ACC_SIZEOF_LONG
|
||||
# define ACC_SIZEOF_VOID_P 16
|
||||
# define ACC_SIZEOF_SIZE_T ACC_SIZEOF_LONG
|
||||
@ -1138,6 +1195,11 @@ extern "C" {
|
||||
# define ACC_SIZEOF_VOID_P 8
|
||||
# define ACC_SIZEOF_SIZE_T ACC_SIZEOF_LONG
|
||||
# define ACC_SIZEOF_PTRDIFF_T ACC_SIZEOF_LONG
|
||||
#elif (ACC_ARCH_SPU)
|
||||
# if 0
|
||||
# define __ACC_WORDSIZE 16
|
||||
# endif
|
||||
# define ACC_SIZEOF_VOID_P 4
|
||||
#else
|
||||
# define ACC_SIZEOF_VOID_P ACC_SIZEOF_LONG
|
||||
#endif
|
||||
@ -1177,7 +1239,9 @@ extern "C" {
|
||||
# undef ACC_ABI_BIG_ENDIAN
|
||||
# undef ACC_ABI_LITTLE_ENDIAN
|
||||
#elif !defined(ACC_ABI_BIG_ENDIAN) && !defined(ACC_ABI_LITTLE_ENDIAN)
|
||||
#if (ACC_ARCH_ALPHA || ACC_ARCH_AMD64 || ACC_ARCH_CRIS || ACC_ARCH_IA64 || ACC_ARCH_I086 || ACC_ARCH_I386 || ACC_ARCH_MSP430)
|
||||
#if (ACC_ARCH_ALPHA) && (ACC_ARCH_CRAY_MPP)
|
||||
# define ACC_ABI_BIG_ENDIAN 1
|
||||
#elif (ACC_ARCH_ALPHA || ACC_ARCH_AMD64 || ACC_ARCH_CRIS || ACC_ARCH_IA64 || ACC_ARCH_I086 || ACC_ARCH_I386 || ACC_ARCH_MSP430)
|
||||
# define ACC_ABI_LITTLE_ENDIAN 1
|
||||
#elif (ACC_ARCH_M68K || ACC_ARCH_S390)
|
||||
# define ACC_ABI_BIG_ENDIAN 1
|
||||
@ -1308,7 +1372,9 @@ extern "C" {
|
||||
#endif
|
||||
#endif
|
||||
#if !defined(__acc_noinline)
|
||||
#if (ACC_CC_GNUC >= 0x030200ul)
|
||||
#if 1 && (ACC_ARCH_I386) && (ACC_CC_GNUC >= 0x040000ul)
|
||||
# define __acc_noinline __attribute__((__noinline__,__used__))
|
||||
#elif (ACC_CC_GNUC >= 0x030200ul)
|
||||
# define __acc_noinline __attribute__((__noinline__))
|
||||
#elif (ACC_CC_INTELC && (__INTEL_COMPILER >= 600) && (ACC_OS_WIN32 || ACC_OS_WIN64))
|
||||
# define __acc_noinline __declspec(noinline)
|
||||
@ -1344,13 +1410,13 @@ extern "C" {
|
||||
#if !defined(__acc_nothrow)
|
||||
#if (ACC_CC_GNUC >= 0x030300ul)
|
||||
# define __acc_nothrow __attribute__((__nothrow__))
|
||||
#elif (ACC_CC_INTELC && (__INTEL_COMPILER >= 450) && (ACC_OS_WIN32 || ACC_OS_WIN64))
|
||||
#elif (ACC_CC_INTELC && (__INTEL_COMPILER >= 450) && (ACC_OS_WIN32 || ACC_OS_WIN64)) && defined(__cplusplus)
|
||||
# define __acc_nothrow __declspec(nothrow)
|
||||
#elif (ACC_CC_INTELC && (__INTEL_COMPILER >= 800) && (ACC_OS_POSIX))
|
||||
# define __acc_nothrow __attribute__((__nothrow__))
|
||||
#elif (ACC_CC_LLVM || ACC_CC_PATHSCALE)
|
||||
# define __acc_nothrow __attribute__((__nothrow__))
|
||||
#elif (ACC_CC_MSC && (_MSC_VER >= 1200))
|
||||
#elif (ACC_CC_MSC && (_MSC_VER >= 1200)) && defined(__cplusplus)
|
||||
# define __acc_nothrow __declspec(nothrow)
|
||||
#endif
|
||||
#endif
|
||||
@ -1694,33 +1760,24 @@ extern "C" {
|
||||
#define HAVE_SYS_STAT_H 1
|
||||
#define HAVE_SYS_TIME_H 1
|
||||
#define HAVE_SYS_TYPES_H 1
|
||||
#undef HAVE_ALLOCA_H
|
||||
#undef HAVE_CONIO_H
|
||||
#undef HAVE_DIRECT_H
|
||||
#undef HAVE_DOS_H
|
||||
#undef HAVE_IO_H
|
||||
#undef HAVE_SHARE_H
|
||||
#undef HAVE_STDINT_H
|
||||
#undef HAVE_STRINGS_H
|
||||
#undef HAVE_SYS_UTIME_H
|
||||
#undef HAVE_SYS_WAIT_H
|
||||
#if (ACC_OS_POSIX)
|
||||
# if (ACC_LIBC_DIETLIBC || ACC_LIBC_GLIBC || ACC_LIBC_UCLIBC)
|
||||
# define HAVE_STRINGS_H 1
|
||||
# define HAVE_SYS_WAIT_H 1
|
||||
# if (ACC_OS_POSIX_AIX)
|
||||
# define HAVE_SYS_RESOURCE_H 1
|
||||
# elif (ACC_OS_POSIX_FREEBSD || ACC_OS_POSIX_MACOSX || ACC_OS_POSIX_NETBSD || ACC_OS_POSIX_OPENBSD)
|
||||
# define HAVE_STRINGS_H 1
|
||||
# endif
|
||||
# if (ACC_OS_POSIX_FREEBSD || ACC_OS_POSIX_MACOSX || ACC_OS_POSIX_NETBSD || ACC_OS_POSIX_OPENBSD)
|
||||
# undef HAVE_MALLOC_H
|
||||
# elif (ACC_OS_POSIX_HPUX || ACC_OS_POSIX_INTERIX)
|
||||
# define HAVE_ALLOCA_H 1
|
||||
# elif (ACC_OS_POSIX_MACOSX && ACC_LIBC_MSL)
|
||||
# undef HAVE_SYS_TIME_H
|
||||
# undef HAVE_SYS_TYPES_H
|
||||
# elif (ACC_OS_POSIX_SOLARIS || ACC_OS_POSIX_SUNOS)
|
||||
# define HAVE_ALLOCA_H 1
|
||||
# endif
|
||||
# if (ACC_OS_POSIX_MACOSX && ACC_LIBC_MSL)
|
||||
# undef HAVE_SYS_TIME_H
|
||||
# undef HAVE_SYS_TYPES_H
|
||||
# if (ACC_LIBC_DIETLIBC || ACC_LIBC_GLIBC || ACC_LIBC_UCLIBC)
|
||||
# define HAVE_STRINGS_H 1
|
||||
# define HAVE_SYS_RESOURCE_H 1
|
||||
# define HAVE_SYS_WAIT_H 1
|
||||
# endif
|
||||
# if (ACC_LIBC_NEWLIB)
|
||||
# undef HAVE_STRINGS_H
|
||||
@ -1892,6 +1949,9 @@ extern "C" {
|
||||
#if (ACC_OS_CONSOLE)
|
||||
# undef HAVE_DIRENT_H
|
||||
#endif
|
||||
#if (ACC_OS_EMBEDDED)
|
||||
# undef HAVE_DIRENT_H
|
||||
#endif
|
||||
#if (ACC_LIBC_ISOC90 || ACC_LIBC_ISOC99)
|
||||
# undef HAVE_DIRENT_H
|
||||
# undef HAVE_UNISTD_H
|
||||
@ -1974,12 +2034,21 @@ extern "C" {
|
||||
# define HAVE_STRNICMP 1
|
||||
#endif
|
||||
#if (ACC_OS_POSIX)
|
||||
# if (ACC_OS_POSIX_AIX)
|
||||
# define HAVE_GETRUSAGE 1
|
||||
# elif (ACC_OS_POSIX_MACOSX && ACC_LIBC_MSL)
|
||||
# undef HAVE_CHOWN
|
||||
# undef HAVE_LSTAT
|
||||
# elif (ACC_OS_POSIX_UNICOS)
|
||||
# undef HAVE_ALLOCA
|
||||
# undef HAVE_SNPRINTF
|
||||
# undef HAVE_VSNPRINTF
|
||||
# endif
|
||||
# if (ACC_CC_TINYC)
|
||||
# undef HAVE_ALLOCA
|
||||
# endif
|
||||
# if (ACC_OS_POSIX_MACOSX && ACC_LIBC_MSL)
|
||||
# undef HAVE_CHOWN
|
||||
# undef HAVE_LSTAT
|
||||
# if (ACC_LIBC_DIETLIBC || ACC_LIBC_GLIBC || ACC_LIBC_UCLIBC)
|
||||
# define HAVE_GETRUSAGE 1
|
||||
# endif
|
||||
#elif (ACC_OS_CYGWIN)
|
||||
# if (ACC_CC_GNUC < 0x025a00ul)
|
||||
@ -2247,7 +2316,7 @@ __acc_gnuc_extension__ typedef unsigned long long acc_ullong_t;
|
||||
#elif (ACC_SIZEOF_SHORT == 2)
|
||||
# define acc_int16e_t short int
|
||||
# define acc_uint16e_t unsigned short int
|
||||
#elif 1 && !defined(ACC_CFG_TYPE_NO_MODE_HI) && (ACC_CC_GNUC >= 0x025f00ul)
|
||||
#elif 1 && !defined(ACC_CFG_TYPE_NO_MODE_HI) && (ACC_CC_GNUC >= 0x025f00ul || ACC_CC_LLVM)
|
||||
typedef int __acc_int16e_hi_t __attribute__((__mode__(__HI__)));
|
||||
typedef unsigned int __acc_uint16e_hi_t __attribute__((__mode__(__HI__)));
|
||||
# define acc_int16e_t __acc_int16e_hi_t
|
||||
@ -2274,7 +2343,7 @@ __acc_gnuc_extension__ typedef unsigned long long acc_ullong_t;
|
||||
#elif (ACC_SIZEOF_LONG_LONG == 4)
|
||||
# define acc_int32e_t acc_llong_t
|
||||
# define acc_uint32e_t acc_ullong_t
|
||||
#elif 1 && !defined(ACC_CFG_TYPE_NO_MODE_SI) && (ACC_CC_GNUC >= 0x025f00ul) && (__INT_MAX__+0 > 2147483647L)
|
||||
#elif 1 && !defined(ACC_CFG_TYPE_NO_MODE_SI) && (ACC_CC_GNUC >= 0x025f00ul || ACC_CC_LLVM) && (__INT_MAX__+0 > 2147483647L)
|
||||
typedef int __acc_int32e_si_t __attribute__((__mode__(__SI__)));
|
||||
typedef unsigned int __acc_uint32e_si_t __attribute__((__mode__(__SI__)));
|
||||
# define acc_int32e_t __acc_int32e_si_t
|
||||
@ -2422,6 +2491,14 @@ __acc_gnuc_extension__ typedef unsigned long long acc_ullong_t;
|
||||
# define acc_word_t acc_uint64l_t
|
||||
# define acc_sword_t acc_int64l_t
|
||||
# define ACC_SIZEOF_ACC_WORD_T ACC_SIZEOF_ACC_INT64L_T
|
||||
#elif (ACC_ARCH_SPU) && (ACC_CC_GNUC)
|
||||
#if 0
|
||||
typedef unsigned acc_word_t __attribute__((__mode__(__V16QI__)));
|
||||
typedef int acc_sword_t __attribute__((__mode__(__V16QI__)));
|
||||
# define acc_word_t acc_word_t
|
||||
# define acc_sword_t acc_sword_t
|
||||
# define ACC_SIZEOF_ACC_WORD_T 16
|
||||
#endif
|
||||
#else
|
||||
# error "acc_word_t"
|
||||
#endif
|
||||
@ -2647,7 +2724,7 @@ __acc_gnuc_extension__ typedef unsigned long long acc_ullong_t;
|
||||
#elif (ACC_SIZEOF_SHORT == 2)
|
||||
# define acc_int16e_t short int
|
||||
# define acc_uint16e_t unsigned short int
|
||||
#elif 1 && !defined(ACC_CFG_TYPE_NO_MODE_HI) && (ACC_CC_GNUC >= 0x025f00ul)
|
||||
#elif 1 && !defined(ACC_CFG_TYPE_NO_MODE_HI) && (ACC_CC_GNUC >= 0x025f00ul || ACC_CC_LLVM)
|
||||
typedef int __acc_int16e_hi_t __attribute__((__mode__(__HI__)));
|
||||
typedef unsigned int __acc_uint16e_hi_t __attribute__((__mode__(__HI__)));
|
||||
# define acc_int16e_t __acc_int16e_hi_t
|
||||
@ -2674,7 +2751,7 @@ __acc_gnuc_extension__ typedef unsigned long long acc_ullong_t;
|
||||
#elif (ACC_SIZEOF_LONG_LONG == 4)
|
||||
# define acc_int32e_t acc_llong_t
|
||||
# define acc_uint32e_t acc_ullong_t
|
||||
#elif 1 && !defined(ACC_CFG_TYPE_NO_MODE_SI) && (ACC_CC_GNUC >= 0x025f00ul) && (__INT_MAX__+0 > 2147483647L)
|
||||
#elif 1 && !defined(ACC_CFG_TYPE_NO_MODE_SI) && (ACC_CC_GNUC >= 0x025f00ul || ACC_CC_LLVM) && (__INT_MAX__+0 > 2147483647L)
|
||||
typedef int __acc_int32e_si_t __attribute__((__mode__(__SI__)));
|
||||
typedef unsigned int __acc_uint32e_si_t __attribute__((__mode__(__SI__)));
|
||||
# define acc_int32e_t __acc_int32e_si_t
|
||||
@ -2822,6 +2899,14 @@ __acc_gnuc_extension__ typedef unsigned long long acc_ullong_t;
|
||||
# define acc_word_t acc_uint64l_t
|
||||
# define acc_sword_t acc_int64l_t
|
||||
# define ACC_SIZEOF_ACC_WORD_T ACC_SIZEOF_ACC_INT64L_T
|
||||
#elif (ACC_ARCH_SPU) && (ACC_CC_GNUC)
|
||||
#if 0
|
||||
typedef unsigned acc_word_t __attribute__((__mode__(__V16QI__)));
|
||||
typedef int acc_sword_t __attribute__((__mode__(__V16QI__)));
|
||||
# define acc_word_t acc_word_t
|
||||
# define acc_sword_t acc_sword_t
|
||||
# define ACC_SIZEOF_ACC_WORD_T 16
|
||||
#endif
|
||||
#else
|
||||
# error "acc_word_t"
|
||||
#endif
|
||||
@ -3240,6 +3325,9 @@ typedef unsigned short wchar_t;
|
||||
# include <i86.h>
|
||||
# endif
|
||||
#endif
|
||||
#if defined(HAVE_SYS_RESOURCE_H)
|
||||
# include <sys/resource.h>
|
||||
#endif
|
||||
#if (ACC_OS_DOS16 || ACC_OS_OS216 || ACC_OS_WIN16)
|
||||
# if defined(FP_OFF)
|
||||
# define ACC_PTR_FP_OFF(x) FP_OFF(x)
|
||||
@ -3418,6 +3506,7 @@ ACCLIB_EXTERN(void, acc_ua_set_be64) (acc_hvoid_p, acc_uint64l_t);
|
||||
ACCLIB_EXTERN(acc_uint64l_t, acc_ua_get_le64) (const acc_hvoid_p);
|
||||
ACCLIB_EXTERN(void, acc_ua_set_le64) (acc_hvoid_p, acc_uint64l_t);
|
||||
#endif
|
||||
ACCLIB_EXTERN_NOINLINE(short, acc_vget_short) (short, int);
|
||||
ACCLIB_EXTERN_NOINLINE(int, acc_vget_int) (int, int);
|
||||
ACCLIB_EXTERN_NOINLINE(long, acc_vget_long) (long, int);
|
||||
#if defined(acc_int64l_t)
|
||||
@ -3558,6 +3647,8 @@ ACCLIB_EXTERN_NOINLINE(int, acc_debug_align_check_query) (void);
|
||||
ACCLIB_EXTERN_NOINLINE(int, acc_debug_align_check_enable) (int);
|
||||
ACCLIB_EXTERN_NOINLINE(int, acc_debug_running_on_valgrind) (void);
|
||||
#if !defined(acc_int64l_t) || defined(ACC_CFG_NO_DOUBLE)
|
||||
# undef __ACCLIB_PCLOCK_USE_RDTSC
|
||||
# undef __ACCLIB_PCLOCK_USE_PERFCTR
|
||||
# undef __ACCLIB_UCLOCK_USE_RDTSC
|
||||
# undef __ACCLIB_UCLOCK_USE_PERFCTR
|
||||
#else
|
||||
@ -3594,8 +3685,54 @@ ACCLIB_EXTERN(int, acc_perfctr_flush_cpu_cache) (acc_perfctr_handle_p, unsigned)
|
||||
#if defined(acc_int32e_t)
|
||||
ACCLIB_EXTERN(int, acc_tsc_read) (acc_uint32e_t*);
|
||||
#else
|
||||
# undef __ACCLIB_PCLOCK_USE_RDTSC
|
||||
# undef __ACCLIB_UCLOCK_USE_RDTSC
|
||||
#endif
|
||||
struct acc_pclock_handle_t;
|
||||
struct acc_pclock_t;
|
||||
typedef struct acc_pclock_handle_t acc_pclock_handle_t;
|
||||
typedef struct acc_pclock_t acc_pclock_t;
|
||||
#ifndef acc_pclock_handle_p
|
||||
#define acc_pclock_handle_p acc_pclock_handle_t *
|
||||
#endif
|
||||
#ifndef acc_pclock_p
|
||||
#define acc_pclock_p acc_pclock_t *
|
||||
#endif
|
||||
#define ACC_PCLOCK_REALTIME 0
|
||||
#define ACC_PCLOCK_MONOTONIC 1
|
||||
#define ACC_PCLOCK_PROCESS_CPUTIME_ID 2
|
||||
#define ACC_PCLOCK_THREAD_CPUTIME_ID 3
|
||||
#define ACC_PCLOCK_REALTIME_HR 4
|
||||
#define ACC_PCLOCK_MONOTONIC_HR 5
|
||||
struct acc_pclock_handle_t {
|
||||
acclib_handle_t h;
|
||||
int mode;
|
||||
const char* name;
|
||||
int (*gettime) (acc_pclock_handle_p, acc_pclock_p);
|
||||
#if defined(acc_int64l_t)
|
||||
acc_int64l_t ticks_base;
|
||||
#endif
|
||||
#if defined(__ACCLIB_PCLOCK_USE_PERFCTR)
|
||||
acc_perfctr_handle_t pch;
|
||||
#endif
|
||||
};
|
||||
struct acc_pclock_t {
|
||||
#if defined(acc_int64l_t)
|
||||
acc_int64l_t tv_sec;
|
||||
#else
|
||||
acc_int32l_t tv_sec_high;
|
||||
acc_uint32l_t tv_sec_low;
|
||||
#endif
|
||||
acc_uint32l_t tv_nsec;
|
||||
};
|
||||
ACCLIB_EXTERN(int, acc_pclock_open) (acc_pclock_handle_p, int);
|
||||
ACCLIB_EXTERN(int, acc_pclock_open_default) (acc_pclock_handle_p);
|
||||
ACCLIB_EXTERN(int, acc_pclock_close) (acc_pclock_handle_p);
|
||||
ACCLIB_EXTERN(void, acc_pclock_read) (acc_pclock_handle_p, acc_pclock_p);
|
||||
#if !defined(ACC_CFG_NO_DOUBLE)
|
||||
ACCLIB_EXTERN(double, acc_pclock_get_elapsed) (acc_pclock_handle_p, const acc_pclock_p, const acc_pclock_p);
|
||||
#endif
|
||||
ACCLIB_EXTERN(int, acc_pclock_flush_cpu_cache) (acc_pclock_handle_p, unsigned);
|
||||
#if !defined(acc_int64l_t) || defined(ACC_CFG_NO_DOUBLE)
|
||||
# undef __ACCLIB_UCLOCK_USE_QPC
|
||||
#elif (ACC_OS_CYGWIN || ACC_OS_EMX || ACC_OS_WIN32 || ACC_OS_WIN64) && (ACC_HAVE_WINDOWS_H)
|
||||
@ -3606,6 +3743,7 @@ ACCLIB_EXTERN(int, acc_tsc_read) (acc_uint32e_t*);
|
||||
typedef struct {
|
||||
acclib_handle_t h;
|
||||
int mode;
|
||||
const char* name;
|
||||
#if defined(__ACCLIB_UCLOCK_USE_PERFCTR)
|
||||
acc_perfctr_handle_t pch;
|
||||
#endif
|
||||
@ -3913,7 +4051,9 @@ ACCLIB_EXTERN(int, acc_spawnve) (int mode, const char* fn, const char* const * a
|
||||
ACCCHK_ASSERT(__ACC_MASK_GEN(1U,SIZEOF_INT*8) == ~(0u))
|
||||
ACCCHK_ASSERT(__ACC_MASK_GEN(1UL,SIZEOF_LONG*8) == ~(0ul))
|
||||
#endif
|
||||
#if !defined(ACC_BROKEN_SIGNED_RIGHT_SHIFT)
|
||||
ACCCHK_ASSERT(((-1) >> 7) == -1)
|
||||
#endif
|
||||
ACCCHK_ASSERT(((1) >> 7) == 0)
|
||||
ACCCHK_ASSERT_IS_SIGNED_T(signed char)
|
||||
ACCCHK_ASSERT_IS_UNSIGNED_T(unsigned char)
|
||||
@ -4020,11 +4160,15 @@ ACCLIB_EXTERN(int, acc_spawnve) (int mode, const char* fn, const char* const * a
|
||||
ACCCHK_ASSERT((((1ul << 31) + 1) >> 31) == 1)
|
||||
#endif
|
||||
#if (ACC_CC_TURBOC && (__TURBOC__ < 0x0150))
|
||||
#elif 1 && (ACC_CC_SUNPROC) && !defined(ACCCHK_CFG_PEDANTIC)
|
||||
#else
|
||||
ACCCHK_ASSERT((1 << (8*SIZEOF_INT-1)) < 0)
|
||||
#endif
|
||||
ACCCHK_ASSERT((1u << (8*SIZEOF_INT-1)) > 0)
|
||||
#if 1 && (ACC_CC_SUNPROC) && !defined(ACCCHK_CFG_PEDANTIC)
|
||||
#else
|
||||
ACCCHK_ASSERT((1l << (8*SIZEOF_LONG-1)) < 0)
|
||||
#endif
|
||||
ACCCHK_ASSERT((1ul << (8*SIZEOF_LONG-1)) > 0)
|
||||
#if defined(acc_int16e_t)
|
||||
ACCCHK_ASSERT(sizeof(acc_int16e_t) == 2)
|
||||
@ -4225,7 +4369,8 @@ ACCLIB_EXTERN(int, acc_spawnve) (int mode, const char* fn, const char* const * a
|
||||
#endif
|
||||
#if (ACC_CC_KEILC)
|
||||
#elif (ACC_CC_NDPC)
|
||||
#elif 1 && (ACC_CC_LCC || ACC_CC_LCCWIN32)
|
||||
#elif 1 && (ACC_CC_LCC || ACC_CC_LCCWIN32) && !defined(ACCCHK_CFG_PEDANTIC)
|
||||
#elif 1 && (ACC_CC_SUNPROC) && !defined(ACCCHK_CFG_PEDANTIC)
|
||||
#elif !defined(ACC_BROKEN_INTEGRAL_PROMOTION) && (SIZEOF_INT > 1)
|
||||
ACCCHK_ASSERT( (((unsigned char)128) << (int)(8*sizeof(int)-8)) < 0)
|
||||
#endif
|
||||
@ -4471,8 +4616,13 @@ ACCLIB_PUBLIC(void, acc_ua_set_le64) (acc_hvoid_p p, acc_uint64l_t v)
|
||||
# define ACCLIB_PUBLIC_NOINLINE(r,f) r __ACCLIB_FUNCNAME(f)
|
||||
# endif
|
||||
#endif
|
||||
#if (ACC_CC_GNUC >= 0x030400ul) || (ACC_CC_LLVM)
|
||||
extern void* volatile __acc_vget_ptr;
|
||||
void* volatile __attribute__((__used__)) __acc_vget_ptr = (void *) 0;
|
||||
#else
|
||||
extern void* volatile __acc_vget_ptr;
|
||||
void* volatile __acc_vget_ptr = (void *) 0;
|
||||
#endif
|
||||
#ifndef __ACC_VGET_BODY
|
||||
#define __ACC_VGET_BODY(T) \
|
||||
if __acc_unlikely(__acc_vget_ptr) { \
|
||||
@ -4482,6 +4632,10 @@ void* volatile __acc_vget_ptr = (void *) 0;
|
||||
} \
|
||||
return v;
|
||||
#endif
|
||||
ACCLIB_PUBLIC_NOINLINE(short, acc_vget_short) (short v, int expr)
|
||||
{
|
||||
__ACC_VGET_BODY(short)
|
||||
}
|
||||
ACCLIB_PUBLIC_NOINLINE(int, acc_vget_int) (int v, int expr)
|
||||
{
|
||||
__ACC_VGET_BODY(int)
|
||||
@ -5151,6 +5305,349 @@ ACCLIB_PUBLIC(long, acc_safe_hwrite) (int fd, const acc_hvoid_p buf, long size)
|
||||
return l;
|
||||
}
|
||||
#endif
|
||||
#if defined(ACC_WANT_ACCLIB_PCLOCK)
|
||||
# undef ACC_WANT_ACCLIB_PCLOCK
|
||||
#define __ACCLIB_PCLOCK_CH_INCLUDED 1
|
||||
#if !defined(ACCLIB_PUBLIC)
|
||||
# define ACCLIB_PUBLIC(r,f) r __ACCLIB_FUNCNAME(f)
|
||||
#endif
|
||||
#if defined(HAVE_GETTIMEOFDAY)
|
||||
#ifndef acc_pclock_read_gettimeofday
|
||||
#define acc_pclock_read_gettimeofday acc_pclock_read_gettimeofday
|
||||
#endif
|
||||
static int acc_pclock_read_gettimeofday(acc_pclock_handle_p h, acc_pclock_p c)
|
||||
{
|
||||
struct timeval tv;
|
||||
if (gettimeofday(&tv, 0) != 0)
|
||||
return -1;
|
||||
#if defined(acc_int64l_t)
|
||||
c->tv_sec = tv.tv_sec;
|
||||
#else
|
||||
c->tv_sec_high = 0;
|
||||
c->tv_sec_low = tv.tv_sec;
|
||||
#endif
|
||||
c->tv_nsec = tv.tv_usec * 1000;
|
||||
ACC_UNUSED(h); return 0;
|
||||
}
|
||||
#endif
|
||||
#if defined(CLOCKS_PER_SEC)
|
||||
#ifndef acc_pclock_read_clock
|
||||
#define acc_pclock_read_clock acc_pclock_read_clock
|
||||
#endif
|
||||
static int acc_pclock_read_clock(acc_pclock_handle_p h, acc_pclock_p c)
|
||||
{
|
||||
clock_t ticks;
|
||||
double secs;
|
||||
#if defined(acc_int64l_t)
|
||||
acc_uint64l_t nsecs;
|
||||
ticks = clock();
|
||||
secs = (double)ticks / (CLOCKS_PER_SEC);
|
||||
nsecs = (acc_uint64l_t) (secs * 1000000000.0);
|
||||
c->tv_sec = nsecs / 1000000000ul;
|
||||
c->tv_nsec = (acc_uint32l_t) (nsecs % 1000000000ul);
|
||||
#else
|
||||
ticks = clock();
|
||||
secs = (double)ticks / (CLOCKS_PER_SEC);
|
||||
c->tv_sec_high = 0;
|
||||
c->tv_sec_low = (acc_uint32l_t) (secs + 0.5);
|
||||
c->tv_nsec = 0;
|
||||
#endif
|
||||
ACC_UNUSED(h); return 0;
|
||||
}
|
||||
#endif
|
||||
#if (ACC_OS_DOS32 && ACC_CC_GNUC) && defined(__DJGPP__) && defined(UCLOCKS_PER_SEC)
|
||||
#ifndef acc_pclock_read_uclock
|
||||
#define acc_pclock_read_uclock acc_pclock_read_uclock
|
||||
#endif
|
||||
static int acc_pclock_read_uclock(acc_pclock_handle_p h, acc_pclock_p c)
|
||||
{
|
||||
acc_uint64l_t ticks;
|
||||
double secs;
|
||||
acc_uint64l_t nsecs;
|
||||
ticks = uclock();
|
||||
secs = (double)ticks / (UCLOCKS_PER_SEC);
|
||||
nsecs = (acc_uint64l_t) (secs * 1000000000.0);
|
||||
c->tv_sec = nsecs / 1000000000ul;
|
||||
c->tv_nsec = (acc_uint32l_t) (nsecs % 1000000000ul);
|
||||
ACC_UNUSED(h); return 0;
|
||||
}
|
||||
#endif
|
||||
#if 0 && defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_PROCESS_CPUTIME_ID) && defined(acc_int64l_t)
|
||||
#ifndef acc_pclock_read_clock_gettime_p
|
||||
#define acc_pclock_read_clock_gettime_p acc_pclock_read_clock_gettime_p
|
||||
#endif
|
||||
static int acc_pclock_read_clock_gettime_p(acc_pclock_handle_p h, acc_pclock_p c)
|
||||
{
|
||||
struct timespec ts;
|
||||
if (clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts) != 0)
|
||||
return -1;
|
||||
c->tv_sec = ts.tv_sec;
|
||||
c->tv_nsec = ts.tv_nsec;
|
||||
ACC_UNUSED(h); return 0;
|
||||
}
|
||||
#endif
|
||||
#if (ACC_OS_CYGWIN || ACC_OS_WIN32 || ACC_OS_WIN64) && (ACC_HAVE_WINDOWS_H) && defined(acc_int64l_t)
|
||||
#ifndef acc_pclock_read_getprocesstimes
|
||||
#define acc_pclock_read_getprocesstimes acc_pclock_read_getprocesstimes
|
||||
#endif
|
||||
static int acc_pclock_read_getprocesstimes(acc_pclock_handle_p h, acc_pclock_p c)
|
||||
{
|
||||
FILETIME ct, et, kt, ut;
|
||||
acc_uint64l_t ticks;
|
||||
if (GetProcessTimes(GetCurrentProcess(), &ct, &et, &kt, &ut) == 0)
|
||||
return -1;
|
||||
ticks = ((acc_uint64l_t)ut.dwHighDateTime << 32) | ut.dwLowDateTime;
|
||||
if __acc_unlikely(h->ticks_base == 0)
|
||||
h->ticks_base = ticks;
|
||||
else
|
||||
ticks -= h->ticks_base;
|
||||
c->tv_sec = ticks / 10000000ul;
|
||||
c->tv_nsec = (acc_uint32l_t)(ticks % 10000000ul) * 100;
|
||||
ACC_UNUSED(h); return 0;
|
||||
}
|
||||
#endif
|
||||
#if defined(HAVE_GETRUSAGE) && defined(RUSAGE_SELF)
|
||||
#ifndef acc_pclock_read_getrusage
|
||||
#define acc_pclock_read_getrusage acc_pclock_read_getrusage
|
||||
#endif
|
||||
static int acc_pclock_read_getrusage(acc_pclock_handle_p h, acc_pclock_p c)
|
||||
{
|
||||
struct rusage ru;
|
||||
if (getrusage(RUSAGE_SELF, &ru) != 0)
|
||||
return -1;
|
||||
#if defined(acc_int64l_t)
|
||||
c->tv_sec = ru.ru_utime.tv_sec;
|
||||
#else
|
||||
c->tv_sec_high = 0;
|
||||
c->tv_sec_low = ru.ru_utime.tv_sec;
|
||||
#endif
|
||||
c->tv_nsec = ru.ru_utime.tv_usec * 1000;
|
||||
ACC_UNUSED(h); return 0;
|
||||
}
|
||||
#endif
|
||||
#if (__ACCLIB_PCLOCK_USE_PERFCTR)
|
||||
#ifndef acc_pclock_read_perfctr
|
||||
#define acc_pclock_read_perfctr acc_pclock_read_perfctr
|
||||
#endif
|
||||
static int acc_pclock_read_perfctr(acc_pclock_handle_p h, acc_pclock_p c)
|
||||
{
|
||||
acc_perfctr_clock_t pcc;
|
||||
double secs;
|
||||
acc_uint64l_t nsecs;
|
||||
acc_perfctr_read(&h->pch, &pcc);
|
||||
if __acc_unlikely(h->ticks_base == 0)
|
||||
h->ticks_base = pcc.tsc;
|
||||
else
|
||||
pcc.tsc -= h->ticks_base;
|
||||
secs = pcc.tsc * h->pch.tsc_to_seconds;
|
||||
nsecs = (acc_uint64l_t) (secs * 1000000000.0);
|
||||
c->tv_sec = nsecs / 1000000000ul;
|
||||
c->tv_nsec = (acc_uint32l_t) (nsecs % 1000000000ul);
|
||||
ACC_UNUSED(h); return 0;
|
||||
}
|
||||
#endif
|
||||
#if 0 && defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_THREAD_CPUTIME_ID) && defined(acc_int64l_t)
|
||||
#ifndef acc_pclock_read_clock_gettime_t
|
||||
#define acc_pclock_read_clock_gettime_t acc_pclock_read_clock_gettime_t
|
||||
#endif
|
||||
static int acc_pclock_read_clock_gettime_t(acc_pclock_handle_p h, acc_pclock_p c)
|
||||
{
|
||||
struct timespec ts;
|
||||
if (clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts) != 0)
|
||||
return -1;
|
||||
c->tv_sec = ts.tv_sec;
|
||||
c->tv_nsec = ts.tv_nsec;
|
||||
ACC_UNUSED(h); return 0;
|
||||
}
|
||||
#endif
|
||||
#if (ACC_OS_CYGWIN || ACC_OS_WIN32 || ACC_OS_WIN64) && (ACC_HAVE_WINDOWS_H) && defined(acc_int64l_t)
|
||||
#ifndef acc_pclock_read_getthreadtimes
|
||||
#define acc_pclock_read_getthreadtimes acc_pclock_read_getthreadtimes
|
||||
#endif
|
||||
static int acc_pclock_read_getthreadtimes(acc_pclock_handle_p h, acc_pclock_p c)
|
||||
{
|
||||
FILETIME ct, et, kt, ut;
|
||||
acc_uint64l_t ticks;
|
||||
if (GetThreadTimes(GetCurrentThread(), &ct, &et, &kt, &ut) == 0)
|
||||
return -1;
|
||||
ticks = ((acc_uint64l_t)ut.dwHighDateTime << 32) | ut.dwLowDateTime;
|
||||
if __acc_unlikely(h->ticks_base == 0)
|
||||
h->ticks_base = ticks;
|
||||
else
|
||||
ticks -= h->ticks_base;
|
||||
c->tv_sec = ticks / 10000000ul;
|
||||
c->tv_nsec = (acc_uint32l_t)(ticks % 10000000ul) * 100;
|
||||
ACC_UNUSED(h); return 0;
|
||||
}
|
||||
#endif
|
||||
ACCLIB_PUBLIC(int, acc_pclock_open) (acc_pclock_handle_p h, int mode)
|
||||
{
|
||||
acc_pclock_t c;
|
||||
int i;
|
||||
h->h = (acclib_handle_t) 0;
|
||||
h->mode = -1;
|
||||
h->name = NULL;
|
||||
h->gettime = 0;
|
||||
#if defined(acc_int64l_t)
|
||||
h->ticks_base = 0;
|
||||
#endif
|
||||
switch (mode)
|
||||
{
|
||||
case ACC_PCLOCK_REALTIME_HR:
|
||||
# if defined(acc_pclock_read_gettimeofday)
|
||||
h->gettime = acc_pclock_read_gettimeofday;
|
||||
h->name = "gettimeofday";
|
||||
# endif
|
||||
break;
|
||||
case ACC_PCLOCK_REALTIME:
|
||||
break;
|
||||
case ACC_PCLOCK_MONOTONIC_HR:
|
||||
# if defined(acc_pclock_read_uclock)
|
||||
h->gettime = acc_pclock_read_uclock;
|
||||
h->name = "uclock";
|
||||
# endif
|
||||
break;
|
||||
case ACC_PCLOCK_MONOTONIC:
|
||||
# if defined(acc_pclock_read_clock)
|
||||
if (!h->gettime) {
|
||||
h->gettime = acc_pclock_read_clock;
|
||||
h->name = "clock";
|
||||
}
|
||||
# endif
|
||||
break;
|
||||
case ACC_PCLOCK_PROCESS_CPUTIME_ID:
|
||||
# if defined(acc_pclock_read_perfctr)
|
||||
if (acc_perfctr_open(&h->pch) == 0) {
|
||||
h->gettime = acc_pclock_read_perfctr;
|
||||
h->name = "perfctr";
|
||||
break;
|
||||
}
|
||||
# endif
|
||||
# if defined(acc_pclock_read_getprocesstimes)
|
||||
if (!h->gettime && acc_pclock_read_getprocesstimes(h, &c) == 0) {
|
||||
h->gettime = acc_pclock_read_getprocesstimes;
|
||||
h->name = "GetProcessTimes";
|
||||
break;
|
||||
}
|
||||
# endif
|
||||
# if defined(acc_pclock_read_clock_gettime_p)
|
||||
if (!h->gettime && acc_pclock_read_clock_gettime_p(h, &c) == 0) {
|
||||
h->gettime = acc_pclock_read_clock_gettime_p;
|
||||
h->name = "CLOCK_PROCESS_CPUTIME_ID";
|
||||
break;
|
||||
}
|
||||
# endif
|
||||
# if defined(acc_pclock_read_getrusage)
|
||||
h->gettime = acc_pclock_read_getrusage;
|
||||
h->name = "getrusage";
|
||||
# endif
|
||||
break;
|
||||
case ACC_PCLOCK_THREAD_CPUTIME_ID:
|
||||
# if defined(acc_pclock_read_getthreadtimes)
|
||||
if (!h->gettime && acc_pclock_read_getthreadtimes(h, &c) == 0) {
|
||||
h->gettime = acc_pclock_read_getthreadtimes;
|
||||
h->name = "GetThreadTimes";
|
||||
}
|
||||
# endif
|
||||
# if defined(acc_pclock_read_clock_gettime_t)
|
||||
if (!h->gettime && acc_pclock_read_clock_gettime_t(h, &c) == 0) {
|
||||
h->gettime = acc_pclock_read_clock_gettime_t;
|
||||
h->name = "CLOCK_THREAD_CPUTIME_ID";
|
||||
break;
|
||||
}
|
||||
# endif
|
||||
break;
|
||||
}
|
||||
if (!h->gettime)
|
||||
return -1;
|
||||
if (!h->h)
|
||||
h->h = (acclib_handle_t) 1;
|
||||
h->mode = mode;
|
||||
if (!h->name)
|
||||
h->name = "unknown";
|
||||
for (i = 0; i < 10; i++) {
|
||||
acc_pclock_read(h, &c);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
ACCLIB_PUBLIC(int, acc_pclock_open_default) (acc_pclock_handle_p h)
|
||||
{
|
||||
if (acc_pclock_open(h, ACC_PCLOCK_PROCESS_CPUTIME_ID) == 0)
|
||||
return 0;
|
||||
if (acc_pclock_open(h, ACC_PCLOCK_MONOTONIC_HR) == 0)
|
||||
return 0;
|
||||
if (acc_pclock_open(h, ACC_PCLOCK_REALTIME_HR) == 0)
|
||||
return 0;
|
||||
if (acc_pclock_open(h, ACC_PCLOCK_MONOTONIC) == 0)
|
||||
return 0;
|
||||
if (acc_pclock_open(h, ACC_PCLOCK_REALTIME) == 0)
|
||||
return 0;
|
||||
if (acc_pclock_open(h, ACC_PCLOCK_THREAD_CPUTIME_ID) == 0)
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
ACCLIB_PUBLIC(int, acc_pclock_close) (acc_pclock_handle_p h)
|
||||
{
|
||||
h->h = (acclib_handle_t) 0;
|
||||
h->mode = -1;
|
||||
h->name = NULL;
|
||||
h->gettime = 0;
|
||||
#if (__ACCLIB_PCLOCK_USE_PERFCTR)
|
||||
acc_perfctr_close(&h->pch);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
ACCLIB_PUBLIC(void, acc_pclock_read) (acc_pclock_handle_p h, acc_pclock_p c)
|
||||
{
|
||||
if (h->gettime) {
|
||||
if (h->gettime(h, c) == 0)
|
||||
return;
|
||||
}
|
||||
#if defined(acc_int64l_t)
|
||||
c->tv_sec = 0;
|
||||
#else
|
||||
c->tv_sec_high = 0;
|
||||
c->tv_sec_low = 0;
|
||||
#endif
|
||||
c->tv_nsec = 0;
|
||||
}
|
||||
#if !defined(ACC_CFG_NO_DOUBLE)
|
||||
ACCLIB_PUBLIC(double, acc_pclock_get_elapsed) (acc_pclock_handle_p h, const acc_pclock_p start, const acc_pclock_p stop)
|
||||
{
|
||||
double tstop, tstart;
|
||||
if (!h->h) {
|
||||
h->mode = -1;
|
||||
return 0.0;
|
||||
}
|
||||
#if defined(acc_int64l_t)
|
||||
tstop = stop->tv_sec + stop->tv_nsec / 1000000000.0;
|
||||
tstart = start->tv_sec + start->tv_nsec / 1000000000.0;
|
||||
#else
|
||||
tstop = stop->tv_sec_low + stop->tv_nsec / 1000000000.0;
|
||||
tstart = start->tv_sec_low + start->tv_nsec / 1000000000.0;
|
||||
#endif
|
||||
return tstop - tstart;
|
||||
}
|
||||
#endif
|
||||
ACCLIB_PUBLIC(int, acc_pclock_flush_cpu_cache) (acc_pclock_handle_p h, unsigned flags)
|
||||
{
|
||||
if (h->h) {
|
||||
#if (__ACCLIB_PCLOCK_USE_PERFCTR)
|
||||
return acc_perfctr_flush_cpu_cache(&h->pch, flags);
|
||||
#endif
|
||||
}
|
||||
ACC_UNUSED(h); ACC_UNUSED(flags);
|
||||
return -1;
|
||||
}
|
||||
#if defined(__ACCLIB_PCLOCK_NEED_WARN_POP)
|
||||
# if (ACC_CC_MSC && (_MSC_VER >= 1200))
|
||||
# pragma warning(pop)
|
||||
# else
|
||||
# error "__ACCLIB_PCLOCK_NEED_WARN_POP"
|
||||
# endif
|
||||
# undef __ACCLIB_PCLOCK_NEED_WARN_POP
|
||||
#endif
|
||||
#endif
|
||||
#if defined(ACC_WANT_ACCLIB_UCLOCK)
|
||||
# undef ACC_WANT_ACCLIB_UCLOCK
|
||||
#define __ACCLIB_UCLOCK_CH_INCLUDED 1
|
||||
@ -5208,6 +5705,11 @@ ACCLIB_PUBLIC(long, acc_safe_hwrite) (int fd, const acc_hvoid_p buf, long size)
|
||||
# undef __ACCLIB_UCLOCK_USE_CLOCK
|
||||
# endif
|
||||
#endif
|
||||
#if (__ACCLIB_UCLOCK_USE_GETRUSAGE)
|
||||
# if !defined(RUSAGE_SELF)
|
||||
# undef __ACCLIB_UCLOCK_USE_GETRUSAGE
|
||||
# endif
|
||||
#endif
|
||||
ACCLIB_PUBLIC(int, acc_uclock_open) (acc_uclock_handle_p h)
|
||||
{
|
||||
int i;
|
||||
@ -5216,6 +5718,7 @@ ACCLIB_PUBLIC(int, acc_uclock_open) (acc_uclock_handle_p h)
|
||||
#endif
|
||||
h->h = (acclib_handle_t) 1;
|
||||
h->mode = 0;
|
||||
h->name = NULL;
|
||||
#if (__ACCLIB_UCLOCK_USE_PERFCTR)
|
||||
h->pch.h = 0;
|
||||
if (h->mode == 0 && acc_perfctr_open(&h->pch) == 0)
|
||||
@ -5241,6 +5744,7 @@ ACCLIB_PUBLIC(int, acc_uclock_close) (acc_uclock_handle_p h)
|
||||
{
|
||||
h->h = (acclib_handle_t) 0;
|
||||
h->mode = -1;
|
||||
h->name = NULL;
|
||||
#if (__ACCLIB_UCLOCK_USE_PERFCTR)
|
||||
acc_perfctr_close(&h->pch);
|
||||
#endif
|
||||
@ -5289,7 +5793,7 @@ ACCLIB_PUBLIC(void, acc_uclock_read) (acc_uclock_handle_p h, acc_uclock_p c)
|
||||
c->ticks.t32 = timeGetTime();
|
||||
#elif (__ACCLIB_UCLOCK_USE_GETRUSAGE)
|
||||
struct rusage ru;
|
||||
if (getrusage(RUSAGE_SELF, &ru) != 0) c->ticks.rd = 0;
|
||||
if (getrusage(RUSAGE_SELF, &ru) != 0) c->ticks.td = 0;
|
||||
else c->ticks.td = ru.ru_utime.tv_sec + ru.ru_utime.tv_usec / 1000000.0;
|
||||
#elif (HAVE_GETTIMEOFDAY)
|
||||
struct timeval tv;
|
||||
@ -5310,30 +5814,36 @@ ACCLIB_PUBLIC(double, acc_uclock_get_elapsed) (acc_uclock_handle_p h, const acc_
|
||||
}
|
||||
#if (__ACCLIB_UCLOCK_USE_RDTSC)
|
||||
if (h->mode == 1) {
|
||||
if (!h->name) h->name = "rdtsc";
|
||||
d = (double) ((acc_int64l_t)stop->tsc - (acc_int64l_t)start->tsc);
|
||||
return d / 1000000000.0;
|
||||
}
|
||||
#endif
|
||||
#if (__ACCLIB_UCLOCK_USE_PERFCTR)
|
||||
if (h->pch.h && h->mode == 2) {
|
||||
if (!h->name) h->name = "perfctr";
|
||||
return acc_perfctr_get_elapsed(&h->pch, &start->pcc, &stop->pcc);
|
||||
}
|
||||
#endif
|
||||
#if (__ACCLIB_UCLOCK_USE_QPC)
|
||||
if (h->qpf > 0.0 && h->mode == 3) {
|
||||
if (!h->name) h->name = "qpc";
|
||||
if (start->qpc == 0 || stop->qpc == 0) return 0.0;
|
||||
return (double) (stop->qpc - start->qpc) / h->qpf;
|
||||
}
|
||||
#endif
|
||||
#if (ACC_OS_DOS16 || ACC_OS_WIN16)
|
||||
h->mode = 11;
|
||||
if (!h->name) h->name = "uclock";
|
||||
d = (double) (stop->ticks.t32 - start->ticks.t32) / 100.0;
|
||||
if (d < 0.0) d += 86400.0;
|
||||
#elif (ACC_OS_DOS32 && ACC_CC_GNUC) && defined(__DJGPP__)
|
||||
h->mode = 12;
|
||||
if (!h->name) h->name = "uclock";
|
||||
d = (double) (stop->ticks.t64 - start->ticks.t64) / (UCLOCKS_PER_SEC);
|
||||
#elif (__ACCLIB_UCLOCK_USE_CLOCK) && defined(acc_int64l_t)
|
||||
h->mode = 13;
|
||||
if (!h->name) h->name = "clock";
|
||||
{
|
||||
acc_int64l_t t;
|
||||
t = stop->ticks.t64 - start->ticks.t64;
|
||||
@ -5343,15 +5853,19 @@ ACCLIB_PUBLIC(double, acc_uclock_get_elapsed) (acc_uclock_handle_p h, const acc_
|
||||
}
|
||||
#elif (__ACCLIB_UCLOCK_USE_CLOCK)
|
||||
h->mode = 14;
|
||||
if (!h->name) h->name = "clock";
|
||||
d = (double) (stop->ticks.t32 - start->ticks.t32) / (CLOCKS_PER_SEC);
|
||||
#elif (__ACCLIB_UCLOCK_USE_WINMM)
|
||||
h->mode = 15;
|
||||
if (!h->name) h->name = "timeGetTime";
|
||||
d = (double) (stop->ticks.t32 - start->ticks.t32) / 1000.0;
|
||||
#elif (__ACCLIB_UCLOCK_USE_GETRUSAGE)
|
||||
h->mode = 16;
|
||||
if (!h->name) h->name = "getrusage";
|
||||
d = stop->ticks.td - start->ticks.td;
|
||||
#elif (HAVE_GETTIMEOFDAY)
|
||||
h->mode = 17;
|
||||
if (!h->name) h->name = "gettimeofday";
|
||||
d = stop->ticks.td - start->ticks.td;
|
||||
#else
|
||||
h->mode = 0;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user