1#ifndef RUNTIME_PLATFORM_H
2#define RUNTIME_PLATFORM_H
6#include <dolphin/types.h>
14#if defined(__MWERKS__) && defined(__PPCGEKKO__)
18#ifndef ATTRIBUTE_ALIGN
19#if defined(__MWERKS__) || defined(__GNUC__)
20#define ATTRIBUTE_ALIGN(num) __attribute__((aligned(num)))
21#elif defined(_MSC_VER)
22#define ATTRIBUTE_ALIGN(num)
24#error unknown compiler
29#if defined(__MWERKS__) && !defined(M2CTX)
30#define SECTION_INIT __declspec(section ".init")
37#if defined(__MWERKS__) && !defined(M2CTX)
38#define SECTION_CTORS __declspec(section ".ctors")
45#if defined(__MWERKS__) && !defined(M2CTX)
46#define SECTION_DTORS __declspec(section ".dtors")
52#ifndef ATTRIBUTE_NORETURN
53#if defined(__clang__) || defined(__GNUC__)
54#define ATTRIBUTE_NORETURN __attribute__((noreturn))
56#define ATTRIBUTE_NORETURN
60#ifndef ATTRIBUTE_RESTRICT
61#if defined(__MWERKS__) && !defined(M2CTX)
62#define ATTRIBUTE_RESTRICT __restrict
64#define ATTRIBUTE_RESTRICT
69#define AT_ADDRESS(x) = FIXEDADDR(x)
70#elif defined(__MWERKS__) && !defined(M2CTX)
71#define AT_ADDRESS(x) : (x)
89#define U32_MAX 0xFFFFFFFF
92#define S32_MAX 0x7FFFFFFF
93#define F32_MAX 3.4028235e38f
95#define SQ(x) ((x) * (x))
96#define MIN(a, b) (((a) > (b)) ? (b) : (a))
97#define MAX(a, b) (((a) > (b)) ? (a) : (b))
100#ifndef _Static_assert
101#define _Static_assert static_assert
105#define STATIC_ASSERT(cond) \
107 int x[1 - 2 * !(cond)]; \
110#define STATIC_ASSERT(cond) _Static_assert((cond), "(" #cond ") failed")
113#define RETURN_IF(cond) \
120#if defined(__MWERKS__) && !defined(M2CTX)
121#define SDATA __declspec(section ".sdata")
122#define WEAK __declspec(weak)