diff options
author | wez <wez@1665872d-e22b-0410-9e5d-a57ad4215e6d> | 2006-03-10 02:45:59 +0000 |
---|---|---|
committer | wez <wez@1665872d-e22b-0410-9e5d-a57ad4215e6d> | 2006-03-10 02:45:59 +0000 |
commit | b83ff2ab9d2939c71d8acdf865a901cc6a58f7e3 (patch) | |
tree | 20a8873df9a44fda57bd129b64c85c1d059330bc /sol_compat.h | |
parent | ea7a8f10a4c21ef7130e22cf0a1195deebf3514d (diff) | |
download | portableumem-b83ff2ab9d2939c71d8acdf865a901cc6a58f7e3.tar.gz |
Initial revision
git-svn-id: https://labs.omniti.com/portableumem/trunk@2 1665872d-e22b-0410-9e5d-a57ad4215e6d
Diffstat (limited to 'sol_compat.h')
-rw-r--r-- | sol_compat.h | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/sol_compat.h b/sol_compat.h new file mode 100644 index 0000000..254a8b1 --- /dev/null +++ b/sol_compat.h @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2006 OmniTI, Inc. All rights reserved + * This header file distributed under the terms of the CDDL. + * Portions Copyright 2004 Sun Microsystems, Inc. All Rights reserved. + */ +#ifndef _EC_UMEM_SOL_COMPAT_H_ +#define _EC_UMEM_SOL_COMPAT_H_ + +#if defined(__MACH__) || defined(_WIN32) +#define NO_WEAK_SYMBOLS +#define _umem_cache_alloc(a,b) umem_cache_alloc(a,b) +#define _umem_cache_free(a,b) umem_cache_free(a,b) +#define _umem_zalloc(a,b) umem_zalloc(a,b) +#define _umem_alloc(a,b) umem_alloc(a,b) +#define _umem_alloc_align(a,b,c) umem_alloc_align(a,b,c) +#define _umem_free(a,b) umem_free(a,b) +#define _umem_free_align(a,b) umem_free_align(a,b) +#endif + +#ifdef _WIN32 +#define bcopy(s, d, n) memcpy(d, s, n) +#define bzero(m, s) memset(m, 0, s) +#endif + +typedef pthread_t thread_t; +typedef pthread_mutex_t mutex_t; +typedef pthread_cond_t cond_t; +typedef u_int64_t hrtime_t; +typedef uint32_t uint_t; +typedef unsigned long ulong_t; +typedef struct timespec timestruc_t; +typedef long long longlong_t; +typedef struct timespec timespec_t; +static INLINE hrtime_t gethrtime(void) { + struct timeval tv; + gettimeofday(&tv, NULL); + return (((u_int64_t)tv.tv_sec) << 32) | tv.tv_usec; +} +# define thr_self() pthread_self() +static INLINE thread_t _thr_self(void) { + return thr_self(); +} +#if defined(_MACH_PORT_T) +#define CPUHINT() (pthread_mach_thread_np(pthread_self())) +#endif +# define thr_sigsetmask pthread_sigmask + +#define THR_BOUND 1 +#define THR_DETACHED 2 +#define THR_DAEMON 4 + +static INLINE int thr_create(void *stack_base, + size_t stack_size, THR_RETURN (THR_API *start_func)(void*), + void *arg, long flags, thread_t *new_thread_ID) +{ + int ret; + pthread_attr_t attr; + + pthread_attr_init(&attr); + + if (flags & THR_DETACHED) { + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); + } + ret = pthread_create(new_thread_ID, &attr, start_func, arg); + pthread_attr_destroy(&attr); + return ret; +} + + +# define mutex_init(mp, type, arg) pthread_mutex_init(mp, NULL) +# define mutex_lock(mp) pthread_mutex_lock(mp) +# define mutex_unlock(mp) pthread_mutex_unlock(mp) +# define mutex_destroy(mp) pthread_mutex_destroy(mp) +# define mutex_trylock(mp) pthread_mutex_trylock(mp) +# define DEFAULTMUTEX PTHREAD_MUTEX_INITIALIZER +# define DEFAULTCV PTHREAD_COND_INITIALIZER +# define MUTEX_HELD(mp) 1 /* not really, but only used in an assert */ + +# define cond_init(c, type, arg) pthread_cond_init(c, NULL) +# define cond_wait(c, m) pthread_cond_wait(c, m) +# define _cond_wait(c, m) pthread_cond_wait(c, m) +# define cond_signal(c) pthread_cond_signal(c) +# define cond_broadcast(c) pthread_cond_broadcast(c) +# define cond_destroy(c) pthread_cond_destroy(c) +# define cond_timedwait pthread_cond_timedwait +# define _cond_timedwait pthread_cond_timedwait + +#ifndef RTLD_FIRST +# define RTLD_FIRST 0 +#endif + +#include "ec_atomic.h" + +#define P2PHASE(x, align) ((x) & ((align) - 1)) +#define P2ALIGN(x, align) ((x) & -(align)) +#define P2NPHASE(x, align) (-(x) & ((align) - 1)) +#define P2ROUNDUP(x, align) (-(-(x) & -(align))) +#define P2END(x, align) (-(~(x) & -(align))) +#define P2PHASEUP(x, align, phase) ((phase) - (((phase) - (x)) & -(align))) +#define P2CROSS(x, y, align) (((x) ^ (y)) > (align) - 1) +#define P2SAMEHIGHBIT(x, y) (((x) ^ (y)) < ((x) & (y))) +#define IS_P2ALIGNED(v, a) ((((uintptr_t)(v)) & ((uintptr_t)(a) - 1)) == 0) +#define ISP2(x) (((x) & ((x) - 1)) == 0) + +/* beware! umem only uses these atomic adds for incrementing by 1 */ +#define atomic_add_64(lvalptr, delta) ec_atomic_inc64(lvalptr) +#define atomic_add_32_nv(a, b) ec_atomic_inc(a) + +#ifndef NANOSEC +#define NANOSEC 1000000000 +#endif + +#ifdef _WIN32 +#define issetugid() 0 +#else +#define issetugid() (geteuid() == 0) +#endif + +#define _sysconf(a) sysconf(a) +#define __NORETURN __attribute__ ((noreturn)) + +#define EC_UMEM_DUMMY_PCSTACK 1 +static INLINE int __nthreads(void) +{ + /* or more; just to force multi-threaded mode */ + return 2; +} + +#if (SIZEOF_VOID_P == 8) +# define _LP64 1 +#endif + +#endif |