#pragma once #include #include #include #include #ifdef NDEBUG #undef assert #define assert(x) #define static_assert(a,b) #else #define static_assert_cat(a, b) a##b #define static_assert_name(line) static_assert_cat(static_assert_, line) #define static_assert(must_be_true, message) \ static const void *static_assert_name(__LINE__) \ [must_be_true ? 2 : -1] = { \ message, \ static_assert_name(__LINE__), \ } #endif #define __os_name__ "plan9" #define SYS_DEV_NULL "/dev/null" int sl_popcount(unsigned int w); int sl_clz(unsigned int x); typedef jmp_buf sl_jmp_buf; #define sl_setjmp(e) setjmp((e)) #define sl_longjmp(e, v) longjmp((e), (v)) #define sys_exit(status, code) exits(status); #define sys_setcallpc(arg) do{sl.cpc = (void*)getcallerpc(&arg);}while(0) void sys_setcurrpc(int dummy); void sys_seed(void *p, int sz); #if defined(__amd64__) || \ defined(__arm64__) || \ defined(__mips64__) || \ defined(__power64__) || \ defined(__sparc64__) #define BITS64 #define FWD_BIT (sl_v)(1ULL<<63) #define PRIdPTR PRId64 #define PRIuPTR PRIu64 #define PRIxPTR PRIux64 typedef long long ssize; #else #define FWD_BIT (sl_v)(1U<<31) #define PRIdPTR "ld" #define PRIuPTR "lud" #define PRIxPTR "lux" typedef long ssize; #endif #if defined(__386__) || defined(__amd64__) || defined(__arm64__) #define MEM_UNALIGNED_ACCESS #endif int unsetenv(const char *name); #define setenv(name, val, overwrite) putenv(name, val) #define isinf(x) isInf(x, 0) #define isnan(x) isNaN(x) #define vsnprintf vsnprint #define vdprintf vfprint #define snprintf snprint #define strcasecmp cistrcmp #define signbit(r) ((*(u64int*)&(r)) & (1ULL<<63)) #define isfinite(d) (((*(u64int*)&(d))&0x7ff0000000000000ULL) != 0x7ff0000000000000ULL) double trunc(double x); #define PRId32 "d" #define PRIu32 "ud" #define PRIx32 "x" #define PRId64 "lld" #define PRIu64 "llud" #define PRIx64 "llx" #define PRIux64 "llux" #define INT32_MAX 0x7fffffff #define UINT32_MAX 0xffffffffU #define INT32_MIN (-INT32_MAX-1) #define INT64_MIN ((s64int)0x8000000000000000ULL) #define INT64_MAX 0x7fffffffffffffffLL #define UINT64_MAX 0xffffffffffffffffULL #define ULONG_MAX UINT32_MAX #define DBL_EPSILON 2.2204460492503131e-16 #define FLT_EPSILON 1.19209290e-07 enum { SEEK_SET, SEEK_CUR, SEEK_END, STDIN_FILENO = 0, STDOUT_FILENO, STDERR_FILENO, }; #define F_OK 0 #define LITTLE_ENDIAN 1234 #define BIG_ENDIAN 4321 #if defined(__mips__) || \ defined(__power__) || defined(__power64__) || \ defined(__sparc__) || defined(__sparc64__) #define BYTE_ORDER BIG_ENDIAN #else #define BYTE_ORDER LITTLE_ENDIAN #endif typedef vlong soffset; typedef enum { false, true } bool; int ftruncate(int f, soffset sz); #define sl_packed #define sl_fallthrough do{}while(0) #define sl_unlikely(x) (x) #define sl_likely(x) (x) #define sl_printfmt(x, y) #define sl_thread(x) x #define sl_prefetch(x) do{}while(0) #define sl_constfn #define sl_purefn #define sl_hotfn #define sl_returns_nonnull #define sl_nonnull(...) #define sl_aligned(x) #define sl_rd(...) #define sl_wr(...) #define sl_cstr(x) #define sl_fd(x) #define sl_fd_rd(x) #define sl_fd_wr(x) #define sl_alloc #define sl_enum_flags #define sl_offsetof(x, y) offsetof(x, y) #include "inc/mem.h" #include "inc/overflow.h"