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