1/* Definitions for option handling for IA-32. 2 Copyright (C) 1988-2022 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 131#endif 132