RPA Toolkit
0b81b5d6db79dcafa4c01ec79513fabb2ee59ebd
[rpatk.git] / arch / darwin / i386 / rtypes.h
1 #ifndef _RTYPES_H_
2 #define _RTYPES_H_
3
4 /* 
5  * Architecture dependent types. These types have to be redifined 
6  * for every architecture
7  */
8 typedef signed char rint8;
9 typedef unsigned char ruint8;
10 typedef signed short rint16;
11 typedef unsigned short ruint16;
12 typedef signed int rint32;
13 typedef unsigned int ruint32;
14 typedef signed long long rint64;
15 typedef unsigned long long ruint64;
16 typedef unsigned long rsize_t;
17 typedef signed long rssize_t;
18 typedef unsigned int ratomic_t;
19 typedef unsigned long rword;
20 typedef long rsword;
21
22
23 /*
24  * Common types. These types should be the same for most of the architectures.
25  */
26 typedef int rboolean;
27 typedef void *rpointer;
28 typedef const void *rconstpointer;
29 typedef struct {ruint32 p1; ruint32 p2;} rpair_t;
30
31 /*
32  * Atomic operations (Architecture Dependent)
33  */
34 #define R_ATOMIC_CMPXCHG(ptr, oldval, newval, resptr) \
35                 do { __asm__ __volatile__ ("lock; cmpxchgl %2, %1" \
36                         : "=a" (*(resptr)), "=m" (*ptr) \
37                         : "r" (newval), "m" (*ptr), "0" (oldval)); } while (0)
38
39 #define R_ATOMIC_XCHG(ptr, val) \
40                 do { __asm__ __volatile__("lock; xchgl %0,%1" \
41                         :"=r" ((ruint32) val) \
42                         :"m" (*(volatile ruint32 *)ptr), "0" (val) \
43                         :"memory"); } while (0)
44
45 #define R_ATOMIC_ADD(ptr, val) \
46                 do { __asm__ __volatile__ ("addl %1,%0" \
47                         : "=m" (*ptr) \
48                         : "ir" (val), "m" (*ptr)); } while (0)
49
50 #define R_ATOMIC_SUB(ptr, val) \
51                 do { __asm__ __volatile__ ("subl %1,%0" \
52                         : "=m" (*ptr) \
53                         : "ir" (val), "m" (*ptr)); } while (0)
54
55
56 #define R_DEBUG_BRAKE __asm__ ("int $3")
57 #define R_ASSERT(__a__) do {if (!(__a__)) R_DEBUG_BRAKE; } while (0)
58 #define R_SIZE_ALIGN(s, n) ((((s) + (n) - 1) / (n)) * (n))
59 #define R_MIN(a, b) ((a) < (b) ? (a): (b))
60 #define R_MAX(a, b) ((a) > (b) ? (a): (b))
61
62 #ifndef NULL
63 #ifdef __cplusplus
64 #define NULL 0
65 #else
66 #define NULL ((rpointer)0)
67 #endif
68 #endif
69
70 #ifndef TRUE
71 #define TRUE ((rboolean)1)
72 #endif
73
74 #ifndef FALSE
75 #define FALSE ((rboolean)0)
76 #endif
77
78
79 typedef enum {
80         RVALSET_NONE = 0,
81         RVALSET_OR,
82         RVALSET_XOR,
83         RVALSET_AND,
84 } rvalset_t;
85
86
87 #endif
88