File indexing completed on 2025-08-28 08:27:16
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #if !defined(PSNIP_DEBUG_TRAP_H)
0012 #define PSNIP_DEBUG_TRAP_H
0013
0014 #if !defined(PSNIP_NDEBUG) && defined(NDEBUG) && !defined(PSNIP_DEBUG)
0015 # define PSNIP_NDEBUG 1
0016 #endif
0017
0018 #if defined(__has_builtin) && !defined(__ibmxl__)
0019 # if __has_builtin(__builtin_debugtrap)
0020 # define psnip_trap() __builtin_debugtrap()
0021 # elif __has_builtin(__debugbreak)
0022 # define psnip_trap() __debugbreak()
0023 # endif
0024 #endif
0025 #if !defined(psnip_trap)
0026 # if defined(_MSC_VER) || defined(__INTEL_COMPILER)
0027 # define psnip_trap() __debugbreak()
0028 # elif defined(__ARMCC_VERSION)
0029 # define psnip_trap() __breakpoint(42)
0030 # elif defined(__ibmxl__) || defined(__xlC__)
0031 # include <builtins.h>
0032 # define psnip_trap() __trap(42)
0033 # elif defined(__DMC__) && defined(_M_IX86)
0034 static inline void psnip_trap(void) { __asm int 3h; }
0035 # elif defined(__i386__) || defined(__x86_64__)
0036 static inline void psnip_trap(void) { __asm__ __volatile__("int $03"); }
0037 # elif defined(__thumb__)
0038 static inline void psnip_trap(void) { __asm__ __volatile__(".inst 0xde01"); }
0039 # elif defined(__aarch64__)
0040 static inline void psnip_trap(void) { __asm__ __volatile__(".inst 0xd4200000"); }
0041 # elif defined(__arm__)
0042 static inline void psnip_trap(void) { __asm__ __volatile__(".inst 0xe7f001f0"); }
0043 # elif defined (__alpha__) && !defined(__osf__)
0044 static inline void psnip_trap(void) { __asm__ __volatile__("bpt"); }
0045 # elif defined(_54_)
0046 static inline void psnip_trap(void) { __asm__ __volatile__("ESTOP"); }
0047 # elif defined(_55_)
0048 static inline void psnip_trap(void) { __asm__ __volatile__(";\n .if (.MNEMONIC)\n ESTOP_1\n .else\n ESTOP_1()\n .endif\n NOP"); }
0049 # elif defined(_64P_)
0050 static inline void psnip_trap(void) { __asm__ __volatile__("SWBP 0"); }
0051 # elif defined(_6x_)
0052 static inline void psnip_trap(void) { __asm__ __volatile__("NOP\n .word 0x10000000"); }
0053 # elif defined(__STDC_HOSTED__) && (__STDC_HOSTED__ == 0) && defined(__GNUC__)
0054 # define psnip_trap() __builtin_trap()
0055 # else
0056 # include <signal.h>
0057 # if defined(SIGTRAP)
0058 # define psnip_trap() raise(SIGTRAP)
0059 # else
0060 # define psnip_trap() raise(SIGABRT)
0061 # endif
0062 # endif
0063 #endif
0064
0065 #if defined(HEDLEY_LIKELY)
0066 # define PSNIP_DBG_LIKELY(expr) HEDLEY_LIKELY(expr)
0067 #elif defined(__GNUC__) && (__GNUC__ >= 3)
0068 # define PSNIP_DBG_LIKELY(expr) __builtin_expect(!!(expr), 1)
0069 #else
0070 # define PSNIP_DBG_LIKELY(expr) (!!(expr))
0071 #endif
0072
0073 #if !defined(PSNIP_NDEBUG) || (PSNIP_NDEBUG == 0)
0074 # define psnip_dbg_assert(expr) do { \
0075 if (!PSNIP_DBG_LIKELY(expr)) { \
0076 psnip_trap(); \
0077 } \
0078 } while (0)
0079 #else
0080 # define psnip_dbg_assert(expr)
0081 #endif
0082
0083 #endif