summaryrefslogtreecommitdiffhomepage
path: root/include/psxtypes/compiler/__nt_compiler_gcc.h
blob: 4c803986003dbfa88979ef853d45e0ea35d8a8a1 (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
122
123
124
125
126
127
128
129
#ifndef _PSXTYPES_NT_COMPILER_GCC_H_
#define _PSXTYPES_NT_COMPILER_GCC_H_


/* compiler identification */
#define __COMPILER__			__GCC__
#define __COMPILER_DEPENDENT_SUFFIX__	__gcc


/* NTVER: the bare minimum */
#ifndef NTVER
	#define NTVER 0x0500
#elif (NTVER < 0x0500)
	#error __^@^__: NTVER: minimum supported NT version is 0x0500.
#endif


/* x86 processor model */
#if defined(__i986__)
	#define __X86_MODEL 	986
#elif defined(__i886__)
	#define __X86_MODEL 	886
#elif defined(__i786__)
	#define __X86_MODEL 	786
#elif defined(__i686__)
	#define __X86_MODEL 	686
#elif defined(__i586__)
	#define __X86_MODEL 	586
#elif defined(__i486__)
	#define __X86_MODEL 	486
#elif defined(__i386__)
	#define __X86_MODEL 	386
#endif


/* x86_64 processor model */
#if defined(__amd64) && (__amd64)
	#define __X86_64_MODEL 	__amd64
#endif


/* va_list */
#define __CUSTOM_OR_BUILTIN_va_list__  __builtin_va_list


/* compiler keywords */
#define __in
#define __out
#define __in_opt
#define __out_opt
#define __in_out
#define __in_out_opt
#define __reserved
#define __optional
#define __simplified
#define __caller_allocated
#define __caller_initialized
#define __null_placeholder		(0x0)


/* compiler attributes */
#define __attr_aligned__(x)		__attribute__((__aligned__(x)))
#define __attr_ptr_size_aligned__	__attr_aligned__(__SIZEOF_POINTER__)
#define __attr_packed__			__attribute__((__packed__))
#define __attr_export__			__attribute__((dllexport))
#define __attr_import__			__attribute__((dllimport))
#define __attr_naked__

#ifdef __PE_VISIBILITY__
#define __attr_hidden__ 		__attribute__((visibility("hidden")))
#define __attr_public__ 		__attribute__((visibility("default")))
#define __attr_protected__ 		__attribute__((visibility("protected")))
#else
#define __attr_hidden__
#define __attr_public__
#define __attr_protected__
#endif


/* compiler-dependent assertions */
#define __assert_aligned_size(s,a)	typedef char __assert##s [-(sizeof(s) % a)]
#define __assert_struct_size(s1,s2)	typedef char __assert##s1##s2 [sizeof(s2) -sizeof(s1)]


/* calling conventions */
#if     defined(__X86_MODEL)
#undef  __cdecl
#define __cdecl		__attribute__((cdecl))

#undef  __fastcall
#define	__fastcall	__attribute__((fastcall))

#undef  __stdcall
#define __stdcall	__attribute__((stdcall))

#elif   defined (__X86_64_MODEL)

#undef  __cdecl
#define __cdecl

#undef  __fastcall
#define __fastcall

#undef  __stdcall
#define __stdcall
#endif

#undef APIENTRY
#undef CALLBACK
#undef NTAPI
#undef WINAPI

#define APIENTRY	__stdcall
#define CALLBACK	__stdcall
#define NTAPI		__stdcall
#define WINAPI		__stdcall



/* architecture-specific calling conventions */
#if   defined(__X86_MODEL)
	#undef  __stdcall
	#define __stdcall 	__attribute__((__stdcall__))
#elif defined(__X86_64_MODEL)
	#undef  __stdcall
	#define __stdcall
#endif

#endif /* _PSXTYPES_NT_COMPILER_GCC_H_ */