xref: /aosp_15_r20/external/capstone/include/platform.h (revision 9a0e4156d50a75a99ec4f1653a0e9602a5d45c18)
1*9a0e4156SSadaf Ebrahimi /* Capstone Disassembly Engine */
2*9a0e4156SSadaf Ebrahimi /* By Axel Souchet & Nguyen Anh Quynh, 2014 */
3*9a0e4156SSadaf Ebrahimi 
4*9a0e4156SSadaf Ebrahimi #ifndef CAPSTONE_PLATFORM_H
5*9a0e4156SSadaf Ebrahimi #define CAPSTONE_PLATFORM_H
6*9a0e4156SSadaf Ebrahimi 
7*9a0e4156SSadaf Ebrahimi // handle C99 issue (for pre-2013 VisualStudio)
8*9a0e4156SSadaf Ebrahimi #if !defined(__CYGWIN__) && !defined(__MINGW32__) && !defined(__MINGW64__) && (defined (WIN32) || defined (WIN64) || defined (_WIN32) || defined (_WIN64))
9*9a0e4156SSadaf Ebrahimi // MSVC
10*9a0e4156SSadaf Ebrahimi 
11*9a0e4156SSadaf Ebrahimi // stdbool.h
12*9a0e4156SSadaf Ebrahimi #if (_MSC_VER < 1800) || defined(_KERNEL_MODE)
13*9a0e4156SSadaf Ebrahimi // this system does not have stdbool.h
14*9a0e4156SSadaf Ebrahimi #ifndef __cplusplus
15*9a0e4156SSadaf Ebrahimi typedef unsigned char bool;
16*9a0e4156SSadaf Ebrahimi #define false 0
17*9a0e4156SSadaf Ebrahimi #define true 1
18*9a0e4156SSadaf Ebrahimi #endif
19*9a0e4156SSadaf Ebrahimi 
20*9a0e4156SSadaf Ebrahimi #else
21*9a0e4156SSadaf Ebrahimi // VisualStudio 2013+ -> C99 is supported
22*9a0e4156SSadaf Ebrahimi #include <stdbool.h>
23*9a0e4156SSadaf Ebrahimi #endif
24*9a0e4156SSadaf Ebrahimi 
25*9a0e4156SSadaf Ebrahimi #else
26*9a0e4156SSadaf Ebrahimi // not MSVC -> C99 is supported
27*9a0e4156SSadaf Ebrahimi #include <stdbool.h>
28*9a0e4156SSadaf Ebrahimi #endif
29*9a0e4156SSadaf Ebrahimi 
30*9a0e4156SSadaf Ebrahimi 
31*9a0e4156SSadaf Ebrahimi // handle C99 issue (for pre-2013 VisualStudio)
32*9a0e4156SSadaf Ebrahimi #if defined(CAPSTONE_HAS_OSXKERNEL) || (defined(_MSC_VER) && (_MSC_VER <= 1700 || defined(_KERNEL_MODE)))
33*9a0e4156SSadaf Ebrahimi // this system does not have inttypes.h
34*9a0e4156SSadaf Ebrahimi 
35*9a0e4156SSadaf Ebrahimi #if defined(_MSC_VER) && (_MSC_VER < 1600 || defined(_KERNEL_MODE))
36*9a0e4156SSadaf Ebrahimi // this system does not have stdint.h
37*9a0e4156SSadaf Ebrahimi typedef signed char  int8_t;
38*9a0e4156SSadaf Ebrahimi typedef signed short int16_t;
39*9a0e4156SSadaf Ebrahimi typedef signed int   int32_t;
40*9a0e4156SSadaf Ebrahimi typedef unsigned char  uint8_t;
41*9a0e4156SSadaf Ebrahimi typedef unsigned short uint16_t;
42*9a0e4156SSadaf Ebrahimi typedef unsigned int   uint32_t;
43*9a0e4156SSadaf Ebrahimi typedef signed long long   int64_t;
44*9a0e4156SSadaf Ebrahimi typedef unsigned long long uint64_t;
45*9a0e4156SSadaf Ebrahimi 
46*9a0e4156SSadaf Ebrahimi #define INT8_MIN         (-127i8 - 1)
47*9a0e4156SSadaf Ebrahimi #define INT16_MIN        (-32767i16 - 1)
48*9a0e4156SSadaf Ebrahimi #define INT32_MIN        (-2147483647i32 - 1)
49*9a0e4156SSadaf Ebrahimi #define INT64_MIN        (-9223372036854775807i64 - 1)
50*9a0e4156SSadaf Ebrahimi #define INT8_MAX         127i8
51*9a0e4156SSadaf Ebrahimi #define INT16_MAX        32767i16
52*9a0e4156SSadaf Ebrahimi #define INT32_MAX        2147483647i32
53*9a0e4156SSadaf Ebrahimi #define INT64_MAX        9223372036854775807i64
54*9a0e4156SSadaf Ebrahimi #define UINT8_MAX        0xffui8
55*9a0e4156SSadaf Ebrahimi #define UINT16_MAX       0xffffui16
56*9a0e4156SSadaf Ebrahimi #define UINT32_MAX       0xffffffffui32
57*9a0e4156SSadaf Ebrahimi #define UINT64_MAX       0xffffffffffffffffui64
58*9a0e4156SSadaf Ebrahimi #endif
59*9a0e4156SSadaf Ebrahimi 
60*9a0e4156SSadaf Ebrahimi #define __PRI_8_LENGTH_MODIFIER__ "hh"
61*9a0e4156SSadaf Ebrahimi #define __PRI_64_LENGTH_MODIFIER__ "ll"
62*9a0e4156SSadaf Ebrahimi 
63*9a0e4156SSadaf Ebrahimi #define PRId8         __PRI_8_LENGTH_MODIFIER__ "d"
64*9a0e4156SSadaf Ebrahimi #define PRIi8         __PRI_8_LENGTH_MODIFIER__ "i"
65*9a0e4156SSadaf Ebrahimi #define PRIo8         __PRI_8_LENGTH_MODIFIER__ "o"
66*9a0e4156SSadaf Ebrahimi #define PRIu8         __PRI_8_LENGTH_MODIFIER__ "u"
67*9a0e4156SSadaf Ebrahimi #define PRIx8         __PRI_8_LENGTH_MODIFIER__ "x"
68*9a0e4156SSadaf Ebrahimi #define PRIX8         __PRI_8_LENGTH_MODIFIER__ "X"
69*9a0e4156SSadaf Ebrahimi 
70*9a0e4156SSadaf Ebrahimi #define PRId16        "hd"
71*9a0e4156SSadaf Ebrahimi #define PRIi16        "hi"
72*9a0e4156SSadaf Ebrahimi #define PRIo16        "ho"
73*9a0e4156SSadaf Ebrahimi #define PRIu16        "hu"
74*9a0e4156SSadaf Ebrahimi #define PRIx16        "hx"
75*9a0e4156SSadaf Ebrahimi #define PRIX16        "hX"
76*9a0e4156SSadaf Ebrahimi 
77*9a0e4156SSadaf Ebrahimi #if defined(_MSC_VER) && _MSC_VER <= 1700
78*9a0e4156SSadaf Ebrahimi #define PRId32        "ld"
79*9a0e4156SSadaf Ebrahimi #define PRIi32        "li"
80*9a0e4156SSadaf Ebrahimi #define PRIo32        "lo"
81*9a0e4156SSadaf Ebrahimi #define PRIu32        "lu"
82*9a0e4156SSadaf Ebrahimi #define PRIx32        "lx"
83*9a0e4156SSadaf Ebrahimi #define PRIX32        "lX"
84*9a0e4156SSadaf Ebrahimi #else	// OSX
85*9a0e4156SSadaf Ebrahimi #define PRId32        "d"
86*9a0e4156SSadaf Ebrahimi #define PRIi32        "i"
87*9a0e4156SSadaf Ebrahimi #define PRIo32        "o"
88*9a0e4156SSadaf Ebrahimi #define PRIu32        "u"
89*9a0e4156SSadaf Ebrahimi #define PRIx32        "x"
90*9a0e4156SSadaf Ebrahimi #define PRIX32        "X"
91*9a0e4156SSadaf Ebrahimi #endif
92*9a0e4156SSadaf Ebrahimi 
93*9a0e4156SSadaf Ebrahimi #if defined(_MSC_VER) && _MSC_VER <= 1700
94*9a0e4156SSadaf Ebrahimi // redefine functions from inttypes.h used in cstool
95*9a0e4156SSadaf Ebrahimi #define strtoull _strtoui64
96*9a0e4156SSadaf Ebrahimi #endif
97*9a0e4156SSadaf Ebrahimi 
98*9a0e4156SSadaf Ebrahimi #define PRId64        __PRI_64_LENGTH_MODIFIER__ "d"
99*9a0e4156SSadaf Ebrahimi #define PRIi64        __PRI_64_LENGTH_MODIFIER__ "i"
100*9a0e4156SSadaf Ebrahimi #define PRIo64        __PRI_64_LENGTH_MODIFIER__ "o"
101*9a0e4156SSadaf Ebrahimi #define PRIu64        __PRI_64_LENGTH_MODIFIER__ "u"
102*9a0e4156SSadaf Ebrahimi #define PRIx64        __PRI_64_LENGTH_MODIFIER__ "x"
103*9a0e4156SSadaf Ebrahimi #define PRIX64        __PRI_64_LENGTH_MODIFIER__ "X"
104*9a0e4156SSadaf Ebrahimi 
105*9a0e4156SSadaf Ebrahimi #else
106*9a0e4156SSadaf Ebrahimi // this system has inttypes.h by default
107*9a0e4156SSadaf Ebrahimi #include <inttypes.h>
108*9a0e4156SSadaf Ebrahimi #endif
109*9a0e4156SSadaf Ebrahimi 
110*9a0e4156SSadaf Ebrahimi #endif
111