blob: 6312e7a2e4fa02dd03586501452fed8b02f7e3af [file] [log] [blame]
bellardea888122004-02-16 22:12:40 +00001#ifndef QEMU_OSDEP_H
2#define QEMU_OSDEP_H
3
4#include <stdarg.h>
blueswir1128ab2f2008-08-15 18:33:42 +00005#ifdef __OpenBSD__
6#include <sys/types.h>
7#include <sys/signal.h>
8#endif
bellardea888122004-02-16 22:12:40 +00009
j_mayerdf2542c2007-11-19 00:38:33 +000010#ifndef glue
11#define xglue(x, y) x ## y
12#define glue(x, y) xglue(x, y)
13#define stringify(s) tostring(s)
14#define tostring(s) #s
15#endif
16
17#ifndef likely
18#if __GNUC__ < 3
19#define __builtin_expect(x, n) (x)
20#endif
21
22#define likely(x) __builtin_expect(!!(x), 1)
23#define unlikely(x) __builtin_expect(!!(x), 0)
24#endif
25
26#ifndef MIN
27#define MIN(a, b) (((a) < (b)) ? (a) : (b))
28#endif
29#ifndef MAX
30#define MAX(a, b) (((a) > (b)) ? (a) : (b))
31#endif
32
blueswir10954d0d2008-03-11 21:01:02 +000033#ifndef ARRAY_SIZE
34#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
35#endif
36
j_mayerdf2542c2007-11-19 00:38:33 +000037#ifndef always_inline
38#if (__GNUC__ < 3) || defined(__APPLE__)
39#define always_inline inline
40#else
41#define always_inline __attribute__ (( always_inline )) __inline__
j_mayerdf2542c2007-11-19 00:38:33 +000042#define inline always_inline
thscebdff72008-06-05 22:55:54 +000043#endif
44#else
45#define inline always_inline
46#endif
j_mayerdf2542c2007-11-19 00:38:33 +000047
48#ifdef __i386__
bellardd6564692008-01-31 09:22:27 +000049#define REGPARM __attribute((regparm(3)))
j_mayerdf2542c2007-11-19 00:38:33 +000050#else
bellardd6564692008-01-31 09:22:27 +000051#define REGPARM
j_mayerdf2542c2007-11-19 00:38:33 +000052#endif
53
bellardd62ca2b2006-08-01 15:50:14 +000054#define qemu_printf printf
bellardea888122004-02-16 22:12:40 +000055
balrog33f00272007-12-24 14:33:24 +000056void *qemu_memalign(size_t alignment, size_t size);
bellard49b470e2005-02-10 21:59:25 +000057void *qemu_vmalloc(size_t size);
58void qemu_vfree(void *ptr);
59
thsaa26bb22007-03-25 21:33:06 +000060int qemu_create_pidfile(const char *filename);
61
pbrook29b3a662007-06-07 23:09:47 +000062#ifdef _WIN32
balrogc6d29ad2007-12-16 12:55:24 +000063int ffs(int i);
64
pbrook29b3a662007-06-07 23:09:47 +000065typedef struct {
66 long tv_sec;
67 long tv_usec;
68} qemu_timeval;
69int qemu_gettimeofday(qemu_timeval *tp);
70#else
71typedef struct timeval qemu_timeval;
72#define qemu_gettimeofday(tp) gettimeofday(tp, NULL);
73#endif /* !_WIN32 */
74
bellardea888122004-02-16 22:12:40 +000075#endif