aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/machine.h
blob: fdd5c68f5221ec4e969565e66f22eada29a6f586 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#ifndef MACHINE_H
#define MACHINE_H

#if defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
#define ARCH_BIG_ENDIAN 1
#else
#define ARCH_BIG_ENDIAN 0
#endif


enum bitness {
	ARCH_LP32,
	ARCH_X32,
	ARCH_LP64,
	ARCH_LLP64,
};

#ifdef __LP64__
#define ARCH_M64_DEFAULT ARCH_LP64
#elif defined(__x86_64__) || defined(__x86_64)
#define ARCH_M64_DEFAULT ARCH_X32
#else
#define ARCH_M64_DEFAULT ARCH_LP32
#endif


enum machine {
	MACH_ARM,	MACH_ARM64,
	MACH_I386,	MACH_X86_64,
	MACH_MIPS32,	MACH_MIPS64,
	MACH_PPC32,	MACH_PPC64,
	MACH_RISCV32,	MACH_RISCV64,
	MACH_SPARC32,	MACH_SPARC64,
	MACH_S390,	MACH_S390X,
	MACH_M68K,
	MACH_UNKNOWN
};

#if defined(__aarch64__)
#define MACH_NATIVE	MACH_ARM64
#elif defined(__arm__)
#define	MACH_NATIVE	MACH_ARM
#elif defined(__x86_64__) || defined(__x86_64)
#define	MACH_NATIVE	MACH_X86_64
#elif defined(__i386__) || defined(__i386)
#define	MACH_NATIVE	MACH_I386
#elif defined(__mips64__) || (defined(__mips) && __mips == 64)
#define	MACH_NATIVE	MACH_MIPS64
#elif defined(__mips__) || defined(__mips)
#define	MACH_NATIVE	MACH_MIPS32
#elif defined(__powerpc64__) || defined(__ppc64__)
#define	MACH_NATIVE	MACH_PPC64
#elif defined(__powerpc__) || defined(__powerpc) || defined(__ppc__)
#define	MACH_NATIVE	MACH_PPC32
#elif defined(__riscv) && (__riscv_xlen == 64)
#define	MACH_NATIVE	MACH_RISCV64
#elif defined(__riscv) && (__riscv_xlen == 32)
#define	MACH_NATIVE	MACH_RISCV32
#elif defined(__sparc_v9__)
#define	MACH_NATIVE	MACH_SPARC64
#elif defined(__sparc__) || defined(__sparc)
#define	MACH_NATIVE	MACH_SPARC32
#elif defined(__m68k__)
#define MACH_NATIVE	MACH_M68K
#elif defined(__s390x__) || defined(__zarch__)
#define MACH_NATIVE	MACH_S390X
#elif defined(__s390__)
#define MACH_NATIVE	MACH_S390
#else
#define MACH_NATIVE	MACH_UNKNOWN
#endif


enum fp_abi {
	FP_ABI_HARD,
	FP_ABI_SOFT,
	FP_ABI_HYBRID,
};

#if defined(__ARM_PCS_VFP)
#define FP_ABI_NATIVE		FP_ABI_HARD
#elif defined(__ARM_PCS) && !defined(__SOFTFP__)
#define FP_ABI_NATIVE		FP_ABI_HYBRID
#else
#define FP_ABI_NATIVE		FP_ABI_SOFT
#endif


enum {
	OS_CYGWIN,
	OS_DARWIN,
	OS_FREEBSD,
	OS_LINUX,
	OS_NETBSD,
	OS_OPENBSD,
	OS_SUNOS,
	OS_UNIX,
	OS_UNKNOWN,
};

#if defined(__CYGWIN__)
#define OS_NATIVE	OS_CYGWIN
#elif defined(__APPLE__)
#define OS_NATIVE	OS_DARWIN
#elif defined(__FreeBSD__)
#define OS_NATIVE	OS_FREEBSD
#elif defined(__linux__) || defined(__linux)
#define OS_NATIVE	OS_LINUX
#elif defined(__NetBSD__)
#define OS_NATIVE	OS_NETBSD
#elif defined(__OpenBSD__)
#define OS_NATIVE	OS_OPENBSD
#elif defined(__sun__) || defined(__sun)
#define OS_NATIVE	OS_SUNOS
#elif defined(__unix__) || defined(__unix)
#define OS_UNIX		OS_UNIX
#else
#define OS_NATIVE	OS_UNKNOWN
#endif

#endif