1/* Definitions for option handling for IA-32.
2 Copyright (C) 1988-2023 Free Software Foundation, Inc.
3
4This file is part of GCC.
5
6GCC is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 3, or (at your option)
9any later version.
10
11GCC is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16Under Section 7 of GPL version 3, you are granted additional
17permissions described in the GCC Runtime Library Exception, version
183.1, as published by the Free Software Foundation.
19
20You should have received a copy of the GNU General Public License and
21a copy of the GCC Runtime Library Exception along with this program;
22see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
23<http://www.gnu.org/licenses/>. */
24
25#ifndef I386_OPTS_H
26#define I386_OPTS_H
27
28/* Algorithm to expand string function with. */
29enum stringop_alg
30{
31#undef DEF_ALG
32#define DEF_ALG(alg, name) alg,
33
34#include "stringop.def"
35last_alg
36
37#undef DEF_ALG
38};
39
40/* Available call abi. */
41enum calling_abi
42{
43 SYSV_ABI = 0,
44 MS_ABI = 1
45};
46
47enum fpmath_unit
48{
49 FPMATH_387 = 1,
50 FPMATH_SSE = 2
51};
52
53enum tls_dialect
54{
55 TLS_DIALECT_GNU,
56 TLS_DIALECT_GNU2,
57 TLS_DIALECT_SUN
58};
59
60enum cmodel {
61 CM_32, /* The traditional 32-bit ABI. */
62 CM_SMALL, /* Assumes all code and data fits in the low 31 bits. */
63 CM_KERNEL, /* Assumes all code and data fits in the high 31 bits. */
64 CM_MEDIUM, /* Assumes code fits in the low 31 bits; data unlimited. */
65 CM_LARGE, /* No assumptions. */
66 CM_SMALL_PIC, /* Assumes code+data+got/plt fits in a 31 bit region. */
67 CM_MEDIUM_PIC,/* Assumes code+got/plt fits in a 31 bit region. */
68 CM_LARGE_PIC /* No assumptions. */
69};
70
71enum pmode {
72 PMODE_SI, /* Pmode == SImode. */
73 PMODE_DI /* Pmode == DImode. */
74};
75
76enum ix86_align_data {
77 ix86_align_data_type_compat,
78 ix86_align_data_type_abi,
79 ix86_align_data_type_cacheline
80};
81
82enum asm_dialect {
83 ASM_ATT,
84 ASM_INTEL
85};
86
87enum ix86_veclibabi {
88 ix86_veclibabi_type_none,
89 ix86_veclibabi_type_svml,
90 ix86_veclibabi_type_acml
91};
92
93enum stack_protector_guard {
94 SSP_TLS, /* per-thread canary in TLS block */
95 SSP_GLOBAL /* global canary */
96};
97
98enum prefer_vector_width {
99 PVW_NONE,
100 PVW_AVX128,
101 PVW_AVX256,
102 PVW_AVX512
103};
104
105/* This is used to mitigate variant #2 of the speculative execution
106 vulnerabilities on x86 processors identified by CVE-2017-5715, aka
107 Spectre. They convert indirect branches and function returns to
108 call and return thunks to avoid speculative execution via indirect
109 call, jmp and ret. */
110enum indirect_branch {
111 indirect_branch_unset = 0,
112 indirect_branch_keep,
113 indirect_branch_thunk,
114 indirect_branch_thunk_inline,
115 indirect_branch_thunk_extern
116};
117
118enum instrument_return {
119 instrument_return_none = 0,
120 instrument_return_call,
121 instrument_return_nop5
122};
123
124enum harden_sls {
125 harden_sls_none = 0,
126 harden_sls_return = 1 << 0,
127 harden_sls_indirect_jmp = 1 << 1,
128 harden_sls_all = harden_sls_return | harden_sls_indirect_jmp
129};
130
131enum lam_type {
132 lam_none = 0,
133 lam_u48 = 1,
134 lam_u57
135};
136
137enum apx_features {
138 apx_none = 0,
139 apx_egpr = 1 << 0,
140 apx_push2pop2 = 1 << 1,
141 apx_ndd = 1 << 2,
142 apx_all = apx_egpr | apx_push2pop2 | apx_ndd,
143};
144
145#endif
146

source code of gcc/config/i386/i386-opts.h