From d163d5ff3218045a12955ef825d507b0d77d4c62 Mon Sep 17 00:00:00 2001 From: Xu Han Date: Mon, 17 Jun 2024 19:43:58 +0800 Subject: [PATCH] unificate malloc/free/currentTimeMicros functions. --- src/common/common.c | 69 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) diff --git a/src/common/common.c b/src/common/common.c index 6ebcc3f4..f68516a0 100644 --- a/src/common/common.c +++ b/src/common/common.c @@ -9,7 +9,7 @@ #include #include "misc.h" - +#if 0 #if defined(__MINGW32__) || defined(__MINGW64__) || defined(_MSC_VER) #include @@ -50,6 +50,73 @@ EXPORT uint64_t Sleef_currentTimeMicros() { return (uint64_t)tp.tv_sec * INT64_C(1000000) + ((uint64_t)tp.tv_nsec/1000); } #endif // #if defined(__MINGW32__) || defined(__MINGW64__) || defined(_MSC_VER) +#else + +#if defined(__MINGW32__) || defined(__MINGW64__) || defined(_MSC_VER) +#include +#define MEM_ALIGN_SIZE 256 +#elif defined(__APPLE__) +#include + +#else // #if defined(__MINGW32__) || defined(__MINGW64__) || defined(_MSC_VER) +#include +#include +#define MEM_ALIGN_SIZE 256 + +#if defined(__FreeBSD__) || defined(__OpenBSD__) +#include +#else +#include +#endif + +#define MEM_ALIGN_SIZE 4096 + +#endif + +EXPORT void *Sleef_malloc(size_t z) +{ +#if defined(__MINGW32__) || defined(__MINGW64__) || defined(_MSC_VER) + return _aligned_malloc(z, MEM_ALIGN_SIZE); +#elif defined(__APPLE__) + void *ptr = NULL; posix_memalign(&ptr, MEM_ALIGN_SIZE, z); + return ptr; +#else // #if defined(__MINGW32__) || defined(__MINGW64__) || defined(_MSC_VER) + void *ptr = NULL; + posix_memalign(&ptr, MEM_ALIGN_SIZE, z); + return ptr; +#endif +} + +EXPORT void Sleef_free(void *ptr) +{ +#if defined(__MINGW32__) || defined(__MINGW64__) || defined(_MSC_VER) + _aligned_free(ptr); +#elif defined(__APPLE__) + free(ptr); +#else // #if defined(__MINGW32__) || defined(__MINGW64__) || defined(_MSC_VER) + free(ptr); +#endif +} + +EXPORT uint64_t Sleef_currentTimeMicros() +{ +#if defined(__MINGW32__) || defined(__MINGW64__) || defined(_MSC_VER) + struct __timeb64 t; + _ftime64(&t); + return t.time * INT64_C(1000000) + t.millitm*1000; +#elif defined(__APPLE__) + struct timeval time; + gettimeofday(&time, NULL); + return (uint64_t)((time.tv_sec * INT64_C(1000000)) + time.tv_usec); +#else // #if defined(__MINGW32__) || defined(__MINGW64__) || defined(_MSC_VER) + struct timespec tp; + clock_gettime(CLOCK_MONOTONIC, &tp); + return (uint64_t)tp.tv_sec * INT64_C(1000000) + ((uint64_t)tp.tv_nsec/1000); +#endif +} + +#endif + #ifdef _MSC_VER #include