diff --git a/src/miniacc.h b/src/miniacc.h index 491f9133..945b066b 100644 --- a/src/miniacc.h +++ b/src/miniacc.h @@ -36,7 +36,7 @@ #ifndef __ACC_H_INCLUDED #define __ACC_H_INCLUDED 1 -#define ACC_VERSION 20050912L +#define ACC_VERSION 20051106L #if defined(__CYGWIN32__) && !defined(__CYGWIN__) # define __CYGWIN__ __CYGWIN32__ #endif @@ -302,7 +302,7 @@ #define ACC_CPP_ECONCAT3(a,b,c) ACC_CPP_CONCAT3(a,b,c) #define ACC_CPP_ECONCAT4(a,b,c,d) ACC_CPP_CONCAT4(a,b,c,d) #define ACC_CPP_ECONCAT5(a,b,c,d,e) ACC_CPP_CONCAT5(a,b,c,d,e) -#define __ACC_MASK_GEN(o,b) ((((o << ((b)-1)) - o) << 1) + o) +#define __ACC_MASK_GEN(o,b) (((((o) << ((b)-1)) - (o)) << 1) + (o)) #if 1 && defined(__cplusplus) # if !defined(__STDC_CONSTANT_MACROS) # define __STDC_CONSTANT_MACROS 1 @@ -445,6 +445,9 @@ # elif defined(__APPLE__) || defined(__MACOS__) # define ACC_OS_POSIX_MACOSX 1 # define ACC_INFO_OS_POSIX "macosx" +# elif defined(__minix__) || defined(__minix) +# define ACC_OS_POSIX_MINIX 1 +# define ACC_INFO_OS_POSIX "minix" # elif defined(__NetBSD__) # define ACC_OS_POSIX_NETBSD 1 # define ACC_INFO_OS_POSIX "netbsd" @@ -525,6 +528,10 @@ # endif # define ACC_INFO_CC "gcc" # define ACC_INFO_CCVER __VERSION__ +#elif defined(__ACK__) && defined(_ACK) +# define ACC_CC_ACK 1 +# define ACC_INFO_CC "Amsterdam Compiler Kit C" +# define ACC_INFO_CCVER "unknown" #elif defined(__AZTEC_C__) # define ACC_CC_AZTECC 1 # define ACC_INFO_CC "Aztec C" @@ -533,6 +540,10 @@ # define ACC_CC_BORLANDC 1 # define ACC_INFO_CC "Borland C" # define ACC_INFO_CCVER ACC_CPP_MACRO_EXPAND(__BORLANDC__) +#elif defined(_CRAYC) && defined(_RELEASE) +# define ACC_CC_CRAYC 1 +# define ACC_INFO_CC "Cray C" +# define ACC_INFO_CCVER ACC_CPP_MACRO_EXPAND(_RELEASE) #elif defined(__DMC__) && defined(__SC__) # define ACC_CC_DMC 1 # define ACC_INFO_CC "Digital Mars C" @@ -630,7 +641,7 @@ # define ACC_INFO_CC "unknown" # define ACC_INFO_CCVER "unknown" #endif -#if (ACC_CC_MSC && (_MSC_VER > 1200)) && !defined(_MSC_FULL_VER) +#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) @@ -1068,11 +1079,12 @@ extern "C" { # undef ACC_SIZEOF_LONG_LONG # endif #endif -#if defined(__NO_LONG_LONG) +#if defined(ACC_CFG_NO_LONG_LONG) || defined(__NO_LONG_LONG) # undef ACC_SIZEOF_LONG_LONG #endif #if !defined(ACC_SIZEOF_VOID_P) #if (ACC_ARCH_I086) +# define __ACC_WORDSIZE 2 # if (ACC_MM_TINY || ACC_MM_SMALL || ACC_MM_MEDIUM) # define ACC_SIZEOF_VOID_P 2 # elif (ACC_MM_COMPACT || ACC_MM_LARGE || ACC_MM_HUGE) @@ -1080,14 +1092,20 @@ extern "C" { # else # error "ACC_MM" # endif -#elif (ACC_ARCH_AVR || ACC_ARCH_C166 || ACC_ARCH_I086 || ACC_ARCH_MCS51 || ACC_ARCH_MCS251 || ACC_ARCH_MSP430 || ACC_ARCH_Z80) +#elif (ACC_ARCH_AVR || ACC_ARCH_Z80) +# define __ACC_WORDSIZE 1 +# define ACC_SIZEOF_VOID_P 2 +#elif (ACC_ARCH_C166 || ACC_ARCH_MCS51 || ACC_ARCH_MCS251 || ACC_ARCH_MSP430) # define ACC_SIZEOF_VOID_P 2 #elif (ACC_ARCH_H8300) # if defined(__NORMAL_MODE__) +# define __ACC_WORDSIZE 4 # define ACC_SIZEOF_VOID_P 2 # elif defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__) +# define __ACC_WORDSIZE 4 # define ACC_SIZEOF_VOID_P 4 # else +# define __ACC_WORDSIZE 2 # define ACC_SIZEOF_VOID_P 2 # endif # if (ACC_CC_GNUC && (ACC_CC_GNUC < 0x040000ul)) && (ACC_SIZEOF_INT == 4) @@ -1095,22 +1113,24 @@ extern "C" { # define ACC_SIZEOF_PTRDIFF_T ACC_SIZEOF_INT # endif #elif (ACC_ARCH_M16C) +# define __ACC_WORDSIZE 2 # if defined(__m32c_cpu__) || defined(__m32cm_cpu__) # define ACC_SIZEOF_VOID_P 4 # else # define ACC_SIZEOF_VOID_P 2 # endif -#elif (ACC_OS_CONSOLE_PS2) -# define ACC_SIZEOF_VOID_P 4 #elif (ACC_SIZEOF_LONG == 8) && ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__)) +# define __ACC_WORDSIZE 8 # define ACC_SIZEOF_VOID_P 4 #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__) -# define ACC_SIZEOF_VOID_P 8 +# 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) +# define __ACC_WORDSIZE ACC_SIZEOF_LONG # define ACC_SIZEOF_VOID_P 16 # define ACC_SIZEOF_SIZE_T ACC_SIZEOF_LONG # define ACC_SIZEOF_PTRDIFF_T ACC_SIZEOF_LONG @@ -1122,6 +1142,13 @@ extern "C" { # define ACC_SIZEOF_VOID_P ACC_SIZEOF_LONG #endif #endif +#if !defined(ACC_WORDSIZE) +# if defined(__ACC_WORDSIZE) +# define ACC_WORDSIZE __ACC_WORDSIZE +# else +# define ACC_WORDSIZE ACC_SIZEOF_VOID_P +# endif +#endif #if !defined(ACC_SIZEOF_SIZE_T) #if (ACC_ARCH_I086 || ACC_ARCH_M16C) # define ACC_SIZEOF_SIZE_T 2 @@ -1146,8 +1173,11 @@ extern "C" { # define ACC_SIZEOF_PTRDIFF_T ACC_SIZEOF_SIZE_T #endif #endif -#if !defined(ACC_ABI_BIG_ENDIAN) && !defined(ACC_ABI_LITTLE_ENDIAN) && !defined(ACC_ABI_NEUTRAL_ENDIAN) -#if (ACC_ARCH_AMD64 || ACC_ARCH_CRIS || ACC_ARCH_I086 || ACC_ARCH_I386 || ACC_ARCH_MSP430) +#if defined(ACC_ABI_NEUTRAL_ENDIAN) +# 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) # define ACC_ABI_LITTLE_ENDIAN 1 #elif (ACC_ARCH_M68K || ACC_ARCH_S390) # define ACC_ABI_BIG_ENDIAN 1 @@ -1155,6 +1185,10 @@ extern "C" { # define ACC_ABI_BIG_ENDIAN 1 #elif 1 && defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) # define ACC_ABI_LITTLE_ENDIAN 1 +#elif 1 && (ACC_ARCH_MIPS) && defined(__MIPSEB__) && !defined(__MIPSEL__) +# define ACC_ABI_BIG_ENDIAN 1 +#elif 1 && (ACC_ARCH_MIPS) && defined(__MIPSEL__) && !defined(__MIPSEB__) +# define ACC_ABI_LITTLE_ENDIAN 1 #endif #endif #if defined(ACC_ABI_BIG_ENDIAN) && defined(ACC_ABI_LITTLE_ENDIAN) @@ -1231,6 +1265,7 @@ extern "C" { #else # define __acc_gnuc_extension__ #endif +#if !defined(acc_alignof) #if (ACC_CC_CILLY || ACC_CC_GNUC || ACC_CC_LLVM || ACC_CC_PATHSCALE || ACC_CC_PGI) # define acc_alignof(e) __alignof__(e) #elif (ACC_CC_INTELC && (__INTEL_COMPILER >= 700)) @@ -1238,6 +1273,8 @@ extern "C" { #elif (ACC_CC_MSC && (_MSC_VER >= 1300)) # define acc_alignof(e) __alignof(e) #endif +#endif +#if !defined(__acc_inline) #if (ACC_CC_TURBOC && (__TURBOC__ <= 0x0295)) #elif defined(__cplusplus) # define __acc_inline inline @@ -1256,6 +1293,8 @@ extern "C" { #elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) # define __acc_inline inline #endif +#endif +#if !defined(__acc_forceinline) #if (ACC_CC_GNUC >= 0x030200ul) # define __acc_forceinline __inline__ __attribute__((__always_inline__)) #elif (ACC_CC_INTELC && (__INTEL_COMPILER >= 450) && (ACC_OS_WIN32 || ACC_OS_WIN64)) @@ -1267,6 +1306,8 @@ extern "C" { #elif (ACC_CC_MSC && (_MSC_VER >= 1200)) # define __acc_forceinline __forceinline #endif +#endif +#if !defined(__acc_noinline) #if (ACC_CC_GNUC >= 0x030200ul) # define __acc_noinline __attribute__((__noinline__)) #elif (ACC_CC_INTELC && (__INTEL_COMPILER >= 600) && (ACC_OS_WIN32 || ACC_OS_WIN64)) @@ -1283,9 +1324,11 @@ extern "C" { # define __acc_noinline __declspec(noinline) # endif #endif +#endif #if (defined(__acc_forceinline) || defined(__acc_noinline)) && !defined(__acc_inline) # error "this should not happen" #endif +#if !defined(__acc_noreturn) #if (ACC_CC_GNUC >= 0x020700ul) # define __acc_noreturn __attribute__((__noreturn__)) #elif (ACC_CC_INTELC && (__INTEL_COMPILER >= 450) && (ACC_OS_WIN32 || ACC_OS_WIN64)) @@ -1297,6 +1340,21 @@ extern "C" { #elif (ACC_CC_MSC && (_MSC_VER >= 1200)) # define __acc_noreturn __declspec(noreturn) #endif +#endif +#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)) +# 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)) +# define __acc_nothrow __declspec(nothrow) +#endif +#endif +#if !defined(__acc_constructor) #if (ACC_CC_GNUC >= 0x030400ul) # define __acc_constructor __attribute__((__constructor__,__used__)) #elif (ACC_CC_GNUC >= 0x020700ul) @@ -1304,6 +1362,8 @@ extern "C" { #elif (ACC_CC_LLVM || ACC_CC_PATHSCALE) # define __acc_constructor __attribute__((__constructor__)) #endif +#endif +#if !defined(__acc_destructor) #if (ACC_CC_GNUC >= 0x030400ul) # define __acc_destructor __attribute__((__destructor__,__used__)) #elif (ACC_CC_GNUC >= 0x020700ul) @@ -1311,9 +1371,13 @@ extern "C" { #elif (ACC_CC_LLVM || ACC_CC_PATHSCALE) # define __acc_destructor __attribute__((__destructor__)) #endif +#endif #if defined(__acc_destructor) && !defined(__acc_constructor) # error "this should not happen" #endif +#if !defined(__acc_ua_volatile) +# define __acc_ua_volatile volatile +#endif #if (ACC_CC_GNUC >= 0x030200ul) # define __acc_likely(e) (__builtin_expect(!!(e),1)) # define __acc_unlikely(e) (__builtin_expect(!!(e),0)) @@ -1396,7 +1460,7 @@ extern "C" { # define ACC_COMPILE_TIME_ASSERT(e) {typedef int __acc_cta_t[1-2*!(e)];} # endif #endif -#if (ACC_OS_DOS16 || ACC_OS_DOS32 || ACC_OS_OS2 || ACC_OS_OS216 || ACC_OS_WIN16 || ACC_OS_WIN32 || ACC_OS_WIN64) +#if (ACC_ARCH_I086 || ACC_ARCH_I386) && (ACC_OS_DOS16 || ACC_OS_DOS32 || ACC_OS_OS2 || ACC_OS_OS216 || ACC_OS_WIN16 || ACC_OS_WIN32 || ACC_OS_WIN64) # if (ACC_CC_GNUC || ACC_CC_HIGHC || ACC_CC_NDPC || ACC_CC_PACIFICC) # elif (ACC_CC_DMC || ACC_CC_SYMANTECC || ACC_CC_ZORTECHC) # define __acc_cdecl __cdecl @@ -1435,7 +1499,7 @@ extern "C" { # else # define __acc_cdecl_sighandler __cdecl # endif -#elif (ACC_OS_TOS && (ACC_CC_PUREC || ACC_CC_TURBOC)) +#elif (ACC_ARCH_M68K && ACC_OS_TOS && (ACC_CC_PUREC || ACC_CC_TURBOC)) # define __acc_cdecl cdecl #endif #if !defined(__acc_cdecl) @@ -1464,17 +1528,16 @@ extern "C" { # define ACC_HAVE_WINDOWS_H 1 # endif #endif -#if (ACC_ARCH_AMD64) -# define ACC_OPT_UNALIGNED16 1 -# define ACC_OPT_UNALIGNED32 1 -# define ACC_OPT_UNALIGNED64 1 -#elif (ACC_ARCH_ALPHA) +#if (ACC_ARCH_ALPHA) # define ACC_OPT_AVOID_UINT_INDEX 1 # define ACC_OPT_AVOID_SHORT 1 # define ACC_OPT_AVOID_USHORT 1 #elif (ACC_ARCH_AMD64) # define ACC_OPT_AVOID_INT_INDEX 1 # define ACC_OPT_AVOID_UINT_INDEX 1 +# define ACC_OPT_UNALIGNED16 1 +# define ACC_OPT_UNALIGNED32 1 +# define ACC_OPT_UNALIGNED64 1 #elif (ACC_ARCH_ARM && ACC_ARCH_ARM_THUMB) #elif (ACC_ARCH_ARM) # define ACC_OPT_AVOID_SHORT 1 @@ -1829,6 +1892,13 @@ extern "C" { #if (ACC_OS_CONSOLE) # undef HAVE_DIRENT_H #endif +#if (ACC_LIBC_ISOC90 || ACC_LIBC_ISOC99) +# undef HAVE_DIRENT_H +# undef HAVE_UNISTD_H +# undef HAVE_SYS_STAT_H +# undef HAVE_SYS_TIME_H +# undef HAVE_SYS_TYPES_H +#endif #if (ACC_LIBC_GLIBC >= 0x020100ul) # define HAVE_STDINT_H 1 #elif (ACC_LIBC_DIETLIBC) @@ -2109,6 +2179,17 @@ extern "C" { # undef HAVE_UMASK # undef HAVE_UTIME #endif +#if (ACC_LIBC_ISOC90 || ACC_LIBC_ISOC99) +# undef HAVE_ACCESS +# undef HAVE_CHMOD +# undef HAVE_CHOWN +# undef HAVE_FSTAT +# undef HAVE_GETTIMEOFDAY +# undef HAVE_LSTAT +# undef HAVE_STAT +# undef HAVE_UMASK +# undef HAVE_UTIME +#endif #endif #endif #if !defined(ACC_CFG_AUTO_NO_SIZES) @@ -2315,6 +2396,37 @@ __acc_gnuc_extension__ typedef unsigned long long acc_ullong_t; # error "acc_intptr_t" #endif #endif +#if !defined(acc_word_t) +#if defined(ACC_WORDSIZE) && (ACC_WORDSIZE > 0) +#if (ACC_WORDSIZE == ACC_SIZEOF_ACC_INTPTR_T) && !defined(__ACC_INTPTR_T_IS_POINTER) +# define acc_word_t acc_uintptr_t +# define acc_sword_t acc_intptr_t +# define ACC_SIZEOF_ACC_WORD_T ACC_SIZEOF_ACC_INTPTR_T +#elif (ACC_WORDSIZE == ACC_SIZEOF_LONG) +# define acc_word_t unsigned long +# define acc_sword_t long +# define ACC_SIZEOF_ACC_WORD_T ACC_SIZEOF_LONG +#elif (ACC_WORDSIZE == ACC_SIZEOF_INT) +# define acc_word_t unsigned int +# define acc_sword_t int +# define ACC_SIZEOF_ACC_WORD_T ACC_SIZEOF_INT +#elif (ACC_WORDSIZE == ACC_SIZEOF_SHORT) +# define acc_word_t unsigned short +# define acc_sword_t short +# define ACC_SIZEOF_ACC_WORD_T ACC_SIZEOF_SHORT +#elif (ACC_WORDSIZE == 1) +# define acc_word_t unsigned char +# define acc_sword_t signed char +# define ACC_SIZEOF_ACC_WORD_T 1 +#elif (ACC_WORDSIZE == ACC_SIZEOF_ACC_INT64L_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 +#else +# error "acc_word_t" +#endif +#endif +#endif #if !defined(ACC_INT16_C) # if (ACC_BROKEN_INTEGRAL_CONSTANTS) && (ACC_SIZEOF_INT >= 2) # define ACC_INT16_C(c) ((c) + 0) @@ -2384,6 +2496,9 @@ __acc_gnuc_extension__ typedef unsigned long long acc_ullong_t; #if !defined(SIZEOF_ACC_INTPTR_T) && defined(ACC_SIZEOF_ACC_INTPTR_T) # define SIZEOF_ACC_INTPTR_T ACC_SIZEOF_ACC_INTPTR_T #endif +#if !defined(SIZEOF_ACC_WORD_T) && defined(ACC_SIZEOF_ACC_WORD_T) +# define SIZEOF_ACC_WORD_T ACC_SIZEOF_ACC_WORD_T +#endif #if 1 && !defined(acc_signo_t) && defined(__linux__) && defined(__dietlibc__) && (ACC_SIZEOF_INT != 4) # define acc_signo_t acc_int32e_t #endif @@ -2401,24 +2516,26 @@ typedef void (__acc_cdecl_sighandler *acc_sighandler_t)(acc_signo_t); # else #if (ACC_CC_GNUC && (ACC_CC_GNUC < 0x020700ul)) #elif (ACC_CC_GNUC && (ACC_CC_GNUC < 0x020800ul)) && defined(__cplusplus) +#elif (ACC_CC_INTELC) && defined(_WIN32) #elif (ACC_CC_INTELC && (__INTEL_COMPILER < 700)) +#elif (ACC_CC_LLVM) #elif (ACC_CC_GNUC || ACC_CC_INTELC || ACC_CC_PATHSCALE) #if !defined(__acc_ua16_t) && (ACC_OPT_UNALIGNED16) && defined(acc_int16e_t) - typedef struct { acc_uint16e_t v __attribute__((__packed__)); } __acc_ua16_t; + typedef struct { __acc_ua_volatile acc_uint16e_t v __attribute__((__packed__)); } __acc_ua16_t; # define __acc_ua16_t __acc_ua16_t #endif #if !defined(__acc_ua32_t) && (ACC_OPT_UNALIGNED32) && defined(acc_int32e_t) - typedef struct { acc_uint32e_t v __attribute__((__packed__)); } __acc_ua32_t; + typedef struct { __acc_ua_volatile acc_uint32e_t v __attribute__((__packed__)); } __acc_ua32_t; # define __acc_ua32_t __acc_ua32_t #endif #if !defined(__acc_ua64_t) && (ACC_OPT_UNALIGNED64) && defined(acc_int64l_t) - typedef struct { acc_uint64l_t v __attribute__((__packed__)); } __acc_ua64_t; + typedef struct { __acc_ua_volatile acc_uint64l_t v __attribute__((__packed__)); } __acc_ua64_t; # define __acc_ua64_t __acc_ua64_t #endif #endif #if (ACC_OPT_UNALIGNED16) && defined(acc_int16e_t) -#define ACC_UA_GET16(p) (* (const acc_uint16e_t*) (const void*) (p)) -#define ACC_UA_SET16(p,v) (* (acc_uint16e_t*) (void*) (p) = (acc_uint16e_t) (v)) +#define ACC_UA_GET16(p) (* (__acc_ua_volatile const acc_uint16e_t*) (__acc_ua_volatile const void*) (p)) +#define ACC_UA_SET16(p,v) (* (__acc_ua_volatile acc_uint16e_t*) (__acc_ua_volatile void*) (p) = (acc_uint16e_t) (v)) #if (ACC_ABI_BIG_ENDIAN) # define ACC_UA_GET_BE16(p) ACC_UA_GET16(p) # define ACC_UA_SET_BE16(p,v) ACC_UA_SET16(p,v) @@ -2429,8 +2546,9 @@ typedef void (__acc_cdecl_sighandler *acc_sighandler_t)(acc_signo_t); #if !defined(ACC_CFG_NO_INLINE_ASM) && defined(__acc_forceinline) #if (ACC_ARCH_POWERPC && ACC_ABI_BIG_ENDIAN) && (ACC_CC_GNUC) #if !defined(ACC_UA_GET_LE16) -extern __acc_forceinline unsigned long __ACC_UA_GET_LE16(const void* pp) { - const acc_uint16e_t* p = (const acc_uint16e_t*) pp; +extern __acc_forceinline unsigned long __ACC_UA_GET_LE16(__acc_ua_volatile const void* pp); +extern __acc_forceinline unsigned long __ACC_UA_GET_LE16(__acc_ua_volatile const void* pp) { + __acc_ua_volatile const acc_uint16e_t* p = (__acc_ua_volatile const acc_uint16e_t*) pp; unsigned long v; __asm__ __volatile__("lhbrx %0,0,%1" : "=r" (v) : "r" (p), "m" (*p)); return v; @@ -2438,8 +2556,9 @@ extern __acc_forceinline unsigned long __ACC_UA_GET_LE16(const void* pp) { #define ACC_UA_GET_LE16(p) __ACC_UA_GET_LE16(p) #endif #if !defined(ACC_UA_SET_LE16) -extern __acc_forceinline void __ACC_UA_SET_LE16(void* pp, unsigned long v) { - acc_uint16e_t* p = (acc_uint16e_t*) pp; +extern __acc_forceinline void __ACC_UA_SET_LE16(__acc_ua_volatile void* pp, unsigned long v); +extern __acc_forceinline void __ACC_UA_SET_LE16(__acc_ua_volatile void* pp, unsigned long v) { + __acc_ua_volatile acc_uint16e_t* p = (__acc_ua_volatile acc_uint16e_t*) pp; __asm__ __volatile__("sthbrx %2,0,%1" : "=m" (*p) : "r" (p), "r" (v)); } #define ACC_UA_SET_LE16(p,v) __ACC_UA_SET_LE16(p,v) @@ -2451,8 +2570,8 @@ extern __acc_forceinline void __ACC_UA_SET_LE16(void* pp, unsigned long v) { #endif #endif #if (ACC_OPT_UNALIGNED32) && defined(acc_int32e_t) -#define ACC_UA_GET32(p) (* (const acc_uint32e_t*) (const void*) (p)) -#define ACC_UA_SET32(p,v) (* (acc_uint32e_t*) (void*) (p) = (acc_uint32e_t) (v)) +#define ACC_UA_GET32(p) (* (__acc_ua_volatile const acc_uint32e_t*) (__acc_ua_volatile const void*) (p)) +#define ACC_UA_SET32(p,v) (* (__acc_ua_volatile acc_uint32e_t*) (__acc_ua_volatile void*) (p) = (acc_uint32e_t) (v)) #if (ACC_ABI_BIG_ENDIAN) # define ACC_UA_GET_BE32(p) ACC_UA_GET32(p) # define ACC_UA_SET_BE32(p,v) ACC_UA_SET32(p,v) @@ -2463,8 +2582,9 @@ extern __acc_forceinline void __ACC_UA_SET_LE16(void* pp, unsigned long v) { #if !defined(ACC_CFG_NO_INLINE_ASM) && defined(__acc_forceinline) #if (ACC_ARCH_POWERPC && ACC_ABI_BIG_ENDIAN) && (ACC_CC_GNUC) #if !defined(ACC_UA_GET_LE32) -extern __acc_forceinline unsigned long __ACC_UA_GET_LE32(const void* pp) { - const acc_uint32e_t* p = (const acc_uint32e_t*) pp; +extern __acc_forceinline unsigned long __ACC_UA_GET_LE32(__acc_ua_volatile const void* pp); +extern __acc_forceinline unsigned long __ACC_UA_GET_LE32(__acc_ua_volatile const void* pp) { + __acc_ua_volatile const acc_uint32e_t* p = (__acc_ua_volatile const acc_uint32e_t*) pp; unsigned long v; __asm__ __volatile__("lwbrx %0,0,%1" : "=r" (v) : "r" (p), "m" (*p)); return v; @@ -2472,8 +2592,9 @@ extern __acc_forceinline unsigned long __ACC_UA_GET_LE32(const void* pp) { #define ACC_UA_GET_LE32(p) __ACC_UA_GET_LE32(p) #endif #if !defined(ACC_UA_SET_LE32) -extern __acc_forceinline void __ACC_UA_SET_LE32(void* pp, unsigned long v) { - acc_uint32e_t* p = (acc_uint32e_t*) pp; +extern __acc_forceinline void __ACC_UA_SET_LE32(__acc_ua_volatile void* pp, unsigned long v); +extern __acc_forceinline void __ACC_UA_SET_LE32(__acc_ua_volatile void* pp, unsigned long v) { + __acc_ua_volatile acc_uint32e_t* p = (__acc_ua_volatile acc_uint32e_t*) pp; __asm__ __volatile__("stwbrx %2,0,%1" : "=m" (*p) : "r" (p), "r" (v)); } #define ACC_UA_SET_LE32(p,v) __ACC_UA_SET_LE32(p,v) @@ -2485,8 +2606,8 @@ extern __acc_forceinline void __ACC_UA_SET_LE32(void* pp, unsigned long v) { #endif #endif #if (ACC_OPT_UNALIGNED64) && defined(acc_int64l_t) -#define ACC_UA_GET64(p) (* (const acc_uint64l_t*) (const void*) (p)) -#define ACC_UA_SET64(p,v) (* (acc_uint64l_t*) (void*) (p) = (acc_uint64l_t) (v)) +#define ACC_UA_GET64(p) (* (__acc_ua_volatile const acc_uint64l_t*) (__acc_ua_volatile const void*) (p)) +#define ACC_UA_SET64(p,v) (* (__acc_ua_volatile acc_uint64l_t*) (__acc_ua_volatile void*) (p) = (acc_uint64l_t) (v)) #if (ACC_ABI_BIG_ENDIAN) # define ACC_UA_GET_BE64(p) ACC_UA_GET64(p) # define ACC_UA_SET_BE64(p,v) ACC_UA_SET64(p,v) @@ -2675,6 +2796,37 @@ __acc_gnuc_extension__ typedef unsigned long long acc_ullong_t; # error "acc_intptr_t" #endif #endif +#if !defined(acc_word_t) +#if defined(ACC_WORDSIZE) && (ACC_WORDSIZE > 0) +#if (ACC_WORDSIZE == ACC_SIZEOF_ACC_INTPTR_T) && !defined(__ACC_INTPTR_T_IS_POINTER) +# define acc_word_t acc_uintptr_t +# define acc_sword_t acc_intptr_t +# define ACC_SIZEOF_ACC_WORD_T ACC_SIZEOF_ACC_INTPTR_T +#elif (ACC_WORDSIZE == ACC_SIZEOF_LONG) +# define acc_word_t unsigned long +# define acc_sword_t long +# define ACC_SIZEOF_ACC_WORD_T ACC_SIZEOF_LONG +#elif (ACC_WORDSIZE == ACC_SIZEOF_INT) +# define acc_word_t unsigned int +# define acc_sword_t int +# define ACC_SIZEOF_ACC_WORD_T ACC_SIZEOF_INT +#elif (ACC_WORDSIZE == ACC_SIZEOF_SHORT) +# define acc_word_t unsigned short +# define acc_sword_t short +# define ACC_SIZEOF_ACC_WORD_T ACC_SIZEOF_SHORT +#elif (ACC_WORDSIZE == 1) +# define acc_word_t unsigned char +# define acc_sword_t signed char +# define ACC_SIZEOF_ACC_WORD_T 1 +#elif (ACC_WORDSIZE == ACC_SIZEOF_ACC_INT64L_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 +#else +# error "acc_word_t" +#endif +#endif +#endif #if !defined(ACC_INT16_C) # if (ACC_BROKEN_INTEGRAL_CONSTANTS) && (ACC_SIZEOF_INT >= 2) # define ACC_INT16_C(c) ((c) + 0) @@ -2744,6 +2896,9 @@ __acc_gnuc_extension__ typedef unsigned long long acc_ullong_t; #if !defined(SIZEOF_ACC_INTPTR_T) && defined(ACC_SIZEOF_ACC_INTPTR_T) # define SIZEOF_ACC_INTPTR_T ACC_SIZEOF_ACC_INTPTR_T #endif +#if !defined(SIZEOF_ACC_WORD_T) && defined(ACC_SIZEOF_ACC_WORD_T) +# define SIZEOF_ACC_WORD_T ACC_SIZEOF_ACC_WORD_T +#endif #if 1 && !defined(acc_signo_t) && defined(__linux__) && defined(__dietlibc__) && (ACC_SIZEOF_INT != 4) # define acc_signo_t acc_int32e_t #endif @@ -2760,24 +2915,26 @@ typedef void (__acc_cdecl_sighandler *acc_sighandler_t)(acc_signo_t); # if !defined(ACC_CFG_NO_ACC_UA_H) #if (ACC_CC_GNUC && (ACC_CC_GNUC < 0x020700ul)) #elif (ACC_CC_GNUC && (ACC_CC_GNUC < 0x020800ul)) && defined(__cplusplus) +#elif (ACC_CC_INTELC) && defined(_WIN32) #elif (ACC_CC_INTELC && (__INTEL_COMPILER < 700)) +#elif (ACC_CC_LLVM) #elif (ACC_CC_GNUC || ACC_CC_INTELC || ACC_CC_PATHSCALE) #if !defined(__acc_ua16_t) && (ACC_OPT_UNALIGNED16) && defined(acc_int16e_t) - typedef struct { acc_uint16e_t v __attribute__((__packed__)); } __acc_ua16_t; + typedef struct { __acc_ua_volatile acc_uint16e_t v __attribute__((__packed__)); } __acc_ua16_t; # define __acc_ua16_t __acc_ua16_t #endif #if !defined(__acc_ua32_t) && (ACC_OPT_UNALIGNED32) && defined(acc_int32e_t) - typedef struct { acc_uint32e_t v __attribute__((__packed__)); } __acc_ua32_t; + typedef struct { __acc_ua_volatile acc_uint32e_t v __attribute__((__packed__)); } __acc_ua32_t; # define __acc_ua32_t __acc_ua32_t #endif #if !defined(__acc_ua64_t) && (ACC_OPT_UNALIGNED64) && defined(acc_int64l_t) - typedef struct { acc_uint64l_t v __attribute__((__packed__)); } __acc_ua64_t; + typedef struct { __acc_ua_volatile acc_uint64l_t v __attribute__((__packed__)); } __acc_ua64_t; # define __acc_ua64_t __acc_ua64_t #endif #endif #if (ACC_OPT_UNALIGNED16) && defined(acc_int16e_t) -#define ACC_UA_GET16(p) (* (const acc_uint16e_t*) (const void*) (p)) -#define ACC_UA_SET16(p,v) (* (acc_uint16e_t*) (void*) (p) = (acc_uint16e_t) (v)) +#define ACC_UA_GET16(p) (* (__acc_ua_volatile const acc_uint16e_t*) (__acc_ua_volatile const void*) (p)) +#define ACC_UA_SET16(p,v) (* (__acc_ua_volatile acc_uint16e_t*) (__acc_ua_volatile void*) (p) = (acc_uint16e_t) (v)) #if (ACC_ABI_BIG_ENDIAN) # define ACC_UA_GET_BE16(p) ACC_UA_GET16(p) # define ACC_UA_SET_BE16(p,v) ACC_UA_SET16(p,v) @@ -2788,8 +2945,9 @@ typedef void (__acc_cdecl_sighandler *acc_sighandler_t)(acc_signo_t); #if !defined(ACC_CFG_NO_INLINE_ASM) && defined(__acc_forceinline) #if (ACC_ARCH_POWERPC && ACC_ABI_BIG_ENDIAN) && (ACC_CC_GNUC) #if !defined(ACC_UA_GET_LE16) -extern __acc_forceinline unsigned long __ACC_UA_GET_LE16(const void* pp) { - const acc_uint16e_t* p = (const acc_uint16e_t*) pp; +extern __acc_forceinline unsigned long __ACC_UA_GET_LE16(__acc_ua_volatile const void* pp); +extern __acc_forceinline unsigned long __ACC_UA_GET_LE16(__acc_ua_volatile const void* pp) { + __acc_ua_volatile const acc_uint16e_t* p = (__acc_ua_volatile const acc_uint16e_t*) pp; unsigned long v; __asm__ __volatile__("lhbrx %0,0,%1" : "=r" (v) : "r" (p), "m" (*p)); return v; @@ -2797,8 +2955,9 @@ extern __acc_forceinline unsigned long __ACC_UA_GET_LE16(const void* pp) { #define ACC_UA_GET_LE16(p) __ACC_UA_GET_LE16(p) #endif #if !defined(ACC_UA_SET_LE16) -extern __acc_forceinline void __ACC_UA_SET_LE16(void* pp, unsigned long v) { - acc_uint16e_t* p = (acc_uint16e_t*) pp; +extern __acc_forceinline void __ACC_UA_SET_LE16(__acc_ua_volatile void* pp, unsigned long v); +extern __acc_forceinline void __ACC_UA_SET_LE16(__acc_ua_volatile void* pp, unsigned long v) { + __acc_ua_volatile acc_uint16e_t* p = (__acc_ua_volatile acc_uint16e_t*) pp; __asm__ __volatile__("sthbrx %2,0,%1" : "=m" (*p) : "r" (p), "r" (v)); } #define ACC_UA_SET_LE16(p,v) __ACC_UA_SET_LE16(p,v) @@ -2810,8 +2969,8 @@ extern __acc_forceinline void __ACC_UA_SET_LE16(void* pp, unsigned long v) { #endif #endif #if (ACC_OPT_UNALIGNED32) && defined(acc_int32e_t) -#define ACC_UA_GET32(p) (* (const acc_uint32e_t*) (const void*) (p)) -#define ACC_UA_SET32(p,v) (* (acc_uint32e_t*) (void*) (p) = (acc_uint32e_t) (v)) +#define ACC_UA_GET32(p) (* (__acc_ua_volatile const acc_uint32e_t*) (__acc_ua_volatile const void*) (p)) +#define ACC_UA_SET32(p,v) (* (__acc_ua_volatile acc_uint32e_t*) (__acc_ua_volatile void*) (p) = (acc_uint32e_t) (v)) #if (ACC_ABI_BIG_ENDIAN) # define ACC_UA_GET_BE32(p) ACC_UA_GET32(p) # define ACC_UA_SET_BE32(p,v) ACC_UA_SET32(p,v) @@ -2822,8 +2981,9 @@ extern __acc_forceinline void __ACC_UA_SET_LE16(void* pp, unsigned long v) { #if !defined(ACC_CFG_NO_INLINE_ASM) && defined(__acc_forceinline) #if (ACC_ARCH_POWERPC && ACC_ABI_BIG_ENDIAN) && (ACC_CC_GNUC) #if !defined(ACC_UA_GET_LE32) -extern __acc_forceinline unsigned long __ACC_UA_GET_LE32(const void* pp) { - const acc_uint32e_t* p = (const acc_uint32e_t*) pp; +extern __acc_forceinline unsigned long __ACC_UA_GET_LE32(__acc_ua_volatile const void* pp); +extern __acc_forceinline unsigned long __ACC_UA_GET_LE32(__acc_ua_volatile const void* pp) { + __acc_ua_volatile const acc_uint32e_t* p = (__acc_ua_volatile const acc_uint32e_t*) pp; unsigned long v; __asm__ __volatile__("lwbrx %0,0,%1" : "=r" (v) : "r" (p), "m" (*p)); return v; @@ -2831,8 +2991,9 @@ extern __acc_forceinline unsigned long __ACC_UA_GET_LE32(const void* pp) { #define ACC_UA_GET_LE32(p) __ACC_UA_GET_LE32(p) #endif #if !defined(ACC_UA_SET_LE32) -extern __acc_forceinline void __ACC_UA_SET_LE32(void* pp, unsigned long v) { - acc_uint32e_t* p = (acc_uint32e_t*) pp; +extern __acc_forceinline void __ACC_UA_SET_LE32(__acc_ua_volatile void* pp, unsigned long v); +extern __acc_forceinline void __ACC_UA_SET_LE32(__acc_ua_volatile void* pp, unsigned long v) { + __acc_ua_volatile acc_uint32e_t* p = (__acc_ua_volatile acc_uint32e_t*) pp; __asm__ __volatile__("stwbrx %2,0,%1" : "=m" (*p) : "r" (p), "r" (v)); } #define ACC_UA_SET_LE32(p,v) __ACC_UA_SET_LE32(p,v) @@ -2844,8 +3005,8 @@ extern __acc_forceinline void __ACC_UA_SET_LE32(void* pp, unsigned long v) { #endif #endif #if (ACC_OPT_UNALIGNED64) && defined(acc_int64l_t) -#define ACC_UA_GET64(p) (* (const acc_uint64l_t*) (const void*) (p)) -#define ACC_UA_SET64(p,v) (* (acc_uint64l_t*) (void*) (p) = (acc_uint64l_t) (v)) +#define ACC_UA_GET64(p) (* (__acc_ua_volatile const acc_uint64l_t*) (__acc_ua_volatile const void*) (p)) +#define ACC_UA_SET64(p,v) (* (__acc_ua_volatile acc_uint64l_t*) (__acc_ua_volatile void*) (p) = (acc_uint64l_t) (v)) #if (ACC_ABI_BIG_ENDIAN) # define ACC_UA_GET_BE64(p) ACC_UA_GET64(p) # define ACC_UA_SET_BE64(p,v) ACC_UA_SET64(p,v) @@ -3239,6 +3400,38 @@ ACCLIB_EXTERN(long, acc_hwrite) (int, const acc_hvoid_p, long); #endif ACCLIB_EXTERN(long, acc_safe_hread) (int, acc_hvoid_p, long); ACCLIB_EXTERN(long, acc_safe_hwrite) (int, const acc_hvoid_p, long); +ACCLIB_EXTERN(unsigned, acc_ua_get_be16) (const acc_hvoid_p); +ACCLIB_EXTERN(acc_uint32l_t, acc_ua_get_be24) (const acc_hvoid_p); +ACCLIB_EXTERN(acc_uint32l_t, acc_ua_get_be32) (const acc_hvoid_p); +ACCLIB_EXTERN(void, acc_ua_set_be16) (acc_hvoid_p, unsigned); +ACCLIB_EXTERN(void, acc_ua_set_be24) (acc_hvoid_p, acc_uint32l_t); +ACCLIB_EXTERN(void, acc_ua_set_be32) (acc_hvoid_p, acc_uint32l_t); +ACCLIB_EXTERN(unsigned, acc_ua_get_le16) (const acc_hvoid_p); +ACCLIB_EXTERN(acc_uint32l_t, acc_ua_get_le24) (const acc_hvoid_p); +ACCLIB_EXTERN(acc_uint32l_t, acc_ua_get_le32) (const acc_hvoid_p); +ACCLIB_EXTERN(void, acc_ua_set_le16) (acc_hvoid_p, unsigned); +ACCLIB_EXTERN(void, acc_ua_set_le24) (acc_hvoid_p, acc_uint32l_t); +ACCLIB_EXTERN(void, acc_ua_set_le32) (acc_hvoid_p, acc_uint32l_t); +#if defined(acc_int64l_t) +ACCLIB_EXTERN(acc_uint64l_t, acc_ua_get_be64) (const acc_hvoid_p); +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(int, acc_vget_int) (int, int); +ACCLIB_EXTERN_NOINLINE(long, acc_vget_long) (long, int); +#if defined(acc_int64l_t) +ACCLIB_EXTERN_NOINLINE(acc_int64l_t, acc_vget_acc_int64l_t) (acc_int64l_t, int); +#endif +ACCLIB_EXTERN_NOINLINE(acc_hsize_t, acc_vget_acc_hsize_t) (acc_hsize_t, int); +#if !defined(ACC_CFG_NO_FLOAT) +ACCLIB_EXTERN_NOINLINE(float, acc_vget_float) (float, int); +#endif +#if !defined(ACC_CFG_NO_DOUBLE) +ACCLIB_EXTERN_NOINLINE(double, acc_vget_double) (double, int); +#endif +ACCLIB_EXTERN_NOINLINE(acc_hvoid_p, acc_vget_acc_hvoid_p) (acc_hvoid_p, int); +ACCLIB_EXTERN_NOINLINE(const acc_hvoid_p, acc_vget_acc_hvoid_cp) (const acc_hvoid_p, int); #if !defined(ACC_FN_PATH_MAX) #if (ACC_OS_DOS16 || ACC_OS_WIN16) # define ACC_FN_PATH_MAX 143 @@ -3249,7 +3442,7 @@ ACCLIB_EXTERN(long, acc_safe_hwrite) (int, const acc_hvoid_p, long); #endif #endif #if !defined(ACC_FN_PATH_MAX) -# define ACC_FN_PATH_MAX 1024 +# define ACC_FN_PATH_MAX 1023 #endif #if !defined(ACC_FN_NAME_MAX) #if (ACC_OS_DOS16 || ACC_OS_WIN16) @@ -3364,7 +3557,10 @@ ACCLIB_EXTERN_NOINLINE(void, acc_debug_nop) (void); 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) +#if !defined(acc_int64l_t) || defined(ACC_CFG_NO_DOUBLE) +# undef __ACCLIB_UCLOCK_USE_RDTSC +# undef __ACCLIB_UCLOCK_USE_PERFCTR +#else typedef struct { void* h; int mode; @@ -3389,19 +3585,20 @@ typedef struct { ACCLIB_EXTERN(int, acc_perfctr_open) (acc_perfctr_handle_p); ACCLIB_EXTERN(int, acc_perfctr_close) (acc_perfctr_handle_p); ACCLIB_EXTERN(void, acc_perfctr_read) (acc_perfctr_handle_p, acc_perfctr_clock_p); +#if !defined(ACC_CFG_NO_DOUBLE) ACCLIB_EXTERN(double, acc_perfctr_get_elapsed) (acc_perfctr_handle_p, const acc_perfctr_clock_p, const acc_perfctr_clock_p); ACCLIB_EXTERN(double, acc_perfctr_get_elapsed_tsc) (acc_perfctr_handle_p, acc_uint64l_t); +#endif ACCLIB_EXTERN(int, acc_perfctr_flush_cpu_cache) (acc_perfctr_handle_p, unsigned); -#else -# undef __ACCLIB_UCLOCK_USE_RDTSC -# undef __ACCLIB_UCLOCK_USE_PERFCTR #endif #if defined(acc_int32e_t) ACCLIB_EXTERN(int, acc_tsc_read) (acc_uint32e_t*); #else # undef __ACCLIB_UCLOCK_USE_RDTSC #endif -#if (ACC_OS_CYGWIN || ACC_OS_EMX || ACC_OS_WIN32 || ACC_OS_WIN64) && (ACC_HAVE_WINDOWS_H) && defined(acc_int64l_t) +#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) # define __ACCLIB_UCLOCK_USE_QPC 1 #else # undef __ACCLIB_UCLOCK_USE_QPC @@ -3420,7 +3617,9 @@ typedef struct { union { acc_uint32l_t t32; #if !(ACC_OS_DOS16 || ACC_OS_WIN16) +# if !defined(ACC_CFG_NO_DOUBLE) double td; +# endif # if defined(acc_int64l_t) acc_int64l_t t64; # endif @@ -3445,26 +3644,10 @@ typedef struct { ACCLIB_EXTERN(int, acc_uclock_open) (acc_uclock_handle_p); ACCLIB_EXTERN(int, acc_uclock_close) (acc_uclock_handle_p); ACCLIB_EXTERN(void, acc_uclock_read) (acc_uclock_handle_p, acc_uclock_p); +#if !defined(ACC_CFG_NO_DOUBLE) ACCLIB_EXTERN(double, acc_uclock_get_elapsed) (acc_uclock_handle_p, const acc_uclock_p, const acc_uclock_p); -ACCLIB_EXTERN(int, acc_uclock_flush_cpu_cache) (acc_uclock_handle_p, unsigned); -ACCLIB_EXTERN(unsigned, acc_ua_get_be16) (const acc_hvoid_p); -ACCLIB_EXTERN(acc_uint32l_t, acc_ua_get_be24) (const acc_hvoid_p); -ACCLIB_EXTERN(acc_uint32l_t, acc_ua_get_be32) (const acc_hvoid_p); -ACCLIB_EXTERN(void, acc_ua_set_be16) (acc_hvoid_p, unsigned); -ACCLIB_EXTERN(void, acc_ua_set_be24) (acc_hvoid_p, acc_uint32l_t); -ACCLIB_EXTERN(void, acc_ua_set_be32) (acc_hvoid_p, acc_uint32l_t); -ACCLIB_EXTERN(unsigned, acc_ua_get_le16) (const acc_hvoid_p); -ACCLIB_EXTERN(acc_uint32l_t, acc_ua_get_le24) (const acc_hvoid_p); -ACCLIB_EXTERN(acc_uint32l_t, acc_ua_get_le32) (const acc_hvoid_p); -ACCLIB_EXTERN(void, acc_ua_set_le16) (acc_hvoid_p, unsigned); -ACCLIB_EXTERN(void, acc_ua_set_le24) (acc_hvoid_p, acc_uint32l_t); -ACCLIB_EXTERN(void, acc_ua_set_le32) (acc_hvoid_p, acc_uint32l_t); -#if defined(acc_int64l_t) -ACCLIB_EXTERN(acc_uint64l_t, acc_ua_get_be64) (const acc_hvoid_p); -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(int, acc_uclock_flush_cpu_cache) (acc_uclock_handle_p, unsigned); typedef struct { const char* name; int has_arg; @@ -3708,9 +3891,18 @@ ACCLIB_EXTERN(int, acc_spawnve) (int mode, const char* fn, const char* const * a # endif #endif ACCCHK_ASSERT(1 == 1) - ACCCHK_ASSERT(__ACC_MASK_GEN(1UL,2) == 3) - ACCCHK_ASSERT(__ACC_MASK_GEN(1UL,8) == 255) - ACCCHK_ASSERT(__ACC_MASK_GEN(1UL,16) == 0xffffU) + ACCCHK_ASSERT(__ACC_MASK_GEN(1U,2) == 3) + ACCCHK_ASSERT(__ACC_MASK_GEN(1U,8) == 255) +#if (SIZEOF_INT >= 2) + ACCCHK_ASSERT(__ACC_MASK_GEN(1,15) == 32767) + ACCCHK_ASSERT(__ACC_MASK_GEN(1U,16) == 0xffffU) +#else + ACCCHK_ASSERT(__ACC_MASK_GEN(1UL,16) == 0xffffUL) +#endif +#if (SIZEOF_INT >= 4) + ACCCHK_ASSERT(__ACC_MASK_GEN(1,31) == 2147483647) + ACCCHK_ASSERT(__ACC_MASK_GEN(1U,32) == 0xffffffffU) +#endif #if (SIZEOF_LONG >= 4) ACCCHK_ASSERT(__ACC_MASK_GEN(1UL,32) == 0xffffffffUL) #endif @@ -3718,7 +3910,7 @@ ACCLIB_EXTERN(int, acc_spawnve) (int mode, const char* fn, const char* const * a ACCCHK_ASSERT(__ACC_MASK_GEN(1UL,64) == 0xffffffffffffffffUL) #endif #if !defined(ACC_BROKEN_INTEGRAL_PROMOTION) - ACCCHK_ASSERT(__ACC_MASK_GEN(1UL,SIZEOF_INT*8) == ~(0u)) + ACCCHK_ASSERT(__ACC_MASK_GEN(1U,SIZEOF_INT*8) == ~(0u)) ACCCHK_ASSERT(__ACC_MASK_GEN(1UL,SIZEOF_LONG*8) == ~(0ul)) #endif ACCCHK_ASSERT(((-1) >> 7) == -1) @@ -3924,6 +4116,13 @@ ACCLIB_EXTERN(int, acc_spawnve) (int mode, const char* fn, const char* const * a ACCCHK_ASSERT(sizeof(acc_intptr_t) >= sizeof(void *)) ACCCHK_ASSERT(sizeof(acc_intptr_t) == SIZEOF_ACC_INTPTR_T) ACCCHK_ASSERT(sizeof(acc_intptr_t) == sizeof(acc_uintptr_t)) +#if defined(acc_word_t) + ACCCHK_ASSERT(ACC_WORDSIZE == SIZEOF_ACC_WORD_T) + ACCCHK_ASSERT_IS_UNSIGNED_T(acc_word_t) + ACCCHK_ASSERT_IS_SIGNED_T(acc_sword_t) + ACCCHK_ASSERT(sizeof(acc_word_t) == SIZEOF_ACC_WORD_T) + ACCCHK_ASSERT(sizeof(acc_word_t) == sizeof(acc_sword_t)) +#endif #if defined(ACC_INT16_C) ACCCHK_ASSERT(sizeof(ACC_INT16_C(0)) >= 2) ACCCHK_ASSERT(sizeof(ACC_UINT16_C(0)) >= 2) @@ -4259,6 +4458,77 @@ ACCLIB_PUBLIC(void, acc_ua_set_le64) (acc_hvoid_p p, acc_uint64l_t v) } #endif #endif +#if defined(ACC_WANT_ACCLIB_VGET) +# undef ACC_WANT_ACCLIB_VGET +#define __ACCLIB_VGET_CH_INCLUDED 1 +#if !defined(ACCLIB_PUBLIC) +# define ACCLIB_PUBLIC(r,f) r __ACCLIB_FUNCNAME(f) +#endif +#if !defined(ACCLIB_PUBLIC_NOINLINE) +# if defined(__acc_noinline) +# define ACCLIB_PUBLIC_NOINLINE(r,f) __acc_noinline r __ACCLIB_FUNCNAME(f) +# else +# define ACCLIB_PUBLIC_NOINLINE(r,f) r __ACCLIB_FUNCNAME(f) +# endif +#endif +extern void* volatile __acc_vget_ptr; +void* volatile __acc_vget_ptr = (void *) 0; +#ifndef __ACC_VGET_BODY +#define __ACC_VGET_BODY(T) \ + if __acc_unlikely(__acc_vget_ptr) { \ + * (T *) __acc_vget_ptr = v; \ + * (int *) __acc_vget_ptr = expr; \ + v = * (T *) __acc_vget_ptr; \ + } \ + return v; +#endif +ACCLIB_PUBLIC_NOINLINE(int, acc_vget_int) (int v, int expr) +{ + __ACC_VGET_BODY(int) +} +ACCLIB_PUBLIC_NOINLINE(long, acc_vget_long) (long v, int expr) +{ + __ACC_VGET_BODY(long) +} +#if defined(acc_int64l_t) +ACCLIB_PUBLIC_NOINLINE(acc_int64l_t, acc_vget_acc_int64l_t) (acc_int64l_t v, int expr) +{ + __ACC_VGET_BODY(acc_int64l_t) +} +#endif +ACCLIB_PUBLIC_NOINLINE(acc_hsize_t, acc_vget_acc_hsize_t) (acc_hsize_t v, int expr) +{ + __ACC_VGET_BODY(acc_hsize_t) +} +#if !defined(ACC_CFG_NO_FLOAT) +ACCLIB_PUBLIC_NOINLINE(float, acc_vget_float) (float v, int expr) +{ + __ACC_VGET_BODY(float) +} +#endif +#if !defined(ACC_CFG_NO_DOUBLE) +ACCLIB_PUBLIC_NOINLINE(double, acc_vget_double) (double v, int expr) +{ + __ACC_VGET_BODY(double) +} +#endif +ACCLIB_PUBLIC_NOINLINE(acc_hvoid_p, acc_vget_acc_hvoid_p) (acc_hvoid_p v, int expr) +{ + __ACC_VGET_BODY(acc_hvoid_p) +} +#if (ACC_ARCH_I086 && ACC_CC_TURBOC && (__TURBOC__ == 0x0295)) && !defined(__cplusplus) +ACCLIB_PUBLIC_NOINLINE(acc_hvoid_p, acc_vget_acc_hvoid_cp) (const acc_hvoid_p vv, int expr) +{ + acc_hvoid_p v = (acc_hvoid_p) vv; + __ACC_VGET_BODY(acc_hvoid_p) +} +#else +ACCLIB_PUBLIC_NOINLINE(const acc_hvoid_p, acc_vget_acc_hvoid_cp) (const acc_hvoid_p v, int expr) +{ + __ACC_VGET_BODY(const acc_hvoid_p) +} +#endif +#endif #if defined(ACC_WANT_ACCLIB_HMEMCPY) # undef ACC_WANT_ACCLIB_HMEMCPY #define __ACCLIB_HMEMCPY_CH_INCLUDED 1 @@ -4410,7 +4680,7 @@ ACCLIB_PUBLIC(acc_uint32l_t, acc_randmt) (acc_randmt_p r) ACCLIB_PUBLIC(acc_uint32l_t, acc_randmt_r32) (acc_randmt_p r) { acc_uint32l_t v; - if (r->n == 624) { + if __acc_unlikely(r->n == 624) { int i = 0, j; r->n = 0; do { @@ -4448,7 +4718,7 @@ ACCLIB_PUBLIC(acc_uint32l_t, acc_randmt64) (acc_randmt64_p r) ACCLIB_PUBLIC(acc_uint64l_t, acc_randmt64_r64) (acc_randmt64_p r) { acc_uint64l_t v; - if (r->n == 312) { + if __acc_unlikely(r->n == 312) { int i = 0, j; r->n = 0; do { @@ -4928,6 +5198,8 @@ ACCLIB_PUBLIC(long, acc_safe_hwrite) (int fd, const acc_hvoid_p buf, long size) # define __ACCLIB_UCLOCK_USE_CLOCK 1 #elif (ACC_OS_CONSOLE) && defined(CLOCKS_PER_SEC) # define __ACCLIB_UCLOCK_USE_CLOCK 1 +#elif (ACC_LIBC_ISOC90 || ACC_LIBC_ISOC99) && defined(CLOCKS_PER_SEC) +# define __ACCLIB_UCLOCK_USE_CLOCK 1 #endif #if (__ACCLIB_UCLOCK_USE_CLOCK) && !defined(CLOCKS_PER_SEC) # if defined(CLK_TCK) @@ -5062,7 +5334,13 @@ ACCLIB_PUBLIC(double, acc_uclock_get_elapsed) (acc_uclock_handle_p h, const acc_ d = (double) (stop->ticks.t64 - start->ticks.t64) / (UCLOCKS_PER_SEC); #elif (__ACCLIB_UCLOCK_USE_CLOCK) && defined(acc_int64l_t) h->mode = 13; - d = (double) (stop->ticks.t64 - start->ticks.t64) / (CLOCKS_PER_SEC); + { + acc_int64l_t t; + t = stop->ticks.t64 - start->ticks.t64; + if (t < 0) + t += sizeof(clock_t) == 4 ? ACC_INT64_C(0x100000000) : ACC_INT64_C(0); + d = (double) t / (CLOCKS_PER_SEC); + } #elif (__ACCLIB_UCLOCK_USE_CLOCK) h->mode = 14; d = (double) (stop->ticks.t32 - start->ticks.t32) / (CLOCKS_PER_SEC); @@ -5291,7 +5569,7 @@ ACCLIB_PUBLIC_NOINLINE(void, acc_debug_break) (void) #elif (ACC_OS_WIN32) && (ACC_HAVE_WINDOWS_H) DebugBreak(); #else - * (int *) 0x1 = -1; + * (volatile int *) 0x1 = -1; #endif } ACCLIB_PUBLIC_NOINLINE(void, acc_debug_nop) (void) @@ -5387,8 +5665,18 @@ ACC_EXTERN_C int __acc_cdecl _setargv(void) { return __setargv(); } #define __ACCLIB_HAVE_ACC_WILDARGV 1 ACCLIB_PUBLIC(void, acc_wildargv) (int* argc, char*** argv) { - _response(argc, argv); - _wildcard(argc, argv); + if (argc && argv) { + _response(argc, argv); + _wildcard(argc, argv); + } +} +#endif +#if (ACC_OS_CONSOLE_PSP) && defined(__PSPSDK_DEBUG__) +#define __ACCLIB_HAVE_ACC_WILDARGV 1 +ACC_EXTERN_C int acc_psp_init_module(int*, char***, int); +ACCLIB_PUBLIC(void, acc_wildargv) (int* argc, char*** argv) +{ + acc_psp_init_module(argc, argv, -1); } #endif #if !defined(__ACCLIB_HAVE_ACC_WILDARGV)