2024-02-21 16:40:09 -08:00
|
|
|
#ifdef _COSMO_SOURCE
|
2020-06-15 07:18:57 -07:00
|
|
|
#ifndef COSMOPOLITAN_LIBC_DCE_H_
|
|
|
|
#define COSMOPOLITAN_LIBC_DCE_H_
|
|
|
|
/*─────────────────────────────────────────────────────────────────────────────╗
|
|
|
|
│ cosmopolitan § autotune » dead code elimination │
|
|
|
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
|
|
|
|
2020-12-26 02:09:07 -08:00
|
|
|
#ifndef SUPPORT_VECTOR
|
2023-05-09 01:56:56 -07:00
|
|
|
#ifdef __x86_64__
|
2020-06-15 07:18:57 -07:00
|
|
|
/**
|
|
|
|
* Supported Platforms Tuning Knob (Runtime & Compile-Time)
|
2021-02-05 06:16:20 -08:00
|
|
|
* Tuning this bitmask will remove platform polyfills at compile-time.
|
2020-06-15 07:18:57 -07:00
|
|
|
*/
|
2021-02-08 04:04:42 -08:00
|
|
|
#define SUPPORT_VECTOR 255
|
2023-05-09 01:56:56 -07:00
|
|
|
#else
|
2023-12-29 20:11:23 -08:00
|
|
|
#define SUPPORT_VECTOR (_HOSTLINUX | _HOSTXNU | _HOSTFREEBSD)
|
2023-05-09 01:56:56 -07:00
|
|
|
#endif
|
2020-06-15 07:18:57 -07:00
|
|
|
#endif
|
2021-02-05 06:16:20 -08:00
|
|
|
|
2022-10-11 11:31:25 +08:00
|
|
|
#define _HOSTLINUX 1
|
|
|
|
#define _HOSTMETAL 2
|
|
|
|
#define _HOSTWINDOWS 4
|
|
|
|
#define _HOSTXNU 8
|
|
|
|
#define _HOSTOPENBSD 16
|
|
|
|
#define _HOSTFREEBSD 32
|
|
|
|
#define _HOSTNETBSD 64
|
2020-06-15 07:18:57 -07:00
|
|
|
|
|
|
|
#ifdef NDEBUG
|
|
|
|
#define NoDebug() 1
|
|
|
|
#else
|
|
|
|
#define NoDebug() 0
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef MODE_DBG
|
|
|
|
#define IsModeDbg() 1
|
|
|
|
#else
|
|
|
|
#define IsModeDbg() 0
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef TRUSTWORTHY
|
|
|
|
#define IsTrustworthy() 1
|
|
|
|
#else
|
|
|
|
#define IsTrustworthy() 0
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef TINY
|
|
|
|
#define IsTiny() 1
|
|
|
|
#else
|
|
|
|
#define IsTiny() 0
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef __OPTIMIZE__
|
|
|
|
#define IsOptimized() 1
|
|
|
|
#else
|
|
|
|
#define IsOptimized() 0
|
|
|
|
#endif
|
|
|
|
|
2023-06-04 01:57:10 -07:00
|
|
|
#ifdef __aarch64__
|
2023-12-29 20:11:23 -08:00
|
|
|
#define IsAarch64() 1
|
2023-06-04 01:57:10 -07:00
|
|
|
#define IsXnuSilicon() IsXnu()
|
|
|
|
#else
|
2023-12-29 20:11:23 -08:00
|
|
|
#define IsAarch64() 0
|
2023-06-04 01:57:10 -07:00
|
|
|
#define IsXnuSilicon() 0
|
|
|
|
#endif
|
2023-08-11 04:37:23 -07:00
|
|
|
|
|
|
|
#if defined(__x86_64__)
|
|
|
|
#define _ARCH_NAME "amd64"
|
|
|
|
#elif defined(__aarch64__)
|
|
|
|
#define _ARCH_NAME "arm64"
|
|
|
|
#elif defined(__powerpc64__)
|
|
|
|
#define _ARCH_NAME "ppc64"
|
|
|
|
#elif defined(__s390x__)
|
|
|
|
#define _ARCH_NAME "s390x"
|
|
|
|
#elif defined(__riscv)
|
|
|
|
#define _ARCH_NAME "riscv"
|
|
|
|
#endif
|
2020-06-15 07:18:57 -07:00
|
|
|
|
2022-10-11 11:31:25 +08:00
|
|
|
#define SupportsLinux() ((SUPPORT_VECTOR & _HOSTLINUX) == _HOSTLINUX)
|
|
|
|
#define SupportsMetal() ((SUPPORT_VECTOR & _HOSTMETAL) == _HOSTMETAL)
|
|
|
|
#define SupportsWindows() ((SUPPORT_VECTOR & _HOSTWINDOWS) == _HOSTWINDOWS)
|
|
|
|
#define SupportsXnu() ((SUPPORT_VECTOR & _HOSTXNU) == _HOSTXNU)
|
|
|
|
#define SupportsFreebsd() ((SUPPORT_VECTOR & _HOSTFREEBSD) == _HOSTFREEBSD)
|
|
|
|
#define SupportsOpenbsd() ((SUPPORT_VECTOR & _HOSTOPENBSD) == _HOSTOPENBSD)
|
|
|
|
#define SupportsNetbsd() ((SUPPORT_VECTOR & _HOSTNETBSD) == _HOSTNETBSD)
|
2022-11-02 06:49:42 -07:00
|
|
|
#define SupportsBsd() \
|
|
|
|
(!!(SUPPORT_VECTOR & (_HOSTXNU | _HOSTFREEBSD | _HOSTOPENBSD | _HOSTNETBSD)))
|
2020-06-15 07:18:57 -07:00
|
|
|
#define SupportsSystemv() \
|
2022-11-02 06:49:42 -07:00
|
|
|
(!!(SUPPORT_VECTOR & \
|
|
|
|
(_HOSTLINUX | _HOSTXNU | _HOSTOPENBSD | _HOSTFREEBSD | _HOSTNETBSD)))
|
2020-06-15 07:18:57 -07:00
|
|
|
|
|
|
|
#ifndef __ASSEMBLER__
|
2022-10-11 11:31:25 +08:00
|
|
|
#define IsLinux() (SupportsLinux() && (__hostos & _HOSTLINUX))
|
|
|
|
#define IsMetal() (SupportsMetal() && (__hostos & _HOSTMETAL))
|
|
|
|
#define IsWindows() (SupportsWindows() && (__hostos & _HOSTWINDOWS))
|
|
|
|
#define IsXnu() (SupportsXnu() && (__hostos & _HOSTXNU))
|
|
|
|
#define IsFreebsd() (SupportsFreebsd() && (__hostos & _HOSTFREEBSD))
|
|
|
|
#define IsOpenbsd() (SupportsOpenbsd() && (__hostos & _HOSTOPENBSD))
|
|
|
|
#define IsNetbsd() (SupportsNetbsd() && (__hostos & _HOSTNETBSD))
|
2021-02-07 06:11:44 -08:00
|
|
|
#define IsBsd() (IsXnu() || IsFreebsd() || IsOpenbsd() || IsNetbsd())
|
2020-06-15 07:18:57 -07:00
|
|
|
#else
|
|
|
|
/* clang-format off */
|
2022-10-11 11:31:25 +08:00
|
|
|
#define IsLinux() $_HOSTLINUX,__hostos(%rip)
|
|
|
|
#define IsMetal() $_HOSTMETAL,__hostos(%rip)
|
|
|
|
#define IsWindows() $_HOSTWINDOWS,__hostos(%rip)
|
|
|
|
#define IsBsd() $_HOSTXNU|_HOSTFREEBSD|_HOSTOPENBSD|_HOSTNETBSD,__hostos(%rip)
|
|
|
|
#define IsXnu() $_HOSTXNU,__hostos(%rip)
|
|
|
|
#define IsFreebsd() $_HOSTFREEBSD,__hostos(%rip)
|
|
|
|
#define IsOpenbsd() $_HOSTOPENBSD,__hostos(%rip)
|
|
|
|
#define IsNetbsd() $_HOSTNETBSD,__hostos(%rip)
|
2020-06-15 07:18:57 -07:00
|
|
|
/* clang-format on */
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
|
|
|
COSMOPOLITAN_C_START_
|
|
|
|
|
2020-11-25 08:19:00 -08:00
|
|
|
extern const int __hostos;
|
2023-05-18 19:05:08 -07:00
|
|
|
|
2024-01-29 15:45:10 -08:00
|
|
|
int IsQemuUser(void);
|
2024-01-04 08:25:37 -08:00
|
|
|
|
2020-06-15 07:18:57 -07:00
|
|
|
COSMOPOLITAN_C_END_
|
|
|
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
|
|
|
#endif /* COSMOPOLITAN_LIBC_DCE_H_ */
|
2024-02-21 16:40:09 -08:00
|
|
|
#endif /* _COSMO_SOURCE */
|