This source file includes following definitions.
- hton64
- ntoh64
- opal_ptr_ptol
- opal_ptr_ltop
- opal_swap_bytes2
- opal_swap_bytes4
- opal_swap_bytes8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #ifndef OPAL_TYPES_H
21 #define OPAL_TYPES_H
22
23 #include "opal_config.h"
24
25 #include <stdint.h>
26 #ifdef HAVE_SYS_TYPES_H
27 #include <sys/types.h>
28 #endif
29 #ifdef HAVE_SYS_SOCKET_H
30 #include <sys/socket.h>
31 #endif
32 #ifdef HAVE_SYS_SELECT_H
33 #include <sys/select.h>
34 #endif
35 #ifdef HAVE_NETINET_IN_H
36 #include <netinet/in.h>
37 #endif
38 #ifdef HAVE_ARPA_INET_H
39 #include <arpa/inet.h>
40 #endif
41
42 #if OPAL_ENABLE_DEBUG
43 #include "opal/util/output.h"
44 #endif
45
46
47
48
49
50 typedef union {
51 uint64_t lval;
52 uint32_t ival;
53 void* pval;
54 struct {
55 uint32_t uval;
56 uint32_t lval;
57 } sval;
58 } opal_ptr_t;
59
60
61
62
63
64 #if defined(__APPLE__) || defined(__WINDOWS__)
65 typedef char* opal_iov_base_ptr_t;
66 #define OPAL_IOVBASE char
67 #else
68 #define OPAL_IOVBASE void
69 typedef void* opal_iov_base_ptr_t;
70 #endif
71
72
73
74
75
76 #if defined(HAVE_SOCKLEN_T)
77 typedef socklen_t opal_socklen_t;
78 #else
79 typedef int opal_socklen_t;
80 #endif
81
82
83
84
85
86 static inline uint64_t hton64(uint64_t val) __opal_attribute_const__;
87 static inline uint64_t hton64(uint64_t val)
88 {
89 #ifdef HAVE_UNIX_BYTESWAP
90 union { uint64_t ll;
91 uint32_t l[2];
92 } w, r;
93
94
95 if(htonl(1) == 1L)
96 return val;
97 w.ll = val;
98 r.l[0] = htonl(w.l[1]);
99 r.l[1] = htonl(w.l[0]);
100 return r.ll;
101 #else
102 return val;
103 #endif
104 }
105
106
107
108
109
110 static inline uint64_t ntoh64(uint64_t val) __opal_attribute_const__;
111 static inline uint64_t ntoh64(uint64_t val)
112 {
113 #ifdef HAVE_UNIX_BYTESWAP
114 union { uint64_t ll;
115 uint32_t l[2];
116 } w, r;
117
118
119 if(htonl(1) == 1L)
120 return val;
121 w.ll = val;
122 r.l[0] = ntohl(w.l[1]);
123 r.l[1] = ntohl(w.l[0]);
124 return r.ll;
125 #else
126 return val;
127 #endif
128 }
129
130
131
132
133
134 static inline uint64_t opal_ptr_ptol( void* ptr ) __opal_attribute_const__;
135 static inline uint64_t opal_ptr_ptol( void* ptr )
136 {
137 return (uint64_t)(uintptr_t) ptr;
138 }
139
140 static inline void* opal_ptr_ltop( uint64_t value ) __opal_attribute_const__;
141 static inline void* opal_ptr_ltop( uint64_t value )
142 {
143 #if SIZEOF_VOID_P == 4 && OPAL_ENABLE_DEBUG
144 if (value > ((1ULL << 32) - 1ULL)) {
145 opal_output(0, "Warning: truncating value in opal_ptr_ltop");
146 }
147 #endif
148 return (void*)(uintptr_t) value;
149 }
150
151 #if defined(WORDS_BIGENDIAN) || !defined(HAVE_UNIX_BYTESWAP)
152 static inline uint16_t opal_swap_bytes2(uint16_t val) __opal_attribute_const__;
153 static inline uint16_t opal_swap_bytes2(uint16_t val)
154 {
155 union { uint16_t bigval;
156 uint8_t arrayval[2];
157 } w, r;
158
159 w.bigval = val;
160 r.arrayval[0] = w.arrayval[1];
161 r.arrayval[1] = w.arrayval[0];
162
163 return r.bigval;
164 }
165
166 static inline uint32_t opal_swap_bytes4(uint32_t val) __opal_attribute_const__;
167 static inline uint32_t opal_swap_bytes4(uint32_t val)
168 {
169 union { uint32_t bigval;
170 uint8_t arrayval[4];
171 } w, r;
172
173 w.bigval = val;
174 r.arrayval[0] = w.arrayval[3];
175 r.arrayval[1] = w.arrayval[2];
176 r.arrayval[2] = w.arrayval[1];
177 r.arrayval[3] = w.arrayval[0];
178
179 return r.bigval;
180 }
181
182 static inline uint64_t opal_swap_bytes8(uint64_t val) __opal_attribute_const__;
183 static inline uint64_t opal_swap_bytes8(uint64_t val)
184 {
185 union { uint64_t bigval;
186 uint8_t arrayval[8];
187 } w, r;
188
189 w.bigval = val;
190 r.arrayval[0] = w.arrayval[7];
191 r.arrayval[1] = w.arrayval[6];
192 r.arrayval[2] = w.arrayval[5];
193 r.arrayval[3] = w.arrayval[4];
194 r.arrayval[4] = w.arrayval[3];
195 r.arrayval[5] = w.arrayval[2];
196 r.arrayval[6] = w.arrayval[1];
197 r.arrayval[7] = w.arrayval[0];
198
199 return r.bigval;
200 }
201
202 #else
203 #define opal_swap_bytes2 htons
204 #define opal_swap_bytes4 htonl
205 #define opal_swap_bytes8 hton64
206 #endif
207
208 #endif