16 #ifndef INCLUDE_NN_NLIB_PLATFORM_CAFE_H_ 17 #define INCLUDE_NN_NLIB_PLATFORM_CAFE_H_ 18 #ifndef INCLUDE_NN_NLIB_PLATFORM_H_ 19 #error do not include directly 24 #ifndef __STDC_LIMIT_MACROS 25 #define __STDC_LIMIT_MACROS 27 #ifndef __STDC_CONSTANT_MACROS 28 #define __STDC_CONSTANT_MACROS 43 #define NLIB_ALWAYS_INLINE inline __attribute__((always_inline)) 44 #define NLIB_NEVER_INLINE __attribute__((__noinline__)) 46 #define NLIB_LIKELY(x) __builtin_expect(!!(x), 1) 47 #define NLIB_UNLIKELY(x) __builtin_expect(!!(x), 0) 49 #define NLIB_LIKELY(x) (x) 50 #define NLIB_UNLIKELY(x) (x) 52 #define NLIB_EXPECT(var, exp_value) __builtin_expect((var), (exp_value)) 54 #define NLIB_CHECK_RESULT 56 #define NLIB_NORETURN __attribute__((noreturn)) 57 #define NLIB_FALLTHROUGH 58 #define NLIB_NONNULL __attribute__((nonnull)) 59 #define NLIB_NONNULL_1 __attribute__((nonnull(1))) 60 #define NLIB_NONNULL_2 __attribute__((nonnull(2))) 61 #define NLIB_NONNULL_3 __attribute__((nonnull(3))) 62 #define NLIB_NONNULL_4 __attribute__((nonnull(4))) 63 #define NLIB_NONNULL_5 __attribute__((nonnull(5))) 64 #define NLIB_NONNULL_ENABLED 65 #define NLIB_ATTRIBUTE_MALLOC __attribute__((malloc)) 66 #define NLIB_ATTRIBUTE_PURE __attribute__((pure)) 67 #define NLIB_ATTRIBUTE_CONST __attribute__((const)) 68 #define NLIB_ATTRIBUTE_ALLOC_SIZE1(n) 69 #define NLIB_ATTRIBUTE_ALLOC_SIZE2(n0, n1) 70 #define NLIB_ATTRIBUTE_ALLOC_ALIGN(algn) 71 #define NLIB_ATTRIBUTE_ASSUME_ALIGNED(n) 72 #ifndef NLIB_DEPRECATED 73 #define NLIB_DEPRECATED __attribute__((deprecated)) 75 #ifndef NLIB_DEPRECATED_MSG 76 #define NLIB_DEPRECATED_MSG(msg) __attribute__((deprecated)) 78 #define NLIB_VIS_HIDDEN 79 #define NLIB_VIS_PUBLIC 80 #define NLIB_WEAKSYMBOL __attribute__((weak)) 82 #define NLIB_MEMORY_ORDER_RELEASE __LWSYNC() 83 #define NLIB_MEMORY_ORDER_ACQUIRE __ISYNC() 84 #define NLIB_MEMORY_ORDER_ACQ_REL \ 87 #define NLIB_MEMORY_ORDER_SEQ_CST OSCoherencyBarrier() 95 #define NLIB_MUTEX_INITIALIZER \ 97 #define NLIB_RECURSIVE_MUTEX_INITIALIZER \ 99 #define NLIB_RECURSIVE_TIMED_MUTEX_INITIALIZER \ 107 #define NLIB_COND_INITIALIZER \ 110 void MyNoreturn_(
void) __attribute__((noreturn));
111 #define NLIB_ASSUME(cond) \ 120 #define NLIB_ATOMIC_RELAXED (0) 121 #define NLIB_ATOMIC_ACQUIRE (1) 122 #define NLIB_ATOMIC_RELEASE (2) 123 #define NLIB_ATOMIC_ACQ_REL (3) 124 #define NLIB_ATOMIC_SEQ_CST (7) 127 int32_t rval = *(
volatile int32_t*)ptr;
134 OSCoherencyBarrier();
137 *(
volatile int32_t*)ptr = val;
144 OSCoherencyBarrier();
147 x = OSSwapAtomic((
volatile OSAtomicVar*)ptr, (uint32_t)val);
158 int success_memorder,
int failure_memorder) {
160 OSCoherencyBarrier();
164 BOOL result = OSCompareAndSwapAtomicEx((
volatile OSAtomicVar*)ptr, (u32)*expected,
165 (u32)desired, (u32*)expected);
174 orig_val = (u32)__LWARX((u32*)ptr, 0);
175 if (orig_val == *expected) {
176 __DCBST(0, (u32)ptr);
177 if (__STWCX((u32*)ptr, 0, (u32)desired)) {
184 *expected = (int32_t)orig_val;
194 OSCoherencyBarrier();
197 x = OSAddAtomic((
volatile OSAtomicVar*)ptr, val);
205 OSCoherencyBarrier();
208 x = OSAddAtomic((
volatile OSAtomicVar*)ptr, -val);
216 OSCoherencyBarrier();
219 x = OSAndAtomic((
volatile OSAtomicVar*)ptr, val);
227 OSCoherencyBarrier();
230 x = OSXorAtomic((
volatile OSAtomicVar*)ptr, val);
238 OSCoherencyBarrier();
241 x = OSOrAtomic((
volatile OSAtomicVar*)ptr, val);
249 OSCoherencyBarrier();
252 x = OSAddAtomic((
volatile OSAtomicVar*)ptr, val);
260 OSCoherencyBarrier();
263 x = OSAddAtomic((
volatile OSAtomicVar*)ptr, -val);
271 OSCoherencyBarrier();
274 x = OSAndAtomic((
volatile OSAtomicVar*)ptr, val);
282 OSCoherencyBarrier();
285 x = OSXorAtomic((
volatile OSAtomicVar*)ptr, val);
293 OSCoherencyBarrier();
296 x = OSOrAtomic((
volatile OSAtomicVar*)ptr, val);
302 int64_t rval = (int64_t)OSGetAtomic64((
volatile OSAtomicVar64*)ptr);
309 OSCoherencyBarrier();
312 OSSetAtomic64((
volatile OSAtomicVar64*)ptr, (u64)val);
319 OSCoherencyBarrier();
322 x = OSSwapAtomic64((
volatile OSAtomicVar64*)ptr, (uint64_t)val);
329 int success_memorder,
int failure_memorder) {
333 OSCoherencyBarrier();
337 result = OSCompareAndSwapAtomicEx64((
volatile OSAtomicVar64*)ptr, (u64)*expected, (u64)desired,
350 OSCoherencyBarrier();
353 x = OSAddAtomic64((
volatile OSAtomicVar64*)ptr, val);
361 OSCoherencyBarrier();
364 x = OSAddAtomic64((
volatile OSAtomicVar64*)ptr, -val);
372 OSCoherencyBarrier();
375 x = OSAndAtomic64((
volatile OSAtomicVar64*)ptr, val);
383 OSCoherencyBarrier();
386 x = OSXorAtomic64((
volatile OSAtomicVar64*)ptr, val);
394 OSCoherencyBarrier();
397 x = OSOrAtomic64((
volatile OSAtomicVar64*)ptr, val);
405 OSCoherencyBarrier();
408 x = OSAddAtomic64((
volatile OSAtomicVar64*)ptr, val);
416 OSCoherencyBarrier();
419 x = OSAddAtomic64((
volatile OSAtomicVar64*)ptr, -val);
427 OSCoherencyBarrier();
430 x = OSAndAtomic64((
volatile OSAtomicVar64*)ptr, val);
438 OSCoherencyBarrier();
441 x = OSXorAtomic64((
volatile OSAtomicVar64*)ptr, val);
449 OSCoherencyBarrier();
452 x = OSOrAtomic64((
volatile OSAtomicVar64*)ptr, val);
458 void* rval = *(
void*
volatile*)ptr;
465 OSCoherencyBarrier();
468 *(
void*
volatile*)ptr = val;
474 int success_memorder,
int failure_memorder) {
476 success_memorder, failure_memorder);
498 #define NLIB_FD_O_RDONLY (0x0000) 499 #define NLIB_FD_O_WRONLY (0x0001) 500 #define NLIB_FD_O_RDWR (0x0002) 501 #define NLIB_FD_O_APPEND (0x0008) 502 #define NLIB_FD_O_CREAT (0x0100) 503 #define NLIB_FD_O_TRUNC (0x0200) 504 #define NLIB_FD_O_EXCL (0x0400) 510 #define NLIB_NOEXCEPT 517 #define NLIB_MEMCPY(a, b, c) OSBlockMove((a), (b), (c), FALSE) 518 #define NLIB_MEMMOVE(a, b, c) OSBlockMove((a), (b), (c), FALSE) 519 #define NLIB_MEMSET(a, b, c) OSBlockSet((a), (b), (c)) 521 #ifndef NLIB_HAS_ZLIB 522 #define NLIB_HAS_ZLIB 525 #ifndef NLIB_HAS_LIBCURL 526 #define NLIB_HAS_LIBCURL 530 #endif // INCLUDE_NN_NLIB_PLATFORM_CAFE_H_