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