diff --git a/cutil.c b/cutil.c index fc20da0..8194f4c 100644 --- a/cutil.c +++ b/cutil.c @@ -1,9 +1,70 @@ #include "cutil.h" #include -void* (*cu_malloc)(size_t) = CUTIL_MALLOC; -void* (*cu_realloc)(void*, size_t) = CUTIL_REALLOC; +enum cu_arch_e cutil_arch() +{ +#if defined(__x86_64__) || defined(_M_X64) + return x86_64; +#elif defined(i386) || defined(__i386__) || defined(__i386) || defined(_M_IX86) + return x86_32; +#elif defined(__ARM_ARCH_2__) + return ARM2; +#elif defined(__ARM_ARCH_3__) || defined(__ARM_ARCH_3M__) + return ARM3; +#elif defined(__ARM_ARCH_4T__) || defined(__TARGET_ARM_4T) + return ARM4T; +#elif defined(__ARM_ARCH_5_) || defined(__ARM_ARCH_5E_) + return ARM5; +#elif defined(__ARM_ARCH_6T2_) || defined(__ARM_ARCH_6T2_) + return ARM6T2; +#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) + return ARM6; +#elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) + return ARM7; +#elif defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) + return ARM7A; +#elif defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) + return ARM7R; +#elif defined(__ARM_ARCH_7M__) + return ARM7M; +#elif defined(__ARM_ARCH_7S__) + return ARM7S; +#elif defined(__aarch64__) || defined(_M_ARM64) + return ARM64; +#elif defined(mips) || defined(__mips__) || defined(__mips) + return MIPS; +#elif defined(__sh__) + return SUPERH; +#elif defined(__powerpc) || defined(__powerpc__) || defined(__powerpc64__) || defined(__POWERPC__) || defined(__ppc__) || defined(__PPC__) || defined(_ARCH_PPC) + return POWERPC; +#elif defined(__PPC64__) || defined(__ppc64__) || defined(_ARCH_PPC64) + return POWERPC64; +#elif defined(__sparc__) || defined(__sparc) + return SPARC; +#elif defined(__m68k__) + return M68K; +#else + return ARCH_UNKNOWN; +#endif +} + +void* (*cu_malloc)(size_t); +void* (*cu_realloc)(void*, size_t); void (*cu_free)(void*) = CUTIL_FREE; -void* (*cu_memset)(void*,int,size_t) = CUTIL_MEMSET; -void* (*cu_memcpy)(void*,const void*,size_t) = CUTIL_MEMCPY; -void* (*cu_memmove)(void*,const void*,size_t) = CUTIL_MEMMOVE; +void* (*cu_memset)(void*,int,size_t); +void* (*cu_memcpy)(void*,const void*,size_t); +void* (*cu_memmove)(void*,const void*,size_t); + +void cutil_init() +{ + cu_malloc = CUTIL_MALLOC; + cu_realloc = CUTIL_REALLOC; + cu_free = CUTIL_FREE; + cu_memset = CUTIL_MEMSET; + cu_memcpy = CUTIL_MEMCPY; + cu_memmove = CUTIL_MEMMOVE; +} + +void cutil_exit() +{ +} diff --git a/cutil.h b/cutil.h index 1715391..7b1d547 100644 --- a/cutil.h +++ b/cutil.h @@ -4,6 +4,32 @@ #include "cutypes.h" #include +enum cu_arch_e { + ARCH_UNKNOWN = 0, + x86_64, + x86_32, + ARM2, + ARM3, + ARM4T, + ARM5, + ARM6T2, + ARM6, + ARM7, + ARM7A, + ARM7R, + ARM7M, + ARM7S, + AARCH64, + MIPS, + SUPERH, + POWERPC, + POWERPC64, + SPARC, + M68K, +}; + +enum cu_arch_e cutil_arch(); + #define CUTIL_MALLOC malloc #define CUTIL_REALLOC realloc #define CUTIL_FREE free @@ -18,4 +44,7 @@ extern void* (*cu_memset)(void*,int,size_t); extern void* (*cu_memcpy)(void*,const void*,size_t); extern void* (*cu_memmove)(void*,const void*,size_t); +void cutil_init(); +void cutil_exit(); + #endif \ No newline at end of file diff --git a/test.c b/test.c index 00a1d07..3e92cf2 100644 --- a/test.c +++ b/test.c @@ -1,12 +1,14 @@ #include #include #include +#include "cutil.h" #include "list.h" #include "array.h" #include "bitmap.h" int main() { + cutil_init(); printf("[list]\n"); list_t list; list_init(&list); @@ -71,5 +73,10 @@ int main() printf("bitmap\t%u\t%u\n", bitmap_get(m, 0), bitmap_get(m, 64)); bitmap_set(m, 5, 0); printf("bitmap\t%u\n", bitmap_get(m, 5)); + + printf("[cutil]\n"); + printf("cutil_arch\t%u\n", cutil_arch()); + + cutil_exit(); return 0; } \ No newline at end of file