InglésFrancésEspañol

Ad


icono de página de OnWorks

g ++ - Online en la nube

Ejecute g ++ en el proveedor de alojamiento gratuito de OnWorks a través de Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS

Este es el comando g ++ que se puede ejecutar en el proveedor de alojamiento gratuito de OnWorks utilizando una de nuestras múltiples estaciones de trabajo en línea gratuitas, como Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS.

PROGRAMA:

NOMBRE


gcc - compilador C y C ++ del proyecto GNU

SINOPSIS


CCG [-c|-S|-E] [-std =estándar]
[-g] [-página] [-Onivel]
[-Wadvertir...] [-Wpedante]
[-Idir...] [-Ldir...]
[-Dmacro[=definir] ...] [-Umacro]
[-fopción...] [-mopción de máquina...]
[-o archivar] [@presentar] en archivo...

Aquí solo se enumeran las opciones más útiles; vea a continuación el resto. g ++ acepta
en su mayoría las mismas opciones que gcc.

DESCRIPCIÓN


Cuando invoca GCC, normalmente realiza preprocesamiento, compilación, ensamblaje y vinculación.
Las "opciones generales" le permiten detener este proceso en una etapa intermedia. Para
ejemplo, el -c La opción dice que no se ejecute el vinculador. Entonces la salida consiste en el objeto
archivos generados por el ensamblador.

Otras opciones pasan a una etapa de procesamiento. Algunas opciones controlan
preprocesador y otros el propio compilador. Sin embargo, otras opciones controlan el ensamblador y
enlazador; la mayoría de estos no están documentados aquí, ya que rara vez es necesario utilizarlos.

La mayoría de las opciones de la línea de comandos que puede usar con GCC son útiles para los programas C; cuando
una opción solo es útil con otro lenguaje (generalmente C ++), la explicación lo dice
explícitamente. Si la descripción de una opción en particular no menciona una fuente
idioma, puede utilizar esa opción con todos los idiomas admitidos.

La gcc El programa acepta opciones y nombres de archivos como operandos. Muchas opciones tienen múltiples
nombres de letras; por lo tanto, varias opciones de una sola letra pueden no agruparse: -dv es muy
diferente de -d -v.

Puede mezclar opciones y otros argumentos. En su mayor parte, el orden que usa no
importar. El orden importa cuando utiliza varias opciones del mismo tipo; por ejemplo, si
tu específicas -L más de una vez, los directorios se buscan en el orden especificado. También,
la ubicación del -l La opción es significativa.

Muchas opciones tienen nombres largos que comienzan con -f o con -W---por ejemplo,
-fmove-bucle-invariantes, -Formato etcétera. La mayoría de estos tienen tanto positivos como negativos
formas; la forma negativa de -fuf is -fno-foo. Este manual documenta solo uno de estos
dos formas, cualquiera que no sea la predeterminada.

CAMPUS


Optión Resumen
A continuación, se muestra un resumen de todas las opciones, agrupadas por tipo. Las explicaciones están en las siguientes
.

En general Opciones
-c -S -E -o presentar -no-prefijos-canónicos -tubo -códigos-pass-exit -x idioma -v
- ### --ayuda[=clase[, ...]] --objetivo-ayuda --versión -envoltura @presentar -fplugin =presentar
-fplugin-arg-nombre =arg -fdump-ada-spec[-Delgado] -fada-spec-parent =unidad
-fdump-go-spec =presentar

C Idioma Opciones
-ansi -std =estándar -fgnu89-en línea -información auxiliar nombre de archivo
-fallow-funciones-variadas-sin-parámetros -fno-asmo -fno-incorporado -fno-incorporado-función
-acogido independiente -fopenacc -fopenmp -fopenmp-simd -fms-extensiones
-fplan9-extensiones -trigrafos -tradicional -cpp-tradicional -fallow-single-precisión
-fcond-desajuste -conversiones-de-vector-lino -fcampos de bits firmados -fsigned-char
-campos de bits divertidos -funsigned-char

C + + Idioma Opciones
-fabi-version =n -fno-control-de-acceso -fcheck-nuevo -fconstexpr-depth =n
-inyección-amiga -fno-elide-constructores -fno-enforce-eh-especificaciones -fpara-alcance
-fno-por-alcance -fno-gnu-palabras clave -fno-plantillas-implícitas
-fno-implícito-plantillas-en-línea -fno-implemente-en-líneas -fms-extensiones
-fno-nonansi-incorporados -fnothrow-opt -fno-nombres-de-operador -fno-opcional-diags
-fpermisivo -fno-bonitas-plantillas -frepo -fno-rtti -fsized-desasignación -fstats
-ftemplate-backtrace-limit =n -ftemplate-depth =n -fno-threadsafe-estática
-fusible-cxa-atexit -fno-débil -nostdinc ++ -fvisibilidad-en-lineas-ocultas
-fvtable-verify =[enfermedades de transmisión sexual|preinicio|ninguna] -fvtv-cuenta -fvtv-depuración -fvisibilidad-ms-compat
-fext-numeric-literales -Wabi =n -Etiqueta wabi -Wconversion-nulo -Wctor-dtor-privacidad
-Wdelete-no-virtual-dtor -Sufijo-literal -Entrenamiento -Wno excepto -Wnon-virtual-dtor
-Reordenar -Weffc ++ -Wstrict-null-centinela -Wno-no-plantilla-amigo -Estilo-estilo-mundo
-Woverloaded-virtual -Wno-pmf-conversiones -Wsign-promoción

Objective-C y Objetivo-C ++ Idioma Opciones
-fconstant-string-class =nombre de la clase -fgnu-tiempo de ejecución -fnext-tiempo de ejecución -fno-nil-receptores
-fobjc-abi-version =n -fobjc-llamada-cxx-cdtors -fobjc-envío-directo -fobjc-excepciones
-fobjc-gc -fobjc-nilcheck -fobjc-std = objc1 -fno-ivar-local
-fivar-visibilidad =[público|protegido|privada|paquete] -sustituir-clases-objc
-fzero-enlace -gen-decls -Wassign-interceptar -Wno-protocolo -Wselector
-Wstrict-selector-partido -Selector-Wundeclared

Idioma Independiente Opciones
-fmensaje-longitud =n -fdiagnostics-show-location =[una vez|cada línea]
-fdiagnostics-color =[auto|nunca|hacerlo] -fno-diagnósticos-mostrar-opción
-fno-diagnóstico-mostrar-caret

advertencia Opciones
-fsyntax-solo -fmax-errores =n -Wpedante -Errores-pedantes -w -Wextra -Pared
-vestido -Volumen-retorno -Optimizaciones de bucle progresivo -Límites de guerra
-Límites-de-guerra =n -Wbool-comparar -Wno-atributos -Wno-incorporado-macro-redefinido
-Wc90-c99-compatible -Wc99-c11-compatible -Wc ++ - compat -Wc ++ 11-compat -Wc ++ 14-compat
-Wcast-alinear -Wcast-calificación -Wchar-subíndices -Aplastado -Comentario
-Wcondicionalmente -Wconversión -Wcoverage-discordancia -Wfecha-hora
-Wdelete-incompleto -Wno-cpp -Wno-obsoleto -Wno-declaraciones-obsoletas
-Wno-designado-init -Wdisabled-optimización -Wno-calificadores-descartados
-Wno-calificadores-de-matriz-descartados -Wno-div-por-cero -Wdoble-promoción -Cuerpo-húmedo
-Wenum-comparar -Etiquetas Wno-endif -Error -Werror = * -Wfatal-errores -Wfloat-igual
-Formato -Wformat = 2 -Wno-formato-contiene-nul -Wno-formato-extra-argumentos
-Wformat-no literal -Seguridad de formato -Firma de formato -Wformato-y2k
-Wframe-mayor-que =len -Wno-objeto-libre-sin-montón -Wjump-falla-init
-Calificadores-pelirrojos -Tipos de punteros compatibles con Win -Wimplícito
-Declaración-función-débil -Wimplicit-int -Winit-yo -Línea ganadora
-Wno-int-conversión -Wno-int-a-puntero-cast -Wno-invalido-offsetof -Winvalid-pch
-Mayor-que =len -Optimizaciones Wunsafe-loop -Wlogic-op -Lógico-sin-paréntesis
-Mucho-largo -Wprincipal -Wmaybe-sin inicializar -Wmemset-args-transpuestos -Fuerzos-de-perdidos
-Inicializadores-de-campo-faltante -Wmissing-include-dirs -Wno-multichar -Wnonnull
-Wnormalizado =[ninguna|id|nfc|nfkc]
-Word -Wno-desbordamiento -Wopenmp-simd -Woverlength-cuerdas -Envasado
-Wpacked-bitfield-compat -Acolchado -Paréntesis -Formato Wpedantic-ms
-Formato-wno-pedante-ms -Wpointer-arith -Wno-puntero-a-int-cast -Declaraciones-wredundantes
-Wno-retorno-dirección-local -Tipo de dolor -Punto de secuencia -Sombra -Wno-sombra-ivar
-Wshift-count-negativo -Wshift-cuenta-desbordamiento -Wsign-comparar -Conversión de wsign
-Wfloat-conversión -Wsizeof-puntero-memaccess -Wsizeof-array-argumento
-Wstack-protector -Wstack-use =len -Wstrict-aliasing -Wstrict-aliasing = n
-Wstrict-desbordamiento -Wstrict-overflow =n -Wsuggest-atributo =[puro|const|sin retorno|formato]
-Wsuggest-final-tipos -Wsuggest-final-métodos -Wsuggest-anular
-Atributo-formato-Wmissing -Interruptor -Wswitch-predeterminado -Wswitch-enumeración -Wswitch-bool
-Wsync-nand -Wsystem-encabezados -Trampolines -Wtrigrafías -Límites de tipo -Wundef
-Wuninicializado -Pragmas-desconocidos -Wno-pragmas -Wsin sufijo-flotante-constantes
-Wunused -Función-wunused -Etiqueta sin uso -Wunused-local-typedefs -Parámetro-wunused
-Wno-resultado-no utilizado -Valor desaprovechado -Variable-wunused -Wunused-pero-set-parámetro
-Wunused-pero-variable-configurada -Wuseless-fundido -Wvariadic-macros
-Wvector-operación-rendimiento -Wvla -Wvolatile-registro-var -Escribir-cadenas
-Wzero-como-constante-puntero-nulo

C y Solo Objective-C advertencia Opciones
-Wbad-función-emitida -Declaraciones-perdidas -W tipo de parámetro faltante
-Prototipos-Wmissing -Externos-wnested -Declaración de estilo mundial -Definición de estilo Wold
-Wstrict-prototipos -Wtradicional -Conversión-tradicional
-Declaración-tras-declaración -Signo-puntero

Depuración Opciones
-dletters -especificaciones de volcado -Dumpmachine -Dumpversion -fsanitize =papa -fsanitizar-recuperar
-fsanitize-recovery =papa -fasan-sombra-offset =número
-fsanitize-indefinido-trampa-en-error -fcheck-puntero-límites -fchkp-comprobar-tipo-incompleto
-fchkp-primer-campo-tiene-límites-propios -fchkp-estrechos-límites
-fchkp-matriz-estrecha-a-la-más-interna -fchkp-optimizar -fchkp-usa-funciones-de-cadena-rápidas
-fchkp-usa-funciones-de-cadena-nochk -fchkp-usar-límites-estáticos
-fchkp-usar-límites-constantes-estáticos -fchkp-tratar-cero-tamaño-dinámico-como-infinito
-fchkp-comprobar-leer -fchkp-comprobar-leer -fchkp-comprobar-escribir -fchkp-store-limits
-fchkp-instrumento-llamadas -fchkp-instrumento-marcado-solamente -fchkp-use-envoltorios
-fdbg-cnt-lista -fdbg-cnt =lista de contravalores -fdisable-ipa-nombre_de_contraseña
-fdisable-rtl-nombre_de_contraseña -fdisable-rtl-contraseña=lista de rango -árbol-deshabilitado-nombre_de_contraseña
-árbol-deshabilitado-contraseña=lista de rango -fdump-noaddr -fdump-sin numerar
-fdump-enlaces-no numerados -Unidad-de-traducción-fdump[-n] -jerarquía-de-clases-fdump[-n]
-fdump-ipa-todos -fdump-ipa-cgraph -fdump-ipa-en línea -fdump-pasa -fdump-estadísticas
-fdump-tree-todos -fdump-árbol-original[-n] -fdump-tree-optimizado[-n] -fdump-árbol-cfg
-fdump-árbol-alias -fdump-árbol-ch -fdump-árbol-ssa[-n] -fdump-árbol-pre[-n]
-fdump-árbol-ccp[-n] -fdump-árbol-dce[-n] -fdump-árbol-gimple[-crudo] -fdump-árbol-dom[-n]
-fdump-árbol-dse[-n] -fdump-árbol-phiprop[-n] -fdump-árbol-phiopt[-n]
-fdump-tree-forwprop[-n] -fdump-tree-copyrename[-n] -fdump-árbol-nrv -fdump-árbol-vect
-fregadero-árbol-vertido -fdump-árbol-sra[-n] -fdump-tree-forwprop[-n] -fdump-árbol-fre[-n]
-fdump-tree-vtable-verificar -fdump-árbol-vrp[-n] -fdump-tree-storeccp[-n]
-fdump-final-insns =presentar -fcompare-depurar[=opta] -fcompare-debug-segundo
-feliminado-enano2-dups -fno-eliminar-tipos-de-depuración-no utilizados
-feliminar-símbolos-de-depuración-no utilizados -femit-clase-debug-siempre -fenable-tipo-pass
-fenable-tipo-pass=lista de rango -fdebug-types-sección -fmem-informe-wpa -informe-fmem
-fpre-ipa-mem-informe -fpost-ipa-mem-informe -fprofile-arcos -fopt-info
-fopt-info-opciones[=presentar] -semilla-aleatoria =número -fsched-verbose =n -fsel-programado-detallado
-fsel-volcado-programado-cfg -fsel-sched-pipelining-detallado -fstack-use -cobertura-de-prueba
-informe-de-tiempo -fvar-seguimiento -asignaciones-de-seguimiento-de-fvar
-fvar-seguimiento-asignaciones-alternar -g -gnivel -galternar -gcoff -enano-versión -ggdb
-conmutadores-gcc-de-grecord -gno-registro-gcc-interruptores -gstabs -gstabs + -gstrict-enano
-gno-estricto-enano -gvms -gxcoff -gxcoff + -gz[=tipo] -fno-fusionar-cadenas-de-depuración
-fno-dwarf2-cfi-asm -fdebug-prefix-map =los ancianos =nueva -femit-struct-depuración-baseonly
-femit-struct-debug-reducido -femit-estructura-depuración-detallada[=lista de especificaciones] -p -página
-print-file-name =bibliotecas -print-libgcc-nombre-de-archivo -imprimir-multi-directorio
-imprimir-multi-lib -imprimir-directorio-multi-os -print-prog-name =programa
-directores-de-búsqueda-de-impresión -Q -print-sysroot -print-sysroot-headers-sufijo -guardar-temps
-save-temps = cwd -save-temps = obj -hora[=presentar]

Optimización Opciones
-optimizaciones-de-bucle-agresivas -funciones-falsas [=n] -falign-saltos [=n]
-etiquetas-falsas [=n] -falign-loops [=n] -matemática-fasociativa -fauto-perfil
-fauto-profile [=camino] -fauto-inc-dic -franch-probabilidades
-fbranch-target-load-optimizar -fbranch-target-load-Optimize2 -fbtr-bb-exclusivo
-fcaller-salva -fcheck-data-deps -ajustes-de-pila-combinada -fconserve-pila
-fcompare-elim -fcprop-registros -f salto cruzado -fcse-seguir-saltos -fcse-saltar-bloques
-fcx-fortran-reglas -fcx-rango-limitado -fdata-secciones -fdce rama retrasada
-f eliminar-comprobaciones-de-puntero-nulo -fdevirtualizar -fdevirtualizar-especulativamente
-fdevirtualizar-en-ltrans -fdse -miedo-inlining -fipa-sra -Optimizaciones-económicas
-fat-lto-objetos -matemáticas-rápidas -finita-solo-matemáticas -Tienda-flotante
-fexcess-precision =papa -fforward-propagar -ffp-contract =papa -secciones-funcionales
-fgcse -fgcse-después de recargar -fgcse-las -fgcse-lm -fgraphite-identidad -fgcse-sm
-cargas-adyacentes -fif-conversión -fif-conversión2 -findirect-inline
-funciones-de-fin-line -Funciones-de-fin-llamadas-una-vez -finline-limit =n
-fines-pequeñas-funciones -fipa-cp -fipa-cp-clon -fipa-cp-alineación -fipa-pta
-fipa-perfil -fipa-puro-constante -fipa-referencia -fipa-icf -algoritmo-fira =algoritmo
-fira-region =región -fira-polipasto-presión -fira-loop-presión -fno-ira-compartir-guardar-ranuras
-fno-ira-share-spill-tragamonedas -fira-verbose =n -fisolate-erroneous-rutas-desreferencia
-atributo-de-rutas-erróneas-aislantes -fivoptos -fkeep-inline-funciones
-fkeep-constancias-estáticas -encogimiento-rango-flive -bloque-bucle -intercambio-de-bucle
-floop-strip-mina -floop-desenrollar-y-atasco -floop-nest-optimizar -floop-paralelizar-todo
-fla-remat -flto -flto-nivel-de-compresión -flto-partición =alg -flto-informe
-flto-informe-wpa -fusión-de-todas-las-constantes -fmerge-constantes -fmodulo-programado
-fmodulo-sched-allow-regmoves -fmove-bucle-invariantes -fno-branch-count-reg
-fno-diferir-pop -fno-función-cse -fno-conjetura-probabilidad-rama -fno-en línea
-fno-matemáticas-errno -fno-mirilla -fno-mirilla2 -fno-programado-interbloqueo -fno-sched-spec
-fno-ceros-firmados -fno-nivel-superior-reordenar -fno-trapping-matemáticas
-fno-zero-inicializado-en-bss -fomit-frame-puntero -foptimizar-llamadas-entre-hermanos
-finvestimiento-parcial -fpeel-bucles -fpredictivo-común -fprefetch-bucle-matrices
-fprofile-informe -fperfil-corrección -fprofile-dir =camino -fprofile-generar
-fprofile-generate =camino -fprofile-uso -fprofile-use =camino -fvalores-de-perfil
-f funciones-de-reorden-de-perfil -matemáticas-recíprocas Sin -frename-registros
-Bloques-de-pedidos -despedir-bloques-y-partición -freorder-funciones
-frerun-cse-después-de-bucle -freschedule-modulo-programados-bucles -matemáticas-redondeadas
-fsched2-use-superbloques -fsched-presión -fsched-spec-carga
-fsched-spec-load-peligroso -fsched-stalled-insns-dep [=n] -fsched-stalled-insns [=n]
-fsched-group-heurística -fsched-camino-crítico-heurístico -fsched-spec-insn-heurística
-fsched-rank-heurística -fsched-última-insn-heurística -fsched-dep-count-heurística
-fschedule-fusión -fschedule-insns -fschedule-insns2 -fsección-anclajes
-programación-selectiva -fprogramación-selectiva2 -fsel-programado-canalización
-fsel-sched-pipelining-external-bucles -interposición-semántica -f-envoltura retráctil
-fseñalización-nans -fsingle-precisión-constante -fsplit-ivs-en-desenrollador
-fsplit-wide-tipos -fssa-phiopt -fstack-protector -fstack-protector-todos
-fstack-protector-fuerte -fstack-protector-explícito -fstdarg-optar -fstrict-aliasing
-fstrict-desbordamiento saltos de hilo -trazador -ftree-bit-ccp -ftree-incorporado-llamada-dce
-ftree-ccp -ftre-ch -ftree-coalesce-vars-en línea -ftree-coalesce-vars -ftree-copia-prop
-ftree-copyrename -ftre-dce -ftree-dominator-opciones -ftre-dse -ftree-forwprop
-ftree-fre -ftree-bucle-si-convertir -ftree-loop-if-convert-tiendas -ftree-bucle-im
-ftree-phiprop -distribución-de-bucle-libre -ftree-loop-distribuir-patrones
-ftree-loop-ivcanon -ftree-loop-lineal -ftree-loop-optimizar -ftree-loop-vectorizar
-ftree-paralelize-loops =n -ftree-pre -free-parcial-pre -ftree-pta -ftree-reasoc
-fregadero de tres -ftree-slsr -ftre-sra conversión de tres interruptores -fusión-de-tres-colas
-ftree-ter -ftree-vectorizar -ftree-vrp -funit-a-la-vez -funroll-todos-bucles
-funroll-bucles -optimizaciones-de-bucle-divertido -optimizaciones-matemáticas-divertidas
-funswitch-bucles -fipa-ra -expansión-variable-en-desenrollador -modelo-de-costos-fvect -fvpt
-fweb -programa-completo -fwpa -fusible-linker-plugin --param nombre =propuesta de -O -O0 -O1 -O2
-O3 -os -Comida -Og

Preprocesador Opciones
-Apregunta=https://www.youtube.com/watch?v=xB-eutXNUMXJtA&feature=youtu.be -UN-pregunta[=https://www.youtube.com/watch?v=xB-eutXNUMXJtA&feature=youtu.be] -C -DD -dI -dM -dn -Dmacro[=definir] -E -H
-idirdespués dir -incluir presentar -imacros presentar -iprefijo presentar -icon prefijo dir
-iconprefijoantes dir -sistema dir -imultilib dir -isysroot dir -M -MM -MF -MG
-MP -MQ -MONTE -nostdinc -P -fdebug-cpp -ftrack-macro-expansión -directorio-de-trabajo
-remapear -trigrafos -undef -Umacro -Wp,opción -Xpreprocesador opción -no-integrado-cpp

Ensamblador Optión
-Washington,opción -Ensamblador opción

enlaces Opciones
nombre-archivo-objeto -fuse-ld =izquierda -lbibliotecas -nostartfiles -nodefaultlibs -nostdlib
-tarta -rdinámico -s -estático -static-libgcc -static-libstdc ++ -estático-libasan
-estático-libtsan -estático-liblsan -estático-libubsan -estatic-libmpx -estatic-libmpxwrappers
-compartido -libgcc-compartido -simbólico -T guión -Wl,opción -Xlinker opción -u símbolo -z
keyword

Directorio Opciones
-Bprefijo -Idir -iplugindir =dir -Yo citodir -Ldir -specs =presentar -I- --sysroot =dir
--no-sysroot-sufijo

Máquina Dependiente Opciones
AAArch64 Opciones -mabi =nombre -mbig-endian -mlittle-endian -mgeneral-regs-solo
-mcmodel = diminuto -mcmodel = pequeño -mcmodel = grande -mstrict-alineación -puntero-de-marco-de-hoja-de-momia
-mno-omitir-puntero-marco-hoja -mtls-dialecto = desc -mtls-dialect = tradicional
-mfix-corteza-a53-835769 -mno-fix-cortex-a53-835769 -mfix-corteza-a53-843419
-mno-fix-cortex-a53-843419 -march =nombre -mcpu =nombre -mtune =nombre

Adapteva Epifanía Opciones -mhalf-reg-archivo -prefer-short-insn-regs -costo-de-rama =número
-mcmovimiento -mnops =número -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-modificar
-mstack-offset =número -mround-más cercano -ml-llamadas-largas -llamadas-cortas -mpequeño16 -mfp-mode =modo
-mvect-doble -max-vect-align =número -msplit-vecmove-temprano -m1reg-reg

ARC Opciones -cambiador-de-barrilete -mcpu =cpu -mA6 -mARC600 -mA7 -mARC700 -mdpfp
-mdpfp-compacto -mdpfp-rápido -mno-dpfp-lrsr -mea -mno-mpy -mmul32x16 -mmul64 -normal
-mspfp -mspfp-compacto -mspfp-rápido -msimd -msoft-flotador -mswap -mcrc -mdsp-paquete -mdvbf
-mlock -mmac-d16 -mmac-24 -mrtsc -mswape -mtelefonía -mxy -dimensionar -manonotar-alinear
-marclinux -marclinux_prof -mepílogo-cfi -ml-llamadas-largas -mmedium-llama -msdatos
-mucb-mcount -caché-volátil -llamada-maligna -mauto-modificar-reg -mirilla-mbbit -mno-brcc
-mcase-vector-pcrel -casas-compactasi -mno-cond-exec -mearly-cbranchsi -meexpand-adddi
-cargas-indexadas -mlra -mlra-prioridad-ninguno -mlra-prioridad-compacto mlra-prioridad-
no compacto -mno-milicode -código-mixto -clase-mq -mRcq -mRcw -msize-level =nivel
-mtune =cpu -mmultcost =número -inmunalign-prob-umbral =probabilidades

ARM Opciones -mapcs-marco -mno-apcs-marco -mabi =nombre -mapcs-pila-control
-mno-apcs-pila-control -mapcs-flotador -mno-apcs-flotador -mapcs-reentrante
-mno-apcs-reentrante -msched-prólogo -mno-sched-prolog -mlittle-endian -mbig-endian
-mfloat-abi =nombre -formato-mfp16 =nombre -mthumb-interfuncionamiento -mno-pulgar-interwork -mcpu =nombre
-march =nombre -mfpu =nombre -mtune =nombre -impresión-sintonizar-info -mstructure-size-boundary =n
-mabort-on-noreturn -ml-llamadas-largas -mno-llamadas-largas -mesa-base-de-una-imagen
-mno-base-de-imagen-única -mpic-register =reg -mnop-diversión-dllimport -mpoke-nombre-función
-pulgar -marmar -mtpcs-marco -mtpcs-hoja-marco -mcaller-super-interfuncionamiento
-mcallee-super-interfuncionamiento -mtp =nombre -mtls-dialecto =dialecto -reubicaciones-de-palabras
-mfix-corteza-m3-ldrd -acceso-no-alineado -mneon-para-64 bits -mslow-flash-datos
-masm-sintaxis-unificada -mrestringirlo

AVR Opciones -mmcu =mcu -argmentos-acumulativos -costo-de-rama =el costo -mcall-prólogos -menta8
-mn_flash =tamaño -mno-interrumpe -relajarse -mrmw -mstrict-X -mtiny-pila -nodevicelib
-Waddr-espacio-convertir

Aleta negra Opciones -mcpu =cpu[-señorvisión] -msim -puntero-de-marco-de-hoja-de-momia
-mno-omitir-puntero-marco-hoja -mspecld-anomalía -mno-specld-anomalía -mcsync-anomalía
-mno-csync-anomalía -mlow-64k -mno-bajo64k -mstack-verificar-l1 -mid-biblioteca-compartida
-mno-id-biblioteca-compartida -id-biblioteca-compartida-ms =n -mleaf-id-biblioteca-compartida
-mno-leaf-id-biblioteca-compartida -msep-datos -mno-sep-datos -ml-llamadas-largas -mno-llamadas-largas
-mrápido-fp -minline-plt -mmultinúcleo -mcorea -mcoreb -msdram -micplb

C6X Opciones -mbig-endian -mlittle-endian -march =cpu -msim -msdata =tipo sdata

CRIS Opciones -mcpu =cpu -march =cpu -mtune =cpu -mmax-stack-frame =n
-melinux-stacksize =n -metrax4 -metrax100 -mpdebug -mcc-inicio -mno-efectos-secundarios
-mstack-alinear -mdata-alinear -mconst-alinear -m32 bits -m16 bits -m8 bits
-mno-prólogo-epílogo -mno-gotplt -melf -maout -melinux -mlinux -sim -sim2
-mmul-bug-solución -mno-mul-bug-solución alternativa

CR16 Opciones -mmac -mcr16cplus -mcr16c -msim -menta32 -Opciones-de-mbito -mdata-model =modelo

Darwin Opciones -todos_cargar -cliente_permitido -arco -arch_errors_fatales -arch_only
-bind_at_load -haz -cargador_paquete -nombre del cliente -versión_compatibilidad
-versión actual -trip_dead -archivo-de-dependencia -archivo_dylib -dylinker_nombre_instalación
-dinámica -lib dinámico -lista_símbolos_exportados -lista de archivos -espacio_nombre_plano
-force_cpusubtipo_ALL -force_flat_namespace -headerpad_max_install_names -marco
-imagen_base -en eso -nombre_instalación -mantener_privado_externos -multi_módulo
-multiplicar_definido -multiplicar_definido_no utilizado -noall_load
-no_dead_strip_inits_and_terms -nofixpreenlace -nomultidefs -noprebind
-noseglinkeditar -pagezero_size -previncular -prebind_all_twolevel_modules -paquete_privado
-read_only_relocs -sectalign -sectoobjetossímbolos -porque cargar -seg1dir -sectacrear
-sectoobjetossímbolos -sector -segaddr -segs_read_only_addr -segs_read_write_addr
-seg_addr_table -seg_addr_table_filename -seglinkeditar -segprot -segs_read_only_addr
-segs_read_write_addr -módulo_único -estático -sub_biblioteca -sub_paraguas
-dosnivel_espacio de nombres -paraguas -indefinido -lista_símbolos_unexportados
-desajustes_de_referencia_débil -lo que se ha cargado -F -dispuesto -glleno -mmacosx-versión-min =versión
-mkernel -mone-byte-bool

Diciembre Alpha Opciones -mno-fp-regs -msoft-flotador -mieee -mieee-con-inexacto
-mieee-conforme -mfp-trap-mode =modo -mfp-rounding-mode =modo -mtrap-precisión =modo
-mbuild-constantes -mcpu =tipo cpu -mtune =tipo cpu -mbwx -mmáx -mfix -mcix
-mfloat-vax -mfloat-ieee -relocs-mexplicit -msmall-datos -datos-grandes -mpequeño-texto
-texto-grande -memory-latency =equipo

FR30 Opciones -msmall-modelo -mno-lsim

VIDA Opciones -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-flotador -msoft-flotador
-malloc-cc -mfixed-cc -mdpalabra -mno-dword -mdoble -mno-doble -medios -mno-media
-mmuladd -mno-muladd -mfdpic -minline-plt -mgprel-ro -pic-biblioteca-multilib
-mlinked-fp -ml-llamadas-largas -Etiquetas-malignas -mlibrary-pic -macc-4 -macc-8 -empaque
-mno-paquete -mno-eflags segundo movimiento -mno-cond-movimiento -moptimizar-membar
-mno-optimizar-membar -mscc -mno-scc -mcond-ejecutivo -mno-cond-exec -mvliw-rama
-mno-vliw-rama -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-anidado-cond-exec -mtomcat-estadísticas -mTLS -mtl -mcpu =cpu

GNU / Linux Opciones -mglibc -muclibc -mbiónico -mandroide -tno-android-cc -tno-android-ld

H8 / 300 Opciones -relajarse -mh -em -Minnesota -mexr -mno-exr -menta32 -maligno-300

HPPA Opciones -march =tipo de arquitectura -mdisable-fpregs -mdisable-indexación
-mfast-llamadas-indirectas -gas -mgnu-ld -mhp-ld -mrango-fijo =rango de registro
-msalto-en-retraso -mlinker-optar -ml-llamadas-largas -mtienda-carga-larga -mno-deshabilitar-fpregs
-mno-deshabilitar-indexación -mno-llamadas-indirectas-rápidas -mno-gas -mno-salto-en-retardo
-mno-long-load-store -mno-portátil-tiempo de ejecución -mno-blando-flotador -mno-espacio-regs
-msoft-flotador -mpa-risc-1-0 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime
-mschedule =tipo cpu -regs-mspace -msio -mwsio -munix =estándar unix -nolibdld -estático
-hilos

IA-64 Opciones -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-foto
-tope-de-ensamblaje-volátil -mregistrar-nombres -msdatos -mno-sdatos -mconstante-gp -mauto-pic
-confundido-loco -minline-float-divide-min-latencia -minline-float-divide-max-rendimiento
-mno-inline-float-división -minline-int-divide-min-latencia
-minline-int-divide-max-rendimiento -mno-en línea-int-dividir -minline-sqrt-min-latencia
-minline-sqrt-max-rendimiento -mno-en línea-sqrt -mdwarf2-asm -primera-parada-bits
-mrango-fijo =rango de registro -mtls-size =tamaño tls -mtune =tipo cpu -milp32 -mlp64
-msched-br-data-spec -msched-ar-especificaciones-de-datos -msched-control-especificación -msched-br-en-especificaciones de datos
-msched-ar-en-especificaciones-de-datos -msched-en-control-spec -msched-spec-ldc
-msched-spec-control-ldc -msched-prefiere-insns-de-especificaciones-sin-datos
-msched-prefiere-sin-control-spec-insns -msched-stop-bits-después-de-cada-ciclo
-msched-count-spec-en-ruta-crítica -msel-programado-no-verificar-control-spec
-msched-fp-mem-deps-coste cero -msched-max-memoria-insns-límite-duro
-msched-max-memory-insns =max-insns

LM32 Opciones -Tambor de barra-habilitado -mdivide habilitado -multiplicado
-msign-extender-habilitado -muser-habilitado

M32R / D Opciones -m32r2 -m32rx -m32r -mdebug -malign-bucles -mno-alinear-bucles
-tasa-de-missue =número -costo-de-rama =número -mmodel =código-tamaño-modelo-tipo -msdata =sdata-
tipo -mno-flush-función -mflush-func =nombre -mno-trampa-rasante -mflush-trap =número -G número

M32C Opciones -mcpu =cpu -msim -memregs =número

M680x0 Opciones -march =arco -mcpu =cpu -mtune =melodía -m68000 -m68020 -m68020-40
-m68020-60 -m68030 -m68040 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407
-mcfv4e -mbitcampo -mno-campo de bits -mc68000 -mc68020 -mnobitfield -mrtd -mno-rtd
-mdiv -mno-div -más corto -mno-corto -mhard-flotador -m68881 -msoft-flotador -mpcrel
-maligno-int -mstrict-alineación -msep-datos -mno-sep-datos -id-biblioteca-compartida-ms = n
-mid-biblioteca-compartida -mno-id-biblioteca-compartida -mxgot -mno-xgot

MCore Opciones -m hardlit -mno-iluminado -mdiv -mno-div -mrelax-inmediates
-mno-relax-inmediates campos de bits de ancho -mno-campos-de-bits anchos -m4byte-funciones
-mno-4byte-funciones -mcallgraph-datos -mno-callgraph-datos -mslow-bytes
-mno-bytes-lentos -mno-lsim -mlittle-endian -mbig-endian -m210 -m340
-mstack-incremento

diputado Opciones -mabsdiff -opts-centro comercial -medio -basado =n -mbitops -mc =n -mclip
-mconfig =nombre -mccop -mcop32 -mcop64 -mivc2 -mdc -mdiv -meb -mel -miovolátil -ml
-mleadz -mm -mminmax -mult -mno-opciones -repetir -em -msatur -msdram -msim -msimnovec
-mtf -mtiny =n

microblaze Opciones -msoft-flotador -mhard-flotador -msmall-divide -mcpu =cpu -memcpy
-mxl-suave-mul -mxl-suave-div -mxl-cambio de barril -mxl-patrón-comparar -mxl-pila-control
-mxl-gp-optar -mno-clearbss -mxl-multiplicar-alto -mxl-flotar-convertir -mxl-flotante-sqrt
-mbig-endian -mlittle-endian -mxl-reordenar -modo-mxl-modelo de aplicación

MIPS Opciones -EL -EB -march =arco -mtune =arco -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips32r3 -mips32r5 -mips32r6 -mips64 -mips64r2 -mips64r3
-mips64r5 -mips64r6 -mips16 -mno-mips16 -mflip-mips16 -minterlink-comprimido
-mno-interlink-comprimido -minterlink-mips16 -mno-interlink-mips16 -mabi =abi
-mabicalladas -mno-abicalls -mcompartido -mno-compartido -mplt -mno-plt -mxgot -mno-xgot
-mgp32 -mgp64 -mfp32 -mfpxx -mfp64 -mhard-flotador -msoft-flotador -mno-flotar
-msingle-flotador -mdoble-flotador -modd-spreg -mno-impar-spreg -mabs =modo -mnan =codificación
-mdsp -mno-dsp -mdspr2 -mno-dspr2 -mmcu -mmno-mcu -meva -mno-eva -mvirt -mno-virt
-mxpa -mno-xpa -mmicromips -mno-micromips -mfpu =tipo fpu -msmartmips -mno-smartmips
-soltero-emparejado -mno-emparejado-sencillo -mdmx -mno-mdmx -mips3d -mno-mips3d -mmt
-mno-mt -mllsc -mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -Gnúmero
-mlocal-sdata -mno-local-sdata -mextern-sdata -mno-sdata-externo -mgpopt -mno-gopt
-datos-integrados -mno-datos-incrustados -muninit-const-en-rodata
-mno-uninit-const-en-rodata -mcode-legible =pólipo -direcciones-msplit
-mno-direcciones-divididas -relocs-mexplicit -mno-explícita-relocs -mcheck-cero-división
-mno-check-cero-división -mdivide-trampas -mdivide-break -memcpy -mno-memcpy
-ml-llamadas-largas -mno-llamadas-largas -mmad -mno-loco -mimadd -mno-imadd -confundido-loco
-mno-fusionado-madd -nocpp -mfix-24k -mno-arreglar-24k -mfix-r4000 -mno-fix-r4000
-mfix-r4400 -mno-fix-r4400 -mfix-r10000 -mno-fix-r10000 -mfix-rm7000 -mno-fix-rm7000
-mfix-vr4120 -mno-fix-vr4120 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-arreglar-sb1
-mflush-func =divertida -mno-flush-función -costo-de-rama =número -rama-probable
-mno-rama-probable -mfp-excepciones -mno-fp-excepciones -mvr4130-alinear -mno-vr4130-alinear
-msynci -mno-synci -mrelax-pic-llamadas -mno-relax-pic-llamadas -mmcount-ra-dirección

MMIX Opciones -mlibfuncs -mno-libfuncs -mepsilon -mno-épsilon -mabi = gnu
-mabi = mmixware -mzero-extender -mknuthdiv -mtoplenivel-símbolos -melf -mbranch-predecir
-mno-branch-predecir -direcciones-de-base -mno-direcciones-base -mesa-salida-simple
-mno-salida-única

MN10300 Opciones -mmult-error -mno-mult-error -mno-am33 -mam33 -mam33-2 -mam34 -mtune =UPC-
tipo -mreturn-puntero-en-d0 -mno-crt0 -relajarse -mliw -msetlb

Moxie Opciones -meb -mel -mmul.x -mno-crt0

MSP430 Opciones -msim -masm-hex -mmcu = -mcpu = -grande -mpequeño -relajarse -mhwmult = -mentira

NDS32 Opciones -mbig-endian -mlittle-endian -mregs-reducidos -mfull-regs -mcmov -mno-cmov
-mperf-ext -mno-perf-ext -mv3push -mno-v3push -m16bit -mno-16bit -misr-tamaño-vectorial =número
-mcache-block-size =número -march =arco -mcmodel =modelo de código -mctor-dtor -relajarse

niños II Opciones -G número -mgpopt =opción -mgpopt -mno-gpopt -mel -meb -mno-bypass-caché
-mbypass-caché -mno-caché-volátil -mcaché-volátil -mno-rápido-sw-div -mfast-sw-div
-mhw-mul -mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-div -a medida-Insn=N
-mno-personalizado-Insn -mcustom-fpu-cfg =nombre -mhal -msmallc -msys-crt0 =nombre -msys-lib =nombre

Nvidia PTX Opciones -m32 -m64 -mmainkernel

PDP-11 Opciones -mfpu -msoft-flotador -mac0 -mno-ac0 -m40 -m45 -m10 -mbcopia
-mbcopy-incorporado -menta32 -mno-int16 -menta16 -mno-int32 -mfloat32 -mno-float64
-mfloat64 -mno-float32 -mabshi -mno-abshi -rama-cara -mbranch-barato
-munix-asm -mdec-asm

picoChip Opciones -mae =tipo_ae -mvliw-lookahead =N -msymbol-como-dirección
-mno-ineficientes-advertencias

PowerPC Opciones Consulte Opciones de RS / 6000 y PowerPC.

RL78 Opciones -msim -mmul = ninguno -mmul = g13 -mmul = rl78 -m64bit-dobles -m32bit-dobles

RS / 6000 y PowerPC Opciones -mcpu =tipo cpu -mtune =tipo cpu -mcmodel =modelo de código
-mpowerpc64 -maltivec -mno-altivec -mpowerpc-gpopt -mno-powerpc-gpopt
-mpowerpc-gfxopt -mno-powerpc-gfxopt -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb
-mpopcntd -mno-popcntd -mfprnd -mno-fprnd -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr
-mhard-dfp -mno-duro-dfp -mfull-toc -mínimo-toc -mno-fp-en-toc -mno-suma-en-toc
-m64 -m32 -mxl-compatible -mno-xl-compatible -mpe -poder-maligno -maligno-natural
-msoft-flotador -mhard-flotador -múltiple -mno-múltiple -msingle-flotador -mdoble-flotador
-msimple-fpu -mstring -mno-cadena -actualizar -mno-actualización -direcciones-indexadas-mavoid
-mno-evitar-direcciones-indexadas -confundido-loco -mno-fusionado-madd -mbit-alinear
-mno-bit-alinear -mstrict-alineación -mno-estricto-alinear -relocalizable -mno-reubicable
-mrelocatable-lib -mno-reubicable-lib -mtoc -mno-toc -m poco -mlittle-endian
-muy grande -mbig-endian -mdynamic-sin-foto -maltivec -mswdiv -mesa-base-de-una-imagen
-mprioritize-restrictas-insns =lista de prioridades -msched-costly-dep =tipo_dependencia
-minsert-sched-nops =esquema -mcall-sysv -mcall-netbsd -maix-estructura-retorno
-msvr4-estructura-retorno -mabi =tipo abi -msecure-plt -mbss-plt
-mblock-move-inline-limit =número -misel -mno-isel -misel = sí -misel = no -mspe -mno-spe
-mspe = sí -mspe = no -deparado -mgen-cell-microcódigo -mwarn-cell-microcódigo -mvrsave
-mno-vrsave -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs = sí -mfloat-gprs = no
-mfloat-gprs = sencillo -mfloat-gprs = doble -mprototipo -mno-prototipo -msim -mmvme
-loco -mi cuchillo amarillo -miembro -msdatos -msdata =optar -mvxworks -G número -philo -mrecip
-mrecip =optar -mno-receta -mrecip-precisión -mno-recip-precisión -mveclibabi =tipo -mfriz
-mno-frizz -mpointers-a-funciones-anidadas -mno-punteros-a-funciones-anidadas
-msave-toc-indirecto -mno-guardar-toc-indirecto -poder8-fusión -mno-mpower8-fusión
-poder8-vector -mno-power8-vector -mcripto -mno-cripto -mdirect-mover -mno-movimiento-directo
-mquad-memoria -mno-quad-memoria -mquad-memoria-atómica -mno-quad-memoria-atómica
-mcompat-align-parm -mno-compatibilidad-alineación-parámetro -mupper-regs-df -mno-superior-regs-df
-mupper-regs-sf -mno-superior-regs-sf -mupper-regs -mno-superiores-regs

RX Opciones -m64bit-dobles -m32bit-dobles -fpu -nofpu -mcpu = -mbig-endian-datos
-mlittle-endian-datos -msmall-datos -msim -mno-sim -mas100-sintaxis -mno-as100-sintaxis
-relajarse -mmax-constante-tamaño = -registro-menta = -mpid -mno-advertir-múltiples-interrupciones-rápidas
-msave-acc-en-interrupciones

S / 390 y serie z Opciones -mtune =tipo cpu -march =tipo cpu -mhard-flotador -msoft-flotador
-mhard-dfp -mno-duro-dfp -mlong-doble-64 -mlong-doble-128 -mbalaje
-mno-cadena trasera pila empaquetada -mno-empaquetado-pila -msmall-ejecutivo -mno-pequeño-ejecutivo
-mmvcle -mno-mvcle -m64 -m31 -mdebug -mno-depuración -colina baja -mzarch -mtpf-rastreo
-mno-tpf-rastreo -confundido-loco -mno-fusionado-madd -mwarn-frameize -mwarn-pila dinámica
-mstack-tamaño -mstack-guardia -mhotpatch =medias palabras,medias palabras

Puntuación Opciones -meb -mel -mnhwloop -muls -mmac -mscore5 -mscore5u -mscore7 -mscore7d

SH Opciones -m1 -m2 -m2e -m2a-nofpu -m2a-único-solo -m2a-single -m2a -m3 -m3e
-m4-nofpu -m4-solo-solo -m4-sencillo -m4 -m4a-nofpu -m4a-único-solo -m4a-single
-m4a -m4al -m5-64medios -m5-64media-nofpu -m5-32medios -m5-32media-nofpu -m5-compacto
-m5-compacto-nofpu -megabyte -ml -mdalign -relajarse -mbigtable -mfmovd -mhitachi -mrenesas
-mno-renesas -mnomacsave -mieee -mno-ieee -mbitops -dimensionar -minline-ic_invalidate
-mpadstruct -mespacio -prefergot -modo de usuario -multcost =número -mdiv =estrategia
-mdivsi3_libfunc =nombre -mrango-fijo =rango de registro -direccionamiento-indizado
-mgettrcost =número -mpt-fijo -acumular-argumentos-salientes -símbolos-mínimos
-modelo -matómico =modelo atómico -costo-de-rama =número -mzdcbranch -mno-zdcbranch
-mcbranch-force-delay-ranura -confundido-loco -mno-fusionado-madd -mfsca -mno-fsca -mfsrra
-mno-fsrra -pretend-cmove -mtas

Solaris 2 Opciones -mclear-hwcap -mno-claro-hwcap -texto-mimpuro -mno-texto-impuro
-pthreads -philo

SPARC Opciones -mcpu =tipo cpu -mtune =tipo cpu -mcmodel =modelo de código -modelo-de-memoria =mem-
modelo -m32 -m64 -mapa-registros -mno-aplicación-registros -mfaster-estructuras -mno-estructuras-más rápidas
-mplano -mno-plano -mfpu -mno-fpu -mhard-flotador -msoft-flotador -mhard-quad-flotador
-msoft-quad-flotador -mstack-sesgo -mno-pila-sesgo -dobles-inmunalineados
-mno-dobles-no-alineados -modo-usuario -mno-modo-usuario -mv8plus -mno-v8plus -mvis
-mno-vis -mvis2 -mno-vis2 -mvis3 -mno-vis3 -mcbcond -mno-cbcond -mfmaf -mno-fmaf
-mpopc -mno-popc -mfix-at697f -mfix-ut699

SPU Opciones -advertir-reloc -merror-reloc -msafe-dma -munsafe-dma -consejos-de-rama
-msmall-mem -m grande-mem -mstdmain -mrango-fijo =rango de registro -mea32 -mea64
-maddress-space-conversión -mno-conversión-espacio-de-direcciones -mcache-size =tamaño del caché
-Actualizaciones -matómicas -mno-actualizaciones-atómicas

System V Opciones -Qy -Qn -YP,caminos -Sí,dir

AZULEJO-Gx Opciones -mcpu = CPU -m32 -m64 -mbig-endian -mlittle-endian -mcmodel =modelo de código

TILEPro Opciones -mcpu =cpu -m32

V850 Opciones -ml-llamadas-largas -mno-llamadas-largas -mep -mno-ep -función-emprolog
-función-mno-prolog -mespacio -mtda =n -msda =n -mzda =n -mapa-registros -mno-aplicación-registros
-mdisable-llamada -mno-deshabilitar-callt -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-mv850 -mv850e3v5 -mbucle -relajarse -ml-saltos-largos -msoft-flotador -mhard-flotador -mgcc-abi
-mrh850-abi -mbig-interruptor

VAX Opciones -mg -mgnu -munix

Visium Opciones -mdebug -msim -mfpu -mno-fpu -mhard-flotador -msoft-flotador -mcpu =tipo cpu
-mtune =tipo cpu -modomsv -modo-usuario

VMS Opciones -mvms-códigos-de-retorno -mdebug-main =prefijo -mmalloc64 -mpointer-size =tamaño

VxWorks Opciones -mrtp -no-estático -Bestático -Bdinámico -Xbind-perezoso -Xbind-ahora

x86 Opciones -mtune =tipo cpu -march =tipo cpu -mtune-ctrl =lista de características
-mdump-tune-características -mno-predeterminado -mfpmath =unidad -masm =dialecto -mno-fantasia-matematicas-387
-mno-fp-ret-en-387 -msoft-flotador -mno-ancho-multiplicar -mrtd -malign-doble
-límite-de-pila -preferido =número -mincoming-stack-boundary =número -mcld -mcx16 -msahf
-mmovbe -mcrc32 -mrecip -mrecip =optar -mvzerosuperior -prefer-avx128 -mmmx -msse -msse2
-msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx -mavx2 -mavx512f -mavx512pf -mavx512er
-mavx512cd -msha -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma -mprefetchwt1
-mclflushopt -mxsavec -mx guarda -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop
-mlzcnt -mbmi2 -mfxsr -mxguardar -mxsaveopt -mrtm -mlwp -mmpx -mmesperax -mhilos
-mno-align-stringops -minline-todos-stringops -minline-stringops-dinámicamente
-mstringop-estrategia =alg -mmemcpy-estrategia =estrategia -memset-estrategia =estrategia
-mpush-args -acumular-argumentos-salientes -m128bit-largo-doble -m96bit-largo-doble
-mlong-doble-64 -mlong-doble-80 -mlong-doble-128 -mregparm =número -msseregparm
-mveclibabi =tipo -mvect8-ret-en-mem -mpc32 -mpc64 -mpc80 -mstackrealinear
-puntero-de-marco-de-hoja-de-momia -mno-zona-roja -mno-tls-direct-seg-refs -mcmodel =modelo de código
-mabi =nombre -modo-maddress =modo -m32 -m64 -mx32 -m16 -umbral-de-datos-grande =número
-msse2avx -mentry -mrecord-mcount -mnop-mcount -m8bit-idiv
-mavx256-carga dividida no alineada -mavx256-tienda-no alineada-dividida -datos-malignos =tipo
-mstack-protector-guard =

x86 Windows Opciones -consola -mcygwin -mno-cygwin -mdll -mnop-diversión-dllimport -mhilo
-municódigo -mwin32 -mventanas -fno-set-stack-ejecutable

xtormenta16 Opciones -msim

xtensa Opciones -mconst16 -mno-const16 -confundido-loco -mno-fusionado-madd -mforce-no-pic
-mserializar-volátil -mno-serializar-volátil -mtext-sección-literales
-mno-text-section-literales -mtarget-alinear -mno-objetivo-alinear -mlongllamadas
-mno-llamadas largas

serie z Opciones Consulte Opciones de S / 390 y zSeries.

Código Generación Opciones
-fcall-Saved-reg -fcall-usado-reg -fijo-reg -fexcepciones -fnon-call-excepciones
-f eliminar-excepciones-muertas -Mesas-divertidas-de-viento -mesas-de-desenrollado-sincronizado -fno-gnu-único
-directiva-de-tamaño-finhibit -funciones-del-instrumento
-funciones-de-instrumentos-excluir-lista-de-funciones =sym,sym, ...
-funciones-de-instrumentos-excluir-lista-de-archivos =presentar,presentar, ... -fno-común -fno-ident
-fpcc-estructura-retorno -fpic -fPIC -fpie -fPIE -fno-tablas-de-salto -frecord-gcc-interruptores
-freg-estructura-retorno -f-enumeraciones cortas -f corto-doble -fshort-wchar -fverbose-asm
-fpack-struct [=n] -fstack-comprobar -fstack-limit-register =reg -fstack-limit-symbol =sym
-fno-límite de pila -fsplit-pila -guión-subrayado -ftls-modelo =modelo
-fstack-reuse =nivel_reutilización -ftrapv -fwrapv -comprobación-de-límites
-fvisibilidad =[tu préstamo estudiantil|interno|oculto|protegido] -fstrict-volátiles-bitfields
-fsync-libcalls

Opciones Controlador las Tipo of Salida
La compilación puede implicar hasta cuatro etapas: preprocesamiento, compilación propiamente dicha, ensamblaje y
enlazando, siempre en ese orden. GCC es capaz de preprocesar y compilar varios
archivos en varios archivos de entrada de ensamblador o en un archivo de entrada de ensamblador; luego
cada archivo de entrada del ensamblador produce un archivo de objeto, y la vinculación combina todos los objetos
archivos (los recién compilados y los especificados como entrada) en un archivo ejecutable.

Para cualquier archivo de entrada dado, el sufijo del nombre del archivo determina qué tipo de compilación es
hecho:

presentar.c
Código fuente C que debe procesarse previamente.

presentar.i
Código fuente C que no debe procesarse previamente.

presentar.ii
Código fuente C ++ que no debe procesarse previamente.

presentar.m
Código fuente de Objective-C. Tenga en cuenta que debe vincular con el libobjc biblioteca para hacer una
Trabajo del programa Objective-C.

presentar.mi
Código fuente de Objective-C que no debe procesarse previamente.

presentar.mm
presentar.M
Código fuente de Objective-C ++. Tenga en cuenta que debe vincular con el libobjc biblioteca para hacer
un programa de Objective-C ++ funciona. Tenga en cuenta que .M se refiere a una M. literal en mayúscula.

presentar.mii
Código fuente de Objective-C ++ que no debe procesarse previamente.

presentar.h
C, C ++, Objective-C o Objective-C ++ archivo de encabezado para convertirlo en un archivo precompilado
encabezado (predeterminado), o C, C ++ archivo de encabezado para convertirse en una especificación Ada (a través de la
-fdump-ada-spec cambiar).

presentar. CC
presentar.cp
presentar.cxx
presentar.cpp
presentar.CPP
presentar.c ++
presentar.C
Código fuente C ++ que debe procesarse previamente. Tenga en cuenta que en .cxx, las dos últimas letras
ambos deben ser literalmente x. Igualmente, .C se refiere a una C. literal en mayúscula.

presentar.mm
presentar.M
Código fuente de Objective-C ++ que debe procesarse previamente.

presentar.mii
Código fuente de Objective-C ++ que no debe procesarse previamente.

presentar.S.S
presentar.H
presentar.hp
presentar.hxx
presentar.hpp
presentar.HPP
presentar.h ++
presentar.tcc
El archivo de encabezado de C ++ se convertirá en un encabezado precompilado o en una especificación de Ada.

presentar.f
presentar.para
presentar.ftn
Se corrigió el código fuente de Fortran que no debe procesarse previamente.

presentar.F
presentar.POR
presentar.fpp
presentar.FPP
presentar.FTN
Forma fija el código fuente de Fortran que debe ser preprocesado (con el tradicional
preprocesador).

presentar.f90
presentar.f95
presentar.f03
presentar.f08
Código fuente de Fortran de forma libre que no debe procesarse previamente.

presentar.F90
presentar.F95
presentar.F03
presentar.F08
Código fuente Fortran de forma libre que debe ser preprocesado (con el tradicional
preprocesador).

presentar.ir
Ir al código fuente.

presentar.anuncios
Archivo de código fuente de Ada que contiene una declaración de unidad de biblioteca (una declaración de un
paquete, subprograma o genérico, o una instanciación genérica), o una unidad de biblioteca
declaración de cambio de nombre (una declaración de cambio de nombre de paquete, genérico o subprograma). Tal
los archivos también se llaman especificaciones.

presentar.adb
Archivo de código fuente Ada que contiene un cuerpo de unidad de biblioteca (un subprograma o cuerpo de paquete).
Estos archivos también se denominan cuerpos.

presentar.s
Código de ensamblador.

presentar.S
presentar.sx
Código de ensamblador que debe procesarse previamente.

otros
Un archivo de objeto para introducirlo directamente en el enlace. Cualquier nombre de archivo sin reconocimiento
El sufijo se trata de esta manera.

Puede especificar el idioma de entrada explícitamente con el -x opción:

-x idioma
Especifique explícitamente el idioma para los siguientes archivos de entrada (en lugar de dejar que el
compilador elija un valor predeterminado basado en el sufijo del nombre del archivo). Esta opción se aplica a todos
siguientes archivos de entrada hasta el siguiente -x opción. Posibles valores para idioma son:

c c-header cpp-salida
c ++ c ++ - encabezado c ++ - salida cpp
objetivo-c objetivo-c-encabezado objetivo-c-cpp-salida
objetivo-c ++ objetivo-c ++ - encabezado objetivo-c ++ - salida cpp
ensamblador ensamblador-con-cpp
ada
f77 f77-cpp-entrada f95 f95-cpp-entrada
go
Java

-x ninguna
Desactive cualquier especificación de un idioma, para que se manejen los archivos posteriores
según sus sufijos de nombre de archivo (como son si -x no se ha utilizado en absoluto).

-códigos-pass-exit
Normalmente el gcc el programa sale con el código de 1 si alguna fase del compilador regresa
un código de retorno no exitoso. Si especifica -códigos-pass-exit, la gcc programa en su lugar
regresa con el error numéricamente más alto producido por cualquier fase que devuelve un error
indicación. Las interfaces de C, C ++ y Fortran devuelven 4 si hay un error interno del compilador
se encuentra

Si solo desea algunas de las etapas de compilación, puede usar -x (o sufijos de nombre de archivo)
para contar gcc por dónde empezar y una de las opciones -c, -So -E para decir donde gcc es
parada. Tenga en cuenta que algunas combinaciones (por ejemplo, -x salida cpp -E) instruir gcc que hacer
nada en absoluto.

-c Compile o ensamble los archivos fuente, pero no los vincule. La etapa de vinculación simplemente es
no hecho. El resultado final tiene la forma de un archivo de objeto para cada archivo de origen.

De forma predeterminada, el nombre del archivo de objeto para un archivo de origen se crea reemplazando el sufijo .c,
.i, .s, etc., con .o.

Los archivos de entrada no reconocidos, que no requieren compilación o ensamblaje, se ignoran.

-S Deténgase después de la etapa de compilación propiamente dicha; no montar. La salida está en el
forma de un archivo de código ensamblador para cada archivo de entrada no ensamblador especificado.

De forma predeterminada, el nombre del archivo ensamblador para un archivo fuente se crea reemplazando el sufijo
.c, .i, etc., con .s.

Los archivos de entrada que no requieren compilación se ignoran.

-E Deténgase después de la etapa de preprocesamiento; no ejecute el compilador correctamente. La salida está en
la forma de código fuente preprocesado, que se envía a la salida estándar.

Los archivos de entrada que no requieren procesamiento previo se ignoran.

-o presentar
Colocar salida en archivo presentar. Esto se aplica a cualquier tipo de salida que se esté produciendo,
ya sea un archivo ejecutable, un archivo de objeto, un archivo ensamblador o C preprocesado
código.

If -o no se especifica, el valor predeterminado es poner un archivo ejecutable en fuera, el objeto
se declara en fuente.sufijo in fuente.o, su archivo ensamblador en fuentes, un precompilado
archivo de encabezado en fuente.sufijo.gch, y toda la fuente C preprocesada en salida estándar.

-v Imprima (en la salida de error estándar) los comandos ejecutados para ejecutar las etapas de
Compilacion. También imprima el número de versión del programa controlador del compilador y del
preprocesador y el compilador propiamente dicho.

- ###
Me gusta -v excepto que los comandos no se ejecutan y los argumentos se citan a menos que
contener solo caracteres alfanuméricos o "./-_". Esto es útil para scripts de shell para
capturar las líneas de comando generadas por el controlador.

-tubo
Utilice canalizaciones en lugar de archivos temporales para la comunicación entre las distintas etapas de
Compilacion. Esto no funciona en algunos sistemas donde el ensamblador no puede leer
de una pipa; pero el ensamblador GNU no tiene problemas.

--ayuda
Imprima (en la salida estándar) una descripción de las opciones de la línea de comandos comprendidas por
gcc. Si el -v La opción también se especifica entonces --ayuda también se transmite a los diversos
procesos invocados por gcc, para que puedan mostrar las opciones de la línea de comandos que
aceptar. Si el -Wextra También se ha especificado la opción (antes de la --ayuda opción),
entonces las opciones de la línea de comandos que no tienen documentación asociada con ellas también son
desplegado.

--objetivo-ayuda
Imprima (en la salida estándar) una descripción de las opciones de línea de comandos específicas del destino
para cada herramienta. Para algunos objetivos, también se puede obtener información adicional específica del objetivo.
impreso.

--help = {clase|[^]índice}[, ...]
Imprima (en la salida estándar) una descripción de las opciones de la línea de comandos comprendidas por
el compilador que encaja en todas las clases y calificadores especificados. Estos son los
clases apoyadas:

optimizadores
Muestra todas las opciones de optimización admitidas por el compilador.

advertencias
Muestra todas las opciones que controlan los mensajes de advertencia producidos por el compilador.

dirigidos
Muestra opciones específicas de destino. A diferencia del --objetivo-ayuda opción sin embargo, objetivo-
no se muestran las opciones específicas del enlazador y del ensamblador. Esto es porque
esas herramientas actualmente no son compatibles con la extensión --help = sintaxis.

params
Visualice los valores reconocidos por el --param .

idioma
Mostrar las opciones admitidas para idioma, Donde idioma es el nombre de uno de
los idiomas admitidos en esta versión de GCC.

común
Muestra las opciones que son comunes a todos los idiomas.

Estos son los calificadores admitidos:

indocumentados
Muestra solo las opciones que no están documentadas.

se unió a
Mostrar opciones tomando un argumento que aparece después de un signo igual en el mismo
fragmento de texto continuo, como: --help = objetivo.

separado
Mostrar opciones tomando un argumento que aparece como una palabra separada después de la
opción original, como: -o archivo de salida.

Así, por ejemplo, para mostrar todos los conmutadores específicos de destino no documentados admitidos por
el compilador, use:

--help = target, indocumentado

El sentido de un calificador se puede invertir prefijándolo con el ^ personaje, así que para
ejemplo para mostrar todas las opciones de advertencia binaria (es decir, las que están activadas o desactivadas
y que no toman un argumento) que tienen una descripción, use:

--help = advertencias, ^ unido, ^ indocumentado

El argumento para --help = no debe consistir únicamente en calificadores invertidos.

Es posible combinar varias clases, aunque esto generalmente restringe la salida, por lo que
mucho que no hay nada que mostrar. Un caso en el que funciona, sin embargo, es cuando
una de las clases es dirigidos. Por ejemplo, para mostrar todos los objetivos específicos
opciones de optimización, utilice:

--help = target, optimizadores

La --help = La opción se puede repetir en la línea de comando. Cada uso sucesivo muestra
su clase de opciones solicitada, omitiendo las que ya se han mostrado.

Si -Q La opción aparece en la línea de comando antes de la --help = opción, entonces la
texto descriptivo mostrado por --help = está cambiado. En lugar de describir lo que se muestra
opciones, se da una indicación de si la opción está habilitada, deshabilitada o configurada
a un valor específico (asumiendo que el compilador sabe esto en el punto donde el
--help = se utiliza la opción).

Aquí hay un ejemplo truncado del puerto ARM de gcc:

% gcc -Q -mabi = 2 --help = target -c
Las siguientes opciones son específicas del objetivo:
-mabi = 2
-mabort-on-noreturn [deshabilitado]
-mapcs [deshabilitado]

La salida es sensible a los efectos de las opciones de línea de comandos anteriores, por lo que para
ejemplo, es posible averiguar qué optimizaciones están habilitadas en -O2 mediante el uso:

-Q -O2 --help = optimizadores

Alternativamente, puede descubrir qué optimizaciones binarias están habilitadas por -O3 mediante el uso:

gcc -c -Q -O3 --help = optimizadores> / tmp / O3-opts
gcc -c -Q -O2 --help = optimizadores> / tmp / O2-opts
diff / tmp / O2-opts / tmp / O3-opts | grep habilitado

-no-prefijos-canónicos
No expanda ningún enlace simbólico, resuelva las referencias a /../ or /./o hacer el camino
absoluto al generar un prefijo relativo.

--versión
Muestra el número de versión y los derechos de autor del GCC invocado.

-envoltura
Invoque todos los subcomandos de un programa contenedor. El nombre del programa contenedor y
sus parámetros se pasan como una lista separada por comas.

gcc -c tc -wrapper gdb, - argumentos

Esto invoca todos los subprogramas de gcc bajo gdb --argumentos, de ahí la invocación de cc1 is
gdb --argumentos cc1 ....

-fplugin =nombre .asi que
Cargue el código del complemento en el archivo nombre .so, se supone que es un objeto compartido para ser abierto por
el compilador. El nombre base del archivo de objeto compartido se utiliza para identificar el complemento.
a los efectos del análisis sintáctico de argumentos (consulte -fplugin-arg-nombre -clave=propuesta de debajo). Cada
El complemento debe definir las funciones de devolución de llamada especificadas en la API de complementos.

-fplugin-arg-nombre -clave=propuesta de
Defina un argumento llamado clave con un valor de propuesta de para el complemento llamado nombre .

-fdump-ada-spec[-Delgado]
Para archivos fuente e include de C y C ++, genere las especificaciones de Ada correspondientes.

-fada-spec-parent =unidad
En conjunción con -fdump-ada-spec[-Delgado] arriba, genera especificaciones de Ada como unidades secundarias de
con el futuro bebé unidad.

-fdump-go-spec =presentar
Para archivos de entrada en cualquier idioma, genere las declaraciones de Go correspondientes en presentar. Esto
genera declaraciones Go "const", "type", "var" y "func" que pueden ser una forma útil
para comenzar a escribir una interfaz de Go en un código escrito en otro idioma.

@presentar
Leer las opciones de la línea de comandos de presentar. Las opciones leídas se insertan en lugar del
originales @presentar opción. Si presentar no existe, o no se puede leer, entonces la opción
se tratará literalmente y no se eliminará.

Las opciones en presentar están separados por espacios en blanco. Se puede incluir un carácter de espacio en blanco
en una opción rodeando toda la opción entre comillas simples o dobles. Alguna
El carácter (incluida una barra invertida) se puede incluir anteponiendo el carácter que se
incluido con una barra invertida. los presentar puede contener en sí mismo @presentar opciones; alguna
dichas opciones se procesarán de forma recursiva.

Compilación C + + Programas
Los archivos fuente de C ++ usan convencionalmente uno de los sufijos .C, . CC, .cpp, .CPP, .c ++, .cpo
.cxx; Los archivos de encabezado de C ++ a menudo usan .S.S, .hpp, .H, o (para código de plantilla compartido) .tcc; y
archivos C ++ preprocesados ​​usan el sufijo .ii. GCC reconoce archivos con estos nombres y
los compila como programas C ++ incluso si llama al compilador de la misma manera que para compilar
Programas C (generalmente con el nombre gcc).

Sin embargo, el uso de gcc no agrega la biblioteca C ++. g ++ es un programa que llama a GCC y
especifica automáticamente la vinculación con la biblioteca C ++. Trata .c, .h y .i archivos como
Archivos fuente C ++ en lugar de archivos fuente C a menos que -x se utiliza. Este programa también es útil
al precompilar un archivo de encabezado C con un .h extensión para su uso en compilaciones de C ++. Sobre
muchos sistemas, g ++ también se instala con el nombre c ++.

Cuando compila programas en C ++, puede especificar muchas de las mismas opciones de línea de comandos que
que utiliza para compilar programas en cualquier idioma; u opciones de línea de comandos significativas para C
e idiomas relacionados; u opciones que son significativas solo para programas C ++.

Opciones Controlador C Dialecto
Las siguientes opciones controlan el dialecto de C (o lenguajes derivados de C, como C ++,
Objective-C y Objective-C ++) que el compilador acepta:

-ansi
En modo C, esto es equivalente a -std = c90. En modo C ++, es equivalente a
-std = c ++ 98.

Esto desactiva ciertas funciones de GCC que son incompatibles con ISO C90 (cuando
compilar código C), o de C ++ estándar (al compilar código C ++), como "asm" y
"typeof" palabras clave y macros predefinidas como "unix" y "vax" que identifican
tipo de sistema que está utilizando. También habilita el ISO indeseable y poco utilizado
característica de trígrafo. Para el compilador de C, deshabilita el reconocimiento del estilo C ++ //
comentarios, así como la palabra clave "en línea".

Las palabras clave alternativas "__asm__", "__extension__", "__inline__" y "__typeof__"
seguir trabajando a pesar de -ansi. No querrás usarlos en un programa ISO C,
por supuesto, pero es útil colocarlos en archivos de encabezado que pueden incluirse en
compilaciones hechas con -ansi. Macros predefinidas alternativas como "__unix__" y
"__vax__" también están disponibles, con o sin -ansi.

La -ansi Esta opción no provoca el rechazo gratuito de programas que no son ISO. Para
menciona eso, -Wpedante se requiere además de -ansi.

La macro "__STRICT_ANSI__" está predefinida cuando el -ansi se utiliza la opción. Algún encabezado
Los archivos pueden notar esta macro y abstenerse de declarar ciertas funciones o definir
ciertas macros que el estándar ISO no requiere; esto es para evitar interferir
con cualquier programa que pueda usar estos nombres para otras cosas.

Funciones que normalmente están integradas pero que no tienen semántica definida por ISO C (como
como "alloca" y "ffs") no son funciones integradas cuando -ansi se utiliza.

-std =
Determine el estándar del idioma. Actualmente, esta opción solo se admite cuando
compilando C o C ++.

El compilador puede aceptar varios estándares básicos, como c90 or c ++ 98y dialectos GNU
de esos estándares, como gnu90 or gnu ++ 98. Cuando se especifica un estándar base, el
El compilador acepta todos los programas que siguen ese estándar más los que usan extensiones GNU
que no lo contradigan. Por ejemplo, -std = c90 desactiva ciertas funciones de GCC
que son incompatibles con ISO C90, como las palabras clave "asm" y "typeof", pero no
otras extensiones GNU que no tienen significado en ISO C90, como omitir el
término medio de una expresión "?:". Por otro lado, cuando un dialecto GNU de un estándar
se especifica, todas las funciones admitidas por el compilador están habilitadas, incluso cuando esas
Las características cambian el significado del estándar básico. Como resultado, algunos
los programas pueden ser rechazados. El estándar particular es utilizado por -Wpedante identificar
qué características son extensiones GNU dada esa versión del estándar. Por ejemplo
-std = gnu90 -Wpedante advierte sobre el estilo C ++ // comentarios, mientras -std = gnu99 -Wpedante
no.

Se debe proporcionar un valor para esta opción; los valores posibles son

c90
c89
iso9899: 1990
Admite todos los programas ISO C90 (ciertas extensiones GNU que entran en conflicto con ISO C90
se desactivan). Igual que -ansi para el código C.

iso9899: 199409
ISO C90 modificada en la enmienda 1.

c99
c9x
iso9899: 1999
iso9899: 199x
ISO C99. Este estándar es sustancialmente completamente compatible, modulo bugs y
Problemas de punto flotante (principalmente, pero no completamente relacionados con las características opcionales del C99
de los Anexos F y G). Verhttp://gcc.gnu.org/c99status.html> para más
información. Los nombres c9x y iso9899: 199x están en desuso.

c11
c1x
iso9899: 2011
ISO C11, la revisión de 2011 de la norma ISO C. Este estándar es sustancialmente
completamente compatible, errores de módulo, problemas de punto flotante (principalmente, pero no del todo
relacionados con las características opcionales C11 de los Anexos F y G) y los Anexos opcionales K
(Interfaces de verificación de límites) y L (Analizabilidad). El nombre c1x es obsoleto.

gnu90
gnu89
Dialecto GNU de ISO C90 (incluidas algunas características de C99).

gnu99
gnu9x
Dialecto GNU de ISO C99. El nombre gnu9x es obsoleto.

gnu11
gnu1x
Dialecto GNU de ISO C11. Este es el valor predeterminado para el código C. El nombre gnu1x is
obsoleto.

c ++ 98
c ++ 03
La norma ISO C ++ de 1998 más la corrección técnica de 2003 y algunas
informes de defectos. Igual que -ansi para código C ++.

gnu ++ 98
gnu ++ 03
Dialecto GNU de -std = c ++ 98. Este es el valor predeterminado para el código C ++.

c ++ 11
c ++ 0x
El estándar 2011 ISO C ++ más enmiendas. El nombre c ++ 0x es obsoleto.

gnu ++ 11
gnu ++ 0x
Dialecto GNU de -std = c ++ 11. El nombre gnu ++ 0x es obsoleto.

c ++ 14
c ++ 1 año
El estándar 2014 ISO C ++ más enmiendas. El nombre c ++ 1 año es obsoleto.

gnu ++ 14
gnu ++ 1y
Dialecto GNU de -std = c ++ 14. El nombre gnu ++ 1y es obsoleto.

c ++ 1z
La próxima revisión del estándar ISO C ++, tentativamente planificada para 2017. Soporte
es altamente experimental, y casi con certeza cambiará de formas incompatibles en
lanzamientos futuros.

gnu ++ 1z
Dialecto GNU de -std = c ++ 1z. El soporte es altamente experimental y casi
ciertamente cambiará de formas incompatibles en futuras versiones.

-fgnu89-en línea
La opción -fgnu89-en línea le dice a GCC que use la semántica tradicional de GNU para "en línea"
funciona cuando está en modo C99.

Usar esta opción equivale aproximadamente a agregar el atributo de función "gnu_inline"
a todas las funciones en línea.

La opción -fno-gnu89-en línea le dice explícitamente a GCC que use la semántica C99 para
"en línea" cuando está en modo C99 o gnu99 (es decir, especifica el comportamiento predeterminado). Esta
La opción no es compatible con -std = c90 or -std = gnu90 modo.

Se pueden utilizar las macros del preprocesador "__GNUC_GNU_INLINE__" y "__GNUC_STDC_INLINE__"
para comprobar qué semántica está en vigor para las funciones "en línea".

-información auxiliar nombre de archivo
Salida al nombre de archivo dado, declaraciones prototipadas para todas las funciones declaradas y / o
definidos en una unidad de traducción, incluidos los de los archivos de encabezado. Esta opcion es
silenciosamente ignorado en cualquier idioma que no sea C.

Además de las declaraciones, el archivo indica, en comentarios, el origen de cada declaración.
(archivo fuente y línea), si la declaración fue implícita, prototipada o
sin prototipoI, N para nuevo o O para antiguo, respectivamente, en el primer carácter después de
el número de línea y los dos puntos), y si proviene de una declaración o una definición
(C or F, respectivamente, en el siguiente carácter). En el caso de la función
definiciones, también se incluye una lista de argumentos al estilo K & R seguida de sus declaraciones.
siempre, comentarios internos, después de la declaración.

-fallow-funciones-variadas-sin-parámetros
Acepta funciones variadas sin parámetros con nombre.

Aunque es posible definir tal función, esto no es muy útil ya que es
no es posible leer los argumentos. Esto solo es compatible con C ya que esta construcción es
permitido por C ++.

-fno-asmo
No reconozca "asm", "inline" o "typeof" como palabras clave, por lo que el código puede utilizar estas
palabras como identificadores. Puede utilizar las palabras clave "__asm__", "__inline__" y
"__typeof__" en su lugar. -ansi implica -fno-asmo.

En C ++, este modificador solo afecta a la palabra clave "typeof", ya que "asm" e "inline" son
palabras clave estándar. Es posible que desee utilizar el -fno-gnu-palabras clave bandera en su lugar, que tiene
el mismo efecto. En el modo C99 (-std = c99 or -std = gnu99), este cambio solo afecta al
"asm" y "typeof" palabras clave, ya que "en línea" es una palabra clave estándar en ISO C99.

-fno-incorporado
-fno-incorporado-función
No reconozco las funciones integradas que no comienzan con __incorporado_ como prefijo.

GCC normalmente genera un código especial para manejar ciertas funciones integradas más
eficientemente; por ejemplo, las llamadas a "alloca" pueden convertirse en instrucciones únicas que
ajusta la pila directamente, y las llamadas a "memcpy" pueden convertirse en bucles de copia en línea. los
El código resultante es a menudo más pequeño y más rápido, pero dado que la función no llama
ya aparecen como tales, no puede establecer un punto de interrupción en esas llamadas, ni puede cambiar
el comportamiento de las funciones mediante la vinculación con una biblioteca diferente. Además, cuando
una función es reconocida como una función incorporada, GCC puede usar información sobre esa
función para advertir sobre problemas con las llamadas a esa función, o para generar más
código eficiente, incluso si el código resultante todavía contiene llamadas a esa función. Para
ejemplo, las advertencias se dan con -Formato para llamadas incorrectas a "printf" cuando "printf" es
Se sabe que built in y "strlen" no modifican la memoria global.

Con la -fno-incorporado-función opción solo la función incorporada función está desactivado.
función no debe comenzar con __incorporado_. Si se nombra una función que no está incorporada
en esta versión de GCC, esta opción se ignora. No hay correspondencia
-f incorporado-función opción; si desea habilitar funciones integradas de forma selectiva cuando
usando -fno-incorporado or independiente, puede definir macros como:

#define abs (n) __builtin_abs ((n))
#define strcpy (d, s) __builtin_strcpy ((d), (s))

-acogido
Afirme que la compilación tiene como objetivo un entorno alojado. Esto implica -fintegrado. La
El entorno alojado es aquel en el que está disponible toda la biblioteca estándar, y en
cuyo "main" tiene un tipo de retorno de "int". Los ejemplos son casi todo excepto un
núcleo. Esto es equivalente a -fno-independiente.

independiente
Afirme que la compilación tiene como objetivo un entorno independiente. Esto implica
-fno-incorporado. Un entorno independiente es aquel en el que la biblioteca estándar no puede
existen, y el inicio del programa puede no estar necesariamente en "principal". El ejemplo mas obvio
es un kernel del sistema operativo. Esto es equivalente a -fno-alojado.

-fopenacc
Habilite el manejo de las directivas OpenACC "#pragma acc" en C / C ++ y "! $ Acc" en Fortran.
Cuándo -fopenacc se especifica, el compilador genera código acelerado de acuerdo con el
Interfaz de programación de aplicaciones OpenACC v2.0http://www.openacc.org/>. Esta opción
implica -philoy, por lo tanto, solo se admite en objetivos que tienen soporte para
-philo.

Tenga en cuenta que esta es una función experimental, incompleta y sujeta a cambios en el futuro.
versiones de GCC. Verhttps://gcc.gnu.org/wiki/OpenACC> para obtener más información.

-fopenmp
Habilite el manejo de las directivas OpenMP "#pragma omp" en C / C ++ y "! $ Omp" en Fortran.
Cuándo -fopenmp se especifica, el compilador genera código paralelo de acuerdo con el
Interfaz del programa de aplicación OpenMP v4.0http://www.openmp.org/>. Esta opción
implica -philoy, por lo tanto, solo se admite en objetivos que tienen soporte para
-philo. -fopenmp implica -fopenmp-simd.

-fopenmp-simd
Habilite el manejo de las directivas SIMD de OpenMP con "#pragma omp" en C / C ++ y "! $ Omp" en
Fortran. Se ignoran otras directivas de OpenMP.

-fcilkplus
Habilite el uso de las funciones de extensión de lenguaje Cilk Plus para C / C ++. Cuando la opcion
-fcilkplus está especificado, habilite el uso de las funciones de extensión de Cilk Plus Language
para C / C ++. La implementación actual sigue la versión 1.2 de ABI. Esto es un
característica experimental que solo está parcialmente completa y cuya interfaz puede cambiar
en futuras versiones de GCC a medida que cambie la especificación oficial. Actualmente, todos
funciones pero se han implementado "_Cilk_for".

-fgnu-tm
Cuando la opcion -fgnu-tm se especifica, el compilador genera código para Linux
variante del documento de especificación ABI de memoria transaccional actual de Intel (Revisión
1.1, 6 de mayo de 2009). Esta es una función experimental cuya interfaz puede cambiar en
futuras versiones de GCC, a medida que cambia la especificación oficial. Tenga en cuenta que no
todas las arquitecturas son compatibles con esta función.

Para obtener más información sobre el soporte de GCC para la memoria transaccional,

Tenga en cuenta que la función de memoria transaccional no es compatible con excepciones sin llamadas
(-fnon-call-excepciones).

-fms-extensiones
Acepte algunas construcciones no estándar utilizadas en los archivos de encabezado de Microsoft.

En el código C ++, esto permite que los nombres de los miembros en las estructuras sean similares a los tipos anteriores.
declaraciones.

typedef int UOW;
estructura ABC {
UOW UOW;
};

Algunos casos de campos sin nombre en estructuras y sindicatos solo se aceptan con este
.

Tenga en cuenta que esta opción está desactivada para todos los destinos excepto para los destinos x86 que usan ms-abi.

-fplan9-extensiones
Acepte algunas construcciones no estándar utilizadas en el código de Plan 9.

Esto permite -fms-extensiones, permite pasar punteros a estructuras con anónimos
campos a funciones que esperan punteros a elementos del tipo del campo, y
permite hacer referencia a campos anónimos declarados mediante typedef. Esto es sólo
compatible con C, no C ++.

-trigrafos
Admite trígrafos ISO C. los -ansi opción (y -estándar opciones para ISO C estricto
conformidad) implica -trigrafos.

-tradicional
-cpp-tradicional
Anteriormente, estas opciones hacían que GCC intentara emular un compilador de C preestándar.
Ahora solo son compatibles con el -E cambiar. El preprocesador sigue admitiendo
un modo preestándar. Consulte el manual GNU CPP para obtener más detalles.

-fcond-desajuste
Permita expresiones condicionales con tipos no coincidentes en el segundo y tercer argumento.
El valor de tal expresión es nulo. Esta opción no es compatible con C ++.

-conversiones-de-vector-lino
Permitir conversiones implícitas entre vectores con diferente número de elementos y / o
tipos de elementos incompatibles. Esta opción no debe usarse para código nuevo.

-funsigned-char
Deje que el tipo "char" esté sin firmar, como "unsigned char".

Cada tipo de máquina tiene un valor predeterminado para lo que debería ser "char". Es como
"carácter sin firmar" por defecto o como "carácter firmado" por defecto.

Idealmente, un programa portátil debería usar siempre "caracteres firmados" o "caracteres sin firmar" cuando
depende de la firma de un objeto. Pero muchos programas se han escrito para usar
"char" simple y esperar que esté firmado, o esperar que no esté firmado, dependiendo de la
máquinas para las que fueron escritas. Esta opción, y su inversa, le permiten hacer tal
El programa funciona con el valor predeterminado opuesto.

El tipo "char" es siempre un tipo distinto de cada uno de los "caracteres firmados" o "sin firmar
char ", aunque su comportamiento es siempre como uno de esos dos.

-fsigned-char
Deje que se firme el tipo "char", como "char firmado".

Tenga en cuenta que esto es equivalente a -fno-car-sin-firmar, que es la forma negativa de
-funsigned-char. Asimismo, la opción -fno-firmado-char es equivalente a
-funsigned-char.

-fcampos de bits firmados
-campos de bits divertidos
-fno-campos-de-bits-firmados
-fno-campos de bits sin firmar
Estas opciones controlan si un campo de bits está firmado o sin firmar, cuando la declaración
no utiliza "firmado" ni "sin firmar". De forma predeterminada, dicho campo de bits está firmado,
porque esto es consistente: los tipos enteros básicos como "int" son tipos con signo.

Opciones Controlador C + + Dialecto
Esta sección describe las opciones de la línea de comandos que solo son significativas para los programas C ++.
También puede utilizar la mayoría de las opciones del compilador GNU independientemente del idioma de su programa.
está en. Por ejemplo, puede compilar un archivo primeraClase.C Me gusta esto:

g ++ -g -frepo -O -c primera clase.C

En este ejemplo, solo -frepo es una opción pensada solo para programas C ++; puedes usar el
otras opciones con cualquier idioma compatible con GCC.

Aquí hay una lista de opciones que son , solamente para compilar programas C ++:

-fabi-version =n
Usar versión n de la ABI de C ++. El valor predeterminado es la versión 0.

La versión 0 se refiere a la versión que más se ajusta a la especificación ABI de C ++.
Por lo tanto, la ABI obtenida con la versión 0 cambiará en diferentes versiones de G ++
ya que se corrigen los errores de ABI.

La versión 1 es la versión de C ++ ABI que apareció por primera vez en G ++ 3.2.

La versión 2 es la versión de C ++ ABI que apareció por primera vez en G ++ 3.4, y fue la
predeterminado a través de G ++ 4.9.

La versión 3 corrige un error al manipular una dirección constante como argumento de plantilla.

La versión 4, que apareció por primera vez en G ++ 4.5, implementa una manipulación estándar para vectores
tipos.

La versión 5, que apareció por primera vez en G ++ 4.6, corrige la alteración del atributo
const / volatile en tipos de puntero de función, decltype de un decl simple y uso de un
parámetro de función en la declaración de otro parámetro.

La versión 6, que apareció por primera vez en G ++ 4.7, corrige el comportamiento de promoción de C ++ 11
enumeraciones de ámbito y la manipulación de paquetes de argumentos de plantilla, const / static_cast, prefix ++
y -, y una función de ámbito de clase utilizada como argumento de plantilla.

Versión 7, que apareció por primera vez en G ++ 4.8, que trata nullptr_t como un tipo incorporado
y corrige la alteración de lambdas en el alcance del argumento predeterminado.

La versión 8, que apareció por primera vez en G ++ 4.9, corrige el comportamiento de sustitución de
tipos de función con calificadores de función-cv.

Vea también -Wabi.

-fabi-compat-version =n
En los destinos que admiten alias fuertes, G ++ soluciona los cambios mediante la creación de
un alias con el nombre mutilado correcto al definir un símbolo con un nombre incorrecto
nombre destrozado. Este modificador especifica qué versión de ABI usar para el alias.

Con -versión-fabi = 0 (el valor predeterminado), este valor predeterminado es 2. Si otra versión de ABI es
seleccionado explícitamente, este valor predeterminado es 0.

La versión de compatibilidad también la establece -Wabi =n.

-fno-control-de-acceso
Desactive todas las comprobaciones de acceso. Este modificador es principalmente útil para solucionar errores en
el código de control de acceso.

-fcheck-nuevo
Compruebe que el puntero devuelto por "operator new" no sea nulo antes de intentar
modificar el almacenamiento asignado. Esta comprobación es normalmente innecesaria porque C ++
estándar especifica que "operator new" solo devuelve 0 si se declara "throw ()", en
cuyo caso el compilador siempre verifica el valor de retorno incluso sin esta opción. En
todos los demás casos, cuando "operador nuevo" tiene una especificación de excepción no vacía, memoria
el agotamiento se indica lanzando "std :: bad_alloc". Ver también nueva (no tirar).

-fconstexpr-depth =n
Establezca la profundidad máxima de evaluación anidada para las funciones constexpr de C ++ 11 en n. Un limite
es necesario para detectar la recursividad sin fin durante la evaluación de expresión constante. los
el mínimo especificado por el estándar es 512.

-fdeduce-lista-init
Habilite la deducción de un parámetro de tipo de plantilla como "std :: initializer_list" de una llave-
lista de inicializadores adjunta, es decir

plantilla avance automático (T t) -> decltype (realfn (t))
{
volver realfn (t);
}

vacío f ()
{
adelante ({1,2}); // reenvío de llamadas >
}

Esta deducción se implementó como una posible extensión a la propuesta originalmente
semántica para el estándar C ++ 11, pero no era parte del estándar final, por lo que es
desactivado por defecto. Esta opción está obsoleta y puede eliminarse en el futuro.
versión de G ++.

-inyección-amiga
Inyecte funciones de amigos en el espacio de nombres adjunto, de modo que sean visibles fuera
el alcance de la clase en la que se declaran. Se documentaron las funciones de amigo
para trabajar de esta manera en el antiguo Manual de referencia de C ++ anotado. Sin embargo, en ISO C ++ a
La función de amigo que no está declarada en un ámbito adjunto solo se puede encontrar usando
búsqueda dependiente del argumento. GCC adopta el comportamiento estándar de forma predeterminada.

Esta opción es por compatibilidad y puede eliminarse en una versión futura de G ++.

-fno-elide-constructores
El estándar C ++ permite que una implementación omita la creación de un temporal que solo
utilizado para inicializar otro objeto del mismo tipo. Especificar esta opción deshabilita
esa optimización, y obliga a G ++ a llamar al constructor de copia en todos los casos.

-fno-enforce-eh-especificaciones
No genere código para verificar la violación de las especificaciones de excepción en tiempo de ejecución.
Esta opción viola el estándar C ++, pero puede ser útil para reducir el tamaño del código en
compilaciones de producción, muy parecido a definir "NDEBUG". Esto no da código de usuario.
permiso para lanzar excepciones en violación de las especificaciones de excepción; los
El compilador aún optimiza en función de las especificaciones, por lo que arroja un inesperado
la excepción da como resultado un comportamiento indefinido en tiempo de ejecución.

-fextern-tls-init
-fno-externo-tls-init
Los estándares C ++ 11 y OpenMP permiten que las variables "thread_local" y "threadprivate"
tener inicialización dinámica (tiempo de ejecución). Para respaldar esto, cualquier uso de dicha variable
pasa por una función contenedora que realiza cualquier inicialización necesaria. Cuando el
El uso y la definición de la variable están en la misma unidad de traducción, esta sobrecarga puede
optimizarse, pero cuando el uso está en una unidad de traducción diferente, hay
sobrecarga significativa incluso si la variable en realidad no necesita dinámica
inicialización. Si el programador puede estar seguro de que ningún uso de la variable en un
La definición de TU debe desencadenar la inicialización dinámica (ya sea porque la variable es
inicializado estáticamente, o se ejecutará un uso de la variable en la TU definitoria
antes de cualquier uso en otra TU), pueden evitar esta sobrecarga con el
-fno-externo-tls-init .

En los destinos que admiten alias de símbolos, el valor predeterminado es -fextern-tls-init. En objetivos
que no admiten alias de símbolos, el valor predeterminado es -fno-externo-tls-init.

-fpara-alcance
-fno-por-alcance
If -fpara-alcance se especifica, el alcance de las variables declaradas en un instrucción-for-init
está limitado al bucle "for" en sí, según lo especificado por el estándar C ++. Si
-fno-por-alcance se especifica, el alcance de las variables declaradas en un instrucción-for-init
se extiende hasta el final del ámbito adjunto, como era el caso en las versiones antiguas de G ++, y
otras implementaciones (tradicionales) de C ++.

Si no se da ninguna bandera, el valor predeterminado es seguir el estándar, pero permitir y dar
una advertencia para el código de estilo antiguo que de otro modo no sería válido o tendría diferentes
comportamiento.

-fno-gnu-palabras clave
No reconozca "typeof" como palabra clave, por lo que el código puede usar esta palabra como una
identificador. En su lugar, puede utilizar la palabra clave "__typeof__". -ansi implica
-fno-gnu-palabras clave.

-fno-plantillas-implícitas
Nunca emita código para plantillas no en línea que se instancian implícitamente (es decir, por
usar); solo emite código para instancias explícitas.

-fno-implícito-plantillas-en-línea
Tampoco emita código para instancias implícitas de plantillas en línea. El valor por defecto
es manejar inlines de manera diferente para que se compile con y sin necesidad de optimización
el mismo conjunto de instancias explícitas.

-fno-implemente-en-líneas
Para ahorrar espacio, no emita copias fuera de línea de funciones en línea controladas por
"Implementación de #pragma". Esto provoca errores en el vinculador si estas funciones no se
en línea en todos los lugares donde se les llame.

-fms-extensiones
Deshabilite las advertencias de Wpedantic sobre construcciones utilizadas en MFC, como int implícita y
obtener un puntero a la función miembro a través de una sintaxis no estándar.

-fno-nonansi-incorporados
Deshabilite las declaraciones integradas de funciones que no son exigidas por ANSI / ISO C.Estas
incluir "ffs", "alloca", "_exit", "index", "bzero", "conjf" y otros relacionados
funciones.

-fnothrow-opt
Trate una especificación de excepción "throw ()" como si fuera una especificación "noexcept" para
reducir o eliminar la sobrecarga del tamaño del texto en relación con una función sin excepción
especificación. Si la función tiene variables locales de tipos con no trivial
destructores, la especificación de la excepción en realidad hace que la función sea más pequeña porque
las limpiezas de EH para esas variables se pueden optimizar. El efecto semántico es
que una excepción arrojada fuera de una función con tal especificación de excepción
da como resultado una llamada a "terminar" en lugar de "inesperado".

-fno-nombres-de-operador
No trate las palabras clave del nombre del operador "y", "bitand", "bitor", "compl", "not", "o"
y "xor" como sinónimos como palabras clave.

-fno-opcional-diags
Deshabilite los diagnósticos que el estándar dice que un compilador no necesita emitir.
Actualmente, el único diagnóstico de este tipo emitido por G ++ es el de un nombre que tiene
múltiples significados dentro de una clase.

-fpermisivo
Reduzca algunos diagnósticos sobre código no conforme de errores a advertencias. Por lo tanto,
usando -fpermisivo permite que se compile algún código no conforme.

-fno-bonitas-plantillas
Cuando un mensaje de error se refiere a una especialización de una plantilla de función, el compilador
normalmente imprime la firma de la plantilla seguida de los argumentos de la plantilla y
cualquier typedefs o typenames en la firma (por ejemplo, "void f (T) [with T = int]" en lugar
que "void f (int)") para que quede claro qué plantilla está involucrada. Cuando un error
mensaje se refiere a una especialización de una plantilla de clase, el compilador omite cualquier
argumentos de plantilla que coinciden con los argumentos de plantilla predeterminados para esa plantilla. Si
Cualquiera de estos comportamientos dificulta la comprensión del mensaje de error en lugar de
más fácil, puedes usar -fno-bonitas-plantillas para deshabilitarlos.

-frepo
Habilite la creación de instancias de plantilla automática en el momento del enlace. Esta opción también implica
-fno-plantillas-implícitas.

-fno-rtti
Deshabilite la generación de información sobre cada clase con funciones virtuales para su uso por
las características de identificación de tipo en tiempo de ejecución de C ++ ("dynamic_cast" y "typeid"). Si tu
no use esas partes del idioma, puede ahorrar algo de espacio usando esta bandera.
Tenga en cuenta que el manejo de excepciones usa la misma información, pero G ++ la genera como
necesario. El operador "dynamic_cast" todavía se puede usar para conversiones que no requieren
información de tipo en tiempo de ejecución, es decir, se convierte en "void *" o en clases base inequívocas.

-fsized-desasignación
Habilite las declaraciones globales integradas

operador vacío eliminar (void *, std :: size_t) noexcept;
operador nulo eliminar [] (void *, std :: size_t) noexcept;

como se introdujo en C ++ 14. Esto es útil para la desasignación de reemplazo definida por el usuario.
funciones que, por ejemplo, utilizan el tamaño del objeto para agilizar la desasignación.
Habilitado de forma predeterminada en -std = c ++ 14 y por encima. La bandera -Desasignación de tamaño advierte
sobre lugares que podrían querer agregar una definición.

-fstats
Emite estadísticas sobre el procesamiento de front-end al final de la compilación. Esta
Por lo general, la información solo es útil para el equipo de desarrollo de G ++.

-fstrict-enumeraciones
Permita que el compilador optimice utilizando el supuesto de que un valor de tipo enumerado
solo puede ser uno de los valores de la enumeración (como se define en el estándar C ++;
Básicamente, un valor que se puede representar en el número mínimo de bits necesarios para
representan a todos los enumeradores). Esta suposición puede no ser válida si el programa utiliza
una conversión para convertir un valor entero arbitrario al tipo enumerado.

-ftemplate-backtrace-limit =n
Establecer el número máximo de notas de creación de instancias de plantilla para una sola advertencia o error
a n. El valor predeterminado es 10.

-ftemplate-depth =n
Establezca la profundidad máxima de creación de instancias para las clases de plantilla en n. Un límite en el
La profundidad de creación de instancias de la plantilla es necesaria para detectar un sinfín de recursiones durante la plantilla.
instanciación de clase. Los programas que cumplen con ANSI / ISO C ++ no deben depender de un
profundidad mayor que 17 (cambiado a 1024 en C ++ 11). El valor predeterminado es 900, ya que
El compilador puede quedarse sin espacio de pila antes de llegar a 1024 en algunas situaciones.

-fno-threadsafe-estática
No emita el código adicional para usar las rutinas especificadas en la ABI de C ++ para subprocesos
inicialización segura de estática local. Puede utilizar esta opción para reducir el tamaño del código
ligeramente en código que no necesita ser seguro para subprocesos.

-fusible-cxa-atexit
Registre destructores para objetos con duración de almacenamiento estático con "__cxa_atexit"
función en lugar de la función "atexit". Esta opción es necesaria para
manejo compatible con los estándares de destructores estáticos, pero solo funciona si su biblioteca C
admite "__cxa_atexit".

-fno-use-cxa-get-excepción-ptr
No utilice la rutina de tiempo de ejecución "__cxa_get_exception_ptr". Esto causa
"std :: uncaught_exception" es incorrecto, pero es necesario si la rutina de ejecución es
no está disponible.

-fvisibilidad-en-lineas-ocultas
Este modificador declara que el usuario no intenta comparar punteros con en línea
funciones o métodos donde las direcciones de las dos funciones se toman en diferentes
objetos compartidos.

El efecto de esto es que GCC puede, efectivamente, marcar métodos en línea con
"__attribute__ ((visibilidad (" oculto ")))" para que no aparezcan en la exportación
tabla de un DSO y no requieren una indirección PLT cuando se utilizan dentro del DSO.
Habilitar esta opción puede tener un efecto dramático en los tiempos de carga y enlace de un DSO, ya que
reduce enormemente el tamaño de la tabla de exportación dinámica cuando la biblioteca es pesada
uso de plantillas.

El comportamiento de este interruptor no es exactamente el mismo que marcar los métodos como ocultos
directamente, porque no afecta a las variables estáticas locales a la función o causa
el compilador para deducir que la función está definida en un solo objeto compartido.

Puede marcar un método como que tiene visibilidad explícitamente para negar el efecto de la
cambiar para ese método. Por ejemplo, si desea comparar punteros con un
método en línea particular, puede marcarlo como con visibilidad predeterminada. Marcando el
encerrar la clase con visibilidad explícita no tiene ningún efecto.

Los métodos en línea instanciados explícitamente no se ven afectados por esta opción, ya que su vinculación
de lo contrario, podría cruzar el límite de una biblioteca compartida.

-fvisibilidad-ms-compat
Esta bandera intenta utilizar la configuración de visibilidad para hacer que el modelo de enlace C ++ de GCC
compatible con el de Microsoft Visual Studio.

La bandera realiza estos cambios en el modelo de enlace de GCC:

1. Establece la visibilidad predeterminada en "oculta", como -fvisibilidad = oculta.

2. Los tipos, pero no sus miembros, no están ocultos de forma predeterminada.

3. La regla de una definición está relajada para los tipos sin visibilidad explícita.
especificaciones que se definen en más de un objeto compartido: esas declaraciones
están permitidos si están permitidos cuando no se utiliza esta opción.

En código nuevo es mejor usar -fvisibilidad = oculta y exportar esas clases que son
destinado a ser visible desde el exterior. Desafortunadamente, es posible que el código confíe,
quizás accidentalmente, en el comportamiento de Visual Studio.

Entre las consecuencias de estos cambios está que los miembros de datos estáticos del mismo tipo
con el mismo nombre pero definidos en diferentes objetos compartidos son diferentes, por lo que cambiar
uno no cambia al otro; y que punteros a miembros funcionales definidos en
diferentes objetos compartidos pueden no compararse igual. Cuando se da esta bandera, es un
violación de la ODR para definir tipos con el mismo nombre de manera diferente.

-fvtable-verify =[enfermedades de transmisión sexual|preinicio|ninguna]
Encienda (o apague, si usa -fvtable-verify = ninguno) la característica de seguridad que verifica en
tiempo de ejecución, para cada llamada virtual, que el puntero vtable a través del cual se realiza la llamada
made es válido para el tipo de objeto y no se ha dañado ni sobrescrito.
Si se detecta un puntero vtable no válido en tiempo de ejecución, se informa un error y
la ejecución del programa se detiene inmediatamente.

Esta opción hace que se creen estructuras de datos en tiempo de ejecución al iniciar el programa, que son
utilizado para verificar los punteros vtable. Las opciones enfermedades de transmisión sexual y preinicio controlar el
el momento en que se construyen estas estructuras de datos. En ambos casos, las estructuras de datos son
construido antes de que la ejecución llegue a "principal". Utilizando -fvtable-verify = std causa los datos
estructuras que se construirán después de que se hayan cargado e inicializado las bibliotecas compartidas.
-fvtable-verify = preinit hace que se creen antes de que las bibliotecas compartidas hayan sido
cargado e inicializado.

Si esta opción aparece varias veces en la línea de comando con diferentes valores
especificado, ninguna tiene la máxima prioridad sobre ambos enfermedades de transmisión sexual y preinicio; preinicio toma
prioridad sobre enfermedades de transmisión sexual.

-fvtv-depuración
Cuando se usa junto con -fvtable-verify = std or -fvtable-verify = preinitcausas
versiones de depuración de las funciones en tiempo de ejecución para que la función de verificación vtable sea
llamado. Esta bandera también hace que el compilador registre información sobre qué vtable
punteros que encuentra para cada clase. Esta información se escribe en un archivo llamado
vtv_set_ptr_data.log en el directorio nombrado por la variable de entorno VTV_LOGS_DIR
si eso está definido o el directorio de trabajo actual de lo contrario.

Nota: esta característica anexa datos al archivo de registro. Si desea un archivo de registro nuevo,
asegúrese de eliminar cualquier existente.

-fvtv-cuenta
Esta es una bandera de depuración. Cuando se usa junto con -fvtable-verify = std or
-fvtable-verify = preinit, esto hace que el compilador realice un seguimiento del número total de
las llamadas virtuales que encuentra y el número de verificaciones que inserta. También
cuenta el número de llamadas a ciertas funciones de biblioteca en tiempo de ejecución que inserta y
registra esta información para cada unidad de compilación. El compilador escribe esta información
a un archivo llamado vtv_count_data.log en el directorio nombrado por la variable de entorno
VTV_LOGS_DIR si eso está definido o el directorio de trabajo actual de lo contrario. También
cuenta el tamaño de los conjuntos de punteros vtable para cada clase y escribe esta información
a vtv_class_set_sizes.log En el mismo directorio.

Nota: esta característica anexa datos a los archivos de registro. Para obtener archivos de registro nuevos, asegúrese de
eliminar los existentes.

-fno-débil
No utilice un soporte de símbolo débil, incluso si lo proporciona el enlazador. Por defecto, G ++
utiliza símbolos débiles si están disponibles. Esta opción existe solo para pruebas y
no debe ser utilizado por usuarios finales; da como resultado un código inferior y no tiene beneficios.
Esta opción puede eliminarse en una versión futura de G ++.

-nostdinc ++
No busque archivos de encabezado en los directorios estándar específicos de C ++, pero hágalo
aún busca en los otros directorios estándar. (Esta opción se usa al construir el
Biblioteca C ++.)

Además, estas opciones de optimización, advertencia y generación de código solo tienen significado
para programas C ++:

-Wabi (Solo C, Objective-C, C ++ y Objective-C ++)
Cuando un explícito -fabi-version =n se utiliza la opción, hace que G ++ advierta cuando genera
código que probablemente no sea compatible con la ABI de C ++ independiente del proveedor. Desde G ++ ahora
por defecto es -versión-fabi = 0, -Wabi no tiene ningún efecto a menos que una versión ABI anterior sea
seleccionado (con -fabi-version =n) o se selecciona una versión de compatibilidad anterior (con
-Wabi =n or -fabi-compat-version =n).

Aunque se ha hecho un esfuerzo por advertir sobre todos estos casos, es probable que haya algunos
casos sobre los que no se advierte, a pesar de que G ++ está generando código incompatible.
También puede haber casos en los que se emitan advertencias aunque el código
generado es compatible.

Debería reescribir su código para evitar estas advertencias si le preocupa el
hecho de que el código generado por G ++ puede no ser binario compatible con el código generado por
otros compiladores.

-Wabi también se puede utilizar con un número de versión explícito para advertir sobre la compatibilidad
con un particular -versión-fabi nivel, por ejemplo -Wabi = 2 para advertir sobre cambios relativos a
-versión-fabi = 2. La especificación de un número de versión también establece -fabi-compat-version =n.

Las incompatibilidades conocidas en -versión-fabi = 2 (que era el valor predeterminado de GCC 3.4 a
4.9) incluyen:

* Se estropeó una plantilla con un parámetro de plantilla que no es de tipo de tipo de referencia
incorrectamente:

externo interno N;
plantilla struct S {};
vacío n (S ) {2}

Esto fue arreglado en -versión-fabi = 3.

* Los tipos de vector SIMD declarados usando "__attribute ((vector_size))" fueron destruidos en un
forma no estándar que no permite la sobrecarga de funciones tomando vectores
de diferentes tamaños.

El destrozo fue cambiado en -versión-fabi = 4.

* "__attribute ((const))" y "noreturn" fueron destruidos como calificadores de tipo, y
"decltype" de una declaración simple se retiró.

Estos problemas de alteración se solucionaron en -versión-fabi = 5.

* Los enumeradores con alcance pasados ​​como argumentos a una función variada se promueven como
enumeradores sin ámbito, lo que provoca que "va_arg" se queje. En la mayoría de los objetivos, esto no
realmente afectan el parámetro que pasa ABI, ya que no hay forma de pasar un argumento
más pequeño que "int".

Además, la ABI cambió la alteración de los paquetes de argumentos de plantilla, "const_cast",
"static_cast", incremento / decremento de prefijo y una función de ámbito de clase utilizada como
argumento de plantilla.

Estos problemas se corrigieron en -versión-fabi = 6.

* Las lambdas en el alcance del argumento predeterminado se modificaron incorrectamente y la ABI cambió
la destrucción de "nullptr_t".

Estos problemas se corrigieron en -versión-fabi = 7.

* Al manipular un tipo de función con function-cv-qualifiers, el no calificado
El tipo de función se trató incorrectamente como un candidato de sustitución.

Esto fue arreglado en -versión-fabi = 8.

También advierte sobre cambios relacionados con psABI. La psABI conocida cambia en este punto
incluyen:

* Para SysV / x86-64, las uniones con miembros "long double" se pasan en la memoria como
especificado en psABI. Por ejemplo:

unión U {
largo doble ld;
int i;
};

La "unión U" siempre se pasa en la memoria.

-Etiqueta wabi (Solo C ++ y Objective-C ++)
Advierte cuando se utiliza un tipo con una etiqueta ABI en un contexto que no tiene esa etiqueta ABI.
See C + + Atributos para obtener más información sobre las etiquetas ABI.

-Wctor-dtor-privacidad (Solo C ++ y Objective-C ++)
Advertir cuando una clase parece inutilizable porque todos los constructores o destructores en esa
La clase es privada y no tiene amigos ni funciones miembro públicas estáticas.
También advierte si no hay métodos no privados y hay al menos un miembro privado
función que no es un constructor o destructor.

-Wdelete-no-virtual-dtor (Solo C ++ y Objective-C ++)
Advertir cuando se utiliza "eliminar" para destruir una instancia de una clase que tiene virtual
funciones y destructor no virtual. No es seguro eliminar una instancia de un derivado
clase a través de un puntero a una clase base si la clase base no tiene un virtual
incinerador de basuras. Esta advertencia está habilitada por -Pared.

-Sufijo-literal (Solo C ++ y Objective-C ++)
Advertir cuando una cadena o un carácter literal va seguido de un sufijo ud que no
comience con un guión bajo. Como una extensión conforme, GCC trata dichos sufijos como
tokens de preprocesamiento separados para mantener la compatibilidad hacia atrás con el código
que utiliza macros de formato de " ". Por ejemplo:

#definir __STDC_FORMAT_MACROS
#incluir
#incluye

int main () {
int64_t i64 = 123;
printf ("Mi int64:%" PRId64 "\ n", i64);
}

En este caso, "PRId64" se trata como un token de preprocesamiento independiente.

Esta advertencia está habilitada de forma predeterminada.

-Entrenamiento (Solo C ++ y Objective-C ++)
Advertir cuando se produce una conversión de restricción prohibida por C ++ 11 dentro de { }, p.ej

int i = {2.2}; // error: estrechamiento de doble a int

Esta bandera está incluida en -Pared y -Wc ++ 11-compat.

Con -std = c ++ 11, -Wno-estrechamiento suprime el diagnóstico requerido por la norma.
Tenga en cuenta que esto no afecta el significado de un código bien formado; reduciendo conversiones
todavía se consideran mal formados en el contexto del SFINAE.

-Wno excepto (Solo C ++ y Objective-C ++)
Advertir cuando una expresión-noexcepto se evalúa como falsa debido a una llamada a una función
que no tiene una especificación de excepción que no arroje (es decir, "throw ()" o
"noexcept") pero el compilador sabe que nunca lanza una excepción.

-Wnon-virtual-dtor (Solo C ++ y Objective-C ++)
Advertir cuando una clase tiene funciones virtuales y un destructor no virtual accesible
en sí mismo o en una clase base polimórfica accesible, en cuyo caso es posible pero
No es seguro eliminar una instancia de una clase derivada mediante un puntero a la propia clase.
o clase base. Esta advertencia se habilita automáticamente si -Weffc ++ está especificado.

-Reordenar (Solo C ++ y Objective-C ++)
Advertir cuando el orden de los inicializadores de miembros proporcionado en el código no coincide con el orden
en el que deben ejecutarse. Por ejemplo:

estructura A {
int i;
intj;
A (): j (0), i (1) {}
};

El compilador reorganiza los inicializadores de miembros para "i" y "j" para que coincidan con el
orden de declaración de los miembros, emitiendo una advertencia a tal efecto. Esta advertencia es
habilitado por -Pared.

-fext-numeric-literales (Solo C ++ y Objective-C ++)
Acepte sufijos numéricos literales imaginarios, de punto fijo o definidos por máquina como GNU
extensiones. Cuando esta opción está desactivada, estos sufijos se tratan como usuario de C ++ 11
sufijos numéricos literales definidos. Está activado de forma predeterminada para todos los dialectos anteriores a C ++ 11
y todos los dialectos GNU: -std = c ++ 98, -std = gnu ++ 98, -std = gnu ++ 11, -std = gnu ++ 14. Esto
La opción está desactivada de forma predeterminada para ISO C ++ 11 en adelante (-std = c ++ 11, ...)

Las siguientes -W ... las opciones no se ven afectadas por -Pared.

-Weffc ++ (Solo C ++ y Objective-C ++)
Advierta sobre violaciones de las siguientes pautas de estilo de Scott Meyers Eficaz
C + + serie de libros:

* Definir un constructor de copia y un operador de asignación para clases con dinámicamente-
memoria asignada.

* Prefiere la inicialización a la asignación en constructores.

* Haga que "operator =" devuelva una referencia a * esto.

* No intente devolver una referencia cuando deba devolver un objeto.

* Distinguir entre formas de prefijo y sufijo de operadores de incremento y decremento.

* Nunca sobrecargue "&&", "||" o ",".

Esta opción también habilita -Wnon-virtual-dtor, que también es uno de los C ++ efectivos
recomendaciones. Sin embargo, el cheque se amplía para advertir sobre la falta de virtual
destructor en clases de bases no polimórficas accesibles también.

Al seleccionar esta opción, tenga en cuenta que los encabezados de biblioteca estándar no obedecen a todos
de estas pautas; usar grep -v para filtrar esas advertencias.

-Wstrict-null-centinela (Solo C ++ y Objective-C ++)
Advierte sobre el uso de un "NULL" no lanzado como centinela. Al compilar solo con GCC
este es un centinela válido, ya que "NULL" se define como "__null". Aunque es un nulo
puntero constante en lugar de un puntero nulo, se garantiza que será del mismo tamaño
como un puntero. Pero este uso no es portátil entre diferentes compiladores.

-Wno-no-plantilla-amigo (Solo C ++ y Objective-C ++)
Deshabilite las advertencias cuando se declaren funciones de amigos sin plantilla dentro de una plantilla.
Desde el advenimiento del soporte de especificación de plantilla explícita en G ++, si el nombre del
amigo es un id no calificado (es decir, Amigo foo (int)), la especificación del lenguaje C ++
exige que el amigo declare o defina una función ordinaria que no sea de plantilla. (Sección
14.5.3). Antes de que G ++ implementara la especificación explícita, los ids no calificados podían ser
interpretado como una especialización particular de una función en plantilla. Porque esto
El comportamiento no conforme ya no es el comportamiento predeterminado para G ++,
-Wnon-plantilla-amigo permite al compilador comprobar el código existente en busca de posibles problemas
puntos y está activado de forma predeterminada. Este nuevo comportamiento del compilador se puede desactivar con
-Wno-no-plantilla-amigo, que mantiene el código del compilador conforme pero deshabilita el
advertencia útil.

-Estilo-estilo-mundo (Solo C ++ y Objective-C ++)
Advierte si se usa una conversión de estilo antiguo (estilo C) a un tipo no vacío dentro de un programa C ++.
Los lanzamientos de nuevo estilo ("dynamic_cast", "static_cast", "reinterpret_cast" y
"const_cast") son menos vulnerables a efectos no deseados y mucho más fáciles de buscar.

-Woverloaded-virtual (Solo C ++ y Objective-C ++)
Advertir cuando una declaración de función oculta funciones virtuales de una clase base. Para
ejemplo, en:

estructura A {
vacío virtual f ();
};

estructura B: público A {
void f (int);
};

la versión de clase "A" de "f" está oculta en "B", y un código como:

B * b;
b-> f ();

no se compila.

-Wno-pmf-conversiones (Solo C ++ y Objective-C ++)
Deshabilite el diagnóstico para convertir un puntero enlazado a una función miembro a un simple
puntero.

-Wsign-promoción (Solo C ++ y Objective-C ++)
Advertir cuando la resolución de sobrecarga elige una promoción de tipo enumerado o sin firmar a
un tipo firmado, en lugar de una conversión a un tipo sin firmar del mismo tamaño. Anterior
versiones de G ++ intentaron preservar la falta de firma, pero el estándar exige la actual
comportamiento.

Opciones Controlador Objective-C y Objetivo-C ++ Dialectos
(NOTA: Este manual no describe los lenguajes Objective-C y Objective-C ++


Esta sección describe las opciones de la línea de comandos que solo son significativas para Objective-C
y programas Objective-C ++. También puede utilizar la mayoría de GNU independientes del lenguaje.
opciones del compilador. Por ejemplo, puede compilar un archivo alguna_clase.m Me gusta esto:

gcc -g -fgnu-tiempo de ejecución -O -c alguna_clase.m

En este ejemplo, -fgnu-tiempo de ejecución es una opción destinada solo para Objective-C y Objective-C ++
programas; puede utilizar las otras opciones con cualquier idioma compatible con GCC.

Tenga en cuenta que dado que Objective-C es una extensión del lenguaje C, las compilaciones de Objective-C
también puede usar opciones específicas para el front-end de C (por ejemplo, -Wtradicional). Del mismo modo,
Las compilaciones de Objective-C ++ pueden usar opciones específicas de C ++ (por ejemplo, -Wabi).

Aquí hay una lista de opciones que son , solamente para compilar Objective-C y Objective-C ++
programas:

-fconstant-string-class =nombre de la clase
Uso nombre de la clase como el nombre de la clase para instanciar para cada cadena literal
especificado con la sintaxis "@" ... "". El nombre de clase predeterminado es "NXConstantString" si
se está utilizando el tiempo de ejecución GNU, y "NSConstantString" si se está utilizando el tiempo de ejecución NeXT.
utilizado (ver más abajo). los -fcadenas-cfconstantes opción, si también está presente, anula la
-fclase-cadena-constante establecer y hacer que los literales "@" ... "" se presenten como constantes
Cadenas de CoreFoundation.

-fgnu-tiempo de ejecución
Genere código objeto compatible con el tiempo de ejecución estándar de GNU Objective-C. Este es
el predeterminado para la mayoría de los tipos de sistemas.

-fnext-tiempo de ejecución
Genere una salida compatible con el tiempo de ejecución de NeXT. Este es el valor predeterminado para NeXT-based
sistemas, incluidos Darwin y Mac OS X. La macro "__NEXT_RUNTIME__" está predefinida si
(y solo si) se utiliza esta opción.

-fno-nil-receptores
Suponga que todos los envíos de mensajes de Objective-C ("[mensaje del receptor: arg]") en este
unidad de traducción asegúrese de que el receptor no sea "nulo". Esto permite más
puntos de entrada eficientes en el tiempo de ejecución que se utilizará. Esta opción solo está disponible en
junto con NeXT runtime y ABI versión 0 o 1.

-fobjc-abi-version =n
Usar versión n del Objective-C ABI para el tiempo de ejecución seleccionado. Esta opcion es
actualmente solo es compatible con el tiempo de ejecución de NeXT. En ese caso, la Versión 0 es la
ABI tradicional (32 bits) sin soporte para propiedades y otros Objective-C 2.0
adiciones. La versión 1 es la ABI tradicional (32 bits) con soporte para propiedades y
otras adiciones de Objective-C 2.0. La versión 2 es la ABI moderna (64 bits). Si nada es
especificado, el valor predeterminado es la versión 0 en máquinas de destino de 32 bits y la versión 2 en 64 bits
máquinas de destino.

-fobjc-llamada-cxx-cdtors
Para cada clase Objective-C, verifique si alguna de sus variables de instancia es un objeto C ++
con un constructor predeterminado no trivial. Si es así, sintetice un especial "- (id)
.cxx_construct "método de instancia que ejecuta constructores predeterminados no triviales en cualquier
tales variables de instancia, en orden, y luego devuelve "self". Del mismo modo, compruebe si hay alguno
La variable de instancia es un objeto C ++ con un destructor no trivial, y si es así, sintetiza
un método especial "- (void) .cxx_destruct" que ejecuta todos esos destructores predeterminados, en
orden inverso.

Por tanto, los métodos "- (id) .cxx_construct" y "- (void) .cxx_destruct" sólo se generan
operar en variables de instancia declaradas en la clase Objective-C actual, y no en aquellas
heredado de las superclases. Es responsabilidad del tiempo de ejecución de Objective-C
invocar todos estos métodos en la jerarquía de herencia de un objeto. La identificación)
Los métodos .cxx_construct "son invocados por el tiempo de ejecución inmediatamente después de un nuevo objeto.
se asigna la instancia; los métodos "- (void) .cxx_destruct" se invocan inmediatamente
antes de que el tiempo de ejecución desasigne una instancia de objeto.

En el momento de escribir este artículo, solo el tiempo de ejecución de NeXT en Mac OS X 10.4 y posterior es compatible con
invocando los métodos "- (id) .cxx_construct" y "- (void) .cxx_destruct".

-fobjc-envío-directo
Permitir saltos rápidos al despachador de mensajes. En Darwin, esto se logra a través de la
página de comunicaciones.

-fobjc-excepciones
Habilite el soporte sintáctico para el manejo estructurado de excepciones en Objective-C, similar a
lo que ofrecen C ++ y Java. Esta opción es necesaria para utilizar Objective-C
palabras clave @try, @throw, @catch, @finally y @synchronized. Esta opcion esta disponible
con el tiempo de ejecución GNU y el tiempo de ejecución NeXT (pero no disponible junto con
el tiempo de ejecución de NeXT en Mac OS X 10.2 y anteriores).

-fobjc-gc
Habilite la recolección de basura (GC) en los programas Objective-C y Objective-C ++. Esta opción
solo está disponible con el tiempo de ejecución NeXT; el tiempo de ejecución de GNU tiene una basura diferente
implementación de colección que no requiere indicadores de compilador especiales.

-fobjc-nilcheck
Para el tiempo de ejecución NeXT con la versión 2 de ABI, busque un receptor nulo en el método
invocaciones antes de realizar la llamada al método real. Este es el valor predeterminado y puede
discapacitado usando -fno-objc-nilcheck. Los métodos de clase y las súper llamadas nunca se verifican
para nil de esta manera sin importar en qué se establezca este indicador. Actualmente esta bandera no
nada cuando se usa el tiempo de ejecución GNU, o una versión anterior de la ABI del tiempo de ejecución NeXT.

-fobjc-std = objc1
Se ajusta a la sintaxis del lenguaje de Objective-C 1.0, el lenguaje reconocido por GCC 4.0.
Esto solo afecta a las adiciones de Objective-C al lenguaje C / C ++; no afecta
conformidad con los estándares C / C ++, que está controlado por el dialecto C / C ++ separado
banderas de opciones. Cuando esta opción se usa con Objective-C o Objective-C ++
compilador, se rechaza cualquier sintaxis de Objective-C que no sea reconocida por GCC 4.0. Esta
es útil si necesita asegurarse de que su código Objective-C se pueda compilar con
versiones anteriores de GCC.

-sustituir-clases-objc
Emite un marcador especial instruyendo ld(1) no enlazar estáticamente en el objeto resultante
archivar y permitir debería(1) para cargarlo en tiempo de ejecución. Esto se usa en
junto con el modo de depuración Fix-and-Continue, donde el archivo de objeto en
La pregunta puede ser recompilada y recargada dinámicamente en el transcurso del programa.
ejecución, sin necesidad de reiniciar el programa. Actualmente, Fix-and-
La funcionalidad Continuar solo está disponible junto con el tiempo de ejecución NeXT en Mac
OS X 10.3 y posteriores.

-fzero-enlace
Al compilar para el tiempo de ejecución NeXT, el compilador normalmente reemplaza las llamadas a
"objc_getClass (" ... ")" (cuando se conoce el nombre de la clase en el momento de la compilación) con
referencias de clases estáticas que se inicializan en el momento de la carga, lo que mejora el tiempo de ejecución
rendimiento. Especificando el -fzero-enlace bandera suprime este comportamiento y causa
llamadas a "objc_getClass (" ... ")" para ser retenidas. Esto es útil en Zero-Link
modo de depuración, ya que permite modificar implementaciones de clases individuales
durante la ejecución del programa. El tiempo de ejecución de GNU actualmente siempre retiene las llamadas a
"objc_get_class (" ... ")" independientemente de las opciones de la línea de comandos.

-fno-ivar-local
De forma predeterminada, se puede acceder a las variables de instancia en Objective-C como si fueran locales
variables desde dentro de los métodos de la clase en la que están declaradas. Esto puede llevar a
sombreado entre variables de instancia y otras variables declaradas localmente
dentro de un método de clase o globalmente con el mismo nombre. Especificando el -fno-ivar-local
flag deshabilita este comportamiento evitando así problemas de sombreado de variables.

-fivar-visibilidad =[público|protegido|privada|paquete]
Establezca la visibilidad de la variable de instancia predeterminada en la opción especificada para que la instancia
variables declaradas fuera del alcance de cualquier directiva modificadora de acceso por defecto a la
visibilidad especificada.

-gen-decls
Volcar declaraciones de interfaz para todas las clases vistas en el archivo fuente a un archivo llamado
nombrefuente.decl.

-Wassign-interceptar (Solo Objective-C y Objective-C ++)
Advertir cada vez que el recolector de basura intercepta una asignación de Objective-C.

-Wno-protocolo (Solo Objective-C y Objective-C ++)
Si se declara que una clase implementa un protocolo, se emite una advertencia para cada método
en el protocolo que no está implementado por la clase. El comportamiento predeterminado es
emitir una advertencia para cada método no implementado explícitamente en la clase, incluso si un
La implementación del método se hereda de la superclase. Si usa el -Wno-protocolo
opción, los métodos heredados de la superclase se consideran implementados,
y no se les emite ninguna advertencia.

-Wselector (Solo Objective-C y Objective-C ++)
Advertir si se encuentran varios métodos de diferentes tipos para el mismo selector durante
Compilacion. La verificación se realiza en la lista de métodos en la etapa final de
Compilacion. Además, se realiza una verificación para cada selector que aparece en un
expresión "@selector (...)", y se ha utilizado un método correspondiente para ese selector
encontrado durante la compilación. Debido a que estos controles escanean la tabla de métodos solo al final
de compilación, estas advertencias no se producen si la etapa final de compilación es
no alcanzado, por ejemplo, porque se encuentra un error durante la compilación, o porque el
-fsyntax-solo se está utilizando la opción.

-Wstrict-selector-partido (Solo Objective-C y Objective-C ++)
Advertir si se encuentran varios métodos con diferentes argumentos y / o tipos de retorno para un
selector dado al intentar enviar un mensaje usando este selector a un receptor de
escriba "id" o "Clase". Cuando esta bandera está apagada (que es el comportamiento predeterminado), el
El compilador omite tales advertencias si las diferencias encontradas se limitan a tipos que comparten
del mismo tamaño y alineación.

-Selector-Wundeclared (Solo Objective-C y Objective-C ++)
Advertir si se encuentra una expresión "@selector (...)" que hace referencia a un selector no declarado. A
selector se considera no declarado si no se ha declarado ningún método con ese nombre antes
la expresión "@selector (...)", ya sea explícitamente en una @interface o @protocol
declaración, o implícitamente en una sección @implementation. Esta opción siempre realiza
sus comprobaciones tan pronto como se encuentra una expresión "@selector (...)", mientras -Wselector , solamente
realiza sus comprobaciones en la etapa final de compilación. Esto también refuerza la codificación
convención de estilo que los métodos y selectores deben declararse antes de ser utilizados.

-imprimir-objc-runtime-info
Genere un encabezado C que describa la estructura más grande que se pasa por valor, si corresponde.

Opciones a Control Diagnóstico Mensajes Maquetación
Tradicionalmente, los mensajes de diagnóstico se han formateado independientemente de la configuración del dispositivo de salida.
aspecto (por ejemplo, su ancho, ...). Puede utilizar las opciones que se describen a continuación para controlar
algoritmo de formato para mensajes de diagnóstico, por ejemplo, cuántos caracteres por línea, con qué frecuencia
Se debe informar la información de ubicación de la fuente. Tenga en cuenta que algunas interfaces de idiomas pueden
no honrar estas opciones.

-fmensaje-longitud =n
Intente formatear los mensajes de error para que quepan en líneas de aproximadamente n caracteres. Si n is
cero, entonces no se realiza ningún ajuste de línea; cada mensaje de error aparece en una sola línea.
Este es el valor predeterminado para todas las interfaces.

-fdiagnostics-show-location = once
Solo tiene sentido en el modo de ajuste de línea. Indica al informador de mensajes de diagnóstico que
emitir información de ubicación de la fuente una vez; es decir, en caso de que el mensaje sea demasiado largo para caber
en una sola línea física y debe ajustarse, la ubicación de origen no se emitirá
(como prefijo) nuevamente, una y otra vez, en las siguientes líneas de continuación. Este es el
comportamiento por defecto.

-fdiagnostics-show-location = every-line
Solo tiene sentido en el modo de ajuste de línea. Indica al informador de mensajes de diagnóstico que
emitir la misma información de ubicación de origen (como prefijo) para las líneas físicas que resultan
del proceso de romper un mensaje que es demasiado largo para caber en una sola línea.

-fdiagnostics-color [=CUANDO]
-fno-diagnóstico-color
Utilice el color en los diagnósticos. CUANDO is nunca, hacerloo auto. El valor predeterminado depende de cómo
el compilador ha sido configurado, puede ser cualquiera de los anteriores CUANDO opciones o también
nunca if GCC_COLORS la variable de entorno no está presente en el entorno, y auto
de otra manera. auto significa usar color solo cuando el error estándar es un terminal. los
Formularios -fdiagnóstico-color y -fno-diagnóstico-color son alias para
-fdiagnostics-color = siempre y -fdiagnostics-color = nunca, respectivamente.

Los colores están definidos por la variable de entorno. GCC_COLORS. Su valor es de dos puntos.
lista separada de capacidades y subcadenas Select Graphic Rendition (SGR). SGR
Los comandos son interpretados por el terminal o el emulador de terminal. (Ver la sección en
la documentación de su terminal de texto para los valores permitidos y sus significados como
atributos de carácter.) Estos valores de subcadena son números enteros en representación decimal
y se puede concatenar con punto y coma. Los valores comunes para concatenar incluyen 1 para
negrita, 4 para subrayar, 5 para parpadear, 7 por inversa, 39 para el color de primer plano predeterminado, 30
a 37 para colores de primer plano, 90 a 97 para colores de primer plano en modo de 16 colores, 38, 5, 0 a
38, 5, 255 para colores de primer plano en los modos de 88 y 256 colores, 49 para el fondo predeterminado
color, 40 a 47 para colores de fondo, 100 a 107 para colores de fondo en modo de 16 colores,
y 48, 5, 0 a 48, 5, 255 para colores de fondo en los modos de 88 y 256 colores.

El valor por defecto GCC_COLORS is

error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01

donde 01, 31 es rojo intenso, 01, 35 es magenta audaz, 01, 36 es cian audaz, 01, 32 es atrevido
verde y 01 es audaz. Configuración GCC_COLORS a la cadena vacía desactiva los colores.
Las capacidades admitidas son las siguientes.

"error ="
Subcadena SGR para error: marcadores.

"advertencia ="
Subcadena SGR para advertencia: marcadores.

"nota ="
Subcadena SGR para nota: marcadores.

"caret ="
Subcadena SGR para la línea de intercalación.

"locus ="
Subcadena SGR para información de ubicación, archivo: línea or archivo: línea: columna etc.

"cita ="
Subcadena SGR para información impresa entre comillas.

-fno-diagnósticos-mostrar-opción
De forma predeterminada, cada diagnóstico emitido incluye texto que indica la opción de línea de comandos
que controla directamente el diagnóstico (si tal opción es conocida por el diagnóstico
maquinaria). Especificando el -fno-diagnósticos-mostrar-opción bandera suprime eso
comportamiento.

-fno-diagnóstico-mostrar-caret
De forma predeterminada, cada diagnóstico emitido incluye la línea de origen original y un signo de intercalación '^'
indicando la columna. Esta opción suprime esta información. La línea de origen es
truncado a n personajes, si el -f longitud-del-mensaje = n se da la opción. Cuando la salida
se hace al terminal, el ancho está limitado al ancho dado por el COLUMNAS
variable de entorno o, si no se establece, al ancho de la terminal.

Opciones a SOLICITUD or Suprimir Advertencias
Las advertencias son mensajes de diagnóstico que informan sobre construcciones que no son inherentemente
erróneos pero que son riesgosos o sugieren que puede haber habido un error.

Las siguientes opciones independientes del idioma no habilitan advertencias específicas pero controlan la
tipos de diagnósticos producidos por GCC.

-fsyntax-solo
Verifique el código en busca de errores de sintaxis, pero no haga nada más.

-fmax-errores =n
Limita el número máximo de mensajes de error a n, momento en el que GCC rescata en lugar de
que intentar continuar procesando el código fuente. Si n es 0 (el predeterminado),
no hay límite en el número de mensajes de error producidos. Si -Wfatal-errores También es
especificado, entonces -Wfatal-errores tiene prioridad sobre esta opción.

-w Inhibir todos los mensajes de advertencia.

-Error
Convierte todas las advertencias en errores.

-Werror =
Convierte la advertencia especificada en un error. Se agrega el especificador de una advertencia;
por ejemplo -Werror = cambiar convierte las advertencias controladas por -Interruptor en errores.
Este interruptor toma una forma negativa, para ser usado para negar -Error para advertencias específicas;
por ejemplo -Wno-error = cambiar hace -Interruptor las advertencias no sean errores, incluso cuando -Error
está en efecto.

El mensaje de advertencia para cada advertencia controlable incluye la opción que controla
la advertencia. Esa opción se puede utilizar con -Werror = y -Wno-error = como se describe
encima. (La impresión de la opción en el mensaje de advertencia puede desactivarse usando el
-fno-diagnósticos-mostrar-opción bandera.)

Tenga en cuenta que especificar -Werror =foo implica automáticamente -Wfoo. Sin embargo, -Wno-error =foo
no implica nada.

-Wfatal-errores
Esta opción hace que el compilador anule la compilación en el primer error ocurrido
en lugar de intentar seguir imprimiendo más mensajes de error.

Puede solicitar muchas advertencias específicas con opciones que comienzan con -W, Por ejemplo
-Wimplícito para solicitar advertencias sobre declaraciones implícitas. Cada una de estas advertencias específicas
Las opciones también tienen un comienzo de forma negativa. -No- para desactivar las advertencias; por ejemplo,
-Wno-implícito. Este manual enumera solo uno de los dos formularios, el que no sea el predeterminado.
Para obtener más opciones específicas del idioma, consulte también C + + Dialecto Opciones y Objective-C
y Objetivo-C ++ Dialecto Opciones.

Algunas opciones, como -Pared y -Wextra, active otras opciones, como -Wunused, cual
puede activar más opciones, como -Valor desaprovechado. El efecto combinado de positivo y
formas negativas es que las opciones más específicas tienen prioridad sobre las menos específicas,
independientemente de su posición en la línea de comandos. Para opciones de la misma especificidad,
el último entra en vigor. Las opciones habilitadas o deshabilitadas a través de pragmas tienen efecto como si
apareció al final de la línea de comandos.

Cuando se solicita una opción de advertencia no reconocida (p. Ej., -Aviso-desconocido), GCC emite un
diagnóstico que indica que no se reconoce la opción. Sin embargo, si el -No- se utiliza la forma,
el comportamiento es ligeramente diferente: no se produce ningún diagnóstico para -Wno-desconocido-advertencia
a menos que se estén produciendo otros diagnósticos. Esto permite el uso de nuevos -No- opciones
con compiladores antiguos, pero si algo sale mal, el compilador advierte que un
la opción está presente.

-Wpedante
-pedante
Emitir todas las advertencias exigidas por las estrictas normas ISO C e ISO C ++; rechazar todos los programas que
usar extensiones prohibidas y algunos otros programas que no siguen ISO C e ISO
C ++. Para ISO C, sigue la versión de la norma ISO C especificada por cualquier -estándar
opción utilizada.

Los programas válidos de ISO C e ISO C ++ deben compilarse correctamente con o sin esta opción
(aunque unos pocos requieren -ansi o un -estándar opción que especifica la versión requerida de
ISO C). Sin embargo, sin esta opción, ciertas extensiones GNU y C y tradicionales
Las funciones de C ++ también son compatibles. Con esta opción, se rechazan.

-Wpedante no genera mensajes de advertencia para el uso de las palabras clave alternativas cuyo
los nombres comienzan y terminan con __. Las advertencias pedantes también están deshabilitadas en la expresión
que sigue a "__extension__". Sin embargo, solo los archivos de encabezado del sistema deben usar estos
Rutas de escape; los programas de aplicación deben evitarlos.

Algunos usuarios intentan usar -Wpedante para comprobar los programas de conformidad estricta con ISO C. Ellos
pronto descubren que no hace exactamente lo que quieren: encuentra algunas prácticas que no son ISO,
pero no todos --- solo aquellos para los que ISO C requiere un diagnóstico, y algunos otros para
qué diagnósticos se han agregado.

Una función para informar cualquier incumplimiento de ISO C podría ser útil en algunos casos,
pero requeriría un trabajo adicional considerable y sería muy diferente de
-Wpedante. No tenemos planes de admitir una función de este tipo en un futuro próximo.

Donde el estándar especificado con -estándar representa un dialecto extendido GNU de C, como
gnu90 or gnu99, hay un correspondiente bases estándar, la versión de ISO C en la que
se basa el dialecto extendido GNU. Advertencias de -Wpedante se dan donde están
requerido por el estándar básico. (No tiene sentido que se den tales advertencias
sólo para características que no están en el dialecto GNU C especificado, ya que, por definición, el GNU
Los dialectos de C incluyen todas las características que el compilador admite con la opción dada, y
no habría nada de qué advertir.)

-Errores-pedantes
Dar un error siempre que el bases estándar (consulta: -Wpedante) requiere un diagnóstico, en
algunos casos donde hay un comportamiento indefinido en tiempo de compilación y en algunos otros casos
que no impiden la compilación de programas válidos según el estándar.
Esto no es equivalente a -Werror = pedante, ya que hay errores habilitados por este
opción y no habilitado por este último y viceversa.

-Pared
Esto habilita todas las advertencias sobre construcciones que algunos usuarios consideran
cuestionables, y que son fáciles de evitar (o modificar para evitar la advertencia), incluso en
en conjunción con macros. Esto también habilita algunas advertencias específicas del idioma descritas
in C + + Dialecto Opciones y Objective-C y Objetivo-C ++ Dialecto Opciones.

-Pared enciende las siguientes banderas de advertencia:

-vestido -Límites-de-guerra = 1 (solo con -O2) -Wc ++ 11-compat -Wc ++ 14-compat
-Wchar-subíndices -Wenum-comparar (en C / ObjC; está activado de forma predeterminada en C ++)
-Wimplicit-int (Solo C y Objective-C) -Declaración-función-débil (C y
Objective-C solamente) -Comentario -Formato -Wprincipal (solo para C / ObjC y a menos que
independiente) -Wmaybe-sin inicializar -Fuerzos-de-perdidos (solo para C / ObjC) -Wnonnull
-Wopenmp-simd -Paréntesis -Signo-puntero -Reordenar -Tipo de dolor -Punto de secuencia
-Wsign-comparar (solo en C ++) -Wstrict-aliasing -Wstrict-overflow = 1 -Interruptor
-Wtrigrafías -Wuninicializado -Pragmas-desconocidos -Función-wunused -Etiqueta sin uso
-Valor desaprovechado -Variable-wunused -Wvolatile-registro-var

Tenga en cuenta que algunos indicadores de advertencia no están implícitos en -Pared. Algunos de ellos advierten sobre
construcciones que los usuarios generalmente no consideran cuestionables, pero que
ocasionalmente es posible que desee verificar; otros advierten sobre construcciones que son
necesario o difícil de evitar en algunos casos, y no existe una forma sencilla de modificar el
código para suprimir la advertencia. Algunos de ellos están habilitados por -Wextra pero muchos de ellos
debe habilitarse individualmente.

-Wextra
Esto habilita algunos indicadores de advertencia adicionales que no están habilitados por -Pared. (Esta opción usó
ser llamado -W. El nombre más antiguo todavía se admite, pero el nombre más nuevo es más
descriptivo.)

-Aplastado -Cuerpo-húmedo -Calificadores-pelirrojos -Inicializadores-de-campo-faltante
-W tipo de parámetro faltante (Solo C) -Declaración de estilo mundial (Solo C) -Woverride-init
-Wsign-comparar -Límites de tipo -Wuninicializado -Parámetro-wunused (solo con -Wunused or
-Pared) -Wunused-pero-set-parámetro (solo con -Wunused or -Pared)

La opción -Wextra también imprime mensajes de advertencia para los siguientes casos:

* Un puntero se compara con un número entero cero con "<", "<=", ">" o "> =".

* (Solo C ++) Un enumerador y un no enumerador aparecen en un condicional
expresión.

* (Solo C ++) Bases virtuales ambiguas.

* (Solo C ++) Subscripting de un arreglo que ha sido declarado "registro".

* (Solo C ++) Tomando la dirección de una variable que ha sido declarada "registro".

* (Solo C ++) Una clase base no se inicializa en el constructor de copia de una clase derivada.

-Wchar-subíndices
Advierte si un subíndice de matriz tiene el tipo "char". Ésta es una causa común de error, ya que
los programadores a menudo olvidan que este tipo está firmado en algunas máquinas. Esta advertencia es
habilitado por -Pared.

-Comentario
Advertir cada vez que una secuencia de inicio de comentarios /* aparece en un /* comentario, o siempre que un
La barra invertida-Nueva línea aparece en un // comentario. Esta advertencia está habilitada por -Pared.

-Wno-desajuste-cobertura
Advertir si los perfiles de comentarios no coinciden al utilizar el -fprofile-uso opción. Si un
el archivo de origen se cambia entre la compilación con -fprofile-gen y con -fprofile-uso,
los archivos con los comentarios del perfil pueden no coincidir con el archivo de origen y GCC no puede
utilice la información de comentarios del perfil. De forma predeterminada, esta advertencia está habilitada y
tratado como un error. -Wno-desajuste-cobertura se puede utilizar para deshabilitar la advertencia o
-Wno-error = falta de coincidencia de cobertura se puede utilizar para desactivar el error. Deshabilitar el error
porque esta advertencia puede resultar en un código pobremente optimizado y es útil solo en el caso de
cambios muy menores, como correcciones de errores en un código base existente. Completamente incapacitante
no se recomienda la advertencia.

-Wno-cpp
(Solo C, Objective-C, C ++, Objective-C ++ y Fortran)

Suprima los mensajes de advertencia emitidos por las directivas "#warning".

-Wdoble-promoción (Solo C, C ++, Objective-C y Objective-C ++)
Dar una advertencia cuando un valor de tipo "flotante" se promueve implícitamente a "doble". CPU
con una unidad de coma flotante de "precisión simple" de 32 bits, implemente "flotar" en el hardware,
pero emula "doble" en el software. En tal máquina, hacer cálculos usando
Los valores "dobles" son mucho más costosos debido a la sobrecarga requerida para el software.
emulación.

Es fácil hacer cálculos accidentalmente con "doble" porque el punto flotante
los literales son implícitamente de tipo "doble". Por ejemplo, en:

área de flotación (radio de flotación)
{
return 3.14159 * radio * radio;
}

el compilador realiza todo el cálculo con "doble" porque el punto flotante
literal es un "doble".

-Formato
-Wformat =n
Verifique las llamadas a "printf" y "scanf", etc., para asegurarse de que los argumentos proporcionados
tener tipos apropiados para la cadena de formato especificada, y que las conversiones
especificado en la cadena de formato tiene sentido. Esto incluye funciones estándar y
otros especificados por atributos de formato, en "printf", "scanf", "strftime" y
"strfmon" (una extensión X / Open, no en el estándar C) familias (u otras familias de destino
familias específicas). ¿Qué funciones se comprueban sin que los atributos de formato hayan sido
especificado depende de la versin estndar seleccionada, y tales comprobaciones de funciones
sin el atributo especificado están deshabilitados por independiente or -fno-incorporado.

Los formatos se comparan con las características de formato admitidas por GNU libc versión 2.2.
Estos incluyen todas las características de ISO C90 y C99, así como las características de Single Unix
Especificación y algunas extensiones BSD y GNU. Es posible que otras implementaciones de bibliotecas no
soporta todas estas características; GCC no admite advertencias sobre funciones que van más allá
las limitaciones de una biblioteca en particular. Sin embargo, si -Wpedante se usa con -Formato,
Se dan advertencias sobre características de formato que no están en la versión estándar seleccionada (pero no
para formatos "strfmon", ya que no están en ninguna versión del estándar C).

-Wformat = 1
-Formato
Optión -Formato es equivalente a -Wformat = 1y -Wno-formato es equivalente a
-Wformat = 0. Desde -Formato también comprueba los argumentos de formato nulo para varios
funciones, -Formato también implica -Wnonnull. Algunos aspectos de este nivel de formato
la comprobación se puede desactivar mediante las opciones: -Wno-formato-contiene-nul,
-Wno-formato-extra-argumentosy -Wno-formato-longitud-cero. -Formato está habilitado por
-Pared.

-Wno-formato-contiene-nul
If -Formato se especifica, no advierta sobre cadenas de formato que contengan bytes NUL.

-Wno-formato-extra-argumentos
If -Formato se especifica, no advierte sobre argumentos en exceso a un "printf" o
función de formato "scanf". El estándar C especifica que tales argumentos son
ignorado

Donde los argumentos no utilizados se encuentran entre los argumentos utilizados que se especifican con $
especificaciones del número de operando, normalmente se siguen dando advertencias, ya que
la implementación no pudo saber qué tipo pasar a "va_arg" para omitir los elementos no utilizados
argumentos. Sin embargo, en el caso de formatos "scanf", esta opción suprime la
advirtiendo si los argumentos no utilizados son todos punteros, ya que Single Unix
La especificación dice que se permiten tales argumentos no utilizados.

-Wno-formato-longitud-cero
If -Formato se especifica, no advierte sobre formatos de longitud cero. El estándar C
especifica que se permiten formatos de longitud cero.

-Wformat = 2
permitir -Formato más comprobaciones de formato adicionales. Actualmente equivalente a -Formato
-Wformat-no literal -Seguridad de formato -Wformato-y2k.

-Wformat-no literal
If -Formato se especifica, también advierte si la cadena de formato no es una cadena literal
y, por lo tanto, no se puede verificar, a menos que la función de formato tome sus argumentos de formato como
una "lista_va".

-Seguridad de formato
If -Formato se especifica, también advierte sobre el uso de funciones de formato que representan
posibles problemas de seguridad. En la actualidad, esto advierte sobre las llamadas a "printf" y
Funciones "scanf" donde la cadena de formato no es una cadena literal y no hay
formato de argumentos, como en "printf (foo);". Esto puede ser un agujero de seguridad si el
La cadena de formato proviene de una entrada que no es de confianza y contiene %n. (Este es actualmente un
subconjunto de lo -Wformat-no literal advierte, pero en el futuro las advertencias pueden ser
añadido a -Seguridad de formato que no estan incluidos en -Wformat-no literal.)

-Firma de formato
If -Formato se especifica, también advierte si la cadena de formato requiere un unsigned
argumento y el argumento está firmado y viceversa.

NOTA: En Ubuntu 8.10 y versiones posteriores, esta opción está habilitada de forma predeterminada para C,
C ++, ObjC, ObjC ++. Para deshabilitar, use -Wno-formato-seguridado deshabilitar todos los formatos
advertencias con -Wformat = 0. Para que las advertencias de seguridad de formato sean fatales, especifique
-Werror = formato-seguridad.

-Wformato-y2k
If -Formato se especifica, también advierte sobre los formatos "strftime" que pueden producir solo un
año de dos dígitos.

-Wnonnull
Advierte sobre pasar un puntero nulo para argumentos marcados que requieren un valor no nulo
por el atributo de función "no nulo".

-Wnonnull esta incluido en -Pared y -Formato. Puede desactivarse con el -Wno-no nulo
.

-Winit-yo (Solo C, C ++, Objective-C y Objective-C ++)
Advierte sobre variables no inicializadas que se inicializan con ellas mismas. Nota esto
La opción solo se puede utilizar con la -Wuninicializado .

Por ejemplo, GCC advierte que "i" no se inicializa solo en el siguiente fragmento
cuando -Winit-yo se ha especificado:

int f ()
{
int yo = yo;
volver i;
}

Esta advertencia está habilitada por -Pared en C ++.

-Wimplicit-int (Solo C y Objective-C)
Advertir cuando una declaración no especifica un tipo. Esta advertencia está habilitada por -Pared.

-Declaración-función-débil (Solo C y Objective-C)
Da una advertencia cada vez que se usa una función antes de ser declarada. En modo C99
(-std = c99 or -std = gnu99), esta advertencia está habilitada de forma predeterminada y se convierte en un
error por -Errores-pedantes. Esta advertencia también está habilitada por -Pared.

-Wimplícito (Solo C y Objective-C)
Igual que -Wimplicit-int y -Declaración-función-débil. Esta advertencia está habilitada
by -Pared.

-Calificadores-pelirrojos (Solo C y C ++)
Advierte si el tipo de retorno de una función tiene un calificador de tipo como "const". Para ISO C
tal calificador de tipo no tiene ningún efecto, ya que el valor devuelto por una función no es un
lvalor. Para C ++, la advertencia solo se emite para tipos escalares o "void". ISO C
prohíbe los tipos de devolución calificados "nulos" en las definiciones de funciones, por lo que dichos tipos de devolución
reciba siempre una advertencia incluso sin esta opción.

Esta advertencia también está habilitada por -Wextra.

-Wprincipal
Advertir si el tipo de "principal" es sospechoso. "principal" debe ser una función con externa
enlace, devolviendo int, tomando cero argumentos, dos o tres argumentos de
tipos apropiados. Esta advertencia está habilitada de forma predeterminada en C ++ y está habilitada por
-Pared or -Wpedante.

-Fuerzos-de-perdidos
Advierte si un inicializador agregado o de unión no está completamente entre corchetes. En el siguiente
Por ejemplo, el inicializador de "a" no está completamente entre corchetes, pero el de "b" está completamente
entre corchetes. Esta advertencia está habilitada por -Pared C ª.

int a [2] [2] = {0, 1, 2, 3};
int b [2] [2] = {{0, 1}, {2, 3}};

Esta advertencia está habilitada por -Pared.

-Wmissing-include-dirs (Solo C, C ++, Objective-C y Objective-C ++)
Advertir si no existe un directorio de inclusión proporcionado por el usuario.

-Paréntesis
Advertir si se omiten paréntesis en ciertos contextos, como cuando hay un
asignación en un contexto donde se espera un valor de verdad, o cuando los operadores están anidados
cuya precedencia la gente a menudo se confunde.

También advierte si aparece una comparación como "x <= y <= z"; esto es equivalente a "(x <= y? 1:
0) <= z ", que es una interpretación diferente a la de las matemáticas ordinarias.
notación.

También advierte sobre construcciones en las que puede haber confusión sobre qué declaración "si" un
pertenece la rama "else". Aquí hay un ejemplo de tal caso:

{
si (a)
si (b)
foo ();
más
bar ();
}

En C / C ++, cada rama "else" pertenece a la declaración "if" más interna posible, que
en este ejemplo es "si (b)". A menudo, esto no es lo que esperaba el programador, ya que
ilustrado en el ejemplo anterior por la sangría que eligió el programador. Cuando hay
ante la posibilidad de esta confusión, GCC emite una advertencia cuando se especifica esta bandera.
Para eliminar la advertencia, agregue llaves explícitas alrededor de la declaración "if" más interna para que
no hay forma de que el "else" pueda pertenecer al "if" adjunto. El código resultante se ve
Me gusta esto:

{
si (a)
{
si (b)
foo ();
más
bar ();
}
}

También advierte sobre usos peligrosos de la extensión GNU a "?:" Con el operando central omitido.
Cuando la condición del operador "?": Es una expresión booleana, el valor omitido es
siempre 1. A menudo, los programadores esperan que sea un valor calculado dentro del condicional
expresión en su lugar.

Esta advertencia está habilitada por -Pared.

-Punto de secuencia
Advierte sobre el código que puede tener semántica indefinida debido a violaciones de secuencia
reglas de puntos en los estándares C y C ++.

Los estándares C y C ++ definen el orden en el que las expresiones en un programa C / C ++ son
evaluado en términos de secuencia puntos, que representan un ordenamiento parcial entre los
ejecución de partes del programa: las ejecutadas antes del punto de secuencia, y las
ejecutado después de él. Estos ocurren después de la evaluación de una expresión completa (una que
no es parte de una expresión más grande), después de la evaluación del primer operando de un
"&&", "||", "?:" o "," (coma) operador, antes de que se llame a una función (pero después del
evaluación de sus argumentos y la expresión que denota la función llamada), y en
ciertos otros lugares. Aparte de lo expresado por las reglas de los puntos de secuencia, el orden
de evaluación de subexpresiones de una expresión no se especifica. Todas estas reglas
describir sólo un orden parcial en lugar de un orden total, ya que, por ejemplo, si dos
Las funciones se llaman dentro de una expresión sin un punto de secuencia entre ellas, el
no se especifica el orden en el que se llaman las funciones. Sin embargo, los estándares
El comité ha dictaminado que las llamadas a funciones no se superponen.

No se especifica cuando entre puntos de secuencia se modifican los valores de
los objetos surten efecto. Los programas cuyo comportamiento depende de esto tienen un comportamiento indefinido;
los estándares C y C ++ especifican que "Entre el punto de secuencia anterior y siguiente un
objeto tendrá su valor almacenado modificado como máximo una vez por la evaluación de un
expresión. Además, el valor anterior se leerá solo para determinar el valor a
almacenarse ". Si un programa infringe estas reglas, los resultados de cualquier
la implementación son completamente impredecibles.

Ejemplos de código con comportamiento indefinido son "a = a ++;", "a [n] = b [n ++]" y "a [i ++] =
i; ". Algunos casos más complicados no se diagnostican con esta opción, y puede dar un
resultado falso positivo ocasional, pero en general se ha encontrado bastante eficaz en
detectar este tipo de problemas en los programas.

El estándar está redactado de manera confusa, por lo que existe cierto debate sobre la precisión
significado de las reglas de los puntos de secuencia en casos sutiles. Enlaces a discusiones de la
problema, incluidas las definiciones formales propuestas, se pueden encontrar en la página de lecturas del CCG,
ahttp://gcc.gnu.org/readings.html>.

Esta advertencia está habilitada por -Pared para C y C ++.

-Wno-retorno-dirección-local
No advierta acerca de devolver un puntero (o en C ++, una referencia) a una variable que va
fuera de alcance después de que la función regrese.

-Tipo de dolor
Advertir cada vez que se define una función con un tipo de retorno que por defecto es "int". También
advertir sobre cualquier declaración de "retorno" sin valor de retorno en una función cuyo tipo de retorno
no es "nulo" (caerse del final del cuerpo de la función se considera que regresa
sin un valor), y sobre una declaración "return" con una expresión en una función
cuyo tipo de retorno es "void".

Para C ++, una función sin tipo de retorno siempre produce un mensaje de diagnóstico, incluso
cuando -Wno-tipo-retorno está especificado. Las únicas excepciones son "principal" y funciones
definido en los encabezados del sistema.

Esta advertencia está habilitada por -Pared.

-Wshift-count-negativo
Advertir si el recuento de turnos es negativo. Esta advertencia está habilitada de forma predeterminada.

-Wshift-cuenta-desbordamiento
Advertir si el recuento de turnos> = ancho del tipo. Esta advertencia está habilitada de forma predeterminada.

-Interruptor
Advertir cada vez que una declaración de "cambio" tiene un índice de tipo enumerado y carece de un "caso"
para uno o más de los códigos nombrados de esa enumeración. (La presencia de un "predeterminado"
etiqueta evita esta advertencia.) etiquetas de "caso" fuera del rango de enumeración también
provocar advertencias cuando se utiliza esta opción (incluso si hay una etiqueta "predeterminada"). Esta
la advertencia está habilitada por -Pared.

-Wswitch-predeterminado
Advertir siempre que una declaración "switch" no tenga un caso "predeterminado".

-Wswitch-enumeración
Advertir cada vez que una declaración de "cambio" tiene un índice de tipo enumerado y carece de un "caso"
para uno o más de los códigos nombrados de esa enumeración. etiquetas de "caso" fuera del
El rango de enumeración también provoca advertencias cuando se utiliza esta opción. La unica diferencia
entre -Interruptor y esta opción es que esta opción da una advertencia sobre una omisión
código de enumeración incluso si hay una etiqueta "predeterminada".

-Wswitch-bool
Advertir siempre que una declaración "switch" tenga un índice de tipo booleano. Es posible
suprimir esta advertencia al convertir la expresión de control a un tipo que no sea
"bool". Por ejemplo:

cambiar ((int) (a == 4))
{
...
}

Esta advertencia está habilitada de forma predeterminada para los programas C y C ++.

-Wsync-nand (Solo C y C ++)
Advertir cuando las funciones integradas "__sync_fetch_and_nand" y "__sync_nand_and_fetch" están
usó. Estas funciones cambiaron la semántica en GCC 4.4.

-Wtrigrafías
Advertir si se encuentran trígrafos que puedan cambiar el significado del programa
(no se advierte sobre los trígrafos dentro de los comentarios). Esta advertencia está habilitada por -Pared.

-Wunused-pero-set-parámetro
Advertir cada vez que se asigna un parámetro de función, pero no se utiliza (aparte de
su declaración).

Para suprimir esta advertencia, utilice el atributo "no utilizado".

Esta advertencia también está habilitada por -Wunused Junto con -Wextra.

-Wunused-pero-variable-configurada
Advertir cada vez que se asigna una variable local, pero no se utiliza (aparte de su
declaración). Esta advertencia está habilitada por -Pared.

Para suprimir esta advertencia, utilice el atributo "no utilizado".

Esta advertencia también está habilitada por -Wunused, que está habilitado por -Pared.

-Función-wunused
Advertir cada vez que se declara una función estática pero no está definida o una estática no en línea
la función no se utiliza. Esta advertencia está habilitada por -Pared.

-Etiqueta sin uso
Advertir siempre que se declare una etiqueta pero no se utilice. Esta advertencia está habilitada por -Pared.

Para suprimir esta advertencia, utilice el atributo "no utilizado".

-Wunused-local-typedefs (Solo C, Objective-C, C ++ y Objective-C ++)
Advertir cuando no se utiliza un typedef definido localmente en una función. Esta advertencia es
habilitado por -Pared.

-Parámetro-wunused
Advertir siempre que un parámetro de función no se utilice aparte de su declaración.

Para suprimir esta advertencia, utilice el atributo "no utilizado".

-Wno-resultado-no utilizado
No advertir si una persona que llama a una función marcada con el atributo "warn_unused_result" lo hace
no use su valor de retorno. El valor predeterminado es -Resultado-dañado.

-Variable-wunused
Advertir siempre que una variable local o una variable estática no constante no se utilice aparte de
su declaración. Esta advertencia está habilitada por -Pared.

Para suprimir esta advertencia, utilice el atributo "no utilizado".

-Valor desaprovechado
Advertir cada vez que una declaración calcula un resultado que no se utiliza explícitamente. Para suprimir
esta advertencia arrojó la expresión no utilizada a "anular". Esto incluye una expresión-
declaración o el lado izquierdo de una expresión de coma que no contiene efectos secundarios.
Por ejemplo, una expresión como "x [i, j]" genera una advertencia, mientras que "x [(void) i, j]"
no.

Esta advertencia está habilitada por -Pared.

-Wunused
Todo lo anterior -Wunused opciones combinadas.

Para recibir una advertencia sobre un parámetro de función no utilizado, debe especificar
-Wextra -Wunused (tenga en cuenta que -Pared implica -Wunused), o especificar por separado
-Parámetro-wunused.

-Wuninicializado
Advertir si se usa una variable automática sin haber sido inicializada primero o si una variable
puede ser golpeado por una llamada "setjmp". En C ++, advierta si una referencia no estática o no
El miembro estático "const" aparece en una clase sin constructores.

Si desea advertir sobre el código que usa el valor no inicializado de la variable en
su propio inicializador, utilice el -Winit-yo .

Estas advertencias se producen para elementos de estructura individuales no inicializados o golpeados,
variables de unión o de matriz, así como para las variables que no están inicializadas o que están maltratadas
como un todo. No ocurren para variables o elementos declarados "volátiles". Porque
estas advertencias dependen de la optimización, las variables exactas o los elementos para los que hay
Las advertencias dependen de las opciones de optimización precisas y de la versión de GCC utilizada.

Tenga en cuenta que es posible que no haya advertencias sobre una variable que se usa solo para calcular un
valor que en sí mismo nunca se usa, porque dichos cálculos pueden ser eliminados por el flujo de datos
análisis antes de que se impriman las advertencias.

-Wmaybe-sin inicializar
Para una variable automática, si existe una ruta desde la entrada de la función hasta un uso de
la variable que se inicializa, pero existen algunas otras rutas para las que el
variable no se inicializa, el compilador emite una advertencia si no puede probar la
Las rutas no inicializadas no se ejecutan en tiempo de ejecución. Estas advertencias son opcionales
porque GCC no es lo suficientemente inteligente como para ver todas las razones por las que el código podría ser correcto
a pesar de parecer tener un error. Aquí hay un ejemplo de cómo puede suceder esto:

{
int x;
interruptor (y)
{
caso 1: x = 1;
break;
caso 2: x = 4;
break;
caso 3: x = 5;
}
foo(x);
}

Si el valor de "y" es siempre 1, 2 o 3, entonces "x" siempre se inicializa, pero GCC
no sabe esto. Para suprimir la advertencia, debe proporcionar un caso predeterminado con
afirmar(0) o código similar.

Esta opción también advierte cuando una variable automática no volátil puede ser cambiada por un
llamar a "longjmp". Estas advertencias también son posibles solo en la optimización
Compilacion.

El compilador solo ve las llamadas a "setjmp". No puede saber dónde estará "longjmp"
llamado; de hecho, un manejador de señales podría llamarlo en cualquier punto del código. Como un
resultado, puede recibir una advertencia incluso cuando de hecho no hay ningún problema porque "longjmp"
de hecho, no se puede llamar al lugar que causaría un problema.

Se pueden evitar algunas advertencias falsas si declara todas las funciones que usa que
nunca regrese como "sin regreso".

Esta advertencia está habilitada por -Pared or -Wextra.

-Pragmas-desconocidos
Advierte cuando se encuentra una directiva "#pragma" que GCC no entiende. Si esto
se utiliza la opción de línea de comandos, incluso se emiten advertencias para pragmas desconocidos en el sistema
archivos de encabezado. Este no es el caso si las advertencias solo las habilita el -Pared
opción de línea de comandos.

-Wno-pragmas
No advierta sobre el uso indebido de pragmas, como parámetros incorrectos, sintaxis no válida o
conflictos entre pragmas. Ver también -Pragmas-desconocidos.

-Wstrict-aliasing
Esta opción solo está activa cuando -fstrict-aliasing está activo. Advierte sobre el código que
podría romper las estrictas reglas de alias que utiliza el compilador para la optimización.
La advertencia no detecta todos los casos, pero intenta detectar los más comunes.
trampas. Esta incluido en -Pared. Es equivalente a -Wstrict-aliasing = 3

-Wstrict-aliasing = n
Esta opción solo está activa cuando -fstrict-aliasing está activo. Advierte sobre el código que
podría romper las estrictas reglas de alias que utiliza el compilador para la optimización.
Los niveles más altos corresponden a una mayor precisión (menos falsos positivos). Niveles más altos
también corresponden a más esfuerzo, similar a la forma -O funciona -Wstrict-aliasing is
equivalente a -Wstrict-aliasing = 3.

Nivel 1: más agresivo, rápido, menos preciso. Posiblemente útil cuando los niveles más altos
no advierto pero -fstrict-aliasing todavía rompe el código, ya que tiene muy pocas falsas
negativos. Sin embargo, tiene muchos falsos positivos. Advierte de todas las conversiones de puntero
entre tipos posiblemente incompatibles, incluso si nunca se desreferenciaron. Corre en el frente
terminar solamente.

Nivel 2: agresivo, rápido, no demasiado preciso. Todavía puede tener muchos falsos positivos (no
tantos como el nivel 1), y pocos falsos negativos (pero posiblemente más que el nivel 1).
A diferencia del nivel 1, solo advierte cuando se toma una dirección. Advierte sobre tipos incompletos.
Funciona solo en la parte delantera.

Nivel 3 (predeterminado para -Wstrict-aliasing): Debe tener muy pocos falsos positivos y pocos
falsos negativos. Ligeramente más lento que los niveles 1 o 2 cuando la optimización está habilitada.
Se encarga del patrón común de juego de palabras + desreferencia en la interfaz:
"* (int *) & some_float". Si la optimización está habilitada, también se ejecuta en el back-end, donde
trata con casos de enunciados múltiples utilizando información de puntos a flujo sensible.
Solo advierte cuando se elimina la referencia al puntero convertido. No advierte sobre incompleto
tipos.

-Wstrict-desbordamiento
-Wstrict-overflow =n
Esta opción solo está activa cuando -fstrict-desbordamiento está activo. Advierte sobre casos
donde el compilador optimiza basándose en la suposición de que el desbordamiento firmado no
ocurrir. Tenga en cuenta que no advierte sobre todos los casos en los que el código podría desbordarse:
solo advierte sobre los casos en los que el compilador implementa alguna optimización. Por lo tanto, este
La advertencia depende del nivel de optimización.

Una optimización que asume que no se produce un desbordamiento firmado es perfectamente segura si
los valores de las variables involucradas son tales que el desbordamiento nunca lo hace, de hecho,
ocurrir. Por lo tanto, esta advertencia puede dar fácilmente un falso positivo: una advertencia sobre el código
eso no es realmente un problema. Para ayudar a concentrarse en cuestiones importantes, varias advertencias
los niveles están definidos. No se emiten advertencias por el uso de desbordamiento firmado indefinido
al estimar cuántas iteraciones requiere un bucle, en particular al determinar
si se ejecutará un bucle.

-Wstrict-overflow = 1
Advierte sobre casos que son cuestionables y fáciles de evitar. Por ejemplo, con
-fstrict-desbordamiento, el compilador simplifica "x + 1> x" a 1. Este nivel de
-Wstrict-desbordamiento está habilitado por -Pared; los niveles superiores no lo son, y deben ser
solicitado explícitamente.

-Wstrict-overflow = 2
También advierte sobre otros casos en los que una comparación se simplifica a una constante. Para
ejemplo: "abs (x)> = 0". Esto solo se puede simplificar cuando -fstrict-desbordamiento será en
efecto, porque "abs (INT_MIN)" se desborda a "INT_MIN", que es menor que cero.
-Wstrict-desbordamiento (sin nivel) es lo mismo que -Wstrict-overflow = 2.

-Wstrict-overflow = 3
También advierte sobre otros casos en los que se simplifica una comparación. Por ejemplo: "x + 1
> 1 "se simplifica a" x> 0 ".

-Wstrict-overflow = 4
También advierta sobre otras simplificaciones no cubiertas por los casos anteriores. Para
ejemplo: "(x * 10) / 5" se simplifica a "x * 2".

-Wstrict-overflow = 5
También advierte sobre casos en los que el compilador reduce la magnitud de una constante
involucrado en una comparación. Por ejemplo: "x + 2> y" se simplifica a "x + 1> = y".
Esto se informa solo en el nivel de advertencia más alto porque esta simplificación
se aplica a muchas comparaciones, por lo que este nivel de advertencia proporciona una gran cantidad de
falsos positivos.

-Wsuggest-atributo =[puro|const|sin retorno|formato]
Advierte sobre los casos en los que agregar un atributo puede resultar beneficioso. Los atributos actualmente
admitidos se enumeran a continuación.

-Wsuggest-attribute = pure
-Wsuggest-atributo = const
-Wsuggest-attribute = noreturn
Advierte sobre funciones que pueden ser candidatas a atributos "puros", "const" o
"sin retorno". El compilador solo advierte sobre funciones visibles en otra compilación
unidades o (en el caso de "puro" y "constante") si no puede probar que la función
regresa normalmente. Una función regresa normalmente si no contiene un infinito
bucle o regrese anormalmente lanzando, llamando a "abortar" o atrapando. Este analisis
requiere opción -fipa-puro-constante, que está habilitado de forma predeterminada en -O y más alto.
Los niveles de optimización más altos mejoran la precisión del análisis.

-Wsuggest-atributo = formato
-Atributo-formato-Wmissing
Advierte sobre punteros de función que pueden ser candidatos para atributos de "formato".
Tenga en cuenta que estos son solo candidatos posibles, no absolutos. GCC adivina que
punteros de función con atributos de "formato" que se utilizan en la asignación,
La inicialización, el paso de parámetros o las declaraciones de retorno deben tener un correspondiente
atributo "formato" en el tipo resultante. Es decir, el lado izquierdo del
asignación o inicialización, el tipo de variable de parámetro o el retorno
el tipo de la función contenedora, respectivamente, también debe tener un atributo de "formato"
para evitar la advertencia.

GCC también advierte sobre las definiciones de funciones que podrían ser candidatas para "formato"
atributos. Nuevamente, estos son solo posibles candidatos. GCC adivina que "formato"
Los atributos pueden ser apropiados para cualquier función que llame a una función como
"vprintf" o "vscanf", pero no siempre es así, y algunas funciones
para los cuales los atributos de "formato" son apropiados, puede que no se detecten.

-Wsuggest-final-tipos
Advierta sobre tipos con métodos virtuales donde la calidad del código mejoraría si el tipo
se declararon con el especificador "final" de C ++ 11 o, si es posible, se declararon en un
espacio de nombres anónimo. Esto permite a GCC desvirtualizar más agresivamente el polimórfico
llamadas. Esta advertencia es más eficaz con la optimización del tiempo de enlace, donde el
la información sobre el gráfico de jerarquía de clases es más completa.

-Wsuggest-final-métodos
Advierta sobre métodos virtuales donde la calidad del código mejoraría si el método fuera
declarado con el especificador "final" de C ++ 11, o, si es posible, su tipo se declaró en
un espacio de nombres anónimo o con el especificador "final". Esta advertencia es más efectiva
con optimización de tiempo de enlace, donde la información sobre el gráfico de jerarquía de clases es
más completo. Se recomienda considerar primero las sugerencias de
-Wsuggest-final-tipos y luego reconstruir con nuevas anotaciones.

-Wsuggest-anular
Advierte sobre la invalidación de funciones virtuales que no están marcadas con la palabra clave override.

-Límites de guerra
-Límites-de-guerra =n
Esta opción solo está activa cuando -ftree-vrp está activo (predeterminado para -O2 y por encima). Eso
advierte sobre los subíndices de las matrices que siempre están fuera de los límites. Esta advertencia es
habilitado por -Pared.

-Límites-de-guerra = 1
Este es el nivel de advertencia de -Límites de guerra y está habilitado por -Pared; Niveles más altos
no lo son, y deben solicitarse explícitamente.

-Límites-de-guerra = 2
Este nivel de advertencia también advierte sobre el acceso fuera de los límites para las matrices al final de
una estructura y para matrices a las que se accede a través de punteros. Este nivel de advertencia puede dar una
mayor número de falsos positivos y está desactivado de forma predeterminada.

-Wbool-comparar
Advierte sobre una expresión booleana en comparación con un valor entero diferente de
"verdadero Falso". Por ejemplo, la siguiente comparación siempre es falsa:

int n = 5;
...
si ((n> 1) == 2) {...}

Esta advertencia está habilitada por -Pared.

-Wno-calificadores-descartados (Solo C y Objective-C)
No advertir si se descartan los calificadores de tipo en los punteros. Normalmente, el
El compilador advierte si se pasa una variable "const char *" a una función que toma un "char
* "parámetro. Esta opción se puede utilizar para suprimir tal advertencia.

-Wno-calificadores-de-matriz-descartados (Solo C y Objective-C)
No advertir si se están utilizando calificadores de tipo en matrices que son objetivos de puntero.
descartado. Normalmente, el compilador advierte si se pasa una variable "const int (*) []" a
una función que toma un parámetro "int (*) []". Esta opción se puede utilizar para suprimir
tal advertencia.

-Wno-tipos-de-punteros-incompatibles (Solo C y Objective-C)
No advertir cuando hay una conversión entre punteros que tienen tipos incompatibles.
Esta advertencia es para casos no cubiertos por -Wno-signo-puntero, que advierte sobre el puntero
paso de argumento o asignación con diferente firma.

-Wno-int-conversión (Solo C y Objective-C)
No advierte sobre conversiones de entero a puntero incompatibles y de puntero a entero.
Esta advertencia se trata de conversiones implícitas; para conversiones explícitas las advertencias
-Wno-int-a-puntero-cast y -Wno-puntero-a-int-cast puede ser usado.

-Wno-div-por-cero
No advierta sobre la división de enteros en tiempo de compilación por cero. División de punto flotante por
el cero no está advertido, ya que puede ser una forma legítima de obtener infinitos y
NaN.

-Wsystem-encabezados
Imprime mensajes de advertencia para las construcciones que se encuentran en los archivos de encabezado del sistema. Advertencias de
Los encabezados del sistema normalmente se suprimen, en el supuesto de que normalmente no
indican problemas reales y solo dificultarían la lectura de la salida del compilador. Utilizando
Esta opción de línea de comandos le dice a GCC que emita advertencias desde los encabezados del sistema como si
ocurrió en el código de usuario. Sin embargo, tenga en cuenta que el uso -Pared junto con esta opción
no advertir sobre pragmas desconocidos en los encabezados del sistema --- para eso, -Pragmas-desconocidos
también debe utilizarse.

-Trampolines
Advierte sobre trampolines generados para punteros a funciones anidadas. Un trampolín es un
pequeña pieza de datos o código que se crea en tiempo de ejecución en la pila cuando la dirección
de una función anidada se toma y se utiliza para llamar a la función anidada indirectamente.
Para algunos objetivos, se compone únicamente de datos y, por lo tanto, no requiere un tratamiento especial.
Pero, para la mayoría de los objetivos, se compone de código y, por lo tanto, requiere que la pila se haga
ejecutable para que el programa funcione correctamente.

-Wfloat-igual
Advierte si se utilizan valores de coma flotante en las comparaciones de igualdad.

La idea detrás de esto es que a veces es conveniente (para el programador)
Considere los valores de punto flotante como aproximaciones a números reales infinitamente precisos.
Si está haciendo esto, entonces necesita calcular (analizando el código, o en algún
de otra manera) el error máximo o máximo probable que introduce el cálculo, y
permitirlo al realizar comparaciones (y al producir resultados, pero eso es un
problema diferente). En particular, en lugar de probar la igualdad, debe verificar
para ver si los dos valores tienen rangos que se superponen; y esto se hace con el
operadores relacionales, por lo que las comparaciones de igualdad probablemente estén equivocadas.

-Wtradicional (Solo C y Objective-C)
Advierte sobre ciertos constructos que se comportan de manera diferente en tradicional e ISO C.También
advertir sobre las construcciones ISO C que no tienen un equivalente C tradicional, y / o problemáticas
constructos que deben evitarse.

* Parámetros de macro que aparecen dentro de cadenas literales en el cuerpo de la macro. En
El reemplazo de macros de C tradicional tiene lugar dentro de los literales de cadena, pero en ISO C
no es asi.

* En C tradicional, algunas directivas de preprocesador no existían. Tradicional
los preprocesadores solo consideraban una línea como una directiva si el # apareció en la columna
1 en la línea. Por lo tanto -Wtradicional advierte sobre directivas que C tradicional
entiende pero ignora porque el # no aparece como el primer carácter en
la línea. También sugiere que oculte directivas como "#pragma" que no comprendan
C tradicional al sangrarlos. Algunas implementaciones tradicionales no
reconocer "#elif", por lo que esta opción sugiere evitarlo por completo.

* Una macro similar a una función que aparece sin argumentos.

* El operador unario plus.

* Los U sufijo entero constante, o el F or L sufijos constantes de coma flotante.
(La C tradicional admite la L sufijo en constantes enteras.) Tenga en cuenta que estos
los sufijos aparecen en macros definidas en los encabezados del sistema de la mayoría de los sistemas modernos,
por ejemplo el _MÍN/_MAX macros en " ". El uso de estas macros en el código de usuario puede
normalmente conducen a advertencias falsas, sin embargo, el preprocesador integrado de GCC ha
suficiente contexto para evitar advertencias en estos casos.

* Una función declarada externa en un bloque y luego utilizada después del final del
bloquear.

* Una instrucción "switch" tiene un operando de tipo "long".

* Una declaración de función no "estática" sigue a una "estática". Esta construcción no es
aceptado por algunos compiladores de C tradicionales.

* El tipo ISO de una constante entera tiene un ancho o signo diferente de su
tipo tradicional. Esta advertencia solo se emite si la base de la constante es diez.
Es decir, los valores hexadecimales u octales, que normalmente representan patrones de bits, no
advertido.

* Se detecta el uso de la concatenación de cadenas ISO.

* Inicialización de agregados automáticos.

* El identificador entra en conflicto con las etiquetas. La C tradicional carece de un espacio de nombres separado para
etiquetas.

* Inicialización de sindicatos. Si el inicializador es cero, se omite la advertencia.
Esto se hace bajo el supuesto de que aparece el inicializador cero en el código de usuario.
condicionado, por ejemplo, "__STDC__" para evitar perder las advertencias del inicializador y se basa en
inicialización predeterminada a cero en el caso C tradicional.

* Conversiones por prototipos entre valores de punto fijo / flotante y viceversa. los
La ausencia de estos prototipos al compilar con C tradicional provoca graves
problemas. Este es un subconjunto de las posibles advertencias de conversión; para el conjunto completo
utilizan el -Conversión-tradicional.

* Uso de definiciones de funciones de estilo ISO C. Esta advertencia es intencionalmente no emitido
para declaraciones de prototipos o funciones variadas porque estas características ISO C
aparecen en su código al usar las macros de compatibilidad C tradicionales de libiberty,
"PARAMS" y "VPARAMS". Esta advertencia también se omite para funciones anidadas
porque esa función ya es una extensión de GCC y, por lo tanto, no es relevante para
compatibilidad con C tradicional.

-Conversión-tradicional (Solo C y Objective-C)
Advertir si un prototipo provoca una conversión de tipo diferente a la que sucedería
al mismo argumento en ausencia de un prototipo. Esto incluye conversiones de
punto fijo a flotante y viceversa, y las conversiones cambian el ancho o
la firma de un argumento de punto fijo, excepto cuando sea el mismo que la promoción predeterminada.

-Declaración-tras-declaración (Solo C y Objective-C)
Advertir cuando se encuentra una declaración después de una declaración en un bloque. Esta construcción, conocida
de C ++, se introdujo con ISO C99 y está permitido por defecto en GCC. No lo es
compatible con ISO C90.

-Wundef
Advertir si se evalúa un identificador indefinido en una directiva "#if".

-Etiquetas Wno-endif
No advertir siempre que un "#else" o un "#endif" vayan seguidos de un texto.

-Sombra
Advertir siempre que una variable local o una declaración de tipo oculte otra variable,
parámetro, tipo, miembro de clase (en C ++) o variable de instancia (en Objective-C) o
siempre que se sombree una función incorporada. Tenga en cuenta que en C ++, el compilador advierte si un
la variable local sombrea una definición de tipo explícita, pero no si sombrea una estructura / clase / enumeración.

-Wno-sombra-ivar (Solo Objective-C)
No advertir cuando una variable local oculta una variable de instancia en un Objective-C
método.

-Mayor-que =len
Advertir siempre que un objeto de mayor tamaño len bytes está definido.

-Wframe-mayor-que =len
Advertir si el tamaño de un marco de función es mayor que len bytes. El cálculo hecho
para determinar el tamaño del marco de la pila es aproximado y no conservador. El actual
Los requisitos pueden ser algo mayores que len incluso si no recibe una advertencia. En
Además, cualquier espacio asignado a través de "alloca", matrices de longitud variable o relacionadas
construcciones no es incluido por el compilador al determinar si emitir o no un
advertencia.

-Wno-objeto-libre-sin-montón
No advierta cuando intente liberar un objeto que no se asignó en el montón.

-Wstack-use =len
Advertir si el uso de la pila de una función puede ser mayor que len bytes. La computación
hecho para determinar el uso de la pila es conservador. Cualquier espacio asignado a través de "alloca",
El compilador incluye matrices de longitud variable o construcciones relacionadas cuando
determinar si se debe emitir o no una advertencia.

El mensaje está de acuerdo con la salida de -fstack-use.

* Si el uso de la pila es completamente estático pero excede la cantidad especificada, es:

advertencia: el uso de la pila es de 1120 bytes

* Si el uso de la pila es (parcialmente) dinámico pero limitado, es:

advertencia: el uso de la pila puede ser de 1648 bytes

* Si el uso de la pila es (parcialmente) dinámico y no limitado, es:

advertencia: el uso de la pila puede ser ilimitado

-Optimizaciones Wunsafe-loop
Advertir si el bucle no se puede optimizar porque el compilador no puede asumir nada en
los límites de los índices de bucle. Con -optimizaciones-de-bucle-divertido advertir si el compilador
hace tales suposiciones.

-Formato-wno-pedante-ms (Solo objetivos MinGW)
Cuando se usa en combinación con -Formato y -pedante sin extensiones GNU, esto
La opción desactiva las advertencias sobre especificadores de ancho de formato no ISO "printf" / "scanf"
"I32", "I64" y "I" se utilizan en los destinos de Windows, que dependen del tiempo de ejecución de MS.

-Wpointer-arith
Advierte sobre cualquier cosa que dependa del "tamaño" de un tipo de función o de "void". GNU C
asigna a estos tipos un tamaño de 1, para mayor comodidad en los cálculos con "void *"
punteros y punteros a funciones. En C ++, advertir también cuando una operación aritmética
implica "NULL". Esta advertencia también está habilitada por -Wpedante.

-Límites de tipo
Advertir si una comparación es siempre verdadera o siempre falsa debido al rango limitado de
tipo de datos, pero no advierte sobre expresiones constantes. Por ejemplo, advertir si un no firmado
La variable se compara con cero con "<" o "> =". Esta advertencia también está habilitada por
-Wextra.

-Wbad-función-emitida (Solo C y Objective-C)
Advierte cuando una llamada de función se convierte en un tipo que no coincide. Por ejemplo, advertir si una llamada
a una función que devuelve un tipo entero se convierte en un tipo de puntero.

-Wc90-c99-compatible (Solo C y Objective-C)
Advierte sobre características que no están presentes en ISO C90, pero sí en ISO C99. Por ejemplo,
advertir sobre el uso de matrices de longitud variable, tipo "long long", tipo "bool", compuesto
literales, inicializadores designados, etc. Esta opción es independiente de la
modo estándar. Las advertencias están deshabilitadas en la expresión que sigue a "__extension__".

-Wc99-c11-compatible (Solo C y Objective-C)
Advierte sobre características que no están presentes en ISO C99, pero sí en ISO C11. Por ejemplo,
advertir sobre el uso de estructuras y uniones anónimas, calificador de tipo "_Atomic",
Especificador de clase de almacenamiento "_Thread_local", especificador "_Alignas", operador "Alignof",
Palabra clave "_Generic", etc. Esta opción es independiente del modo estándar.
Las advertencias están deshabilitadas en la expresión que sigue a "__extension__".

-Wc ++ - compat (Solo C y Objective-C)
Advertir sobre construcciones ISO C que están fuera del subconjunto común de ISO C e ISO
C ++, por ejemplo, solicitud de conversión implícita de "void *" a un puntero a no "void"
tipo.

-Wc ++ 11-compat (Solo C ++ y Objective-C ++)
Advertir sobre construcciones de C ++ cuyo significado difiere entre ISO C ++ 1998 e ISO C ++ 2011,
por ejemplo, identificadores en ISO C ++ 1998 que son palabras clave en ISO C ++ 2011. Esta advertencia
se enciende -Entrenamiento y está habilitado por -Pared.

-Wc ++ 14-compat (Solo C ++ y Objective-C ++)
Advertir sobre construcciones de C ++ cuyo significado difiere entre ISO C ++ 2011 e ISO C ++ 2014.
Esta advertencia está habilitada por -Pared.

-Wcast-calificación
Advertir cada vez que se lanza un puntero para eliminar un calificador de tipo del tipo de destino.
Por ejemplo, advierta si un "const char *" se convierte en un "char *" ordinario.

También advertir al hacer un lanzamiento que introduzca un calificador de tipo de una manera insegura. Para
ejemplo, convertir "char **" a "const char **" no es seguro, como en este ejemplo:

/ * p es el valor char **. * /
carácter constante ** q = (carácter constante **) p;
/ * La asignación de una cadena de solo lectura a const char * está bien. * /
* q = "cadena";
/ * Ahora el puntero char ** apunta a la memoria de solo lectura. * /
** p = 'b';

-Wcast-alinear
Advertir cada vez que se lanza un puntero de modo que la alineación requerida del objetivo sea
aumentado. Por ejemplo, advierta si un "char *" se convierte en un "int *" en máquinas donde
solo se puede acceder a los enteros en límites de dos o cuatro bytes.

-Escribir-cadenas
Al compilar C, asigne a las constantes de cadena el tipo "const char [largo]" para que copiando
la dirección de uno en un puntero no "const" "char *" produce una advertencia. Estas
las advertencias lo ayudan a encontrar en tiempo de compilación código que puede intentar escribir en una cadena
constante, pero solo si ha tenido mucho cuidado con el uso de "const" en las declaraciones
y prototipos. De lo contrario, es solo una molestia. Por eso no hicimos -Pared
solicite estas advertencias.

Al compilar C ++, advierta sobre la conversión obsoleta de literales de cadena a "char
* ". Esta advertencia está habilitada de forma predeterminada para los programas C ++.

-Aplastado
Advierte sobre las variables que pueden cambiar con "longjmp" o "vfork". Esta advertencia es
también habilitado por -Wextra.

-Wcondicionalmente (Solo C ++ y Objective-C ++)
Advertir sobre construcciones soportadas condicionalmente (C ++ 11 [intro.defs]).

-Wconversión
Advierte de conversiones implícitas que pueden alterar un valor. Esto incluye conversiones
entre real y entero, como "abs (x)" cuando "x" es "doble"; conversiones entre
firmado y sin firmar, como "unsigned ui = -1"; y conversiones a tipos más pequeños, como
"sqrtf (M_PI)". No advertir sobre conversiones explícitas como "abs ((int) x)" y "ui =
(sin firmar) -1 ", o si la conversión no cambia el valor como en" abs (2.0) ".
Las advertencias sobre conversiones entre enteros firmados y sin firmar se pueden deshabilitar mediante
usando -Wno-sign-conversión.

Para C ++, también advierte sobre la resolución de sobrecarga confusa para conversiones definidas por el usuario; y
conversiones que nunca utilizan un operador de conversión de tipo: conversiones a "anular", lo mismo
type, una clase base o una referencia a ellos. Advertencias sobre conversiones entre firmados
y los enteros sin firmar están deshabilitados de forma predeterminada en C ++ a menos que -Conversión de wsign is
habilitado explícitamente.

-Wno-conversión-nulo (Solo C ++ y Objective-C ++)
No advierta sobre conversiones entre tipos "NULL" y sin puntero. -Wconversion-nulo is
habilitado por defecto.

-Wzero-como-constante-puntero-nulo (Solo C ++ y Objective-C ++)
Advertir cuando se utiliza un literal '0' como constante de puntero nulo. Esto puede ser útil para
facilitar la conversión a "nullptr" en C ++ 11.

-Wfecha-hora
Advertir cuando se encuentran macros "__TIME__", "__DATE__" o "__TIMESTAMP__"
podría evitar compilaciones reproducibles idénticas a bits.

-Wdelete-incompleto (Solo C ++ y Objective-C ++)
Advertir al eliminar un puntero a tipo incompleto, lo que puede causar un comportamiento indefinido en
tiempo de ejecución. Esta advertencia está habilitada de forma predeterminada.

-Wuseless-fundido (Solo C ++ y Objective-C ++)
Advertir cuando una expresión se convierte en su propio tipo.

-Cuerpo-húmedo
Advierte si aparece un cuerpo vacío en una instrucción "if", "else" o "do while". Esta advertencia
también está habilitado por -Wextra.

-Wenum-comparar
Advierte sobre una comparación entre valores de diferentes tipos enumerados. En enumeral de C ++
Las discrepancias en las expresiones condicionales también se diagnostican y la advertencia es habilitada por
defecto. En C, esta advertencia está habilitada por -Pared.

-Wjump-falla-init (C, Objective-C solamente)
Advertir si una declaración "goto" o una declaración "switch" salta hacia adelante a través de la
inicialización de una variable, o salta hacia atrás a una etiqueta después de que la variable ha sido
inicializado. Esto solo advierte sobre las variables que se inicializan cuando se
declarado. Esta advertencia solo es compatible con C y Objective-C; en C ++ este tipo de
branch es un error en cualquier caso.

-Wjump-falla-init esta incluido en -Wc ++ - compat. Puede desactivarse con el
-Wno-jump-misss-init .

-Wsign-comparar
Advertir cuando una comparación entre valores firmados y no firmados podría producir un error
resultado cuando el valor firmado se convierte a unsigned. Esta advertencia también está habilitada
by -Wextra; para obtener las otras advertencias de -Wextra sin esta advertencia, use -Wextra
-Wno-signo-comparar.

-Conversión de wsign
Advertir de conversiones implícitas que pueden cambiar el signo de un valor entero, como
Asignar una expresión de entero con signo a una variable de entero sin signo. Un explícito
Cast silencia la advertencia. En C, esta opción también está habilitada por -Wconversión.

-Wfloat-conversión
Advierte de conversiones implícitas que reducen la precisión de un valor real. Esta
incluye conversiones de real a entero, y de real de mayor precisión a menor
valores reales de precisión. Esta opción también está habilitada por -Wconversión.

-Desasignación de tamaño (Solo C ++ y Objective-C ++)
Advertir sobre una definición de función de desasignación sin tamaño

operador nulo eliminar (nulo *) no excepto;
operador nulo eliminar [] (nulo *) noexcepto;

sin una definición de la función de desasignación de tamaño correspondiente

operador vacío eliminar (void *, std :: size_t) noexcept;
operador nulo eliminar [] (void *, std :: size_t) noexcept;

o viceversa. Habilitado por -Wextra para cada año fiscal junto con la -fsized-desasignación.

-Wsizeof-puntero-memaccess
Advierte sobre parámetros de longitud sospechosos para ciertas funciones integradas de cadena y memoria
si el argumento usa "sizeof". Esta advertencia advierte, por ejemplo, sobre "memset (ptr, 0, sizeof
(ptr)); "si" ptr "no es una matriz, sino un puntero, y sugiere una posible solución, o
sobre "memcpy (& foo, ptr, sizeof (& foo));". Esta advertencia está habilitada por -Pared.

-Wsizeof-array-argumento
Advertir cuando el operador "sizeof" se aplica a un parámetro que se declara como una matriz
en una definición de función. Esta advertencia está habilitada de forma predeterminada para los programas C y C ++.

-Wmemset-args-transpuestos
Advertir de llamadas sospechosas a la función incorporada "memset", si el segundo argumento es
no es cero y el tercer argumento es cero. Esto advierte, por ejemplo, @ sobre "memset (buf, sizeof
buf, 0) "donde más probablemente se refería a" memset (buf, 0, sizeof buf) ".
El diagnóstico solo se emite si el tercer argumento es literal cero. Si es algo
expresión que se pliega a cero, una conversión de cero a algún tipo, etc., es mucho menos
Es probable que el usuario haya intercambiado los argumentos por error y no se emita ninguna advertencia.
Esta advertencia está habilitada por -Pared.

-vestido
Advierte sobre usos sospechosos de direcciones de memoria. Estos incluyen el uso de la dirección de un
función en una expresión condicional, como "void func (void); if (func)", y
comparaciones con la dirección de memoria de un literal de cadena, como "if (x ==" abc ")".
Estos usos suelen indicar un error del programador: la dirección de una función siempre
se evalúa como verdadero, por lo que su uso en un condicional suele indicar que el programador
olvidó los paréntesis en una llamada de función; y comparaciones con cadenas literales
dan como resultado un comportamiento no especificado y no son portátiles en C, por lo que generalmente indican
que el programador pretendía utilizar "strcmp". Esta advertencia está habilitada por -Pared.

-Wlogic-op
Advierte sobre usos sospechosos de operadores lógicos en expresiones. Esto incluye el uso
operadores lógicos en contextos donde es probable que se espere un operador bit a bit.

-Lógico-sin-paréntesis
Advierte sobre la lógica no utilizada en el operando del lado izquierdo de una comparación. Esta
La opción no advierte si el operando RHS es de tipo booleano. Su propósito es
detectar código sospechoso como el siguiente:

int a;
...
si (! a> 1) {...}

Es posible suprimir la advertencia colocando el LHS entre paréntesis:

si ((! a)> 1) {...}

Esta advertencia está habilitada por -Pared.

-Volumen-retorno
Advertir si se definen o llaman funciones que devuelven estructuras o uniones. (En
idiomas donde puede devolver una matriz, esto también provoca una advertencia).

-Optimizaciones de bucle no agresivo
Advertir si en un bucle con número constante de iteraciones el compilador detecta indefinido
comportamiento en alguna declaración durante una o más de las iteraciones.

-Wno-atributos
No advertir si se utiliza un "__attribute__" inesperado, como atributos no reconocidos,
atributos de función aplicados a variables, etc. Esto no detiene errores para
uso incorrecto de los atributos admitidos.

-Wno-incorporado-macro-redefinido
No advierta si se redefinen determinadas macros integradas. Esto suprime las advertencias para
redefinición de "__TIMESTAMP__", "__TIME__", "__DATE__", "__FILE__", y
"__BASE_FILE__".

-Wstrict-prototipos (Solo C y Objective-C)
Advierte si una función se declara o define sin especificar los tipos de argumentos. (Un
La definición de función de estilo antiguo está permitida sin una advertencia si está precedida por un
declaración que especifica los tipos de argumentos).

-Declaración de estilo mundial (Solo C y Objective-C)
Advertir de usos obsoletos, según el Estándar C, en una declaración. Para
Por ejemplo, advertir si los especificadores de clase de almacenamiento como "estático" no son lo primero en un
declaración. Esta advertencia también está habilitada por -Wextra.

-Definición de estilo Wold (Solo C y Objective-C)
Advertir si se utiliza una definición de función de estilo antiguo. Se da una advertencia incluso si hay
un prototipo anterior.

-W tipo de parámetro faltante (Solo C y Objective-C)
Un parámetro de función se declara sin un especificador de tipo en funciones de estilo K & R:

void foo (bar) {}

Esta advertencia también está habilitada por -Wextra.

-Prototipos-Wmissing (Solo C y Objective-C)
Advertir si se define una función global sin una declaración de prototipo previa. Esta
se emite una advertencia incluso si la propia definición proporciona un prototipo. Usa esta opción
para detectar funciones globales que no tienen una declaración de prototipo coincidente en un
archivo de cabecera. Esta opción no es válida para C ++ porque todas las declaraciones de función
proporcionar prototipos y una declaración que no coincida declara una sobrecarga en lugar de
en conflicto con una declaración anterior. Usar -Declaraciones-perdidas para detectar faltantes
declaraciones en C ++.

-Declaraciones-perdidas
Advertir si se define una función global sin una declaración previa. Hazlo incluso si
la propia definición proporciona un prototipo. Utilice esta opción para detectar global
funciones que no están declaradas en archivos de encabezado. En C, no se emiten advertencias para
funciones con declaraciones previas no prototipo; usar -Prototipos-Wmissing para detectar
prototipos faltantes. En C ++, no se emiten advertencias para las plantillas de funciones ni para
funciones en línea, o para funciones en espacios de nombres anónimos.

-Inicializadores-de-campo-faltante
Advierte si el inicializador de una estructura tiene algunos campos faltantes. Por ejemplo, lo siguiente
el código causa tal advertencia, porque "xh" es implícitamente cero:

struct s {int f, g, h; };
estructura sx = {3, 4};

Esta opción no advierte sobre los inicializadores designados, por lo que la siguiente modificación
no activa una advertencia:

struct s {int f, g, h; };
estructura sx = {.f = 3, .g = 4};

En C ++ esta opción tampoco advierte sobre el inicializador {} vacío, por ejemplo:

struct s {int f, g, h; };
sx = {};

Esta advertencia se incluye en -Wextra. Para conseguir otro -Wextra advertencias sin este,
utilizan el -Wextra -Wno-inicializadores-de-campo-faltantes.

-Wno-multichar
No advertir si una constante de varios caracteres ('FOOF') se utiliza. Por lo general, indican un
error tipográfico en el código del usuario, ya que tienen valores definidos por la implementación y no deben ser
utilizado en código portátil.

-Normalizado[=<ninguna|id|nfc|nfkc>]
En ISO C e ISO C ++, dos identificadores son diferentes si son secuencias diferentes de
caracteres. Sin embargo, a veces, cuando los caracteres fuera del conjunto de caracteres ASCII básico
se utilizan, puede tener dos secuencias de caracteres diferentes que tengan el mismo aspecto. Para evitar
confusión, la norma ISO 10646 establece algunos normalización reglas que cuando se aplica
asegúrese de que dos secuencias que tengan el mismo aspecto se conviertan en la misma secuencia. GCC
puede advertirle si está utilizando identificadores que no se han normalizado; esta opción
controla esa advertencia.

Hay cuatro niveles de advertencia compatibles con GCC. El valor predeterminado es -Wnormalizado = nfc,
que advierte sobre cualquier identificador que no esté en la forma normalizada ISO 10646 "C",
NFC. NFC es la forma recomendada para la mayoría de los usos. Es equivalente a -Normalizado.

Desafortunadamente, hay algunos caracteres permitidos en los identificadores por ISO C e ISO C ++
que, cuando se convierten en NFC, no se permiten en los identificadores. Es decir, no hay manera
para usar estos símbolos en ISO C o C ++ portátiles y tener todos sus identificadores en NFC.
-Wnormalized = id suprime la advertencia para estos caracteres. Se espera que el futuro
Las versiones de los estándares involucrados corregirán esto, por lo que esta opción no es
el valor por defecto.

Puede desactivar la advertencia para todos los caracteres escribiendo -Wnormalized = ninguno or
-Wno-normalizado. Solo debe hacer esto si está utilizando alguna otra normalización
esquema (como "D"), porque de lo contrario puede crear fácilmente errores que son literalmente
imposible de ver.

Algunos caracteres en ISO 10646 tienen significados distintos pero se ven idénticos en algunas fuentes
o metodologías de visualización, especialmente una vez que se ha aplicado el formato. Por ejemplo
"\ u207F", "SUPERSCRIPT LATINA MINÚSCULA LETRA N", se muestra como una "n" normal que
se ha colocado en un superíndice. ISO 10646 define el NFKC esquema de normalización para
convierta todos estos en un formulario estándar también, y GCC advierte si su código no está en
NFKC si usa -Wnormalizado = nfkc. Esta advertencia es comparable a una advertencia sobre cada
identificador que contiene la letra O porque podría confundirse con el dígito 0,
y por lo tanto no es el predeterminado, pero puede ser útil como una convención de codificación local si el
El entorno de programación no se puede arreglar para mostrar estos caracteres de forma distinta.

-Wno-obsoleto
No advierta sobre el uso de funciones obsoletas.

-Wno-declaraciones-obsoletas
No advierta sobre el uso de funciones, variables y tipos marcados como obsoletos por
utilizando el atributo "obsoleto".

-Wno-desbordamiento
No advierta sobre el desbordamiento en tiempo de compilación en expresiones constantes.

-Wno-odr
Advierte sobre infracciones de la regla de una definición durante la optimización del tiempo de enlace. Requiere
-flto-odr-type-fusion para ser habilitado. Habilitado por defecto.

-Wopenmp-simd
Advertir si el modelo de coste del vectorizador anula la directiva simd de OpenMP o Cilk Plus
establecido por el usuario. los -fsimd-cost-model = ilimitado La opción se puede utilizar para relajar el costo.
modelo.

-Woverride-init (Solo C y Objective-C)
Advertir si un campo inicializado sin efectos secundarios se anula cuando se utiliza designado
inicializadores.

Esta advertencia se incluye en -Wextra. Para conseguir otro -Wextra advertencias sin este,
utilizan el -Wextra -Wno-override-init.

-Envasado
Advertir si una estructura tiene el atributo empaquetado, pero el atributo empaquetado no tiene
efecto sobre el diseño o tamaño de la estructura. Tales estructuras pueden estar desalineadas por
poco beneficio. Por ejemplo, en este código, la variable "fx" en "struct bar" es
desalineado aunque "struct bar" no tiene el atributo empaquetado:

estructura foo {
int x;
caracteres a, b, c, d;
} __attribute __ ((empaquetado));
barra de estructura {
carácter z;
estructura foo f;
};

-Wpacked-bitfield-compat
Las series 4.1, 4.2 y 4.3 de GCC ignoran el atributo "empaquetado" en los campos de bits de tipo
"carbonizarse". Esto se ha corregido en GCC 4.4, pero el cambio puede dar lugar a diferencias en el
diseño de la estructura. GCC le informa cuando el desplazamiento de dicho campo ha cambiado en GCC
4.4. Por ejemplo, ya no hay un relleno de 4 bits entre el campo "a" y "b" en este
estructura:

estructura foo
{
char a: 4;
char b: 8;
} __attribute__ ((empaquetado));

Esta advertencia está habilitada de forma predeterminada. Usar -Wno-empaquetado-bitfield-compat para deshabilitar esto
advertencia.

-Acolchado
Advertir si se incluye relleno en una estructura, ya sea para alinear un elemento del
estructura o para alinear toda la estructura. A veces, cuando esto sucede, es posible
para reorganizar los campos de la estructura para reducir el relleno y así hacer que el
estructura más pequeña.

-Declaraciones-wredundantes
Advertir si se declara algo más de una vez en el mismo ámbito, incluso en los casos en que
La declaración múltiple es válida y no cambia nada.

-Externos-wnested (Solo C y Objective-C)
Advierte si se encuentra una declaración "externa" dentro de una función.

-Wno-heredado-variadic-ctor
Suprime las advertencias sobre el uso de constructores heredados de C ++ 11 cuando la clase base
heredado de tiene un constructor variadic C; la advertencia está activada de forma predeterminada porque
la elipsis no se hereda.

-Línea ganadora
Advierte si una función declarada como en línea no se puede insertar. Incluso con esto
opción, el compilador no advierte sobre fallas en las funciones en línea declaradas en
encabezados del sistema.

El compilador utiliza una variedad de heurísticas para determinar si debe o no en línea un
función. Por ejemplo, el compilador tiene en cuenta el tamaño de la función que se está
inline y la cantidad de inlining que ya se ha realizado en la función actual.
Por lo tanto, cambios aparentemente insignificantes en el programa fuente pueden causar la
advertencias producidas por -Línea ganadora aparecer o desaparecer.

-Wno-invalido-offsetof (Solo C ++ y Objective-C ++)
Evite que las advertencias apliquen la macro "offsetof" a un tipo que no sea POD. De acuerdo a
el estándar ISO C ++ 2014, la aplicación de "offsetof" a un tipo de diseño no estándar es
indefinido. En las implementaciones de C ++ existentes, sin embargo, "offsetof" normalmente da
resultados significativos. Esta bandera es para usuarios que saben que están escribiendo
código no portátil y que han optado deliberadamente por ignorar la advertencia al respecto.

Las restricciones sobre "offsetof" se pueden relajar en una versión futura del estándar C ++.

-Wno-int-a-puntero-cast
Suprime las advertencias de conversiones al tipo de puntero de un número entero de diferente tamaño. En
C ++, la conversión a un tipo de puntero de menor tamaño es un error. Wint-to-pointer-cast is
habilitado por defecto.

-Wno-puntero-a-int-cast (Solo C y Objective-C)
Suprime las advertencias de conversiones de un puntero a un tipo entero de un tamaño diferente.

-Winvalid-pch
Advierte si se encuentra un encabezado precompilado en la ruta de búsqueda pero no se puede usar.

-Mucho-largo
Advertir si se utiliza el tipo "long long". Esto está habilitado por -Wpedante or
-Wtradicional en los modos ISO C90 y C ++ 98. Para inhibir los mensajes de advertencia, utilice
-Wno-largo-largo.

-Wvariadic-macros
Advertir si se utilizan macros variadic en modo ISO C90, o si la sintaxis alternativa GNU es
utilizado en el modo ISO C99. Esto está habilitado por -Wpedante or -Wtradicional. Para
inhibir los mensajes de advertencia, utilizar -Wno-macros-variádicas.

-Wvarargs
Advertir sobre el uso cuestionable de las macros utilizadas para manejar argumentos variables como
"va_start". Esto es predeterminado. Para inhibir los mensajes de advertencia, utilice -Wno-varargs.

-Wvector-operación-rendimiento
Advertir si la operación vectorial no se implementa a través de las capacidades SIMD de la arquitectura.
Principalmente útil para la puesta a punto del rendimiento. Se puede implementar la operación vectorial
"por partes", lo que significa que la operación escalar se realiza en cada vector
elemento; "en paralelo", lo que significa que la operación vectorial se implementa utilizando
escalares de tipo más ancho, que normalmente es más eficiente en el rendimiento; y "como soltero
escalar ", lo que significa que el vector encaja en un tipo escalar.

-Wno-virtual-mover-asignar
Suprima las advertencias sobre la herencia de una base virtual con un movimiento de C ++ 11 no trivial
operador de asignación. Esto es peligroso porque si se puede acceder a la base virtual a lo largo
más de una ruta, se mueve varias veces, lo que puede significar que ambos objetos terminan en
el estado de mudanza. Si el operador de asignación de movimiento está escrito para evitar moverse de
un objeto movido, esta advertencia se puede desactivar.

-Wvla
Advertir si se utiliza una matriz de longitud variable en el código. -Wno-vla evita el -Wpedante
advertencia de la matriz de longitud variable.

-Wvolatile-registro-var
Advierte si una variable de registro se declara volátil. El modificador volátil no
inhibir todas las optimizaciones que pueden eliminar lecturas y / o escrituras para registrarse
variables. Esta advertencia está habilitada por -Pared.

-Wdisabled-optimización
Advertir si un pase de optimización solicitado está deshabilitado. Esta advertencia generalmente no
indicar que hay algún problema con su código; simplemente indica que GCC
los optimizadores no pueden manejar el código de manera efectiva. A menudo, el problema es que tu
el código es demasiado grande o complejo; GCC se niega a optimizar programas cuando la optimización
en sí misma es probable que lleve una cantidad excesiva de tiempo.

-Signo-puntero (Solo C y Objective-C)
Advierte sobre el paso o la asignación de un argumento de puntero con distinto signo. Esta
La opción solo es compatible con C y Objective-C. Está implícito en -Pared y por
-Wpedante, que se puede desactivar con -Wno-signo-puntero.

-Wstack-protector
Esta opción solo está activa cuando -fstack-protector está activo. Advierte sobre funciones
que no están protegidos contra la rotura de la pila.

-Woverlength-cuerdas
Advierte sobre las constantes de cadena que son más largas que la longitud "mínima máxima"
especificado en el estándar C. Los compiladores modernos generalmente permiten constantes de cadena que
son mucho más largos que el límite mínimo estándar, pero los programas muy portátiles deben
Evite el uso de cuerdas más largas.

Se aplica el límite después de cadena de concatenación constante, y no cuenta el final
NUL. En C90, el límite era de 509 caracteres; en C99, se elevó a 4095. C ++ 98 no
no especificar un máximo mínimo normativo, por lo que no diagnosticamos cadenas de longitud excesiva en
C ++.

Esta opción está implícita en -Wpedante, y se puede desactivar con
-Wno-sobrelongitud-cadenas.

-Wsin sufijo-flotante-constantes (Solo C y Objective-C)
Emita una advertencia para cualquier constante flotante que no tenga sufijo. Cuando se utiliza
Junto con -Wsystem-encabezados advierte sobre tales constantes en los archivos de encabezado del sistema.
Esto puede ser útil al preparar código para usar con el pragma "FLOAT_CONST_DECIMAL64"
desde la extensión de coma flotante decimal hasta C99.

-Wno-designado-init (Solo C y Objective-C)
Suprime las advertencias cuando se utiliza un inicializador posicional para inicializar una estructura que
se ha marcado con el atributo "designado_init".

Opciones para Depuración Programa or GCC
GCC tiene varias opciones especiales que se utilizan para depurar su programa o GCC:

-g Producir información de depuración en el formato nativo del sistema operativo (puñaladas, COFF,
XCOFF o DWARF 2). GDB puede trabajar con esta información de depuración.

En la mayoría de los sistemas que utilizan el formato de puñaladas, -g permite el uso de información de depuración adicional
que solo GDB puede usar; esta información adicional hace que la depuración funcione mejor en GDB pero
probablemente hace que otros depuradores se bloqueen o se nieguen a leer el programa. Si quieres
controlar con certeza si generar la información adicional, utilizar -gstabs +, -gstabs,
-gxcoff +, -gxcoffo -gvms (vea abajo).

GCC te permite usar -g -O. Los atajos tomados por el código optimizado pueden
ocasionalmente producen resultados sorprendentes: algunas variables que declaró pueden no existir en
todos; el flujo de control puede moverse brevemente donde no lo esperaba; algunas declaraciones pueden
no ser ejecutados porque calculan resultados constantes o sus valores ya están en
mano; algunas sentencias pueden ejecutarse en diferentes lugares porque se han movido
de bucles.

Sin embargo, resulta posible depurar la salida optimizada. Esto lo hace razonable
para usar el optimizador para programas que puedan tener errores.

Las siguientes opciones son útiles cuando GCC se genera con la capacidad para más
de un formato de depuración.

-gsplit-enano
Separe tanta información de depuración enana como sea posible en un archivo de salida separado
con la extensión .dwo. Esta opción permite que el sistema de compilación evite vincular archivos
con información de depuración. Para ser útil, esta opción requiere un depurador capaz de
leer archivos .dwo.

-ggdb
Genere información de depuración para que la utilice GDB. Esto significa usar el más expresivo
formato disponible (DWARF 2, puñaladas o el formato nativo si ninguno de los
compatible), incluidas las extensiones de GDB si es posible.

-gpubnames
Genere secciones enanas .debug_pubnames y .debug_pubtypes.

-ggnu-nombres de pub
Genere las secciones .debug_pubnames y .debug_pubtypes en un formato adecuado para
conversión en un índice BGF. Esta opción solo es útil con un enlazador que puede
producir la versión 7 del índice GDB.

-gstabs
Producir información de depuración en formato de puñaladas (si es compatible), sin GDB
extensiones. Este es el formato utilizado por DBX en la mayoría de los sistemas BSD. En MIPS, Alpha y
En los sistemas System V Release 4, esta opción produce resultados de depuración que no son
entendido por DBX o SDB. En los sistemas System V Release 4, esta opción requiere el GNU
ensamblador.

-feliminar-símbolos-de-depuración-no utilizados
Producir información de depuración en formato de puñaladas (si es compatible), solo para símbolos
que se utilizan realmente.

-femit-clase-debug-siempre
En lugar de emitir información de depuración para una clase C ++ en un solo archivo de objeto,
emitirlo en todos los archivos de objeto usando la clase. Esta opción debe usarse solo con
depuradores que no pueden manejar la forma en que GCC normalmente emite información de depuración
para las clases porque el uso de esta opción aumenta el tamaño de la información de depuración en
tanto como un factor de dos.

-fdebug-types-sección
Cuando se utiliza DWARF versión 4 o superior, los tipos de DIE se pueden poner en su propio
sección ".debug_types" en lugar de hacerlos parte de la sección ".debug_info". Eso
Es más eficiente ponerlos en secciones comdat separadas, ya que el enlazador puede entonces
eliminar duplicados. Pero no todos los consumidores DWARF admiten todavía las secciones ".debug_types"
y en algunos objetos, ".debug_types" produce una depuración más grande en lugar de más pequeña
información.

-gstabs +
Producir información de depuración en formato stabs (si es compatible), usando GNU
extensiones entendidas solo por el depurador GNU (GDB). El uso de estas extensiones es
Es probable que otros depuradores se bloqueen o se nieguen a leer el programa.

-gcoff
Produzca información de depuración en formato COFF (si es compatible). Este es el
formato utilizado por SDB en la mayoría de los sistemas System V antes de System V Release 4.

-gxcoff
Produzca información de depuración en formato XCOFF (si es compatible). Este es el
formato utilizado por el depurador DBX en sistemas IBM RS / 6000.

-gxcoff +
Produzca información de depuración en formato XCOFF (si es compatible), usando GNU
extensiones entendidas solo por el depurador GNU (GDB). El uso de estas extensiones es
Es probable que otros depuradores se bloqueen o se nieguen a leer el programa, y ​​puede causar
ensambladores distintos del ensamblador GNU (GAS) fallarán con un error.

-enano-versión
Produzca información de depuración en formato DWARF (si es compatible). El valor de
versión puede ser 2, 3, 4 o 5; la versión predeterminada para la mayoría de los objetivos es 4. DWARF
La versión 5 es solo experimental.

Tenga en cuenta que con la versión 2 de DWARF, algunos puertos requieren y siempre usan algunos
Extensiones DWARF 3 en las mesas de desenrollado.

La versión 4 puede requerir GDB 7.0 y -asignaciones-de-seguimiento-de-fvar para obtener el máximo beneficio.

-conmutadores-gcc-de-grecord
Este modificador hace que las opciones de la línea de comandos que se utilizan para invocar el compilador
afectar la generación de código que se agregará al atributo DW_AT_producer en DWARF
información de depuración. Las opciones se concatenan con espacios que las separan de
entre sí y de la versión del compilador. Ver también -frecord-gcc-interruptores Por otro
forma de almacenar las opciones del compilador en el archivo objeto. Este es el predeterminado.

-gno-registro-gcc-interruptores
No permitir agregar opciones de línea de comandos al atributo DW_AT_producer en DWARF
información de depuración.

-gstrict-enano
No permitir el uso de extensiones de una versión estándar de DWARF posterior a la seleccionada con
-enano-versión. En la mayoría de los objetivos que utilizan extensiones DWARF no conflictivas de versiones posteriores
Se permiten versiones estándar.

-gno-estricto-enano
Permitir el uso de extensiones de la versión estándar DWARF posterior a la seleccionada con
-enano-versión.

-gz[=tipo]
Produzca secciones de depuración comprimidas en formato DWARF, si es compatible. Si tipo is
no dado, el tipo predeterminado depende de las capacidades del ensamblador y el enlazador
usado. tipo puede ser uno de ninguna (no comprima las secciones de depuración), zlib (usa zlib
compresión en formato ELF gABI), o zlib-gnu (use la compresión zlib en GNU tradicional
formato). Si el vinculador no admite la escritura de secciones de depuración comprimidas, la opción
se rechaza. De lo contrario, si el ensamblador no los admite, -gz es silenciosamente
ignorado al producir archivos de objeto.

-gvms
Produzca información de depuración en formato de depuración Alpha / VMS (si es compatible). Esta
es el formato utilizado por DEBUG en los sistemas Alpha / VMS.

-gnivel
-ggdbnivel
-gstabsnivel
-gcoffnivel
-gxcoffnivel
-gvmsnivel
Solicite información de depuración y también use nivel para especificar cuánta información. los
el nivel predeterminado es 2.

El nivel 0 no produce ninguna información de depuración. Por lo tanto, -g0 niega -g.

El nivel 1 produce información mínima, suficiente para hacer retrocesos en partes del
programa que no planeas depurar. Esto incluye descripciones de funciones y
variables externas y tablas de números de línea, pero no hay información sobre las variables locales.

El nivel 3 incluye información adicional, como todas las macrodefiniciones presentes en el
programa. Algunos depuradores admiten la expansión de macros cuando usa -g3.

-gdwarf-2 no acepta un nivel de depuración concatenado, porque GCC solía admitir un
opción -g enano que pretendía generar información de depuración en la versión 1 de DWARF
formato (que es muy diferente de la versión 2), y habría sido demasiado confuso.
Ese formato de depuración está obsoleto desde hace mucho tiempo, pero la opción no se puede cambiar ahora. En su lugar use
un adicional de -gnivel opción para cambiar el nivel de depuración de DWARF.

-galternar
Desactive la generación de información de depuración, si al omitir esta opción se genera, o actívela
encendido en el nivel 2 de lo contrario. La posición de este argumento en la línea de comando no
importar; entra en vigor después de que se procesan todas las demás opciones, y lo hace solo
una vez, no importa cuántas veces se administre. Esto está destinado principalmente a ser utilizado con
-fcompare-depurar.

-fsanitize = dirección
Habilite AddressSanitizer, un detector rápido de errores de memoria. Las instrucciones de acceso a la memoria son
instrumentado para detectar errores fuera de los límites y usar después de que no haya errores. Ver
<https://github.com/google/sanitizers/wiki/AddressSanitizer> para más detalles. los
El comportamiento en tiempo de ejecución se puede influir utilizando el ASAN_OPCIONES Variable ambiental. Cuando
establecido en "ayuda = 1", las opciones disponibles se muestran al inicio del instrumended
programa. Ver
<https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags> para un
lista de opciones admitidas.

-fsanitize = dirección-kernel
Habilite AddressSanitizer para el kernel de Linux. Verhttps://github.com/google/kasan/wiki>
para más información.

-fsanitize = hilo
Habilite ThreadSanitizer, un detector de carrera de datos rápido. Las instrucciones de acceso a la memoria son
instrumentado para detectar errores de carrera de datos. Ver
<https://github.com/google/sanitizers/wiki#threadsanitizer> para más detalles. La carrera-
El comportamiento del tiempo puede ser influenciado usando el TSAN_OPCIONES Variable ambiental; ver
<https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags> para una lista de
opciones admitidas.

-fsanitize = fuga
Habilite LeakSanitizer, un detector de fugas de memoria. Esta opción solo importa para la vinculación de
ejecutables y si ninguno -fsanitize = dirección ni -fsanitize = hilo se utiliza. En eso
caso de que el ejecutable esté vinculado a una biblioteca que anule "malloc" y otros
funciones de asignación. Ver
<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer> para más
detalles. El comportamiento en tiempo de ejecución se puede modificar mediante el LSAN_OPCIONES entorno
variable.

-fsanitize = indefinido
Habilite UndefinedBehaviorSanitizer, un detector rápido de comportamiento indefinido. Varios
Los cálculos están instrumentados para detectar comportamientos indefinidos en tiempo de ejecución. Actual
las subopciones son:

-fsanitize = turno
Esta opción permite comprobar que el resultado de una operación de turno no es
indefinido. Tenga en cuenta que lo que exactamente se considera indefinido difiere ligeramente
entre C y C ++, así como entre ISO C90 y C99, etc.

-fsanitize = entero-dividir-por-cero
Detecta la división de enteros por cero, así como la división "INT_MIN / -1".

-fsanitize = inalcanzable
Con esta opción, el compilador convierte la llamada "__builtin_unreachable" en una
en su lugar, llame al mensaje de diagnóstico. Al llegar a la llamada "__builtin_unreachable",
el comportamiento no está definido.

-fsanitize = vla-bound
Esta opción indica al compilador que compruebe que el tamaño de una longitud variable
la matriz es positiva.

-fsanitize = nulo
Esta opción habilita la verificación del puntero. En particular, la aplicación construida con
esta opción activada emitirá un mensaje de error cuando intente eliminar la referencia a un
Puntero NULL, o si una referencia (posiblemente una referencia rvalue) está vinculada a un NULL
puntero, o si se invoca un método en un objeto apuntado por un puntero NULL.

-fsanitize = volver
Esta opción habilita la verificación de la declaración de devolución. Programas creados con esta opción
encendida emitirá un mensaje de error cuando el final de una función no nula sea
alcanzado sin realmente devolver un valor. Esta opción solo funciona en C ++.

-fsanitize = desbordamiento-entero-firmado
Esta opción habilita la verificación de desbordamiento de enteros con signo. Comprobamos que el resultado de
"+", "*", y tanto unario como binario "-" no se desbordan en el signo
aritmética. Tenga en cuenta que se deben tener en cuenta las reglas de promoción de números enteros. Es decir,
lo siguiente no es un desbordamiento:

carácter firmado a = SCHAR_MAX;
a ++;

-fsanitize = límites
Esta opción habilita la instrumentación de los límites de la matriz. Varios fuera de límites
Se detectan accesos. Miembros de matriz flexibles, matrices similares a miembros de matriz flexible,
y los inicializadores de variables con almacenamiento estático no están instrumentados.

-fsanitize = alineación
Esta opción permite verificar la alineación de los punteros cuando están desreferenciados,
o cuando una referencia está vinculada a un objetivo alineado insuficientemente, o cuando un método o
El constructor se invoca en un objeto insuficientemente alineado.

-fsanitize = tamaño del objeto
Esta opción habilita la instrumentación de referencias de memoria usando el
Función "__builtin_object_size". Varios accesos de puntero fuera de límites son
detectado.

-fsanitize = flotar-dividir-por-cero
Detecta la división de punto flotante por cero. A diferencia de otras opciones similares,
-fsanitize = flotar-dividir-por-cero no está habilitado por -fsanitize = indefinido, Desde
La división de punto flotante por cero puede ser una forma legítima de obtener infinitos.
y NaNs.

-fsanitize = desbordamiento-fundido-flotante
Esta opción habilita la verificación de conversión de tipo de punto flotante a entero. Verificamos
que el resultado de la conversión no se desborde. A diferencia de otros similares
opciones, -fsanitize = desbordamiento-fundido-flotante no está habilitado por -fsanitize = indefinido.
Esta opción no funciona bien con las excepciones "FE_INVALID" habilitadas.

-fsanitize = atributo no nulo
Esta opción habilita la instrumentación de llamadas, comprobando si los valores nulos no son
pasados ​​a argumentos marcados como que requieren un valor no nulo por la función "no nulo"
atributo.

-fsanitize = devuelve-atributo-no nulo
Esta opción habilita la instrumentación de declaraciones de retorno en funciones marcadas con
atributo de función "returns_nonnull", para detectar la devolución de valores nulos de tales
funciones.

-fsanitize = bool
Esta opción habilita la instrumentación de cargas desde bool. Si un valor distinto de 0/1
está cargado, se emite un error en tiempo de ejecución.

-fsanitize = enumeración
Esta opción habilita la instrumentación de cargas de un tipo de enumeración. Si un valor
se carga fuera del rango de valores para el tipo de enumeración, se produce un error en tiempo de ejecución
emitido.

-fsanitize = vptr
Esta opción habilita la instrumentación de llamadas a funciones de miembros de C ++, accesos de miembros
y algunas conversiones entre punteros a clases base y derivadas, para verificar la
El objeto referenciado tiene el tipo dinámico correcto.

Aunque la -ftrapv hace que se emitan trampas para desbordamientos firmados, -fsanitize = indefinido
da un mensaje de diagnóstico. Actualmente, esto solo funciona para la familia de idiomas C.

-fno-sanitize = all
Esta opción desactiva todos los desinfectantes previamente habilitados. -fsanitize = todo no es
permitido, ya que algunos desinfectantes no se pueden usar juntos.

-fasan-sombra-offset =número
Esta opción obliga a GCC a utilizar un desplazamiento de sombra personalizado en las comprobaciones de AddressSanitizer. Está
útil para experimentar con diferentes diseños de memoria de sombra en Kernel
DirecciónSanitizer.

-fsanitizar-recuperar[=opta]
-fsanitize-recovery = controla el modo de recuperación de errores para los desinfectantes mencionados en comas
lista separada de opta. Habilitar esta opción para un componente desinfectante hace que
Intente continuar ejecutando el programa como si no hubiera ocurrido ningún error. Esto significa múltiples
Los errores de tiempo de ejecución se pueden informar en una sola ejecución del programa, y ​​el código de salida del
El programa puede indicar éxito incluso cuando se han informado errores. los
-fno-sanitize-recovery = La opción se puede utilizar para alterar este comportamiento: solo la primera
se informa el error detectado y el programa sale con un código de salida distinto de cero.

Actualmente, esta función solo funciona para -fsanitize = indefinido (y sus subopciones excepto
para -fsanitize = inalcanzable y -fsanitize = volver), -fsanitize = desbordamiento-fundido-flotante,
-fsanitize = flotar-dividir-por-cero y -fsanitize = dirección-kernel. Para estos desinfectantes
la recuperación de errores está activada de forma predeterminada. -fsanitize-recovery = todo y
-fno-sanitize-recovery = todo también se acepta, el primero permite la recuperación de todos
desinfectantes que lo soportan, este último deshabilita la recuperación de todos los desinfectantes que
apoyarlo.

Sintaxis sin explícito opta El parámetro está en desuso. Es equivalente a

-fsanitize-recovery = indefinido, float-cast-overflow, float-divide-by-zero

Del mismo modo -fno-desinfectar-recuperar es equivalente a

-fno-sanitize-recovery = undefined, float-cast-overflow, float-divide-by-zero

-fsanitize-indefinido-trampa-en-error
La -fsanitize-indefinido-trampa-en-error La opción indica al compilador que informe
comportamiento indefinido utilizando "__builtin_trap" en lugar de una rutina de biblioteca "libubsan".
La ventaja de esto es que la biblioteca "libubsan" no es necesaria y no está vinculada
adentro, por lo que se puede utilizar incluso en entornos independientes.

-fcheck-puntero-límites
Habilite la instrumentación de Pointer Bounds Checker. Cada referencia de memoria está instrumentada
con comprobaciones del puntero utilizado para el acceso a la memoria contra los límites asociados con ese
puntero.

Actualmente solo hay disponible una implementación para Intel MPX, por lo tanto, el objetivo x86 y
-mmpx son necesarios para habilitar esta función. La instrumentación basada en MPX requiere un
biblioteca de tiempo de ejecución para habilitar MPX en hardware y manejar señales de violación de límites. Por
predeterminado cuando -fcheck-puntero-límites y -mmpx Las opciones se utilizan para vincular un programa, el
Vínculos del controlador GCC contra el libmpx biblioteca en tiempo de ejecución y libmpxwrappers Biblioteca. Eso
también pasa '-z bndplt' a un enlazador en caso de que admita esta opción (que está marcada
en la configuración de libmpx). Tenga en cuenta que las versiones antiguas del vinculador pueden ignorar la opción. Oro
El vinculador no admite la opción '-z bndplt'. Sin soporte '-z bndplt' en el vinculador todo
las llamadas a bibliotecas dinámicas pierden los límites pasados, lo que reduce el nivel de protección general. Es
Se recomienda encarecidamente utilizar el enlazador con soporte '-z bndplt'. En caso de que dicho enlazador no sea
disponible se aconseja utilizar siempre -estatic-libmpxwrappers para una mejor protección
nivel o uso -estático para evitar completamente las llamadas externas a bibliotecas dinámicas. MPX-
La instrumentación basada se puede utilizar para depurar y también se puede incluir en la producción.
código para aumentar la seguridad del programa. Dependiendo del uso, puede tener diferentes
requisitos para la biblioteca en tiempo de ejecución. La versión actual de la biblioteca en tiempo de ejecución MPX
está más orientado a su uso como herramienta de depuración. El uso de la biblioteca en tiempo de ejecución MPX implica
-lphilo. Vea también la -estatic-libmpx. Se puede influir en el comportamiento de la biblioteca en tiempo de ejecución
usando varios CHKP_RT_ * Variables de entorno. Ver
<https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler> para más
Detalles.

La instrumentación generada puede ser controlada por varios -fchkp- * opciones y por el
Atributo de campo de estructura "bnd_variable_size" y "bnd_legacy", y "bnd_instrument"
atributos de función. GCC también proporciona una serie de funciones integradas para controlar
el Comprobador de límites de puntero.

-fchkp-comprobar-tipo-incompleto
Genere comprobaciones de límites de puntero para variables con tipo incompleto. Habilitado por
predeterminado.

-fchkp-estrechos-límites
Controla los límites utilizados por Pointer Bounds Checker para punteros a campos de objeto. Si
el estrechamiento está habilitado, entonces se utilizan los límites de campo. De lo contrario, se utilizan límites de objeto.
Vea también -fchkp-matriz-estrecha-a-la-más-interna y -fchkp-primer-campo-tiene-límites-propios.
Habilitado por defecto.

-fchkp-primer-campo-tiene-límites-propios
Obliga a Pointer Bounds Checker a utilizar límites reducidos para la dirección de la primera
campo en la estructura. De forma predeterminada, un puntero al primer campo tiene los mismos límites
como un indicador de toda la estructura.

-fchkp-matriz-estrecha-a-la-más-interna
Obliga a Pointer Bounds Checker a utilizar los límites de las matrices más internas en caso de
acceso a la matriz estática. De forma predeterminada, esta opción está deshabilitada y los límites de la más externa
se utilizan matriz.

-fchkp-optimizar
Habilita las optimizaciones de Pointer Bounds Checker. Habilitado de forma predeterminada en la optimización
-O, -O2, -O3.

-fchkp-usa-funciones-de-cadena-rápidas
Habilita el uso de versiones * _nobnd de funciones de cadena (sin copiar límites) por Pointer
Comprobador de límites. Desactivado por defecto.

-fchkp-usa-funciones-de-cadena-nochk
Habilita el uso de versiones * _nochk de funciones de cadena (sin verificar límites) por Pointer
Comprobador de límites. Desactivado por defecto.

-fchkp-usar-límites-estáticos
Permitir que Pointer Bounds Checker genere límites estáticos que contengan límites de estática.
variables. Habilitado por defecto.

-fchkp-usar-límites-constantes-estáticos
Use límites inicializados estáticamente para límites constantes en lugar de generarlos cada uno
tiempo que se requieren. Por defecto habilitado cuando -fchkp-usar-límites-estáticos está habilitado.

-fchkp-tratar-cero-tamaño-dinámico-como-infinito
Con esta opción, los objetos con tipo incompleto cuyo tamaño obtenido dinámicamente es cero
Pointer Bounds Checker los trata como si tuvieran un tamaño infinito. Esta opción
puede ser útil si un programa está vinculado con una biblioteca que falta información de tamaño para algunos
símbolos. Desactivado por defecto.

-fchkp-comprobar-leer
Indica al Pointer Bounds Checker que genere comprobaciones para todos los accesos de lectura a la memoria.
Habilitado por defecto.

-fchkp-comprobar-escribir
Indica al Pointer Bounds Checker que genere comprobaciones para todos los accesos de escritura a la memoria.
Habilitado por defecto.

-fchkp-store-limits
Indica al Comprobador de límites de puntero que genere almacenes de límites para escrituras de puntero.
Habilitado por defecto.

-fchkp-instrumento-llamadas
Indica al Comprobador de límites de puntero que pase los límites del puntero a las llamadas. Habilitado por defecto.

-fchkp-instrumento-marcado-solamente
Indica al Pointer Bounds Checker que solo instrumente las funciones marcadas con el
Atributo "bnd_instrument". Desactivado por defecto.

-fchkp-use-envoltorios
Permite que Pointer Bounds Checker reemplace llamadas a funciones integradas con llamadas a
funciones de envoltura. Cuando -fchkp-use-envoltorios se utiliza para vincular un programa, el controlador GCC
enlaza automáticamente contra libmpxwrappers. Vea también la -estatic-libmpxwrappers. Activado
por defecto

-fdump-final-insns[=presentar]
Volcar la representación interna final (RTL) a presentar. Si el argumento opcional es
omitido (o si presentar es "."), el nombre del archivo de volcado se determina agregando
".gkd" al nombre del archivo de salida de la compilación.

-fcompare-depurar[=opta]
Si no se produce ningún error durante la compilación, ejecute el compilador por segunda vez, agregando opta y
-fcompare-debug-segundo a los argumentos pasados ​​a la segunda compilación. Volcar el
representación interna final en ambas compilaciones, e imprime un error si difieren.

Si se omite el signo igual, el valor predeterminado -galternar se utiliza.

La variable de entorno GCC_COMPARE_DEBUG, si está definido, no vacío y distinto de cero,
habilita implícitamente -fcompare-depurar. Si GCC_COMPARE_DEBUG se define a una cadena
comenzando con un guión, luego se usa para opta, de lo contrario el predeterminado -galternar is
usado.

-fcompare-debug =, con el signo igual pero sin opta, es equivalente a
-fno-comparar-depurar, que inhabilita el dumping de la representación final y la
segunda compilación, evitando incluso GCC_COMPARE_DEBUG surta efecto.

Para verificar la cobertura total durante -fcompare-depurar probar, establecer GCC_COMPARE_DEBUG decir
-fcompare-depuración-no-anulada, que GCC rechaza como una opción no válida en cualquier
compilación (en lugar de preprocesamiento, ensamblaje o vinculación). Para recibir solo una advertencia
pólipo GCC_COMPARE_DEBUG a -w% n-fcompare-debug no anulado lo haré

-fcompare-debug-segundo
Esta opción se pasa implícitamente al compilador para la segunda compilación solicitada
by -fcompare-depurar, junto con opciones para silenciar advertencias y omitir otras opciones
eso causaría salidas del compilador de efectos secundarios en archivos o en la salida estándar.
Los archivos de volcado y los archivos temporales conservados se renombran para que contengan el ".gk"
extensión adicional durante la segunda compilación, para evitar sobrescribir los
generado por el primero.

Cuando esta opción se pasa al controlador del compilador, hace que el la primera compilación para
ser omitido, lo que lo hace útil para poco más que depurar el compilador propiamente dicho.

-feliminado-enano2-dups
Comprima la información de depuración de DWARF 2 eliminando la información duplicada sobre
cada símbolo. Esta opción solo tiene sentido al generar la depuración DWARF 2
información con -gdwarf-2.

-femit-struct-depuración-baseonly
Emitir información de depuración para tipos similares a estructuras solo cuando el nombre base del
El archivo de origen de la compilación coincide con el nombre base del archivo en el que se define la estructura.

Esta opción reduce sustancialmente el tamaño de la información de depuración, pero en
pérdida potencial significativa en la información de tipo para el depurador. Ver
-femit-struct-debug-reducido para una opción menos agresiva. Ver
-femit-estructura-depuración-detallada para un control más detallado.

Esta opción solo funciona con DWARF 2.

-femit-struct-debug-reducido
Emitir información de depuración para tipos similares a estructuras solo cuando el nombre base del
archivo de origen de compilación coincide con el nombre base del archivo en el que se define el tipo,
a menos que la estructura sea una plantilla o esté definida en un encabezado del sistema.

Esta opción reduce significativamente el tamaño de la información de depuración, con algunos
pérdida potencial de información de tipo para el depurador. Ver -femit-struct-depuración-baseonly
para una opción más agresiva. Ver -femit-estructura-depuración-detallada para más detalles
controlar.

Esta opción solo funciona con DWARF 2.

-femit-estructura-depuración-detallada[=lista de especificaciones]
Especifique los tipos de estructura para los que el compilador genera información de depuración. los
la intención es reducir la información de depuración de estructura duplicada entre diferentes archivos de objeto
dentro del mismo programa.

Esta opción es una versión detallada de -femit-struct-debug-reducido y
-femit-struct-depuración-baseonly, que sirve para la mayoría de las necesidades.

Una especificación tiene la sintaxis [dir:|Indiana:][orden:|género:](cualquier|sis|bases|ninguna)

La primera palabra opcional limita la especificación a las estructuras que se utilizan directamente
(dir:) o utilizado indirectamente (Indiana:). Un tipo de estructura se usa directamente cuando es el tipo
de una variable, miembro. Los usos indirectos surgen a través de punteros a estructuras. Es decir,
cuando el uso de una estructura incompleta es válido, el uso es indirecto. Un ejemplo es struct
una directo; struct dos * indirecto;.

La segunda palabra opcional limita la especificación a estructuras ordinarias (orden:) o
estructuras genéricasgénero:). Las estructuras genéricas son un poco complicadas de explicar. Para C ++,
estas son especializaciones no explícitas de clases de plantilla o clases que no son de plantilla
dentro de lo anterior. Otros lenguajes de programación tienen genéricos, pero
-femit-estructura-depuración-detallada aún no los implementa.

La tercera palabra especifica los archivos fuente para aquellas estructuras para las que el compilador
debería emitir información de depuración. Los valores ninguna y cualquier tienen el significado normal. los
propuesta de bases significa que la base del nombre del archivo en el que la declaración de tipo
aparece debe coincidir con la base del nombre del archivo de compilación principal. En la práctica,
esto significa que al compilar foo.c, se genera información de depuración para los tipos
declarado en ese archivo y foo.h, pero no otros archivos de encabezado. El valor sis significa
esos tipos satisfaciendo bases o declarado en los encabezados del compilador o del sistema.

Es posible que deba experimentar para determinar la mejor configuración para su aplicación.

El valor predeterminado es -femit-estructura-depuración-detallada = todo.

Esta opción solo funciona con DWARF 2.

-fno-fusionar-cadenas-de-depuración
Indique al vinculador que no combine cadenas en la información de depuración que se
idéntico en diferentes archivos de objeto. La fusión no es compatible con todos los ensambladores o
enlazadores. La combinación reduce el tamaño de la información de depuración en el archivo de salida en
el costo de aumentar el tiempo de procesamiento del enlace. La combinación está habilitada de forma predeterminada.

-fdebug-prefix-map =los ancianos =nueva
Al compilar archivos en el directorio los ancianos , registra la información de depuración que los describe como
in nueva preferiblemente.

-fno-dwarf2-cfi-asm
Emitir información de desenrollado de DWARF 2 como la sección ".eh_frame" generada por el compilador en lugar de usar
Directivas GAS ".cfi_ *".

-p Genere código adicional para escribir información de perfil adecuada para el programa de análisis
profe. Debe utilizar esta opción al compilar los archivos de origen sobre los que desea obtener datos,
y también debe usarlo al vincular.

-página Genere código adicional para escribir información de perfil adecuada para el programa de análisis
profesor. Debe utilizar esta opción al compilar los archivos de origen sobre los que desea obtener datos,
y también debe usarlo al vincular.

-Q Hace que el compilador imprima cada nombre de función a medida que se compila, e imprime algunos
estadísticas sobre cada pasada cuando termina.

-informe-de-tiempo
Hace que el compilador imprima algunas estadísticas sobre el tiempo consumido por cada pasada cuando
acabados

-informe-fmem
Hace que el compilador imprima algunas estadísticas sobre la asignación de memoria permanente cuando
acabados

-fmem-informe-wpa
Hace que el compilador imprima algunas estadísticas sobre la asignación de memoria permanente para el WPA
fase solamente.

-fpre-ipa-mem-informe
-fpost-ipa-mem-informe
Hace que el compilador imprima algunas estadísticas sobre la asignación de memoria permanente antes o
después de la optimización entre procedimientos.

-fprofile-informe
Hace que el compilador imprima algunas estadísticas sobre la coherencia del perfil (estimado)
y efecto de pases individuales.

-fstack-use
Hace que la información de uso de la pila de salida del compilador para el programa, por función
base. El nombre de archivo para el volcado se crea agregando .su En el correo electrónico “Su Cuenta de Usuario en su Nuevo Sistema XNUMXCX”. nombre auxiliar. nombre auxiliar is
generado a partir del nombre del archivo de salida, si se especifica explícitamente y no es un
ejecutable; de ​​lo contrario, es el nombre base del archivo fuente. Una entrada se compone de
tres campos:

* El nombre de la función.

* Varios bytes.

* Uno o más calificadores: "estático", "dinámico", "acotado".

El calificador "estático" significa que la función manipula la pila de forma estática: a
Se asigna un número fijo de bytes para la trama en la entrada de la función y se libera el
salida de función; de lo contrario, no se realizan ajustes de pila en la función. El segundo
campo es este número fijo de bytes.

El calificador "dinámico" significa que la función manipula la pila dinámicamente: en
Además de la asignación estática descrita anteriormente, los ajustes de la pila se realizan en el
cuerpo de la función, por ejemplo, para empujar / desplegar argumentos alrededor de llamadas a funciones. Si el
El calificador "acotado" también está presente, el monto de estos ajustes está acotado a
tiempo de compilación y el segundo campo es un límite superior de la cantidad total de pila utilizada
por la función. Si no está presente, el monto de estos ajustes no está acotado
en tiempo de compilación y el segundo campo solo representa la parte acotada.

-fprofile-arcos
Agregue código para que el programa fluya arcos están instrumentados. Durante la ejecución del programa
registra cuántas veces se ejecuta cada rama y llamada y cuántas veces se toma
o devoluciones. Cuando el programa compilado sale, guarda estos datos en un archivo llamado
nombreaux.gcda para cada archivo fuente. Los datos se pueden utilizar para perfiles dirigidos
optimizaciones-franch-probabilidades), o para análisis de cobertura de prueba
(-cobertura-de-prueba). Cada archivo de objeto nombre auxiliar se genera a partir del nombre del
archivo de salida, si se especifica explícitamente y no es el ejecutable final; de lo contrario,
es el nombre base del archivo fuente. En ambos casos se elimina cualquier sufijo (p. Ej.
foo.gcda para archivo de entrada dir / foo.co dir / foo.gcda para el archivo de salida especificado como -o
dir / foo.o).

--cobertura
Esta opción se utiliza para compilar y vincular código instrumentado para análisis de cobertura. los
opción es sinónimo de -fprofile-arcos -cobertura-de-prueba (al compilar) y -lgcov
(al vincular). Consulte la documentación de esas opciones para obtener más detalles.

* Compile los archivos fuente con -fprofile-arcos más optimización y generación de código
opciones. Para el análisis de cobertura de prueba, utilice el -cobertura-de-prueba .
No es necesario crear un perfil de cada archivo de origen en un programa.

* Vincula tus archivos de objeto con -lgcov or -fprofile-arcos (este último implica el
anterior).

* Ejecute el programa en una carga de trabajo representativa para generar el perfil de arco
información. Esto puede repetirse tantas veces como desee. Puede ejecutar concurrente
instancias de su programa, y ​​siempre que el sistema de archivos admita el bloqueo, el
Los archivos de datos se actualizarán correctamente. También se detectan llamadas de "bifurcación" y
manejado correctamente (no se producirá una doble contabilización).

* Para optimizaciones dirigidas al perfil, vuelva a compilar los archivos fuente con el mismo
opciones de optimización y generación de código más -franch-probabilidades.

* Para análisis de cobertura de prueba, utilice gcov para producir información legible por humanos a partir de
las .gcno y .gcda archivos. Referirse a gcov documentación para más
información.

Con -fprofile-arcos, para cada función de su programa, GCC crea un flujo de programa
gráfico, luego busca un árbol de expansión para el gráfico. Solo los arcos que no están en el
El árbol de expansión debe estar instrumentado: el compilador agrega código para contar el número de
veces que se ejecutan estos arcos. Cuando un arco es la única salida o la única entrada a
un bloque, el código de instrumentación se puede agregar al bloque; de lo contrario, un nuevo básico
Se debe crear un bloque para contener el código de instrumentación.

-cobertura-de-prueba
Producir un archivo de notas que el gcov La utilidad de cobertura de código puede usar para mostrar el programa.
cobertura. El archivo de notas de cada archivo de origen se llama nombreauxiliar.gcno. Referirse a
-fprofile-arcos opción anterior para una descripción de nombre auxiliar e instrucciones sobre cómo
generar datos de cobertura de prueba. Los datos de cobertura coinciden más con los archivos de origen si
no optimizas.

-fdbg-cnt-lista
Imprima el nombre y el límite superior del contador para todos los contadores de depuración.

-fdbg-cnt =lista de contravalores
Establece el límite superior del contador de depuración interno. lista de contravalores es una coma separada
lista de nombre :propuesta de pares que establece el límite superior de cada contador de depuración nombre a
propuesta de. Todos los contadores de depuración tienen el límite superior inicial de "UINT_MAX"; por lo tanto, "dbg_cnt"
devuelve verdadero siempre a menos que esta opción establezca el límite superior. Por ejemplo, con
-fdbg-cnt = dce: 10, tail_call: 0, "dbg_cnt (dce)" devuelve verdadero solo para los primeros 10
invocaciones.

-fenable-tipo-pass
-fdeshabilitar-tipo-pass=lista de rango
Este es un conjunto de opciones que se utilizan para deshabilitar / habilitar explícitamente la optimización
pasa. Estas opciones están diseñadas para depurar GCC. Los usuarios del compilador deben
en su lugar, utilice las opciones habituales para habilitar / deshabilitar pases.

-fdisable-ipa-pass
Desactivar el pase IPA pass. pass es el nombre de la contraseña. Si el mismo pase es estáticamente
invocado en el compilador varias veces, el nombre de la contraseña debe agregarse con un
número secuencial a partir de 1.

-fdisable-rtl-pass
-fdisable-rtl-pass=lista de rango
Desactivar pase RTL pass. pass es el nombre de la contraseña. Si el mismo pase es estáticamente
invocado en el compilador varias veces, el nombre de la contraseña debe agregarse con un
número secuencial a partir de 1. lista de rango es una lista separada por comas de
rangos de funciones o nombres de ensambladores. Cada rango es un par de números separados por un
colon. El rango es inclusivo en ambos extremos. Si el rango es trivial, el número
el par se puede simplificar como un solo número. Si el nodo del gráfico de llamadas de la función
UID cae dentro de uno de los rangos especificados, el pass está deshabilitado para eso
función. los UID se muestra en el encabezado de la función de un archivo de volcado, y la contraseña
los nombres se pueden volcar usando la opción -fdump-pasa.

-árbol-deshabilitado-pass
-árbol-deshabilitado-pass=lista de rango
Desactivar pase de árbol pass. Vea -fdisable-rtl para la descripción de la opción
argumentos

-fenable-ipa-pass
Habilitar el pase IPA pass. pass es el nombre de la contraseña. Si el mismo pase es estáticamente
invocado en el compilador varias veces, el nombre de la contraseña debe agregarse con un
número secuencial a partir de 1.

-fenable-rtl-pass
-fenable-rtl-pass=lista de rango
Habilitar pase RTL pass. Vea -fdisable-rtl para la descripción del argumento de la opción y
ejemplos.

-árbol-fenable-pass
-árbol-fenable-pass=lista de rango
Habilitar pase de árbol pass. Vea -fdisable-rtl para la descripción de los argumentos de las opciones.

A continuación, se muestran algunos ejemplos que muestran los usos de estas opciones.

# deshabilitar ccp1 para todas las funciones
-fdisable-árbol-ccp1
# deshabilitar el desenrollado completo para la función cuyo uid de nodo cgraph es 1
-fonable-tree-cunroll = 1
# inhabilita gcse2 para funciones en los siguientes rangos [1,1],
# [300,400] y [400,1000]
# deshabilitar gcse2 para las funciones foo y foo2
-fdisable-rtl-gcse2 = foo, foo2
# inhabilitar la inserción temprana
-fdisable-árbol-en línea
# deshabilitar la inserción de ipa
-fdisable-ipa-en línea
# habilitar el desenrollado completo del árbol
-fonable-tree-desenrollar

-dletters
-fdump-rtl-pass
-fdump-rtl-pass=nombre de archivo
Dice realizar volcados de depuración durante la compilación en los momentos especificados por letters. Esto
se utiliza para depurar los pases del compilador basados ​​en RTL. Los nombres de archivo para la mayoría
de los volcados se realizan agregando un número de pase y una palabra al nombre de volcado, y la
los archivos se crean en el directorio del archivo de salida. En caso de =nombre de archivo opción,
el volcado se emite en el archivo dado en lugar de en los archivos de volcado numerados de paso. Nota
que el número de pase se calcula estáticamente a medida que los pases se registran en el pase
gerente. Por tanto, la numeración no está relacionada con el orden dinámico de ejecución de
pasa. En particular, un pase instalado por un complemento podría tener un número superior a 200 incluso
si se ejecutó bastante temprano. nombre de volcado se genera a partir del nombre del archivo de salida,
si se especifica explícitamente y no es un ejecutable, de lo contrario es el nombre base de
el archivo de origen. Estos interruptores pueden tener diferentes efectos cuando -E se utiliza para
preprocesamiento.

Los volcados de depuración se pueden habilitar con un -fdump-rtl cambiar o algo -d opción letters. aquí
son las letras posibles para su uso en pass y letters, y sus significados:

-fdump-rtl-alineaciones
Volcado después de que se hayan calculado las alineaciones de las ramas.

-fdump-rtl-asmcons
Volcado después de arreglar declaraciones rtl que tienen restricciones de entrada / salida insatisfechas.

-fdump-rtl-auto_inc_dec
Volcado después del descubrimiento de auto-inc-dec. Este pase solo se ejecuta en arquitecturas que
tener instrucciones de auto inc o auto dec.

-fdump-rtl-barreras
Vacíe después de limpiar las instrucciones de barrera.

-fdump-rtl-bbpart
Volcado después de particionar bloques básicos fríos y calientes.

-fdump-rtl-bbro
Volcado tras reordenamiento de bloques.

-fdump-rtl-btl1
-fdump-rtl-btl2
-fdump-rtl-btl1 y -fdump-rtl-btl2 habilitar el volcado después del destino de dos ramas
Pasos de optimización de carga.

-fdump-rtl-bypass
Volcado tras salto omitiendo y controlando optimizaciones de flujo.

-fdump-rtl-combinar
Volcado después del pase de combinación de instrucciones RTL.

-fdump-rtl-compgotos
Volcado después de duplicar los gotos calculados.

-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3
-fdump-rtl-ce1, -fdump-rtl-ce2y -fdump-rtl-ce3 habilitar el vertido después de las tres
si pasa la conversión.

-fdump-rtl-cprop_hardreg
Volcado después de la propagación de la copia de registro en papel.

-fdump-rtl-csa
Volcar después de combinar los ajustes de la pila.

-fdump-rtl-cse1
-fdump-rtl-cse2
-fdump-rtl-cse1 y -fdump-rtl-cse2 habilitar el volcado después de los dos comunes
pasa de eliminación de subexpresión.

-fdump-rtl-dce
Volcado después de que pase la eliminación del código muerto independiente.

-fdump-rtl-dbr
Volcado después de la programación de la sucursal retrasada.

-fdump-rtl-dce1
-fdump-rtl-dce2
-fdump-rtl-dce1 y -fdump-rtl-dce2 habilitar el vertido después de la tienda de dos muertos
pases de eliminación.

-fdump-rtl-eh
Volcado después de la finalización del código de manejo de EH.

-fdump-rtl-eh_rangos
Volcado después de la conversión de las regiones de rango de manipulación de EH.

-fdump-rtl-expandir
Volcado después de la generación RTL.

-fdump-rtl-fwprop1
-fdump-rtl-fwprop2
-fdump-rtl-fwprop1 y -fdump-rtl-fwprop2 habilitar el volcado después de los dos hacia adelante
pasa de propagación.

-fdump-rtl-gcse1
-fdump-rtl-gcse2
-fdump-rtl-gcse1 y -fdump-rtl-gcse2 habilitar el vertido después del común global
eliminación de subexpresiones.

-fdump-rtl-init-regs
Volcado después de la inicialización de los registros.

-fdump-rtl-iniciales
Volcado después del cálculo de los conjuntos de valores iniciales.

-fdump-rtl-into_cfglayout
Volcado después de convertir al modo cfglayout.

-fdump-rtl-ira
Volcado después de la asignación de registro iterada.

-fdump-rtl-saltar
Volcado después de la optimización del segundo salto.

-fdump-rtl-bucle2
-fdump-rtl-bucle2 habilita el volcado después de que pasa la optimización del bucle rtl.

-fdump-rtl-mach
Volcado después de realizar el pase de reorganización dependiente de la máquina, si ese pase
existe.

-fdump-rtl-mode_sw
Volcado después de quitar los interruptores de modo redundantes.

-fdump-rtl-rnreg
Volcado después de renumerar el registro.

-fdump-rtl-outof_cfglayout
Volcado después de convertir desde el modo cfglayout.

-fdump-rtl-mirilla2
Volcado después del paso de mirilla.

-fdump-rtl-poscarga
Volcado después de las optimizaciones posteriores a la recarga.

-fdump-rtl-pro_y_epílogo
Volcado después de generar la función prólogos y epílogos.

-fdump-rtl-programado1
-fdump-rtl-programado2
-fdump-rtl-programado1 y -fdump-rtl-programado2 habilitar el volcado después del bloque básico
pases de programación.

-fdump-rtl-ree
Volcado después de eliminación de signo / extensión cero.

-fdump-rtl-seqabstr
Volcado después del descubrimiento de secuencia común.

-fdump-rtl-acortar
Volcar después de acortar las ramas.

-fdump-rtl-hermano
Volcado después de optimizaciones de llamadas entre hermanos.

-fdump-rtl-split1
-fdump-rtl-split2
-fdump-rtl-split3
-fdump-rtl-split4
-fdump-rtl-split5
Estas opciones permiten el volcado después de cinco rondas de división de instrucciones.

-fdump-rtl-sms
Volcado después de la programación del módulo. Este pase solo se ejecuta en algunas arquitecturas.

-fdump-rtl-pila
Volcado después de la conversión de los registros del "archivo de registro plano" de GCC a los registros de x87
registros en forma de pila. Este pase solo se ejecuta en variantes x86.

-fdump-rtl-subreg1
-fdump-rtl-subreg2
-fdump-rtl-subreg1 y -fdump-rtl-subreg2 habilitar el volcado después de los dos subregiones
pasa de expansión.

-fdump-rtl-no compartir
Volcar después de que no se haya compartido todo rtl.

-fdump-rtl-vartrack
Volcado después de seguimiento variable.

-fdump-rtl-vregs
Volcado después de convertir registros virtuales en registros duros.

-fdump-rtl-web
Volcado después de dividir el rango en vivo.

-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-dfinish
Estos volcados están definidos pero siempre producen archivos vacíos.

-in
-fdump-rtl-todos
Produzca todos los vertederos enumerados anteriormente.

-dA Anote la salida del ensamblador con información de depuración variada.

-DD Vuelque todas las definiciones de macros, al final del preprocesamiento, además de las
salida.

-dH Produzca un volcado de memoria cada vez que se produzca un error.

-dp Anote la salida del ensamblador con un comentario que indique qué patrón y
se utiliza una alternativa. También se imprime la longitud de cada instrucción.

-dP Vierta el RTL en la salida del ensamblador como comentario antes de cada instrucción. También
se enciende -dp anotación.

-dx Simplemente genere RTL para una función en lugar de compilarlo. Usualmente usado con
-fdump-rtl-expandir.

-fdump-noaddr
Al hacer volcados de depuración, suprima la salida de dirección. Esto hace que sea más factible
use diff en los volcados de depuración para las invocaciones del compilador con diferentes binarios del compilador
y / o diferentes ubicaciones de inicio de text / bss / data / heap / stack / dso.

-informe-error
Recopilar y volcar información de depuración en un archivo temporal si ICE en el compilador C / C ++
Ocurrió.

-fdump-sin numerar
Al realizar volcados de depuración, suprima los números de instrucción y la salida de direcciones. Esta
hace que sea más factible usar diff en la depuración de volcados para invocaciones del compilador con
diferentes opciones, en particular con y sin -g.

-fdump-enlaces-no numerados
Al realizar volcados de depuración (consulte -d opción anterior), suprima los números de instrucción para el
enlaza con las instrucciones anteriores y siguientes en una secuencia.

-Unidad-de-traducción-fdump (Solo C ++)
-unidad-de-traducción-fdump-opciones (Solo C ++)
Vierta una representación de la estructura de árbol de toda la unidad de traducción en un archivo.
El nombre del archivo se crea agregando .tu al nombre del archivo de origen, y el archivo es
creado en el mismo directorio que el archivo de salida. Si el -opciones se utiliza la forma,
opciones controla los detalles del vertedero como se describe para el -fdump-árbol .

-jerarquía-de-clases-fdump (Solo C ++)
-jerarquía-de-clases-fdump-opciones (Solo C ++)
Volcar una representación de la jerarquía de cada clase y el diseño de la tabla de funciones virtuales a un
expediente. El nombre del archivo se crea agregando .clase al nombre del archivo de origen, y el archivo
se crea en el mismo directorio que el archivo de salida. Si el -opciones se utiliza la forma,
opciones controla los detalles del vertedero como se describe para el -fdump-árbol .

-fdump-ipa-cambiar
Controlar el dumping en varias etapas del árbol de lenguaje de análisis entre procedimientos a un
expediente. El nombre del archivo se genera agregando un sufijo específico del conmutador a la fuente
nombre de archivo, y el archivo se crea en el mismo directorio que el archivo de salida. los
son posibles los siguientes volcados:

todos Habilita todos los volcados de análisis entre procedimientos.

cgraf
Vuelca información sobre la optimización del gráfico de llamadas, la eliminación de funciones no utilizadas y
decisiones en línea.

en línea
Volcado después de la función de alineación.

-fdump-pasa
Volcar la lista de pasadas de optimización que son activadas y desactivadas por el actual
opciones de la línea de comandos.

-fdump-estadísticas-opción
Habilite y controle el volcado de estadísticas de pases en un archivo separado. El nombre del archivo es
generado agregando un sufijo terminado en .Estadísticas al nombre del archivo de origen, y el
El archivo se crea en el mismo directorio que el archivo de salida. Si el -opción la forma es
usado, -estadísticas hace que los contadores se sumen en toda la unidad de compilación mientras
-detalles vuelca cada evento a medida que los pases los generan. El valor predeterminado sin opción es
para sumar contadores para cada función compilada.

-fdump-árbol-cambiar
-fdump-árbol-cambiar-opciones
-fdump-árbol-cambiar-opciones=nombre de archivo
Controle el dumping en varias etapas del procesamiento del árbol de idiomas intermedios para
un archivo. El nombre del archivo se genera agregando un sufijo específico del conmutador al
nombre del archivo de origen, y el archivo se crea en el mismo directorio que el archivo de salida. En
caso de =nombre de archivo opción, el volcado se genera en el archivo dado en lugar del auto
archivos de volcado con nombre. Si el -opciones se utiliza la forma, opciones es una lista de - separaron
opciones que controlan los detalles del volcado. No todas las opciones son aplicables a todos
deshecho; los que no son significativos se ignoran. Las siguientes opciones están disponibles

dirección
Imprime la dirección de cada nodo. Por lo general, esto no es significativo ya que cambia
según el entorno y el archivo fuente. Su uso principal es atar un
archivo de volcado con un entorno de depuración.

asmnombre
Si se configuró "DECL_ASSEMBLER_NAME" para una declinación determinada, utilícelo en el volcado
en lugar de "DECL_NAME". Su uso principal es la facilidad de uso trabajando hacia atrás desde
nombres alterados en el archivo de ensamblaje.

Delgado
Al deshacerse de representaciones intermedias de front-end, inhibir el vertido de miembros de
un alcance o cuerpo de una función simplemente porque se ha alcanzado ese alcance. Solamente
volcar dichos elementos cuando sean accesibles directamente por alguna otra ruta.

Al tirar árboles con impresiones bonitas, esta opción inhibe el vaciado de los cuerpos de
Estructuras de Control.

Al descargar RTL, imprima el RTL en forma delgada (condensada) en lugar de la predeterminada
Representación similar a LISP.

crudo Imprime una representación sin formato del árbol. De forma predeterminada, los árboles están impresos en forma bonita
una representación en forma de C.

detalles
Habilite volcados más detallados (no respetados por todas las opciones de volcado). También incluir
información de las pasadas de optimización.

estadísticas
Habilite el volcado de varias estadísticas sobre el pase (no respetado por cada volcado
opción).

bloques
Habilite la visualización de límites de bloques básicos (deshabilitado en volcados sin formato).

gráfica
Para cada uno de los demás archivos de volcado indicados (-fdump-rtl-pass), volcar un
representación del gráfico de flujo de control adecuado para visualizar con GraphViz para
archivo.contraseña.contraseña.punto. Cada función en el archivo está bastante impresa como un subgráfico,
para que GraphViz pueda representarlos todos en un solo gráfico.

Esta opción actualmente solo funciona para volcados RTL, y el RTL siempre se volca en
forma delgada.

votos
Habilite la visualización de operandos virtuales para cada declaración.

lino
Habilite mostrar números de línea para declaraciones.

UID Habilite mostrar el ID único ("DECL_UID") para cada variable.

verboso
Habilite mostrar el volcado de árbol para cada declaración.

eh Habilite mostrar el número de región EH que contiene cada declaración.

scev
Habilite la visualización de detalles del análisis de evolución escalar.

optimizado
Habilite mostrar información de optimización (solo disponible en ciertas pasadas).

perdida
Habilite mostrar información de optimización perdida (solo disponible en ciertos pases).

nota
Habilite otra información de optimización detallada (solo disponible en ciertas pasadas).

=nombre de archivo
En lugar de un archivo de volcado con nombre automático, genere la salida en el nombre de archivo dado. El archivo
nombres stdout y stderr son tratados especialmente y se consideran ya abiertos
corrientes estándar. Por ejemplo,

gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks = foo.dump
-fdump-tree-pre = archivo stderr.c

salidas vectorizador volcado en foo.volcado, mientras que el volcado PRE se envía a stderr.
Si se dan dos nombres de archivo de volcado en conflicto para la misma pasada, entonces el último
La opción anula la anterior.

todos Active todas las opciones, excepto crudo, Delgado, verboso y lino.

optar
Active todas las opciones de optimización, es decir, optimizado, perdiday nota.

Son posibles los siguientes volcados de árboles:

reconocida por
Volcar antes de cualquier optimización basada en árbol, para archivo.original.

optimizado
Volcar después de toda la optimización basada en árboles, para archivo.optimizado.

gimple
Vierta cada función antes y después de la pasada de gimplificación a un archivo. El archivo
el nombre se hace agregando .gimple al nombre del archivo de origen.

cfg Vierta el gráfico de flujo de control de cada función en un archivo. El nombre del archivo está formado por
adjuntando .cfg al nombre del archivo de origen.

ch Vuelque cada función después de copiar los encabezados de los bucles. El nombre del archivo se crea agregando
. Ch al nombre del archivo de origen.

ssa Volcar información relacionada con SSA en un archivo. El nombre del archivo se crea agregando .sa
al nombre del archivo de origen.

alias
Volcar información de alias para cada función. El nombre del archivo se crea agregando
.alias al nombre del archivo de origen.

CCP Vierta cada función después de CCP. El nombre del archivo se crea agregando .ccp En el correo electrónico “Su Cuenta de Usuario en su Nuevo Sistema XNUMXCX”.
nombre del archivo de origen.

tiendaccp
Vierta cada función después de STORE-CCP. El nombre del archivo se crea agregando .storeccp
al nombre del archivo de origen.

pre Volcar árboles después de la eliminación parcial de la redundancia. El nombre del archivo está formado por
adjuntando .pre al nombre del archivo de origen.

frecuencia Volcar árboles después de la eliminación total de la redundancia. El nombre del archivo se crea agregando
.fre al nombre del archivo de origen.

copia
Volcar árboles después de la propagación de copias. El nombre del archivo se crea agregando .copiaprop
al nombre del archivo de origen.

tienda_copyprop
Vacíe los árboles después de la propagación de copias en la tienda. El nombre del archivo se crea agregando
.store_copyprop al nombre del archivo de origen.

dce Vierta cada función después de la eliminación del código muerto. El nombre del archivo está formado por
adjuntando .dce al nombre del archivo de origen.

SRA Vierta cada función después de realizar el reemplazo escalar de agregados. El archivo
el nombre se hace agregando .sra al nombre del archivo de origen.

lavabo
Vierta cada función después de realizar el hundimiento de código. El nombre del archivo está formado por
adjuntando .lavabo al nombre del archivo de origen.

dom Vierta cada función después de aplicar optimizaciones del árbol dominador. El nombre del archivo es
hecho agregando .dom al nombre del archivo de origen.

dse Vacíe cada función después de aplicar la eliminación de tienda muerta. El nombre del archivo está hecho
agregando .dse al nombre del archivo de origen.

fiopt
Vuelque cada función después de optimizar los nodos PHI en código de línea recta. El archivo
el nombre se hace agregando .phiopt al nombre del archivo de origen.

propulsor
Vierta cada función después de propagar hacia adelante las variables de un solo uso. El nombre del archivo
se hace agregando .forwprop al nombre del archivo de origen.

copiar renombrar
Vierta cada función después de aplicar la optimización de cambio de nombre de copia. El nombre del archivo es
hecho agregando .copyrename al nombre del archivo de origen.

NRV Volcar cada función después de aplicar la optimización del valor de retorno con nombre en genérico
árboles. El nombre del archivo se crea agregando .nrv al nombre del archivo de origen.

vecto
Volcar cada función después de aplicar la vectorización de bucles. El nombre del archivo está hecho
agregando .vector al nombre del archivo de origen.

slp Volcar cada función después de aplicar la vectorización de bloques básicos. El nombre del archivo es
hecho agregando .slp al nombre del archivo de origen.

VRP Vierta cada función después de la propagación del rango de valores (VRP). El nombre del archivo está formado por
adjuntando .vrp al nombre del archivo de origen.

todos Habilite todos los volcados de árbol disponibles con las banderas provistas en esta opción.

-fopt-info
-fopt-info-opciones
-fopt-info-opciones=nombre de archivo
Controla los volcados de optimización de varias pasadas de optimización. Si el -opciones la forma es
usado, opciones es una lista de - palabras clave de opciones separadas para seleccionar los detalles del volcado y
optimizaciones.

La opciones se pueden dividir en dos grupos: opciones que describen la verbosidad del
dump y opciones que describen qué optimizaciones deben incluirse. Las opciones de
ambos grupos se pueden mezclar libremente ya que no se superponen. Sin embargo, en caso de
cualquier conflicto, las opciones posteriores anulan las opciones anteriores en la línea de comando.

Las siguientes opciones controlan la verbosidad del volcado:

optimizado
Imprime información cuando una optimización se aplica correctamente. Depende de un pase
para decidir qué información es relevante. Por ejemplo, el vectorizador pasa a imprimir
la ubicación de origen de los bucles que se vectorizaron con éxito.

perdida
Imprima información sobre optimizaciones perdidas. Los pases individuales controlan cuál
información para incluir en la salida.

nota
Imprima información detallada sobre optimizaciones, como ciertas transformaciones,
mensajes más detallados sobre decisiones, etc.

todos Imprima información de optimización detallada. Esto incluye optimizado, perdiday
nota.

Se pueden utilizar una o más de las siguientes palabras clave de opción para describir un grupo de
optimizaciones:

ipa Habilite los volcados de todas las optimizaciones entre procedimientos.

loops
Habilite los volcados de todas las optimizaciones de bucle.

en línea
Habilite los volcados de todas las optimizaciones integradas.

ITH Habilite los volcados de todas las optimizaciones de vectorización.

optar
Habilite los volcados de todas las optimizaciones. Este es un superconjunto de los grupos de optimización
listados arriba.

If opciones se omite, por defecto es optimizado-optall, lo que significa volcar toda la información
sobre optimizaciones exitosas de todos los pases.

Si nombre de archivo se proporciona, entonces los volcados de todas las optimizaciones aplicables son
concatenados en el nombre de archivo. De lo contrario, el volcado se envía a stderr. Aunque
múltiples -fopt-info Se aceptan opciones, solo una de ellas puede incluir un nombre de archivo. Si
Se proporcionan otros nombres de archivo, luego se ignoran todas las opciones excepto la primera.

Tenga en cuenta que la salida nombre de archivo se sobrescribe en el caso de varias unidades de traducción. Si
se desea una salida combinada de múltiples unidades de traducción, stderr debería ser usado
preferiblemente.

En el siguiente ejemplo, la información de optimización se envía a stderr:

gcc -O3 -fopt-info

Este ejemplo:

gcc -O3 -fopt-info-missing = perdido.todos

emite un informe de optimización perdida de todas las pasadas en perdido.todo, y éste:

gcc -O2 -ftree-vectorize -fopt-info-vec-missing

imprime información sobre oportunidades de optimización perdidas a partir de pases de vectorización
on stderr. Tenga en cuenta que -fopt-info-vec-perdido es equivalente a -fopt-info-perdido-vec.

Como otro ejemplo,

gcc -O3 -fopt-info-inline-optimizado-perdido = inline.txt

genera información sobre optimizaciones perdidas, así como ubicaciones optimizadas de todos
el inlining pasa a en línea.txt.

Finalmente, considere:

gcc -fopt-info-vec-missing = vec.miss -fopt-info-loop-optimizado = loop.opt

Aquí los dos nombres de archivo de salida vec.señorita y bucle.optar están en conflicto ya que solo uno
Se permite el archivo de salida. En este caso, solo la primera opción tiene efecto y la
las opciones posteriores se ignoran. Así solo vec.señorita se produce que contiene vertederos
del vectorizador sobre oportunidades perdidas.

-semilla-aleatoria =número
Esta opción proporciona una semilla que GCC usa en lugar de números aleatorios al generar
ciertos nombres de símbolos que tienen que ser diferentes en cada archivo compilado. Tambien es
utilizado para colocar sellos únicos en archivos de datos de cobertura y los archivos de objeto que producen
ellos. Puedes usar el -semilla-aleatoria opción para producir un objeto idéntico reproducible
archivos.

La número debería ser diferente para cada archivo que compile.

-fsched-verbose =n
En los objetivos que utilizan la programación de instrucciones, esta opción controla la cantidad de
la salida de depuración imprime el planificador. Esta información está escrita con error estándar,
a menos que -fdump-rtl-programado1 or -fdump-rtl-programado2 se especifica, en cuyo caso se emite
al archivo de listado de volcado habitual, .programado1 or .programado2 respectivamente. Sin embargo para n
mayor que nueve, la salida siempre se imprime con error estándar.

n mayor que cero, -fsched-detallado emite la misma información que
-fdump-rtl-programado1 y -fdump-rtl-programado2. For n mayor que uno, también da salida básica
probabilidades de bloque, información detallada de listas listas e información de unidades / insn. Para n
mayor que dos, incluye RTL en el punto de aborto, el flujo de control y la información de las regiones. Y
para n más de cuatro, -fsched-detallado también incluye información de dependencia.

-guardar-temps
-save-temps = cwd
Almacene los archivos intermedios "temporales" habituales de forma permanente; colocarlos en la corriente
directorio y nómbrelos según el archivo de origen. Por lo tanto, compilando foo.c -c
-guardar-temps produce archivos foo.i y foo.s, así como foo.o. Esto crea un
preprocesado foo.i archivo de salida a pesar de que el compilador ahora normalmente utiliza un
preprocesador integrado.

Cuando se usa en combinación con el -x opción de línea de comandos, -guardar-temps es sensato
suficiente para evitar escribir un archivo fuente de entrada con la misma extensión que un
archivo intermedio. El archivo intermedio correspondiente se puede obtener cambiando el nombre
el archivo fuente antes de usar -guardar-temps.

Si invoca GCC en paralelo, compila varios archivos fuente diferentes que comparten un
nombre base común en diferentes subdirectorios o el mismo archivo fuente compilado para
múltiples destinos de salida, es probable que los diferentes compiladores paralelos
interferir entre sí y sobrescribir los archivos temporales. Por ejemplo:

gcc -save-temps -o outdir1 / foo.o indir1 / foo.c &
gcc -save-temps -o outdir2 / foo.o indir2 / foo.c &

puede resultar en foo.i y foo.o siendo escrito simultáneamente por ambos compiladores.

-save-temps = obj
Almacene los archivos intermedios "temporales" habituales de forma permanente. Si el -o se utiliza la opción,
los archivos temporales se basan en el archivo objeto. Si el -o opción no se utiliza, la
-save-temps = obj el interruptor se comporta como -guardar-temps.

Por ejemplo:

gcc -save-temps = obj -c foo.c
gcc -save-temps = obj -c bar.c -o dir / xbar.o
gcc -save-temps = obj foobar.c -o dir2 / yfoobar

crea foo.i, foo.s, dir / xbar.i, dir / xbar.s, dir2 / yfoobar.i, dir2 / yfoobar.sy
dir2 / yfoobar.o.

-hora[=presentar]
Informe el tiempo de CPU que toma cada subproceso en la secuencia de compilación. Para C
archivos de origen, este es el compilador y ensamblador propiamente dichos (más el enlazador si el enlace es
hecho).

Sin la especificación de un archivo de salida, la salida se ve así:

# cc1 0.12 0.01
# como 0.00 0.01

El primer número de cada línea es el "tiempo del usuario", es decir, el tiempo dedicado a ejecutar el
programa en sí. El segundo número es "tiempo del sistema", el tiempo dedicado a ejecutar operaciones
rutinas del sistema en nombre del programa. Ambos números están en segundos.

Con la especificación de un archivo de salida, la salida se agrega al archivo nombrado,
y se ve así:

0.12 0.01 cc1
0.00 0.01 como

La "hora del usuario" y la "hora del sistema" se mueven antes del nombre del programa, y ​​la
Se muestran las opciones pasadas al programa, para que luego se pueda saber qué archivo se
que se está compilando y con qué opciones.

-fvar-seguimiento
Ejecute el pase de seguimiento variable. Calcula dónde se almacenan las variables en cada posición.
en codigo. Entonces se genera mejor información de depuración (si la información de depuración
formato admite esta información).

Está habilitado de forma predeterminada al compilar con optimización (-os, -O, -O2, ...),
información de depuración-g) y el formato de información de depuración lo admite.

-asignaciones-de-seguimiento-de-fvar
Anote las asignaciones a las variables de usuario al principio de la compilación e intente llevar
las anotaciones a lo largo de la compilación hasta el final, en un intento
para mejorar la información de depuración mientras se optimiza. Uso de -gdwarf-4 se recomienda junto
con ella.

Se puede habilitar incluso si el seguimiento de var está deshabilitado, en cuyo caso las anotaciones se
creado y mantenido, pero descartado al final. De forma predeterminada, esta bandera está habilitada
Junto con -fvar-seguimiento, excepto cuando la programación selectiva está habilitada.

-fvar-seguimiento-asignaciones-alternar
palanca -asignaciones-de-seguimiento-de-fvar, de la misma manera que -galternar Cambia -g.

-print-file-name =bibliotecas
Imprime el nombre absoluto completo del archivo de la biblioteca bibliotecas eso se usaría cuando
enlazando --- y no hagas nada más. Con esta opción, GCC no compila ni enlaza
cualquier cosa; simplemente imprime el nombre del archivo.

-imprimir-multi-directorio
Imprima el nombre del directorio correspondiente al multilib seleccionado por cualquier otro interruptor
presente en la línea de comando. Se supone que este directorio existe en GCC_EXEC_PREFIX.

-imprimir-multi-lib
Imprima el mapeo de los nombres de directorio multilib a los conmutadores del compilador que los habilitan.
El nombre del directorio está separado de los conmutadores por ;, y cada interruptor comienza con un
@ en vez de -, sin espacios entre varios conmutadores. Se supone que esto
Facilitar el procesamiento de la cáscara.

-imprimir-directorio-multi-os
Imprima la ruta a las bibliotecas del sistema operativo para el multilib seleccionado, en relación con algunos lib
subdirectorio. Si hay bibliotecas de SO en el lib subdirectorio y sin multilibs
se utilizan, esto suele ser solo ., si las bibliotecas del sistema operativo están presentes en sufijo lib hermano
directorios esto imprime, por ejemplo ../ lib64, ../ lib or ../ lib32, o si las bibliotecas del sistema operativo son
presentar en lib / subdir subdirectorios que imprime, por ejemplo amd64, sparcv9 or ev6.

-impresión-multiarca
Imprima la ruta a las bibliotecas del sistema operativo para el multiarch seleccionado, en relación con algunos lib
subdirectorio.

-print-prog-name =programa
Me gusta -nombre-archivo-de-impresión, pero busca un programa como cpp.

-print-libgcc-nombre-de-archivo
Igual que -nombre-archivo-de-impresión = libgcc.a.

Esto es útil cuando usa -nostdlib or -nodefaultlibs pero quieres enlazar con
libgcc.a. Tu puedes hacer:

gcc -nostdlib ... `gcc -print-libgcc-nombre-archivo`

-directores-de-búsqueda-de-impresión
Imprima el nombre del directorio de instalación configurado y una lista de programas y
directorios de bibliotecas gcc búsquedas --- y no hagas nada más.

Esto es útil cuando gcc imprime el mensaje de error instalación problema, no puede ejecutivo
cpp0: No tal presentar or directorio. Para resolver esto, debe poner cpp0 y
otros componentes del compilador donde gcc espera encontrarlos, o puede configurar el
Variable ambiental GCC_EXEC_PREFIX al directorio donde los instaló. No
olvida el final /.

-print-sysroot
Imprima el directorio raíz del sistema de destino que se utiliza durante la compilación. Este es el
sysroot de destino especificado en el momento de la configuración o utilizando el --sysroot opción,
posiblemente con un sufijo adicional que depende de las opciones de compilación. Si no hay objetivo
sysroot está especificado, la opción no imprime nada.

-print-sysroot-headers-sufijo
Imprima el sufijo agregado a la raíz del sistema de destino al buscar encabezados, o proporcione un
error si el compilador no está configurado con dicho sufijo --- y no haga nada
más.

-Dumpmachine
Imprima la máquina de destino del compilador (por ejemplo, i686-pc-linux-gnu) --- y no lo hagas
Algo más.

-Dumpversion
Imprima la versión del compilador (por ejemplo, 3.0) --- y no haga nada más.

-especificaciones de volcado
Imprima las especificaciones integradas del compilador --- y no haga nada más. (Esto se usa cuando
GCC mismo se está construyendo).

-fno-eliminar-tipos-de-depuración-no utilizados
Normalmente, al producir una salida DWARF 2, GCC evita producir una salida de símbolo de depuración para
tipos que no se utilizan en ninguna parte del archivo fuente que se está compilando. A veces es útil
para que GCC emita información de depuración para todos los tipos declarados en una unidad de compilación,
independientemente de si se utilizan o no en esa unidad de compilación, por
ejemplo, si, en el depurador, desea convertir un valor a un tipo que no es realmente
utilizado en su programa (pero está declarado). Más a menudo, sin embargo, esto resulta en una
cantidad significativa de espacio desperdiciado.

Opciones Esa Control Optimización
Estas opciones controlan varios tipos de optimizaciones.

Sin ninguna opción de optimización, el objetivo del compilador es reducir el costo de compilación
y hacer que la depuración produzca los resultados esperados. Las declaraciones son independientes: si
detener el programa con un punto de interrupción entre declaraciones, luego puede asignar un nuevo valor a
cualquier variable o cambiar el contador del programa a cualquier otra declaración en la función y obtener
exactamente los resultados que espera del código fuente.

Activar los indicadores de optimización hace que el compilador intente mejorar el rendimiento y / o
tamaño del código a expensas del tiempo de compilación y posiblemente la capacidad de depurar el
.

El compilador realiza la optimización basándose en el conocimiento que tiene del programa.
La compilación de varios archivos a la vez en un solo modo de archivo de salida permite que el compilador utilice
información obtenida de todos los archivos al compilar cada uno de ellos.

No todas las optimizaciones están controladas directamente por una bandera. Solo optimizaciones que tienen un
bandera se enumeran en esta sección.

La mayoría de las optimizaciones solo se habilitan si un -O El nivel se establece en la línea de comando. De lo contrario
están deshabilitados, incluso si se especifican indicadores de optimización individuales.

Dependiendo del objetivo y cómo se configuró GCC, un conjunto ligeramente diferente de
se pueden habilitar optimizaciones en cada -O nivel que los enumerados aquí. Puede invocar GCC
-Q --help = optimizadores para conocer el conjunto exacto de optimizaciones que están habilitadas en
cada nivel.

-O
-O1 Optimizar. Optimizar la compilación requiere algo más de tiempo y mucha más memoria para
una gran función.

Con -O, el compilador intenta reducir el tamaño del código y el tiempo de ejecución, sin realizar
cualquier optimización que requiera mucho tiempo de compilación.

-O activa los siguientes indicadores de optimización:

-fauto-inc-dic -fbranch-count-reg -ajustes-de-pila-combinada -fcompare-elim
-fcprop-registros -fdce -fdefer-pop rama retrasada -fdse -fforward-propagar
-f adivinar-rama-probabilidad -fif-conversión2 -fif-conversión
-Funciones-de-fin-llamadas-una-vez -fipa-puro-constante -fipa-perfil -fipa-referencia
-fmerge-constantes -fmove-bucle-invariantes -f-envoltura retráctil -fsplit-wide-tipos
-ftree-bit-ccp -ftree-ccp -fssa-phiopt -ftre-ch -ftree-copia-prop -ftree-copyrename
-ftre-dce -ftree-dominator-opciones -ftre-dse -ftree-forwprop -ftree-fre -ftree-phiprop
-fregadero de tres -ftree-slsr -ftre-sra -ftree-pta -ftree-ter -funit-a-la-vez

-O también enciende -fomit-frame-puntero en máquinas donde hacerlo no interfiere
con depuración.

-O2 Optimice aún más. GCC realiza casi todas las optimizaciones admitidas que no
implican una compensación espacio-velocidad. En comparación con -O, esta opción aumenta tanto
tiempo de compilación y rendimiento del código generado.

-O2 activa todos los indicadores de optimización especificados por -O. También enciende lo siguiente
banderas de optimización: saltos de hilo -funciones-falsas -altos-saltos -falign-bucles
-Etiquetas-falsas -fcaller-salva -f salto cruzado -fcse-seguir-saltos -fcse-saltar-bloques
-f eliminar-comprobaciones-de-puntero-nulo -fdevirtualizar -fdevirtualizar-especulativamente
-Optimizaciones-económicas -fgcse -fgcse-lm -cargas-adyacentes
-fines-pequeñas-funciones -findirect-inline -fipa-cp -fipa-cp-alineación -fipa-sra
-fipa-icf -fisolate-erroneous-rutas-desreferencia -fla-remat -foptimizar-llamadas-entre-hermanos
-foptimizar-strlen -finvestimiento-parcial -fmirilla2 -Bloques-de-pedidos
-despedir-bloques-y-partición -freorder-funciones -frerun-cse-después-de-bucle
-fsched-interbloqueo -fsched-spec -fschedule-insns -fschedule-insns2 -fstrict-aliasing
-fstrict-desbordamiento -ftree-incorporado-llamada-dce conversión de tres interruptores -fusión-de-tres-colas
-ftree-pre -ftree-vrp -fipa-ra

Tenga en cuenta la advertencia debajo -fgcse sobre invocar -O2 en programas que usan computadores
ve a S.

NOTA: En Ubuntu 8.10 y versiones posteriores, -D_FORTIFY_SOURCE = 2 está configurado de forma predeterminada y
activado cuando -O está configurado en 2 o superior. Esto permite tiempo de compilación adicional y
verificaciones en tiempo de ejecución para varias funciones de libc. Para deshabilitar, especifique
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE = 0.

-O3 Optimice aún más. -O3 activa todas las optimizaciones especificadas por -O2 y también enciende
las -funciones-de-fin-line, -funswitch-bucles, -fpredictivo-común, -fgcse-después de recargar,
-ftree-loop-vectorizar, -ftree-loop-distribuir-patrones, -ftree-slp-vectorizar,
-modelo-de-costos-fvect, -free-parcial-pre y -fipa-cp-clon .

-O0 Reduzca el tiempo de compilación y haga que la depuración produzca los resultados esperados. Este es el
predeterminado.

-os Optimice el tamaño. -os habilita todo -O2 optimizaciones que normalmente no aumentan
tamaño del código. También realiza más optimizaciones diseñadas para reducir el tamaño del código.

-os deshabilita las siguientes banderas de optimización: -funciones-falsas -altos-saltos
-falign-bucles -Etiquetas-falsas -Bloques-de-pedidos -despedir-bloques-y-partición
-fprefetch-bucle-matrices

-Comida
Ignore el estricto cumplimiento de los estándares. -Comida habilita todo -O3 optimizaciones. También
habilita optimizaciones que no son válidas para todos los programas que cumplen con los estándares. Eso
se enciende -matemáticas-rápidas y el específico de Fortran -fno-proteger-parens y -fstack-matrices.

-Og Optimice la experiencia de depuración. -Og habilita optimizaciones que no interfieren con
depuración. Debería ser el nivel de optimización elegido para la edición estándar.
ciclo de compilación-depuración, que ofrece un nivel razonable de optimización mientras se mantiene
compilación rápida y una buena experiencia de depuración.

Si usa varios -O opciones, con o sin números de nivel, la última opción es
el que es efectivo.

Opciones del formulario -fbandera especificar indicadores independientes de la máquina. La mayoría de las banderas tienen ambos
formas positivas y negativas; la forma negativa de -fuf is -fno-foo. En la siguiente tabla,
sólo se enumera uno de los formularios, el que normalmente usa. Puedes averiguar el otro
forma eliminando nO- o agregarlo.

Las siguientes opciones controlan optimizaciones específicas. Son activados por -O
opciones o están relacionadas con las que lo son. Puede utilizar las siguientes banderas en raras ocasiones.
casos en los que se desea un "ajuste fino" de las optimizaciones a realizar.

-fno-diferir-pop
Siempre muestre los argumentos a cada llamada de función tan pronto como esa función regrese. Para
máquinas que deben mostrar argumentos después de una llamada a función, el compilador normalmente permite
Los argumentos se acumulan en la pila para varias llamadas a funciones y los muestra a todos en
una vez.

Discapacitado en niveles -O, -O2, -O3, -os.

-fforward-propagar
Realice una pasada de propagación hacia adelante en RTL. El pase intenta combinar dos instrucciones
y comprueba si el resultado se puede simplificar. Si el desenrollado de bucle está activo, dos pasadas
se realizan y el segundo se programa después del desenrollado del bucle.

Esta opción está habilitada de forma predeterminada en los niveles de optimización. -O, -O2, -O3, -os.

-ffp-contract =papa
-ffp-contract = desactivado deshabilita la contracción de expresión de punto flotante. -ffp-contract = rápido
permite la contracción de la expresión de punto flotante, como la formación de multiplicar-agregar fusionados
operaciones si el destino tiene soporte nativo para ellas. -ffp-contract = activado permite
contracción de expresión de punto flotante si lo permite el estándar del lenguaje. Este es
actualmente no implementado y tratado igual que -ffp-contract = desactivado.

El valor predeterminado es -ffp-contract = rápido.

-fomit-frame-puntero
No guarde el puntero del marco en un registro para funciones que no lo necesiten. Esta
evita las instrucciones para guardar, configurar y restaurar punteros de marco; también hace un
registro adicional disponible en muchas funciones. It también hace depuración imposible on
algo máquinas.

En algunas máquinas, como VAX, esta bandera no tiene ningún efecto, porque el estándar
La secuencia de llamada maneja automáticamente el puntero del marco y no se guarda nada mediante
fingiendo que no existe. La macro de descripción de la máquina "FRAME_POINTER_REQUIRED"
controla si una máquina de destino admite esta bandera.

La configuración predeterminada (cuando no se optimiza el tamaño) para GNU / Linux x32 de 86 bits y 32 bits
Los objetivos de Darwin x86 son -fomit-frame-puntero. Puede configurar GCC con el
--enable-frame-puntero Configure la opción para cambiar el valor predeterminado.

Habilitado en niveles -O, -O2, -O3, -os.

-foptimizar-llamadas-entre-hermanos
Optimice las llamadas recursivas entre hermanos y finales.

Habilitado en niveles -O2, -O3, -os.

-foptimizar-strlen
Optimice varias funciones de cadena C estándar (por ejemplo, "strlen", "strchr" o "strcpy") y
sus contrapartes "_FORTIFY_SOURCE" en alternativas más rápidas.

Habilitado en niveles -O2, -O3.

-fno-en línea
No expanda ninguna función en línea aparte de las marcadas con "always_inline"
atributo. Este es el valor predeterminado cuando no se optimiza.

Las funciones individuales se pueden eximir de la alineación marcándolas con "noinline"
atributo.

-fines-pequeñas-funciones
Integra funciones en sus interlocutores cuando su cuerpo es más pequeño de lo esperado
código de llamada de función (por lo que el tamaño total del programa se reduce). El compilador
decide heurísticamente qué funciones son lo suficientemente simples como para que valga la pena integrarlas en
Por aquí. Esta alineación se aplica a todas las funciones, incluso a las que no se declaran en línea.

Habilitado a nivel -O2.

-findirect-inline
Inline también llamadas indirectas que se descubren conocidas en tiempo de compilación gracias a
alineación anterior. Esta opción tiene algún efecto solo cuando la inserción en línea está activada
según el -funciones-de-fin-line or -fines-pequeñas-funciones .

Habilitado a nivel -O2.

-funciones-de-fin-line
Considere todas las funciones para la inserción, incluso si no están declaradas en línea. los
El compilador decide heurísticamente qué funciones vale la pena integrar de esta manera.

Si todas las llamadas a una función determinada están integradas y la función se declara
"estática", entonces la función normalmente no se genera como código ensamblador por derecho propio.

Habilitado a nivel -O3.

-Funciones-de-fin-llamadas-una-vez
Considere todas las funciones "estáticas" llamadas una vez para incluirlas en su llamador, incluso si
no están marcados como "en línea". Si se integra una llamada a una función dada, entonces el
La función no se genera como código ensamblador por derecho propio.

Habilitado en niveles -O1, -O2, -O3 y -os.

-miedo-inlining
Funciones en línea marcadas con "always_inline" y funciones cuyo cuerpo parece más pequeño que
la función llama a la sobrecarga antes de hacer -fprofile-generar instrumentación y
pase de alineación real. Hacerlo hace que la creación de perfiles sea significativamente más barata y, por lo general,
insertando más rápido en programas que tienen grandes cadenas de funciones de contenedor anidadas.

Habilitado por defecto.

-fipa-sra
Realizar reemplazo escalar interprocedimiento de agregados, eliminación de parámetros no utilizados
y reemplazo de parámetros pasados ​​por referencia por parámetros pasados ​​por valor.

Habilitado en niveles -O2, -O3 y -os.

-finline-limit =n
De forma predeterminada, GCC limita el tamaño de las funciones que se pueden insertar. Esta bandera permite
control burdo de este límite. n es el tamaño de las funciones que se pueden insertar en
número de pseudoinstrucciones.

En realidad, la alineación está controlada por una serie de parámetros, que pueden especificarse
individualmente usando --param nombre =propuesta de. -finline-limit =n opción establece algunos de
estos parámetros de la siguiente manera:

max-inline-insns-single
se establece a n/ 2.

max-inline-insns-auto
se establece a n/ 2.

Consulte a continuación para obtener una documentación de los parámetros individuales que controlan la alineación y
por los valores predeterminados de estos parámetros.

Nota: puede que no tenga ningún valor -límite-de-línea que da como resultado un comportamiento predeterminado.

Nota: pseudoinstrucción representa, en este contexto particular, un resumen
medición del tamaño de la función. De ninguna manera representa un recuento de montaje.
instrucciones y, como tal, su significado exacto puede cambiar de una versión a una
otra.

-fno-mantener-en línea-dllexport
Esta es una versión más detallada de -fkeep-inline-funciones, que se aplica solo a
funciones que se declaran utilizando el atributo "dllexport" o declspec

-fkeep-inline-funciones
En C, emite funciones "estáticas" que se declaran "en línea" en el archivo de objeto, incluso si
la función se ha integrado en todos sus llamadores. Este interruptor no afecta
funciones usando la extensión "extern inline" en GNU C90. En C ++, emita todos y cada uno
funciones en línea en el archivo de objeto.

-fkeep-constancias-estáticas
Emitir variables declaradas "const estática" cuando la optimización no está activada, incluso si la
no se hace referencia a las variables.

GCC habilita esta opción de forma predeterminada. Si desea forzar al compilador a comprobar si un
se hace referencia a la variable, independientemente de si la optimización está activada o no, utilice
las -fno-mantener-static-consts .

-fmerge-constantes
Intente fusionar constantes idénticas (constantes de cadena y constantes de punto flotante)
en las unidades de compilación.

Esta opción es la predeterminada para la compilación optimizada si el ensamblador y el enlazador
apoyarlo. Usar -fno-combinar-constantes para inhibir este comportamiento.

Habilitado en niveles -O, -O2, -O3, -os.

-fusión-de-todas-las-constantes
Intente fusionar constantes idénticas y variables idénticas.

Esta opción implica -fmerge-constantes. Además de -fmerge-constantes así
considera, por ejemplo, incluso matrices inicializadas constantes o variables constantes inicializadas con
tipos integrales o de punto flotante. Los lenguajes como C o C ++ requieren cada variable,
incluyendo múltiples instancias de la misma variable en llamadas recursivas, para tener distintas
ubicaciones, por lo que el uso de esta opción da como resultado un comportamiento no conforme.

-fmodulo-programado
Realice la programación del módulo de swing inmediatamente antes de la primera pasada de programación. Esta
pass examina los bucles más internos y reordena sus instrucciones superponiendo diferentes
iteraciones.

-fmodulo-sched-allow-regmoves
Realice una programación de módulos basada en SMS más agresiva con movimientos de registro permitidos. Por
Al establecer esta bandera, se eliminan ciertos bordes de anti-dependencias, lo que activa la
generación de reg-movimientos basados ​​en el análisis de rango de vida. Esta opción es efectiva
solo con -fmodulo-programado habilitado

-fno-branch-count-reg
No utilice instrucciones de "decremento y bifurcación" en un registro de conteo, sino
generar una secuencia de instrucciones que disminuyan un registro, compararlo con
cero, luego bifurca según el resultado. Esta opción solo es significativa en
arquitecturas que admiten dichas instrucciones, que incluyen x86, PowerPC, IA-64 y
S / 390.

Habilitado por defecto en -O1 y más alto.

El valor predeterminado es -fbranch-count-reg.

-fno-función-cse
No coloque direcciones de funciones en registros; hacer cada instrucción que llame a un
La función constante contiene la dirección de la función explícitamente.

Esta opción da como resultado un código menos eficiente, pero algunos trucos extraños que alteran la
La salida del ensamblador puede confundirse con las optimizaciones realizadas cuando esta opción es
no utilizado.

El valor predeterminado es -función-cse

-fno-zero-inicializado-en-bss
Si el objetivo admite una sección BSS, GCC coloca de forma predeterminada las variables que son
inicializado a cero en BSS. Esto puede ahorrar espacio en el código resultante.

Esta opción desactiva este comportamiento porque algunos programas se basan explícitamente en variables
ir a la sección de datos --- por ejemplo, para que el ejecutable resultante pueda encontrar el
comienzo de esa sección y / o hacer suposiciones basadas en eso.

El valor predeterminado es -fzero-inicializado-en-bss.

saltos de hilo
Realice optimizaciones que comprueben si un salto se ramifica a una ubicación donde otro
Se encuentra la comparación subsumida por la primera. Si es así, la primera rama se redirige a
ya sea el destino de la segunda rama o un punto inmediatamente siguiente,
dependiendo de si se sabe que la condición es verdadera o falsa.

Habilitado en niveles -O2, -O3, -os.

-fsplit-wide-tipos
Cuando se utiliza un tipo que ocupa varios registros, como "long long" en un 32 bits
sistema, dividir los registros y asignarlos de forma independiente. Esto normalmente
genera un mejor código para esos tipos, pero puede dificultar la depuración.

Habilitado en niveles -O, -O2, -O3, -os.

-fcse-seguir-saltos
En la eliminación de subexpresión común (CSE), escanee las instrucciones de salto cuando el
el objetivo del salto no se alcanza por ningún otro camino. Por ejemplo, cuando CSE encuentra
una instrucción "if" con una cláusula "else", CSE sigue el salto cuando la condición
probado es falso.

Habilitado en niveles -O2, -O3, -os.

-fcse-saltar-bloques
Esto es similar a -fcse-seguir-saltos, pero hace que CSE siga saltos que
saltar condicionalmente los bloques. Cuando el CSE encuentra una simple declaración "si" sin
otra cláusula, -fcse-saltar-bloques hace que CSE siga el salto alrededor del cuerpo del
"Si".

Habilitado en niveles -O2, -O3, -os.

-frerun-cse-después-de-bucle
Vuelva a ejecutar la eliminación de subexpresiones comunes después de que se hayan realizado las optimizaciones de bucle.

Habilitado en niveles -O2, -O3, -os.

-fgcse
Realice una pasada de eliminación de subexpresión común global. Este pase también realiza
constante global y propagación de copias.

Nota: Al compilar un programa usando gotos computados, una extensión de GCC, puede obtener
mejor rendimiento en tiempo de ejecución si deshabilita la eliminación de subexpresión común global
pasar agregando -fno-gcse a la línea de comando.

Habilitado en niveles -O2, -O3, -os.

-fgcse-lm
Cuándo -fgcse-lm está habilitado, la eliminación de subexpresión común global intenta mover
cargas que solo son destruidas por las tiendas en sí mismas. Esto permite un bucle que contiene un
secuencia de carga / almacenamiento que se cambiará a una carga fuera del bucle, y una copia / almacenamiento dentro
el lazo.

Habilitado de forma predeterminada cuando -fgcse está habilitado.

-fgcse-sm
Cuándo -fgcse-sm está habilitado, se ejecuta un pase de movimiento de tienda después de global common
eliminación de subexpresiones. Este pase intenta sacar las tiendas de los bucles. Cuando se utiliza
junto con -fgcse-lm, los bucles que contienen una secuencia de carga / almacenamiento se pueden cambiar
a una carga antes del bucle y una tienda después del bucle.

No habilitado en ningún nivel de optimización.

-fgcse-las
Cuándo -fgcse-las está habilitado, el pase de eliminación de subexpresión común global
elimina las cargas redundantes que vienen después de las tiendas en la misma ubicación de memoria (ambas
despidos parciales y totales).

No habilitado en ningún nivel de optimización.

-fgcse-después de recargar
Cuándo -fgcse-después de recargar está habilitado, se realiza un pase de eliminación de carga redundante
después de la recarga. El propósito de este pase es limpiar los derrames redundantes.

-optimizaciones-de-bucle-agresivas
Esta opción le dice al optimizador de bucle que use restricciones de lenguaje para derivar límites para
el número de iteraciones de un bucle. Esto supone que el código de bucle no invoca
comportamiento indefinido, por ejemplo, provocando desbordamientos de enteros con signo o fuera de límites
accesos a la matriz. Los límites del número de iteraciones de un bucle se utilizan para guiar
Optimizaciones de prueba de desenrollado y pelado de bucle y salida de bucle. Esta opción está habilitada
por defecto

-optimizaciones-de-bucle-divertido
Esta opción le dice al optimizador de bucle que asuma que los índices de bucle no se desbordan, y
que los bucles con una condición de salida no trivial no son infinitos. Esto permite una mayor
rango de optimizaciones de bucle incluso si el optimizador de bucle en sí no puede probar que estos
las suposiciones son válidas. Si utiliza -Optimizaciones Wunsafe-loop, el compilador te advierte
si encuentra este tipo de bucle.

-f salto cruzado
Realiza una transformación de salto cruzado. Esta transformación unifica código equivalente y
ahorra el tamaño del código. El código resultante puede o no funcionar mejor que sin cruces
saltando.

Habilitado en niveles -O2, -O3, -os.

-fauto-inc-dic
Combine incrementos o decrementos de direcciones con accesos a memoria. Este pase es
siempre se salteó las arquitecturas que no tienen instrucciones para admitir esto.
Habilitado por defecto en -O y superior en arquitecturas que lo soporten.

-fdce
Realice la eliminación de código muerto (DCE) en RTL. Habilitado por defecto en -O y más alto.

-fdse
Realice la eliminación de tiendas muertas (DSE) en RTL. Habilitado por defecto en -O y más alto.

-fif-conversión
Intente transformar los saltos condicionales en equivalentes sin rama. Esto incluye
uso de movimientos condicionales, min, max, set flags e instrucciones de abdominales, y algunos trucos
factible por aritmética estándar. El uso de ejecución condicional en chips donde está
disponible está controlado por -fif-conversión2.

Habilitado en niveles -O, -O2, -O3, -os.

-fif-conversión2
Utilice la ejecución condicional (donde esté disponible) para transformar los saltos condicionales en
equivalentes sin rama.

Habilitado en niveles -O, -O2, -O3, -os.

-fdeclone-ctor-dtor
La ABI de C ++ requiere múltiples puntos de entrada para constructores y destructores: uno para un
subobjeto base, uno para un objeto completo y otro para un destructor virtual que llama
operador eliminar después. Para una jerarquía con bases virtuales, la base y completa
las variantes son clones, lo que significa dos copias de la función. Con esta opción, el
Las variantes base y completa se cambian para ser procesadores que llaman a una implementación común.

Habilitado por -os.

-f eliminar-comprobaciones-de-puntero-nulo
Suponga que los programas no pueden desreferenciar punteros nulos de forma segura, y que no hay código ni datos
elemento reside allí. Esto permite optimizaciones simples y constantes de plegado en absoluto.
niveles de optimización. Además, otros pases de optimización en GCC usan esta bandera para
controlar los análisis de flujo de datos globales que eliminan las comprobaciones inútiles de punteros nulos;
estos asumen que si se comprueba un puntero después de que ya se ha desreferenciado,
no puede ser nulo.

Sin embargo, tenga en cuenta que en algunos entornos esta suposición no es cierta. Usar
-fno-eliminar-comprobaciones-de-puntero-nulo para deshabilitar esta optimización para programas que dependen
sobre ese comportamiento.

Algunos objetivos, especialmente los incrustados, desactivan esta opción en todos los niveles. De lo contrario
está habilitado en todos los niveles: -O0, -O1, -O2, -O3, -os. Pases que usan la información
se habilitan de forma independiente en diferentes niveles de optimización.

-fdevirtualizar
Intente convertir las llamadas a funciones virtuales en llamadas directas. Esto se hace tanto
dentro de un procedimiento e interproceduralmente como parte de la alineación indirecta
(-findirect-inline) y propagación constante entre procedimientos (-fipa-cp). Habilitado en
-O2, -O3, -os.

-fdevirtualizar-especulativamente
Intente convertir llamadas a funciones virtuales en llamadas directas especulativas. Residencia en
el análisis del gráfico de herencia de tipos, determinar para una llamada dada el conjunto de
objetivos probables. Si el conjunto es pequeño, preferiblemente de tamaño 1, cambie la llamada a un
Decisión condicional entre llamadas directas e indirectas. Las llamadas especulativas permiten
más optimizaciones, como la inserción. Cuando parecen inútiles después de más
optimización, se vuelven a convertir a su forma original.

-fdevirtualizar-en-ltrans
Transmita la información adicional necesaria para una desvirtualización agresiva al ejecutar el enlace.
Optimizador de tiempo en modo de transformación local. Esta opción permite más
desvirtualización, pero aumenta significativamente el tamaño de los datos transmitidos. Para esto
razón por la que está deshabilitado de forma predeterminada.

-Optimizaciones-económicas
Realice una serie de optimizaciones menores que sean relativamente caras.

Habilitado en niveles -O2, -O3, -os.

Sin
Intente eliminar las instrucciones de extensión redundantes. Esto es especialmente útil para
la arquitectura x86-64, que implícitamente se extiende a cero en registros de 64 bits después
escribiendo en su mitad inferior de 32 bits.

Habilitado para Alpha, AArch64 y x86 en niveles -O2, -O3, -os.

-fno-de-vida-dse
En C ++, el valor de un objeto solo se ve afectado por cambios dentro de su vida: cuando
comienza el constructor, el objeto tiene un valor indeterminado y cualquier cambio durante
la vida útil del objeto está muerta cuando el objeto es destruido. Tienda normalmente muerta
la eliminación se aprovechará de esto; si su código se basa en el valor de la
almacenamiento de objetos que persiste más allá de la vida útil del objeto, puede utilizar este indicador para
deshabilite esta optimización.

-encogimiento-rango-flive
Intente disminuir la presión del registro mediante la contracción del rango en vivo del registro. Este es
útil para procesadores rápidos con conjuntos de registros de tamaño pequeño o moderado.

-algoritmo-fira =algoritmo
Utilice el algoritmo de coloración especificado para el asignador de registros integrado. los
algoritmo el argumento puede ser lista de prioridades, que especifica el color de prioridad de Chow, o CB,
que especifica la coloración Chaitin-Briggs. La coloración Chaitin-Briggs no está implementada
para todas las arquitecturas, pero para aquellos destinos que lo admiten, es el valor predeterminado
porque genera mejor código.

-fira-region =región
Utilice regiones especificadas para el asignador de registros integrado. los región argumento
debe ser uno de los siguientes:

todos Utilice todos los bucles como regiones de asignación de registros. Esto puede dar los mejores resultados para
máquinas con un juego de registros pequeño y / o irregular.

mezclado
Utilice todos los bucles excepto los bucles con una presión de registro pequeña como regiones. Esta
El valor generalmente da los mejores resultados en la mayoría de los casos y para la mayoría de las arquitecturas, y
está habilitado de forma predeterminada cuando se compila con optimización para velocidad (-O, -O2, ...)

una Utilice todas las funciones como una sola región. Esto generalmente da como resultado el código más pequeño
tamaño, y está habilitado de forma predeterminada para -os or -O0.

-fira-polipasto-presión
Utilice IRA para evaluar la presión de registro en el pase de elevación de código para las decisiones de elevación
Expresiones Esta opción generalmente da como resultado un código más pequeño, pero puede ralentizar el
compilador abajo.

Esta opción está habilitada en el nivel -os para todos los objetivos.

-fira-loop-presión
Utilice IRA para evaluar la presión de registro en bucles para tomar decisiones para mover invariantes de bucle.
Esta opción generalmente da como resultado la generación de código más rápido y más pequeño en máquinas con
archivos de registro grandes (> = 32 registros), pero puede ralentizar el compilador.

Esta opción está habilitada en el nivel -O3 para algunos objetivos.

-fno-ira-compartir-guardar-ranuras
Deshabilite el uso compartido de las ranuras de pila que se usan para guardar los registros duros utilizados en las llamadas que se encuentran en la actualidad
una llamada. Cada registro duro obtiene una ranura de pila separada y, como resultado, la pila de funciones
los marcos son más grandes.

-fno-ira-share-spill-tragamonedas
Deshabilite el uso compartido de las ranuras de pila asignadas para pseudo-registros. Cada pseudo-registro
que no obtiene un registro duro, obtiene una ranura de pila separada y, como resultado, la función
los marcos de la pila son más grandes.

-fira-verbose =n
Controle la verbosidad del archivo de volcado para el asignador de registros integrado. los
el valor predeterminado es 5. Si el valor n es mayor o igual a 10, la salida de volcado se envía
a stderr usando el mismo formato que n menos 10.

-fla-remat
Habilite la rematerialización sensible a CFG en LRA. En lugar de cargar valores de derrames
pseudos, LRA intenta rematerializar (recalcular) los valores si es rentable.

Habilitado en niveles -O2, -O3, -os.

rama retrasada
Si es compatible con la máquina de destino, intente reordenar las instrucciones para explotar
ranuras de instrucción disponibles después de instrucciones de bifurcación retrasadas.

Habilitado en niveles -O, -O2, -O3, -os.

-fschedule-insns
Si es compatible con la máquina de destino, intente reordenar las instrucciones para eliminar
la ejecución se detiene debido a que los datos requeridos no están disponibles. Esto ayuda a las máquinas que
tener instrucciones de carga de memoria o punto flotante lento al permitir que otras instrucciones
emitirse hasta que se requiera el resultado de la carga o la instrucción de coma flotante.

Habilitado en niveles -O2, -O3.

-fschedule-insns2
Similar a -fschedule-insns, pero solicita un pase adicional de programación de instrucciones
una vez realizada la asignación de registros. Esto es especialmente útil en máquinas con
relativamente pequeño número de registros y donde las instrucciones de carga de memoria toman más de
un ciclo.

Habilitado en niveles -O2, -O3, -os.

-fno-programado-interbloqueo
No programe instrucciones en bloques básicos. Esto normalmente está habilitado de forma predeterminada.
al programar antes de la asignación del registro, es decir, con -fschedule-insns o en -O2 or
mayor.

-fno-sched-spec
No permita el movimiento especulativo de las instrucciones sin carga. Esto normalmente está habilitado por
predeterminado cuando se programa antes de la asignación de registro, es decir, con -fschedule-insns o en
-O2 o superior.

-fsched-presión
Habilite la programación de insn sensible a la presión del registro antes de la asignación del registro. Esta
sólo tiene sentido cuando se habilita la programación antes de la asignación de registros, es decir, con
-fschedule-insns o en -O2 o mas alto. El uso de esta opción puede mejorar la generada
codifique y disminuya su tamaño evitando que la presión del registro aumente por encima del número
de registros duros disponibles y derrames posteriores en la asignación de registros.

-fsched-spec-carga
Permitir el movimiento especulativo de algunas instrucciones de carga. Esto solo tiene sentido cuando
programación antes de la asignación de registros, es decir, con -fschedule-insns o en -O2 o superior.

-fsched-spec-load-peligroso
Permitir el movimiento especulativo de más instrucciones de carga. Esto solo tiene sentido cuando
programación antes de la asignación de registros, es decir, con -fschedule-insns o en -O2 o superior.

-fsched-stacked-insns
-fsched-stalled-insns =n
Defina cuántos insns (si los hay) se pueden mover prematuramente de la cola de estancados
insns en la lista de listos durante el segundo pase de programación. -fno-programado-estancado-insns
significa que ningún insns se mueve prematuramente, -fsched-stalled-insns = 0 significa que no hay
límite en la cantidad de insns en cola que se pueden mover prematuramente. -fsched-stacked-insns
sin un valor es equivalente a -fsched-stalled-insns = 1.

-fsched-stacked-insns-dep
-fsched-estancado-insns-dep =n
Definir cuántos grupos de insn (ciclos) se examinan en busca de una dependencia de un insn estancado
que es un candidato para la eliminación prematura de la cola de insns estancados. Esto tiene
un efecto solo durante el segundo pase de programación, y solo si -fsched-stacked-insns is
usado. -fno-programado-estancado-insns-dep es equivalente a -fsched-estancado-insns-dep = 0.
-fsched-stacked-insns-dep sin un valor es equivalente a
-fsched-estancado-insns-dep = 1.

-fsched2-use-superbloques
Cuando programe después de la asignación de registros, use la programación de superbloque. Esto permite
movimiento a través de los límites básicos de los bloques, lo que resulta en programas más rápidos. Esta opcion es
experimental, ya que no todas las descripciones de máquina utilizadas por GCC modelan la CPU lo suficientemente cerca
para evitar resultados poco fiables del algoritmo.

Esto solo tiene sentido cuando se programa después de la asignación de registros, es decir, con
-fschedule-insns2 o en -O2 o superior.

-fsched-group-heurística
Habilite la heurística de grupo en el planificador. Esta heurística favorece la instrucción
que pertenece a un grupo de programación. Esto está habilitado de forma predeterminada cuando la programación es
habilitado, es decir, con -fschedule-insns or -fschedule-insns2 o en -O2 o superior.

-fsched-camino-crítico-heurístico
Habilite la heurística de ruta crítica en el programador. Esta heurística favorece
instrucciones sobre la ruta crítica. Esto está habilitado de forma predeterminada cuando la programación es
habilitado, es decir, con -fschedule-insns or -fschedule-insns2 o en -O2 o superior.

-fsched-spec-insn-heurística
Habilite la heurística de instrucción especulativa en el planificador. Esta heurística favorece
instrucciones especulativas con mayor debilidad de dependencia. Esto está habilitado por defecto
cuando la programación está habilitada, es decir, con -fschedule-insns or -fschedule-insns2 o en -O2
o superior.

-fsched-rank-heurística
Habilite la heurística de rango en el programador. Esta heurística favorece la instrucción
pertenecientes a un bloque básico de mayor tamaño o frecuencia. Esto está habilitado por defecto
cuando la programación está habilitada, es decir, con -fschedule-insns or -fschedule-insns2 o en -O2
o superior.

-fsched-última-insn-heurística
Habilite la heurística de la última instrucción en el planificador. Esta heurística favorece
instrucción que depende menos de la última instrucción programada. Esto esta habilitado
por defecto cuando la programación está habilitada, es decir, con -fschedule-insns or -fschedule-insns2
o en -O2 o superior.

-fsched-dep-count-heurística
Habilite la heurística de recuento dependiente en el planificador. Esta heurística favorece
instrucción que tiene más instrucciones dependiendo de ella. Esto está habilitado por defecto
cuando la programación está habilitada, es decir, con -fschedule-insns or -fschedule-insns2 o en -O2
o superior.

-freschedule-modulo-programados-bucles
La programación de módulo se realiza antes que la programación tradicional. Si un bucle es módulo
Los pases de programación posteriores programados pueden cambiar su horario. Utilice esta opción para
controlar ese comportamiento.

-programación-selectiva
Programe instrucciones utilizando un algoritmo de programación selectiva. Ejecuciones de programación selectiva
en lugar de la primera pasada del planificador.

-fprogramación-selectiva2
Programe instrucciones utilizando un algoritmo de programación selectiva. Ejecuciones de programación selectiva
en lugar de la segunda pasada del planificador.

-fsel-programado-canalización
Habilite la canalización de software de los bucles más internos durante la programación selectiva. Esta
La opción no tiene ningún efecto a menos que uno de -programación-selectiva or -fprogramación-selectiva2
está prendido.

-fsel-sched-pipelining-external-bucles
Al canalizar bucles durante la programación selectiva, también canalice los bucles externos. Esta
La opción no tiene efecto a menos que -fsel-programado-canalización está prendido.

-interposición-semántica
Algunos formatos de objeto, como ELF, permiten la interposición de símbolos por el enlazador dinámico.
Esto significa que para los símbolos exportados desde el DSO, el compilador no puede realizar
propagación interprocedimiento, alineación y otras optimizaciones en previsión de que el
la función o variable en cuestión puede cambiar. Si bien esta función es útil, para
ejemplo, para reescribir las funciones de asignación de memoria mediante una implementación de depuración, es
caro en términos de calidad del código. Con -interposición-fno-semántica el compilador
asume que si ocurre la interposición para funciones, la función de sobrescritura tendrá
precisamente la misma semántica (y efectos secundarios). Del mismo modo, si ocurre la interposición
para las variables, el constructor de la variable será el mismo. La bandera no tiene
efecto para funciones declaradas explícitamente en línea (donde nunca está permitido para
interposición para cambiar la semántica) y para símbolos explícitamente declarados débiles.

-f-envoltura retráctil
Emitir prólogos de función solo antes de las partes de la función que lo necesitan, en lugar de en
la parte superior de la función. Esta bandera está habilitada por defecto en -O y más alto.

-fcaller-salva
Habilite la asignación de valores a los registros que son golpeados por llamadas a funciones, por
emitiendo instrucciones adicionales para guardar y restaurar los registros alrededor de tales llamadas. Tal
la asignación se realiza solo cuando parece resultar en un mejor código.

Esta opción siempre está habilitada de forma predeterminada en ciertas máquinas, generalmente aquellas que tienen
no hay registros de llamadas preservadas para usar en su lugar.

Habilitado en niveles -O2, -O3, -os.

-ajustes-de-pila-combinada
Realiza un seguimiento de los ajustes de la pila (pulsaciones y estallidos) y apila las referencias de memoria y luego intenta
para encontrar formas de combinarlos.

Habilitado por defecto en -O1 y más alto.

-fipa-ra
Utilice los registros de guardado de llamadas para la asignación si esos registros no son utilizados por ninguna persona llamada.
función. En ese caso, no es necesario guardarlos y restaurarlos alrededor de las llamadas.
Esto solo es posible si las funciones llamadas son parte de la misma unidad de compilación que la actual
función y se compilan antes.

Habilitado en niveles -O2, -O3, -os.

-fconserve-pila
Intente minimizar el uso de la pila. El compilador intenta utilizar menos espacio de pila, incluso
si eso hace que el programa sea más lento. Esta opción implica configurar el marco de pila grande
parámetro a 100 y el crecimiento-del-marco-de-pila-grande parámetro a 400.

-ftree-reasoc
Realice la reasociación en árboles. Esta bandera está habilitada por defecto en -O y más alto.

-ftree-pre
Realice eliminación de redundancia parcial (PRE) en árboles. Esta bandera está habilitada por
predeterminado en -O2 y -O3.

-free-parcial-pre
Hacer la eliminación de redundancia parcial (PRE) más agresiva. Esta bandera está habilitada por
predeterminado en -O3.

-ftree-forwprop
Realice la propagación hacia adelante en árboles. Esta bandera está habilitada por defecto en -O y
mayor.

-ftree-fre
Realice la eliminación de redundancia completa (FRE) en árboles. La diferencia entre FRE y
PRE es que FRE solo considera expresiones que se calculan en todas las rutas que conducen a
el cálculo redundante. Este análisis es más rápido que PRE, aunque expone menos
despidos. Esta bandera está habilitada por defecto en -O y más alto.

-ftree-phiprop
Realice el izado de cargas desde punteros condicionales en árboles. Este pase está habilitado por
predeterminado en -O y más alto.

-cargas-adyacentes
Elevar cargas especulativamente de ambas ramas de un if-then-else si las cargas son de
ubicaciones adyacentes en la misma estructura y la arquitectura de destino tiene un condicional
mover instrucción. Esta bandera está habilitada por defecto en -O2 y más alto.

-ftree-copia-prop
Realice la propagación de copias en árboles. Esta pasada elimina las operaciones de copia innecesarias.
Esta bandera está habilitada por defecto en -O y más alto.

-fipa-puro-constante
Descubra qué funciones son puras o constantes. Habilitado por defecto en -O y más alto.

-fipa-referencia
Descubra qué variables estáticas no escapan a la unidad de compilación. Habilitado por
predeterminado en -O y más alto.

-fipa-pta
Realizar análisis de puntero interprocedimiento y modificación interprocedimiento y
análisis de referencia. Esta opción puede causar un uso excesivo de memoria y tiempo de compilación en
grandes unidades de compilación. No está habilitado de forma predeterminada en ningún nivel de optimización.

-fipa-perfil
Realice la propagación de perfiles entre procedimientos. Las funciones llamadas solo desde el frío
Las funciones están marcadas como frías. También funciones ejecutadas una vez (como "frío",
"noreturn", constructores estáticos o destructores). Funciones frías y
bucle menos partes de funciones ejecutadas una vez se optimizan para el tamaño. Habilitado por
predeterminado en -O y más alto.

-fipa-cp
Realice una propagación constante entre procedimientos. Esta optimización analiza el programa
para determinar cuándo los valores pasados ​​a las funciones son constantes y luego optimiza
respectivamente. Esta optimización puede aumentar sustancialmente el rendimiento si el
la aplicación tiene constantes pasadas a funciones. Esta bandera está habilitada por defecto en
-O2, -os y -O3.

-fipa-cp-clon
Realice la clonación de funciones para fortalecer la propagación constante entre procedimientos. Cuando
habilitada, la propagación constante entre procedimientos realiza la clonación de funciones cuando
La función visible externamente se puede llamar con argumentos constantes. Porque esto
La optimización puede crear múltiples copias de funciones, puede aumentar significativamente
tamaño del código (ver --param ipcp-unit-growth =propuesta de). Esta bandera está habilitada por defecto en
-O3.

-fipa-cp-alineación
Cuando está habilitada, esta optimización propaga la alineación de los parámetros de función para admitir
mejor vectorización y operaciones de cuerdas.

Esta bandera está habilitada por defecto en -O2 y -os. Requiere que -fipa-cp está habilitado.

-fipa-icf
Realice el plegado de código idéntico para funciones y variables de solo lectura. los
la optimización reduce el tamaño del código y puede perturbar las pilas de desenrollado al reemplazar una función
por uno equivalente con un nombre diferente. La optimización funciona de forma más eficaz con
optimización de tiempo de enlace habilitada.

Sin embargo, el comportamiento es similar a la optimización de Gold Linker ICF, GCC ICF funciona en
diferentes niveles y, por lo tanto, las optimizaciones no son las mismas: hay equivalencias que
se encuentran solo por GCC y las equivalencias solo las encuentra Gold.

Esta bandera está habilitada por defecto en -O2 y -os.

-fisolate-erroneous-rutas-desreferencia
Detectar rutas que desencadenan un comportamiento erróneo o indefinido debido a la eliminación de referencias a un valor nulo
puntero. Aísle esos caminos del flujo de control principal y gire la declaración con
comportamiento erróneo o indefinido en una trampa. Esta bandera está habilitada por defecto en -O2
y más alto.

-atributo-de-rutas-erróneas-aislantes
Detectar rutas que desencadenan un comportamiento erróneo o indefinido debido a que se utiliza un valor nulo
de una manera prohibida por un atributo "returns_nonnull" o "nonnull". Aislar esos caminos
del flujo de control principal y convertir la declaración con comportamiento erróneo o indefinido
en una trampa. Esto no está habilitado actualmente, pero puede ser habilitado por -O2 en el futuro.

-fregadero de tres
Realice un movimiento de almacenamiento hacia adelante en los árboles. Esta bandera está habilitada por defecto en -O y
mayor.

-ftree-bit-ccp
Realice una propagación constante de bits condicional dispersa en árboles y propague el puntero
información de alineación. Este pase solo opera en variables escalares locales y es
habilitado por defecto en -O y más alto. Requiere que -ftree-ccp está habilitado.

-ftree-ccp
Realice una propagación constante condicional escasa (CCP) en árboles. Este pase solo
opera en variables escalares locales y está habilitado por defecto en -O y más alto.

-fssa-phiopt
Realice una coincidencia de patrones en los nodos SSA PHI para optimizar el código condicional. Este pase es
habilitado por defecto en -O y más alto.

conversión de tres interruptores
Realice la conversión de inicializaciones simples en un conmutador a inicializaciones de un
matriz escalar. Esta bandera está habilitada por defecto en -O2 y más alto.

-fusión-de-tres-colas
Busque secuencias de código idénticas. Cuando lo encuentre, reemplace uno con un salto al otro.
Esta optimización se conoce como fusión de cola o salto cruzado. Esta bandera está habilitada por
predeterminado en -O2 y más alto. El tiempo de compilación en este pase se puede limitar usando
comparaciones de fusión de cola máxima parámetro y iteraciones de fusión de cola máxima parámetro.

-ftre-dce
Realice eliminación de código muerto (DCE) en árboles. Esta bandera está habilitada por defecto en -O
y más alto.

-ftree-incorporado-llamada-dce
Realice la eliminación condicional de código muerto (DCE) para llamadas a funciones integradas que
pueden establecer "errno" pero, por lo demás, están libres de efectos secundarios. Esta bandera está habilitada de forma predeterminada
at -O2 y más alto si -os tampoco se especifica.

-ftree-dominator-opciones
Realice una variedad de limpiezas escalares simples (propagación constante / copia, redundancia
eliminación, propagación de rango y simplificación de expresión) basado en un dominador
cruce de árboles. Esto también realiza subprocesos de salto (para reducir los saltos a saltos). Esta
La bandera está habilitada de forma predeterminada en -O y más alto.

-ftre-dse
Realice la eliminación del almacén muerto (DSE) en los árboles. Una tienda muerta es una tienda en un recuerdo
ubicación que luego es sobrescrita por otra tienda sin cargas intermedias. En
en este caso, se puede eliminar la tienda anterior. Esta bandera está habilitada por defecto en -O y
mayor.

-ftre-ch
Realice la copia de encabezado de bucle en árboles. Esto es beneficioso ya que aumenta
efectividad de las optimizaciones de movimiento de código. También ahorra un salto. Esta bandera es
habilitado por defecto en -O y más alto. No está habilitado para -os, ya que normalmente
aumenta el tamaño del código.

-ftree-loop-optimizar
Realice optimizaciones de bucle en árboles. Esta bandera está habilitada por defecto en -O y
mayor.

-ftree-loop-lineal
Realice transformaciones de intercambio de bucle en el árbol. Igual que -intercambio-de-bucle. Usar
esta transformación de código, GCC debe configurarse con --con-isl para habilitar el
Infraestructura de transformación de bucle de grafito.

-intercambio-de-bucle
Realice transformaciones de intercambio de bucles en bucles. Intercambiar dos bucles anidados
cambia los bucles interior y exterior. Por ejemplo, dado un bucle como:

HACER J = 1, M
HAGO I = 1, N
A (J, I) = A (J, I) * C
ENDO
ENDO

El intercambio de bucle transforma el bucle como si estuviera escrito:

HAGO I = 1, N
HACER J = 1, M
A (J, I) = A (J, I) * C
ENDO
ENDO

que puede ser beneficioso cuando "N" es más grande que los cachés, porque en Fortran, el
Los elementos de una matriz se almacenan en la memoria contigua por columna, y el original
El bucle itera sobre las filas, creando potencialmente en cada acceso un error de caché. Esta
La optimización se aplica a todos los idiomas admitidos por GCC y no se limita a
Fortran. Para utilizar esta transformación de código, GCC debe configurarse con --con-isl a
habilitar la infraestructura de transformación de bucle Graphite.

-floop-strip-mina
Realice transformaciones de minería de bandas de bucles en bucles. La minería a cielo abierto divide un bucle en
dos bucles anidados. El bucle exterior tiene pasos iguales al tamaño de la tira y el interior
El bucle tiene pasos del bucle original dentro de una tira. La longitud de la tira se puede cambiar
usando el tamaño de mosaico de bloque de bucle parámetro. Por ejemplo, dado un bucle como:

HAGO I = 1, N
A (yo) = A (yo) + C
ENDO

La minería de bandas de bucles transforma el bucle como si estuviera escrito:

HACER II = 1, N, 51
HAGO I = II, min (II + 50, N)
A (yo) = A (yo) + C
ENDO
ENDO

Esta optimización se aplica a todos los idiomas admitidos por GCC y no se limita a
Fortran. Para utilizar esta transformación de código, GCC debe configurarse con --con-isl a
habilitar la infraestructura de transformación de bucle Graphite.

-bloque-bucle
Realice transformaciones de bloqueo de bucles en bucles. Bloqueo de minas a cielo abierto en cada bucle
nido de bucles de manera que los accesos a la memoria de los bucles de elementos quepan dentro de las memorias caché. los
La longitud de la tira se puede cambiar usando el tamaño de mosaico de bloque de bucle parámetro. Por ejemplo,
dado un bucle como:

HAGO I = 1, N
HACER J = 1, M
A (J, I) = B (I) + C (J)
ENDO
ENDO

El bloqueo de bucle transforma el bucle como si estuviera escrito:

HACER II = 1, N, 51
HACER JJ = 1, M, 51
HAGO I = II, min (II + 50, N)
HACER J = JJ, min (JJ + 50, M)
A (J, I) = B (I) + C (J)
ENDO
ENDO
ENDO
ENDO

lo que puede ser beneficioso cuando "M" es más grande que las cachés, porque el bucle más interno
itera sobre una cantidad menor de datos que se pueden mantener en las cachés. Esta
La optimización se aplica a todos los idiomas admitidos por GCC y no se limita a
Fortran. Para utilizar esta transformación de código, GCC debe configurarse con --con-isl a
habilitar la infraestructura de transformación de bucle Graphite.

-fgraphite-identidad
Habilite la transformación de identidad para grafito. Para cada SCoP generamos el
representación poliédrica y transformarla de nuevo en gimple. Utilizando -fgraphite-identidad
podemos comprobar los costes o beneficios de la transformación GIMPLE -> GRAPHITE -> GIMPLE.
El generador de código ISL también realiza algunas optimizaciones mínimas, como index
división y eliminación de código muerto en bucles.

-floop-nest-optimizar
Habilite el optimizador de nidos de bucles basado en ISL. Este es un optimizador de nido de bucles genérico basado
en los algoritmos de optimización de Plutón. Calcula una estructura de bucle optimizada para
localidad de datos y paralelismo. Esta opción es experimental.

-floop-desenrollar-y-atasco
Habilite desenrollar y atascar para el optimizador de nido de bucles basado en ISL. El factor de desenrollado puede ser
cambiado usando el bucle-desenrollar-jam-tamaño parámetro. La dimensión desenrollada (contando
desde el más interno) se puede cambiar usando el loop-unroll-atasco-profundidad parámetro.
.

-floop-paralelizar-todo
Utilice el análisis de dependencia de datos de Graphite para identificar bucles que se pueden paralelizar.
Paralelizar todos los bucles que se pueden analizar para que no contengan dependencias transportadas por bucles
sin comprobar que es rentable paralelizar los bucles.

-fcheck-data-deps
Compare los resultados de varios analizadores de dependencia de datos. Esta opción se utiliza para
depurar los analizadores de dependencia de datos.

-ftree-bucle-si-convertir
Intente transformar los saltos condicionales en los bucles más internos en sin ramificaciones
equivalentes. La intención es eliminar el flujo de control de los bucles más internos para
para mejorar la capacidad del pase de vectorización para manejar estos bucles. Este es
habilitado por defecto si la vectorización está habilitada.

-ftree-loop-if-convert-tiendas
Intente también if-convertir saltos condicionales que contienen escrituras de memoria. Esta
La transformación puede ser insegura para programas de subprocesos múltiples, ya que transforma condicional
la memoria escribe en la memoria incondicional escribe. Por ejemplo,

para (i = 0; i <N; i ++)
si (cond)
A [i] = expr;

se transforma en

para (i = 0; i <N; i ++)
A [i] = cond? expr: A [i];

potencialmente produciendo carreras de datos.

-distribución-de-bucle-libre
Realice una distribución de bucle. Esta bandera puede mejorar el rendimiento de la caché en cuerpos de bucle grandes.
y permitir que las optimizaciones de bucle adicionales, como la paralelización o la vectorización, tomen
lugar. Por ejemplo, el bucle

HAGO I = 1, N
A (yo) = B (yo) + C
D (yo) = E (yo) * F
ENDO

se transforma en

HAGO I = 1, N
A (yo) = B (yo) + C
ENDO
HAGO I = 1, N
D (yo) = E (yo) * F
ENDO

-ftree-loop-distribuir-patrones
Realizar distribución de bucle de patrones que se pueden generar con código con llamadas a un
Biblioteca. Esta bandera está habilitada por defecto en -O3.

Este pase distribuye los bucles de inicialización y genera una llamada a memset zero.
Por ejemplo, el bucle

HAGO I = 1, N
A (yo) = 0
B (yo) = A (yo) + yo
ENDO

se transforma en

HAGO I = 1, N
A (yo) = 0
ENDO
HAGO I = 1, N
B (yo) = A (yo) + yo
ENDO

y el ciclo de inicialización se transforma en una llamada a memset zero.

-ftree-bucle-im
Realice un movimiento invariante de bucle en los árboles. Este pase mueve solo invariantes que son difíciles
para manejar a nivel RTL (llamadas a funciones, operaciones que se expanden a secuencias no triviales
de insns). Con -funswitch-bucles también mueve operandos de condiciones que son
invariante fuera del ciclo, de modo que podemos usar solo análisis de invariabilidad trivial en
bucle sin conmutación. El pase también incluye movimiento de tienda.

-ftree-loop-ivcanon
Cree un contador canónico para el número de iteraciones en bucles para las cuales determinar
número de iteraciones requiere un análisis complicado. Las optimizaciones posteriores pueden
determinar el número fácilmente. Útil especialmente en relación con el desenrollado.

-fivoptos
Realizar optimizaciones de variables de inducción (reducción de fuerza, variable de inducción
fusión y eliminación de variables de inducción) en árboles.

-ftree-paralelize-loops = n
Paralelizar los bucles, es decir, dividir su espacio de iteración para que se ejecuten en n subprocesos. Este es
solo es posible para bucles cuyas iteraciones son independientes y pueden ser arbitrariamente
reordenado. La optimización solo es rentable en máquinas multiprocesador, para bucles
que requieren un uso intensivo de la CPU, en lugar de estar restringidos, por ejemplo, por el ancho de banda de la memoria. Esta opción
implica -philoy, por lo tanto, solo se admite en objetivos que tienen soporte para
-philo.

-ftree-pta
Realice análisis de función-puntos locales-en árboles. Esta bandera está habilitada de forma predeterminada
at -O y más alto.

-ftre-sra
Realice reemplazo escalar de agregados. Este pase reemplaza las referencias de estructura
con escalares para evitar memorizar estructuras demasiado pronto. Esta bandera es
habilitado por defecto en -O y más alto.

-ftree-copyrename
Realizar copia de cambio de nombre en árboles. Este pase intenta cambiar el nombre de los temporales del compilador a
otras variables en las ubicaciones de copia, lo que generalmente resulta en nombres de variables que más
se parecen mucho a las variables originales. Esta bandera está habilitada por defecto en -O y
mayor.

-ftree-coalesce-inline-vars
Dígale al pase copyrename (ver -ftree-copyrename) para intentar combinar usuarios pequeños
variables definidas también, pero solo si están en línea desde otras funciones. Es un
forma más limitada de -ftree-coalesce-vars. Esto puede dañar la información de depuración de tales
variables inline, pero mantiene las variables de la función inline-into separadas de cada
otros, de modo que es más probable que contengan los valores esperados en una depuración
de preguntas y respuestas.

-ftree-coalesce-vars
Dígale al pase copyrename (ver -ftree-copyrename) para intentar combinar usuarios pequeños
variables definidas también, en lugar de solo temporarios del compilador. Esto puede limitar severamente
la capacidad de depurar un programa optimizado compilado con -fno-var-seguimiento-asignaciones.
En la forma negada, esta bandera evita la fusión de SSA de variables de usuario, incluyendo
los en línea. Esta opción está activada de forma predeterminada.

-ftree-ter
Realice un reemplazo de expresión temporal durante la fase SSA-> normal. Soltero
use / single def temporales se reemplazan en su ubicación de uso con su definición
expresión. Esto da como resultado un código que no es GIMPLE, pero les da a los expansores mucho más
árboles complejos en los que trabajar, lo que da como resultado una mejor generación de RTL. Esto está habilitado por
predeterminado en -O y más alto.

-ftree-slsr
Realice una reducción de la fuerza en línea recta en los árboles. Esto reconoce relacionados
expresiones que involucran multiplicaciones y las reemplaza por cálculos menos costosos
cuando sea posible. Esto está habilitado de forma predeterminada en -O y más alto.

-ftree-vectorizar
Realiza vectorización en árboles. Esta bandera habilita -ftree-loop-vectorizar y
-ftree-slp-vectorizar si no se especifica explícitamente.

-ftree-loop-vectorizar
Realice la vectorización de bucles en árboles. Esta bandera está habilitada por defecto en -O3 y cuando
-ftree-vectorizar está habilitado.

-ftree-slp-vectorizar
Realice una vectorización de bloques básica en árboles. Esta bandera está habilitada por defecto en -O3 y
cuando -ftree-vectorizar está habilitado.

-fvect-cost-model =modelo
Modificar el modelo de costes utilizado para la vectorización. los modelo El argumento debe ser uno de
ilimitado, lugar de trabajo dinámico or barato. Con el ilimitado modelar la ruta de código vectorizada es
se supone que es rentable, mientras que con el lugar de trabajo dinámico modelar un control de tiempo de ejecución protege el
ruta de código vectorizada para habilitarlo solo para recuentos de iteraciones que probablemente se ejecutarán
más rápido que cuando se ejecuta el bucle escalar original. los barato modelo inhabilita
vectorización de bucles donde hacerlo tendría un costo prohibitivo, por ejemplo, debido a
El tiempo de ejecución requerido comprueba la dependencia o alineación de los datos, pero por lo demás es igual al
lugar de trabajo dinámico modelo. El modelo de costo predeterminado depende de otros indicadores de optimización y es
ya sea lugar de trabajo dinámico or barato.

-fsimd-cost-model =modelo
Modificar el modelo de costes utilizado para la vectorización de bucles marcados con OpenMP o Cilk
Además de la directiva simd. los modelo El argumento debe ser uno de ilimitado, lugar de trabajo dinámico, barato.
Todos los valores de modelo tienen el mismo significado que se describe en -modelo-de-costos-fvect y por
predeterminado un modelo de costos definido con -modelo-de-costos-fvect se utiliza.

-ftree-vrp
Realice la propagación del rango de valores en árboles. Esto es similar a la propagación constante
pass, pero en lugar de valores, se propagan rangos de valores. Esto permite
optimizadores para eliminar las comprobaciones de rango innecesarias, como las comprobaciones vinculadas a la matriz y el puntero nulo
cheques. Esto está habilitado de forma predeterminada en -O2 y más alto. Eliminación de comprobación de puntero nulo
solo se hace si -f eliminar-comprobaciones-de-puntero-nulo está habilitado.

-fsplit-ivs-en-desenrollador
Habilita la expresión de valores de variables de inducción en iteraciones posteriores del
bucle desenrollado utilizando el valor de la primera iteración. Esto rompe la larga dependencia
cadenas, mejorando así la eficiencia de las pasadas de programación.

Una combinación de -fweb y CSE suele ser suficiente para obtener el mismo efecto.
Sin embargo, eso no es confiable en los casos en que el cuerpo del bucle es más complicado que un
bloque básico único. Tampoco funciona en absoluto en algunas arquitecturas debido a
restricciones en el pase CSE.

Esta optimización está habilitada de forma predeterminada.

-expansión-variable-en-desenrollador
Con esta opción, el compilador crea múltiples copias de algunas variables locales cuando
desenrollar un bucle, lo que puede resultar en un código superior.

-finvestimiento-parcial
Partes integradas de funciones. Esta opción tiene algún efecto solo cuando la inserción en sí misma es
encendido por el -funciones-de-fin-line or -fines-pequeñas-funciones .

Habilitado a nivel -O2.

-fpredictivo-común
Realice una optimización predictiva del commoning, es decir, reutilice los cálculos (especialmente
cargas de memoria y almacenes) realizados en iteraciones anteriores de bucles.

Esta opción está habilitada en el nivel -O3.

-fprefetch-bucle-matrices
Si es compatible con la máquina de destino, genere instrucciones para precargar memoria a
mejorar el rendimiento de los bucles que acceden a grandes matrices.

Esta opción puede generar un código mejor o peor; Los resultados dependen en gran medida de la
estructura de bucles dentro del código fuente.

Discapacitado en el nivel -os.

-fno-mirilla
-fno-mirilla2
Deshabilite las optimizaciones de mirilla específicas de la máquina. La diferencia entre
-fno-mirilla y -fno-mirilla2 está en cómo se implementan en el compilador; algunos
los objetivos usan uno, algunos usan el otro, algunos usan ambos.

-f mirilla está habilitado de forma predeterminada. -fmirilla2 habilitado en niveles -O2, -O3, -os.

-fno-conjetura-probabilidad-rama
No adivine probabilidades de ramificación utilizando heurísticas.

GCC utiliza heurísticas para adivinar las probabilidades de ramificación si no las proporciona
retroalimentación de perfiles-fprofile-arcos). Estas heurísticas se basan en el flujo de control
grafico. Si "__builtin_expect" especifica algunas probabilidades de ramificación, entonces el
Las heurísticas se utilizan para adivinar las probabilidades de ramificación para el resto del flujo de control.
gráfico, teniendo en cuenta la información "__builtin_expect". Las interacciones entre el
heurísticas y "__builtin_expect" pueden ser complejas y, en algunos casos, pueden ser útiles
para deshabilitar la heurística para que los efectos de "__builtin_expect" sean más fáciles de
entender.

El valor predeterminado es -f adivinar-rama-probabilidad a niveles -O, -O2, -O3, -os.

-Bloques-de-pedidos
Reordene los bloques básicos en la función compilada para reducir el número de tomas
ramas y mejorar la localidad del código.

Habilitado en niveles -O2, -O3.

-despedir-bloques-y-partición
Además de reordenar los bloques básicos en la función compilada, para reducir
número de ramas tomadas, divide los bloques básicos calientes y fríos en secciones separadas
del ensamblado y los archivos .o, para mejorar la paginación y el rendimiento de la localidad de caché.

Esta optimización se desactiva automáticamente en presencia de manejo de excepciones,
para secciones de enlace una vez, para funciones con un atributo de sección definido por el usuario y en cualquier
arquitectura que no admite secciones con nombre.

Habilitado para x86 en niveles -O2, -O3.

-freorder-funciones
Reordene las funciones en el archivo de objeto para mejorar la localidad del código. Este es
implementado mediante el uso de subsecciones especiales ".text.hot" para ejecutado con más frecuencia
funciones y ".texto. improbable" para funciones ejecutadas poco probables. El reordenamiento se realiza mediante
el vinculador, por lo que el formato de archivo del objeto debe admitir secciones con nombre y el vinculador debe colocar
ellos de una manera razonable.

Además, los comentarios sobre el perfil deben estar disponibles para que esta opción sea efectiva. Ver
-fprofile-arcos para obtener más detalles.

Habilitado en niveles -O2, -O3, -os.

-fstrict-aliasing
Permita que el compilador asuma las reglas de alias más estrictas aplicables al lenguaje
siendo compilado. Para C (y C ++), esto activa optimizaciones basadas en el tipo de
Expresiones En particular, se supone que un objeto de un tipo nunca reside en el
misma dirección que un objeto de un tipo diferente, a menos que los tipos sean casi iguales.
Por ejemplo, un "unsigned int" puede alias un "int", pero no un "void *" o un "double". A
El tipo de carácter puede alias de cualquier otro tipo.

Preste especial atención a un código como este:

unión a_unión {
int i;
doble d;
};

int f () {
unión a_unión t;
td = 3.0;
return ti;
}

La práctica de leer de un miembro del sindicato diferente al más reciente
escrito en (llamado "juego de palabras con tipos") es común. Incluso con -fstrict-aliasing, escribe-
Se permite el juego de palabras, siempre que se acceda a la memoria a través del tipo de unión. Entonces el
El código anterior funciona como se esperaba. Sin embargo, es posible que este código no:

int f () {
unión a_unión t;
int * ip;
td = 3.0;
ip = & t.i;
return * ip;
}

Del mismo modo, acceda tomando la dirección, lanzando el puntero resultante y
desreferenciar el resultado tiene un comportamiento indefinido, incluso si el elenco usa un tipo de unión,
p.ej:

int f () {
doble d = 3.0;
return ((unión a_unión *) & d) -> i;
}

La -fstrict-aliasing la opción está habilitada en los niveles -O2, -O3, -os.

-fstrict-desbordamiento
Permita que el compilador asuma reglas estrictas de desbordamiento firmadas, según el idioma
siendo compilado. Para C (y C ++) esto significa que se desborda al hacer aritmética con
Los números con signo no están definidos, lo que significa que el compilador puede asumir que no
ocurrir. Esto permite varias optimizaciones. Por ejemplo, el compilador asume que
una expresión como "i + 10> i" siempre es cierta para la "i" con signo. Esta suposición es
solo es válido si el desbordamiento firmado no está definido, ya que la expresión es falsa si "i + 10"
se desborda cuando se usa aritmética de complemento a dos. Cuando esta opcin est en vigor cualquier
Intentar determinar si se debe escribir una operación sobre desbordamientos de números firmados.
con cuidado para no involucrar realmente el desbordamiento.

Esta opción también permite al compilador asumir una semántica de puntero estricta: dada una
puntero a un objeto, si agregar un desplazamiento a ese puntero no produce un puntero
al mismo objeto, la adición no está definida. Esto permite al compilador concluir
que "p + u> p" es siempre cierto para un puntero "p" y un entero sin signo "u". Esta
la suposición solo es válida porque la envoltura del puntero no está definida, ya que la expresión es
falso si "p + u" se desborda usando aritmética de complemento a dos.

Vea también el -fwrapv opción. Utilizando -fwrapv significa que el desbordamiento con signo entero es
totalmente definido: envuelve. Cuando -fwrapv se utiliza, no hay diferencia entre
-fstrict-desbordamiento y -fno-estricto-desbordamiento para enteros. Con -fwrapv ciertos tipos
de desbordamiento están permitidos. Por ejemplo, si el compilador se desborda al hacer
aritmética en constantes, el valor desbordado todavía se puede utilizar con -fwrapv, Pero no
de otra manera.

La -fstrict-desbordamiento la opción está habilitada en los niveles -O2, -O3, -os.

-funciones-falsas
-funciones-falsas =n
Alinear el inicio de funciones a la siguiente potencia de dos mayor que n, saltando hasta n
bytes. Por ejemplo, -funciones-falsas = 32 alinea funciones a los siguientes 32 bytes
límite, pero -funciones-falsas = 24 se alinea con el siguiente límite de 32 bytes solo si esto
se puede hacer saltando 23 bytes o menos.

-fno-alinear-funciones y -funciones-falsas = 1 son equivalentes y significan que funciones
no están alineados.

Algunos ensambladores solo admiten esta bandera cuando n es un poder de dos; en ese caso, es
redondeado.

If n no está especificado o es cero, use un valor predeterminado dependiente de la máquina.

Habilitado en niveles -O2, -O3.

-Etiquetas-falsas
-etiquetas-falsas =n
Alinear todos los objetivos de las ramas a un límite de potencia de dos, saltando hasta n bytes como
-funciones-falsas. Esta opción puede hacer que el código sea más lento, porque debe insertar
operaciones ficticias para cuando se alcanza el objetivo de la rama en el flujo habitual del código.

-fno-alinear-etiquetas y -etiquetas-falsas = 1 son equivalentes y significan que las etiquetas no son
alineado.

If -falign-bucles or -altos-saltos son aplicables y son mayores que este valor, entonces
en su lugar, se utilizan sus valores.

If n no está especificado o es cero, use un valor predeterminado dependiente de la máquina que es muy probable
para ser 1, lo que significa que no hay alineación.

Habilitado en niveles -O2, -O3.

-falign-bucles
-falign-loops =n
Alinee los bucles a un límite de potencia de dos, saltando hasta n bytes como -funciones-falsas.
Si los bucles se ejecutan muchas veces, esto compensa cualquier ejecución del maniquí.
operaciones.

-fno-alinear-bucles y -falign-loops = 1 son equivalentes y significan que los bucles no son
alineado.

If n no está especificado o es cero, use un valor predeterminado dependiente de la máquina.

Habilitado en niveles -O2, -O3.

-altos-saltos
-falign-jumps =n
Alinee los objetivos de las ramas a un límite de potencia de dos, para los objetivos de las ramas donde los objetivos
sólo se puede alcanzar saltando, saltando hasta n bytes como -funciones-falsas. En
en este caso, no es necesario ejecutar operaciones ficticias.

-fno-alinear-saltos y -saltos-falsos = 1 son equivalentes y significan que los bucles no son
alineado.

If n no está especificado o es cero, use un valor predeterminado dependiente de la máquina.

Habilitado en niveles -O2, -O3.

-funit-a-la-vez
Esta opción se deja por razones de compatibilidad. -funit-a-la-vez no tiene ningún efecto, mientras que
-fno-unidad-a-la-vez implica -fno-nivel-superior-reordenar y -fno-sección-anclajes.

Habilitado por defecto.

-fno-nivel-superior-reordenar
No reordene funciones de nivel superior, variables y declaraciones "asm". Envíelos en
en el mismo orden en que aparecen en el archivo de entrada. Cuando se utiliza esta opción,
las variables estáticas no referenciadas no se eliminan. Esta opción está destinada a admitir
código existente que se basa en un pedido en particular. Para un código nuevo, es mejor usar
atributos cuando sea posible.

Habilitado a nivel -O0. Cuando está deshabilitado explícitamente, también implica -fno-sección-anclajes,
que de otro modo está habilitado en -O0 en algunos objetivos.

-fweb
Construye webs como se usan comúnmente para propósitos de asignación de registros y asigna cada web
pseudo registro individual. Esto permite que el pase de asignación de registros opere en
pseudos directamente, pero también fortalece varios otros pases de optimización, como CSE,
optimizador de bucle y eliminador de código muerto trivial. Sin embargo, puede hacer que la depuración
imposible, ya que las variables ya no permanecen en un "registro de origen".

Habilitado por defecto con -funroll-bucles.

-programa-completo
Suponga que la unidad de compilación actual representa todo el programa que se está compilando.
Todas las funciones y variables públicas con la excepción de "main" y las fusionadas por
El atributo "externally_visible" se convierte en funciones estáticas y, en efecto, se optimizan
de forma más agresiva mediante optimizadores interprocedimiento.

Esta opción no debe usarse en combinación con -flto. En lugar de depender de un enlazador
El complemento debe proporcionar información más segura y precisa.

-flto [=n]
Esta opción ejecuta el optimizador de tiempo de enlace estándar. Cuando se invoca con el código fuente,
genera GIMPLE (una de las representaciones internas de GCC) y lo escribe en ELF especial
secciones en el archivo de objeto. Cuando los archivos de objeto están vinculados, todos los
Los cuerpos de función se leen de estas secciones ELF y se instancian como si hubieran sido
parte de la misma unidad de traducción.

Para utilizar el optimizador de tiempo de enlace, -flto y las opciones de optimización deben especificarse en
tiempo de compilación y durante el enlace final. Por ejemplo:

gcc -c -O2 -flto foo.c
gcc -c -O2 -flto bar.c
gcc -o miprog -flto -O2 foo.o bar.o

Las dos primeras invocaciones a GCC guardan una representación de código de bytes de GIMPLE en especial
Secciones ELF en el interior foo.o y bar.o. La invocación final lee el código de bytes de GIMPLE
en foo.o y bar.o, fusiona los dos archivos en una sola imagen interna y compila
el resultado como de costumbre. Ya que ambos foo.o y bar.o se fusionan en una sola imagen, esto
hace que todos los análisis y optimizaciones interprocedimiento en GCC funcionen en todo el
dos archivos como si fueran uno solo. Esto significa, por ejemplo, que el inliner es
capaz de integrar funciones en bar.o en funciones en foo.o y viceversa.

Otra forma (más sencilla) de habilitar la optimización del tiempo de enlace es:

gcc -o miprog -flto -O2 foo.c bar.c

Lo anterior genera código de bytes para foo.c y bar.c, los fusiona en un solo
Representación de GIMPLE y los optimiza como de costumbre para producir miprog.

Lo único importante a tener en cuenta es que para habilitar las optimizaciones de tiempo de enlace,
necesita utilizar el controlador GCC para realizar el paso de enlace. GCC luego realiza automáticamente
optimización del tiempo de enlace si alguno de los objetos involucrados fue compilado con el -flto
opción de línea de comandos. Por lo general, debe especificar las opciones de optimización que se utilizarán.
para la optimización del tiempo de enlace, aunque GCC intenta ser inteligente al adivinar una optimización
nivel para usar de las opciones utilizadas en tiempo de compilación si no especifica una en el enlace-
tiempo. Siempre puede anular la decisión automática de realizar la optimización del tiempo de enlace en
tiempo de enlace pasando -fno-lto al comando de enlace.

Para que la optimización completa del programa sea efectiva, es necesario asegurarse de que
supuestos del programa. El compilador necesita saber qué funciones y variables pueden
al que acceden las bibliotecas y el tiempo de ejecución fuera de la unidad optimizada de tiempo de enlace. Cuando
compatible con el vinculador, el complemento del vinculador (consulte -fusible-linker-plugin) pasa
información al compilador sobre los símbolos usados ​​y visibles externamente. Cuando el
el complemento del vinculador no está disponible, -programa-completo debe usarse para permitir que el compilador
para hacer estas suposiciones, lo que conduce a decisiones de optimización más agresivas.

Cuándo -fusible-linker-plugin no está habilitado entonces, cuando un archivo se compila con -flto, la
El archivo de objeto generado es más grande que un archivo de objeto normal porque contiene GIMPLE
códigos de bytes y el código final habitual (ver -fat-lto-objetos. Esto significa que el objeto
los archivos con información LTO se pueden vincular como archivos de objetos normales; si -fno-lto esta pasado
al enlazador, no se aplican optimizaciones entre procedimientos. Tenga en cuenta que cuando
-fno-gordos-lto-objetos está habilitado, la etapa de compilación es más rápida pero no puede realizar una
enlace regular, no LTO en ellos.

Además, los indicadores de optimización utilizados para compilar archivos individuales no son
necesariamente relacionados con los utilizados en el momento del enlace. Por ejemplo,

gcc -c -O0 -ffat-lto-objetos -flto foo.c
gcc -c -O0 -ffat-lto-objetos -flto bar.c
gcc -o miprog -O3 foo.o bar.o

Esto produce archivos de objetos individuales con código ensamblador no optimizado, pero el
binario resultante miprog está optimizado en -O3. Si, en cambio, el binario final es
generado con -fno-lto, entonces miprog no está optimizado.

Al producir el binario final, GCC solo aplica optimizaciones de tiempo de enlace a aquellos
archivos que contienen código de bytes. Por lo tanto, puede mezclar y combinar archivos de objetos y
bibliotecas con códigos de bytes GIMPLE y código de objeto final. GCC selecciona automáticamente
qué archivos optimizar en modo LTO y qué archivos vincular sin más
procesar.

Hay algunos indicadores de generación de código que GCC conserva al generar códigos de bytes, como
deben utilizarse durante la etapa de enlace final. Generalmente opciones especificadas en
tiempo de enlace anula los especificados en tiempo de compilación.

Si no especifica una opción de nivel de optimización -O en el momento del enlace, GCC calcula
uno basado en los niveles de optimización utilizados al compilar los archivos objeto. los
El nivel de optimización más alto gana aquí.

Actualmente, las siguientes opciones y su configuración se toman del primer archivo de objeto
que lo especificó explícitamente: -fPIC, -fpic, -fpie, -fcomún, -fexcepciones,
-fnon-call-excepciones, -fgnu-tm y todos los -m banderas de destino.

Se requieren ciertos indicadores de cambio de ABI para que coincidan en todas las unidades de compilación y
anular esto en el momento del enlace con un valor en conflicto se ignora. Esto incluye
opciones como -freg-estructura-retorno y -fpcc-estructura-retorno.

Otras opciones como -ffp-contrato, -fno-estricto-desbordamiento, -fwrapv, -fno-trapv or
-fno-estricto-aliasing se pasan a la etapa de enlace y se fusionan de forma conservadora
para unidades de traducción en conflicto. Específicamente -fno-estricto-desbordamiento, -fwrapv y
-fno-trapv tener prioridad y por ejemplo -ffp-contract = desactivado tiene prioridad sobre
-ffp-contract = rápido. Puede anularlos en tiempo de conexión.

Se recomienda que compile todos los archivos que participan en el mismo enlace con
las mismas opciones y también especificar esas opciones en el momento del enlace.

Si LTO encuentra objetos con enlace C declarado con tipos incompatibles en separado
unidades de traducción que se vincularán entre sí (comportamiento indefinido según ISO C99
6.2.7), se puede emitir un diagnóstico no fatal. El comportamiento aún no está definido en ejecución.
tiempo. Se pueden generar diagnósticos similares para otros idiomas.

Otra característica de LTO es que es posible aplicar optimizaciones entre procedimientos
en archivos escritos en diferentes idiomas:

gcc -c -flto foo.c
g ++ -c -flto bar.cc
gfortran -c -flto baz.f90
g ++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran

Tenga en cuenta que el enlace final se realiza con g ++ para obtener las bibliotecas en tiempo de ejecución de C ++ y
-lgfortran se agrega para obtener las bibliotecas de tiempo de ejecución de Fortran. En general, al mezclar
idiomas en modo LTO, debe usar las mismas opciones de comando de enlace que cuando mezcla
idiomas en una compilación normal (no LTO).

Si los archivos de objeto que contienen el código de bytes de GIMPLE se almacenan en un archivo de biblioteca, digamos
libfoo.a, es posible extraerlos y utilizarlos en un enlace LTO si está utilizando un
enlazador con soporte de complementos. Para crear bibliotecas estáticas adecuadas para LTO, use gcc-ar
y gcc-ranlib en lugar de ar y ranlib; para mostrar los símbolos de archivos objeto con
Código byte de GIMPLE, utilice gcc-nm. Esos comandos requieren que ar, ranlib y nm han sido
compilado con soporte para complementos. En el momento del enlace, use la bandera -fusible-linker-plugin a
asegúrese de que la biblioteca participe en el proceso de optimización de LTO:

gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo

Con el complemento del vinculador habilitado, el vinculador extrae los archivos GIMPLE necesarios de
libfoo.a y los pasa al GCC en ejecución para que formen parte del agregado
Imagen de GIMPLE para optimizar.

Si no está utilizando un vinculador compatible con complementos y / o no habilita el vinculador
plugin, luego los objetos dentro libfoo.a se extraen y vinculan como de costumbre, pero
no participe en el proceso de optimización de LTO. Para hacer una biblioteca estática
adecuado tanto para la optimización LTO como para el enlace habitual, compile sus archivos de objeto con
-flto -fat-lto-objetos.

Las optimizaciones de tiempo de enlace no requieren la presencia de todo el programa para funcionar.
Si el programa no requiere la exportación de ningún símbolo, es posible combinar
-flto y -programa-completo para permitir que los optimizadores interprocedimientos utilicen más
supuestos agresivos que pueden conducir a mejores oportunidades de optimización. Uso de
-programa-completo no es necesario cuando el complemento del vinculador está activo (consulte -fusible-linker-plugin).

La implementación actual de LTO no intenta generar un código de bytes que sea
portable entre diferentes tipos de hosts. Los archivos de código de bytes están versionados y no
es una verificación de versión estricta, por lo que los archivos de código de bytes generados en una versión de GCC no
trabajar con una versión anterior o más reciente de GCC.

La optimización del tiempo de enlace no funciona bien con la generación de información de depuración.
Combinando -flto -g es actualmente experimental y se espera que produzca inesperados
resultados.

Si especifica el opcional n, la optimización y generación de código realizada en el momento del enlace
se ejecuta en paralelo usando n trabajos paralelos utilizando un para lograr .
La variable de entorno HAZ se puede utilizar para anular el programa utilizado. El valor por defecto
valor por n es 1.

También puede especificar -flto = servidor de trabajos utilizar el modo de servidor de trabajos de GNU make para determinar
el número de trabajos paralelos. Esto es útil cuando el Makefile que llama a GCC ya está
Ejecutando en paralelo. Debes anteponer un + a la receta de comando en el padre
Makefile para que esto funcione. Es probable que esta opción solo funcione si HAZ es GNU hacer.

-flto-partición =alg
Especifique el algoritmo de partición utilizado por el optimizador de tiempo de enlace. El valor es
ya sea 1to1 para especificar una partición que refleje los archivos fuente originales o equilibrado
para especificar la partición en trozos de igual tamaño (siempre que sea posible) o max crear
nueva partición para cada símbolo cuando sea posible. Especificando ninguna como un algoritmo
deshabilita la partición y la transmisión por secuencias por completo. El valor predeterminado es equilibrado. Mientras
1to1 se puede utilizar como una solución para varios problemas de orden de código, el max
El particionamiento está destinado únicamente a pruebas internas. El valor una especifica que
exactamente una partición debe usarse mientras que el valor ninguna omite la partición y
ejecuta el paso de optimización del tiempo de enlace directamente desde la fase WPA.

-flto-odr-type-fusion
Habilite la transmisión de nombres de tipos alterados de tipos C ++ y su unificación en
tiempo de enlace. Esto aumenta el tamaño de los archivos de objetos LTO, pero habilita el diagnóstico de One
Definición Violaciones de las reglas.

-flto-nivel-de-compresión =n
Esta opción especifica el nivel de compresión utilizado para el lenguaje intermedio escrito
a archivos de objetos LTO, y solo es significativo junto con el modo LTO (-flto).
Los valores válidos son 0 (sin compresión) a 9 (compresión máxima). Valores fuera de este
rango se sujetan a 0 o 9. Si no se da la opción, un valor predeterminado equilibrado
se utiliza el ajuste de compresión.

-flto-informe
Imprime un informe con detalles internos sobre el funcionamiento del optimizador de tiempo de enlace. los
El contenido de este informe varía de una versión a otra. Está destinado a ser útil para GCC
desarrolladores al procesar archivos de objetos en modo LTO (a través de -flto).

Desactivado por defecto.

-flto-informe-wpa
Me gusta -flto-informe, pero solo imprima para la fase WPA de Optimización de tiempo de enlace.

-fusible-linker-plugin
Habilita el uso de un complemento de creación de enlaces durante la optimización del tiempo de enlace. Esta opción se basa
en el soporte de complementos en el enlazador, que está disponible en oro o en GNU ld 2.21 o
más nuevo.

Esta opción permite la extracción de archivos de objeto con código de bytes GIMPLE fuera de la biblioteca
archivo. Esto mejora la calidad de la optimización al exponer más código al enlace
optimizador de tiempo. Esta información especifica a qué símbolos se puede acceder externamente
(por objeto no LTO o durante la vinculación dinámica). Mejoras resultantes en la calidad del código en
binarios (y bibliotecas compartidas que usan visibilidad oculta) son similares a
-programa-completo. Vea -flto para obtener una descripción del efecto de esta bandera y cómo
úsalo

Esta opción está habilitada de forma predeterminada cuando el soporte LTO en GCC está habilitado y GCC fue
configurado para su uso con un vinculador que admita complementos (GNU ld 2.21 o más reciente u oro).

-fat-lto-objetos
Los objetos Fat LTO son archivos de objetos que contienen tanto el lenguaje intermedio como el
código de objeto. Esto los hace utilizables tanto para enlaces LTO como para enlaces normales. Esta
La opción es efectiva solo cuando se compila con -flto y se ignora en el momento del enlace.

-fno-gordos-lto-objetos mejora el tiempo de compilación sobre LTO simple, pero requiere el
cadena de herramientas completa para estar al tanto de LTO. Requiere un vinculador con soporte de complemento de vinculador
para la funcionalidad básica. Adicionalmente, nm, ar y ranlib Necesito soportar el enlazador
complementos para permitir un entorno de compilación con todas las funciones (capaz de compilar
bibliotecas, etc.). GCC proporciona gcc-ar, gcc-nm, gcc-ranlib envoltorios para pasar el
opciones correctas para estas herramientas. Con LTO sin grasa, los archivos MAKE deben modificarse para usar
de ellas.

El valor predeterminado es -fno-gordos-lto-objetos en destinos con soporte de complemento de vinculador.

-fcompare-elim
Después de dividir la asignación de registros y la instrucción de asignación posterior al registro, identifique
instrucciones aritméticas que calculan los indicadores del procesador de forma similar a una operación de comparación
basado en esa aritmética. Si es posible, elimine la operación de comparación explícita.

Este pase solo se aplica a ciertos objetivos que no pueden representar explícitamente el
operación de comparación antes de que se complete la asignación de registros.

Habilitado en niveles -O, -O2, -O3, -os.

-fcprop-registros
Después de dividir la asignación de registros y la instrucción de asignación posterior al registro, realice
un pase de propagación de copia para tratar de reducir las dependencias de programación y ocasionalmente
eliminar la copia.

Habilitado en niveles -O, -O2, -O3, -os.

-fperfil-corrección
Los perfiles recopilados mediante un binario instrumentado para programas de subprocesos múltiples pueden
inconsistente debido a actualizaciones de contador perdidas. Cuando se especifica esta opción, GCC usa
heurísticas para corregir o suavizar tales inconsistencias. Por defecto, GCC emite un
mensaje de error cuando se detecta un perfil inconsistente.

-fprofile-dir =camino
Configure el directorio para buscar los archivos de datos de perfil en camino. Esta opción
afecta solo a los datos de perfil generados por -fprofile-generar, -cobertura-de-prueba,
-fprofile-arcos y utilizado por -fprofile-uso y -franch-probabilidades y su relacionado
opciones. Se pueden utilizar rutas tanto absolutas como relativas. Por defecto, GCC usa el
directorio actual como camino, por lo que el archivo de datos de perfil aparece en el mismo directorio que
el archivo de objeto.

-fprofile-generar
-fprofile-generate =camino
Habilite las opciones que generalmente se usan para instrumentar la aplicación para producir un perfil útil
para su posterior recopilación con optimización basada en comentarios de perfil. Debes usar
-fprofile-generar tanto al compilar como al vincular su programa.

Las siguientes opciones están habilitadas: -fprofile-arcos, -fvalores-de-perfil, -fvpt.

If camino se especifica, GCC mira el camino para encontrar los archivos de datos de comentarios del perfil.
See -fprofile-dir.

-fprofile-uso
-fprofile-use =camino
Habilite optimizaciones dirigidas a comentarios de perfil y las siguientes optimizaciones que
son generalmente rentables solo con comentarios de perfil disponibles: -franch-probabilidades,
-fvpt, -funroll-bucles, -fpeel-bucles, -trazador, -ftree-vectorizary bucle-ftree-
distribuir patrones.

De forma predeterminada, GCC emite un mensaje de error si los perfiles de retroalimentación no coinciden
código fuente. Este error se puede convertir en una advertencia usando -Wcoverage-discordancia.
Tenga en cuenta que esto puede resultar en un código mal optimizado.

If camino se especifica, GCC mira el camino para encontrar los archivos de datos de comentarios del perfil.
See -fprofile-dir.

-fauto-perfil
-fauto-profile =camino
Habilite optimizaciones dirigidas a comentarios basadas en muestras y las siguientes optimizaciones
que generalmente son rentables solo con comentarios de perfil disponibles:
-franch-probabilidades, -fvpt, -funroll-bucles, -fpeel-bucles, -trazador,
-ftree-vectorizar, -funciones-de-fin-line, -fipa-cp, -fipa-cp-clon,
-fpredictivo-común, -funswitch-bucles, -fgcse-después de recargary
-ftree-loop-distribuir-patrones.

camino es el nombre de un archivo que contiene información de perfil de AutoFDO. Si se omite,
por defecto es fbdata.afdo en el directorio actual.

La producción de un archivo de datos de perfil AutoFDO requiere ejecutar su programa con el Perf
utilidad en un sistema de destino GNU / Linux compatible. Para más información, ver
<https://perf.wiki.kernel.org/>.

P.ej

registro de rendimiento -e br_inst_retired: near_taken -b -o perf.data \
- tu_programa

Entonces usa el crear_gcov herramienta para convertir los datos de perfil sin procesar a un formato que se puede
utilizado por GCC. También debe proporcionar el binario no extraído de su programa a este
herramienta. Verhttps://github.com/google/autofdo>.

P.ej

create_gcov --binary = your_program.unstripped --profile = perf.data \
--gcov = profile.afdo

Las siguientes opciones controlan el comportamiento del compilador con respecto a la aritmética de punto flotante.
Estas opciones se compensan entre velocidad y corrección. Todos deben estar habilitados específicamente.

-Tienda-flotante
No almacene variables de punto flotante en registros e inhiba otras opciones que
podría cambiar si un valor de punto flotante se toma de un registro o de la memoria.

Esta opción evita un exceso de precisión no deseado en máquinas como la 68000 donde
los registros flotantes (del 68881) mantienen más precisión de lo que se supone un "doble"
tener. Lo mismo ocurre con la arquitectura x86. Para la mayoría de los programas, el exceso de precisión
solo hace bien, pero algunos programas se basan en la definición precisa de IEEE flotante
punto. Usar -Tienda-flotante para tales programas, después de modificarlos para almacenar todos
cálculos intermedios pertinentes en variables.

-fexcess-precision =papa
Esta opción permite un mayor control sobre el exceso de precisión en máquinas donde flota
Los registros de puntos tienen más precisión que los tipos IEEE "flotante" y "doble" y los
El procesador no admite operaciones de redondeo a esos tipos. Por defecto,
-fexcess-precision = rápido está en vigor; esto significa que las operaciones se llevan a cabo en
la precisión de los registros y que es impredecible al redondear a los tipos
especificado en el código fuente. Al compilar C, si
-fexcess-precision = estándar se especifica entonces el exceso de precisión sigue las reglas
especificado en ISO C99; en particular, tanto los repartos como las asignaciones hacen que los valores sean
redondeado a sus tipos semánticos (mientras que -Tienda-flotante solo afecta las asignaciones).
Esta opción está habilitada de forma predeterminada para C si una opción de conformidad estricta como
-std = c99 se utiliza.

-fexcess-precision = estándar no está implementado para idiomas distintos de C, y no tiene
efecto si -optimizaciones-matemáticas-divertidas or -matemáticas-rápidas está especificado. En el x86,
tampoco tiene efecto si -mfpmath = sse or -mfpmath = sse + 387 está especificado; en la antigua
caso, la semántica IEEE se aplica sin exceso de precisión, y en el último, el redondeo es
impredecible.

-matemáticas-rápidas
Establece las opciones -fno-matemáticas-errno, -optimizaciones-matemáticas-divertidas, -finita-solo-matemáticas,
-fno-redondeo-matemáticas, -fno-señalización-nans y -fcx-rango-limitado.

Esta opción hace que se defina la macro del preprocesador "__FAST_MATH__".

Esta opción no está activada por ningún -O opción además -Comida ya que puede resultar en
Salida incorrecta para programas que dependen de una implementación exacta de IEEE o ISO
reglas / especificaciones para funciones matemáticas. Sin embargo, puede producir un código más rápido para
programas que no requieren las garantías de estas especificaciones.

-fno-matemáticas-errno
No establezca "errno" después de llamar a funciones matemáticas que se ejecutan con un solo
instrucción, por ejemplo, "sqrt". Un programa que se basa en las excepciones IEEE para errores matemáticos
El manejo puede querer usar esta bandera para la velocidad mientras se mantiene la aritmética IEEE
compatibilidad.

Esta opción no está activada por ningún -O opción ya que puede resultar en una salida incorrecta
para programas que dependen de una implementación exacta de IEEE o ISO
reglas / especificaciones para funciones matemáticas. Sin embargo, puede producir un código más rápido para
programas que no requieren las garantías de estas especificaciones.

El valor predeterminado es -fmath-errno.

En los sistemas Darwin, la biblioteca matemática nunca establece "errno". Por tanto, no hay razón
para que el compilador considere la posibilidad de que pueda, y -fno-matemáticas-errno son los
predeterminado.

-optimizaciones-matemáticas-divertidas
Permitir optimizaciones para aritmética de punto flotante que (a) supongan que los argumentos y
los resultados son válidos y (b) pueden violar los estándares IEEE o ANSI. Cuando se usa en el momento del enlace,
puede incluir bibliotecas o archivos de inicio que cambian la palabra de control predeterminada de FPU o
otras optimizaciones similares.

Esta opción no está activada por ningún -O opción ya que puede resultar en una salida incorrecta
para programas que dependen de una implementación exacta de IEEE o ISO
reglas / especificaciones para funciones matemáticas. Sin embargo, puede producir un código más rápido para
programas que no requieren las garantías de estas especificaciones. Habilita
-fno-ceros-firmados, -fno-trapping-matemáticas, -matemática-fasociativa y -matemáticas-recíprocas.

El valor predeterminado es -fno-optimizaciones-matemáticas-inseguras.

-matemática-fasociativa
Permitir la reasociación de operandos en series de operaciones de punto flotante. Esta
viola el estándar de lenguaje ISO C y C ++ al cambiar posiblemente el resultado del cálculo.
NOTA: el reordenamiento puede cambiar el signo de cero, así como ignorar los NaN e inhibir o
crear subdesbordamiento o desbordamiento (y, por lo tanto, no se puede usar en código que se basa en el redondeo
comportamiento como "(x + 2 ** 52) - 2 ** 52". También puede reordenar comparaciones de punto flotante y
por lo tanto, no se puede utilizar cuando se requieren comparaciones ordenadas. Esta opción requiere que
ambas -fno-ceros-firmados y -fno-trapping-matemáticas estar en efecto. Además, no hace
mucho sentido con -matemáticas-redondeadas. Para Fortran, la opción se habilita automáticamente cuando
ambas -fno-ceros-firmados y -fno-trapping-matemáticas están en vigor.

El valor predeterminado es -fno-asociativo-matemático.

-matemáticas-recíprocas
Permita que se use el recíproco de un valor en lugar de dividir por el valor si este
habilita optimizaciones. Por ejemplo, "x / y" se puede reemplazar con "x * (1 / y)", que es
útil si "(1 / y)" está sujeto a la eliminación de subexpresiones comunes. Tenga en cuenta que esto
pierde precisión y aumenta el número de flops que operan sobre el valor.

El valor predeterminado es -fno-recíproco-matemático.

-finita-solo-matemáticas
Permitir optimizaciones para aritmética de punto flotante que asumen que los argumentos y
los resultados no son NaN ni + -Infs.

Esta opción no está activada por ningún -O opción ya que puede resultar en una salida incorrecta
para programas que dependen de una implementación exacta de IEEE o ISO
reglas / especificaciones para funciones matemáticas. Sin embargo, puede producir un código más rápido para
programas que no requieren las garantías de estas especificaciones.

El valor predeterminado es -fno-solo-matemáticas-finitas.

-fno-ceros-firmados
Permita optimizaciones para aritmética de punto flotante que ignoren el signo del cero.
La aritmética IEEE especifica el comportamiento de distintos valores +0.0 y -0.0, que luego
prohíbe la simplificación de expresiones como x + 0.0 o 0.0 * x (incluso con
-finita-solo-matemáticas). Esta opción implica que el signo de un resultado cero no es
significativo.

El valor predeterminado es -figrados-ceros.

-fno-trapping-matemáticas
Compile código asumiendo que las operaciones de punto flotante no pueden generar visibles para el usuario
trampas. Estas trampas incluyen división por cero, desbordamiento, subdesbordamiento, resultado inexacto y
operación inválida. Esta opción requiere que -fno-señalización-nans estar en efecto.
Establecer esta opción puede permitir un código más rápido si uno se basa en la aritmética IEEE "continua",
por ejemplo.

Esta opción nunca debe ser activada por ningún -O opción ya que puede resultar en
Salida incorrecta para programas que dependen de una implementación exacta de IEEE o ISO
reglas / especificaciones para funciones matemáticas.

El valor predeterminado es -ftrapping-matemáticas.

-matemáticas-redondeadas
Deshabilite las transformaciones y optimizaciones que asumen el redondeo de punto flotante predeterminado
comportamiento. Esto es redondo a cero para todas las conversiones de punto flotante a entero, y
redondear al más cercano para todos los demás truncamientos aritméticos. Esta opción debe ser
especificado para programas que cambian el modo de redondeo FP dinámicamente, o que pueden ser
ejecutado con un modo de redondeo no predeterminado. Esta opción deshabilita el plegado constante de
expresiones de punto flotante en tiempo de compilación (que pueden verse afectadas por el modo de redondeo)
y transformaciones aritméticas que no son seguras en presencia de signos dependientes
modos de redondeo.

El valor predeterminado es -fno-redondeo-matemáticas.

Esta opción es experimental y actualmente no garantiza la desactivación de todos los GCC.
optimizaciones que se ven afectadas por el modo de redondeo. Las versiones futuras de GCC pueden proporcionar
un control más preciso de esta configuración utilizando el pragma "FENV_ACCESS" de C99. Esta línea de comandos
La opción se utilizará para especificar el estado predeterminado de "FENV_ACCESS".

-fseñalización-nans
Compile el código asumiendo que los NaN de señalización IEEE pueden generar trampas visibles para el usuario durante
operaciones de coma flotante. Establecer esta opción deshabilita las optimizaciones que pueden cambiar
el número de excepciones visibles con los NaN de señalización. Esta opción implica
-ftrapping-matemáticas.

Esta opción hace que se defina la macro del preprocesador "__SUPPORT_SNAN__".

El valor predeterminado es -fno-señalización-nans.

Esta opción es experimental y actualmente no garantiza la desactivación de todos los GCC.
optimizaciones que afectan el comportamiento de la señalización de NaN.

-fsingle-precisión-constante
Trate las constantes de punto flotante como precisión simple en lugar de convertir implícitamente
ellos a constantes de doble precisión.

-fcx-rango-limitado
Cuando está habilitada, esta opción indica que no se necesita un paso de reducción de rango cuando
Realización de división compleja. Además, no se comprueba si el resultado de una
la multiplicación o división compleja es "NaN + I * NaN", con un intento de rescatar el
situación en ese caso. El valor predeterminado es -fno-cx-rango-limitado, pero está habilitado por
-matemáticas-rápidas.

Esta opción controla la configuración predeterminada del pragma ISO C99 "CX_LIMITED_RANGE".
Sin embargo, la opción se aplica a todos los idiomas.

-fcx-fortran-reglas
La multiplicación y división complejas siguen las reglas de Fortran. La reducción de rango se realiza como
parte de una división compleja, pero no se puede comprobar si el resultado de una división compleja
la multiplicación o división es "NaN + I * NaN", con un intento de rescatar la situación
en ese caso.

El valor predeterminado es -fno-cx-fortran-reglas.

Las siguientes opciones controlan las optimizaciones que pueden mejorar el rendimiento, pero no son
habilitado por cualquier -O opciones. Esta sección incluye opciones experimentales que pueden producir
código roto.

-franch-probabilidades
Después de ejecutar un programa compilado con -fprofile-arcos, puedes compilarlo por segunda vez
usando -franch-probabilidades, para mejorar las optimizaciones en función del número de veces
cada rama fue tomada. Cuando un programa compilado con -fprofile-arcos sale, salva
la ejecución del arco cuenta en un archivo llamado nombrefuente.gcda para cada archivo fuente. los
La información de este archivo de datos depende en gran medida de la estructura de los datos generados.
código, por lo que debe utilizar el mismo código fuente y las mismas opciones de optimización para ambos
compilaciones.

Con -franch-probabilidades, GCC pone un REG_BR_PROB nota en cada SALTAR_INSN y
LLAMADA_INSN. Estos se pueden utilizar para mejorar la optimización. Actualmente, solo se usan
en un lugar: en reorg.c, en lugar de adivinar qué ruta es más probable que una rama
tomar, el REG_BR_PROB Los valores se utilizan para determinar exactamente qué camino se toma más
a menudo.

-fvalores-de-perfil
Si se combina con -fprofile-arcos, agrega código para que algunos datos sobre los valores de
se recopilan expresiones en el programa.

Con -franch-probabilidades, lee los datos recopilados a partir de los valores de perfiles de
expresiones para su uso en optimizaciones.

Habilitado con -fprofile-generar y -fprofile-uso.

-f funciones-de-reorden-de-perfil
El reordenamiento de funciones basado en la instrumentación del perfil recopila la primera vez de ejecución
de una función y ordena estas funciones en orden ascendente.

Habilitado con -fprofile-uso.

-fvpt
Si se combina con -fprofile-arcos, esta opción indica al compilador que agregue código a
recopilar información sobre los valores de las expresiones.

Con -franch-probabilidades, lee los datos recopilados y realiza la
optimizaciones basadas en ellos. Actualmente las optimizaciones incluyen la especialización de
operaciones de división utilizando el conocimiento sobre el valor del denominador.

-frename-registros
Intente evitar dependencias falsas en el código programado haciendo uso de los registros que quedan
después de la asignación del registro. Esta optimización beneficia a los procesadores con muchos
de registros. Dependiendo del formato de información de depuración adoptado por el objetivo,
sin embargo, puede hacer que la depuración sea imposible, ya que las variables ya no permanecen en un "hogar
Registrarse".

Habilitado por defecto con -funroll-bucles y -fpeel-bucles.

-fschedule-fusión
Realiza un paso dependiente del objetivo sobre el flujo de instrucciones para programar instrucciones
del mismo tipo juntos porque la máquina de destino puede ejecutarlos de manera más eficiente si
son adyacentes entre sí en el flujo de instrucciones.

Habilitado en niveles -O2, -O3, -os.

-trazador
Realice la duplicación de la cola para ampliar el tamaño del superbloque. Esta transformación simplifica
el flujo de control de la función permite que otras optimizaciones hagan un mejor trabajo.

Habilitado con -fprofile-uso.

-funroll-bucles
Desenrollar bucles cuyo número de iteraciones se puede determinar en tiempo de compilación o en
entrada al bucle. -funroll-bucles implica -frerun-cse-después-de-bucle, -fweb y
-frename-registros. También activa el pelado de bucle completo (es decir, la eliminación completa de
bucles con un pequeño número constante de iteraciones). Esta opción hace que el código sea más grande y
puede o no hacerlo funcionar más rápido.

Habilitado con -fprofile-uso.

-funroll-todos-bucles
Desenrolle todos los bucles, incluso si su número de iteraciones es incierto cuando el bucle es
ingresó. Esto generalmente hace que los programas se ejecuten más lentamente. -funroll-todos-bucles implica el
mismas opciones que -funroll-bucles.

-fpeel-bucles
Pela bucles para los que hay suficiente información para que no rueden mucho (desde
comentarios de perfil). También activa el pelado de bucle completo (es decir, la eliminación completa de
bucles con un pequeño número constante de iteraciones).

Habilitado con -fprofile-uso.

-fmove-bucle-invariantes
Habilita el paso de movimiento invariante de bucle en el optimizador de bucle RTL. Habilitado a nivel
-O1

-funswitch-bucles
Mueva ramas con condiciones invariantes de bucle fuera del bucle, con duplicados de la
bucle en ambas ramas (modificado según el resultado de la condición).

-secciones-funcionales
-fdata-secciones
Coloque cada función o elemento de datos en su propia sección en el archivo de salida si el objetivo
admite secciones arbitrarias. El nombre de la función o el nombre del elemento de datos
determina el nombre de la sección en el archivo de salida.

Utilice estas opciones en sistemas donde el vinculador puede realizar optimizaciones para mejorar
localidad de referencia en el espacio de instrucción. La mayoría de los sistemas que utilizan el objeto ELF
El formato y los procesadores SPARC que ejecutan Solaris 2 tienen enlazadores con tales optimizaciones.
AIX puede tener estas optimizaciones en el futuro.

Utilice estas opciones solo cuando haya beneficios significativos al hacerlo. Cuando usted
especificar estas opciones, el ensamblador y el enlazador crean un objeto más grande y ejecutable
archivos y también son más lentos. No se puede utilizar profesor en todos los sistemas si especifica esto
opción, y puede tener problemas con la depuración si especifica tanto esta opción como
-g.

-fbranch-target-load-optimizar
Realice la optimización de la carga del registro de destino de la rama antes del subproceso del prólogo / epílogo.
El uso de registros de destino generalmente se puede exponer solo durante la recarga, por lo que se eleva
cargas de bucles y la programación entre bloques necesita una optimización separada
pasar.

-fbranch-target-load-Optimize2
Realice la optimización de la carga del registro de destino de la rama después del subproceso del prólogo / epílogo.

-fbtr-bb-exclusivo
Al realizar la optimización de carga del registro de destino de rama, no reutilice el destino de rama
registros dentro de cualquier bloque básico.

-fstack-protector
Emite código adicional para comprobar si hay desbordamientos de búfer, como ataques de aplastamiento de pila. Esta
se realiza agregando una variable de protección a las funciones con objetos vulnerables. Esta
incluye funciones que llaman "alloca" y funciones con búferes de más de 8 bytes.
Las protecciones se inicializan cuando se ingresa una función y luego se verifican cuando
sale de la función. Si falla una verificación de guardia, se imprime un mensaje de error y el programa
salidas

-fstack-protector-todos
Me gusta -fstack-protector excepto que todas las funciones están protegidas.

-fstack-protector-fuerte
Me gusta -fstack-protector pero incluye funciones adicionales para ser protegidas --- aquellas
que tienen definiciones de arreglos locales o referencias a direcciones de cuadros locales.

-fstack-protector-explícito
Me gusta -fstack-protector pero solo protege aquellas funciones que tienen la
Atributo "stack_protect"

-fstdarg-optar
Optimice el prólogo de las funciones de argumento variadas con respecto al uso de esas
argumentos

NOTA: En Ubuntu 14.10 y versiones posteriores, -fstack-protector-fuerte está habilitado por
predeterminado para C, C ++, ObjC, ObjC ++, si ninguno de -fno-protector-de-pila, -nostdlib, ni
independiente se encuentran.

-fsección-anclajes
Intente reducir el número de cálculos de direcciones simbólicas utilizando un "ancla" compartida
símbolos para abordar objetos cercanos. Esta transformación puede ayudar a reducir el número
de entradas GOT y accesos GOT en algunos objetivos.

Por ejemplo, la implementación de la siguiente función "foo":

estático int a, b, c;
int foo (void) {return a + b + c; }

normalmente calcula las direcciones de las tres variables, pero si lo compila con
-fsección-anclajes, accede a las variables desde un punto de ancla común. los
El efecto es similar al siguiente pseudocódigo (que no es válido en C):

int foo (vacío)
{
registrar int * xr = & x;
return xr [& a - & x] + xr [& b - & x] + xr [& c - & x];
}

No todos los objetivos admiten esta opción.

--param nombre =propuesta de
En algunos lugares, GCC usa varias constantes para controlar la cantidad de optimización que
está hecho. Por ejemplo, GCC no tiene funciones en línea que contengan más de un determinado
número de instrucciones. Puede controlar algunas de estas constantes en la línea de comando
usando el --param .

Los nombres de parámetros específicos y el significado de los valores están vinculados a la
componentes internos del compilador, y están sujetos a cambios sin previo aviso en el futuro
Lanzamientos

En cada caso, el propuesta de es un número entero. Las opciones permitidas para nombre son:

resultado-rama-predecible
Cuando se predice que la rama se tomará con una probabilidad menor que este umbral
(en porcentaje), entonces se considera bien predecible. El valor predeterminado es 10.

max-crossjump-bordes
El número máximo de bordes entrantes a considerar para el salto cruzado. El algoritmo
utilizado por -f salto cruzado es O (N ^ 2) en el número de aristas entrantes a cada bloque.
El aumento de valores significa una optimización más agresiva, lo que hace que el tiempo de compilación
aumentar con probablemente una pequeña mejora en el tamaño del ejecutable.

min-saltos-cruzados
El número mínimo de instrucciones que deben coincidir al final de dos bloques
antes de realizar el salto cruzado sobre ellos. Este valor se ignora en el caso
donde coinciden todas las instrucciones del bloque desde el que se realiza el salto cruzado. los
el valor predeterminado es 5.

max-grow-copia-bb-insns
El factor de expansión de tamaño de código máximo al copiar bloques básicos en lugar de
saltando. La expansión es relativa a una instrucción de salto. El valor predeterminado es
8.

max-goto-duplicación-insns
El número máximo de instrucciones para duplicar en un bloque que salta a un
goto calculado. Para evitar el comportamiento de O (N ^ 2) en varias pasadas, GCC factores
calculan los gotos al principio del proceso de compilación, y los eliminan tan tarde como
posible. Solo se calculan los saltos al final de un bloque básico con no más de
goto-duplication-insns no se factorizan. El valor predeterminado es 8.

max-delay-slot-insn-búsqueda
El número máximo de instrucciones a considerar al buscar una instrucción para
llenar un espacio de retardo. Si más de este número arbitrario de instrucciones son
buscado, el ahorro de tiempo al llenar la ranura de retardo es mínimo, así que deténgase
buscando. El aumento de valores significa una optimización más agresiva, lo que hace que
aumento del tiempo de compilación con probablemente una pequeña mejora en el tiempo de ejecución.

búsqueda-en-vivo-ranura-retraso-máximo
Al intentar llenar las ranuras de retardo, el número máximo de instrucciones a considerar
al buscar un bloque con información válida de registro en vivo. Incrementando esto
El valor elegido arbitrariamente significa una optimización más agresiva, aumentando el
tiempo de compilación. Este parámetro debe eliminarse cuando el código de ranura de retardo es
reescrito para mantener el gráfico de flujo de control.

max-gcse-memoria
La cantidad máxima aproximada de memoria que se puede asignar para realizar
la optimización de eliminación de subexpresión común global. Si más memoria que
especificado es obligatorio, la optimización no se realiza.

ratio de inserción de max-gcse
Si la proporción de inserciones de expresión a eliminaciones es mayor que este valor para
cualquier expresión, RTL PRE inserta o elimina la expresión y, por lo tanto, deja
cálculos parcialmente redundantes en el flujo de instrucciones. El valor predeterminado es
20.

longitud máxima de lista pendiente
El número máximo de dependencias pendientes que permite la programación antes de vaciar el
estado actual y empezar de nuevo. Las funciones grandes con pocas ramas o llamadas pueden
crear listas excesivamente grandes que consuman memoria y recursos innecesariamente.

Max-Modulo-Backtrack-Intentos
El número máximo de intentos de retroceso que debe realizar el planificador cuando el módulo
programar un bucle. Los valores más altos pueden aumentar exponencialmente el tiempo de compilación.

max-inline-insns-single
Varios parámetros controlan el inliner de árbol utilizado en GCC. Este número establece el
número máximo de instrucciones (contadas en la representación interna de GCC) en un
función única que el inliner del árbol considera para el inlining. Esto solo afecta
funciones declaradas en línea y métodos implementados en una declaración de clase (C ++).
El valor predeterminado es 400.

max-inline-insns-auto
Cuando se utiliza -funciones-de-fin-line (incluido en -O3), muchas funciones que
de lo contrario, el compilador no tendrá en cuenta su inclusión. Para
esas funciones, un límite diferente (más restrictivo) en comparación con las funciones
declarado en línea se puede aplicar. El valor predeterminado es 40.

aceleración mínima en línea
Cuando la mejora de rendimiento estimada del tiempo de ejecución de la persona que llama + el destinatario de la llamada supera este
umbral (en porcentaje), la función se puede insertar independientemente del límite en
--param max-inline-insns-single y --param max-inline-insns-auto.

grandes-funciones-insns
El límite que especifica funciones realmente grandes. Para funciones mayores que este límite
después de la inserción, la inserción está limitada por --param crecimiento-función-grande. Esto
El parámetro es útil principalmente para evitar un tiempo de compilación extremo causado por
algoritmos lineales utilizados por el back-end. El valor predeterminado es 2700.

crecimiento-función-grande
Especifica el crecimiento máximo de la función grande causado por la alineación en porcentajes. los
El valor predeterminado es 100, lo que limita el crecimiento de funciones grandes a 2.0 veces el valor original.
El Tamaño.

grandes-unidades-insns
El límite que especifica una gran unidad de traducción. Crecimiento causado por alineación de unidades
mayor que este límite está limitado por --param crecimiento-unidad-en-línea. Para unidades pequeñas
esto podría estar demasiado ajustado. Por ejemplo, considere una unidad que consta de la función A
que está en línea y B que solo llama a A tres veces. Si B es pequeño en relación con A,
el crecimiento de la unidad es del 300 \% y, sin embargo, esta alineación es muy sensata. Para muy grande
unidades que constan de pequeñas funciones en línea, sin embargo, el crecimiento general de la unidad
Se necesita un límite para evitar una explosión exponencial del tamaño del código. Por lo tanto, para los más pequeños
unidades, el tamaño se incrementa a --param grandes-unidades-insns antes de aplicar --param
crecimiento-unidad-en-línea. El valor predeterminado es 10000.

crecimiento-unidad-en-línea
Especifica el crecimiento general máximo de la unidad de compilación provocado por la inserción. los
El valor predeterminado es 20, lo que limita el crecimiento de la unidad a 1.2 veces el tamaño original. Frío
Las funciones (ya sea marcadas como frías mediante un atributo o por comentarios de perfil) no son
contabilizado en el tamaño de la unidad.

crecimiento-unidad-ipcp
Especifica el crecimiento general máximo de la unidad de compilación causado por interprocedimiento
propagación constante. El valor predeterminado es 10, lo que limita el crecimiento de la unidad a 1.1
veces el tamaño original.

marco de pila grande
El límite que especifica marcos de pila grandes. Mientras se inserta, el algoritmo está intentando
para no superar demasiado este límite. El valor predeterminado es 256 bytes.

crecimiento-del-marco-de-pila-grande
Especifica el crecimiento máximo de marcos de pila grandes causado por la alineación en porcentajes.
El valor predeterminado es 1000, que limita el crecimiento del marco de pila grande a 11 veces el
tamaño original.

max-inline-insns-recursivo
max-inline-insns-recursivo-auto
Especifica el número máximo de instrucciones de una copia fuera de línea de una
La función en línea recursiva puede convertirse en una función en línea recursiva.

--param max-inline-insns-recursivo se aplica a las funciones declaradas en línea. Para
funciones no declaradas en línea, la inserción recursiva ocurre solo cuando
-funciones-de-fin-line (incluido en -O3) está habilitado; --param max-inline-insns-
auto recursivo se aplica en su lugar. El valor predeterminado es 450.

profundidad-recursiva-en-línea-máxima
max-inline-recursiva-profundidad-auto
Especifica la profundidad máxima de recursividad utilizada para la inserción recursiva.

--param profundidad-recursiva-en-línea-máxima se aplica a las funciones declaradas en línea. Para
funciones no declaradas en línea, la inserción recursiva ocurre solo cuando
-funciones-de-fin-line (incluido en -O3) está habilitado; --param max-inline-recursivo-
profundidad-automática se aplica en su lugar. El valor predeterminado es 8.

probabilidad-recursiva-en-línea-mínima
La alineación recursiva es rentable solo para la función que tiene una recursividad profunda en
promedio y puede perjudicar la función que tiene poca profundidad de recursividad al aumentar la
tamaño del prólogo o complejidad del cuerpo de la función a otros optimizadores.

Cuando la retroalimentación del perfil está disponible (ver -fprofile-generar) la recursividad real
La profundidad se puede adivinar a partir de la probabilidad de que la función se repita a través de una llamada determinada.
expresión. Este parámetro limita la alineación solo para llamar a expresiones cuyo
la probabilidad excede el umbral dado (en porcentajes). El valor predeterminado es 10.

insns de entrada temprana
Especifique el crecimiento que puede hacer el inliner temprano. En efecto, aumenta la cantidad
de inserción para el código que tiene una gran penalización de abstracción. El valor predeterminado es 14.

iteraciones-max-early-inliner
Límite de iteraciones del inliner temprano. Esto básicamente limita el número de
llamadas indirectas anidadas que puede resolver el inliner temprano. Las cadenas mas profundas estan todavia
manejado por inlining tardío.

comdat-compartir-probabilidad
Probabilidad (en porcentaje) de que la función en línea de C ++ con visibilidad de comdat sea
compartido a través de múltiples unidades de compilación. El valor predeterminado es 20.

perfil-func-interno-id
Un parámetro para controlar si se usa la identificación interna de la función en la base de datos de perfiles
buscar. Si el valor es 0, el compilador usa una identificación que se basa en la función
nombre de ensamblador y nombre de archivo, lo que hace que los datos de perfil antiguos sean más tolerantes a la fuente
cambios como el reordenamiento de funciones, etc. El valor predeterminado es 0.

min-vect-loop-obligado
El número mínimo de iteraciones bajo las cuales los bucles no se vectorizan cuando
-ftree-vectorizar se utiliza. El número de iteraciones después de la vectorización debe
ser mayor que el valor especificado por esta opción para permitir la vectorización. los
el valor predeterminado es 0.

relación-costo-distancia-gcse
Factor de escala en el cálculo de la distancia máxima por la que se puede mover una expresión
Optimizaciones GCSE. Actualmente, esto solo se admite en el pase de elevación de código.
Cuanto mayor es la proporción, más agresivo es el código de elevación con simple
expresiones, es decir, las expresiones que han costado menos de gcse-sin restricciones-
el costo. Especificar 0 deshabilita la elevación de expresiones simples. El valor predeterminado es
10.

gcse-costo no restringido
Costo, medido aproximadamente como el costo de una sola instrucción de máquina típica, en
cuyas optimizaciones GCSE no restringen la distancia que puede viajar una expresión.
Actualmente, esto solo se admite en el pase de elevación de código. Cuanto menor sea el costo,
cuanto más agresivo es el izado de código. Especificar 0 permite que todas las expresiones
viajar distancias ilimitadas. El valor predeterminado es 3.

profundidad máxima de elevación
La profundidad de búsqueda en el árbol de dominador de las expresiones que se van a izar. Esto se usa
para evitar el comportamiento cuadrático en el algoritmo de elevación. El valor de 0 no limita
en la búsqueda, pero puede ralentizar la compilación de funciones enormes. El valor predeterminado
es 30.

comparaciones de fusión de cola máxima
La cantidad máxima de bbs similares con los que comparar un bb. Esto se usa para evitar
comportamiento cuadrático en la fusión de la cola del árbol. El valor predeterminado es 10.

iteraciones de fusión de cola máxima
La cantidad máxima de iteraciones del paso sobre la función. Esto se usa para
limitar el tiempo de compilación en la fusión de la cola del árbol. El valor predeterminado es 2.

max-insns-desenrollados
El número máximo de instrucciones que puede tener que desenrollarse un bucle. Si un bucle
se desenrolla, este parámetro también determina cuántas veces el código de bucle es
desenrollado.

max-promedio-desenrollado-insns
El número máximo de instrucciones sesgadas por las probabilidades de su ejecución que
puede ser necesario desenrollar un bucle. Si se desenrolla un bucle, este parámetro también
determina cuántas veces se desenrolla el código de bucle.

tiempos máximos de desenrollado
El número máximo de desenrollamientos de un solo bucle.

insns-max-pelado
El número máximo de instrucciones que puede tener que pelar un bucle. Si un bucle
se pela, este parámetro también determina cuántas veces se pela el código de bucle.

tiempos máximos de pelado
El número máximo de peladuras de un solo bucle.

ramas-max-peel
El número máximo de ramas en la ruta caliente a través de la secuencia de pelado.

max-completamente-pelado-insns
El número máximo de insns de un bucle completamente pelado.

tiempos-máximos-de-pelado-completo
El número máximo de iteraciones de un bucle para que sea adecuado para un pelado completo.

profundidad máxima de nido de bucle de despegue completo
La profundidad máxima de un nido de bucles adecuado para un pelado completo.

max-unswitch-insns
El número máximo de entradas de un bucle no conmutado.

nivel máximo de desconexión
El número máximo de ramas no conmutadas en un solo bucle.

lim-caro
El costo mínimo de una expresión cara en el movimiento invariante de bucle.

iv-considerar-a-todos-los-candidatos-enlazados
Limitado al número de candidatos para las variables de inducción, por debajo del cual todos los candidatos
se consideran para cada uso en optimizaciones de variables de inducción. Si hay
más candidatos que este, solo los más relevantes se consideran para evitar
complejidad de tiempo cuadrático.

usos-considerados-iv-max
Las optimizaciones de variables de inducción renuncian a los bucles que contienen más inducción
usos variables.

iv-siempre-ciruela-candelero-encuadernado
Si el número de candidatos en el conjunto es menor que este valor, siempre intente
elimine los IVs innecesarios del conjunto al agregar uno nuevo.

scev-max-expr-tamaño
Depende del tamaño de las expresiones utilizadas en el analizador de evoluciones escalares. Grande
Las expresiones ralentizan el analizador.

scev-max-expr-complejidad
Vinculado a la complejidad de las expresiones en el analizador de evoluciones escalares.
Las expresiones complejas ralentizan el analizador.

omega-max-vars
El número máximo de variables en un sistema de restricciones Omega. El valor predeterminado
es 128.

omega-max-geqs
El número máximo de desigualdades en un sistema de restricciones Omega. El valor por defecto
el valor es 256.

omega-max-eqs
El número máximo de igualdades en un sistema de restricciones Omega. El valor predeterminado
es 128.

omega-max-comodines
El número máximo de variables comodín que el solucionador de Omega puede insertar.
El valor predeterminado es 18.

omega-hash-tabla-tamaño
El tamaño de la tabla hash en el solucionador de Omega. El valor predeterminado es 550.

omega-max-llaves
El número máximo de claves utilizadas por el solucionador de Omega. El valor predeterminado es 500.

omega-eliminar-restricciones-redundantes
Cuando se establece en 1, utilice métodos costosos para eliminar todas las restricciones redundantes. los
el valor predeterminado es 0.

vect-max-versión-para-verificaciones-de-alineación
El número máximo de comprobaciones en tiempo de ejecución que se pueden realizar al hacer un bucle.
versionado para alineación en el vectorizador.

vect-max-versión-para-comprobaciones-de-alias
El número máximo de comprobaciones en tiempo de ejecución que se pueden realizar al hacer un bucle.
control de versiones para alias en el vectorizador.

vect-max-pelado-para-alineación
El número máximo de peelings de bucle para mejorar la alineación de acceso para el vectorizador. Valor
-1 significa 'sin límite'.

max-iteraciones-a-seguimiento
El número máximo de iteraciones de un bucle el algoritmo de fuerza bruta para el análisis
del número de iteraciones del bucle intenta evaluar.

caliente-bb-count-ws-permille
Un recuento de perfil de bloque básico se considera activo si contribuye al
permillage (es decir, 0 ... 1000) de toda la ejecución perfilada.

fracción-frecuencia-bb-caliente
Seleccione la fracción de la frecuencia del bloque de entrada de ejecuciones del bloque básico en
La función dada un bloque básico debe considerarse activa.

iteraciones-máximas-predichas
El número máximo de iteraciones de bucle que predecimos estáticamente. Esto es útil en
casos en los que una función contiene un solo bucle con un límite conocido y otro bucle
con límite desconocido. El número conocido de iteraciones se predice correctamente, mientras que
el número desconocido de iteraciones tiene un promedio aproximado de 10. Esto significa que el bucle
sin límites parece artificialmente frío en relación con el otro.

probabilidad de espera incorporada
Controla la probabilidad de que la expresión tenga el valor especificado. Esta
El parámetro toma un porcentaje (es decir, 0 ... 100) como entrada. La probabilidad de incumplimiento
de 90 se obtiene empíricamente.

alinear-umbral
Seleccione la fracción de la frecuencia máxima de ejecuciones de un bloque básico en un
función para alinear el bloque básico.

alinear iteraciones de bucle
Se alinea un bucle que se espera que repita al menos el número seleccionado de iteraciones.

trazador-cobertura-dinámica
retroalimentación de cobertura dinámica de trazador
Este valor se utiliza para limitar la formación de superbloques una vez que el porcentaje dado de
se cubren las instrucciones ejecutadas. Esto limita la expansión innecesaria del tamaño del código.

La retroalimentación de cobertura dinámica de trazador El parámetro se usa solo cuando la retroalimentación del perfil
está disponible. Los perfiles reales (a diferencia de los estimados estáticamente) son
mucho menos equilibrado, lo que permite que el umbral tenga un valor mayor.

trazador-max-código-crecimiento
Detenga la duplicación de la cola una vez que el crecimiento del código haya alcanzado el porcentaje dado. Esto es un
límite bastante artificial, ya que la mayoría de los duplicados se eliminan más tarde en el cruce
saltando, por lo que puede establecerse en valores mucho más altos que el crecimiento de código deseado.

trazador-min-ramal-ratio
Detenga el crecimiento inverso cuando la probabilidad inversa de la mejor ventaja sea menor que esta
umbral (en porcentaje).

trazador-min-ramal-ratio
Tracer-min-branch-ratio-feedback
Detenga el crecimiento hacia adelante si la mejor ventaja tiene una probabilidad inferior a este umbral.

similar a trazador-cobertura-dinámica hay dos valores, uno para la compilación
para comentarios de perfil y uno para compilación sin. El valor de la compilación
con comentarios de perfil debe ser más conservador (más alto) para hacer
trazador eficaz.

longitud de ruta-cse-máxima
El número máximo de bloques básicos en la ruta que considera CSE. El valor predeterminado es 10.

max-cse-insns
El número máximo de instrucciones que CSE procesa antes de vaciar. El valor predeterminado es
1000.

ggc-min-expandir
GCC usa un recolector de basura para administrar su propia asignación de memoria. Este parámetro
especifica el porcentaje mínimo por el cual el montón del recolector de basura debe ser
permitido expandirse entre colecciones. Ajustar esto puede mejorar la velocidad de compilación;
no tiene ningún efecto sobre la generación de código.

El valor predeterminado es 30% + 70% * (RAM / 1GB) con un límite superior del 100% cuando RAM> = 1GB.
Si "getrlimit" está disponible, la noción de "RAM" es la más pequeña de la RAM real y
"RLIMIT_DATA" o "RLIMIT_AS". Si GCC no puede calcular la RAM en un determinado
plataforma, se utiliza el límite inferior del 30%. Configurar este parámetro y ggc-min-
tamano de la pila a cero hace que se produzca una recopilación completa en cada oportunidad. Este es
extremadamente lento, pero puede ser útil para depurar.

ggc-min-tamaño de montón
Tamaño mínimo del montón del recolector de basura antes de que comience a molestarse en recolectar
basura. La primera colección ocurre después de que el montón se expande por ggc-min-expandir%
más allá ggc-min-tamaño de montón. Nuevamente, ajustar esto puede mejorar la velocidad de compilación y
no tiene ningún efecto sobre la generación de código.

El valor predeterminado es el menor de RAM / 8, RLIMIT_RSS, o un límite que intenta asegurar
que no se exceden RLIMIT_DATA o RLIMIT_AS, pero con un límite inferior de 4096
(cuatro megabytes) y un límite superior de 131072 (128 megabytes). Si GCC no puede
para calcular la RAM en una plataforma en particular, se utiliza el límite inferior. Configurando esto
El parámetro muy grande desactiva efectivamente la recolección de basura. Configurando esto
parámetro y ggc-min-expandir a cero hace que se produzca una colección completa en cada
.

max-reload-búsqueda-insns
El número máximo de recarga de instrucciones debe mirar hacia atrás para el equivalente
Registrarse. El aumento de valores significa una optimización más agresiva, lo que hace que
el tiempo de compilación aumenta con probablemente un rendimiento ligeramente mejor. El valor por defecto
el valor es 100.

ubicaciones-de-memoria-max-cselib
El número máximo de ubicaciones de memoria que debe tener en cuenta cselib.
El aumento de valores significa una optimización más agresiva, lo que hace que el tiempo de compilación
aumentar con probablemente un rendimiento ligeramente mejor. El valor predeterminado es 500.

reordenar bloques duplicar
reordenar-bloques-retroalimentación-duplicada
Usado por el pase de reordenamiento de bloques básico para decidir si usar incondicional
rama o duplicar el código en su destino. El código se duplica cuando su
El tamaño estimado es menor que este valor multiplicado por el tamaño estimado de
salto incondicional en los puntos calientes del programa.

La reordenar-bloquear-duplicar-retroalimentación El parámetro se usa solo cuando la retroalimentación del perfil
está disponible. Puede establecerse en valores más altos que reordenar-bloquear-duplicar desde
la información sobre los puntos calientes es más precisa.

max-sched-ready-insns
El número máximo de instrucciones listas para ser emitidas por el planificador debe
considerar en cualquier momento durante el primer pase de programación. Valores crecientes
significan búsquedas más exhaustivas, lo que hace que el tiempo de compilación aumente con probablemente
poco beneficio. El valor predeterminado es 100.

bloques-región-programada-max
El número máximo de bloques en una región a considerar para interbloques
Planificación. El valor predeterminado es 10.

bloques-región-max-pipeline
El número máximo de bloques en una región a considerar para la canalización en el
programador selectivo. El valor predeterminado es 15.

max-sched-region-insns
El número máximo de insns en una región que se considerará para interbloque
Planificación. El valor predeterminado es 100.

max-pipeline-region-insns
El número máximo de insns en una región que se considerará para la canalización en el
programador selectivo. El valor predeterminado es 200.

problema-de-especificaciones-mínimo
La probabilidad mínima (en porcentajes) de alcanzar un bloque fuente para interbloque
programación especulativa. El valor predeterminado es 40.

máximo-programado-extender-regiones-iters
El número máximo de iteraciones a través de CFG para extender regiones. Un valor de 0 (el
predeterminado) desactiva las extensiones de región.

retraso de conflicto máximo programado
La demora máxima de conflicto para que un insn sea considerado para un movimiento especulativo.
El valor predeterminado es 3.

corte-probabilidad-especificación-programada
La probabilidad mínima de éxito de la especulación (en porcentajes), de modo que la especulación
insns están programados. El valor predeterminado es 40.

corte-de-problema-de-borde-de-estado-de-especificación-programada
La probabilidad mínima que debe tener un borde para que el planificador guarde su estado
a través de él. El valor predeterminado es 10.

costo-dep-mem-verdadero-programado
Distancia mínima (en ciclos de CPU) entre el almacenamiento y la carga que apuntan a la misma memoria
ubicaciones. El valor predeterminado es 1.

selsched-max-mirada hacia adelante
El tamaño máximo de la ventana de anticipación de la programación selectiva. Es una profundidad
de búsqueda de instrucciones disponibles. El valor predeterminado es 50.

tiempos-programados-max-selsched
El número máximo de veces que se programa una instrucción durante la
Planificación. Este es el límite en el número de iteraciones a través de las cuales el
la instrucción puede ser canalizada. El valor predeterminado es 2.

selsched-max-insns-to-renombrar
El número máximo de mejores instrucciones en la lista preparada que se consideran para
cambio de nombre en el planificador selectivo. El valor predeterminado es 2.

sms-min-sc
El valor mínimo del recuento de etapas que genera el programador de módulo de oscilación. los
el valor predeterminado es 2.

max-último-valor-rtl
El tamaño máximo medido como número de RTL que se pueden registrar en una expresión
en combinador para un pseudo registro como último valor conocido de ese registro. los
el predeterminado es 10000.

max-combinar-insns
El número máximo de instrucciones que el combinador RTL intenta combinar. El valor por defecto
el valor es 2 en -Og y 4 de lo contrario.

límite-compartido-entero
Las constantes enteras pequeñas pueden usar una estructura de datos compartida, lo que reduce la
uso de memoria y aumentando su velocidad. Esto establece el valor máximo de un compartido
constante entera. El valor predeterminado es 256.

SSP-tamaño de búfer
El tamaño mínimo de búferes (es decir, matrices) que reciben protección contra rotura de pila
cuando -fstack-protección se utiliza.

Este valor predeterminado antes de Ubuntu 10.10 era "8". Actualmente es "4", para aumentar el
número de funciones protegidas por el protector de pila.

tamaño-mínimo-para-compartir-pila
El tamaño mínimo de las variables que participan en el intercambio de ranuras de pila cuando no
optimizando. El valor predeterminado es 32.

stmts de duplicación de subprocesos de salto máximo
Número máximo de declaraciones permitidas en un bloque que deben duplicarse cuando
saltos de enhebrado.

max-fields-for-field-sensitivo
Número máximo de campos en una estructura tratados de manera sensible al campo durante
análisis de puntero. El valor predeterminado es cero para -O0 y -O1, y 100 para -os, -O2y
-O3.

latencia de captación previa
Estimar el número medio de instrucciones que se ejecutan antes de la captación previa
acabados. La distancia precargada por delante es proporcional a esta constante.
Aumentar este número también puede dar lugar a que se precarguen menos flujos (consulte
captaciones previas simultáneas).

captaciones previas simultáneas
Número máximo de captaciones previas que se pueden ejecutar al mismo tiempo.

tamaño de línea de caché l1
El tamaño de la línea de caché en la caché L1, en bytes.

tamaño de caché l1
El tamaño de la caché L1, en kilobytes.

tamaño de caché l2
El tamaño de la caché L2, en kilobytes.

relación min-insn-a-prefetch
La relación mínima entre el número de instrucciones y el número de captaciones previas
para habilitar la captación previa en un bucle.

Prefetch-min-insn-a-mem-ratio
La relación mínima entre el número de instrucciones y el número de memoria.
referencias para habilitar la captación previa en un bucle.

usar tipos canónicos
Si el compilador debe utilizar el sistema de tipos "canónico". Por defecto, este
siempre debe ser 1, que utiliza un mecanismo interno más eficiente para comparar
tipos en C ++ y Objective-C ++. Sin embargo, si hay errores en el sistema de tipos canónicos
causando fallas de compilación, establezca este valor en 0 para deshabilitar los tipos canónicos.

Switch-conversion-max-branch-ratio
La conversión de inicialización del conmutador se niega a crear matrices más grandes que
Switch-conversion-max-branch-ratio multiplicado por el número de ramas en el conmutador.

max-parcial-antic-longitud
Longitud máxima del conjunto antic parcial calculado durante el árbol parcial
optimización de eliminación de redundancia (-ftree-pre) al optimizar en -O3 y por encima.
Para algunos tipos de código fuente, la eliminación de redundancia parcial mejorada
la optimización puede desaparecer, consumiendo toda la memoria disponible en el host
máquina. Este parámetro establece un límite en la longitud de los conjuntos que se calculan,
que previene el comportamiento fugitivo. Establecer un valor de 0 para este parámetro
permite una longitud de juego ilimitada.

sccvn-max-scc-tamaño
Tamaño máximo de un componente fuertemente conectado (SCC) durante el procesamiento de SCCVN. Si
se alcanza este límite, el procesamiento SCCVN para toda la función no se realiza y
las optimizaciones que dependen de él están deshabilitadas. El tamaño máximo predeterminado de SCC es
10000.

sccvn-max-alias-consultas-por-acceso
Número máximo de consultas de alias-oracle que realizamos cuando buscamos redundancias
para cargas y almacenes. Si se alcanza este límite, la búsqueda se cancela y la carga o
store no se considera redundante. El número de consultas es algorítmicamente
limitado al número de tiendas en todas las rutas desde la carga hasta la entrada de la función.
El número máximo predeterminado de consultas es 1000.

ira-max-bucles-num
IRA utiliza la asignación de registros regionales de forma predeterminada. Si una función contiene más
bucles que el número dado por este parámetro, solo como máximo el número dado de
los bucles ejecutados con mayor frecuencia forman regiones para la asignación de registros regionales.
El valor predeterminado del parámetro es 100.

tamaño-tabla-de-conflicto-ira-max
Aunque IRA utiliza un algoritmo sofisticado para comprimir la tabla de conflictos, el
La tabla aún puede requerir cantidades excesivas de memoria para funciones enormes. Si el
La tabla de conflictos para una función podría ser mayor que el tamaño en MB dado por este
parámetro, el asignador de registros en su lugar utiliza un más rápido, más simple y más bajo
algoritmo de calidad que no requiere la creación de una tabla de conflictos de pseudoregistros.
El valor predeterminado del parámetro es 2000.

ira-loop-reservado-regs
La IRA se puede utilizar para evaluar la presión de registro más precisa en bucles para tomar decisiones
para mover invariantes de bucle (ver -O3). El número de registros disponibles reservados para
Este parámetro da algunos otros propósitos. El valor predeterminado de la
El parámetro es 2, que es el número mínimo de registros que necesita un
instrucciones. Este valor es el mejor encontrado en numerosos experimentos.

lra-herencia-reflujo-probabilidad-corte
LRA intenta reutilizar valores recargados en registros en insns posteriores. Esta
la optimización se llama herencia. EBB se utiliza como región para hacer esto
mejoramiento. El parámetro define una probabilidad mínima de borde de caída en
porcentaje utilizado para agregar BB a la herencia EBB en LRA. El valor predeterminado de la
el parámetro es 40. El valor se eligió entre numerosas ejecuciones de SPEC2000 en x86-64.

bucle-invariante-max-bbs-en-bucle
El movimiento invariante de bucle puede resultar muy caro, tanto en tiempo de compilación como en
cantidad de memoria necesaria en tiempo de compilación, con bucles muy grandes. Bucles con más
bloques básicos que este parámetro no tendrá optimización de movimiento invariante de bucle
realizado en ellos. El valor predeterminado del parámetro es 1000 para -O1 y séptima
para -O2 y por encima.

loop-max-datarefs-para-datadeps
La creación de dependencias de datos es costosa para bucles muy grandes. Este parámetro
limita el número de referencias de datos en bucles que se consideran para datos
análisis de dependencia. Estos grandes bucles no son manejados por las optimizaciones que utilizan
dependencias de datos de bucle. El valor predeterminado es 1000.

tamaño máximo de vartrack
Establece un número máximo de ranuras de tabla hash para usar durante el flujo de datos de seguimiento de variables
análisis de cualquier función. Si se excede este límite con seguimiento variable en
asignaciones habilitadas, el análisis para esa función se reintenta sin ella, después de
eliminando todas las entradas de depuración de la función. Si se excede el límite incluso sin
debug insns, el análisis de seguimiento de var está completamente deshabilitado para la función.
Establecer el parámetro en cero lo hace ilimitado.

max-vartrack-expr-profundidad
Establece un número máximo de niveles de recursividad al intentar mapear nombres de variables o
depurar temporales para valorar expresiones. Esto cambia el tiempo de compilación por más
información de depuración completa. Si se establece demasiado bajo, las expresiones de valor que son
disponible y podría estar representado en la información de depuración puede terminar no siendo utilizada;
establecer este valor más alto puede permitir al compilador encontrar una depuración más compleja
expresiones, pero el tiempo de compilación y el uso de la memoria pueden aumentar. El valor predeterminado es 12.

min-nondebug-insn-uid
Utilice uids a partir de este parámetro para insns que no sean de depuración. El rango por debajo del
El parámetro está reservado exclusivamente para debug insns creados por
-asignaciones-de-seguimiento-de-fvar, pero las entradas de depuración pueden obtener uids (no superpuestos) arriba
si se agota el rango reservado.

factor-de-crecimiento-ipa-sra-ptr
IPA-SRA reemplaza un puntero a un agregado con uno o más parámetros nuevos solamente
cuando su tamaño acumulativo es menor o igual a factor-de-crecimiento-ipa-sra-ptr veces el
tamaño del parámetro de puntero original.

sra-max-escalarización-tamaño-Ospeed
sra-max-escalarización-tamaño-Osize
Los dos pases de Reducción Escalar de Agregados (SRA e IPA-SRA) tienen como objetivo reemplazar
partes escalares de agregados con usos de variables escalares independientes. Estas
Los parámetros controlan el tamaño máximo, en unidades de almacenamiento, del agregado que es
considerado para reemplazo al compilar para velocidad (tamaño-de-escalarización-sra-max-
Ovelocidad) o tamaño (sra-max-escalarización-tamaño-Osize) respectivamente.

tm-max-tamaño-agregado
Al hacer copias de variables locales de subprocesos en una transacción, este parámetro
especifica el tamaño en bytes después del cual las variables se guardan con el registro
funciona en lugar de guardar / restaurar pares de secuencias de códigos. Esta opción solamente
se aplica cuando se usa -fgnu-tm.

Graphite-max-nb-scop-params
Para evitar efectos exponenciales en las transformaciones de bucle Graphite, el número de
Los parámetros de una parte de control estático (SCoP) están limitados. El valor predeterminado es 10
parámetros. Una variable cuyo valor se desconoce en el momento de la compilación y se define
fuera de un SCoP es un parámetro del SCoP.

Graphite-max-bbs-per-function
Para evitar efectos exponenciales en la detección de SCoP, el tamaño de las funciones
analizado por Graphite está acotado. El valor predeterminado es 100 bloques básicos.

tamaño de mosaico de bloque de bucle
Transformaciones de bloqueo de bucle o minería a cielo abierto, habilitadas con -bloque-bucle or
-floop-strip-mina, quita la mía de cada bucle en el nido de bucles por un número dado de
iteraciones. La longitud de la tira se puede cambiar usando el tamaño de mosaico de bloque de bucle
parámetro. El valor predeterminado es 51 iteraciones.

bucle-desenrollar-jam-tamaño
Especifique el factor de desenrollado para el -floop-desenrollar-y-atasco opción. El valor predeterminado
es 4.

loop-unroll-atasco-profundidad
Especifique la dimensión que se desenrollará (contando desde el bucle más interno) para el
-floop-desenrollar-y-atasco. El valor predeterminado es 2.

ipa-cp-valor-lista-tamaño
IPA-CP intenta rastrear todos los valores y tipos posibles pasados ​​a la función
parámetro para propagarlos y realizar desvirtualización. ipa-cp-valor-
tamaño de lista es el número máximo de valores y tipos que almacena por una formal
parámetro de una función.

ipa-cp-eval-umbral
IPA-CP calcula su propia puntuación de heurísticas de rentabilidad de clonación y realiza
esas oportunidades de clonación con puntuaciones que superan ipa-cp-eval-umbral.

ipa-cp-recursividad-penalización
Penalización porcentual que recibirán las funciones recursivas cuando se evalúen
para la clonación.

ipa-cp-penalización-de-llamada-única
Las funciones de penalización porcentual que contienen una sola llamada a otra función
recibir cuando se evalúan para la clonación.

ipa-max-agg-artículos
IPA-CP también es capaz de propagar una serie de valores escalares pasados ​​en un
agregar. ipa-max-agg-artículos controla el número máximo de dichos valores por uno
parámetro.

ipa-cp-loop-sugerencia-bonificación
Cuando IPA-CP determina que un candidato a clonación haría el número de
iteraciones de un bucle conocido, agrega una bonificación de ipa-cp-loop-sugerencia-bonificación En el correo electrónico “Su Cuenta de Usuario en su Nuevo Sistema XNUMXCX”.
puntuación de rentabilidad del candidato.

ipa-cp-array-index-hit-bonus
Cuando IPA-CP determina que un candidato a clonación haría el índice de una matriz
acceso conocido, agrega una bonificación de ipa-cp-array-index-hit-bonus En el correo electrónico “Su Cuenta de Usuario en su Nuevo Sistema XNUMXCX”.
puntuación de rentabilidad del candidato.

ipa-max-aa-pasos
Durante su análisis de los órganos de función, IPA-CP emplea el análisis de alias con el fin de
rastrear valores apuntados por parámetros de función. Para no pasar demasiado tiempo
analizando funciones enormes, se da por vencido y considera toda la memoria aplastada después
examinar ipa-max-aa-pasos declaraciones que modifican la memoria.

lto-particiones
Especifique el número deseado de particiones producidas durante la compilación WHOPR. los
El número de particiones debe exceder el número de CPU utilizadas para la compilación. los
el valor predeterminado es 32.

partición lto-min
Tamaño de la partición mínima para WHOPR (en instrucciones estimadas). Esto previene
gastos de dividir programas muy pequeños en demasiadas particiones.

cxx-max-espacios de nombres-para-ayuda-de-diagnóstico
El número máximo de espacios de nombres que se deben consultar para obtener sugerencias cuando se realiza una búsqueda de nombres en C ++.
falla para un identificador. El valor predeterminado es 1000.

umbral de frecuencia de sumidero
La frecuencia de ejecución relativa máxima (en porcentajes) del bloque de destino
relativo al bloque original de una declaración para permitir la hundimiento de una declaración
declaración. Los números más grandes dan como resultado un hundimiento de declaraciones más agresivo. los
El valor predeterminado es 75. Se aplica un pequeño ajuste positivo a las declaraciones con
operandos de memoria, ya que son aún más rentables, por lo que se hunden.

max-almacenamiento-para-sumidero
El número máximo de pares de tiendas condicionales que se pueden hundir. Establecer en 0 si
ya sea la vectorización-ftree-vectorizar) o if-conversión (-ftree-bucle-si-convertir)
está desactivado. El valor predeterminado es 2.

permitir-almacenar-datos-carreras
Permita que los optimizadores introduzcan nuevas carreras de datos en las tiendas. Establecer en 1 para permitir,
de lo contrario, a 0. Esta opción está habilitada de forma predeterminada en el nivel de optimización -Comida.

caso-valores-umbral
El menor número de valores diferentes para los que es mejor usar una tabla de salto
en lugar de un árbol de ramas condicionales. Si el valor es 0, use el predeterminado para
la máquina. El valor predeterminado es 0.

árbol-reasoc-ancho
Establezca el número máximo de instrucciones ejecutadas en paralelo en un árbol reasociado.
Este parámetro anula la heurística dependiente del objetivo que se usa de forma predeterminada si no tiene
valor cero.

algoritmo de presión programada
Elija entre las dos implementaciones disponibles de -fsched-presión. Algoritmo 1
es la implementación original y es más probable que evite que las instrucciones
siendo reordenado. El algoritmo 2 fue diseñado para ser un compromiso entre
enfoque relativamente conservador adoptado por el algoritmo 1 y el bastante agresivo
enfoque adoptado por el planificador predeterminado. Se basa más en tener un
archivo de registro regular y clases de presión de registro precisas. Ver haifa-sched.c
en las fuentes de GCC para obtener más detalles.

La elección predeterminada depende del objetivo.

max-slsr-cand-escaneo
Establezca el número máximo de candidatos existentes que se tienen en cuenta al buscar un
base para un nuevo candidato de reducción de resistencia en línea recta.

asan-globales
Habilite la detección de desbordamiento de búfer para objetos globales. Este tipo de protección es
habilitado de forma predeterminada si está utilizando -fsanitize = dirección opción. Para deshabilitar global
uso de protección de objetos --param asan-globals = 0.

pila de asan
Habilite la detección de desbordamiento de búfer para objetos de pila. Este tipo de protección es
habilitado por defecto cuando se usa-fsanitize = dirección. Para deshabilitar el uso de protección de pila
--param asan-stack = 0 .

asan-instrumento-lee
Habilite la detección de desbordamiento de búfer para lecturas de memoria. Este tipo de protección es
habilitado por defecto cuando se usa -fsanitize = dirección. Para deshabilitar las lecturas de memoria
uso de protección --param asan-instrument-reads = 0.

asan-instrumento-escribe
Habilite la detección de desbordamiento de búfer para escrituras de memoria. Este tipo de protección es
habilitado por defecto cuando se usa -fsanitize = dirección. Para deshabilitar escrituras en memoria
uso de protección --param asan-instrumento-escrituras = 0 .

asan-memintrina
Habilite la detección de funciones integradas. Este tipo de protección está habilitado por
predeterminado al usar -fsanitize = dirección. Para deshabilitar la protección de funciones integradas
utilizan el --param asan-memintrin = 0.

asan-uso-después-de-retorno
Habilite la detección de uso después de la devolución. Este tipo de protección está habilitado por
predeterminado al usar -fsanitize = dirección opción. Para deshabilitar el uso después de la devolución
uso de detección --param asan-use-after-return = 0.

asan-instrumentación-con-umbral-de-llamada
Si el número de accesos a memoria en la función que se está instrumentando es mayor o igual a
este número, utilice devoluciones de llamada en lugar de comprobaciones en línea. Por ejemplo, para deshabilitar el código en línea
utilizan el --param asan-instrumentación-con-umbral-de-llamada = 0.

chkp-max-ctor-tamaño
Los constructores estáticos generados por Pointer Bounds Checker pueden volverse muy grandes y
aumentar significativamente el tiempo de compilación a nivel de optimización -O1 y más alto. Esta
El parámetro es un número máximo de declaraciones en un solo constructor generado.
El valor predeterminado es 5000.

max-fsm-thread-path-insns
Número máximo de instrucciones para copiar al duplicar bloques en un estado finito
Autómata salto ruta del hilo. El valor predeterminado es 100.

longitud máxima del hilo fsm
Número máximo de bloques básicos en una ruta de subproceso de salto de autómata de estado finito. los
el predeterminado es 10.

max-fsm-thread-rutas
Número máximo de rutas de subprocesos de salto nuevos para crear para un autómata de estado finito.
El valor predeterminado es 50.

Opciones Controlador las Preprocesador
Estas opciones controlan el preprocesador de C, que se ejecuta en cada archivo fuente de C antes
Compilacion.

Si utiliza la opcion de -E opción, no se hace nada excepto el preprocesamiento. Algunas de estas opciones
tiene sentido solo junto con -E porque hacen que la salida del preprocesador sea
inadecuado para la compilación real.

-Wp,opción
Puedes usar -Wp,opción para omitir el controlador del compilador y pasar opción directamente a través de
al preprocesador. Si opción contiene comas, se divide en varias opciones en
las comas. Sin embargo, muchas opciones son modificadas, traducidas o interpretadas por el
controlador del compilador antes de pasarlo al preprocesador, y -Wp evita por la fuerza
esta fase. La interfaz directa del preprocesador no está documentada y está sujeta a
cambiar, por lo que, siempre que sea posible, debe evitar el uso -Wp y deja que el conductor maneje el
opciones en su lugar.

-Xpreprocesador opción
Aprobado opción como una opción para el preprocesador. Puede utilizar esto para suministrar sistema-
opciones de preprocesador específicas que GCC no reconoce.

Si desea pasar una opción que toma un argumento, debe usar -Xpreprocesador
dos veces, una para la opción y otra para el argumento.

-no-integrado-cpp
Realice el preprocesamiento como una pasada independiente antes de la compilación. Por defecto, GCC realiza
preprocesamiento como parte integrada de la tokenización y el análisis de entradas. Si esta opcion
se proporciona, la interfaz de idioma adecuada (cc1, cc1pluso cc1obj para C, C ++,
y Objective-C, respectivamente) se invoca dos veces, una vez solo para preprocesamiento
y una vez para la compilación real de la entrada preprocesada. Esta opción puede ser útil
en conjunción con la -B or -envoltura opciones para especificar un preprocesador alternativo o
realizar un procesamiento adicional de la fuente del programa entre el preprocesamiento normal y
Compilacion.

-D nombre
Predefinir nombre como macro, con definición 1.

-D nombre =definición
Los contenidos de definición son tokenizados y procesados ​​como si aparecieran durante
fase de traducción tres en un #definir directiva. En particular, la definición será
truncado por caracteres de nueva línea incrustados.

Si está invocando el preprocesador desde un shell o un programa similar al shell, es posible que necesite
utilizar la sintaxis de comillas del shell para proteger caracteres como espacios que tienen un
significado en la sintaxis de shell.

Si desea definir una macro similar a una función en la línea de comando, escriba su argumento
lista con paréntesis alrededor antes del signo igual (si lo hay). Los paréntesis son
significativo para la mayoría de los proyectiles, por lo que deberá citar la opción. Con sh y csh,
-D'nombre (argumentos ...)=definición' funciona

-D y -U las opciones se procesan en el orden en que se dan en la línea de comando. Todos
-imacros presentar y -incluir presentar las opciones se procesan después de todo -D y -U .

-U nombre
Cancelar cualquier definición previa de nombre , ya sea integrado o provisto de un -D .

-undef
No predefinir macros específicas del sistema o de GCC. El estándar predefinido
las macros permanecen definidas.

-I dir
Agregar el directorio dir a la lista de directorios en los que se buscarán archivos de encabezado.
Directorios nombrados por -I se buscan antes de que el sistema estándar incluya directorios.
Si el directorio dir es un directorio de inclusión del sistema estándar, la opción se ignora para
asegúrese de que el orden de búsqueda predeterminado para los directorios del sistema y el tratamiento especial
de los encabezados del sistema no se anulan. Si dir comienza con "=", entonces el "=" será
reemplazado por el prefijo sysroot; ver --sysroot y -isysroot.

-o presentar
Escribir salida en presentar. Esto es lo mismo que especificar presentar como la segunda no opción
argumento para cpp. gcc tiene una interpretación diferente de un segundo argumento de no opción,
entonces debes usar -o para especificar el archivo de salida.

-Pared
Activa todas las advertencias opcionales que son deseables para el código normal. En la actualidad este
is -Comentario, -Wtrigrafías, -Wmultichar y una advertencia sobre la promoción de números enteros que provoca
cambio de signo en expresiones "#if". Tenga en cuenta que muchas de las advertencias del preprocesador
están activados de forma predeterminada y no tienen opciones para controlarlos.

-Comentario
-Comentarios
Advertir cada vez que una secuencia de inicio de comentarios /* aparece en un /* comentario, o siempre que un
barra invertida-nueva línea aparece en un // comentario. (Ambas formas tienen el mismo efecto).

-Wtrigrafías
La mayoría de los trígrafos en los comentarios no pueden afectar el significado del programa. Sin embargo, un
trígrafo que formaría un salto de línea nuevo (?? / al final de una línea) puede, por
cambiando dónde comienza o termina el comentario. Por lo tanto, solo los trígrafos que formarían
Las nuevas líneas que se escapan producen advertencias dentro de un comentario.

Esta opción está implícita en -Pared. Si -Pared no se da, esta opción aún está habilitada
a menos que los trígrafos estén habilitados. Para obtener conversión de trígrafo sin advertencias, pero obtenga
el otro -Pared advertencias, uso -trigrafos -Pared -Wno-trígrafos.

-Wtradicional
Advierte sobre ciertos constructos que se comportan de manera diferente en tradicional e ISO C.También
advertir sobre las construcciones ISO C que no tienen un equivalente tradicional de C, y son problemáticas
constructos que deben evitarse.

-Wundef
Advertir siempre que se encuentre un identificador que no sea una macro en un #Si Directiva,
fuera de se define. Dichos identificadores se reemplazan por cero.

-Macros no utilizados
Advierte sobre macros definidas en el archivo principal que no se utilizan. Una macro es usado si esto es
expandido o probado para su existencia al menos una vez. El preprocesador también advertirá si
la macro no se ha utilizado en el momento en que se redefinió o no se definió.

Macros integradas, macros definidas en la línea de comando y macros definidas en include
los archivos no están advertidos.

Nota: Si realmente se usa una macro, pero solo se usa en bloques condicionales omitidos, entonces
CPP lo informará como no utilizado. Para evitar la advertencia en tal caso, puede mejorar
el alcance de la definición de la macro, por ejemplo, moviéndola a la primera omitida
cuadra. Alternativamente, puede proporcionar un uso ficticio con algo como:

#si se define the_macro_causing_the_warning
#terminara si

-Etiquetas-Wendif
Advertir cada vez que un #else o un #terminara si van seguidos de texto. Esto suele ocurrir en
código del formulario

#si FOO
...
#más FOO
...
#endif

El segundo y tercer "FOO" deben estar en los comentarios, pero a menudo no se encuentran en programas más antiguos.
Esta advertencia está activada de forma predeterminada.

-Error
Convierte todas las advertencias en errores graves. El código fuente que activa las advertencias será
rechazado.

-Wsystem-encabezados
Emitir advertencias para el código en los encabezados del sistema. Estos normalmente no ayudan a encontrar
errores en su propio código, por lo tanto, suprimidos. Si eres responsable del sistema
biblioteca, es posible que desee verlos.

-w Suprima todas las advertencias, incluidas las que GNU CPP emite de forma predeterminada.

-pedante
Emita todos los diagnósticos obligatorios enumerados en el estándar C. Algunos de ellos quedan
de forma predeterminada, ya que se activan con frecuencia en código inofensivo.

-Errores-pedantes
Emita todos los diagnósticos obligatorios y convierta todos los diagnósticos obligatorios en errores.
Esto incluye diagnósticos obligatorios que GCC emite sin -pedante pero trata como
advertencias

-M En lugar de generar el resultado del preprocesamiento, genere una regla adecuada para para lograr
describiendo las dependencias del archivo fuente principal. El preprocesador genera uno
para lograr regla que contiene el nombre del archivo de objeto para ese archivo de origen, dos puntos y los nombres
de todos los archivos incluidos, incluidos los que provienen de -incluir or -imacros mando-
opciones de línea.

A menos que se especifique explícitamente (con -MONTE or -MQ), el nombre del archivo del objeto consta del
nombre del archivo de origen con cualquier sufijo reemplazado con el sufijo del archivo de objeto y con cualquier
Se eliminaron las partes principales del directorio. Si hay muchos archivos incluidos, la regla es
dividir en varias líneas usando \-nueva línea. La regla no tiene comandos.

Esta opción no suprime la salida de depuración del preprocesador, como -dM. Para evitar
mezclando dicha salida de depuración con las reglas de dependencia, debe especificar explícitamente el
archivo de salida de dependencia con -MFo usa una variable de entorno como
DEPENDENCIAS_SALIDA. La salida de depuración aún se enviará al flujo de salida normal como
Normal.

Pasando (Paso) -M para el conductor implica -Ey suprime las advertencias con un implícito -w.

-MM Me gusta -M pero no mencione los archivos de encabezado que se encuentran en los directorios de encabezado del sistema,
ni archivos de encabezado que se incluyen, directa o indirectamente, desde dicho encabezado.

Esto implica que la elección de corchetes angulares o comillas dobles en un #incluir
La directiva no determina en sí misma si ese encabezado aparecerá en -MM
salida de dependencia. Este es un ligero cambio en la semántica de las versiones 3.0 y GCC
más temprano.

-MF presentar
Cuando se usa con -M or -MM, especifica un archivo para escribir las dependencias. Si no -MF
se le da el interruptor, el preprocesador envía las reglas al mismo lugar donde las habría enviado
salida preprocesada.

Cuando se usa con las opciones del controlador -MARYLAND or -MMD, -MF anula la dependencia predeterminada
archivo de salida.

-MG Junto con una opción como -M solicitando generación de dependencia, -MG asume
Los archivos de encabezado que faltan son archivos generados y los agrega a la lista de dependencias sin
levantando un error. El nombre del archivo de dependencia se toma directamente de "#include"
directiva sin anteponer ninguna ruta. -MG también suprime la salida preprocesada, como
El archivo de encabezado que falta hace que esto sea inútil.

Esta función se utiliza en la actualización automática de archivos MAKE.

-MP Esta opción indica a CPP que agregue un objetivo falso para cada dependencia que no sea la
archivo principal, haciendo que cada uno no dependa de nada. Estas reglas ficticias solucionan los errores
para lograr da si elimina los archivos de encabezado sin actualizar el Makefile para igualar.

Esta es la salida típica:

prueba.o: prueba.c prueba.h

prueba.h:

-MONTE dirigidos
Cambie el destino de la regla emitida por la generación de dependencia. Por defecto, el CPP toma
el nombre del archivo de entrada principal, elimina cualquier componente de directorio y cualquier sufijo de archivo
como .cy agrega el sufijo de objeto habitual de la plataforma. El resultado es el objetivo.

An -MONTE La opción establecerá el destino para que sea exactamente la cadena que especifique. Si quieres
múltiples objetivos, puede especificarlos como un único argumento para -MONTE, o use múltiples
-MONTE .

Por ejemplo, -MONTE '$ (objpfx) foo.o' podría dar

$ (objpfx) foo.o: foo.c

-MQ dirigidos
Igual que -MONTE, pero cita cualquier carácter que sea especial para Make.
-MQ '$ (objpfx) foo.o' da

$$ (objpfx) foo.o: foo.c

El objetivo predeterminado se cotiza automáticamente, como si se le diera con -MQ.

-MARYLAND -MARYLAND es equivalente a -M -MF presentar, excepto que -E no está implícito. El conductor
determina presentar basado en si un -o se da la opción. Si es así, el controlador utiliza su
argumento pero con un sufijo de .d, de lo contrario toma el nombre del archivo de entrada,
elimina cualquier componente de directorio y sufijo, y aplica un .d sufijo.

If -MARYLAND se usa junto con -E, alguna -o Se entiende que el interruptor especifica el
archivo de salida de dependencia, pero si se usa sin -E, Cada -o se entiende que especifica un
archivo de objeto de destino.

Como -E no está implícito, -MARYLAND se puede utilizar para generar un archivo de salida de dependencia como un
efecto secundario del proceso de compilación.

-MMD
Me gusta -MARYLAND excepto que solo mencione los archivos de encabezado del usuario, no los archivos de encabezado del sistema.

-fpch-deps
Cuando se utilizan encabezados precompilados, este indicador hará que los indicadores de salida de dependencia
también enumera los archivos de las dependencias del encabezado precompilado. Si no se especifica solo
se enumeraría el encabezado precompilado y no los archivos que se usaron para crearlo
porque esos archivos no se consultan cuando se usa un encabezado precompilado.

-fpch-preproceso
Esta opción permite el uso de un encabezado precompilado junto con -E. Inserta un especial
"#pragma", "#pragma GCC pch_preprocess"nombre del archivo"" en la salida para marcar el lugar
donde se encontró el encabezado precompilado, y su nombre de archivo. Cuando el -fpreprocesado será en
uso, GCC reconoce este "#pragma" y carga el PCH.

Esta opción está desactivada de forma predeterminada, porque la salida preprocesada resultante es solo
realmente adecuado como entrada para GCC. Se enciende mediante -guardar-temps.

No debe escribir este "#pragma" en su propio código, pero es seguro editar el
nombre de archivo si el archivo PCH está disponible en una ubicación diferente. El nombre del archivo puede ser
absoluto o puede ser relativo al directorio actual de GCC.

-x c
-x c ++
-x C objetivo
-x ensamblador-con-cpp
Especifique el idioma de origen: C, C ++, Objective-C o ensamblado. Esto no tiene nada que ver
con cumplimiento de normas o ampliaciones; simplemente selecciona qué sintaxis base
suponer. Si no da ninguna de estas opciones, cpp deducirá el idioma de la
extensión del archivo fuente: .c, . CC, .mo .S. Algunas otras extensiones comunes para
También se reconocen C ++ y ensamblado. Si cpp no ​​reconoce la extensión,
tratará el archivo como C; este es el modo más genérico.

Nota: Las versiones anteriores de cpp aceptaron un -largo opción que seleccionó tanto el
el idioma y el nivel de conformidad con las normas. Esta opción ha sido eliminada porque
entra en conflicto con el -l .

-std =estándar
-ansi
Especifique el estándar al que debe ajustarse el código. Actualmente CPP conoce C
y estándares C ++; otros pueden agregarse en el futuro.

estándar puede ser uno de:

"c90"
"c89"
"iso9899: 1990"
El estándar ISO C de 1990. c90 es la abreviatura habitual para esta versión de
el estandar.

La -ansi opción es equivalente a -std = c90.

"iso9899: 199409"
La norma C de 1990, modificada en 1994.

"iso9899: 1999"
"c99"
"iso9899: 199x"
"c9x"
La norma ISO C revisada, publicada en diciembre de 1999. Antes de su publicación,
era conocido como C9X.

"iso9899: 2011"
"c11"
"c1x"
La norma ISO C revisada, publicada en diciembre de 2011. Antes de su publicación,
era conocido como C1X.

"gnu90"
"gnu89"
El estándar C de 1990 más extensiones GNU. Este es el predeterminado.

"gnu99"
"gnu9x"
El estándar C de 1999 más extensiones GNU.

"gnu11"
"gnu1x"
El estándar C de 2011 más extensiones GNU.

"c ++ 98"
La norma ISO C ++ de 1998 más enmiendas.

"gnu ++ 98"
Lo mismo que -std = c ++ 98 más extensiones GNU. Este es el valor predeterminado para el código C ++.

-I- Divida la ruta de inclusión. Cualquier directorio especificado con -I opciones antes -I- en
buscó solo los encabezados solicitados con "#include"expediente""; no son buscados
"#incluirarchivo> ". Si se especifican directorios adicionales con -I opciones después de la
-I-, esos directorios se buscan para todos #incluir directivas

Además, -I- inhibe el uso del directorio del directorio de archivos actual como
el primer directorio de búsqueda de "#include"expediente"". Esta opción ha quedado obsoleta.

-nostdinc
No busque archivos de encabezado en los directorios del sistema estándar. Solo los directorios
has especificado con -I opciones (y el directorio del archivo actual, si
apropiado) se buscan.

-nostdinc ++
No busque archivos de encabezado en los directorios estándar específicos de C ++, pero aún así
busque los otros directorios estándar. (Esta opción se usa al compilar C ++
Biblioteca.)

-incluir presentar
Proceso presentar como si "#include" file "" apareciera como la primera línea de la fuente principal
expediente. Sin embargo, el primer directorio buscado presentar ¿Está funcionando el preprocesador?
directorio of el directorio que contiene el archivo fuente principal. Si no se encuentra
allí, se busca en el resto de la cadena de búsqueda "#include" ... "" como
Normal.

Si es múltiple -incluir se dan las opciones, los archivos se incluyen en el orden en que
aparecen en la línea de comando.

-imacros presentar
Exactamente como -incluir, excepto que cualquier salida producida por el escaneo presentar es aventado
lejos. Las macros que define permanecen definidas. Esto le permite adquirir todas las macros
desde un encabezado sin procesar también sus declaraciones.

Todos los archivos especificados por -imacros se procesan antes que todos los archivos especificados por -incluir.

-idirdespués dir
Buscar dir para archivos de encabezado, pero hágalo después de todos los directorios especificados con -I y
Se han agotado los directorios del sistema estándar. dir se trata como un sistema incluyen
directorio. Si dir comienza con "=", entonces el "=" será reemplazado por el sysroot
prefijo; ver --sysroot y -isysroot.

-iprefijo prefijo
Especificar prefijo como prefijo para los siguientes -icon prefijo opciones. Si el prefijo
representa un directorio, debe incluir el final /.

-icon prefijo dir
-iconprefijoantes dir
Adjuntar dir al prefijo especificado previamente con -iprefijoy agregue el resultado
directorio a la ruta de búsqueda de inclusión. -iconprefijoantes lo pone en el mismo lugar -I
haría; -icon prefijo lo pone donde -idirdespués haría.

-isysroot dir
Esta opción es como la --sysroot opción, pero se aplica solo a los archivos de encabezado (excepto para
Darwin apunta, donde se aplica tanto a archivos de encabezado como a bibliotecas). Ver el
--sysroot opción para obtener más información.

-imultilib dir
Uso dir como subdirectorio del directorio que contiene encabezados de C ++ específicos del destino.

-sistema dir
Buscar dir para archivos de encabezado, después de todos los directorios especificados por -I pero antes del
directorios del sistema estándar. Márquelo como un directorio del sistema, para que obtenga el mismo
tratamiento especial que se aplica a los directorios del sistema estándar. Si dir comienza
con "=", entonces el "=" será reemplazado por el prefijo sysroot; ver --sysroot y
-isysroot.

-Yo cito dir
Buscar dir solo para archivos de encabezado solicitados con "#include"expediente""; no son
buscó "#includearchivo> ", antes de todos los directorios especificados por -I y antes del
directorios del sistema estándar. Si dir comienza con "=", luego "=" será reemplazado por
el prefijo sysroot; ver --sysroot y -isysroot.

-fdirectives-solo
Al preprocesar, maneje las directivas, pero no expanda las macros.

El comportamiento de la opción depende de la -E y -fpreprocesado .

Con -E, el preprocesamiento se limita al manejo de directivas como "#define",
"#ifdef" y "#error". Otras operaciones del preprocesador, como la expansión macro y
no se realizan conversiones de trígrafos. además, el -DD la opción es implícitamente
habilitado

Con -fpreprocesado, la predefinición de la línea de comandos y la mayoría de las macros integradas es
discapacitado. Las macros como "__LINE__", que dependen del contexto, se manejan
normalmente. Esto permite la compilación de archivos previamente procesados ​​con "-E
-fdirectives-only ".

Con ambos -E y -fpreprocesado, las reglas para -fpreprocesado prevalecerán. Esta
permite el preprocesamiento completo de archivos previamente preprocesados ​​con "-E
-fdirectives-only ".

-fdólares-en-identificadores
Aceptar $ en identificadores.

-identificadores-extendidos
Acepte nombres de caracteres universales en identificadores. Esta opción está activada de forma predeterminada
para C99 (y versiones posteriores estándar de C) y C ++.

-fno-canonical-sistema-encabezados
Al preprocesar, no acorte las rutas del encabezado del sistema con la canonicalización.

-fpreprocesado
Indique al preprocesador que el archivo de entrada ya ha sido preprocesado. Esta
suprime elementos como la expansión de macros, la conversión de trígrafos, el empalme de nueva línea escapado,
y procesamiento de la mayoría de las directivas. El preprocesador aún reconoce y elimina
comentarios, para que pueda pasar un archivo preprocesado con -C al compilador sin
problemas. En este modo, el preprocesador integrado es poco más que un tokenizador.
para los extremos frontales.

-fpreprocesado está implícito si el archivo de entrada tiene una de las extensiones .i, .ii or .mi.
Estas son las extensiones que utiliza GCC para archivos preprocesados ​​creados por -guardar-temps.

-ftabstop =anchura
Establezca la distancia entre tabulaciones. Esto ayuda al preprocesador a informar la columna correcta
números en advertencias o errores, incluso si aparecen pestañas en la línea. Si el valor es menor
mayor que 1 o mayor que 100, la opción se ignora. El valor predeterminado es 8.

-fdebug-cpp
Esta opción solo es útil para depurar GCC. Cuando se usa con -E, vuelca la depuración
información sobre mapas de ubicación. Cada token en la salida está precedido por el volcado de
el mapa al que pertenece su ubicación. El volcado del mapa que contiene la ubicación de un token
sería:

{"P": F ; "F": F ; "L": ;"C": ;"S": ;"METRO": ;"MI": , "loc": }

Cuando se usa sin -E, esta opción no tiene ningún efecto.

-ftrack-macro-expansión[=nivel]
Realice un seguimiento de la ubicación de los tokens en las macro expansiones. Esto permite que el compilador emita
diagnóstico sobre la pila de expansión de macros actual cuando se produce un error de compilación en
una macro expansión. El uso de esta opción hace que el preprocesador y el compilador consuman
más memoria. los nivel El parámetro se puede utilizar para elegir el nivel de precisión del token.
seguimiento de ubicación disminuyendo así el consumo de memoria si es necesario. Valor 0 of
nivel desactiva esta opción como si no -ftrack-macro-expansión estuvo presente en
la línea de comando. Valor 1 rastrea las ubicaciones de los tokens en un modo degradado por el bien de
sobrecarga de memoria mínima. En este modo, todos los tokens resultantes de la expansión de un
El argumento de una macro similar a una función tiene la misma ubicación. Valor 2 rastrea tokens
ubicaciones completamente. Este valor es el que más memoria necesita. Cuando se da esta opción
sin argumento, el valor del parámetro predeterminado es 2.

Tenga en cuenta que "-ftrack-macro-expansion = 2" está activado de forma predeterminada.

-fexec-charset =charset
Establezca el juego de caracteres de ejecución, utilizado para constantes de caracteres y cadenas. El valor por defecto
es UTF-8. charset puede ser cualquier codificación compatible con la biblioteca "iconv" del sistema
rutina.

-fwide-exec-charset =charset
Establezca el conjunto de caracteres de ejecución amplia, que se utiliza para cadenas anchas y constantes de caracteres.
El valor predeterminado es UTF-32 o UTF-16, lo que corresponda al ancho de "wchar_t". Como
-fexec-juego de caracteres, charset puede ser cualquier codificación compatible con el "iconv" del sistema
rutina de la biblioteca; sin embargo, tendrá problemas con codificaciones que no se ajustan
exactamente en "wchar_t".

-finput-charset =charset
Establezca el juego de caracteres de entrada, utilizado para la traducción del juego de caracteres de la entrada.
archivo al juego de caracteres de origen utilizado por GCC. Si la configuración regional no especifica, o GCC
no puede obtener esta información de la configuración regional, el valor predeterminado es UTF-8. Esto puede ser
anulado por la configuración regional o esta opción de línea de comandos. Actualmente el comando-
La opción de línea tiene prioridad si hay un conflicto. charset puede ser cualquier codificación
soportado por la rutina de la biblioteca "iconv" del sistema.

-directorio-de-trabajo
Habilite la generación de marcadores de línea en la salida del preprocesador que permitirá al compilador
conocer el directorio de trabajo actual en el momento del preprocesamiento. Cuando esta opción es
habilitado, el preprocesador emitirá, después del marcador de línea inicial, un segundo marcador de línea
con el directorio de trabajo actual seguido de dos barras. GCC usará esto
directorio, cuando está presente en la entrada preprocesada, como el directorio emitido como
el directorio de trabajo actual en algunos formatos de información de depuración. Esta opcion es
habilitado implícitamente si la información de depuración está habilitada, pero esto se puede inhibir con
la forma negada -directorio-de-trabajo-fno. Si el -P la bandera está presente en el comando
line, esta opción no tiene ningún efecto, ya que no se emiten directivas "#line" en absoluto.

-fno-mostrar-columna
No imprima números de columna en los diagnósticos. Esto puede ser necesario si los diagnósticos son
ser escaneado por un programa que no comprende los números de columna, como
dejagnu.

-A predicado=https://www.youtube.com/watch?v=xB-eutXNUMXJtA&feature=youtu.be
Hacer una afirmación con el predicado predicado y la respuesta https://www.youtube.com/watch?v=xB-eutXNUMXJtA&feature=youtu.be. Esta forma es
preferido a la forma anterior -A predicado(https://www.youtube.com/watch?v=xB-eutXNUMXJtA&feature=youtu.be), que todavía es compatible, porque
no utiliza caracteres especiales de shell.

-A -predicado=https://www.youtube.com/watch?v=xB-eutXNUMXJtA&feature=youtu.be
Cancelar una aserción con el predicado predicado y la respuesta https://www.youtube.com/watch?v=xB-eutXNUMXJtA&feature=youtu.be.

-dCARACTERES
CARACTERES es una secuencia de uno o más de los siguientes caracteres, y no debe ser
precedido de un espacio. Otros caracteres son interpretados por el compilador propiamente dicho, o
reservados para futuras versiones de GCC, por lo que se ignoran silenciosamente. Si especifica
personajes cuyo comportamiento entra en conflicto, el resultado es indefinido.

M En lugar de la salida normal, genere una lista de #definir directivas para todos los
macros definidas durante la ejecución del preprocesador, incluidas las predefinidas
macros. Esto le brinda una forma de averiguar lo que está predefinido en su versión de
el preprocesador. Suponiendo que no tiene archivo foo.h, El comando

tocar foo.h; cpp -dM foo.h

mostrará todas las macros predefinidas.

Si utiliza -dM sin el -E opción, -dM se interpreta como sinónimo de
-fdump-rtl-mach.

D Me gusta M excepto en dos aspectos: lo hace no incluir las macros predefinidas, y
salidas ambas las #definir directivas y el resultado del preprocesamiento. Ambos tipos
de la salida va al archivo de salida estándar.

N Me gusta D, pero emiten solo los nombres de las macros, no sus expansiones.

I Salida #incluir directivas además del resultado del preprocesamiento.

U Me gusta D excepto que solo las macros que se expanden o cuya definición se prueba
en las directivas del preprocesador, son salidas; la salida se retrasa hasta el uso o
prueba de la macro; y #undef Las directivas también se emiten para macros probadas pero
indefinido en ese momento.

-P Inhibe la generación de marcadores de línea en la salida del preprocesador. Esto podría ser
útil cuando se ejecuta el preprocesador en algo que no es código C, y se enviará
a un programa que podría confundirse con los marcadores de línea.

-C No descarte los comentarios. Todos los comentarios se pasan al archivo de salida, excepto
para comentarios en directivas procesadas, que se eliminan junto con la directiva.

Debe estar preparado para los efectos secundarios al usar -C; hace que el preprocesador
tratar los comentarios como tokens por derecho propio. Por ejemplo, los comentarios que aparecen en el
comienzo de lo que sería una línea directiva tiene el efecto de convertir esa línea en una
línea fuente ordinaria, ya que el primer token en la línea ya no es un #.

-CC No descarte los comentarios, incluso durante la expansión de macros. Esto es como -C, excepto
que los comentarios contenidos en las macros también se pasan al archivo de salida donde
la macro se expande.

Además de los efectos secundarios del -C opción, la -CC opción causa todo estilo C ++
comentarios dentro de una macro para convertirlos en comentarios de estilo C. Esto es para prevenir mas tarde
uso de esa macro de comentar inadvertidamente el resto de la línea fuente.

La -CC La opción se usa generalmente para admitir comentarios de lint.

-cpp-tradicional
Trate de imitar el comportamiento de los preprocesadores C anticuados, a diferencia de ISO C
preprocesadores.

-trigrafos
Procesar secuencias de trígrafos. Estas son secuencias de tres caracteres, todas comenzando con
??, que están definidos por ISO C para representar caracteres individuales. Por ejemplo, ?? / es la
para \, asi que '??/norte' es una constante de carácter para una nueva línea. De forma predeterminada, GCC ignora
trigraphs, pero en los modos de conformidad estándar los convierte. Ver el -estándar y -ansi
.

Los nueve trígrafos y sus reemplazos son

Trígrafo: ?? (??) ?? <??> ?? = ?? / ?? ' ??! ?? -
Reemplazo: [] {} # \ ^ | ~

-remapear
Habilite el código especial para trabajar con sistemas de archivos que solo permiten archivos muy cortos
nombres, como MS-DOS.

--ayuda
--objetivo-ayuda
Imprima texto que describa todas las opciones de la línea de comandos en lugar de preprocesar nada.

-v Modo detallado. Imprima el número de versión de GNU CPP al comienzo de la ejecución, y
informar la forma final de la ruta de inclusión.

-H Imprima el nombre de cada archivo de encabezado utilizado, además de otras actividades normales. Cada
El nombre está sangrado para mostrar qué tan profundo #incluir apilar es. Encabezado precompilado
los archivos también se imprimen, incluso si se determina que no son válidos; un precompilado no válido
El archivo de encabezado se imprime con ...X y uno válido con ! ... .

-versión
--versión
Imprima el número de versión de GNU CPP. Con un guión, proceda al preprocesamiento como de costumbre.
Con dos guiones, salga inmediatamente.

Pasando (Paso) Opciones a las Ensamblador
Puede pasar opciones al ensamblador.

-Washington,opción
Aprobado opción como opción al ensamblador. Si opción contiene comas, está dividido
en múltiples opciones en las comas.

-Ensamblador opción
Aprobado opción como opción al ensamblador. Puede utilizar esto para suministrar datos específicos del sistema.
opciones de ensamblador que GCC no reconoce.

Si desea pasar una opción que toma un argumento, debe usar -Ensamblador dos veces,
una vez para la opción y una vez para el argumento.

Opciones para Enlace
Estas opciones entran en juego cuando el compilador vincula archivos de objeto a un ejecutable.
archivo de salida. No tienen sentido si el compilador no realiza un paso de enlace.

nombre-archivo-objeto
Un nombre de archivo que no termina en un sufijo especial reconocido se considera un nombre
archivo de objeto o biblioteca. (Los archivos de objeto se distinguen de las bibliotecas por el vinculador
de acuerdo con el contenido del archivo.) Si se realiza la vinculación, estos archivos de objeto se utilizan como
entrada al enlazador.

-c
-S
-E Si se utiliza alguna de estas opciones, el vinculador no se ejecuta y los nombres de los archivos de objetos
no debe usarse como argumentos.

-fuse-ld = bfd
Ingrese al bfd enlazador en lugar del enlazador predeterminado.

-fuse-ld = oro
Ingrese al ORO enlazador en lugar del enlazador predeterminado.

-lbibliotecas
-l bibliotecas
Buscar en la biblioteca llamada bibliotecas al vincular. (La segunda alternativa con el
biblioteca como un argumento separado es solo para el cumplimiento de POSIX y no se recomienda).

Hace una diferencia en qué parte del comando escribe esta opción; el enlazador busca
y procesa bibliotecas y archivos de objetos en el orden en que se especifican. Por lo tanto, foo.o
-lz bar.o biblioteca de búsquedas z después del archivo foo.o pero antes bar.o. Si bar.o se refiere a
funciones en z, es posible que esas funciones no se carguen.

El enlazador busca una lista estándar de directorios para la biblioteca, que en realidad es
un archivo llamado biblioteca.a. El vinculador luego usa este archivo como si se hubiera especificado
precisamente por su nombre.

Los directorios buscados incluyen varios directorios del sistema estándar más cualquiera que usted
especificar con -L.

Normalmente, los archivos que se encuentran de esta manera son archivos de biblioteca --- archivos de almacenamiento cuyos miembros son
archivos de objeto. El vinculador maneja un archivo de almacenamiento escaneándolo en busca de miembros.
que definen símbolos a los que hasta ahora se ha hecho referencia pero no definidos. Pero si el
El archivo que se encuentra es un archivo de objeto ordinario, está vinculado de la manera habitual. los
única diferencia entre usar un -l opción y especificar un nombre de archivo es que -l
rodea bibliotecas lib y .a y busca en varios directorios.

-lobjc
Necesita este caso especial de -l opción para vincular un Objective-C o
Programa Objective-C ++.

-nostartfiles
No utilice los archivos de inicio del sistema estándar al vincular. El sistema estándar
las bibliotecas se utilizan normalmente, a menos que -nostdlib or -nodefaultlibs se utiliza.

-nodefaultlibs
No utilice las bibliotecas del sistema estándar al vincular. Solo las bibliotecas que especifique
se pasan al enlazador, y las opciones que especifican el enlace de las bibliotecas del sistema, como
as -static-libgcc or -libgcc-compartido, se ignoran. Se utilizan los archivos de inicio estándar
normalmente, a menos que -nostartfiles se utiliza.

El compilador puede generar llamadas a "memcmp", "memset", "memcpy" y "memmove". Estas
las entradas normalmente se resuelven mediante entradas en libc. Estos puntos de entrada deben ser
suministrado a través de algún otro mecanismo cuando se especifica esta opción.

-nostdlib
No utilice bibliotecas o archivos de inicio del sistema estándar al vincular. Sin inicio
archivos y solo las bibliotecas que especifique se pasan al vinculador, y las opciones
especificar la vinculación de las bibliotecas del sistema, como -static-libgcc or -libgcc-compartido,
se ignoran

El compilador puede generar llamadas a "memcmp", "memset", "memcpy" y "memmove". Estas
las entradas normalmente se resuelven mediante entradas en libc. Estos puntos de entrada deben ser
suministrado a través de algún otro mecanismo cuando se especifica esta opción.

Una de las bibliotecas estándar omitidas por -nostdlib y -nodefaultlibs is libgcc.a,
biblioteca de subrutinas internas que GCC utiliza para superar las deficiencias de
máquinas, o necesidades especiales para algunos idiomas.

En la mayoría de los casos, necesita libgcc.a incluso cuando desee evitar otras bibliotecas estándar.
En otras palabras, cuando especifica -nostdlib or -nodefaultlibs normalmente deberías
especificar -lgcc así como. Esto asegura que no tenga referencias sin resolver a
subrutinas internas de la biblioteca GCC. (Un ejemplo de una subrutina interna de este tipo es
"__main", que se utiliza para garantizar que se llamen a los constructores de C ++).

-tarta
Produzca un ejecutable independiente de la posición en los objetivos que lo admitan. Para predecible
resultados, también debe especificar el mismo conjunto de opciones utilizadas para la compilación (-fpie,
-fPIEo subopciones de modelo) cuando especifica esta opción de vinculador.

-no-pastel
No genere un ejecutable independiente de la posición.

-rdinámico
Pasa la bandera -export-dinámico al enlazador ELF, en destinos que lo admitan. Esta
indica al vinculador que agregue todos los símbolos, no solo los usados, al símbolo dinámico
mesa. Esta opción es necesaria para algunos usos de "dlopen" o para permitir la obtención
retrocesos desde dentro de un programa.

-s Elimine toda la tabla de símbolos y la información de reubicación del ejecutable.

-estático
En los sistemas que admiten la vinculación dinámica, esto evita la vinculación con el compartido
Bibliotecas. En otros sistemas, esta opción no tiene ningún efecto.

-compartido
Producir un objeto compartido que luego se puede vincular con otros objetos para formar un
ejecutable. No todos los sistemas admiten esta opción. Para obtener resultados predecibles, debe
también especifique el mismo conjunto de opciones utilizadas para la compilación (-fpic, -fPICo modelo
subopciones) cuando especifica esta opción de vinculador. [1]

-libgcc-compartido
-static-libgcc
En sistemas que proporcionan libgcc como biblioteca compartida, estas opciones fuerzan el uso de
ya sea la versión compartida o estática, respectivamente. Si no hay una versión compartida de libgcc fue
construido cuando se configuró el compilador, estas opciones no tienen ningún efecto.

Hay varias situaciones en las que una aplicación debe utilizar el recurso compartido. libgcc
en lugar de la versión estática. El más común de estos es cuando la aplicación
desea lanzar y capturar excepciones en diferentes bibliotecas compartidas. En ese caso,
cada una de las bibliotecas, así como la aplicación en sí, deben usar el recurso compartido libgcc.

Por lo tanto, los controladores G ++ y GCJ agregan automáticamente -libgcc-compartido cada vez que construyes
una biblioteca compartida o un ejecutable principal, porque los programas C ++ y Java suelen utilizar
excepciones, así que esto es lo correcto.

Si, en cambio, usa el controlador GCC para crear bibliotecas compartidas, puede encontrar que
no siempre están vinculados con lo compartido libgcc. Si GCC encuentra, en su configuración
vez, que tiene un enlazador que no es GNU o un enlazador GNU que no admite la opción
--eh-marco-hdr, vincula la versión compartida de libgcc en bibliotecas compartidas por
defecto. De lo contrario, aprovecha el enlazador y optimiza el enlace.
con la versión compartida de libgcc, enlazando con la versión estática de libgcc por
defecto. Esto permite que las excepciones se propaguen a través de dichas bibliotecas compartidas, sin
incurrir en costos de reubicación en el momento de la carga de la biblioteca.

Sin embargo, si se supone que una biblioteca o un ejecutable principal arroja o detecta excepciones,
debe vincularlo utilizando el controlador G ++ o GCJ, según corresponda para los idiomas utilizados en el
programa, o usando la opción -libgcc-compartido, de modo que se vincule con el compartido
libgcc.

-estático-libasan
Cuando el -fsanitize = dirección La opción se usa para vincular un programa, el controlador GCC
enlaza automáticamente contra libasano. Si libasano está disponible como una biblioteca compartida, y
las -estático opción no se utiliza, entonces este enlace contra la versión compartida de libasano.
La -estático-libasan La opción dirige al controlador GCC para vincular libasano estáticamente, sin
vinculando necesariamente otras bibliotecas de forma estática.

-estático-libtsan
Cuando el -fsanitize = hilo La opción se usa para vincular un programa, el controlador GCC
enlaza automáticamente contra libsan. Si libsan está disponible como una biblioteca compartida, y
las -estático opción no se utiliza, entonces este enlace contra la versión compartida de libsan.
La -estático-libtsan La opción dirige al controlador GCC para vincular libsan estáticamente, sin
vinculando necesariamente otras bibliotecas de forma estática.

-estático-liblsan
Cuando el -fsanitize = fuga La opción se usa para vincular un programa, el controlador GCC
enlaza automáticamente contra libsan. Si libsan está disponible como una biblioteca compartida, y
las -estático opción no se utiliza, entonces este enlace contra la versión compartida de libsan.
La -estático-liblsan La opción dirige al controlador GCC para vincular libsan estáticamente, sin
vinculando necesariamente otras bibliotecas de forma estática.

-estático-libubsan
Cuando el -fsanitize = indefinido La opción se usa para vincular un programa, el controlador GCC
enlaza automáticamente contra liubsan. Si liubsan está disponible como una biblioteca compartida,
y -estático opción no se utiliza, entonces este enlace contra la versión compartida de
liubsan. -estático-libubsan La opción dirige al controlador GCC para vincular liubsan
estáticamente, sin vincular necesariamente otras bibliotecas de forma estática.

-estatic-libmpx
Cuando el -fcheck-puntero límites y -mmpx Las opciones se utilizan para vincular un programa, el GCC
el controlador se vincula automáticamente contra libmpx. Si libmpx está disponible como compartido
biblioteca, y la -estático opción no se utiliza, entonces este enlace contra el compartido
versión de libmpx. -estatic-libmpx La opción dirige al controlador GCC para vincular libmpx
estáticamente, sin vincular necesariamente otras bibliotecas de forma estática.

-estatic-libmpxwrappers
Cuando el -fcheck-puntero límites y -mmpx Las opciones se utilizan para vincular un programa sin
también usando -fno-chkp-use-envoltorios, el controlador GCC se vincula automáticamente con
libmpxwrappers. Si libmpxwrappers está disponible como una biblioteca compartida, y la -estático
opción no se utiliza, entonces este enlace contra la versión compartida de libmpxwrappers.
-estatic-libmpxwrappers La opción dirige al controlador GCC para vincular libmpxwrappers
estáticamente, sin vincular necesariamente otras bibliotecas de forma estática.

-static-libstdc ++
Cuando el g ++ programa se utiliza para vincular un programa C ++, normalmente vincula automáticamente
en contra libstdc ++. Si libstdc ++ está disponible como una biblioteca compartida, y la -estático
opción no se utiliza, entonces este enlace contra la versión compartida de libstdc ++. Es decir
normalmente bien. Sin embargo, a veces es útil congelar la versión de libstdc ++
utilizado por el programa sin ir hasta un enlace completamente estático. los
-static-libstdc ++ opción dirige la g ++ controlador para vincular libstdc ++ estáticamente, sin
vinculando necesariamente otras bibliotecas de forma estática.

-simbólico
Vincular referencias a símbolos globales al crear un objeto compartido. Advertir sobre cualquier
referencias no resueltas (a menos que la opción del editor de enlaces lo invalide) -Xlinker -z
-Xlinker defensas). Solo unos pocos sistemas admiten esta opción.

-T guión
Uso guión como el script del enlazador. Esta opción es compatible con la mayoría de los sistemas que utilizan
Enlazador GNU. En algunos objetivos, como los objetivos de placa base sin un sistema operativo,
las -T Es posible que se requiera la opción al vincular para evitar referencias a símbolos no definidos.

-Xlinker opción
Aprobado opción como una opción para el enlazador. Puede utilizar esto para suministrar datos específicos del sistema.
opciones del enlazador que GCC no reconoce.

Si desea pasar una opción que tiene un argumento separado, debe usar -Xlinker
dos veces, una para la opción y otra para el argumento. Por ejemplo, para pasar -afirmar
Definiciones, debes escribir -Xlinker -afirmar -Xlinker Definiciones. No funciona
para escribir -Xlinker "-afirmar definiciones ", porque esto pasa toda la cadena como un
argumento único, que no es lo que espera el enlazador.

Cuando se utiliza el enlazador GNU, suele ser más conveniente pasar argumentos al enlazador
opciones usando el opción=propuesta de sintaxis que como argumentos separados. Por ejemplo tu
puede especificar -Xlinker -Mapa = salida.mapa más bien que -Xlinker -Mapa -Xlinker salida.mapa.
Es posible que otros enlazadores no admitan esta sintaxis para las opciones de la línea de comandos.

-Wl,opción
Aprobado opción como una opción para el enlazador. Si opción contiene comas, se divide en
múltiples opciones en las comas. Puede utilizar esta sintaxis para pasar un argumento al
opción. Por ejemplo, -Wl, -Map, output.map pasa -Mapa salida.mapa al enlazador. Cuando
usando el enlazador GNU, también puede obtener el mismo efecto con -Wl, -Map = output.map.

NOTA: En Ubuntu 8.10 y versiones posteriores, para LDFLAGS, la opción -Wl, -z, relro se utiliza.
Para deshabilitar, use -Wl, -z, norelro.

-u símbolo
Finge el símbolo símbolo no está definido, para forzar la vinculación de los módulos de la biblioteca para definir
eso. Puedes usar -u varias veces con diferentes símbolos para forzar la carga de
módulos de biblioteca adicionales.

-z keyword
-z se pasa directamente al vinculador junto con la palabra clave keyword. Ver la sección
en la documentación de su enlazador para conocer los valores permitidos y sus significados.

Opciones para Directorio Buscar
Estas opciones especifican directorios para buscar archivos de encabezado, bibliotecas y partes.
del compilador:

-Idir
Agregar el directorio dir al encabezado de la lista de directorios en los que se buscará encabezado
archivos. Esto se puede utilizar para anular un archivo de encabezado del sistema, sustituyendo el suyo
versión, ya que estos directorios se buscan antes que el archivo de encabezado del sistema
directorios. Sin embargo, no debe utilizar esta opción para agregar directorios que contengan
archivos de encabezado del sistema proporcionados por el proveedor (utilice -sistema para eso). Si usa más de uno
-I opción, los directorios se escanean en orden de izquierda a derecha; el sistema estándar
los directorios vienen después.

Si un sistema estándar incluye directorio, o un directorio especificado con -sistema, es
también especificado con -I, la -I se ignora la opción. El directorio todavía se busca pero
como directorio del sistema en su posición normal en el sistema incluyen la cadena. Esto es para
Asegúrese de que el procedimiento de GCC para corregir los encabezados del sistema con errores y el pedido de
La directiva "include_next" no se cambia inadvertidamente. Si realmente necesitas cambiar
el orden de búsqueda de los directorios del sistema, utilice el -nostdinc y/o -sistema .

-iplugindir =dir
Configure el directorio para buscar complementos que se pasan por -fplugin =nombre en lugar de
-fplugin =camino/nombre .asi que. Esta opción no está destinada a ser utilizada por el usuario, sino solo
pasado por el conductor.

-Yo citodir
Agregar el directorio dir al encabezado de la lista de directorios en los que se buscará encabezado
archivos solo para el caso de "#include"expediente""; no se buscan para "#include
<archivo> ", de lo contrario al igual que -I.

-Ldir
Agregar directorio dir a la lista de directorios que se buscarán -l.

-Bprefijo
Esta opción especifica dónde encontrar los ejecutables, bibliotecas, incluir archivos y
archivos de datos del propio compilador.

El programa del controlador del compilador ejecuta uno o más de los subprogramas cpp, cc1, as y ld.
Intenta prefijo como prefijo para cada programa que intenta ejecutar, con y sin
máquina/versión/.

Para cada subprograma que se va a ejecutar, el controlador del compilador primero prueba el -B prefijo, si lo hay.
Si ese nombre no se encuentra, o si -B no se especifica, el controlador prueba dos estándares
prefijos, / usr / lib / gcc / y / usr / local / lib / gcc /. Si ninguno de esos resultados en un
nombre de archivo que se encuentra, el nombre del programa no modificado se busca mediante el
directorios especificados en su TRAYECTORIA Variable ambiental.

El compilador comprueba si la ruta proporcionada por -B se refiere a un directorio, y si
necesario agrega un carácter separador de directorio al final de la ruta.

-B Los prefijos que especifican efectivamente los nombres de directorio también se aplican a las bibliotecas en el
enlazador, porque el compilador traduce estas opciones en -L opciones para el enlazador.
También se aplican para incluir archivos en el preprocesador, porque el compilador traduce
estas opciones en -sistema opciones para el preprocesador. En este caso, el compilador
anexa incluir al prefijo.

El archivo de soporte de tiempo de ejecución libgcc.a también se puede buscar mediante el -B prefijo, si
necesario. Si no se encuentra allí, se prueban los dos prefijos estándar anteriores, y eso
es todo. El archivo se deja fuera del enlace si no se encuentra por esos medios.

Otra forma de especificar un prefijo muy parecido al -B el prefijo es usar el entorno
variable GCC_EXEC_PREFIX.

Como un truco especial, si el camino proporcionado por -B is [dir /] stageN /, Donde N es un numero
en el rango de 0 a 9, luego se reemplaza por [dir /] incluir. Esto es para ayudar con el arranque.
atando el compilador.

-specs =presentar
Proceso presentar después de que el compilador lea en el estándar especificaciones archivo, para anular
los valores predeterminados que el gcc El programa del controlador utiliza para determinar qué interruptores pasar.
a cc1, cc1plus, as, ld, etc. Más de uno -specs =presentar se puede especificar en el
línea de comandos, y se procesan en orden, de izquierda a derecha.

--sysroot =dir
Uso dir como directorio raíz lógico para encabezados y bibliotecas. Por ejemplo, si el
El compilador normalmente busca encabezados en / usr / include y bibliotecas en / Usr / lib, Se
en su lugar busca dir / usr / include y dir / usr / lib.

Si usa tanto esta opción como la -isysroot opción, entonces la --sysroot opción
se aplica a las bibliotecas, pero el -isysroot La opción se aplica a los archivos de encabezado.

El enlazador GNU (a partir de la versión 2.16) tiene el soporte necesario para este
opción. Si su enlazador no admite esta opción, el aspecto del archivo de encabezado de
--sysroot todavía funciona, pero el aspecto de la biblioteca no.

--no-sysroot-sufijo
Para algunos destinos, se agrega un sufijo al directorio raíz especificado con --sysroot,
dependiendo de las otras opciones utilizadas, de modo que los encabezados se pueden encontrar, por ejemplo, en
dir / sufijo / usr / include en lugar de dir / usr / include. Esta opción deshabilita la adición
de tal sufijo.

-I- Esta opción ha quedado obsoleta. Por favor use -Yo cito en lugar de -I directorios antes
las -I- y quitar el -I- opción. Cualquier directorio que especifique con -I opciones antes
las -I- La opción se busca solo para el caso de "#include"expediente""; no son
buscó "#includearchivo> ".

Si se especifican directorios adicionales con -I opciones después de la -I- opción, estos
En los directorios se buscan todas las directivas "#include". (Ordinariamente todos -I
Los directorios se utilizan de esta manera).

Además, la -I- opción inhibe el uso del directorio actual (donde la
el archivo de entrada actual proviene) como el primer directorio de búsqueda para "#include"expediente"".
No hay forma de anular este efecto de -I-. Con -YO. puede especificar la búsqueda
el directorio que es actual cuando se invoca el compilador. Esa no es exactamente la
lo mismo que hace el preprocesador por defecto, pero a menudo es satisfactorio.

-I- no inhibe el uso de los directorios del sistema estándar para los archivos de encabezado.
Por tanto, -I- y -nostdinc son independientes.

Especificación Target Máquina y Compilador Versión
La forma habitual de ejecutar GCC es ejecutar el ejecutable llamado gcco máquina-gcc cuando se cruza
compilar, o máquina-gcc-versión para ejecutar una versión diferente a la que se instaló
último.

Materiales fexibles y Configuraciones
Cada tipo de máquina de destino puede tener sus propias opciones especiales, comenzando con -m, elegir
entre varios modelos o configuraciones de hardware --- por ejemplo, 68010 vs 68020, flotante
coprocesador o ninguno. Una única versión instalada del compilador se puede compilar para cualquier modelo.
o configuración, según las opciones especificadas.

Algunas configuraciones del compilador también admiten opciones especiales adicionales, generalmente para
compatibilidad con otros compiladores en la misma plataforma.

AAArch64 Opciones

Estas opciones están definidas para implementaciones de AArch64:

-mabi =nombre
Genere código para el modelo de datos especificado. Los valores permitidos son ilp32 para SysV-
como modelo de datos donde int, long int y pointer son de 32 bits, y lp64 para SysV-like
modelo de datos donde int es de 32 bits, pero long int y pointer son de 64 bits.

El valor predeterminado depende de la configuración de destino específica. Tenga en cuenta que LP64 y
Las ABI de ILP32 no son compatibles con enlaces; debe compilar todo su programa con el mismo
ABI y vincularlo con un conjunto compatible de bibliotecas.

-mbig-endian
Genera código big-endian. Este es el valor predeterminado cuando GCC está configurado para un
aarch64_be - * - * objetivo.

-mgeneral-regs-solo
Genere código que use solo los registros generales.

-mlittle-endian
Genera código little-endian. Este es el valor predeterminado cuando GCC está configurado para un
aarch64 - * - * pero no un aarch64_be - * - * objetivo.

-mcmodel = diminuto
Genere código para el modelo de código diminuto. El programa y sus símbolos definidos estáticamente
deben tener una diferencia de 1 GB entre sí. Los punteros son de 64 bits. Los programas pueden ser estáticamente
o vinculado dinámicamente. Este modelo no está completamente implementado y en su mayoría se trata como
chica.

-mcmodel = pequeño
Genere código para el modelo de código pequeño. El programa y su definido estáticamente
los símbolos deben tener una diferencia de 4 GB entre sí. Los punteros son de 64 bits. Los programas pueden ser
vinculado estática o dinámicamente. Este es el modelo de código predeterminado.

-mcmodel = grande
Genere código para el modelo de código grande. Esto no hace suposiciones sobre direcciones y
tamaños de secciones. Los punteros son de 64 bits. Los programas solo se pueden vincular estáticamente.

-mstrict-alineación
No asuma que el sistema maneja las referencias de memoria no alineadas.

-puntero-de-marco-de-hoja-de-momia
-mno-omitir-puntero-marco-hoja
Omita o mantenga el puntero del marco en las funciones de hoja. El primer comportamiento es el
predeterminado.

-mtls-dialecto = desc
Utilice descriptores de TLS como mecanismo de almacenamiento local de subprocesos para accesos dinámicos de TLS
variables. Este es el predeterminado.

-mtls-dialect = tradicional
Utilice TLS tradicional como mecanismo de almacenamiento local de subprocesos para accesos dinámicos de TLS
variables.

-mfix-corteza-a53-835769
-mno-fix-cortex-a53-835769
Habilite o deshabilite la solución para el número de errata de ARM Cortex-A53 835769. Esto
implica insertar una instrucción NOP entre las instrucciones de memoria y un entero de 64 bits
multiplicar-acumular instrucciones.

-mfix-corteza-a53-843419
-mno-fix-cortex-a53-843419
Habilite o deshabilite la solución para el número de errata de ARM Cortex-A53 843419. Esto
La solución de errata se realiza en el momento del enlace y esto solo pasará el indicador correspondiente
al enlazador.

-march =nombre
Especifique el nombre de la arquitectura de destino, opcionalmente con el sufijo de uno o más
modificadores de características. Esta opción tiene la forma -march =arco{+[no]característica}*, donde el
único valor admisible para arco is armv8-a. Los valores permitidos para característica en
documentado en la subsección siguiente.

Cuando se especifican modificadores de características en conflicto, se usa la característica más a la derecha.

GCC usa este nombre para determinar qué tipo de instrucciones puede emitir al generar
código de ensamblaje.

Dónde -marcha se especifica sin ninguno de los -mtune or -mcpu también se especifica, el
El código está ajustado para funcionar bien en una variedad de procesadores de destino que implementan el
arquitectura de destino.

-mtune =nombre
Especifique el nombre del procesador de destino para el que GCC debe ajustar el rendimiento de
el código. Los valores permitidos para esta opción son: genérico, Cortex-a53, Cortex-a57,
Cortex-a72, exynos-m1, Thunderx, xgene1.

Además, esta opción puede especificar que GCC debe ajustar el rendimiento del código.
para un sistema big.LITTLE. Los valores permitidos para esta opción son:
corteza-a57.corteza-a53, corteza-a72.corteza-a53.

Donde ninguno de -mtune =, -mcpu = or -march = se especifican, el código está ajustado para realizar
bien en una variedad de procesadores de destino.

Esta opción no puede tener como sufijo modificadores de características.

-mcpu =nombre
Especifique el nombre del procesador de destino, opcionalmente con el sufijo de una o más funciones
modificadores. Esta opción tiene la forma -mcpu =cpu{+[no]característica} *, donde lo permitido
valores para cpu son los mismos que los disponibles para -mtune.

Los valores permitidos para característica se documentan en la subsección siguiente.

Cuando se especifican modificadores de características en conflicto, se usa la característica más a la derecha.

GCC usa este nombre para determinar qué tipo de instrucciones puede emitir al generar
código de ensamblaje (como si -marcha) y para determinar el procesador de destino para el que
sintonizar para la interpretación (como si fuera -mtune). Cuando esta opción se utiliza junto con
-marcha or -mtune, esas opciones tienen prioridad sobre la parte apropiada de este
.

-marcha y -mcpu Modificadores de funciones

Modificadores de características usados ​​con -marcha y -mcpu puede ser uno de los siguientes:

crc Habilite la extensión CRC.

cripto
Habilite la extensión Crypto. Esto implica que Advanced SIMD está habilitado.

fp Habilite las instrucciones de punto flotante.

Simd
Habilite las instrucciones avanzadas de SIMD. Esto implica que las instrucciones de punto flotante son
activado. Este es el valor predeterminado para todos los valores posibles actuales para las opciones. -marcha y
-mcpu =.

Adapteva Epifanía Opciones

Estas -m Las opciones están definidas para Adapteva Epiphany:

-mhalf-reg-archivo
No asigne ningún registro en el rango "r32" ... "r63". Eso permite que el código se ejecute en
variantes de hardware que carecen de estos registros.

-prefer-short-insn-regs
Preferiblemente, asigne registros que permitan la generación de instrucciones breves. Esto puede
resultar en un mayor recuento de instrucciones, por lo que esto puede reducir o aumentar en general
tamaño del código.

-costo-de-rama =número
Establezca el costo de las sucursales en aproximadamente número instrucciones "simples". Este costo es solo un
heurístico y no se garantiza que produzca resultados consistentes en todas las versiones.

-mcmovimiento
Habilite la generación de movimientos condicionales.

-mnops =número
Emitir número NOP antes de cualquier otra instrucción generada.

-mno-suave-cmpsf
Para comparaciones de punto flotante de precisión simple, emita una instrucción "fsub" y pruebe
las banderas. Esto es más rápido que una comparación de software, pero puede obtener resultados incorrectos.
en presencia de NaN, o cuando se comparan dos números pequeños diferentes de modo que
su diferencia se calcula como cero. El valor predeterminado es -msoft-cmpsf, Que utiliza
comparaciones de software más lentas, pero compatibles con IEEE.

-mstack-offset =número
Establezca el desplazamiento entre la parte superior de la pila y el puntero de la pila. Por ejemplo, un valor de 8
significa que los ocho bytes en el rango "sp + 0 ... sp + 7" pueden ser usados ​​por funciones hoja
sin asignación de pila. Valores distintos a 8 or 16 no han sido probados y es poco probable que
trabaja. Tenga en cuenta también que esta opción cambia el ABI; compilar un programa con un
un desplazamiento de pila diferente al de las bibliotecas con el que se han compilado generalmente no
trabaja. Esta opción puede ser útil si desea evaluar si un desplazamiento de pila diferente
le daría un mejor código, pero en realidad usar un desplazamiento de pila diferente para construir
programas de trabajo, se recomienda configurar la cadena de herramientas con los
--with-stack-offset =número .

-mno-redondo-más cercano
Haga que el planificador asuma que el modo de redondeo se ha establecido en truncado. los
por defecto es -mround-más cercano.

-ml-llamadas-largas
Si un atributo no especifica lo contrario, suponga que todas las llamadas pueden estar más allá del
rango de compensación de las instrucciones "b" / "bl" y, por lo tanto, cargue la dirección de función
en un registro antes de realizar una llamada (de otra manera directa). Este es el predeterminado.

-llamadas-cortas
Si un atributo no especifica lo contrario, suponga que todas las llamadas directas están en el rango
de las instrucciones "b" / "bl", así que utilice estas instrucciones para llamadas directas. los
por defecto es -ml-llamadas-largas.

-mpequeño16
Suponga que las direcciones se pueden cargar como valores sin signo de 16 bits. Esto no se aplica a
direcciones de función para las cuales -ml-llamadas-largas la semántica está en vigor.

-mfp-mode =modo
Establezca el modo predominante de la unidad de punto flotante. Esto determina el flotante
modo de punto que se proporciona y se espera en la llamada a la función y el tiempo de retorno. Haciendo
este modo coincida con el modo que necesita predominantemente al inicio de la función puede hacer que su
programas más pequeños y más rápidos al evitar cambios de modo innecesarios.

modo se puede establecer en uno de los siguientes valores:

llamador
Cualquier modo en la entrada de la función es válido y se retiene o restaura cuando la función
devuelve, y cuando llama a otras funciones. Este modo es útil para compilar
bibliotecas u otras unidades de compilación que desee incorporar en diferentes
programas con diferentes modos de FPU predominantes, y la conveniencia de poder
el uso de un archivo de un solo objeto supera el tamaño y la velocidad de sobrecarga para cualquier modo adicional
el cambio que podría ser necesario, en comparación con lo que se necesitaría con una
elección específica del modo FPU predominante.

truncar
Este es el modo utilizado para los cálculos de punto flotante con truncar (es decir, redondear
hacia cero) modo de redondeo. Eso incluye la conversión de punto flotante a
entero.

redondo más cercano
Este es el modo utilizado para los cálculos de punto flotante con redondeo al más cercano o
modo de redondeo uniforme.

int Este es el modo utilizado para realizar cálculos de enteros en la FPU, por ejemplo, entero
multiplicar o multiplicar y acumular enteros.

El valor predeterminado es -mfp-mode = llamador

-mnosplit-lohi
-mno-postinc
-mno-postmodificar
Ajustes de generación de código que deshabilitan, respectivamente, la división de cargas de 32 bits,
generación de direcciones posteriores al incremento y generación de direcciones posteriores a la modificación. los
los valores predeterminados son msplit-lohi, -mpost-incy -mpost-modificar.

-mnovect-doble
Cambie el modo SIMD preferido a SImode. El valor predeterminado es -mvect-doble, Que utiliza
DImode como modo SIMD preferido.

-max-vect-align =número
La alineación máxima para los tipos de modo vectorial SIMD. número puede ser 4 u 8. El valor predeterminado es
8. Tenga en cuenta que se trata de un cambio de ABI, aunque muchas interfaces de función de biblioteca son
no se ve afectado si no usan los modos vectoriales SIMD en lugares que afectan el tamaño y / o
alineación de tipos relevantes.

-msplit-vecmove-temprano
El vector dividido se mueve en movimientos de una sola palabra antes de volver a cargar. En teoría, esto puede dar
mejor asignación de registros, pero hasta ahora parece ocurrir lo contrario.

-m1reg-reg
Especifique un registro para mantener la constante -1, lo que hace que la carga pequeña sea negativa
constantes y ciertas máscaras de bits más rápido. Valores permitidos para reg en r43 y r63,
que especifican el uso de ese registro como un registro fijo, y ninguna, lo que significa que no
register se utiliza para este propósito. El valor predeterminado es -m1reg-ninguno.

ARC Opciones

Las siguientes opciones controlan la variante de arquitectura para la que se compila el código:

-cambiador-de-barrilete
Genera instrucciones con el apoyo de la palanca de cambios de barril. Este es el valor predeterminado a menos que
-mcpu = ARC601 está en efecto.

-mcpu =cpu
Establezca el tipo de arquitectura, el uso de registros y los parámetros de programación de instrucciones para cpu.
También hay opciones de alias de acceso directo disponibles para compatibilidad con versiones anteriores y
conveniencia. Valores admitidos para cpu en

ARC600
Compile para ARC600. Alias: -mA6, -mARC600.

ARC601
Compile para ARC601. Alias: -mARC601.

ARC700
Compile para ARC700. Alias: -mA7, -mARC700. Este es el valor predeterminado cuando se configura
--con-cpu = arc700.

-mdpfp
-mdpfp-compacto
FPX: Genere instrucciones FPX de doble precisión, ajustadas para la implementación compacta.

-mdpfp-rápido
FPX: Genere instrucciones FPX de doble precisión, ajustadas para una implementación rápida.

-mno-dpfp-lrsr
Desactive las instrucciones LR y SR para que no utilicen los registros auxiliares de la extensión FPX.

-mea
Genere instrucciones aritméticas extendidas. Actualmente solo "divaw", "añade", "subs",
y "sat16" son compatibles. Esto siempre está habilitado para -mcpu = ARC700.

-mno-mpy
No genere instrucciones mpy para ARC700.

-mmul32x16
Genere instrucciones mac y multiplicación de 32x16 bits.

-mmul64
Genere instrucciones mul64 y mulu64. Solo valido para -mcpu = ARC600.

-normal
Generar instrucción de norma. Este es el valor predeterminado si -mcpu = ARC700 está en efecto.

-mspfp
-mspfp-compacto
FPX: Genere instrucciones FPX de precisión simple, ajustadas para la implementación compacta.

-mspfp-rápido
FPX: Genere instrucciones FPX de precisión única, ajustadas para una implementación rápida.

-msimd
Habilite la generación de instrucciones ARC SIMD a través de incorporaciones específicas de destino. Solo valido
para -mcpu = ARC700.

-msoft-flotador
Esta opción ignorada; se proporciona solo con fines de compatibilidad. Software
El código de punto flotante se emite de forma predeterminada, y FPX puede anular este valor predeterminado.
opciones; mspfp, mspfp-compactoo mspfp-rápido para precisión simple, y mdpfp, mdpfp-
compactoo mdpfp-rápido para doble precisión.

-mswap
Genera instrucciones de intercambio.

Las siguientes opciones se pasan al ensamblador y también definen el preprocesador
símbolos macro.

-mdsp-paquete
Pasado al ensamblador para habilitar las extensiones DSP Pack A. También establece el
símbolo de preprocesador "__Xdsp_packa".

-mdvbf
Pasado al ensamblador para habilitar la extensión de mariposa viterbi dual. También
establece el símbolo del preprocesador "__Xdvbf".

-mlock
Se pasa al ensamblador para habilitar la extensión condicional de carga / almacenamiento bloqueada.
También establece el símbolo de preprocesador "__Xlock".

-mmac-d16
Pasado al ensamblador. También establece el símbolo de preprocesador "__Xxmac_d16".

-mmac-24
Pasado al ensamblador. También establece el símbolo de preprocesador "__Xxmac_24".

-mrtsc
Pasado al ensamblador para habilitar la extensión Contador de marca de tiempo de 64 bits
instrucción. También establece el símbolo de preprocesador "__Xrtsc".

-mswape
Se transmite al ensamblador para habilitar la instrucción de extensión de pedido de bytes de intercambio.
También establece el símbolo del preprocesador "__Xswape".

-mtelefonía
Pasado al ensamblador para habilitar instrucciones de operando doble y único para
telefonía. También establece el símbolo de preprocesador "__Xtelephony".

-mxy
Pasado al ensamblador para habilitar la extensión de memoria XY. También establece el
símbolo de preprocesador "__Xxy".

Las siguientes opciones controlan cómo se anota el código ensamblador:

-dimensionar
Anote las instrucciones del ensamblador con direcciones estimadas.

-manonotar-alinear
Explique qué consideraciones de alineación conducen a la decisión de realizar una instrucción.
corto o largo.

Las siguientes opciones se pasan al vinculador:

-marclinux
Pasado al enlazador, para especificar el uso de la emulación "arclinux". Esta opción
está habilitado de forma predeterminada en las cadenas de herramientas creadas para "arc-linux-uclibc" y
Objetivos "arceb-linux-uclibc" cuando no se solicita la creación de perfiles.

-marclinux_prof
Pasado al enlazador, para especificar el uso de la emulación "arclinux_prof". Esta
La opción está habilitada de forma predeterminada en las cadenas de herramientas creadas para "arc-linux-uclibc" y
Objetivos "arceb-linux-uclibc" cuando se solicita la creación de perfiles.

Las siguientes opciones controlan la semántica del código generado:

-mepílogo-cfi
Habilite la generación de información de tramas de llamadas para epílogos.

-mno-epílogo-cfi
Desactive la generación de información de tramas de llamada para epílogos.

-ml-llamadas-largas
Genere entradas de llamadas como registro de llamadas indirectas, proporcionando así acceso a la
Rango de direcciones de 32 bits.

-mmedium-llama
No utilice un rango de direccionamiento de menos de 25 bits para las llamadas, que es el desplazamiento disponible
para una instrucción de bifurcación y enlace incondicional. Ejecución condicional de función
se suprimen las llamadas, para permitir el uso del rango de 25 bits, en lugar del rango de 21 bits
con bifurcación y enlace condicional. Este es el valor predeterminado para las cadenas de herramientas construidas para
Objetivos "arc-linux-uclibc" y "arceb-linux-uclibc".

-mno-sdatos
No genere referencias sdata. Este es el valor predeterminado para las cadenas de herramientas construidas para
Objetivos "arc-linux-uclibc" y "arceb-linux-uclibc".

-mucb-mcount
Instrumento con llamadas mcount como se usa en el código UCB. Es decir, hago el recuento en la llamada,
no la persona que llama. Por defecto, la instrumentación ARC cuenta en la persona que llama.

-caché-volátil
Utilice los accesos de memoria almacenados en caché habitualmente para referencias volátiles. Este es el predeterminado.

-mno-caché-volátil
Habilite la omisión de caché para referencias volátiles.

Las siguientes opciones ajustan la generación de código:

-llamada-maligna
Realice optimizaciones de alineación para las instrucciones de llamada.

-mauto-modificar-reg
Habilite el uso de pre / post modificación con desplazamiento de registro.

-mirilla-mbbit
Habilitar mirilla bbit 2.

-mno-brcc
Esta opción deshabilita un pase específico de un objetivo arc_reorg para generar "BRcc"
instrucciones. No tiene ningún efecto sobre la generación de "BRcc" impulsada por el paso del combinador.

-mcase-vector-pcrel
Utilice tablas de casos de conmutadores relativas a la PC: esto permite acortar la tabla de casos. Este es el
predeterminado para -os.

-casas-compactasi
Habilite el patrón de casos compactos. Este es el valor predeterminado para -os.

-mno-cond-exec
Deshabilite el paso específico ARCompact para generar instrucciones de ejecución condicional. Vencer
para retrasar la programación de ranuras y las interacciones entre números de operandos, tamaños de literales,
longitudes de instrucción, y el soporte para la ejecución condicional, el objetivo independiente
pass para generar ejecución condicional a menudo falta, por lo que el puerto ARC ha mantenido un
pase especial que trata de encontrar una ejecución más condicional que genera
oportunidades después de la asignación de registros, acortamiento de sucursales y programación de ranuras de retraso
se han hecho. Este pase generalmente, pero no siempre, mejora el rendimiento y el código
tamaño, a costa de tiempo de compilación adicional, por lo que hay una opción para cambiar
apagado. Si tiene un problema con las instrucciones de llamada que exceden su compensación permitida
rango porque están condicionados, debería considerar usar -mmedium-llama
preferiblemente.

-mearly-cbranchsi
Habilite el uso de pre-recarga del patrón cbranchsi.

-meexpand-adddi
Expanda "adddi3" y "subdi3" en el momento de la generación de rtl en "add.f", "adc", etc.

-cargas-indexadas
Habilite el uso de cargas indexadas. Esto puede resultar problemático porque algunos optimizadores
suponga que existen tiendas indexadas, que no es el caso.

-mlra
Habilite la asignación de registros locales. Esto todavía es experimental para ARC, por lo que de forma predeterminada
el compilador usa recarga estándar (es decir -mno-lra).

-mlra-prioridad-ninguno
No indique ninguna prioridad para los registros de destino.

-mlra-prioridad-compacto
Indique la prioridad del registro de destino para r0..r3 / r12..r15.

-mlra-prioridad-no compacta
Reducir la prioridad del registro de destino para r0..r3 / r12..r15.

-mno-milicode
Al optimizar el tamaño (usando -os), prólogos y epílogos que tienen que salvar o
restaurar una gran cantidad de registros a menudo se acorta mediante el uso de una llamada a un especial
función en libgcc; esto se conoce como milicode llama. Como estas llamadas pueden plantear
problemas de rendimiento y / o causar problemas de vinculación cuando se vincula de una manera no estándar,
esta opción se proporciona para desactivar la generación de llamadas milicode.

-código-mixto
Modifique la asignación de registros para ayudar a la generación de instrucciones de 16 bits. Esto generalmente tiene
el efecto de disminuir el tamaño promedio de instrucción mientras aumenta la instrucción
contar.

-clase-mq
Habilite las alternativas de instrucción 'q'. Este es el valor predeterminado para -os.

-mRcq
Habilite el manejo de restricciones Rcq: la mayor parte de la generación de códigos cortos depende de esto. Este es
el valor por defecto.

-mRcw
Habilite el manejo de restricciones Rcw: ccfsm condexec depende principalmente de esto. Este es el
predeterminado.

-msize-level =nivel
Ajuste la optimización del tamaño con respecto a la longitud y la alineación de las instrucciones. los
valores reconocidos para nivel son:

0 Sin optimización de tamaño. Este nivel está obsoleto y se trata como 1.

1 Las instrucciones breves se utilizan de forma oportunista.

2 Además, la alineación de los bucles y del código después de que se eliminan las barreras.

3 Además, se elimina la alineación de datos opcional y la opción Os está habilitado.

Esto por defecto es 3 cuando -os está en efecto. De lo contrario, el comportamiento cuando esto no es
el conjunto es equivalente al nivel 1.

-mtune =cpu
Establecer parámetros de programación de instrucciones para cpu, anulando cualquier implícito por -mcpu =.

Valores admitidos para cpu en

ARC600
Sintonice la CPU ARC600.

ARC601
Sintonice la CPU ARC601.

ARC700
Sintonice la CPU ARC700 con bloque multiplicador estándar.

ARC700-xmac
Sintonice la CPU ARC700 con el bloque XMAC.

ARCO725D
Sintonice la CPU ARC725D.

ARCO750D
Sintonice la CPU ARC750D.

-mmultcost =número
Costo a asumir para una instrucción de multiplicación, con 4 siendo igual a una instrucción normal.

-inmunalign-prob-umbral =probabilidades
Establezca el umbral de probabilidad para las ramas desalineadas. Al sintonizar ARC700 y
optimizando la velocidad, las ramas sin ranura de retardo llena se emiten preferiblemente
no alineado y largo, a menos que el perfil indique que la probabilidad de que la rama
ser tomado está debajo probabilidades. El valor predeterminado es (REG_BR_PROB_BASE / 2), es decir, 5000.

Las siguientes opciones se mantienen por compatibilidad con versiones anteriores, pero ahora están obsoletas
y se eliminará en una versión futura:

-margonauta
FPX obsoleto.

-mbig-endian
-EB Compile código para objetivos de big endian. El uso de estas opciones ahora está en desuso. Usuarios
queriendo código big-endian, debería usar los objetivos "arceb-elf32" y "arceb-linux-uclibc"
al construir la cadena de herramientas, para la cual big-endian es el valor predeterminado.

-mlittle-endian
-EL Compile código para objetivos little endian. El uso de estas opciones ahora está en desuso.
Los usuarios que quieran código little-endian deben usar "arc-elf32" y "arc-linux-uclibc"
objetivos al construir la cadena de herramientas, para la cual little-endian es el predeterminado.

-barrel_shifter
Reemplazado por -cambiador-de-barrilete.

-mdpfp_compacto
Reemplazado por -mdpfp-compacto.

-mdpfp_rápido
Reemplazado por -mdpfp-rápido.

-mdsp_packa
Reemplazado por -mdsp-paquete.

-MEA
Reemplazado por -mea.

-mmac_24
Reemplazado por -mmac-24.

-mmac_d16
Reemplazado por -mmac-d16.

-mspfp_compacto
Reemplazado por -mspfp-compacto.

-mspfp_rápido
Reemplazado por -mspfp-rápido.

-mtune =cpu
Nuestros Valores arc600, arc601, arc700 y arc700-xmac para cpu son reemplazados por ARC600, ARC601,
ARC700 y ARC700-xmac respectivamente

-multcost =número
Reemplazado por -mmultcosto.

ARM Opciones

Estas -m las opciones están definidas para el puerto ARM:

-mabi =nombre
Genere código para la ABI especificada. Los valores permitidos son: apcs-gnu, atcs, aapc,
aapcs-linux y iwmmxt.

-mapcs-marco
Genere un marco de pila que cumpla con el estándar de llamada a procedimiento ARM para todos
funciones, incluso si esto no es estrictamente necesario para la correcta ejecución del código.
Especificación -fomit-frame-puntero con esta opción hace que los marcos de la pila no sean
generado para funciones de hoja. El valor predeterminado es -mno-apcs-marco. Esta opcion es
obsoleto.

-mapas
Este es un sinónimo de -mapcs-marco y está en desuso.

-mthumb-interfuncionamiento
Genere código que admita llamadas entre los conjuntos de instrucciones ARM y Thumb.
Sin esta opción, en arquitecturas anteriores a la v5, los dos conjuntos de instrucciones no se pueden
utilizado de forma fiable dentro de un programa. El valor predeterminado es -mno-pulgar-interwork, ya que un poco
se genera un código más grande cuando -mthumb-interfuncionamiento está especificado. En configuraciones AAPCS
esta opción no tiene sentido.

-mno-sched-prolog
Impedir el reordenamiento de las instrucciones en el prólogo de la función o la fusión de
esas instrucciones con las instrucciones en el cuerpo de la función. Esto significa que todos
Las funciones comienzan con un conjunto de instrucciones reconocibles (o, de hecho, una de las opciones
de un pequeño conjunto de prólogos de funciones diferentes), y esta información se puede utilizar para
localizar el inicio de funciones dentro de un fragmento de código ejecutable. El valor predeterminado es
-msched-prólogo.

-mfloat-abi =nombre
Especifica qué ABI de punto flotante usar. Los valores permitidos son: suave, softfp y
en las.

Especificación suave hace que GCC genere una salida que contenga llamadas a la biblioteca para
operaciones puntuales. softfp permite la generación de código usando hardware de punto flotante
instrucciones, pero todavía usa las convenciones de llamada de flotador suave. en las permite
generación de instrucciones de punto flotante y utiliza convenciones de llamada específicas de FPU.

El valor predeterminado depende de la configuración de destino específica. Tenga en cuenta que el hard-float
y las ABI de flotación suave no son compatibles con enlaces; debes compilar todo tu programa con
la misma ABI y vincularla con un conjunto compatible de bibliotecas.

-mlittle-endian
Genere código para un procesador que se ejecuta en modo little-endian. Este es el valor predeterminado para
todas las configuraciones estándar.

-mbig-endian
Genere código para un procesador que se ejecuta en modo big-endian; el valor predeterminado es compilar
código para un procesador little-endian.

-march =nombre
Esto especifica el nombre de la arquitectura ARM de destino. GCC usa este nombre para
determinar qué tipo de instrucciones puede emitir al generar código ensamblador. Esta
La opción se puede utilizar junto con o en lugar de la -mcpu = opción. Permisible
Los Nombres son: brazov2, armv2a, brazov3, brazov3m, brazov4, armv4t, brazov5, armv5t, armv5e,
armv5te, brazov6, armv6j, armv6t2, armv6z, armv6zk, brazov6-m, brazov7, armv7-a, armv7-r,
brazov7-m, armv7e-m, armv7ve, armv8-a, armv8-a + crc, iwmmxt, iwmmxt2, ep9312.

-march = armv7ve es la arquitectura armv7-a con extensiones de virtualización.

-march = armv8-a + crc permite la generación de código para la arquitectura ARMv8-A junto con
las extensiones CRC32 opcionales.

-march = nativo hace que el compilador detecte automáticamente la arquitectura de la compilación
computadora. En la actualidad, esta función solo es compatible con GNU / Linux, y no todos
las arquitecturas son reconocidas. Si la detección automática no tiene éxito, la opción no tiene
efecto.

-mtune =nombre
Esta opción especifica el nombre del procesador ARM de destino para el que GCC debe sintonizar
el rendimiento del código. Para algunas implementaciones ARM, se puede obtener un mejor rendimiento.
obtenido al usar esta opción. Los nombres permitidos son: arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, brazo7m, brazo7d, brazo7dm, arm7di, brazo7dmi, arm70,
arm700, brazo700i, arm710, brazo710c, arm7100, arm720, arm7500, brazo7500fe, brazo7tdmi,
arm7tdmi-s, brazo710t, brazo720t, brazo740t, brazo fuerte, Stronggarm110, Stronggarm1100,
Stronggarm1110, arm8, arm810, arm9, brazo9e, arm920, brazo920t, brazo922t, brazo946e-s,
brazo966e-s, brazo968e-s, arm926ej-s, brazo940t, brazo9tdmi, brazo10tdmi, brazo1020t, arm1026ej-s,
brazo10e, brazo1020e, brazo1022e, brazo1136j-s, brazo1136jf-s, mp core, mpcorenovfp, brazo1156t2-s,
brazo1156t2f-s, brazo1176jz-s, brazo1176jzf-s, Cortex-a5, Cortex-a7, Cortex-a8, Cortex-a9,
Cortex-a12, Cortex-a15, Cortex-a53, Cortex-a57, Cortex-a72, corteza-r4, corteza-r4f,
corteza-r5, corteza-r7, Cortex-m7, Cortex-m4, Cortex-m3, Cortex-m1, Cortex-m0,
corteza-m0plus, cortex-m1.pequeño-multiplicar, cortex-m0.pequeño-multiplicar,
cortex-m0plus.pequeño-multiplicar, exynos-m1, marvel-pj4, xescala, iwmmxt, iwmmxt2, ep9312,
fa526, fa626, fa606te, fa626te, fmp626, fa726te, xgene1.

Además, esta opción puede especificar que GCC debe ajustar el rendimiento del código.
para un sistema big.LITTLE. Los nombres permitidos son: corteza-a15.corteza-a7,
corteza-a57.corteza-a53, corteza-a72.corteza-a53.

-mtune = genérico-arco especifica que GCC debe ajustar el rendimiento para una combinación de
procesadores dentro de la arquitectura arco. El objetivo es generar código que se ejecute bien en el
procesadores más populares actuales, equilibrando las optimizaciones que benefician a algunos
CPU en el rango y evitar problemas de rendimiento de otras CPU. Los efectos de
esta opción puede cambiar en futuras versiones de GCC a medida que los modelos de CPU vayan y vengan.

-mtune = nativo hace que el compilador detecte automáticamente la CPU de la computadora de compilación. A
presente, esta función solo es compatible con GNU / Linux, y no todas las arquitecturas son
Reconocido. Si la detección automática no tiene éxito, la opción no tiene ningún efecto.

-mcpu =nombre
Esto especifica el nombre del procesador ARM de destino. GCC usa este nombre para derivar el
nombre de la arquitectura ARM de destino (como si lo especificara -marcha) y el procesador ARM
tipo para el cual sintonizar para el rendimiento (como si lo especificara -mtune). Donde esta opcion
se usa junto con -marcha or -mtune, esas opciones tienen prioridad sobre las
parte apropiada de esta opción.

Los nombres permitidos para esta opción son los mismos que los de -mtune.

-mcpu = genérico-arco también es admisible, y es equivalente a -march =arco
-mtune = genérico-arco. Vea -mtune para obtener más información.

-mcpu = nativo hace que el compilador detecte automáticamente la CPU de la computadora de compilación. A
presente, esta función solo es compatible con GNU / Linux, y no todas las arquitecturas son
Reconocido. Si la detección automática no tiene éxito, la opción no tiene ningún efecto.

-mfpu =nombre
Esto especifica qué hardware de punto flotante (o emulación de hardware) está disponible en
el objetivo. Los nombres permitidos son: vfp, vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16,
vfpv3xd, vfpv3xd-fp16, neón, neón-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16, neón-vfpv4,
fpv5-d16, fpv5-sp-d16, fp-armv8, neón-fp-armv8y cripto-neón-fp-armv8.

If -msoft-flotador se especifica esto especifica el formato de los valores de punto flotante.

Si el hardware de punto flotante seleccionado incluye la extensión NEON (p. Ej. -mfpu=neón),
tenga en cuenta que las operaciones de punto flotante no son generadas por el pase de vectorización automática de GCC
a menos que -optimizaciones-matemáticas-divertidas también se especifica. Esto se debe a que el hardware NEON
no implementa completamente el estándar IEEE 754 para aritmética de punto flotante (en
valores desnormales particulares se tratan como cero), por lo que el uso de instrucciones NEON puede
conducir a una pérdida de precisión.

-formato-mfp16 =nombre
Especifique el formato del tipo de coma flotante de precisión media "__fp16". Permisible
Los Nombres son ninguna, ieeey alternativa; el valor predeterminado es ninguna, en cuyo caso el "__fp16"
el tipo no está definido.

-mstructure-size-boundary =n
Los tamaños de todas las estructuras y uniones se redondean a un múltiplo del número de
bits establecidos por esta opción. Los valores permitidos son 8, 32 y 64. El valor predeterminado
varía para diferentes cadenas de herramientas. Para la cadena de herramientas específica de COFF, el valor predeterminado es
8. Solo se permite un valor de 64 si la ABI subyacente lo admite.

Especificar un número mayor puede producir un código más rápido y eficiente, pero también puede
aumentar el tamaño del programa. Los diferentes valores son potencialmente incompatibles.
El código compilado con un valor no necesariamente puede esperar que funcione con código o bibliotecas
compilados con otro valor, si intercambian información utilizando estructuras o uniones.

-mabort-on-noreturn
Genere una llamada a la función "abortar" al final de una función "sin retorno". Está
ejecutado si la función intenta regresar.

-ml-llamadas-largas
-mno-llamadas-largas
Le dice al compilador que realice llamadas a funciones cargando primero la dirección del
funcionar en un registro y luego realizar una llamada de subrutina en este registro. Esta
Se necesita un conmutador si la función de destino se encuentra fuera del direccionamiento de 64 megabytes.
rango de la versión basada en desplazamiento de la instrucción de llamada de subrutina.

Incluso si este interruptor está habilitado, no todas las llamadas a funciones se convierten en llamadas largas.
La heurística es que las funciones estáticas, funciones que tienen el "short_call"
atributo, funciones que están dentro del alcance de una directiva "#pragma no_long_calls",
y funciones cuyas definiciones ya han sido compiladas dentro de la actual
La unidad de compilación no se convierte en llamadas largas. Las excepciones a esta regla son que
definiciones de funciones débiles, funciones con el atributo "long_call" o la "sección"
atributo y funciones que están dentro del alcance de una directiva "#pragma long_calls"
siempre se convierten en llamadas largas.

Esta función no está habilitada de forma predeterminada. Especificando -mno-llamadas-largas restaura el
comportamiento predeterminado, al igual que colocar las llamadas a funciones dentro del alcance de un "#pragma
directiva long_calls_off ". Tenga en cuenta que estos modificadores no tienen ningún efecto en la forma en que el compilador
genera código para manejar llamadas a funciones a través de punteros de función.

-mesa-base-de-una-imagen
Trate el registro utilizado para el direccionamiento PIC como de solo lectura, en lugar de cargarlo en el
prólogo para cada función. El sistema de tiempo de ejecución es responsable de inicializar este
registrarse con un valor apropiado antes de que comience la ejecución.

-mpic-register =reg
Especifique el registro que se utilizará para el direccionamiento PIC. Para el caso base estándar de PIC, el
por defecto es cualquier registro adecuado determinado por el compilador. Para el caso base de PIC único,
el valor predeterminado es R9 si el objetivo está basado en EABI o la verificación de pila está habilitada, de lo contrario,
por defecto es R10.

-mpic-data-is-text-related
Suponga que cada segmento de datos es relativo al segmento de texto en el momento de la carga. Por lo tanto,
permite direccionar datos utilizando operaciones relativas a PC. Esta opción está activada de forma predeterminada
para destinos distintos de VxWorks RTP.

-mpoke-nombre-función
Escriba el nombre de cada función en la sección de texto, directamente antes de la función
prólogo. El código generado es similar a esto:

t0
.ascii "arm_poke_function_name", 0
.alinear
t1
.palabra 0xff000000 + (t1 - t0)
arm_poke_nombre_función
movimiento ip, sp
stmfd sp !, {fp, ip, lr, pc}
sub fp, ip, # 4

Al realizar un seguimiento de pila, el código puede inspeccionar el valor de "pc" almacenado en "fp +
0 ". Si la función de rastreo mira la ubicación" pc - 12 "y los 8 bits superiores son
, entonces sabemos que hay un nombre de función incrustado inmediatamente antes de este
ubicación y tiene la longitud "((pc [-3]) & 0xff000000)".

-pulgar
-marmar
Seleccione entre generar código que se ejecute en los estados ARM y Thumb. El predeterminado para
la mayoría de las configuraciones es generar código que se ejecuta en estado ARM, pero el valor predeterminado
se puede cambiar configurando GCC con el --with-mode =estado opción de configuración.

-mtpcs-marco
Genere un marco de pila que cumpla con el estándar de llamada de procedimiento de pulgar para
todas las funciones que no son hojas. (Una función de hoja es aquella que no llama a ninguna otra
funciones.) El valor predeterminado es -mno-tpcs-marco.

-mtpcs-hoja-marco
Genere un marco de pila que cumpla con el estándar de llamada de procedimiento de pulgar para
todas las funciones de la hoja. (Una función de hoja es aquella que no llama a ninguna otra función).
El valor predeterminado es -mno-apcs-hoja-marco.

-mcallee-super-interfuncionamiento
Proporciona a todas las funciones visibles externamente en el archivo que se está compilando una instrucción ARM
establece el encabezado que cambia al modo Thumb antes de ejecutar el resto de la función.
Esto permite llamar a estas funciones desde un código que no interfunciona. Esta opcion es
no es válido en las configuraciones AAPCS porque el interfuncionamiento está habilitado de forma predeterminada.

-mcaller-super-interfuncionamiento
Permite que las llamadas a través de punteros de función (incluidas las funciones virtuales) se ejecuten correctamente
independientemente de si el código de destino se ha compilado para el interfuncionamiento o no.
Hay una pequeña sobrecarga en el costo de ejecutar un puntero de función si esta opción
está habilitado. Esta opción no es válida en configuraciones AAPCS porque el interfuncionamiento es
habilitado por defecto.

-mtp =nombre
Especifique el modelo de acceso para el puntero de almacenamiento local de subprocesos. Los modelos válidos son
suave, que genera llamadas a "__aeabi_read_tp", cp15, que busca el hilo
puntero de "cp15" directamente (compatible con la arquitectura arm6k), y auto, cual
utiliza el mejor método disponible para el procesador seleccionado. La configuración predeterminada es
auto.

-mtls-dialecto =dialecto
Especifique el dialecto que se utilizará para acceder al almacenamiento local de subprocesos. Dos dialectos son
soportado---ñu y gnu2. ñu dialecto selecciona el esquema GNU original para
Soporte de modelos TLS dinámicos locales y globales. los gnu2 dialecto selecciona el GNU
esquema descriptor, que proporciona un mejor rendimiento para las bibliotecas compartidas. El GNU
El esquema descriptor es compatible con el esquema original, pero requiere nuevos
Soporte de ensamblador, enlazador y biblioteca. Los modelos de TLS ejecutivos iniciales y locales son
no se ve afectado por esta opción y siempre use el esquema original.

-reubicaciones-de-palabras
Genere solo reubicaciones absolutas en valores del tamaño de una palabra (es decir, R_ARM_ABS32). Este es
habilitado de forma predeterminada en los objetivos (uClinux, SymbianOS) donde el cargador de tiempo de ejecución impone
esta restricción, y cuando -fpic or -fPIC está especificado.

-mfix-corteza-m3-ldrd
Algunos núcleos Cortex-M3 pueden dañar los datos cuando las instrucciones "ldrd" con
Se utilizan registros de base y destino superpuestos. Esta opción evita generar
estas instrucciones. Esta opción está habilitada de forma predeterminada cuando -mcpu = corteza-m3 is
especificado.

-acceso-no-alineado
-mno-acceso-no alineado
Habilita (o deshabilita) la lectura y escritura de valores de 16 y 32 bits de direcciones
que no están alineados a 16 o 32 bits. De forma predeterminada, el acceso no alineado está deshabilitado para todos
pre-ARMv6 y todas las arquitecturas ARMv6-M, y habilitado para todas las demás arquitecturas. Si
el acceso no alineado no está habilitado, entonces se accede a las palabras en estructuras de datos empaquetadas
byte a la vez.

El atributo ARM "Tag_CPU_unaligned_access" se establece en el archivo de objeto generado en
verdadero o falso, dependiendo de la configuración de esta opción. Si el acceso no está alineado
está habilitado, entonces también se define el símbolo de preprocesador "__ARM_FEATURE_UNALIGNED".

-mneon-para-64 bits
Permite el uso de Neon para manejar operaciones escalares de 64 bits. Esto está deshabilitado por defecto
ya que el costo de mover datos de los registros centrales a Neon es alto.

-mslow-flash-datos
Suponga que la carga de datos desde flash es más lenta que la obtención de instrucciones. Por lo tanto literal
la carga se minimiza para un mejor rendimiento. Esta opción solo se admite cuando
compilando para ARMv7 M-profile y desactivado de forma predeterminada.

-masm-sintaxis-unificada
Suponga que el ensamblador en línea está utilizando una sintaxis ASM unificada. El valor predeterminado está actualmente desactivado
lo que implica una sintaxis dividida. Actualmente, esta opción solo está disponible para Thumb1 y
no tiene ningún efecto sobre el estado de ARM y Thumb2. Sin embargo, esto puede cambiar en futuras versiones de
GCC. La sintaxis dividida debe considerarse obsoleta.

-mrestringirlo
Restringe la generación de bloques de TI para cumplir con las reglas de ARMv8. Los bloques de TI pueden
sólo contienen una única instrucción de 16 bits de un conjunto selecto de instrucciones. Esta
La opción está activada de forma predeterminada para el modo de pulgar ARMv8.

-impresión-sintonizar-info
Imprime la información de ajuste de la CPU como comentario en el archivo ensamblador. Esta es una opción utilizada
solo para pruebas de regresión del compilador y no para uso ordinario en
compilar código. Esta opción está deshabilitada de forma predeterminada.

AVR Opciones

Estas opciones están definidas para implementaciones de AVR:

-mmcu =mcu
Especifique las arquitecturas de conjuntos de instrucciones (ISA) de Atmel AVR o el tipo de MCU.

El valor predeterminado de esta opción es @ tie {}avr2.

GCC admite los siguientes dispositivos AVR e ISA:

"avr2"
Dispositivos "clásicos" con hasta 8 @ tie {} KiB de memoria de programa. mcu@tie {} = "attiny22",
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".

"avr25"
Dispositivos "clásicos" con hasta 8 @ tie {} KiB de memoria de programa y con "MOVW"
instrucción. mcu@tie {} = "ata5272", "ata6616c", "attiny13", "attiny13a",
"attiny2313", "attiny2313a", "attiny24", "attiny24a", "attiny25", "attiny261",
"attiny261a", "attiny43u", "attiny4313", "attiny44", "attiny44a", "attiny441",
"attiny45", "attiny461", "attiny461a", "attiny48", "attiny828", "attiny84",
"attiny84a", "attiny841", "attiny85", "attiny861", "attiny861a", "attiny87",
"attiny88", "at86rf401".

"avr3"
Dispositivos "clásicos" con 16 @ tie {} KiB hasta 64 @ tie {} KiB de memoria de programa.
mcu@tie {} = "at43usb355", "at76c711".

"avr31"
Dispositivos "clásicos" con 128 @ tie {} KiB de memoria de programa. mcu@tie {} = "atmega103",
"at43usb320".

"avr35"
Dispositivos "clásicos" con 16 @ tie {} KiB hasta 64 @ tie {} KiB de memoria de programa y con
la instrucción "MOVW". mcu@tie {} = "ata5505", "ata6617c", "ata664251",
"atmega16u2", "atmega32u2", "atmega8u2", "attiny1634", "attiny167", "at90usb162",
"at90usb82".

"avr4"
Dispositivos "mejorados" con hasta 8 @ tie {} KiB de memoria de programa. mcu@tie {} = "ata6285",
"ata6286", "ata6289", "ata6612c", "atmega48", "atmega48a", "atmega48p",
"atmega48pa", "atmega8", "atmega8a", "atmega8hva", "atmega8515", "atmega8535",
"atmega88", "atmega88a", "atmega88p", "atmega88pa", "at90pwm1", "at90pwm2",
"at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".

"avr5"
Dispositivos "mejorados" con 16 @ tie {} KiB hasta 64 @ tie {} KiB de memoria de programa.
mcu@tie {} = "ata5702m322", "ata5782", "ata5790", "ata5790n", "ata5795", "ata5831",
"ata6613c", "ata6614q", "atmega16", "atmega16a", "atmega16hva", "atmega16hva2",
"atmega16hvb", "atmega16hvbrevb", "atmega16m1", "atmega16u4", "atmega161",
"atmega162", "atmega163", "atmega164a", "atmega164p", "atmega164pa", "atmega165",
"atmega165a", "atmega165p", "atmega165pa", "atmega168", "atmega168a",
"atmega168p", "atmega168pa", "atmega169", "atmega169a", "atmega169p",
"atmega169pa", "atmega32", "atmega32a", "atmega32c1", "atmega32hvb",
"atmega32hvbrevb", "atmega32m1", "atmega32u4", "atmega32u6", "atmega323",
"atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a",
"atmega325p", "atmega325pa", "atmega3250", "atmega3250a", "atmega3250p",
"atmega3250pa", "atmega328", "atmega328p", "atmega329", "atmega329a",
"atmega329p", "atmega329pa", "atmega3290", "atmega3290a", "atmega3290p",
"atmega3290pa", "atmega406", "atmega64", "atmega64a", "atmega64c1", "atmega64hve",
"atmega64hve2", "atmega64m1", "atmega64rfr2", "atmega640", "atmega644",
"atmega644a", "atmega644p", "atmega644pa", "atmega644rfr2", "atmega645",
"atmega645a", "atmega645p", "atmega6450", "atmega6450a", "atmega6450p",
"atmega649", "atmega649a", "atmega649p", "atmega6490", "atmega6490a",
"atmega6490p", "at90can32", "at90can64", "at90pwm161", "at90pwm216", "at90pwm316",
"at90scr100", "at90usb646", "at90usb647", "at94k", "m3000".

"avr51"
Dispositivos "mejorados" con 128 @ tie {} KiB de memoria de programa. mcu@tie {} = "atmega128",
"atmega128a", "atmega128rfa1", "atmega128rfr2", "atmega1280", "atmega1281",
"atmega1284", "atmega1284p", "atmega1284rfr2", "at90can128", "at90usb1286",
"at90usb1287".

"avr6"
Dispositivos "mejorados" con PC de 3 bytes, es decir, con más de 128 @ tie {} KiB de programa
memoria. mcu@tie {} = "atmega256rfr2", "atmega2560", "atmega2561", "atmega2564rfr2".

"avrxmega2"
Dispositivos "XMEGA" con más de 8 @ tie {} KiB y hasta 64 @ tie {} KiB de memoria de programa.
mcu@tie {} = "atxmega16a4", "atxmega16a4u", "atxmega16c4", "atxmega16d4",
"atxmega16e5", "atxmega32a4", "atxmega32a4u", "atxmega32c3", "atxmega32c4",
"atxmega32d3", "atxmega32d4", "atxmega32e5", "atxmega8e5".

"avrxmega4"
Dispositivos "XMEGA" con más de 64 @ tie {} KiB y hasta 128 @ tie {} KiB de programa
memoria. mcu@tie {} = "atxmega64a3", "atxmega64a3u", "atxmega64a4u", "atxmega64b1",
"atxmega64b3", "atxmega64c3", "atxmega64d3", "atxmega64d4".

"avrxmega5"
Dispositivos "XMEGA" con más de 64 @ tie {} KiB y hasta 128 @ tie {} KiB de programa
memoria y más de 64 @ tie {} KiB de RAM. mcu@tie {} = "atxmega64a1",
"atxmega64a1u".

"avrxmega6"
Dispositivos "XMEGA" con más de 128 @ tie {} KiB de memoria de programa. mcu@tie {} =
"atxmega128a3", "atxmega128a3u", "atxmega128b1", "atxmega128b3", "atxmega128c3",
"atxmega128d3", "atxmega128d4", "atxmega192a3", "atxmega192a3u", "atxmega192c3",
"atxmega192d3", "atxmega256a3", "atxmega256a3b", "atxmega256a3bu",
"atxmega256a3u", "atxmega256c3", "atxmega256d3", "atxmega384c3", "atxmega384d3".

"avrxmega7"
Dispositivos "XMEGA" con más de 128 @ tie {} KiB de memoria de programa y más de
64 @ tie {} KiB de RAM. mcu@tie {} = "atxmega128a1", "atxmega128a1u", "atxmega128a4u".

"avrtiny"
"PEQUEÑOS" Dispositivos de núcleo diminuto con 512 @ tie {} B hasta 4 @ tie {} KiB de memoria de programa.
mcu@tie {} = "attiny10", "attiny20", "attiny4", "attiny40", "attiny5", "attiny9".

"avr1"
Esta ISA está implementada por el núcleo AVR mínimo y es compatible solo con ensamblador.
mcu@tie {} = "attiny11", "attiny12", "attiny15", "attiny28", "at90s1200".

-argmentos-acumulativos
Acumule argumentos de función salientes y adquiera / libere el espacio de pila necesario para
argumentos de función salientes una vez en función prólogo / epílogo. Sin esta opción,
Los argumentos salientes se envían antes de llamar a una función y se abren después.

Hacer estallar los argumentos después de la llamada a la función puede ser costoso en AVR, por lo que
acumular el espacio de la pila puede conducir a ejecutables más pequeños porque los argumentos necesitan
no debe eliminarse de la pila después de una llamada de función de este tipo.

Esta opción puede llevar a un tamaño de código reducido para funciones que realizan varias llamadas a
funciones que obtienen sus argumentos en la pila como llamadas a funciones similares a printf.

-costo-de-rama =el costo
Establezca los costos de la sucursal para las instrucciones de sucursal condicionales en el costo. Valores razonables
para el costo son números enteros pequeños no negativos. El costo de la sucursal predeterminado es 0.

-mcall-prólogos
Prólogos / epílogos de funciones se expanden como llamadas a subrutinas apropiadas. Código
el tamaño es más pequeño.

-menta8
Suponga que "int" es un entero de 8 bits. Esto afecta a los tamaños de todos los tipos: un "carácter" es 1
byte, "int" es 1 byte, "long" es 2 bytes y "long long" es 4 bytes. Por favor
tenga en cuenta que esta opción no se ajusta a los estándares C, pero da como resultado
tamaño del código.

-mn-flash =número
Suponga que la memoria flash tiene un tamaño de número multiplicado por 64 @ tie {} KiB.

-mno-interrumpe
El código generado no es compatible con las interrupciones de hardware. El tamaño del código es más pequeño.

-relajarse
Intente reemplazar "CALL" resp. Instrucción "JMP" por el "RCALL" más corto resp. "RJMP"
instrucción si corresponde. Configuración -relajarse solo agrega el --mlink-relajarse opción a la
la línea de comando del ensamblador y el --relajarse opción a la línea de comando del enlazador.

El enlazador realiza el salto de relajación porque las compensaciones de salto no se conocen antes
se encuentra el código. Por lo tanto, el código ensamblador generado por el compilador es el mismo,
pero las instrucciones en el ejecutable pueden diferir de las instrucciones en el ensamblador
código.

La relajación debe estar activada si se necesitan códigos auxiliares del vinculador, consulte la sección sobre "EIND" y
stubs del enlazador a continuación.

-mrmw
Suponga que el dispositivo admite las instrucciones de lectura-modificación-escritura "XCH", "LAC", "LAS"
y "LAT".

-msp8
Trate el registro de puntero de pila como un registro de 8 bits, es decir, suponga el byte alto de
el puntero de la pila es cero. En general, no es necesario configurar esta opción manualmente.

El compilador usa esta opcin internamente para seleccionar y construir multilibs para
arquitecturas "avr2" y "avr25". Estas arquitecturas combinan dispositivos con y sin
"SPH". Para cualquier entorno que no sea -mmcu = avr2 or -mmcu = avr25 el controlador del compilador agrega
o elimina esta opción de la línea de comandos del compilador propiamente dicho, porque el compilador
luego sabe si el dispositivo o la arquitectura tiene un puntero de pila de 8 bits y, por lo tanto, no tiene "SPH"
registrarse o no.

-mstrict-X
Utilice el registro de direcciones "X" de la forma propuesta por el hardware. Esto significa que "X" es
sólo se utiliza en direccionamiento indirecto, post-incremento o pre-decremento.

Sin esta opción, el registro "X" se puede utilizar de la misma forma que "Y" o "Z", que
luego se emula con instrucciones adicionales. Por ejemplo, cargar un valor con
Direccionamiento "X + const" con una pequeña "const <64" no negativa a un registro Rn is
realizado como

adiw r26, const; X + = constante
ld , X ; = * X
sbiw r26, const; X - = constante

-mtiny-pila
Solo cambie los 8 @ tie {} bits inferiores del puntero de la pila.

-nodevicelib
No se vincule con la biblioteca específica del dispositivo de AVR-LibC "libdev.a".

-Waddr-espacio-convertir
Advertir sobre conversiones entre espacios de direcciones en el caso de que la dirección resultante
el espacio no está contenido en el espacio de direcciones de entrada.

"EIND" y dispositivos con más de 128 Ki Bytes de Flash

Los punteros en la implementación tienen 16 @ tie {} bits de ancho. La dirección de una función o etiqueta
se representa como dirección de palabra para que los saltos indirectos y las llamadas puedan apuntar a cualquier código
dirección en el rango de 64 @ tie {} palabras Ki.

Para facilitar el salto indirecto en dispositivos con más de 128 @ tie {} Ki bytes de
espacio de memoria del programa, hay un registro de función especial llamado "EIND" que sirve como
parte más significativa de la dirección de destino cuando las instrucciones "EICALL" o "EIJMP" son
usado.

Los saltos y llamadas indirectos en estos dispositivos son manejados por el compilador de la siguiente manera y son
sujeto a algunas limitaciones:

* El compilador nunca establece "EIND".

* El compilador usa "EIND" implícitamente en las instrucciones "EICALL" / "EIJMP" o podría leer
"EIND" directamente para emular una llamada / salto indirecto mediante un "RET"
instrucción.

* El compilador asume que "EIND" nunca cambia durante el código de inicio o durante el
solicitud. En particular, "EIND" no se guarda / restaura en función o se interrumpe
prólogo / epílogo de rutina de servicio.

* Para llamadas indirectas a funciones y goto calculado, el enlazador genera trozos. Talones
son almohadillas de salto a veces también llamadas trampolines. Por lo tanto, la llamada / salto indirecto salta a
tal talón. El stub contiene un salto directo a la dirección deseada.

* La relajación del vinculador debe estar activada para que el vinculador genere los códigos auxiliares correctamente.
en todas las situaciones. Ver la opción del compilador -relajarse y la opción del enlazador --relajarse.
Hay casos de esquina en los que se supone que el vinculador genera stubs pero aborta
sin relajación y sin un mensaje de error útil.

* El script del enlazador predeterminado está organizado para código con "EIND = 0". Si se supone el código
para trabajar con una configuración con "EIND! = 0", se debe utilizar un script de creación de enlaces personalizado para
para colocar las secciones cuyo nombre comienza con ".trampolines" en el segmento donde
"EIND" apunta.

* El código de inicio de libgcc nunca establece "EIND". Tenga en cuenta que el código de inicio es una combinación
de código de libgcc y AVR-LibC. Para conocer el impacto de AVR-LibC en "EIND", consulte AVR-
Manual de usuario de LibC ("http://nongnu.org/avr-libc/user-manual/").

* Es legítimo que el código de inicio específico del usuario configure "EIND" antes, por ejemplo,
mediante el código de inicialización ubicado en la sección ".init3". Dicho código se ejecuta antes de
código de inicio general que inicializa la RAM y llama a los constructores, pero después del bit de
código de inicio de AVR-LibC que establece "EIND" en el segmento donde se encuentra la tabla de vectores
situado.

#incluir

hoyo estatico
__attribute __ ((sección (". init3"), desnudo, usado, no_instrument_function))
init3_set_eind (vacío)
{
__asm ​​volatile ("ldi r24, pm_hh8 (__ trampolines_start) \ n \ t"
"fuera% i0, r24" :: "n" (& EIND): "r24", "memoria");
}

El símbolo "__trampolines_start" se define en el script del enlazador.

* El vinculador genera automáticamente los stubs si se cumplen las dos condiciones siguientes
con:

-
(corto para generar trozos) al igual que:

LDI r24, lo8 (gs ( ))
LDI r25, hi8 (gs ( ))

-
afuera el segmento donde se encuentran los talones.

* El compilador emite tales modificadores "gs" para etiquetas de código en las siguientes situaciones:

-
-
- -mcall-prólogos>
opción de línea de comandos.

-
tablas puede especificar el -fno-tablas-de-salto opción de línea de comandos.

-
-
* Saltar a direcciones no simbólicas como esta no apoyado:

int main (vacío)
{
/ * Función de llamada en la dirección de palabra 0x2 * /
return ((int (*) (void)) 0x2) ();
}

En su lugar, se debe configurar un stub, es decir, la función debe llamarse a través de un símbolo
("func_4" en el ejemplo):

int main (vacío)
{
extern int func_4 (vacío);

/ * Función de llamada en la dirección de byte 0x4 * /
return func_4 ();
}

y la aplicación se vincule con -Wl, - defsym, func_4 = 0x4. Alternativamente, "func_4"
se puede definir en el script del enlazador.

Manejo de los registros de funciones especiales "RAMPD", "RAMPX", "RAMPY" y "RAMPZ"

Algunos dispositivos AVR admiten memorias mayores que el rango de 64 @ tie {} KiB a las que se puede acceder
con punteros de 16 bits. Para acceder a ubicaciones de memoria fuera de este rango de 64 @ tie {} KiB, el
El contenido de un registro "RAMPA" se utiliza como parte alta de la dirección: La "X", "Y", "Z"
el registro de direcciones está concatenado con la función especial "RAMPX", "RAMPY", "RAMPZ"
registrarse, respectivamente, para obtener una dirección amplia. Del mismo modo, "RAMPD" se utiliza junto con
direccionamiento directo.

* El código de inicio inicializa los registros de función especial "RAMPA" con cero.

* Si un AVR Llamado Dirección Espacios, nombrados dirección espacio que no sea genérico o "__flash" es
utilizado, "RAMPZ" se establece según sea necesario antes de la operación.

* Si el dispositivo admite una RAM superior a 64 @ tie {} KiB y el compilador debe cambiar
"RAMPZ" para realizar una operación, "RAMPZ" se restablece a cero después de la operación.

* Si el dispositivo viene con un registro "RAMP" específico, el prólogo / epílogo de ISR
guarda / restaura ese SFR y lo inicializa con cero en caso de que el código ISR
(implícitamente) utilícelo.

* RAM mayor que 64 @ tie {} KiB no es compatible con GCC para objetivos AVR. Si utiliza
ensamblador en línea para leer desde ubicaciones fuera del rango de direcciones de 16 bits y cambiar
uno de los registros "RAMPA", debe ponerlo a cero después del acceso.

Macros integradas de AVR

GCC define varias macros integradas para que el código de usuario pueda probar la presencia o
ausencia de características. Casi cualquiera de las siguientes macros integradas se deduce del dispositivo
capacidades y, por lo tanto, desencadenado por la -mmcu = opción de línea de comandos.

Para obtener aún más macros integradas específicas de AVR, consulte AVR Llamado Dirección espacios y AVR Incorporado
Clave.

"__AVR_ARCH__"
Macro incorporada que se resuelve en un número decimal que identifica la arquitectura y
depende de -mmcu =mcu opción. Los posibles valores son:

2, 25, 3, 31, 35, 4, 5, 51, 6

para mcu= "avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",

respectivamente y

100, 102, 104, 105, 106, 107

para mcu= "avrtiny", "avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7",
respectivamente. Si mcu especifica un dispositivo, esta macro incorporada se configura en consecuencia. Para
ejemplo, con -mmcu = atmega8 la macro se define en 4.

"__AVR_Dispositivo__"
Fijar -mmcu =dispositivo define esta macro incorporada que refleja el nombre del dispositivo. Para
ejemplo, -mmcu = atmega8 define la macro incorporada "__AVR_ATmega8__", -mmcu = attiny261a
define "__AVR_ATtiny261A__", etc.

Los nombres de las macros integradas siguen el esquema "__AVR_Dispositivo__" donde Dispositivo son los
nombre del dispositivo según el manual del usuario del AVR. La diferencia entre Dispositivo en el incorporado
macro y dispositivo in -mmcu =dispositivo es que este último siempre está en minúsculas.

If dispositivo no es un dispositivo, sino solo una arquitectura central como avr51, esta macro no es
definido.

"__AVR_DEVICE_NAME__"
Fijar -mmcu =dispositivo define esta macro incorporada al nombre del dispositivo. Por ejemplo,
-mmcu = atmega8 la macro se define como "atmega8".

If dispositivo no es un dispositivo, sino solo una arquitectura central como avr51, esta macro no es
definido.

"__AVR_XMEGA__"
El dispositivo / arquitectura pertenece a la familia de dispositivos XMEGA.

"__AVR_HAVE_ELPM__"
El dispositivo tiene la instrucción "ELPM".

"__AVR_HAVE_ELPMX__"
El dispositivo tiene el "ELPM RNueva Zelanda" y "ELPM Rn, Z + " instrucciones.

"__AVR_HAVE_MOVW__"
El dispositivo tiene la instrucción "MOVW" para realizar movimientos de registro-registro de 16 bits.

"__AVR_HAVE_LPMX__"
El dispositivo tiene el "LPM RNueva Zelanda" y "LPM Rn, Z + " instrucciones.

"__AVR_HAVE_MUL__"
El dispositivo tiene un multiplicador de hardware.

"__AVR_HAVE_JMP_CALL__"
El dispositivo tiene las instrucciones "JMP" y "CALL". Este es el caso de los dispositivos con
al menos 16 @ tie {} KiB de memoria de programa.

"__AVR_HAVE_EIJMP_EICALL__"
"__AVR_3_BYTE_PC__"
El dispositivo tiene las instrucciones "EIJMP" y "EICALL". Este es el caso de los dispositivos
con más de 128 @ tie {} KiB de memoria de programa. Esto también significa que el programa
contador (PC) tiene 3 @ tie {} bytes de ancho.

"__AVR_2_BYTE_PC__"
El contador de programa (PC) tiene 2 @ tie {} bytes de ancho. Este es el caso de dispositivos con hasta
128 @ tie {} KiB de memoria de programa.

"__AVR_HAVE_8BIT_SP__"
"__AVR_HAVE_16BIT_SP__"
El registro de puntero de pila (SP) se trata como un registro de 8 bits respectivamente de 16 bits por
el compilador. La definición de estas macros se ve afectada por -mtiny-pila.

"__AVR_HAVE_SPH__"
"__AVR_SP8__"
El dispositivo tiene el registro de función especial SPH (parte alta del puntero de pila) o tiene
un puntero de pila de 8 bits, respectivamente. La definición de estas macros se ve afectada por
-mmcu = y en los casos de -mmcu = avr2 y -mmcu = avr25 también por -msp8.

"__AVR_HAVE_RAMPD__"
"__AVR_HAVE_RAMPX__"
"__AVR_HAVE_RAMPY__"
"__AVR_HAVE_RAMPZ__"
El dispositivo tiene el registro de funciones especiales "RAMPD", "RAMPX", "RAMPY", "RAMPZ",
respectivamente.

"__NO_INTERRUPTS__"
Esta macro refleja la -mno-interrumpe opción de línea de comandos.

"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
Algunos dispositivos AVR (AT90S8515, ATmega103) no deben omitir instrucciones de 32 bits debido a una
errata de hardware. Las instrucciones de salto son "SBRS", "SBRC", "SBIS", "SBIC" y "CPSE".
La segunda macro solo se define si también se establece "__AVR_HAVE_JMP_CALL__".

"__AVR_ISA_RMW__"
El dispositivo tiene instrucciones de lectura-modificación-escritura (XCH, LAC, LAS y LAT).

"__AVR_SFR_OFFSET __ =compensar"
Instrucciones que pueden direccionar registros de funciones especiales de E / S directamente como "IN",
"OUT", "SBI", etc. pueden usar una dirección diferente como si estuviera dirigida por una instrucción a
acceder a RAM como "LD" o "STS". Este desplazamiento depende de la arquitectura del dispositivo y tiene
restar de la dirección RAM para obtener la dirección I / O @ tie {} respectiva.

"__WITH_AVRLIBC__"
El compilador está configurado para usarse junto con AVR-Libc. Ver el --con-avrlibc
opción de configuración.

Aleta negra Opciones

-mcpu =cpu[-señorvisión]
Especifica el nombre del procesador Blackfin de destino. En la actualidad, cpu puede ser uno de
bf512, bf514, bf516, bf518, bf522, bf523, bf524, bf525, bf526, bf527, bf531, bf532,
bf533, bf534, bf536, bf537, bf538, bf539, bf542, bf544, bf547, bf548, bf549, bf542m,
bf544m, bf547m, bf548m, bf549m, bf561, bf592.

La opción señorvisión especifica la revisión de silicio del Blackfin de destino
procesador. Se habilitan todas las soluciones alternativas disponibles para la revisión de silicio de destino.
If señorvisión is ninguna, no se habilitan soluciones alternativas. Si señorvisión is cualquier, todas
las soluciones alternativas para el procesador de destino están habilitadas. La macro "__SILICON_REVISION__"
se define en dos dígitos hexadecimales que representan los números mayor y menor en el
revisión de silicio. Si señorvisión is ninguna, el "__SILICON_REVISION__" no está definido.
If señorvisión is cualquier, "__SILICON_REVISION__" se define como 0xffff. Si esto
opcional señorvisión no se utiliza, GCC asume la última revisión de silicio conocida del
procesador Blackfin específico.

GCC define una macro de preprocesador para el especificado cpu. Para el bfin-elfo cadena de herramientas
esta opción hace que el BSP de hardware proporcionado por libgloss se vincule si -msim is
no dado.

Sin esta opción, bf532 se utiliza como procesador de forma predeterminada.

Tenga en cuenta que el soporte para bf561 está incompleto. Para bf561, solo la macro del preprocesador es
definido.

-msim
Especifica que el programa se ejecutará en el simulador. Esto hace que el simulador
BSP proporcionado por libgloss para vincularse. Esta opción tiene efecto solo para bfin-elfo
cadena de herramientas. Algunas otras opciones, como -mid-biblioteca-compartida y -mfdpic, implicar
-msim.

-puntero-de-marco-de-hoja-de-momia
No mantenga el puntero del marco en un registro para funciones de hoja. Esto evita el
instrucciones para guardar, configurar y restaurar punteros de marco y realiza un registro adicional
disponible en funciones hoja. La opción -fomit-frame-puntero quita el marco
puntero para todas las funciones, lo que podría dificultar la depuración.

-mspecld-anomalía
Cuando está habilitado, el compilador se asegura de que el código generado no contenga
cargas especulativas después de instrucciones de salto. Si se utiliza esta opción,
"__WORKAROUND_SPECULATIVE_LOADS" está definido.

-mno-specld-anomalía
No genere código adicional para evitar que se produzcan cargas especulativas.

-mcsync-anomalía
Cuando está habilitado, el compilador se asegura de que el código generado no contenga CSYNC o
Instrucciones SSYNC demasiado pronto después de las ramas condicionales. Si se utiliza esta opción,
Se define "__WORKAROUND_SPECULATIVE_SYNCS".

-mno-csync-anomalía
No genere código adicional para evitar que las instrucciones CSYNC o SSYNC también ocurran
poco después de una rama condicional.

-mlow-64k
Cuando está habilitado, el compilador es libre de aprovechar el conocimiento de que todo el
El programa encaja en los bajos 64k de memoria.

-mno-bajo-64k
Suponga que el programa es arbitrariamente grande. Este es el predeterminado.

-mstack-verificar-l1
Realice la verificación de la pila utilizando la información colocada en la memoria del bloc de notas L1 por uClinux
núcleo.

-mid-biblioteca-compartida
Genere código que admita bibliotecas compartidas mediante el método de ID de biblioteca. Esto permite
para ejecutar en el lugar y bibliotecas compartidas en un entorno sin memoria virtual
administración. Esta opción implica -fPIC. Con un bfin-elfo objetivo, esta opción implica
-msim.

-mno-id-biblioteca-compartida
Genere código que no asuma que se están utilizando bibliotecas compartidas basadas en ID. Este es
el valor por defecto.

-mleaf-id-biblioteca-compartida
Genere código que admita bibliotecas compartidas a través del método de ID de biblioteca, pero asume
que esta biblioteca o ejecutable no se vinculará con ninguna otra biblioteca compartida de ID.
Eso permite al compilador utilizar un código más rápido para saltos y llamadas.

-mno-leaf-id-biblioteca-compartida
No asuma que el código que se está compilando no se vinculará con ninguna biblioteca compartida de ID.
Se genera un código más lento para las entradas de salto y llamadas.

-id-biblioteca-compartida-ms = n
Especifica el número de identificación de la biblioteca compartida basada en ID que se está compilando.
Especificar un valor de 0 genera un código más compacto; especificando otros valores fuerzas
la asignación de ese número a la biblioteca actual pero no hay más espacio o tiempo
eficiente que omitir esta opción.

-msep-datos
Generar código que permita ubicar el segmento de datos en un área diferente de la memoria.
del segmento de texto. Esto permite ejecutar en el lugar en un entorno sin
gestión de la memoria virtual eliminando las reubicaciones en la sección de texto.

-mno-sep-datos
Genere código que asuma que el segmento de datos sigue al segmento de texto. Este es
el valor por defecto.

-ml-llamadas-largas
-mno-llamadas-largas
Le dice al compilador que realice llamadas a funciones cargando primero la dirección del
funcionar en un registro y luego realizar una llamada de subrutina en este registro. Esta
Se necesita un conmutador si la función de destino se encuentra fuera del rango de direccionamiento de 24 bits de
la versión basada en desplazamiento de la instrucción de llamada de subrutina.

Esta función no está habilitada de forma predeterminada. Especificando -mno-llamadas-largas restaura el
comportamiento por defecto. Tenga en cuenta que estos modificadores no tienen ningún efecto sobre la forma en que el compilador genera
código para manejar llamadas a funciones a través de punteros de función.

-mrápido-fp
Enlace con la biblioteca de punto flotante rápido. Esta biblioteca relaja algunos de los IEEE
Las reglas del estándar de punto flotante para verificar las entradas contra Not-a-Number (NAN), en el
interés de la actuación.

-minline-plt
Habilite la inserción de entradas PLT en llamadas de función a funciones que no se conocen
enlazar localmente. No tiene efecto sin -mfdpic.

-mmultinúcleo
Cree una aplicación independiente para procesadores Blackfin multinúcleo. Esta opción provoca
los archivos de inicio adecuados y los scripts de enlace que admiten multinúcleo que se utilizarán, y define el
macro "__BFIN_MULTICORE". Solo se puede utilizar con -mcpu = bf561[-señorvisión].

Esta opción se puede utilizar con -mcorea or -mcoreb, que selecciona la aplicación única
modelo de programación por núcleo. Sin -mcorea or -mcoreb, la
Se utiliza el modelo de programación de una sola aplicación / doble núcleo. En este modelo, el principal
La función de Core B debe llamarse "coreb_main".

Si no se usa esta opción, se usa el modelo de programación de aplicaciones de un solo núcleo.

-mcorea
Cree una aplicación independiente para Core A de BF561 cuando utilice el programa de una aplicación por
modelo de programación central. Se utilizan archivos de inicio y scripts de enlace adecuados para admitir Core
A, y se define la macro "__BFIN_COREA". Esta opción solo se puede utilizar en
en conjunción con -mmultinúcleo.

-mcoreb
Cree una aplicación independiente para Core B de BF561 cuando utilice el programa de una aplicación por
modelo de programación central. Se utilizan archivos de inicio y scripts de enlace adecuados para admitir Core
B, y se define la macro "__BFIN_COREB". Cuando se utiliza esta opción, "coreb_main"
debe usarse en lugar de "main". Esta opción solo se puede utilizar junto con
-mmultinúcleo.

-msdram
Cree una aplicación independiente para SDRAM. Se utilizan archivos de inicio y scripts de enlace adecuados.
para poner la aplicación en SDRAM, y se define la macro "__BFIN_SDRAM". los
loader debe inicializar SDRAM antes de cargar la aplicación.

-micplb
Suponga que los ICPLB están habilitados en tiempo de ejecución. Esto tiene un efecto sobre cierta anomalía.
soluciones alternativas. Para los destinos de Linux, el valor predeterminado es asumir que los ICPLB están habilitados; por
aplicaciones independientes, el valor predeterminado es desactivado.

C6X Opciones

-march =nombre
Esto especifica el nombre de la arquitectura de destino. GCC usa este nombre para determinar
qué tipo de instrucciones puede emitir al generar código ensamblador. Permisible
Los Nombres son: c62x, c64x, c64x +, c67x, c67x +, c674x.

-mbig-endian
Genere código para un objetivo big-endian.

-mlittle-endian
Genere código para un objetivo little-endian. Este es el predeterminado.

-msim
Elija los archivos de inicio y la secuencia de comandos del vinculador adecuados para el simulador.

-msdata = predeterminado
Coloque pequeños datos globales y estáticos en la sección ".neardata", a la que apunta
registrar "B14". Coloque pequeños datos globales y estáticos no inicializados en la sección ".bss",
que está junto a la sección ".neardata". Ponga pequeños datos de solo lectura en el
sección ".rodata". Las secciones correspondientes que se utilizan para grandes piezas de datos son
".fardata", ".far" y ".const".

-msdata = todos
Coloque todos los datos, no solo los objetos pequeños, en las secciones reservadas para datos pequeños, y
utilice el direccionamiento relativo al registro "B14" para acceder a ellos.

-msdata = ninguno
No utilice las secciones reservadas para pequeños datos y utilice direcciones absolutas para
acceder a todos los datos. Ponga todos los datos globales y estáticos inicializados en el ".fardata"
sección, y todos los datos no inicializados en la sección ".far". Ponga todos los datos constantes en
la sección ".const".

CRIS Opciones

Estas opciones se definen específicamente para los puertos CRIS.

-march =tipo de arquitectura
-mcpu =tipo de arquitectura
Genera código para la arquitectura especificada. Las opciones para tipo de arquitectura en
v3, v8 y v10 para ETRAX 4, ETRAX 100 y ETRAX 100 LX, respectivamente. El valor predeterminado es v0
excepto cris-axis-linux-gnu, donde el valor predeterminado es v10.

-mtune =tipo de arquitectura
Sintonizar tipo de arquitectura todo lo aplicable sobre el código generado, excepto para
el ABI y el conjunto de instrucciones disponibles. Las opciones para tipo de arquitectura en
lo mismo que para -march =tipo de arquitectura.

-mmax-stack-frame =n
Advertir cuando el marco de pila de una función excede n bytes

-metrax4
-metrax100
Las opciones -metrax4 y -metrax100 son sinónimos de -marcha = v3 y -marcha = v8
respectivamente.

-mmul-bug-solución
-mno-mul-bug-solución alternativa
Solucione un error en las instrucciones "muls" y "mulu" para los modelos de CPU donde
se aplica. Esta opción está activa por defecto.

-mpdebug
Habilite la información detallada relacionada con la depuración específica de CRIS en el código ensamblador. Esta
La opción también tiene el efecto de apagar el #NO_APLICACIÓN indicador de código formateado al
ensamblador al comienzo del archivo de ensamblaje.

-mcc-inicio
No utilice resultados de códigos de condición de instrucciones anteriores; siempre emite comparar y
Pruebe las instrucciones antes de usar los códigos de condición.

-mno-efectos-secundarios
No emita instrucciones con efectos secundarios en modos de direccionamiento distintos de los
incremento.

-mstack-alinear
-mno-pila-alinear
-mdata-alinear
-mno-datos-alinear
-mconst-alinear
-mno-const-alinear
Estas opciones (nO- opciones) organizar (eliminar arreglos) para el marco de la pila,
datos individuales y constantes que se alinearán para obtener el tamaño máximo de acceso a datos individuales
para el modelo de CPU elegido. El valor predeterminado es disponer la alineación de 32 bits. ABI
detalles como el diseño de la estructura no se ven afectados por estas opciones.

-m32 bits
-m16 bits
-m8 bits
De forma similar a las opciones de alinear datos y alinear const de arriba, estas opciones se organizan para
el marco de pila, los datos grabables y las constantes deben estar alineados en 32, 16 u 8 bits.
El valor predeterminado es la alineación de 32 bits.

-mno-prólogo-epílogo
-prólogo-epílogo
Con -mno-prólogo-epílogo, el prólogo y epílogo de la función normal que estableció
el marco de la pila se omite y no se reciben instrucciones de retorno o secuencias de retorno
generado en el código. Utilice esta opción solo junto con la inspección visual del
código compilado: no se generan advertencias ni errores cuando los registros de llamadas guardadas deben ser
guardado, o se debe asignar el almacenamiento para las variables locales.

-mno-gotplt
-mgotplt
Con -fpic y -fPIC, no genere (genere) secuencias de instrucciones que carguen
direcciones para funciones de la parte PLT del GOT en lugar de (tradicional en otros
arquitecturas) llamadas al PLT. El valor predeterminado es -mgotplt.

-melf
La opción no operativa heredada solo se reconoce con cris-axis-elf y cris-axis-linux-gnu
objetivos.

-mlinux
La opción no operativa heredada solo se reconoce con el destino cris-axis-linux-gnu.

-sim
Esta opción, reconocida por cris-axis-elf, se arregla para vincularse con input-output
funciones de una biblioteca de simulador. Código, datos inicializados y datos inicializados a cero
se asignan consecutivamente.

-sim2
Me gusta -sim, pero pase las opciones del enlazador para ubicar los datos inicializados en 0x40000000 y cero-
datos inicializados en 0x80000000.

CR16 Opciones

Estas opciones se definen específicamente para los puertos CR16.

-mmac
Habilite el uso de instrucciones de acumulación múltiple. Desactivado por defecto.

-mcr16cplus
-mcr16c
Genere código para la arquitectura CR16C o CR16C +. La arquitectura CR16C + es la predeterminada.

-msim
Vincula la biblioteca libsim.a que es compatible con el simulador. Aplicable a ELF
compilador solamente.

-menta32
Elija el tipo de entero como ancho de 32 bits.

-Opciones-de-mbito
Genera instrucciones "sbit" / "cbit" para manipulaciones de bits.

-mdata-model =modelo
Elija un modelo de datos. Las opciones para modelo en cerca, muchos or mediano . mediano es predeterminado.
Sin embargo, muchos no es válido con -mcr16c, ya que la arquitectura CR16C no es compatible con
modelo de datos lejano.

Darwin Opciones

Estas opciones están definidas para todas las arquitecturas que ejecutan el sistema operativo Darwin.

FSF GCC en Darwin no crea archivos de objeto "gordos"; crea un archivo de objeto para el
arquitectura única que GCC fue construida para apuntar. El GCC de Apple en Darwin crea "grasa"
archivos si son múltiples -arco se utilizan opciones; lo hace ejecutando el compilador o enlazador
varias veces y uniendo los resultados junto con lipo.

El subtipo del archivo creado (como ppc7400 or ppc970 or i686) está determinada por el
banderas que especifican el ISA al que se dirige GCC, como -mcpu or -marcha.
-force_cpusubtipo_ALL La opción se puede utilizar para anular esto.

Las herramientas de Darwin varían en su comportamiento cuando se les presenta un desajuste de ISA. los
ensamblador, as, solo permite el uso de instrucciones que sean válidas para el subtipo de
archivo que está generando, por lo que no puede poner instrucciones de 64 bits en un ppc750 archivo de objeto. los
enlazador para bibliotecas compartidas, / usr / bin / libtool, falla e imprime un error si se le solicita
crear una biblioteca compartida con un subtipo menos restrictivo que sus archivos de entrada (por
ejemplo, tratando de poner un ppc970 archivo de objeto en un ppc7400 Biblioteca). El enlazador para
ejecutables ld, le da al ejecutable el subtipo más restrictivo de cualquiera de sus
archivos de entrada.

-Fdir
Agregar el directorio del marco dir a la cabeza de la lista de directorios que se buscarán
para archivos de encabezado. Estos directorios están intercalados con los especificados por -I
opciones y se escanean en orden de izquierda a derecha.

Un directorio de marcos es un directorio con marcos en él. Un marco es un
directorio con un Cabezales y/o Cabeceras privadas directorio contenido directamente en él que
termina en .estructura. El nombre de un marco es el nombre de este directorio excluyendo
las .estructura. Los encabezados asociados con el marco se encuentran en uno de esos dos
directorios, con Cabezales siendo buscado primero. Una subestructura es un marco
directorio que está en un framework Marcos directorio. Incluye subestructura
los encabezados solo pueden aparecer en un encabezado de un marco que contiene el subtrama, o
en un encabezado de subtrama hermano. Dos subestructura son hermanos si ocurren en el
mismo marco. Una subestructura no debe tener el mismo nombre que una estructura; a
se emite una advertencia si esto se infringe. Actualmente, una subestructura no puede tener
subestructuras; en el futuro, el mecanismo puede ampliarse para respaldar esto. los
Los marcos estándar se pueden encontrar en / System / Library / Frameworks y
/ Library / Frameworks. Un ejemplo de inclusión se parece a "#include ",
donde Marco conceptual denota el nombre del marco y encabezado.h se encuentra en el
Cabeceras privadas or Cabezales directorio.

-marcodir
Me gusta -F excepto que el directorio se trata como un directorio del sistema. La principal diferencia
entre esto -marco y -F es eso con -marco el compilador no advierte
sobre las construcciones contenidas en los archivos de encabezado que se encuentran a través de dir. Esta opcion es valida
solo para la familia de idiomas C.

-dispuesto
Emite información de depuración para los símbolos que se utilizan. Para el formato de depuración de puñaladas,
esto permite -feliminar-símbolos-de-depuración-no utilizados. Esto está activado por defecto.

-glleno
Emite información de depuración para todos los símbolos y tipos.

-mmacosx-versión-min =versión
La primera versión de MacOS X en la que se ejecutará este ejecutable es versión. Típico
valores de versión incluyen 10.1, 10.2 y 10.3.9.

Si el compilador se creó para usar los encabezados del sistema de forma predeterminada, entonces el valor predeterminado para
esta opción es la versión del sistema en la que se está ejecutando el compilador; de lo contrario, el
por defecto es hacer elecciones que sean compatibles con tantos sistemas y bases de código como
posible.

-mkernel
Habilite el modo de desarrollo del kernel. los -mkernel conjuntos de opciones -estático, -fno-común,
-fno-use-cxa-atexit, -fno-excepciones, -fno-no-llamadas-excepciones, -fapple-kext,
-fno-débil y -fno-rtti donde corresponda. Este modo también establece -mno-altivec,
-msoft-flotador, -fno-incorporado y -mrama larga para objetivos PowerPC.

-mone-byte-bool
Anula los valores predeterminados de "bool" para que "sizeof (bool) == 1". Por defecto, "sizeof (bool)"
es 4 cuando se compila para Darwin / PowerPC y 1 cuando se compila para Darwin / x86, por lo que
La opción no tiene ningún efecto en x86.

Advertencia: La -mone-byte-bool El interruptor hace que GCC genere código que no es binario.
compatible con el código generado sin ese interruptor. El uso de este interruptor puede requerir
recompilar todos los demás módulos de un programa, incluidas las bibliotecas del sistema. Utilizar esta
cambie para ajustarse a un modelo de datos no predeterminado.

-mfix-y-continuar
-fijar-y-continuar
-findirect-datos
Genere un código adecuado para un desarrollo de respuesta rápida, como para permitir que GDB
cargar dinámicamente .o archivos en programas que ya se están ejecutando. -findirect-datos y
-fijar-y-continuar se proporcionan para compatibilidad con versiones anteriores.

-todos_cargar
Carga todos los miembros de bibliotecas de archivos estáticos. Ver hombre ld(1) para obtener más información.

-arch_errors_fatales
Provocar que los errores relacionados con archivos que tienen la arquitectura incorrecta sean fatales.

-bind_at_load
Hace que el archivo de salida se marque de tal manera que el enlazador dinámico unirá todos
referencias no definidas cuando se carga o inicia el archivo.

-haz
Genere un archivo de formato de paquete Mach-o. Ver hombre ld(1) para obtener más información.

-cargador_paquete ejecutable
Esta opción especifica el ejecutable que cargará el archivo de salida de la compilación
vinculado. Ver hombre ld(1) para obtener más información.

-lib dinámico
Cuando se pasa esta opción, GCC produce una biblioteca dinámica en lugar de un ejecutable cuando
vinculación, utilizando el Darwin libherramienta mando.

-force_cpusubtipo_ALL
Esto hace que el archivo de salida de GCC tenga la TODAS subtipo, en lugar de uno controlado por
las -mcpu or -marcha .

-cliente_permitido nombre del cliente
-nombre del cliente
-versión_compatibilidad
-versión actual
-trip_dead
-archivo-de-dependencia
-archivo_dylib
-dylinker_nombre_instalación
-dinámica
-lista_símbolos_exportados
-lista de archivos
-espacio_nombre_plano
-force_flat_namespace
-headerpad_max_install_names
-imagen_base
-en eso
-nombre_instalación
-mantener_privado_externos
-multi_módulo
-multiplicar_definido
-multiplicar_definido_no utilizado
-noall_load
-no_dead_strip_inits_and_terms
-nofixpreenlace
-nomultidefs
-noprebind
-noseglinkeditar
-pagezero_size
-previncular
-prebind_all_twolevel_modules
-paquete_privado
-read_only_relocs
-sectalign
-sectoobjetossímbolos
-porque cargar
-seg1dir
-sectacrear
-sectoobjetossímbolos
-sector
-segaddr
-segs_read_only_addr
-segs_read_write_addr
-seg_addr_table
-seg_addr_table_filename
-seglinkeditar
-segprot
-segs_read_only_addr
-segs_read_write_addr
-módulo_único
-estático
-sub_biblioteca
-sub_paraguas
-dosnivel_espacio de nombres
-paraguas
-indefinido
-lista_símbolos_unexportados
-desajustes_de_referencia_débil
-lo que se ha cargado
Estas opciones se pasan al enlazador de Darwin. La página de manual del enlazador de Darwin describe
ellos en detalle.

Diciembre Alpha Opciones

Estas -m Las opciones están definidas para las implementaciones de DEC Alpha:

-mno-blando-flotador
-msoft-flotador
Utilice (no utilice) las instrucciones de hardware de punto flotante para
operaciones. Cuando -msoft-flotador se especifica, funciona en libgcc.a se utilizan para realizar
operaciones de coma flotante. A menos que sean reemplazados por rutinas que emulen el
operaciones de punto flotante, o compiladas de tal manera que llamen a tales emulaciones
rutinas, estas rutinas emiten operaciones de punto flotante. Si está compilando para
un Alpha sin operaciones de punto flotante, debe asegurarse de que la biblioteca esté construida
para no llamarlos.

Tenga en cuenta que las implementaciones Alpha sin operaciones de punto flotante deben tener
registros de coma flotante.

-mfp-reg
-mno-fp-regs
Genere código que use (no use) el conjunto de registros de punto flotante. -mno-fp-regs
implica -msoft-flotador. Si no se utiliza el conjunto de registros de coma flotante,
Los operandos se pasan en registros de enteros como si fueran enteros y de punto flotante
los resultados se pasan en $ 0 en lugar de $ f0. Esta es una secuencia de llamada no estándar, por lo que
cualquier función con un argumento de punto flotante o valor de retorno llamado por código compilado
-mno-fp-regs también debe compilarse con esa opción.

Un uso típico de esta opción es compilar un kernel que no usa y, por lo tanto, necesita
no guardar y restaurar, ningún registro de punto flotante.

-mieee
La arquitectura Alpha implementa hardware de punto flotante optimizado para un máximo
rendimiento. En su mayoría, cumple con el estándar de punto flotante IEEE. Sin embargo,
para el cumplimiento total, se requiere asistencia de software. Esta opción genera código
código totalmente compatible con IEEE excepto que el bandera-inexacta no se mantiene (ver más abajo).
Si esta opción está activada, la macro del preprocesador "_IEEE_FP" se define durante
Compilacion. El código resultante es menos eficiente pero es capaz de soportar correctamente
números desnormalizados y valores IEEE excepcionales como no-un-número y más / menos
infinito. Otros compiladores Alpha llaman a esta opción -ieee_with_no_inexact.

-mieee-con-inexacto
Esto es como -mieee excepto que el código generado también mantiene el IEEE bandera-inexacta.
Activar esta opción hace que el código generado implemente IEEE totalmente compatible
Matemáticas. Además de "_IEEE_FP", "_IEEE_FP_EXACT" se define como una macro de preprocesador.
En algunas implementaciones Alpha, el código resultante puede ejecutarse significativamente más lento que
el código generado por defecto. Dado que hay muy poco código que depende de la
bandera-inexacta, normalmente no debería especificar esta opción. Otros compiladores Alpha llaman
esta opción -ieee_with_inexact.

-mfp-trap-mode =modo trampa
Esta opción controla qué trampas relacionadas con el punto flotante están habilitadas. Otro Alfa
los compiladores llaman a esta opción -fptm modo trampa. El modo de captura se puede configurar en uno de cuatro
valores:

n Ésta es la configuración predeterminada (normal). Las únicas trampas que están habilitadas son las
los que no se pueden desactivar en el software (por ejemplo, división por trampa cero).

u Además de las trampas habilitadas por n, las trampas de desbordamiento también están habilitadas.

su Me gusta u, pero las instrucciones están marcadas para ser seguras para la finalización del software (consulte
Manual de arquitectura Alpha para más detalles).

en Me gusta su, pero las trampas inexactas también están habilitadas.

-mfp-rounding-mode =modo de redondeo
Selecciona el modo de redondeo IEEE. Otros compiladores Alpha llaman a esta opción -fprm
modo de redondeo. modo de redondeo puede ser uno de:

n Modo de redondeo normal IEEE. Los números de coma flotante se redondean hacia el más cercano.
número de máquina o hacia el número de máquina par en caso de empate.

m Redondea hacia menos infinito.

c Modo de redondeo picado. Los números de coma flotante se redondean a cero.

d Modo de redondeo dinámico. Un campo en el registro de control de punto flotante (fpcr, consulte nuestra página,
Manual de referencia de la arquitectura Alpha) controla el modo de redondeo en vigor. La C
biblioteca inicializa este registro para redondear hacia más infinito. Por lo tanto,
a menos que su programa modifique el fpcr, d corresponde a redondear hacia más
infinito.

-mtrap-precisión =trampa de precisión
En la arquitectura Alpha, las trampas de punto flotante son imprecisas. Esto significa sin
asistencia de software es imposible recuperarse de una trampa flotante y un programa
la ejecución normalmente necesita ser terminada. GCC puede generar código que puede ayudar
manipuladores de trampas del sistema operativo para determinar la ubicación exacta que
trampa de punto flotante. Dependiendo de los requisitos de una aplicación, diferentes
se pueden seleccionar niveles de precisión:

p Precisión del programa. Esta opción es la predeterminada y significa que un administrador de trampas solo puede
identificar qué programa provocó una excepción de punto flotante.

f Precisión de la función. El manipulador de trampas puede determinar la función que provocó una
excepción de punto flotante.

i Precisión de instrucción. El manipulador de trampas puede determinar la instrucción exacta que
provocó una excepción de punto flotante.

Otros compiladores Alpha proporcionan las opciones equivalentes llamadas -alcance_seguro y
-resumen_seguro.

-mieee-conforme
Esta opción marca el código generado como conforme a IEEE. No debes usar esta opción
a menos que también especifique -mtrap-precisión = i y también -mfp-trap-mode = su or
-mfp-trap-mode = sui. Su único efecto es emitir la línea .eflag 48 en la función
prólogo del archivo de ensamblaje generado.

-mbuild-constantes
Normalmente, GCC examina una constante entera de 32 o 64 bits para ver si puede construirla.
a partir de constantes más pequeñas en dos o tres instrucciones. Si no puede, genera el
constante como literal y genera código para cargarlo desde el segmento de datos en tiempo de ejecución.

Utilice esta opción para requerir que GCC construya todos constantes enteras usando código, incluso si
se necesitan más instrucciones (el máximo son seis).

Normalmente, utiliza esta opción para crear un cargador dinámico de biblioteca compartida. En sí mismo un
biblioteca compartida, debe reubicarse en la memoria antes de poder encontrar las variables y
constantes en su propio segmento de datos.

-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno-arreglar
-mmáx
-mno-max
Indique si GCC debe generar código para usar BWX, CIX, FIX y MAX opcionales
conjuntos de instrucciones. El valor predeterminado es utilizar los conjuntos de instrucciones admitidos por la CPU.
tipo especificado a través de -mcpu = opción o la de la CPU en la que se construyó GCC si no hay ninguna
especificado.

-mfloat-vax
-mfloat-ieee
Genere código que use (no use) VAX F y G aritmética de punto flotante en su lugar
de IEEE simple y doble precisión.

-relocs-mexplicit
-mno-explícita-relocs
Los ensambladores Alpha más antiguos no proporcionaban ninguna forma de generar reubicaciones de símbolos, excepto a través de
macros de ensamblador. El uso de estas macros no permite una programación óptima de las instrucciones.
GNU binutils a partir de la versión 2.12 admite una nueva sintaxis que permite al compilador
marque explícitamente qué reubicaciones deben aplicarse a qué instrucciones. Esta opcion es
principalmente útil para depurar, ya que GCC detecta las capacidades del ensamblador cuando
está construido y establece el valor predeterminado en consecuencia.

-msmall-datos
-datos-grandes
Cuándo -relocs-mexplicit está en efecto, se accede a los datos estáticos a través de relativo a gp
reubicaciones. Cuando -msmall-datos se utiliza, los objetos de 8 bytes de longitud o menos se colocan en
a chica datos cafe (las secciones ".sdata" y ".sbss") y se accede a través de 16 bits
reubicaciones fuera del registro $ gp. Esto limita el tamaño del área de datos pequeños a
64 KB, pero permite acceder directamente a las variables mediante una única instrucción.

El valor predeterminado es -datos-grandes. Con esta opción, el área de datos se limita a justo debajo
2GB. Los programas que requieren más de 2 GB de datos deben usar "malloc" o "mmap" para
asignar los datos en el montón en lugar de en el segmento de datos del programa.

Al generar código para bibliotecas compartidas, -fpic implica -msmall-datos y -fPIC
implica -datos-grandes.

-mpequeño-texto
-texto-grande
Cuándo -mpequeño-texto se utiliza, el compilador asume que el código de todo el programa
(o biblioteca compartida) cabe en 4 MB y, por lo tanto, es accesible con una instrucción de bifurcación.
Cuándo -msmall-datos se utiliza, el compilador puede asumir que todos los símbolos locales comparten el
mismo valor de $ gp, y así reducir el número de instrucciones requeridas para una función
llamar del 4 al 1.

El valor predeterminado es -texto-grande.

-mcpu =tipo_cpu
Establecer el conjunto de instrucciones y los parámetros de programación de instrucciones para el tipo de máquina
tipo_cpu. Puede especificar el EV el nombre del estilo o el número de ficha correspondiente.
GCC admite parámetros de programación para la familia de procesadores EV4, EV5 y EV6 y
elige los valores predeterminados para el conjunto de instrucciones del procesador que especifique. Si
no especifica un tipo de procesador, GCC toma por defecto el procesador en el que
se construyó el compilador.

Valores admitidos para tipo_cpu en

ev4
ev45
21064
Se programa como EV4 y no tiene extensiones de conjunto de instrucciones.

ev5
21164
Se programa como EV5 y no tiene extensiones de conjunto de instrucciones.

ev56
21164a
Se programa como EV5 y admite la extensión BWX.

pca56
21164pc
21164PC
Se programa como EV5 y es compatible con las extensiones BWX y MAX.

ev6
21264
Se programa como EV6 y admite las extensiones BWX, FIX y MAX.

ev67
21264a
Se programa como EV6 y admite las extensiones BWX, CIX, FIX y MAX.

Las cadenas de herramientas nativas también respaldan el valor nativo, que selecciona la mejor arquitectura
opción para el procesador host. -mcpu = nativo no tiene ningún efecto si GCC no reconoce
el procesador.

-mtune =tipo_cpu
Establezca solo los parámetros de programación de instrucciones para el tipo de máquina tipo_cpu.
el conjunto de instrucciones no se cambia.

Las cadenas de herramientas nativas también respaldan el valor nativo, que selecciona la mejor arquitectura
opción para el procesador host. -mtune = nativo no tiene ningún efecto si GCC no reconoce
el procesador.

-memory-latency =equipo
Establece la latencia que el programador debe asumir para las referencias de memoria típicas como las ve
la aplicación. Este número depende en gran medida de los patrones de acceso a la memoria utilizados.
por la aplicación y el tamaño de la caché externa en la máquina.

Opciones válidas para equipo en

número
Un número decimal que representa los ciclos del reloj.

L1
L2
L3
principal
El compilador contiene estimaciones del número de ciclos de reloj para EV4 y
Hardware EV5 para las cachés de nivel 1, 2 y 3 (también llamado Dcache, Scache y
Bcache), así como a la memoria principal. Tenga en cuenta que L3 solo es válido para EV5.

FR30 Opciones

Estas opciones se definen específicamente para el puerto FR30.

-msmall-modelo
Utilice el modelo de espacio de direcciones pequeño. Esto puede producir un código más pequeño, pero asume
que todos los valores y direcciones simbólicos encajan en un rango de 20 bits.

-mno-lsim
Suponga que se ha proporcionado soporte en tiempo de ejecución y, por lo tanto, no es necesario incluir el
biblioteca del simuladorlibsim.a) en la línea de comando del vinculador.

VIDA Opciones

-mgpr-32
Utilice únicamente los primeros 32 registros de uso general.

-mgpr-64
Utilice los 64 registros de uso general.

-mfpr-32
Utilice solo los primeros 32 registros de coma flotante.

-mfpr-64
Utilice los 64 registros de coma flotante.

-mhard-flotador
Utilice instrucciones de hardware para operaciones de punto flotante.

-msoft-flotador
Utilice rutinas de biblioteca para operaciones de punto flotante.

-malloc-cc
Asignar dinámicamente registros de códigos de condición.

-mfixed-cc
No intente asignar dinámicamente registros de códigos de condición, solo use "icc0" y
"fcc0".

-mdpalabra
Cambie ABI para usar insns de palabras dobles.

-mno-dword
No utilice instrucciones de dos palabras.

-mdoble
Utilice instrucciones dobles de coma flotante.

-mno-doble
No utilice instrucciones dobles de coma flotante.

-medios
Utilice las instrucciones de los medios.

-mno-media
No utilice las instrucciones de los medios.

-mmuladd
Utilice las instrucciones de multiplicar y sumar / restar.

-mno-muladd
No utilice las instrucciones de multiplicar y sumar / restar.

-mfdpic
Seleccione el FDPIC ABI, que utiliza descriptores de función para representar punteros a
funciones. Sin opciones relacionadas con PIC / PIE, implica -fPIE. Con -fpic or
-fpie, asume que las entradas GOT y los datos pequeños están dentro de un rango de 12 bits desde el GOT
dirección base; con -fPIC or -fPIE, Las compensaciones GOT se calculan con 32 bits. Con un
bfin-elfo objetivo, esta opción implica -msim.

-minline-plt
Habilite la inserción de entradas PLT en llamadas de función a funciones que no se conocen
enlazar localmente. No tiene efecto sin -mfdpic. Está habilitado de forma predeterminada si
optimizar la velocidad y compilar para bibliotecas compartidas (es decir, -fPIC or -fpic), o
cuando una opción de optimización como -O3 o superior está presente en la línea de comando.

-mTLS
Suponga un segmento TLS grande al generar código local de subproceso.

-mtl
No asuma un segmento TLS grande al generar código local de subproceso.

-mgprel-ro
Habilite el uso de reubicaciones "GPREL" en el ABI de FDPIC para los datos que se sabe que están en
secciones de solo lectura. Está habilitado de forma predeterminada, excepto para -fpic or -fpie: aunque
puede ayudar a reducir la tabla de compensación global, intercambia 1 instrucción por 4. Con
-fPIC or -fPIE, intercambia 3 instrucciones por 4, una de las cuales puede ser compartida por múltiples
símbolos, y evita la necesidad de una entrada GOT para el símbolo referenciado, por lo que es
más probabilidades de ser una victoria. Si no es, -mno-gprel-ro se puede utilizar para desactivarlo.

-pic-biblioteca-multilib
Enlace con las bibliotecas de imágenes (biblioteca, no FD). Está implícito en -mlibrary-pic, así como
como por -fPIC y -fpic sin -mfdpic. Nunca debería tener que usarlo explícitamente.

-mlinked-fp
Siga el requisito de EABI de crear siempre un puntero de marco cada vez que un marco de pila
está asignado. Esta opción está habilitada de forma predeterminada y se puede deshabilitar con
-mno-vinculado-fp.

-ml-llamadas-largas
Utilice direccionamiento indirecto para llamar a funciones fuera de la unidad de compilación actual. Esta
permite colocar las funciones en cualquier lugar dentro del espacio de direcciones de 32 bits.

-Etiquetas-malignas
Intente alinear las etiquetas con un límite de 8 bytes insertando NOP en el paquete anterior.
Esta opción solo tiene efecto cuando el empaquetado VLIW está habilitado. No crea nuevos
paquetes simplemente agrega NOP a los existentes.

-mlibrary-pic
Genere código EABI independiente de la posición.

-macc-4
Utilice solo los primeros cuatro registros del acumulador de medios.

-macc-8
Utilice los ocho registros del acumulador de medios.

-empaque
Paquete de instrucciones VLIW.

-mno-paquete
No empaque las instrucciones VLIW.

-mno-eflags
No marque los interruptores ABI en e_flags.

segundo movimiento
Habilite el uso de instrucciones de movimiento condicional (predeterminado).

Este modificador es principalmente para depurar el compilador y es probable que se elimine en un
versión futura.

-mno-cond-movimiento
Deshabilite el uso de instrucciones de movimiento condicional.

Este modificador es principalmente para depurar el compilador y es probable que se elimine en un
versión futura.

-mscc
Habilite el uso de instrucciones de conjuntos condicionales (predeterminado).

Este modificador es principalmente para depurar el compilador y es probable que se elimine en un
versión futura.

-mno-scc
Deshabilite el uso de instrucciones de conjuntos condicionales.

Este modificador es principalmente para depurar el compilador y es probable que se elimine en un
versión futura.

-mcond-ejecutivo
Habilite el uso de ejecución condicional (predeterminado).

Este modificador es principalmente para depurar el compilador y es probable que se elimine en un
versión futura.

-mno-cond-exec
Deshabilite el uso de la ejecución condicional.

Este modificador es principalmente para depurar el compilador y es probable que se elimine en un
versión futura.

-mvliw-rama
Ejecute un pase para empaquetar ramas en instrucciones VLIW (predeterminado).

Este modificador es principalmente para depurar el compilador y es probable que se elimine en un
versión futura.

-mno-vliw-rama
No ejecute un pase para empaquetar ramas en las instrucciones de VLIW.

Este modificador es principalmente para depurar el compilador y es probable que se elimine en un
versión futura.

-mmulti-cond-exec
Habilite la optimización de "&&" y "||" en ejecución condicional (predeterminado).

Este modificador es principalmente para depurar el compilador y es probable que se elimine en un
versión futura.

-mno-multi-cond-exec
Deshabilitar la optimización de "&&" y "||" en ejecución condicional.

Este modificador es principalmente para depurar el compilador y es probable que se elimine en un
versión futura.

-mnested-cond-exec
Habilite optimizaciones de ejecución condicional anidadas (predeterminado).

Este modificador es principalmente para depurar el compilador y es probable que se elimine en un
versión futura.

-mno-anidado-cond-exec
Deshabilite las optimizaciones de ejecución condicional anidadas.

Este modificador es principalmente para depurar el compilador y es probable que se elimine en un
versión futura.

-moptimizar-membar
Este modificador elimina las instrucciones "membar" redundantes del código generado por el compilador.
Está habilitado por defecto.

-mno-optimizar-membar
Este conmutador desactiva la eliminación automática de las instrucciones "membar" redundantes del
código generado.

-mtomcat-estadísticas
Haga que el gas imprima las estadísticas de Tomcat.

-mcpu =cpu
Seleccione el tipo de procesador para el que generar código. Los valores posibles son frv, fr550,
gato, fr500, fr450, fr405, fr400, fr300 y simples.

GNU / Linux Opciones

Estas -m las opciones están definidas para los destinos GNU / Linux:

-mglibc
Usa la biblioteca GNU C. Este es el valor predeterminado excepto en * - * - linux- * uclibc * y
* - * - linux- * android * objetivos.

-muclibc
Utilice la biblioteca uClibc C. Este es el predeterminado en * - * - linux- * uclibc * objetivos.

-mbiónico
Utilice la biblioteca Bionic C. Este es el predeterminado en * - * - linux- * android * objetivos.

-mandroide
Compila código compatible con la plataforma Android. Este es el predeterminado en
* - * - linux- * android * objetivos.

Al compilar, esta opción habilita -mbiónico, -fPIC, -fno-excepciones y -fno-rtti by
defecto. Al vincular, esta opción hace que el controlador GCC pase las opciones específicas de Android
al enlazador. Finalmente, esta opción hace que la macro del preprocesador "__ANDROID__" sea
definido.

-tno-android-cc
Deshabilitar los efectos de compilación de -mandroide, es decir, no habilitar -mbiónico, -fPIC,
-fno-excepciones y -fno-rtti por defecto

-tno-android-ld
Deshabilitar efectos de vinculación de -mandroide, es decir, pasar las opciones de vinculación estándar de Linux al
enlazador.

H8 / 300 Opciones

Estas -m Se definen opciones para las implementaciones de H8 / 300:

-relajarse
Acorte algunas referencias de direcciones en el momento del enlace, cuando sea posible; usa la opción del enlazador
-relajarse.

-mh Genere código para el H8 / 300H.

-em Genere código para el H8S.

-Minnesota Genere código para H8S y H8 / 300H en el modo normal. Este interruptor debe usarse
ya sea con -mh or -em.

-ms2600
Genere código para el H8S / 2600. Este interruptor debe usarse con -em.

-mexr
Los registros extendidos se almacenan en la pila antes de la ejecución de la función con el monitor.
atributo. La opción predeterminada es -mexr. Esta opción es válida solo para objetivos H8S.

-mno-exr
Los registros extendidos no se almacenan en la pila antes de la ejecución de la función con el monitor
atributo. La opción predeterminada es -mno-exr. Esta opción es válida solo para objetivos H8S.

-menta32
Haga que los datos "int" sean de 32 bits por defecto.

-maligno-300
En el H8 / 300H y H8S, use las mismas reglas de alineación que para el H8 / 300. El valor por defecto
para H8 / 300H y H8S es alinear longs y flotadores en límites de 4 bytes.
-maligno-300 hace que se alineen en límites de 2 bytes. Esta opción no tiene ningún efecto
en el H8 / 300.

HPPA Opciones

Estas -m Las opciones están definidas para la familia de equipos HPPA:

-march =tipo de arquitectura
Genera código para la arquitectura especificada. Las opciones para tipo de arquitectura en
1.0 para PA 1.0, 1.1 para PA 1.1, y 2.0 para procesadores PA 2.0. Referirse a
/usr/lib/sched.modelos en un sistema HP-UX para determinar la opción de arquitectura adecuada
para su máquina. El código compilado para arquitecturas con números más bajos se ejecuta en
arquitecturas numeradas, pero no al revés.

-mpa-risc-1-0
-mpa-risc-1-1
-mpa-risc-2-0
Sinónimos para -marcha = 1.0, -marcha = 1.1y -marcha = 2.0 respectivamente.

-msalto-en-retraso
Esta opción se ignora y se proporciona solo con fines de compatibilidad.

-mdisable-fpregs
Evite que los registros de punto flotante se utilicen de cualquier manera. Esto es necesario para
compilar núcleos que realizan cambios de contexto perezosos de registros de punto flotante. Si
utiliza esta opción e intenta realizar operaciones de punto flotante, el compilador
aborta.

-mdisable-indexación
Evite que el compilador utilice modos de direcciones de indexación. Esto evita algunos
problemas oscuros al compilar código generado por MIG en MACH.

-mno-espacio-regs
Genere código que asuma que el objetivo no tiene registros de espacio. Esto permite a GCC
Genere llamadas indirectas más rápidas y utilice modos de dirección de índice sin escala.

Este código es adecuado para kernels y sistemas de megafonía de nivel 0.

-mfast-llamadas-indirectas
Genere código que asuma que las llamadas nunca cruzan los límites del espacio. Esto permite a GCC
Emite código que realiza llamadas indirectas más rápidas.

Esta opción no funciona en presencia de bibliotecas compartidas o funciones anidadas.

-mrango-fijo =rango de registro
Genera código tratando el rango de registro dado como registros fijos. Un registro fijo
es uno que el asignador de registros no puede utilizar. Esto es útil al compilar kernel
código. Un rango de registro se especifica como dos registros separados por un guión. Múltiple
los rangos de registro se pueden especificar separados por una coma.

-mtienda-carga-larga
Genere secuencias de carga y almacenamiento de 3 instrucciones como a veces lo requiere HP-UX 10
enlazador. Esto es equivalente al +k opción a los compiladores de HP.

-mportable-runtime
Utilice las convenciones de llamadas portátiles propuestas por HP para los sistemas ELF.

-gas
Habilite el uso de directivas de ensamblador que solo GAS comprenda.

-mschedule =tipo cpu
Código de programación de acuerdo con las limitaciones del tipo de máquina tipo cpu. Las opciones
para tipo cpu en 700 7100, 7100LC, 7200, 7300 y 8000. Referirse a
/usr/lib/sched.modelos en un sistema HP-UX para determinar la opción de programación adecuada para
su máquina. La programación predeterminada es 8000.

-mlinker-optar
Habilite la pasada de optimización en el vinculador HP-UX. Tenga en cuenta que esto hace que la depuración sea simbólica
imposible. También desencadena un error en los enlazadores HP-UX 8 y HP-UX 9 en los que
dar mensajes de error falsos al vincular algunos programas.

-msoft-flotador
Generar una salida que contiene llamadas a las bibliotecas de punto flotante. Advertencia: el requisito
las bibliotecas no están disponibles para todos los destinos HPPA. Normalmente las instalaciones del
Se utiliza el compilador C habitual de la máquina, pero esto no se puede hacer directamente en
Compilacion. Debe hacer sus propios arreglos para proporcionar una biblioteca adecuada
funciones para la compilación cruzada.

-msoft-flotador cambia la convención de llamada en el archivo de salida; por lo tanto, es solo
útil si compilas todos de un programa con esta opción. En particular, necesita
compilar libgcc.a, la biblioteca que viene con GCC, con -msoft-flotador para esto
trabajar.

-msio
Genere el predefinido, "_SIO", para el servidor IO. El valor predeterminado es -mwsio. Esto genera
los predefinidos, "__hp9000s700", "__hp9000s700__" y "_WSIO", para E / S de estación de trabajo.
Estas opciones están disponibles en HP-UX y HI-UX.

-mgnu-ld
Utilice opciones específicas de GNU ld. Esto pasa -compartido a ld al construir un compartido
Biblioteca. Es el valor predeterminado cuando GCC está configurado, explícita o implícitamente, con el
Enlazador GNU. Esta opción no afecta a qué ld se llama; solo cambia lo que
los parámetros se pasan a eso ld. ld que se llama está determinado por el
--con-ld configurar la opción, la ruta de búsqueda del programa de GCC y, finalmente, por el usuario TRAYECTORIA.
El enlazador utilizado por GCC se puede imprimir usando que `ccg -print-prog-name = ld`. Esto
La opción solo está disponible en HP-UX GCC de 64 bits, es decir, configurada con
hppa * 64 * - * - hpux *.

-mhp-ld
Utilice opciones específicas de HP ld. Esto pasa -b a ld al construir una biblioteca compartida
y pasa + Aceptar TipoDiscordancia a ld en todos los enlaces. Es el valor predeterminado cuando GCC es
configurado, explícita o implícitamente, con el vinculador de HP. Esta opción no afecta
que ld se llama; solo cambia los parámetros que se le pasan ld. ld
que se llama está determinado por el --con-ld opción de configuración, búsqueda de programa de GCC
ruta, y finalmente por el usuario TRAYECTORIA. El enlazador utilizado por GCC se puede imprimir usando
que `ccg -print-prog-name = ld`. Esta opción solo está disponible en HP-UX de 64 bits
GCC, es decir, configurado con hppa * 64 * - * - hpux *.

-ml-llamadas-largas
Genere código que use secuencias de llamadas largas. Esto asegura que una llamada siempre pueda
para acceder a los stubs generados por el vinculador. El valor predeterminado es generar llamadas largas solo cuando el
distancia desde el sitio de la llamada hasta el comienzo de la función o unidad de traducción, como
el caso, excede un límite predefinido establecido por el tipo de rama que se está utilizando. los
Los límites para llamadas normales son 7,600,000 y 240,000 bytes, respectivamente para el PA 2.0.
y arquitecturas PA 1.X. Las llamadas al mismo nivel siempre están limitadas a 240,000 bytes.

Las distancias se miden desde el comienzo de las funciones cuando se utiliza el
-secciones-funcionales opción, o cuando se utiliza la -gas y -mno-portátil-tiempo de ejecución opciones
juntos en HP-UX con el enlazador SOM.

Normalmente no es deseable utilizar esta opción ya que degrada el rendimiento. Sin embargo,
Puede ser útil en aplicaciones grandes, particularmente cuando se usa un enlace parcial para
construya la aplicación.

Los tipos de llamadas largas utilizadas dependen de las capacidades del ensamblador y el enlazador,
y el tipo de código que se genera. El impacto en los sistemas que soportan mucho
llamadas absolutas, y las llamadas de diferencia de símbolo de imagen larga o relativas a PC deben ser
relativamente pequeño. Sin embargo, una llamada indirecta se utiliza en sistemas ELF de 32 bits en código de imagen.
y es bastante largo.

-munix =estándar unix
Genere valores predefinidos del compilador y seleccione un archivo de inicio para el estándar UNIX especificado.
Las opciones para estándar unix en 93, 95 y 98. 93 es compatible con todas las versiones de HP-UX.
95 está disponible en HP-UX 10.10 y posteriores. 98 está disponible en HP-UX 11.11 y posteriores.
Los valores predeterminados son 93 para HP-UX 10.00, 95 para HP-UX 10.10 hasta 11.00, y 98
para HP-UX 11.11 y posteriores.

-munix = 93 proporciona los mismos valores predefinidos que GCC 3.3 y 3.4. -munix = 95 proporciona un
predefinidos adicionales para "XOPEN_UNIX" y "_XOPEN_SOURCE_EXTENDED", y el archivo de inicio
unix95.o. -munix = 98 proporciona predefinidos adicionales para "_XOPEN_UNIX",
"_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" y "_INCLUDE_XOPEN_SOURCE_500",
y el archivo de inicio unix98.o.

Es importante para tener en cuenta que esta opción cambia las interfaces para varias bibliotecas
rutinas. También afecta el comportamiento operativo de la biblioteca C. Por lo tanto, extremo
es necesario tener cuidado al utilizar esta opción.

El código de biblioteca que está destinado a funcionar con más de un estándar UNIX debe probarse,
establezca y restaure la variable "__xpg4_extended_mask" según corresponda. La mayoría del software GNU
no proporciona esta capacidad.

-nolibdld
Suprima la generación de opciones de enlace para buscar libdld.sl cuando el -estático opción es
especificado en HP-UX 10 y posteriores.

-estático
La implementación de HP-UX de setlocale en libc depende de libdld.sl. Allí
no es una versión de archivo de libdld.sl. Por lo tanto, cuando el -estático se especifica la opción,
Se necesitan opciones de enlace especiales para resolver esta dependencia.

En HP-UX 10 y versiones posteriores, el controlador GCC agrega las opciones necesarias para vincular
libdld.sl cuando el -estático se especifica la opción. Esto hace que el binario resultante
Sea dinámico. En el puerto de 64 bits, los enlazadores generan binarios dinámicos de forma predeterminada en
cualquier caso. los -nolibdld La opción se puede usar para evitar que el controlador GCC agregue
estas opciones de enlace.

-hilos
Agregue soporte para subprocesos múltiples con el dce o fresa de hueso denso biblioteca en HP-UX. Esta opción
establece indicadores tanto para el preprocesador como para el enlazador.

IA-64 Opciones

Estos son el -m opciones definidas para la arquitectura Intel IA-64.

-mbig-endian
Genere código para un objetivo big-endian. Este es el valor predeterminado para HP-UX.

-mlittle-endian
Genere código para un objetivo little-endian. Este es el valor predeterminado para AIX5 y GNU / Linux.

-mgnu-as
-mno-gnu-as
Genere (o no) código para el ensamblador GNU. Este es el predeterminado.

-mgnu-ld
-mno-gnu-ld
Genere (o no) código para el enlazador GNU. Este es el predeterminado.

-mno-foto
Genere código que no utilice un registro de puntero global. El resultado no es la posición
código independiente, y viola el IA-64 ABI.

-tope-de-ensamblaje-volátil
-mno-volátil-asm-stop
Genere (o no) un bit de parada inmediatamente antes y después de declaraciones ASM volátiles.

-mregistrar-nombres
-mno-nombres-de-registro
Generar (o no) in, locy salir nombres de registro para los registros apilados. Esta
puede hacer que la salida del ensamblador sea más legible.

-mno-sdatos
-msdatos
Deshabilite (o habilite) las optimizaciones que utilizan la sección de datos pequeños. Esto puede ser útil
para solucionar los errores del optimizador.

-mconstante-gp
Genere código que utilice un único valor de puntero global constante. Esto es útil cuando
compilar el código del kernel.

-mauto-pic
Genere código auto-reubicable. Esto implica -mconstante-gp. Esto es útil
al compilar el código de firmware.

-minline-float-divide-min-latencia
Genere código para divisiones en línea de valores de punto flotante utilizando la latencia mínima
algoritmo.

-minline-float-divide-max-rendimiento
Genere código para divisiones en línea de valores de punto flotante utilizando el rendimiento máximo
algoritmo.

-mno-inline-float-división
No genere código en línea para divisiones de valores de punto flotante.

-minline-int-divide-min-latencia
Genere código para divisiones en línea de valores enteros usando la latencia mínima
algoritmo.

-minline-int-divide-max-rendimiento
Genere código para divisiones en línea de valores enteros utilizando el rendimiento máximo
algoritmo.

-mno-en línea-int-dividir
No genere código en línea para divisiones de valores enteros.

-minline-sqrt-min-latencia
Genere código para raíces cuadradas en línea utilizando el algoritmo de latencia mínima.

-minline-sqrt-max-rendimiento
Genere código para raíces cuadradas en línea utilizando el algoritmo de rendimiento máximo.

-mno-en línea-sqrt
No genere código en línea para "sqrt".

-confundido-loco
-mno-fusionado-madd
No genere (no) código que use la combinación de multiplicar / sumar o multiplicar / restar
instrucciones. El valor predeterminado es utilizar estas instrucciones.

-mno-dwarf2-asm
-mdwarf2-asm
No genere (o haga) código ensamblador para la información de depuración del número de línea DWARF 2.
Esto puede resultar útil cuando no se utiliza el ensamblador GNU.

-primera-parada-bits
-mno-bits-de-parada-anticipada
Permitir que los bits de parada se coloquen antes que inmediatamente antes de la instrucción que
activó el bit de parada. Esto puede mejorar la programación de la instrucción, pero no siempre
hacerlo.

-mrango-fijo =rango de registro
Genera código tratando el rango de registro dado como registros fijos. Un registro fijo
es uno que el asignador de registros no puede utilizar. Esto es útil al compilar kernel
código. Un rango de registro se especifica como dos registros separados por un guión. Múltiple
los rangos de registro se pueden especificar separados por una coma.

-mtls-size =tamaño tls
Especifique el tamaño de bit de las compensaciones de TLS inmediatas. Los valores válidos son 14, 22 y 64.

-mtune =tipo cpu
Ajuste la programación de instrucciones para una CPU en particular, los valores válidos son Itanium,
itanio1, merced, itanio2y McKinley.

-milp32
-mlp64
Genere código para un entorno de 32 bits o 64 bits. El entorno de 32 bits establece int,
de largo y puntero a 32 bits. El entorno de 64 bits establece int en 32 bits y long y
puntero a 64 bits. Estos son indicadores específicos de HP-UX.

-mno-sched-br-data-spec
-msched-br-data-spec
(Dis / En) programación especulativa de datos capaz antes de recargar. Esto da como resultado la generación de
Instrucciones "ld.a" y las correspondientes instrucciones de verificación ("ld.c" / "chk.a"). los
el valor predeterminado es 'deshabilitar'.

-msched-ar-especificaciones-de-datos
-mno-sched-ar-data-spec
Programación especulativa de datos (habilitado / deshabilitado) después de la recarga. Esto da como resultado la generación de
Instrucciones "ld.a" y las correspondientes instrucciones de verificación ("ld.c" / "chk.a"). los
el valor predeterminado es 'habilitar'.

-mno-programado-control-spec
-msched-control-especificación
(Dis / En) capaz de controlar la programación especulativa. Esta función está disponible solo durante
programación de la región (es decir, antes de la recarga). Esto da como resultado la generación de "ld.s"
instrucciones y las correspondientes instrucciones de verificación "chk.s". El valor predeterminado es
'desactivar'.

-msched-br-en-especificaciones de datos
-mno-sched-br-en-especificaciones-de-datos
(En / Des) programar la programación especulativa de las instrucciones que dependen de los datos
cargas especulativas antes de recargar. Esto es efectivo solo con -msched-br-data-spec
activado. El valor predeterminado es 'habilitar'.

-msched-ar-en-especificaciones-de-datos
-mno-sched-ar-en-especificaciones-de-datos
(En / Des) programar la programación especulativa de las instrucciones que dependen de los datos
cargas especulativas después de la recarga. Esto es efectivo solo con -msched-ar-especificaciones-de-datos
activado. El valor predeterminado es 'habilitar'.

-msched-en-control-spec
-mno-programado-en-control-spec
(En / Des) capaz la programación especulativa de las instrucciones que dependen de la
controlar las cargas especulativas. Esto es efectivo solo con -msched-control-especificación habilitado
El valor predeterminado es 'habilitar'.

-mno-sched-prefiere-insns-sin-especificaciones-de-datos
-msched-prefiere-insns-de-especificaciones-sin-datos
Si está habilitado, las instrucciones especulativas de datos se eligen para la programación solo si no hay
otras opciones en este momento. Esto hace que el uso de la especulación de datos sea mucho más
conservador. El valor predeterminado es "deshabilitar".

-mno-sched-prefiere-sin-control-spec-insns
-msched-prefiere-sin-control-spec-insns
Si está habilitado, las instrucciones de control-especulativo se eligen para el cronograma solo si hay
no hay otras opciones en este momento. Esto hace que el uso de la especulación de control sea mucho
más conservador. El valor predeterminado es "deshabilitar".

-mno-sched-count-spec-en-ruta-crítica
-msched-count-spec-en-ruta-crítica
Si está habilitado, las dependencias especulativas se consideran durante el cálculo de la
prioridades de instrucciones. Esto hace que el uso de la especulación sea un poco más
conservador. El valor predeterminado es "deshabilitar".

-msched-spec-ldc
Utilice una simple verificación de especulación de datos. Esta opción está activada de forma predeterminada.

-msched-control-especificaciones-ldc
Utilice un cheque simple para controlar la especulación. Esta opción está activada de forma predeterminada.

-msched-stop-bits-después-de-cada-ciclo
Coloque un bit de parada después de cada ciclo al programar. Esta opción está activada de forma predeterminada.

-msched-fp-mem-deps-coste cero
Suponga que no es probable que los almacenes y cargas de punto flotante causen un conflicto cuando
colocados en el mismo grupo de instrucción. Esta opción está deshabilitada de forma predeterminada.

-msel-programado-no-verificar-control-spec
Generar cheques para controlar la especulación en la programación selectiva. Esta bandera es
desactivado por defecto.

-msched-max-memory-insns =max-insns
Limitar el número de entradas de memoria por grupo de instrucciones, dando menor prioridad a
insns de memoria posteriores que intentan programar en el mismo grupo de instrucción.
Suele ser útil para evitar conflictos con los bancos de caché. El valor predeterminado es 1.

-msched-max-memoria-insns-límite-duro
Hace el límite especificado por msched-max-memoria-insns un límite duro, rechazando más
que ese número en un grupo de instrucción. De lo contrario, el límite es "suave", es decir
que se prefieren las operaciones sin memoria cuando se alcanza el límite, pero la memoria
las operaciones aún pueden estar programadas.

LM32 Opciones

Estas -m Las opciones están definidas para la arquitectura LatticeMico32:

-Tambor de barra-habilitado
Habilite las instrucciones de cambio de barril.

-mdivide habilitado
Habilite las instrucciones de división y módulo.

-multiplicado
Habilite las instrucciones de multiplicación.

-msign-extender-habilitado
Habilite las instrucciones de extensión de la señal.

-muser-habilitado
Habilite las instrucciones definidas por el usuario.

M32C Opciones

-mcpu =nombre
Seleccione la CPU para la que se genera el código. nombre puede ser uno de r8c para el R8C / Tiny
serie, m16c para la serie M16C (hasta / 60), m32cm para la serie M16C / 80, o m32c
para la serie M32C / 80.

-msim
Especifica que el programa se ejecutará en el simulador. Esto provoca una alternativa
biblioteca en tiempo de ejecución que se vinculará en la que admite, por ejemplo, E / S de archivos. No debes
use esta opción cuando genere programas que se ejecutarán en hardware real; usted debe
proporcione su propia biblioteca de tiempo de ejecución para las funciones de E / S necesarias.

-memregs =número
Especifica el número de pseudo-registros basados ​​en memoria que GCC utiliza durante la generación de código.
Estos pseudo-registros se utilizan como registros reales, por lo que existe una compensación entre
La capacidad de GCC para ajustar el código en los registros disponibles y la penalización de rendimiento de
usando memoria en lugar de registros. Tenga en cuenta que todos los módulos de un programa deben
compilado con el mismo valor para esta opción. Por eso, no debes usar este
opción con las bibliotecas de tiempo de ejecución predeterminadas de GCC.

M32R / D Opciones

Estas -m Las opciones están definidas para las arquitecturas Renesas M32R / D:

-m32r2
Genere código para el M32R / 2.

-m32rx
Genere código para el M32R / X.

-m32r
Genere código para el M32R. Este es el predeterminado.

-mmodel = pequeño
Suponga que todos los objetos viven en los 16 MB inferiores de memoria (para que sus direcciones
cargado con la instrucción "ld24"), y suponga que todas las subrutinas son accesibles con el
instrucción "bl". Este es el predeterminado.

La direccionabilidad de un objeto en particular se puede establecer con el atributo "modelo".

-mmodel = medio
Suponga que los objetos pueden estar en cualquier lugar del espacio de direcciones de 32 bits (el compilador genera
instrucciones "seth / add3" para cargar sus direcciones) y asumir que todas las subrutinas son
accesible con la instrucción "bl".

-mmodel = grande
Suponga que los objetos pueden estar en cualquier lugar del espacio de direcciones de 32 bits (el compilador genera
"seth / add3" para cargar sus direcciones), y asumir que las subrutinas pueden no ser
alcanzable con la instrucción "bl" (el compilador genera el mucho más lento
secuencia de instrucciones "seth / add3 / jl").

-msdata = ninguno
Desactive el uso del área de datos pequeños. Las variables se colocan en ".data", ".bss" o
".rodata" (a menos que se haya especificado el atributo "sección"). Este es el predeterminado.

El área de datos pequeña consta de las secciones ".sdata" y ".sbss". Los objetos pueden ser
poner explícitamente en el área de datos pequeños con el atributo "sección" usando uno de estos
.

-msdata = sdata
Coloque pequeños datos globales y estáticos en el área de datos pequeños, pero no genere datos especiales.
código para hacer referencia a ellos.

-msdata = usar
Coloque pequeños datos globales y estáticos en el área de datos pequeños y genere
instrucciones para hacer referencia a ellos.

-G número
Ponga objetos globales y estáticos menores o iguales a número bytes en los datos pequeños o
Secciones BSS en lugar de las secciones normales de datos o BSS. El valor predeterminado de número is
8. los -msdatos La opción debe establecerse en una de datos or utilizan el para que esta opción tenga alguna
efecto.

Todos los módulos deben compilarse con el mismo -G número valor. Compilando con diferentes
valores de número puede o no puede funcionar; si no lo hace, el enlazador da un error
mensaje --- no se genera código incorrecto.

-mdebug
Hace que el código específico de M32R en el compilador muestre algunas estadísticas que pueden ayudar
en programas de depuración.

-malign-bucles
Alinee todos los bucles a un límite de 32 bytes.

-mno-alinear-bucles
No aplique una alineación de 32 bytes para bucles. Este es el predeterminado.

-tasa-de-missue =número
Inconveniente número instrucciones por ciclo. número solo puede ser 1 o 2.

-costo-de-rama =número
número solo puede ser 1 o 2. Si es 1, se prefieren las ramas sobre las condicionales
código, si es 2, se aplica lo contrario.

-mflush-trap =número
Especifica el número de trampa que se utilizará para vaciar la caché. El valor predeterminado es 12. Válido
los números están entre 0 y 15 inclusive.

-mno-trampa-rasante
Especifica que la caché no se puede vaciar utilizando una trampa.

-mflush-func =nombre
Especifica el nombre de la función del sistema operativo a la que se debe llamar para vaciar la memoria caché. los
por defecto es _flush_cache, pero una llamada a función solo se usa si no hay una trampa disponible.

-mno-flush-función
Indica que no hay ninguna función del sistema operativo para vaciar la caché.

M680x0 Opciones

Estos son el -m opciones definidas para procesadores M680x0 y ColdFire. La configuración predeterminada
dependen de qué arquitectura se seleccionó cuando se configuró el compilador; los valores predeterminados
para las opciones más comunes se dan a continuación.

-march =arco
Genere código para una arquitectura de conjunto de instrucciones M680x0 o ColdFire específica.
Valores permitidos de arco para arquitecturas M680x0 son: 68000, 68010, 68020, 68030,
68040, 68060 y cpu32. Las arquitecturas ColdFire se seleccionan de acuerdo con las
La clasificación ISA y los valores permitidos son: isaa, isaaplus, Isabel y Isaac.

GCC define una macro "__mcfarco__" siempre que esté generando código para un ColdFire
objetivo. El arco en esta macro es uno de los -marcha argumentos dados anteriormente.

Cuando se usan juntos, -marcha y -mtune seleccione el código que se ejecuta en una familia de similares
procesadores pero que está optimizado para una microarquitectura particular.

-mcpu =cpu
Genere código para un procesador M680x0 o ColdFire específico. El M680x0 cpus son:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 y cpu32. El ColdFire cpus
se dan en la siguiente tabla, que también clasifica las CPU en familias:

Familia : -mcpu argumentos
51 : 51 51ac 51ag 51cn 51em 51je 51jf 51jg 51jm 51 mm 51 qe 51qm
5206 : 5202 5204 5206
5206e : 5206e
5208 : 5207 5208
5211a : 5210a 5211a
5213 : 5211 5212 5213
5216 : 5214 5216
52235 : 52230 52231 52232 52233 52234 52235
5225 : 5224 5225
52259 : 52252 52254 52255 52256 52258 52259
5235 : 5232 5233 5234 5235 523x
5249 : 5249
5250 : 5250
5271 : 5270 5271
5272 : 5272
5275 : 5274 5275
5282 : 5280 5281 5282 528x
53017 : 53011 53012 53013 53014 53015 53016 53017
5307 : 5307
5329 : 5327 5328 5329 532x
5373 : 5372 5373 537x
5407 : 5407
5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485

-mcpu =cpu anula -march =arco if arco es compatible con cpu. Otras combinaciones de
-mcpu y -marcha son rechazados.

GCC define la macro "__mcf_cpu_UPC" cuando el objetivo de ColdFire cpu está seleccionado. También
define "__mcf_family_familia", donde el valor de familia viene dado por la tabla de arriba.

-mtune =melodía
Ajuste el código para una microarquitectura particular dentro de las restricciones establecidas por -marcha
y -mcpu. Las microarquitecturas M680x0 son: 68000, 68010, 68020, 68030, 68040,
68060 y cpu32. Las microarquitecturas ColdFire son: cfv1, cfv2, cfv3, cfv4 y
cfv4e.

También puedes usar -mtune = 68020-40 para el código que necesita ejecutarse relativamente bien en 68020,
Objetivos 68030 y 68040. -mtune = 68020-60 es similar pero incluye 68060 objetivos como
bien. Estas dos opciones seleccionan las mismas decisiones de ajuste que -m68020-40 y -m68020-60
respectivamente.

GCC define las macros "__mcarco" y "__mcarco__" al ajustar la arquitectura 680x0
arco. También define "mcarco" a menos que cualquiera -ansi o un no GNU -estándar se utiliza la opción.
Si GCC se está adaptando a una variedad de arquitecturas, según lo seleccionado por -mtune = 68020-40 or
-mtune = 68020-60, define las macros para cada arquitectura en el rango.

GCC también define la macro "__muarca__" al sintonizar la microarquitectura ColdFire
uarca, Donde uarca es uno de los argumentos dados anteriormente.

-m68000
-mc68000
Generar salida para un 68000. Este es el valor predeterminado cuando el compilador está configurado para
Sistemas basados ​​en 68000. Es equivalente a -marcha = 68000.

Utilice esta opción para microcontroladores con un núcleo 68000 o EC000, incluido el 68008,
68302, 68306, 68307, 68322, 68328 y 68356.

-m68010
Generar salida para un 68010. Este es el valor predeterminado cuando el compilador está configurado para
Sistemas basados ​​en 68010. Es equivalente a -marcha = 68010.

-m68020
-mc68020
Generar salida para un 68020. Este es el valor predeterminado cuando el compilador está configurado para
Sistemas basados ​​en 68020. Es equivalente a -marcha = 68020.

-m68030
Generar salida para un 68030. Este es el valor predeterminado cuando el compilador está configurado para
Sistemas basados ​​en 68030. Es equivalente a -marcha = 68030.

-m68040
Generar salida para un 68040. Este es el valor predeterminado cuando el compilador está configurado para
Sistemas basados ​​en 68040. Es equivalente a -marcha = 68040.

Esta opción inhibe el uso de instrucciones 68881/68882 que deben ser emuladas por
software en el 68040. Utilice esta opción si su 68040 no tiene código para emular
esas instrucciones.

-m68060
Generar salida para un 68060. Este es el valor predeterminado cuando el compilador está configurado para
Sistemas basados ​​en 68060. Es equivalente a -marcha = 68060.

Esta opción inhibe el uso de instrucciones 68020 y 68881/68882 que deben ser
emulado por software en el 68060. Utilice esta opción si su 68060 no tiene código
para emular esas instrucciones.

-mcpu32
Genere salida para un CPU32. Este es el valor predeterminado cuando el compilador está configurado para
Sistemas basados ​​en CPU32. Es equivalente a -march = cpu32.

Utilice esta opción para microcontroladores con un núcleo CPU32 o CPU32 +, incluido el 68330,
68331, 68332, 68333, 68334, 68336, 68340, 68341, 68349 y 68360.

-m5200
Genere salida para una CPU 520X ColdFire. Este es el valor predeterminado cuando el compilador es
configurado para sistemas basados ​​en 520X. Es equivalente a -mcpu = 5206, y es ahora
desaprobado a favor de esa opción.

Utilice esta opción para microcontroladores con un núcleo 5200, incluidos MCF5202, MCF5203,
MCF5204 y MCF5206.

-m5206e
Genere salida para una CPU 5206e ColdFire. La opción ahora está obsoleta a favor de
el equivalente -mcpu = 5206e.

-m528x
Genere resultados para un miembro de la familia ColdFire 528X. La opcion es ahora
desaprobado a favor del equivalente -mcpu = 528x.

-m5307
Genere salida para una CPU ColdFire 5307. La opción ahora está obsoleta a favor de la
equivalente -mcpu = 5307.

-m5407
Genere salida para una CPU ColdFire 5407. La opción ahora está obsoleta a favor de la
equivalente -mcpu = 5407.

-mcfv4e
Genere salida para una CPU de la familia ColdFire V4e (por ejemplo, 547x / 548x). Esto incluye el uso de
instrucciones de hardware de punto flotante. La opción es equivalente a -mcpu = 547x, y es
ahora en desuso a favor de esa opción.

-m68020-40
Genere salida para un 68040, sin usar ninguna de las nuevas instrucciones. Esto resulta
en un código que se puede ejecutar de manera relativamente eficiente en un 68020/68881 o un 68030 o un
68040. El código generado utiliza las instrucciones 68881 que se emulan en el
68040.

La opción es equivalente a -marcha = 68020 -mtune = 68020-40.

-m68020-60
Genere salida para un 68060, sin usar ninguna de las nuevas instrucciones. Esto resulta
en un código que se puede ejecutar de manera relativamente eficiente en un 68020/68881 o un 68030 o un
68040. El código generado utiliza las instrucciones 68881 que se emulan en el
68060.

La opción es equivalente a -marcha = 68020 -mtune = 68020-60.

-mhard-flotador
-m68881
Genere instrucciones de punto flotante. Este es el valor predeterminado para 68020 y superior, y
para dispositivos ColdFire que tienen una FPU. Define la macro "__HAVE_68881__" en
Objetivos M680x0 y "__mcffpu__" en objetivos ColdFire.

-msoft-flotador
No genere instrucciones de punto flotante; utilice llamadas de biblioteca en su lugar. Este es el
predeterminado para los destinos 68000, 68010 y 68832. También es el predeterminado para ColdFire.
dispositivos que no tienen FPU.

-mdiv
-mno-div
Genere (no genere) instrucciones de división y resto de hardware ColdFire. Si
-marcha se usa sin -mcpu, el valor predeterminado es "activado" para las arquitecturas ColdFire y "desactivado"
para arquitecturas M680x0. De lo contrario, el valor predeterminado se toma de la CPU de destino (ya sea
la CPU predeterminada, o la especificada por -mcpu). Por ejemplo, el valor predeterminado es "desactivado".
para -mcpu = 5206 y "encendido" para -mcpu = 5206e.

GCC define la macro "__mcfhwdiv__" cuando esta opción está habilitada.

-más corto
Considere que el tipo "int" tiene 16 bits de ancho, como "short int". Además, los parámetros
pasados ​​en la pila también se alinean con un límite de 16 bits incluso en objetivos cuya API
manda la promoción a 32 bits.

-mno-corto
No considere que el tipo "int" tenga 16 bits de ancho. Este es el predeterminado.

-mnobitfield
-mno-campo de bits
No utilice las instrucciones de campo de bits. los -m68000, -mcpu32 y -m5200 las opciones implican
-mnobitfield.

-mbitcampo
Utilice las instrucciones de campo de bits. los -m68020 la opción implica -mbitcampo. Es
el predeterminado si utiliza una configuración diseñada para un 68020.

-mrtd
Utilice una convención de llamada de función diferente, en la que las funciones que toman un
el número de argumentos regresa con la instrucción "rtd", que muestra sus argumentos
mientras regresa. Esto guarda una instrucción en la persona que llama, ya que no es necesario
pop los argumentos allí.

Esta convención de llamada es incompatible con la que se usa normalmente en Unix, por lo que
no puede usarlo si necesita llamar a bibliotecas compiladas con el compilador de Unix.

Además, debe proporcionar prototipos de funciones para todas las funciones que toman variables
número de argumentos (incluido "printf"); de lo contrario, se genera un código incorrecto para
llamadas a esas funciones.

Además, el código resulta muy incorrecto si llama a una función con demasiados
argumentos. (Normalmente, los argumentos adicionales se ignoran inofensivamente).

La instrucción "rtd" es compatible con 68010, 68020, 68030, 68040, 68060 y CPU32
procesadores, pero no por el 68000 o el 5200.

-mno-rtd
No utilice las convenciones de llamada seleccionadas por -mrtd. Este es el predeterminado.

-maligno-int
-mno-alinear-int
Controla si GCC alinea "int", "long", "long long", "float", "double" y "long
variables dobles "en un límite de 32 bits (-maligno-int) o un límite de 16 bits
(-mno-alinear-int). Alinear variables en límites de 32 bits produce código que se ejecuta
algo más rápido en procesadores con buses de 32 bits a expensas de más memoria.

Advertencia: si usas el -maligno-int switch, GCC alinea las estructuras que contienen lo anterior
tipos diferentes a la mayoría de las especificaciones de interfaz binaria de aplicaciones publicadas para
el m68k.

-mpcrel
Utilice el modo de direccionamiento relativo a PC del 68000 directamente, en lugar de utilizar un
tabla de compensación. En la actualidad, esta opción implica -fpic, permitiendo como máximo un desplazamiento de 16 bits
para direccionamiento relativo a PC. -fPIC actualmente no es compatible con -mpcrel, aunque
esto podría ser compatible con los procesadores 68020 y superiores.

-mno-estricto-alinear
-mstrict-alineación
No asuma (asuma) que el sistema maneja las referencias de memoria no alineadas.

-msep-datos
Generar código que permita ubicar el segmento de datos en un área diferente de la memoria.
del segmento de texto. Esto permite la ejecución in situ en un entorno sin
gestión de memoria virtual. Esta opción implica -fPIC.

-mno-sep-datos
Genere código que asuma que el segmento de datos sigue al segmento de texto. Este es
el valor por defecto.

-mid-biblioteca-compartida
Genere código que admita bibliotecas compartidas mediante el método de ID de biblioteca. Esto permite
para bibliotecas de ejecución in situ y compartidas en un entorno sin memoria virtual
administración. Esta opción implica -fPIC.

-mno-id-biblioteca-compartida
Genere código que no asuma que se están utilizando bibliotecas compartidas basadas en ID. Este es
el valor por defecto.

-id-biblioteca-compartida-ms = n
Especifica el número de identificación de la biblioteca compartida basada en ID que se está compilando.
Especificar un valor de 0 genera un código más compacto; especificando otros valores fuerzas
la asignación de ese número a la biblioteca actual, pero no hay más espacio o tiempo
eficiente que omitir esta opción.

-mxgot
-mno-xgot
Al generar código independiente de la posición para ColdFire, genere código que funcione si
el GOT tiene más de 8192 entradas. Este código es más grande y más lento que el código.
generado sin esta opción. En los procesadores M680x0, esta opción no es necesaria; -fPIC
es suficiente

GCC normalmente usa una sola instrucción para cargar valores desde GOT. Mientras esto es
relativamente eficiente, solo funciona si el GOT es menor que aproximadamente 64k. Cualquier cosa
más grande hace que el vinculador informe un error como:

reubicación truncada para encajar: R_68K_GOT16O foobar

Si esto sucede, debe volver a compilar su código con -mxgot. Entonces debería funcionar con
GOT muy grandes. Sin embargo, el código generado con -mxgot es menos eficiente, ya que
se necesitan 4 instrucciones para obtener el valor de un símbolo global.

Tenga en cuenta que algunos enlazadores, incluidas las versiones más recientes del enlazador GNU, pueden crear
múltiples GOT y clasifique las entradas GOT. Si tiene un enlazador de este tipo, solo debería necesitar
que se utilizará -mxgot al compilar un archivo de objeto único que accede a más de 8192 GOT
entradas. Muy pocos lo hacen.

Estas opciones no tienen ningún efecto a menos que GCC esté generando código independiente de la posición.

MCore Opciones

Estos son el -m opciones definidas para los procesadores Motorola M * Core.

-m hardlit
-mno-iluminado
Constantes en línea en el flujo de código si se puede hacer en dos instrucciones o menos.

-mdiv
-mno-div
Utilice la instrucción de división. (Habilitado de forma predeterminada).

-mrelax-inmediato
-mno-relax-inmediato
Permitir inmediatos de tamaño arbitrario en operaciones de bits.

campos de bits de ancho
-mno-campos-de-bits anchos
Trate siempre los campos de bits como de tamaño "int".

-m4byte-funciones
-mno-4byte-funciones
Obligue a que todas las funciones estén alineadas con un límite de 4 bytes.

-mcallgraph-datos
-mno-callgraph-datos
Emite información de gráfico de llamadas.

-mslow-bytes
-mno-bytes-lentos
Prefiere el acceso a palabras al leer cantidades de bytes.

-mlittle-endian
-mbig-endian
Genere código para un objetivo little-endian.

-m210
-m340
Genere código para el procesador 210.

-mno-lsim
Suponga que se ha proporcionado soporte en tiempo de ejecución y, por lo tanto, omita la biblioteca del simulador.
(libsim.a) desde la línea de comandos del vinculador.

-mstack-increment =tamaño
Establezca la cantidad máxima para una operación de incremento de una sola pila. Los valores grandes pueden
aumentar la velocidad de los programas que contienen funciones que necesitan una gran cantidad de
espacio de la pila, pero también pueden desencadenar una falla de segmentación si la pila se extiende
demasiado. El valor predeterminado es 0x1000.

diputado Opciones

-mabsdiff
Habilita la instrucción "abs", que es la diferencia absoluta entre dos registros.

-opts-centro comercial
Habilita todas las instrucciones opcionales --- promediar, multiplicar, dividir, operaciones de bits,
cero a la izquierda, diferencia absoluta, min / max, clip y saturación.

-medio
Habilita la instrucción "ave", que calcula el promedio de dos registros.

-basado =n
Variables de tamaño n bytes o menos se colocan en la sección ".based" de forma predeterminada.
Las variables basadas utilizan el registro $ tp como registro base, y hay un límite de 128 bytes
a la sección ".based".

-mbitops
Habilita las instrucciones de operación de bit --- prueba de bit ("btstm"), set ("bsetm"), clear
("bclrm"), invertir ("bnotm") y probar y configurar ("tas").

-mc =nombre
Selecciona en qué sección se colocan los datos constantes. nombre puede ser poquito, cercao muchos.

-mclip
Habilita la instrucción "clip". Tenga en cuenta que -mclip no es útil a menos que también
proporcionar -mminmax.

-mconfig =nombre
Selecciona una de las configuraciones centrales integradas. Cada chip MeP tiene uno o más
módulos en él; cada módulo tiene una CPU central y una variedad de coprocesadores, opcional
instrucciones y periféricos. La herramienta "MeP-Integrator", que no forma parte de GCC, proporciona
estas configuraciones a través de esta opción; usar esta opción es lo mismo que usar todas
las opciones de línea de comandos correspondientes. La configuración predeterminada es tu préstamo estudiantil.

-mccop
Habilita las instrucciones del coprocesador. De forma predeterminada, este es un coprocesador de 32 bits. Nota
que el coprocesador está normalmente habilitado a través del -mconfig = .

-mcop32
Habilita las instrucciones del coprocesador de 32 bits.

-mcop64
Habilita las instrucciones del coprocesador de 64 bits.

-mivc2
Habilita la programación de IVC2. IVC2 es un coprocesador VLIW de 64 bits.

-mdc
Hace que las variables constantes se coloquen en la sección ".near".

-mdiv
Habilita las instrucciones "div" y "divu".

-meb
Genera código big-endian.

-mel
Genera código little-endian.

-miovolátil
Le dice al compilador que cualquier variable marcada con el atributo "io" debe ser
considerado volátil.

-ml Hace que las variables se asignen a la sección ".far" de forma predeterminada.

-mleadz
Habilita la instrucción "leadz" (cero a la izquierda).

-mm Hace que las variables se asignen a la sección ".near" de forma predeterminada.

-mminmax
Habilita las instrucciones "min" y "max".

-mult
Habilita las instrucciones de multiplicación y multiplicar-acumular.

-mno-opciones
Desactiva todas las instrucciones opcionales habilitadas por -opts-centro comercial.

-repetir
Habilita las instrucciones "repetir" y "repetir", que se utilizan para bucles de baja sobrecarga.

-em Hace que todas las variables se establezcan de forma predeterminada en la sección ".tiny". Tenga en cuenta que hay un
Límite de 65536 bytes para esta sección. Los accesos a estas variables utilizan la base% gp
registrarse.

-msatur
Habilita las instrucciones de saturación. Tenga en cuenta que el compilador no
generarlos por sí mismo, pero esta opción se incluye por compatibilidad con otras herramientas,
como".

-msdram
Vincule el tiempo de ejecución basado en SDRAM en lugar del tiempo de ejecución predeterminado basado en ROM.

-msim
Vincula las bibliotecas en tiempo de ejecución del simulador.

-msimnovec
Vincular las bibliotecas de tiempo de ejecución del simulador, excluyendo el soporte integrado para reinicio y
vectores y tablas de excepción.

-mtf
Hace que todas las funciones se establezcan de forma predeterminada en la sección ".far". Sin esta opción, las funciones
por defecto a la sección ".near".

-mtiny =n
Variables que son n bytes o menos se asignan a la sección ".tiny". Estas
las variables usan el registro base $ gp. El valor predeterminado para esta opción es 4, pero tenga en cuenta que
hay un límite de 65536 bytes para la sección ".tiny".

microblaze Opciones

-msoft-flotador
Utilice emulación de software para punto flotante (predeterminado).

-mhard-flotador
Utilice instrucciones de hardware de punto flotante.

-memcpy
No optimice los movimientos de bloque, use "memcpy".

-mno-clearbss
Esta opción está obsoleta. Usar -fno-zero-inicializado-en-bss preferiblemente.

-mcpu =tipo cpu
Utilice las funciones y el código de programación para la CPU determinada. Los valores admitidos se encuentran en
formato vX.YY.Z, Donde X es una versión principal, YY es la versión menor, y Z is
código de compatibilidad. Los valores de ejemplo son v3.00.a, v4.00.b, v5.00.a, v5.00.b, v5.00.b,
v6.00.a.

-mxl-suave-mul
Utilice software de emulación de multiplicación (predeterminado).

-mxl-suave-div
Utilice emulación de software para divisiones (predeterminado).

-mxl-cambio de barril
Utilice la palanca de cambios de barril de hardware.

-mxl-patrón-comparar
Utilice las instrucciones de comparación de patrones.

-msmall-divide
Utilice la optimización de búsqueda de tablas para pequeñas divisiones enteras con signo.

-mxl-pila-control
Esta opción está obsoleta. Usar -fstack-comprobar preferiblemente.

-mxl-gp-optar
Utilice las secciones ".sdata" / ". Sbss" relativas a GP.

-mxl-multiplicar-alto
Utilice las instrucciones de multiplicar alto para la parte alta de multiplicar 32x32.

-mxl-flotar-convertir
Utilice instrucciones de conversión de punto flotante de hardware.

-mxl-flotante-sqrt
Utilice la instrucción de raíz cuadrada de punto flotante de hardware.

-mbig-endian
Genere código para un objetivo big-endian.

-mlittle-endian
Genere código para un objetivo little-endian.

-mxl-reordenar
Utilice las instrucciones de reorden (intercambio y byte invertido cargar / almacenar).

-modo-mxl-modelo de aplicación
Seleccionar modelo de aplicación modelo de aplicación. Los modelos válidos son

ejecutable
ejecutable normal (predeterminado), usa código de inicio crt0.o.

xmdstub
para usar con depuración intrusiva de software basado en Xilinx Microprocessor Debugger (XMD)
agente llamado xmdstub. Esto usa el archivo de inicio crt1.o y establece la dirección de inicio de
el programa a 0x800.

bootstrap
para aplicaciones que se cargan mediante un cargador de arranque. Este modelo usa archivo de inicio
crt2.o que no contiene un controlador de vector de reinicio del procesador. Esto es adecuado
para transferir el control de un reinicio del procesador al cargador de arranque en lugar de al
.

novectores
para aplicaciones que no requieren ninguno de los vectores MicroBlaze. Esta opción
puede ser útil para aplicaciones que se ejecutan dentro de una aplicación de supervisión. Este modelo
usos crt3.o como archivo de inicio.

Optión -modo-xl-modelo de aplicación es un alias obsoleto para -modo-mxl-modelo de aplicación.

MIPS Opciones

-EB Genera código big-endian.

-EL Genera código little-endian. Este es el valor predeterminado para mips * el - * - * configuraciones.

-march =arco
Genere código que se ejecute en arco, que puede ser el nombre de un MIPS ISA genérico, o el
nombre de un procesador en particular. Los nombres de la ISA son: mips1, mips2, mips3, mips4,
mips32, mips32r2, mips32r3, mips32r5, mips32r6, mips64, mips64r2, mips64r3, mips64r5
y mips64r6. Los nombres de los procesadores son: 4kc, 4km, 4kp, 4ksc, 4kec, 4kem, 4kep, 4ksd,
5kc, 5kf, 20kc, 24kc, 24kf2_1, 24kf1_1, 24kec, 24kef2_1, 24kef1_1, 34kc, 34kf2_1,
34kf1_1, 34kn, 74kc, 74kf2_1, 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf1_1,
loongson2e, loongson2f, loongson3a, m4k, m14k, m14kc, m14ke, m14kec, octeón, octeón +,
octeon2, octeon3, Orión, p5600, r2000, r3000, r3900, r4000, r4400, r4600, r4650,
r4700, r6000, r8000, rm7000, rm9000, r10000, r12000, r14000, r16000, sb1, sr71000,
vr4100, vr4111, vr4120, vr4130, vr4300, vr5000, vr5400, vr5500, xlr y xlp.
valor especial de-abi selecciona la arquitectura más compatible para la ABI seleccionada
(es decir, mips1 para ABI de 32 bits y mips3 para ABI de 64 bits).

La cadena de herramientas nativa de Linux / GNU también respalda el valor nativo, que selecciona la mejor
opción de arquitectura para el procesador host. -march = nativo no tiene ningún efecto si GCC lo hace
no reconoce el procesador.

En los nombres de los procesadores, un final 000 puede abreviarse como k (por ejemplo, -marcha = r2k).
Los prefijos son opcionales y vr puede estar escrito r.

Nombres del formulario nf2_1 se refieren a procesadores con FPU sincronizados a la mitad de la velocidad
núcleo, nombres de la forma nf1_1 se refieren a procesadores con FPU sincronizados a la misma velocidad
como el núcleo, y los nombres de la forma nf3_2 se refieren a procesadores con FPU sincronizados con una relación
de 3: 2 con respecto al núcleo. Por razones de compatibilidad, nf es aceptado como
sinónimo de nf2_1 mientras nx y bfx se aceptan como sinónimos de nf1_1.

GCC define dos macros según el valor de esta opción. El primero es "_MIPS_ARCH",
que da el nombre de la arquitectura de destino, como una cadena. El segundo tiene la forma
"_MIPS_ARCH_foo ", Donde foo es el valor en mayúscula de "_MIPS_ARCH". Por ejemplo,
-marcha = r2000 establece "_MIPS_ARCH" en "r2000" y define la macro "_MIPS_ARCH_R2000".

Tenga en cuenta que la macro "_MIPS_ARCH" utiliza los nombres de procesador indicados anteriormente. En otra
palabras, tiene el prefijo completo y no abrevia 000 as k. En el caso de de-
abi, la macro nombra la arquitectura resuelta (ya sea "mips1" o "mips3"). Nombra
la arquitectura predeterminada cuando no -marcha se da la opción.

-mtune =arco
Optimizar para arco. Entre otras cosas, esta opción controla la forma en que se muestran las instrucciones.
programado y el costo percibido de las operaciones aritméticas. La lista de arco valores
es lo mismo que para -marcha.

Cuando no se utiliza esta opción, GCC optimiza para el procesador especificado por -marcha. Por
usando -marcha y -mtune juntos, es posible generar código que se ejecuta en un
familia de procesadores, pero optimiza el código para un miembro en particular de esa familia.

-mtune define las macros "_MIPS_TUNE" y "_MIPS_TUNE_foo ", que funcionan en el mismo
manera como el -marcha los descritos anteriormente.

-mips1
Equivalente a -marcha = mips1.

-mips2
Equivalente a -marcha = mips2.

-mips3
Equivalente a -marcha = mips3.

-mips4
Equivalente a -marcha = mips4.

-mips32
Equivalente a -marcha = mips32.

-mips32r3
Equivalente a -marcha = mips32r3.

-mips32r5
Equivalente a -marcha = mips32r5.

-mips32r6
Equivalente a -marcha = mips32r6.

-mips64
Equivalente a -marcha = mips64.

-mips64r2
Equivalente a -marcha = mips64r2.

-mips64r3
Equivalente a -marcha = mips64r3.

-mips64r5
Equivalente a -marcha = mips64r5.

-mips64r6
Equivalente a -marcha = mips64r6.

-mips16
-mno-mips16
Genere (no genere) código MIPS16. Si GCC tiene como objetivo un MIPS32 o MIPS64
arquitectura, hace uso de MIPS16e ASE.

La generación de código MIPS16 también se puede controlar por función mediante
Atributos "mips16" y "nomips16".

-mflip-mips16
Genere código MIPS16 en funciones alternas. Esta opción se proporciona para regresión
prueba de generación de código mixto MIPS16 / no MIPS16, y no está diseñado para uso ordinario
utilizar en la compilación del código de usuario.

-minterlink-comprimido
-mno-interlink-comprimido
Exigir (no exigir) que el código que utiliza el MIPS ISA estándar (sin comprimir) se vincule
compatible con código MIPS16 y microMIPS, y viceversa.

Por ejemplo, el código que utiliza la codificación ISA estándar no puede saltar directamente a MIPS16 o
código microMIPS; debe usar una llamada o un salto indirecto. -minterlink-comprimido
por lo tanto, desactiva los saltos directos a menos que GCC sepa que el objetivo del salto no es
comprimido.

-minterlink-mips16
-mno-interlink-mips16
Alias ​​de -minterlink-comprimido y -mno-interlink-comprimido. Estas opciones
son anteriores al microMIPS ASE y se conservan para compatibilidad con versiones anteriores.

-mabi = 32
-mabi = o64
-mabi = n32
-mabi = 64
-mabi = eabi
Genere código para la ABI dada.

Tenga en cuenta que el EABI tiene una variante de 32 bits y una de 64 bits. GCC normalmente genera 64 bits
código cuando selecciona una arquitectura de 64 bits, pero puede usar -mgp32 para obtener un código de 32 bits
preferiblemente.

Para obtener información sobre O64 ABI, consultehttp://gcc.gnu.org/projects/mipso64-abi.html>.

GCC admite una variante de la ABI o32 en la que los registros de punto flotante son 64 en lugar de
de 32 bits de ancho. Puede seleccionar esta combinación con -mabi = 32 -mfp64. Este ABI
se basa en las instrucciones "mthc1" y "mfhc1" y, por lo tanto, solo es compatible con
Procesadores MIPS32R2, MIPS32R3 y MIPS32R5.

Las asignaciones de registros para argumentos y valores devueltos siguen siendo las mismas, pero cada
El valor escalar se pasa en un solo registro de 64 bits en lugar de un par de 32 bits.
registros. Por ejemplo, los valores escalares de coma flotante se devuelven en $ f0 solo, no un
$ f0/$ f1 par. El conjunto de registros de llamadas guardadas también sigue siendo el mismo en el sentido de que
Se guardan registros numerados de doble precisión.

Se admiten dos variantes adicionales del o32 ABI para permitir una transición de
Registros de 32 bits a 64 bits. Estos son FPXX (-mfpxx) y FP64A (-mfp64
-mno-impar-spreg). La extensión FPXX exige que todo el código se ejecute correctamente
cuando se ejecuta con registros de 32 o 64 bits. El código se puede interconectar con
FP32 o FP64, pero no ambos. La extensión FP64A es similar a la extensión FP64 pero
prohíbe el uso de registros impares de precisión simple. Esto se puede utilizar en
junto con el modo "FRE" de las FPU en los procesadores MIPS32R5 y permite tanto FP32
y código FP64A para interconectarse y ejecutarse en el mismo proceso sin cambiar los modos FPU.

-mabicalladas
-mno-abicalls
Genere (no genere) código que sea adecuado para objetos dinámicos de estilo SVR4.
-mabicalladas es el valor predeterminado para los sistemas basados ​​en SVR4.

-mcompartido
-mno-compartido
Genere (no genere) código que sea completamente independiente de la posición, y que pueda
por lo tanto, estar vinculado a bibliotecas compartidas. Esta opción solo afecta -mabicalladas.

Todos -mabicalladas el código ha sido tradicionalmente independiente de la posición, independientemente de las opciones
como -fPIC y -fpic. Sin embargo, como extensión, la cadena de herramientas GNU permite ejecutables
para utilizar accesos absolutos para símbolos vinculantes localmente. También puede usar GP más corto
secuencias de inicialización y generar llamadas directas a funciones definidas localmente. Esta
el modo es seleccionado por -mno-compartido.

-mno-compartido depende de binutils 2.16 o superior y genera objetos que solo se pueden
enlazado por el enlazador GNU. Sin embargo, la opción no afecta el ABI de la final.
ejecutable; solo afecta al ABI de los objetos reubicables. Utilizando -mno-compartido
generalmente hace que los ejecutables sean más pequeños y rápidos.

-mcompartido es el predeterminado.

-mplt
-mno-plt
Suponga (no asuma) que los enlazadores estáticos y dinámicos admiten PLT y copian
reubicaciones. Esta opción solo afecta -mno-compartido -mabicalladas. Para el n64 ABI, este
La opción no tiene efecto sin -msym32.

Usted puede hacer -mplt el predeterminado configurando GCC con --con-mips-plt. El valor por defecto
is -mno-plt de otra manera.

-mxgot
-mno-xgot
Levante (no levante) las restricciones habituales sobre el tamaño de la tabla de compensación global.

GCC normalmente usa una sola instrucción para cargar valores desde GOT. Mientras esto es
relativamente eficiente, solo funciona si el GOT es menor que aproximadamente 64k. Cualquier cosa
más grande hace que el vinculador informe un error como:

reubicación truncada para encajar: R_MIPS_GOT16 foobar

Si esto sucede, debe volver a compilar su código con -mxgot. Esto funciona con muy
GOT grandes, aunque el código también es menos eficiente, ya que se necesitan tres
instrucciones para obtener el valor de un símbolo global.

Tenga en cuenta que algunos enlazadores pueden crear varios GOT. Si tiene un enlazador de este tipo,
solo debería necesitar usar -mxgot cuando un solo archivo de objeto accede a más de 64k
valor de las entradas GOT. Muy pocos lo hacen.

Estas opciones no tienen ningún efecto a menos que GCC esté generando un código independiente de la posición.

-mgp32
Suponga que los registros de propósito general tienen 32 bits de ancho.

-mgp64
Suponga que los registros de propósito general tienen 64 bits de ancho.

-mfp32
Suponga que los registros de coma flotante tienen 32 bits de ancho.

-mfp64
Suponga que los registros de coma flotante tienen 64 bits de ancho.

-mfpxx
No asuma el ancho de los registros de punto flotante.

-mhard-flotador
Utilice las instrucciones del coprocesador de punto flotante.

-msoft-flotador
No utilice instrucciones de coprocesador de punto flotante. Implementar punto flotante
cálculos utilizando llamadas a la biblioteca en su lugar.

-mno-flotar
Equivalente a -msoft-flotador, pero además afirma que el programa que se está compilando
no realiza ninguna operación de punto flotante. Esta opción es actualmente compatible
solo por algunas configuraciones de MIPS bare-metal, donde puede seleccionar un conjunto especial de
bibliotecas que carecen de todo el soporte de punto flotante (incluido, por ejemplo, el
punto formatos "printf"). Si el código compilado con -mno-flotar contiene accidentalmente
operaciones de punto flotante, es probable que sufra una falla en tiempo de enlace o en tiempo de ejecución.

-msingle-flotador
Suponga que el coprocesador de punto flotante solo admite operaciones de precisión simple.

-mdoble-flotador
Suponga que el coprocesador de punto flotante admite operaciones de doble precisión. Esta
es el predeterminado.

-modd-spreg
-mno-impar-spreg
Habilite el uso de registros de punto flotante de precisión simple con números impares para el o32
ABI. Este es el valor predeterminado para los procesadores que se sabe que admiten estos registros.
Cuando utilice el o32 FPXX ABI, -mno-impar-spreg está configurado de forma predeterminada.

-mabs = 2008
-mabs = legado
Estas opciones controlan el tratamiento del not-a-number (NaN) especial IEEE 754
datos de punto flotante con el "abs.fmt " y "neg.fmt " instrucciones de la máquina.

Por defecto o cuando -mabs = legado se utiliza el tratamiento heredado. En esto
caso de que estas instrucciones se consideren aritméticas y se eviten cuando el funcionamiento correcto
es obligatorio y el operando de entrada puede ser un NaN. Una secuencia de instrucciones más larga
que manipulan el bit de signo de datum de punto flotante manualmente se usa en su lugar a menos que
las -finita-solo-matemáticas También se ha especificado la opción.

La -mabs = 2008 La opción selecciona el tratamiento IEEE 754-2008. En este caso estos
Las instrucciones se consideran no aritméticas y, por lo tanto, funcionan correctamente en todos
casos, incluyendo en particular donde el operando de entrada es un NaN. Estas instrucciones
por lo tanto, siempre se utilizan para las operaciones respectivas.

-mnan = 2008
-mnan = legado
Estas opciones controlan la codificación del especial not-a-number (NaN) IEEE 754
datos de coma flotante.

La -mnan = legado La opción selecciona la codificación heredada. En este caso, silenciosos NaN (qNaN)
se denotan por el primer bit de su campo de significado final que es 0, mientras que
Los NaN de señalización (sNaN) se indican mediante el primer bit de su significado final
el campo es 1.

La -mnan = 2008 La opción selecciona la codificación IEEE 754-2008. En este caso, los qNaN son
denotado por el primer bit de su campo de significado final que es 1, mientras que sNaNs
se denotan por el primer bit de su campo de significado final que es 0.

El valor predeterminado es -mnan = legado a menos que GCC se haya configurado con --con-nan = 2008.

-mllsc
-mno-llsc
Usar (no usar) ll, scy sincronizar instrucciones para implementar la memoria atómica incorporada
funciones. Cuando no se especifica ninguna opción, GCC usa las instrucciones si el objetivo
la arquitectura los apoya.

-mllsc es útil si el entorno de ejecución puede emular las instrucciones y -mno-llsc
puede ser útil cuando se compila para ISA no estándar. Puede hacer que cualquiera de las dos opciones
predeterminado configurando GCC con --con-llsc y --sin-llsc respectivamente.
--con-llsc es el predeterminado para algunas configuraciones; ver la documentación de instalación
para obtener más detalles.

-mdsp
-mno-dsp
Utilice (no utilice) la revisión 1 de MIPS DSP ASE.
Esta opción define la macro del preprocesador "__mips_dsp". También define
"__mips_dsp_rev" a 1.

-mdspr2
-mno-dspr2
Utilice (no utilice) la revisión 2 de MIPS DSP ASE.
Esta opción define las macros del preprocesador "__mips_dsp" y "__mips_dspr2". Eso
también define "__mips_dsp_rev" como 2.

-msmartmips
-mno-smartmips
Utilice (no utilice) MIPS SmartMIPS ASE.

-soltero-emparejado
-mno-emparejado-sencillo
Utilice (no utilice) instrucciones de punto flotante único emparejado.
Esta opción requiere que se habilite el soporte de punto flotante de hardware.

-mdmx
-mno-mdmx
Utilice (no utilice) las instrucciones de Extensión de medios digitales MIPS. Esta opción solo puede ser
se utiliza cuando se genera código de 64 bits y requiere que el soporte de punto flotante de hardware sea
habilitado

-mips3d
-mno-mips3d
Utilice (no utilice) MIPS-3D ASE. La opción -mips3d implica -soltero-emparejado.

-mmicromips
-mno-micromips
Genere (no genere) código microMIPS.

La generación de código MicroMIPS también se puede controlar por función mediante
Atributos "micromips" y "nomicromips".

-mmt
-mno-mt
Utilice (no utilice) las instrucciones MT Multithreading.

-mmcu
-mno-mcu
Utilice (no utilice) las instrucciones ASE de MIPS MCU.

-meva
-mno-eva
Utilice (no utilice) las instrucciones de direccionamiento virtual mejorado de MIPS.

-mvirt
-mno-virt
Utilice (no utilice) las instrucciones específicas de la aplicación de virtualización MIPS.

-mxpa
-mno-xpa
Utilice (no utilice) las instrucciones de dirección física extendida MIPS (XPA).

-mlong64
Obligue a los tipos "largos" a tener un ancho de 64 bits. Ver -mlong32 para una explicación del defecto
y la forma en que se determina el tamaño del puntero.

-mlong32
Fuerza los tipos "long", "int" y de puntero a 32 bits de ancho.

El tamaño predeterminado de "int" s, "long" sy punteros depende de la ABI. Todos
Las ABI admitidas utilizan "int" de 32 bits. El n64 ABI usa 64 bits "largos", al igual que el de 64 bits
EABI; los otros utilizan "long" de 32 bits. Los punteros tienen el mismo tamaño que los "largos" o los
mismo tamaño que los registros de números enteros, el que sea menor.

-msym32
-mno-sym32
Suponga (no asuma) que todos los símbolos tienen valores de 32 bits, independientemente de la
ABI. Esta opción es útil en combinación con -mabi = 64 y -mno-abicalls porque
permite a GCC generar referencias más breves y rápidas a direcciones simbólicas.

-G número
Coloque definiciones de datos visibles externamente en una pequeña sección de datos si esos datos no son
más grande que número bytes. Entonces, GCC puede generar accesos más eficientes a los datos; ver
-mgpopt para obtener más detalles.

El valor por defecto -G La opción depende de la configuración.

-mlocal-sdata
-mno-local-sdata
Extienda (no extienda) el -G comportamiento a los datos locales también, como a las variables estáticas
C ª. -mlocal-sdata es el predeterminado para todas las configuraciones.

Si el vinculador se queja de que una aplicación está utilizando demasiados datos pequeños, es posible que
quiere intentar reconstruir las partes menos críticas para el rendimiento con -mno-local-sdata. Usted
también podría querer construir grandes bibliotecas con -mno-local-sdata, para que las bibliotecas
deje más espacio para el programa principal.

-mextern-sdata
-mno-sdata-externo
Suponga (no asuma) que los datos definidos externamente están en una sección de datos pequeña si el
el tamaño de esos datos está dentro del -G límite. -mextern-sdata es el predeterminado para todos
configuraciones.

Si compila un módulo Camino -mextern-sdata -G número -mgpopty Camino hace referencia a un
variable var que no es mas grande que número bytes, debe asegurarse de que var es colocado
en una pequeña sección de datos. Si var está definido por otro módulo, debe compilar
ese módulo con un nivel suficientemente alto -G establecer o adjuntar un atributo de "sección" a var's
definición. Si var es común, debe vincular la aplicación con un valor suficientemente alto -G
ajuste.

La forma más sencilla de satisfacer estas restricciones es compilar y vincular cada módulo
con la misma -G opción. Sin embargo, es posible que desee crear una biblioteca que admita
varios límites de datos pequeños diferentes. Puede hacer esto compilando la biblioteca con
el más alto apoyado -G configuración y uso adicional -mno-sdata-externo para detener el
biblioteca de hacer suposiciones sobre datos definidos externamente.

-mgpopt
-mno-gpopt
Use (no use) accesos relativos a GP para símbolos que se sabe que están en un pequeño dato
sección; ver -G, -mlocal-sdata y -mextern-sdata. -mgpopt es el predeterminado para todos
configuraciones.

-mno-gpopt es útil para los casos en los que el registro $ gp podría no tener el valor de
"_gp". Por ejemplo, si el código es parte de una biblioteca que podría usarse en un arranque
monitor, los programas que llaman a las rutinas del monitor de arranque pasan un valor desconocido en $ gp. (En
En tales situaciones, el monitor de arranque se compila normalmente con -G0.)

-mno-gpopt implica -mno-local-sdata y -mno-sdata-externo.

-datos-integrados
-mno-datos-incrustados
Asigne las variables a la sección de datos de solo lectura primero si es posible, luego a continuación en el
pequeña sección de datos si es posible, de lo contrario en datos. Esto da un código un poco más lento
que el predeterminado, pero reduce la cantidad de RAM requerida durante la ejecución y, por lo tanto, puede
ser preferido para algunos sistemas integrados.

-muninit-const-en-rodata
-mno-uninit-const-en-rodata
Coloque variables "const" no inicializadas en la sección de datos de solo lectura. Esta opcion es
solo significativo en conjunción con -datos-integrados.

-mcode-legible =pólipo
Especifique si GCC puede generar código que lea de secciones ejecutables. Existen
tres posibles configuraciones:

-mcode-legible = sí
Las instrucciones pueden acceder libremente a secciones ejecutables. Ésta es la configuración predeterminada.

-mcode-legible = pcrel
Las instrucciones de carga relativas a PC de MIPS16 pueden acceder a secciones ejecutables, pero otras
las instrucciones no deben hacerlo. Esta opción es útil en procesadores 4KSc y 4KSd
cuando los TLB de código tienen establecido el bit de inhibición de lectura. También es útil en procesadores
que se puede configurar para tener una interfaz SRAM de instrucción / datos dual y que,
como el M4K, redirige automáticamente las cargas relativas a la PC a la RAM de instrucciones.

-mcode-legible = no
Las instrucciones no deben acceder a secciones ejecutables. Esta opción puede ser útil en
objetivos que están configurados para tener una interfaz SRAM de instrucción / datos dual pero
que (a diferencia del M4K) no redirigen automáticamente las cargas relativas a la PC al
RAM de instrucciones.

-direcciones-msplit
-mno-direcciones-divididas
Habilite (deshabilite) el uso de los operadores de reubicación del ensamblador "% hi ()" y "% lo ()". Esta
La opción ha sido reemplazada por -relocs-mexplicit pero se retiene para atrás
compatibilidad.

-relocs-mexplicit
-mno-explícita-relocs
Utilice (no utilice) operadores de reubicación de ensamblador cuando trabaje con direcciones simbólicas.
La alternativa, seleccionada por -mno-explícita-relocs, es utilizar macros de ensamblador en su lugar.

-relocs-mexplicit es el valor predeterminado si GCC se configuró para usar un ensamblador que
apoya a los operadores de reubicación.

-mcheck-cero-división
-mno-check-cero-división
Capture (no atrape) en la división de números enteros por cero.

El valor predeterminado es -mcheck-cero-división.

-mdivide-trampas
-mdivide-break
Los sistemas MIPS verifican la división por cero generando una trampa condicional o una
romper la instrucción. El uso de trampas da como resultado un código más pequeño, pero solo es compatible con MIPS
II y posteriores. Además, algunas versiones del kernel de Linux tienen un error que evita trampas
genere la señal adecuada ("SIGFPE"). Usar -mdivide-trampas para permitir condicional
trampas en arquitecturas que las apoyan y -mdivide-break para forzar el uso de
descansos

El valor predeterminado suele ser -mdivide-trampas, pero esto se puede anular en el momento de la configuración
usando --with-divide = rompe. Las verificaciones de dividir por cero se pueden desactivar completamente usando
-mno-check-cero-división.

-memcpy
-mno-memcpy
Forzar (no forzar) el uso de "memcpy" para movimientos de bloque no triviales. El valor predeterminado es
-mno-memcpy, que permite a GCC incorporar la mayoría de las copias de tamaño constante.

-ml-llamadas-largas
-mno-llamadas-largas
Deshabilite (no deshabilite) el uso de la instrucción "jal". Llamar a funciones usando "jal"
es más eficiente, pero requiere que la persona que llama y el destinatario de la llamada estén en los mismos 256 megabytes
segmento.

Esta opción no tiene ningún efecto sobre el código de abicalls. El valor predeterminado es -mno-llamadas-largas.

-mmad
-mno-loco
Habilite (deshabilite) el uso de las instrucciones "mad", "madu" y "mul", tal como las proporciona el
R4650 ISA.

-mimadd
-mno-imadd
Habilite (deshabilite) el uso de las instrucciones enteras "madd" y "msub". El valor predeterminado es
-mimadd en arquitecturas que admiten "madd" y "msub", excepto 74k
arquitectura donde se encontró que generaba código más lento.

-confundido-loco
-mno-fusionado-madd
Habilite (deshabilite) el uso de las instrucciones de acumulación múltiple de punto flotante, cuando
están disponibles. El valor predeterminado es -confundido-loco.

En la CPU R8000 cuando se utilizan instrucciones de acumulación múltiple, el intermedio
El producto se calcula con precisión infinita y no está sujeto al FCSR Flush para
Bit cero. Esto puede ser indeseable en algunas circunstancias. En otros procesadores el
el resultado es numéricamente idéntico al cálculo equivalente usando multiplicación separada,
sumar, restar y negar instrucciones.

-nocpp
Dígale al ensamblador MIPS que no ejecute su preprocesador sobre los archivos ensambladores del usuario (con un
.s sufijo) al ensamblarlos.

-mfix-24k
-mno-arreglar-24k
Trabaje en torno a la errata de 24K E48 (datos perdidos en las tiendas durante la recarga). Las soluciones
son implementados por el ensamblador en lugar de por GCC.

-mfix-r4000
-mno-fix-r4000
Solucione ciertas erratas de la CPU R4000:

- Un cambio de palabra doble o variable puede dar un resultado incorrecto si se ejecuta
inmediatamente después de comenzar una división entera.

- Un cambio de palabra doble o variable puede dar un resultado incorrecto si se ejecuta mientras
se está realizando una multiplicación de enteros.

- Una división entera puede dar un resultado incorrecto si se inicia en una ranura de retardo de un
rama tomada o un salto.

-mfix-r4400
-mno-fix-r4400
Solucione ciertas erratas de la CPU R4400:

- Un cambio de palabra doble o variable puede dar un resultado incorrecto si se ejecuta
inmediatamente después de comenzar una división entera.

-mfix-r10000
-mno-fix-r10000
Trabajar en torno a ciertas erratas de R10000:

- Es posible que las secuencias "ll" / "sc" no se comporten de forma atómica en las revisiones anteriores a la 3.0. Que puede
punto muerto en las revisiones 2.6 y anteriores.

Esta opción solo se puede utilizar si la arquitectura de destino es compatible con
instrucciones. -mfix-r10000 es el valor predeterminado cuando -marcha = r10000 se utiliza; -mno-fix-r10000
es el valor predeterminado de lo contrario.

-mfix-rm7000
-mno-fix-rm7000
Evite las erratas "dmult" / "dmultu" del RM7000. Las soluciones alternativas son implementadas por
el ensamblador en lugar de GCC.

-mfix-vr4120
-mno-fix-vr4120
Trabajar en torno a ciertas erratas de VR4120:

- "dmultu" no siempre produce el resultado correcto.

- "div" y "ddiv" no siempre producen el resultado correcto si uno de los operandos
es negativo

Las soluciones para las erratas de la división se basan en funciones especiales en libgcc.a. En
En la actualidad, estas funciones solo las proporcionan las configuraciones "mips64vr * -elf".

Otras erratas VR4120 requieren que se inserte un NOP entre ciertos pares de
instrucciones. Estas erratas son manejadas por el ensamblador, no por el propio GCC.

-mfix-vr4130
Evite las erratas de VR4130 "mflo" / "mfhi". Las soluciones alternativas son implementadas por el
ensamblador en lugar de GCC, aunque GCC evita usar "mflo" y "mfhi" si el
Las instrucciones VR4130 "macc", "macchi", "dmacc" y "dmacchi" están disponibles en su lugar.

-mfix-sb1
-mno-arreglar-sb1
Solucione ciertas erratas del núcleo de la CPU SB-1. (Esta bandera actualmente funciona alrededor del SB-1
revisión 2 erratas de coma flotante "F1" y "F2").

-mr10k-cache-barrera =pólipo
Especifique si GCC debe insertar barreras de caché para evitar los efectos secundarios de
especulaciones sobre los procesadores R10K.

Al igual que muchos procesadores, el R10K intenta predecir el resultado de un condicional
rama y ejecuta especulativamente instrucciones de la rama "tomada". Eso mas tarde
aborta estas instrucciones si el resultado previsto es incorrecto. Sin embargo, en el R10K,
incluso las instrucciones abortadas pueden tener efectos secundarios.

Este problema solo afecta a los almacenes del kernel y, según el sistema, a las cargas del kernel.
Como ejemplo, un almacén ejecutado especulativamente puede cargar la memoria de destino en la caché.
y marcar la línea de caché como sucia, incluso si la tienda en sí se cancela más tarde. Si un DMA
La operación escribe en la misma área de memoria antes de que se vacíe la línea "sucia", la
Los datos almacenados en caché sobrescriben los datos editados por DMA. Consulte el manual del procesador R10K para obtener una
descripción, incluidos otros problemas potenciales.

Una solución es insertar instrucciones de barrera de caché antes de cada acceso a la memoria que
podría ejecutarse especulativamente y eso podría tener efectos secundarios incluso si se cancela.
-mr10k-cache-barrera =pólipo controla la implementación de GCC de esta solución. Eso
asume que los accesos abortados a cualquier byte en las siguientes regiones no tienen lado
efectos:

1. la memoria ocupada por el marco de pila de la función actual;

2. la memoria ocupada por un argumento de pila entrante;

3. la memoria ocupada por un objeto con una dirección de constante de tiempo de enlace.

Es responsabilidad del núcleo garantizar que los accesos especulativos a estas regiones
son realmente seguros.

Si el programa de entrada contiene una declaración de función como:

void foo (vacío);

entonces la implementación de "foo" debe permitir la ejecución de "j foo" y "jal foo"
especulativamente. GCC respeta esta restricción para las funciones que compila por sí mismo. Eso
espera que las funciones que no pertenecen a GCC (como el código ensamblador escrito a mano) hagan lo mismo.

La opción tiene tres formas:

-mr10k-caché-barrera = carga-almacenamiento
Inserte una barrera de caché antes de una carga o tienda que podría ejecutarse especulativamente
y eso podría tener efectos secundarios incluso si se aborta.

-mr10k-cache-barrera = tienda
Inserte una barrera de caché antes de una tienda que podría ejecutarse especulativamente y
que podría tener efectos secundarios incluso si se aborta.

-mr10k-cache-barrera = ninguno
Deshabilite la inserción de barreras de caché. Ésta es la configuración predeterminada.

-mflush-func =divertida
-mno-flush-función
Especifica la función a llamar para vaciar los cachés I y D, o no llamar a ninguno de esos
función. Si se llama, la función debe tener los mismos argumentos que el común
"_flush_func", es decir, la dirección del rango de memoria para el que se está
vaciado, el tamaño del rango de memoria y el número 3 (para vaciar ambos cachés). los
el valor predeterminado depende del objetivo para el que se configuró GCC, pero comúnmente es
"_flush_func" o "__cpu_flush".

mbranch-cost =número
Establezca el costo de las sucursales en aproximadamente número instrucciones "simples". Este costo es solo un
heurístico y no se garantiza que produzca resultados consistentes en todas las versiones. Un cero
costo selecciona de forma redundante el valor predeterminado, que se basa en el -mtune ajuste.

-rama-probable
-mno-rama-probable
Habilite o deshabilite el uso de las instrucciones de Branch Likely, independientemente del valor predeterminado para el
arquitectura seleccionada. De forma predeterminada, se pueden generar instrucciones de Branch Likely si
son compatibles con la arquitectura seleccionada. Una excepción es para MIPS32 y
Arquitecturas y procesadores MIPS64 que implementan esas arquitecturas; para esos,
Las instrucciones de Branch Likely no se generan de forma predeterminada porque MIPS32 y
Las arquitecturas MIPS64 desaprueban específicamente su uso.

-mfp-excepciones
-mno-fp-excepciones
Especifica si las excepciones FP están habilitadas. Esto afecta la forma en que las instrucciones FP son
programado para algunos procesadores. El valor predeterminado es que las excepciones FP están habilitadas.

Por ejemplo, en el SB-1, si las excepciones FP están deshabilitadas y estamos emitiendo 64 bits
código, entonces podemos usar ambos tubos FP. De lo contrario, solo podemos usar una tubería FP.

-mvr4130-alinear
-mno-vr4130-alinear
La tubería VR4130 es superescalar bidireccional, pero solo puede emitir dos instrucciones
juntos si el primero está alineado con 8 bytes. Cuando esta opción está habilitada, GCC alinea
pares de instrucciones que cree que deberían ejecutarse en paralelo.

Esta opción solo tiene efecto cuando se optimiza para el VR4130. Normalmente hace código
más rápido, pero a costa de hacerlo más grande. Está habilitado por defecto en
nivel de optimización -O3.

-msynci
-mno-synci
Habilite (deshabilite) la generación de instrucciones de "sincronización" en arquitecturas que lo admitan.
Las instrucciones "synci" (si están habilitadas) se generan cuando "__builtin___clear_cache" es
compilado.

Esta opción tiene como valor predeterminado -mno-synci, pero el valor predeterminado se puede anular configurando
GCC con --con-synci.

Al compilar código para sistemas de un solo procesador, generalmente es seguro usar "synci".
Sin embargo, en muchos sistemas de varios núcleos (SMP), no invalida la instrucción
almacena en caché en todos los núcleos y puede conducir a un comportamiento indefinido.

-mrelax-pic-llamadas
-mno-relax-pic-llamadas
Intente convertir las llamadas PIC que normalmente se envían a través del registro de $ 25 en llamadas directas.
Esto solo es posible si el enlazador puede resolver el destino en el momento del enlace y si
el destino está dentro del alcance para una llamada directa.

-mrelax-pic-llamadas es el valor predeterminado si GCC se configuró para usar un ensamblador y un
enlazador que admite la directiva de ensamblado ".reloc" y -relocs-mexplicit será en
efecto. Con -mno-explícita-relocs, esta optimización puede ser realizada por el
ensamblador y enlazador solos sin la ayuda del compilador.

-mmcount-ra-dirección
-mno-mcount-ra-dirección
Emitir (no emitir) código que permite que "_mcount" modifique el retorno de la función de llamada
Dirección. Cuando está habilitada, esta opción amplía la interfaz "_mcount" habitual con una nueva
ra-dirección parámetro, que tiene el tipo "intptr_t *" y se pasa en el registro $ 12.
"_mcount" puede modificar la dirección de retorno haciendo lo siguiente:

* Devolviendo la nueva dirección en el registro $ 31.

* Almacenando la nueva dirección en "*dirección-ra ", Si ra-dirección no es nulo.

El valor predeterminado es -mno-mcount-ra-dirección.

MMIX Opciones

Estas opciones están definidas para el MMIX:

-mlibfuncs
-mno-libfuncs
Especificar que las funciones intrínsecas de la biblioteca se están compilando, pasando todos los valores en
registros, sin importar el tamaño.

-mepsilon
-mno-épsilon
Genere instrucciones de comparación de punto flotante que se comparen con respecto al "rE"
registro épsilon.

-mabi = mmixware
-mabi = gnu
Genera código que pasa parámetros de función y devuelve valores que (en el llamado
función) se ven como registros $ 0 y superiores, a diferencia del GNU ABI que usa global
registra $ 231 y más.

-mzero-extender
-mno-zero-extender
Al leer datos de la memoria en tamaños inferiores a 64 bits, utilice (no utilice) cero
extendiendo las instrucciones de carga de forma predeterminada, en lugar de las de extensión de signo.

-mknuthdiv
-mno-knuthdiv
Haz que el resultado de una división que produzca un resto tenga el mismo signo que el divisor.
Con el valor predeterminado, -mno-knuthdiv, el signo del resto sigue al signo del
dividendo. Ambos métodos son aritméticamente válidos, siendo el último casi exclusivamente
usado.

-mtoplenivel-símbolos
-mno-símbolos-de-nivel-superior
Anteponer (no anteponer) a : a todos los símbolos globales, por lo que se puede usar el código ensamblador
con la directiva de ensamblaje "PREFIX".

-melf
Genere un ejecutable en el formato ELF, en lugar del predeterminado mmo formato utilizado por
las mezcla simulador.

-mbranch-predecir
-mno-branch-predecir
Use (no use) las instrucciones de rama probable, cuando la predicción de rama estática
indica una rama probable.

-direcciones-de-base
-mno-direcciones-base
Genere (no genere) código que use bases direcciones. Usando una dirección base
genera automáticamente una solicitud (manejada por el ensamblador y el enlazador) para un
constante que se configurará en un registro global. El registro se utiliza para una o más bases
solicitudes de dirección dentro del rango de 0 a 255 desde el valor contenido en el registro. los
generalmente conduce a un código corto y rápido, pero la cantidad de elementos de datos diferentes que
se puede abordar es limitado. Esto significa que un programa que usa muchos datos estáticos
Podría requerir -mno-direcciones-base.

-mesa-salida-simple
-mno-salida-única
Forzar (no forzar) el código generado para que tenga un único punto de salida en cada función.

MN10300 Opciones

Estas -m Las opciones están definidas para las arquitecturas Matsushita MN10300:

-mmult-error
Genere código para evitar errores en las instrucciones de multiplicación para los procesadores MN10300.
Este es el predeterminado.

-mno-mult-error
No genere código para evitar errores en las instrucciones de multiplicación del MN10300
procesadores.

-mam33
Genere código utilizando funciones específicas del procesador AM33.

-mno-am33
No genere código utilizando funciones específicas del procesador AM33. Este es el
predeterminado.

-mam33-2
Genere código utilizando funciones específicas del procesador AM33 / 2.0.

-mam34
Genere código utilizando funciones específicas del procesador AM34.

-mtune =tipo cpu
Utilice las características de tiempo del tipo de CPU indicado al programar instrucciones.
Esto no cambia el tipo de procesador de destino. El tipo de CPU debe ser uno de
Mn10300, am33, am33-2 or am34.

-mreturn-puntero-en-d0
Al generar una función que devuelve un puntero, devuelve el puntero tanto en "a0" como
"d0". De lo contrario, el puntero se devuelve solo en "a0" e intenta llamar a tal
las funciones sin un prototipo dan lugar a errores. Tenga en cuenta que esta opción está activada por
defecto; usar -mno-puntero-de-retorno-en-d0 para desactivarlo.

-mno-crt0
No vincular en el archivo de objeto de inicialización en tiempo de ejecución de C.

-relajarse
Indique al enlazador que debe realizar un pase de optimización de relajación para
acortar ramas, llamadas y direcciones de memoria absoluta. Esta opción solo tiene efecto
cuando se usa en la línea de comando para el paso de enlace final.

Esta opción imposibilita la depuración simbólica.

-mliw
Permita que el compilador genere Largo Instrucción Palabra instrucciones si el objetivo es el
AM33 o después. Este es el predeterminado. Esta opción define la macro del preprocesador
"__LIW__".

-mnoliw
No permita que el compilador genere Largo Instrucción Palabra instrucciones. Esta opción
define la macro del preprocesador "__NO_LIW__".

-msetlb
Permita que el compilador genere el SETLB y Lcc instrucciones si el objetivo es el
AM33 o después. Este es el predeterminado. Esta opción define la macro del preprocesador
"__SETLB__".

-mnosetlb
No permita que el compilador genere SETLB or Lcc instrucciones. Esta opción define
la macro del preprocesador "__NO_SETLB__".

Moxie Opciones

-meb
Genera código big-endian. Este es el valor predeterminado para moxie - * - * configuraciones.

-mel
Genera código little-endian.

-mmul.x
Genere instrucciones mul.x y umul.x. Este es el valor predeterminado para moxiebox - * - *
configuraciones.

-mno-crt0
No vincular en el archivo de objeto de inicialización en tiempo de ejecución de C.

MSP430 Opciones

Estas opciones están definidas para el MSP430:

-masm-hex
Forzar la salida del ensamblado para que utilice siempre constantes hexadecimales. Normalmente tales constantes están firmadas
decimales, pero esta opción está disponible para testuite y / o con fines estéticos.

-mmcu =
Seleccione la MCU para apuntar. Esto se utiliza para crear un símbolo de preprocesador C basado en
el nombre de MCU, convertido a mayúsculas y pre y post fijo con __. Esto a su vez
es utilizado por el msp430.h archivo de encabezado para seleccionar un encabezado suplementario específico de MCU
archivo.

La opción también establece el ISA que se utilizará. Si el nombre de la MCU es uno que solo se conoce
admitir el 430 ISA, entonces se selecciona, de lo contrario, se selecciona el 430X ISA. A
nombre genérico de MCU de msp430 también se puede utilizar para seleccionar el 430 ISA. Del mismo modo, el
genérico msp430x El nombre de MCU selecciona el 430X ISA.

Además, se agrega un script de vinculador específico de MCU a la línea de comandos del vinculador. los
El nombre del script es el nombre de la MCU con .ld adjunto. Así especificando -mmcu = xxx on
las gcc línea de comando define el símbolo del preprocesador de C "__XXX__" y hace que el enlazador
para buscar un script llamado xxx.ld.

Esta opción también se transmite al ensamblador.

-mcpu =
Especifica la ISA que se utilizará. Los valores aceptados son msp430, msp430x y msp430xv2. Esto
La opción está obsoleta. los -mmcu = Se debe utilizar la opción para seleccionar el ISA.

-msim
Enlace a las bibliotecas en tiempo de ejecución del simulador y al script del vinculador. Anula cualquier script que
sería seleccionado por el -mmcu = .

-grande
Utilice direccionamiento de modelo grande (punteros de 20 bits, "tamaño_t" de 32 bits).

-mpequeño
Utilice direccionamiento de modelo pequeño (punteros de 16 bits, "tamaño_t" de 16 bits).

-relajarse
Esta opción se pasa al ensamblador y al enlazador, y permite que el enlazador realice
ciertas optimizaciones que no se pueden hacer hasta el enlace final.

mhwmult =
Describe el tipo de hardware que admite el destino. Los valores aceptados son
ninguna para que no se multiplique el hardware, 16bit para la multiplicación original de solo 16 bits compatible
por los primeros MCU. 32bit para la multiplicación de 16/32 bits compatible con MCU posteriores y serie f5
para la multiplicación de 16/32 bits compatible con MCU de la serie F5. Un valor de auto También puede ser
dado. Esto le dice a GCC que deduzca el soporte de multiplicación de hardware según el nombre de la MCU
proporcionado por el -mmcu opción. Si no -mmcu se especifica la opción entonces 32bit hardware
se supone multiplicar el apoyo. auto es la configuración predeterminada.

Las multiplicaciones de hardware se realizan normalmente llamando a una rutina de biblioteca. Esto salva
espacio en el código generado. Al compilar en -O3 o superior sin embargo el hardware
el multiplicador se invoca en línea. Esto lo convierte en un código más grande pero más rápido.

Las rutinas de multiplicación de hardware deshabilitan las interrupciones durante la ejecución y restauran la
estado de interrupción anterior cuando terminan. Esto los hace seguros para usar en interiores.
manipuladores de interrupciones, así como en el código normal.

-mentira
Habilite el uso de un entorno de tiempo de ejecución mínimo, sin inicializadores estáticos o
constructores. Está destinado a dispositivos con limitaciones de memoria. El compilador incluye
símbolos especiales en algunos objetos que le dicen al enlazador y al tiempo de ejecución qué fragmentos de código
son requeridos.

NDS32 Opciones

Estas opciones están definidas para implementaciones de NDS32:

-mbig-endian
Genera código en modo big-endian.

-mlittle-endian
Genera código en modo little-endian.

-mregs-reducidos
Utilice registros de conjunto reducido para la asignación de registros.

-mfull-regs
Utilice registros de conjunto completo para la asignación de registros.

-mcmov
Genere instrucciones de movimiento condicionales.

-mno-cmov
No genere instrucciones de movimiento condicionales.

-mperf-ext
Genere instrucciones de extensión de rendimiento.

-mno-perf-ext
No genere instrucciones de extensión de rendimiento.

-mv3push
Genere instrucciones push3 / pop25 v25.

-mno-v3push
No genere instrucciones push3 / pop25 v25.

-m16 bits
Genere instrucciones de 16 bits.

-mno-16 bits
No genere instrucciones de 16 bits.

-misr-tamaño-vectorial =número
Especifique el tamaño de cada vector de interrupción, que debe ser 4 o 16.

-mcache-block-size =número
Especifique el tamaño de cada bloque de caché, que debe ser una potencia de 2 entre 4 y 512.

-march =arco
Especifique el nombre de la arquitectura de destino.

-mcmodel =modelo de código
Establezca el modelo de código en uno de

chica
Todos los datos y los segmentos de datos de solo lectura deben estar dentro del espacio de direccionamiento de 512 KB.
El segmento de texto debe estar dentro de un espacio de direcciones de 16 MB.

mediano
El segmento de datos debe estar dentro de 512 KB, mientras que el segmento de datos de solo lectura
dentro de un espacio de direcciones de 4GB. El segmento de texto debe estar dentro de los 16 MB.
espacio de direccionamiento.

large
Todos los segmentos de texto y datos pueden estar dentro de un espacio de direcciones de 4GB.

-mctor-dtor
Habilita la función de constructor / destructor.

-relajarse
Guía del enlazador para relajar las instrucciones.

niños II Opciones

Estas son las opciones definidas para el procesador Altera Nios II.

-G número
Ponga objetos globales y estáticos menores o iguales a número bytes en los datos pequeños o
Secciones BSS en lugar de las secciones normales de datos o BSS. El valor predeterminado de número is
8.

-mgpopt =opción
-mgpopt
-mno-gpopt
Genere (no genere) accesos relativos a GP. El seguimiento opción Los Nombres son
Reconocido:

ninguna
No genere accesos relativos a GP.

local
Genere accesos relativos a GP para pequeños objetos de datos que no son externos o
débil. Utilice también el direccionamiento relativo a GP para objetos que hayan sido explícitamente
colocado en una pequeña sección de datos a través de un atributo de "sección".

global
En cuanto a los local, pero también generan accesos relativos a GP para pequeños objetos de datos que
son externos o débiles. Si utiliza esta opción, debe asegurarse de que todas las partes de
su programa (incluidas las bibliotecas) se compilan con el mismo -G ajuste.

datos
Genere accesos relativos a GP para todos los objetos de datos del programa. Si utiliza
esta opción, todos los segmentos de datos y BSS de su programa deben caber en 64K de
memoria y debe utilizar un script de enlazador apropiado para asignarlos dentro de la
rango direccionable del puntero global.

todos Genere direcciones relativas a GP para punteros de función y punteros de datos. Si
utiliza esta opción, todo el texto, los datos y los segmentos BSS de su programa deben
caben en 64 K de memoria y debe usar un script de enlazador apropiado para asignar
ellos dentro del rango direccionable del puntero global.

-mgpopt es equivalente a -mgpopt = localy -mno-gpopt es equivalente a -mgpopt = ninguno.

El valor predeterminado es -mgpopt excepto cuando -fpic or -fPIC se especifica para generar posición
código independiente. Tenga en cuenta que Nios II ABI no permite accesos relativos a GP desde
bibliotecas compartidas.

Es posible que deba especificar -mno-gpopt explícitamente al crear programas que incluyan
grandes cantidades de datos pequeños, incluidas grandes secciones de datos GOT. En este caso, el
El desplazamiento de 16 bits para el direccionamiento relativo a GP puede no ser lo suficientemente grande para permitir el acceso a
toda la sección de datos pequeños.

-mel
-meb
Genere código little-endian (predeterminado) o big-endian (experimental), respectivamente.

-mbypass-caché
-mno-bypass-caché
Forzar todas las instrucciones de carga y almacenamiento para omitir siempre la caché mediante el uso de variantes de E / S de
las instrucciones. El valor predeterminado es no omitir el caché.

-mno-caché-volátil
-mcaché-volátil
El acceso a la memoria volátil omite el caché utilizando las variantes de E / S de la carga y el almacenamiento
instrucciones. El valor predeterminado es no omitir el caché.

-mno-rápido-sw-div
-mfast-sw-div
No utilice la división rápida basada en tablas para números pequeños. El valor predeterminado es usar el rápido
dividir en -O3 y por encima.

-mno-hw-mul
-mhw-mul
-mno-hw-mulx
-mhw-mulx
-mno-hw-div
-mhw-div
Habilite o deshabilite la emisión de la familia de instrucciones "mul", "mulx" y "div" por el
compilador. El valor predeterminado es emitir "mul" y no emitir "div" y "mulx".

-a medida-Insn=N
-mno-personalizado-Insn
Cada -a medida-Insn=N La opción permite el uso de una instrucción personalizada con codificación. N cuando
generando código que usa Insn. Por ejemplo, -mcustom-fadds = 253 genera personalizado
instrucción 253 para operaciones de suma de punto flotante de precisión simple en lugar de la
comportamiento predeterminado del uso de una llamada a la biblioteca.

Los siguientes valores de Insn son compatibles. Salvo que se indique lo contrario, punto flotante
Se espera que las operaciones se implementen con la semántica normal IEEE 754 y
corresponden directamente a los operadores C o las funciones integradas GCC equivalentes.

Punto flotante de precisión simple:

modas, fsubs, fdivs, fmuls
Operaciones aritméticas binarias.

fnegas
Negación unaria.

fabuloso
Valor absoluto unario.

fcmpeqs, fcmmpes, fcmpgts, muestras, fcmplts, fcmpnes
Operaciones de comparación.

fmins, fmaxs
Mínimo y máximo en coma flotante. Estas instrucciones solo se generan si
-finita-solo-matemáticas está especificado.

fsqrts
Operación de raíz cuadrada unaria.

fcoss, pecados, ftanes, fatanes, fexp, azotes
Funciones trigonométricas y exponenciales de coma flotante. Estas instrucciones son
solo generado si -optimizaciones-matemáticas-divertidas también se especifica.

Punto flotante de doble precisión:

capricho, subd, fdivd, fmulo
Operaciones aritméticas binarias.

fnegd
Negación unaria.

fabuloso
Valor absoluto unario.

fcmpeqd, fcmpged, fcmpgtd, completado, fcmltd, fcmpned
Operaciones de comparación.

averigua, fmaxd
Mínima y máxima de doble precisión. Estas instrucciones solo se generan si
-finita-solo-matemáticas está especificado.

fsqrtd
Operación de raíz cuadrada unaria.

fcosd, encontrar, pies, gordo, fexpd, azotado
Funciones trigonométricas y exponenciales de doble precisión. Estas instrucciones son
solo generado si -optimizaciones-matemáticas-divertidas también se especifica.

Conversiones:

fextsd
Conversión de precisión simple a precisión doble.

fruncds
Conversión de precisión doble a precisión simple.

arreglosi, arreglar, Fixdi, arreglado
Conversión de punto flotante a tipos enteros con o sin signo, con
truncamiento hacia cero.

redondo
Conversión de punto flotante de precisión simple a entero con signo, redondeando al
entero más cercano y empates alejados de cero. Esto corresponde a la
función "__builtin_lroundf" cuando -fno-matemáticas-errno se utiliza.

flotar, flotante, flotar, flotar
Conversión de tipos enteros con o sin signo a tipos de punto flotante.

Además, todas las siguientes instrucciones de transferencia para los registros internos X e Y
debe proporcionarse para utilizar cualquiera de las instrucciones de coma flotante de doble precisión.
Las instrucciones personalizadas que toman dos operandos de origen de doble precisión esperan el primero
operando en el registro X de 64 bits. El otro operando (o solo operando de un unario
operación) se da a la instrucción aritmética personalizada con el menos significativo
la mitad en el registro fuente src1 y la mitad más significativa de src2. Una costumbre
instrucción que devuelve un resultado de doble precisión devuelve el 32 más significativo
bits en el registro de destino y la otra mitad en el registro Y de 32 bits. GCC
genera automáticamente las secuencias de código necesarias para escribir el registro X y / o leer
registrar Y cuando se utilizan instrucciones de coma flotante de doble precisión.

fwrx
Escribe. src1 en la mitad menos significativa de X y src2 en el más significativo
la mitad de X.

irónico
Escribe. src1 en Y.

frdxhi, frdxlo
Lea la mitad más o menos significativa (respectivamente) de X y guárdelo en dest.

freddy
Lea el valor de Y y guárdelo en dest.

Tenga en cuenta que puede obtener más control local sobre la generación de Nios II personalizado
instrucciones mediante el uso de "target (" custom-insn = N ")" y "target (" no-custom-insn ")"
atributos de función o pragmas.

-mcustom-fpu-cfg =nombre
Esta opción habilita un conjunto predefinido con nombre de codificaciones de instrucciones personalizadas (consulte
-a medida-Insn encima). Actualmente, se definen los siguientes conjuntos:

-mcustom-fpu-cfg = 60-1 es equivalente a: -mcustom-fmuls = 252 -mcustom-fadds = 253
-mcustom-fsubs = 254 -fsingle-precisión-constante

-mcustom-fpu-cfg = 60-2 es equivalente a: -mcustom-fmuls = 252 -mcustom-fadds = 253
-mcustom-fsubs = 254 -mcustom-fdivs = 255 -fsingle-precisión-constante

-mcustom-fpu-cfg = 72-3 es equivalente a: -mcustom-floatus = 243 -mcustom-fixsi = 244
-mcustom-floatis = 245 -mcustom-fcmpgts = 246 -mcustom-fcmples = 249 -mcustom-fcmpeqs = 250
-mcustom-fcmpnes = 251 -mcustom-fmuls = 252 -mcustom-fadds = 253 -mcustom-fsubs = 254
-mcustom-fdivs = 255 -fsingle-precisión-constante

Asignaciones de instrucciones personalizadas dadas por el individuo -a medida-Insn= anulación de opciones
los dados por -mcustom-fpu-cfg =, independientemente del orden de las opciones en el
línea de comando.

Tenga en cuenta que puede obtener más control local sobre la selección de una configuración de FPU si
usando el "target (" custom-fpu-cfg =nombre")" atributo de función o pragma.

Estos adicionales -m Hay opciones disponibles para el objetivo ELF (bare-metal) de Altera Nios II:

-mhal
Enlace con HAL BSP. Esto suprime la vinculación con el inicio en tiempo de ejecución de C proporcionado por GCC
y el código de terminación, y generalmente se usa junto con -msys-crt0 = para especificar
la ubicación del código de inicio alternativo proporcionado por HAL BSP.

-msmallc
Enlace con una versión limitada de la biblioteca C, -lsmallc, en lugar de Newlib.

-msys-crt0 =archivo de inicio
archivo de inicio es el nombre de archivo del archivo de inicio (crt0) que se utilizará al vincular. Esta opción
solo es útil junto con -mhal.

-msys-lib =biblioteca del sistema
biblioteca del sistema es el nombre de la biblioteca de la biblioteca que proporciona llamadas al sistema de bajo nivel
requerido por la biblioteca C, por ejemplo, "leer" y "escribir". Esta opción se utiliza normalmente para
enlace con una biblioteca proporcionada por un HAL BSP.

Nvidia PTX Opciones

Estas opciones están definidas para Nvidia PTX:

-m32
-m64
Genere código para ABI de 32 o 64 bits.

-mmainkernel
Enlace en código para un kernel __main. Esto es para autónomo en lugar de descargar
ejecución.

PDP-11 Opciones

Estas opciones están definidas para el PDP-11:

-mfpu
Utilice punto flotante FPP de hardware. Este es el predeterminado. (Punto flotante FIS en el
PDP-11/40 no es compatible).

-msoft-flotador
No utilice punto flotante de hardware.

-mac0
Devuelve los resultados de punto flotante en ac0 (fr0 en la sintaxis del ensamblador de Unix).

-mno-ac0
Devuelve resultados de punto flotante en la memoria. Este es el predeterminado.

-m40
Genere código para un PDP-11/40.

-m45
Genere código para un PDP-11/45. Este es el predeterminado.

-m10
Genere código para un PDP-11/10.

-mbcopy-incorporado
Utilice patrones "movmemhi" en línea para copiar la memoria. Este es el predeterminado.

-mbcopia
No utilice patrones "movmemhi" en línea para copiar la memoria.

-menta16
-mno-int32
Utilice "int" de 16 bits. Este es el predeterminado.

-menta32
-mno-int16
Utilice "int" de 32 bits.

-mfloat64
-mno-float32
Utilice "flotante" de 64 bits. Este es el predeterminado.

-mfloat32
-mno-float64
Utilice "flotante" de 32 bits.

-mabshi
Utilice el patrón "abshi2". Este es el predeterminado.

-mno-abshi
No utilice el patrón "abshi2".

-rama-cara
Finge que las ramas son caras. Esto es para experimentar con la generación de código.
solamente.

-mbranch-barato
No finjas que las ramas son caras. Este es el predeterminado.

-munix-asm
Utilice la sintaxis de ensamblador de Unix. Este es el valor predeterminado cuando se configura para pdp11 - * - bsd.

-mdec-asm
Utilice la sintaxis del ensamblador DEC. Este es el valor predeterminado cuando se configura para cualquier objetivo PDP-11
que no sea pdp11 - * - bsd.

picoChip Opciones

Estas -m Las opciones están definidas para las implementaciones de picoChip:

-mae =tipo_ae
Establezca el conjunto de instrucciones, el conjunto de registros y los parámetros de programación de instrucciones para la matriz.
tipo de elemento tipo_ae. Valores admitidos para tipo_ae en CUALQUIER, MULy dirección MAC.

-mae = CUALQUIER selecciona un tipo de EA completamente genérico. El código generado con esta opción se ejecuta
en cualquiera de los otros tipos de EA. El código no es tan eficiente como lo sería si se compilara
para un tipo de AE ​​específico, y algunos tipos de operación (por ejemplo, multiplicación) no funcionan
correctamente en todos los tipos de EA.

-mae = MUL selecciona un tipo de AE ​​MUL. Este es el tipo de AE ​​más útil para código compilado,
y es el predeterminado.

-mae = MAC selecciona un MAC AE estilo DSP. El código compilado con esta opción puede sufrir
rendimiento deficiente de la manipulación de bytes (char), ya que el DSP AE no proporciona
soporte de hardware para carga / almacenamiento de bytes.

-msymbol-como-dirección
Permita que el compilador use directamente un nombre de símbolo como dirección en una carga / tienda
instrucción, sin antes cargarla en un registro. Normalmente, el uso de este
La opción genera programas más grandes, que se ejecutan más rápido que cuando no se usa la opción.
Sin embargo, los resultados varían de un programa a otro, por lo que se deja como opción del usuario,
en lugar de estar habilitado permanentemente.

-mno-ineficientes-advertencias
Deshabilita las advertencias sobre la generación de código ineficiente. Estas advertencias pueden ser
generado, por ejemplo, al compilar código que realiza operaciones de memoria a nivel de bytes
en el tipo MAC AE. El MAC AE no tiene soporte de hardware para memoria a nivel de bytes
operaciones, por lo que todas las cargas / almacenes de bytes deben sintetizarse a partir de la carga / almacenamiento de palabras
operaciones. Esto es ineficaz y se genera una advertencia para indicar que
debe reescribir el código para evitar operaciones de bytes, o para apuntar a un tipo de AE ​​que tiene el
soporte de hardware necesario. Esta opción desactiva estas advertencias.

PowerPC Opciones

Estos se enumeran en

RL78 Opciones

-msim
Vínculos en bibliotecas de destino adicionales para respaldar el funcionamiento dentro de un simulador.

-mmul = ninguno
-mmul = g13
-mmul = rl78
Especifica el tipo de soporte de multiplicación de hardware que se utilizará. El valor predeterminado es
ninguna, que utiliza funciones de multiplicación de software. los g13 la opción es para el
El hardware multiplica / divide el periférico solo en los objetivos RL78 / G13. los rl78 opción es
para la multiplicación de hardware estándar definida en el manual del software RL78.

-m64bit-dobles
-m32bit-dobles
Haga que el tipo de datos "doble" sea de 64 bits (-m64bit-dobles) o 32 bits (-m32bit-dobles)
en tamaño. El valor predeterminado es -m32bit-dobles.

IBM RS / 6000 y PowerPC Opciones

Estas -m Las opciones están definidas para IBM RS / 6000 y PowerPC:

-mpowerpc-gpopt
-mno-powerpc-gpopt
-mpowerpc-gfxopt
-mno-powerpc-gfxopt
-mpowerpc64
-mno-powerpc64
-mmfcrf
-mno-mfcrf
-mpopcntb
-mno-popcntb
-mpopcntd
-mno-popcntd
-mfprnd
-mno-fprnd
-mcmpb
-mno-cmpb
-mmfpgpr
-mno-mfpgpr
-mhard-dfp
-mno-duro-dfp
Utilice estas opciones para especificar qué instrucciones están disponibles en el procesador que
están usando. El valor predeterminado de estas opciones se determina al configurar GCC.
Especificando el -mcpu =tipo_cpu anula la especificación de estas opciones. Nosotros
te recomiendo que uses el -mcpu =tipo_cpu opción en lugar de las opciones enumeradas anteriormente.

Especificación -mpowerpc-gpopt permite a GCC utilizar la arquitectura PowerPC opcional
instrucciones en el grupo de uso general, incluida la raíz cuadrada de punto flotante.
Especificación -mpowerpc-gfxopt permite a GCC utilizar la arquitectura PowerPC opcional
instrucciones en el grupo Gráficos, incluida la selección de punto flotante.

La -mmfcrf La opción permite a GCC generar el movimiento desde el campo de registro de condición.
instrucción implementada en el procesador POWER4 y otros procesadores que admiten el
Arquitectura PowerPC V2.01. los -mpopcntb La opción permite a GCC generar la cuenta emergente.
y la instrucción de estimación recíproca FP de doble precisión implementada en el POWER5
procesador y otros procesadores que admiten la arquitectura PowerPC V2.02. los
-mpopcntd La opción permite a GCC generar la instrucción popcount implementada en el
Procesador POWER7 y otros procesadores que admiten la arquitectura PowerPC V2.06.
La -mfprnd La opción permite a GCC generar la ronda FP a las instrucciones de números enteros
implementado en el procesador POWER5 + y otros procesadores que admiten el PowerPC
Arquitectura V2.03. los -mcmpb La opción permite a GCC generar los bytes de comparación.
instrucción implementada en el procesador POWER6 y otros procesadores que admiten el
Arquitectura PowerPC V2.05. los -mmfpgpr La opción permite a GCC generar el movimiento FP
hacia / desde las instrucciones de registro de propósito general implementadas en el procesador POWER6X y
otros procesadores que admiten la arquitectura extendida PowerPC V2.05. los -mhard-dfp
La opción permite a GCC generar las instrucciones de coma flotante decimal implementadas en
algunos procesadores POWER.

La -mpowerpc64 La opción permite a GCC generar las instrucciones adicionales de 64 bits que
se encuentran en la arquitectura PowerPC64 completa y para tratar los GPR como 64 bits, doble palabra
cantidades. GCC por defecto es -mno-powerpc64.

-mcpu =tipo_cpu
Establezca el tipo de arquitectura, el uso de registros y los parámetros de programación de instrucciones para
tipo de máquina tipo_cpu. Valores admitidos para tipo_cpu en 401, 403, 405, 405fp, 440,
440fp, 464, 464fp, 476, 476fp, 505, 601, 602, 603, 603e, 604, 604e, 620, 630, 740,
7400, 7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3, e500mc, e500mc64,
e5500, e6500, ec603e, G3, G4, G5, titán, power3, power4, power5, power5 +, power6,
poder6x, power7, power8, powerpc, potenciapc64, powerpc64ley rs64.

-mcpu = powerpc, -mcpu = powerpc64y -mcpu = powerpc64le especificar PowerPC puro de 32 bits
(ya sea endian), PowerPC big endian de 64 bits y PowerPC little endian de 64 bits
tipos de máquina de arquitectura, con un modelo de procesador genérico apropiado asumido para
propósitos de programación.

Las otras opciones especifican un procesador específico. Código generado bajo esas opciones
funciona mejor en ese procesador y es posible que no se ejecute en otros.

La -mcpu opciones habilitan o deshabilitan automáticamente las siguientes opciones:

-maltivec -mfprnd -mhard-flotador -mmfcrf -múltiple -mpopcntb -mpopcntd -mpowerpc64
-mpowerpc-gpopt -mpowerpc-gfxopt -msingle-flotador -mdoble-flotador -msimple-fpu -mstring
-mmulhw -mdlmzb -mmfpgpr -mvsx -mcripto -mdirect-mover -poder8-fusión
-poder8-vector -mquad-memoria -mquad-memoria-atómica

Las opciones particulares establecidas para cualquier CPU en particular varían entre las versiones del compilador,
dependiendo de qué configuración parezca producir un código óptimo para esa CPU; no lo hace
reflejan necesariamente las capacidades reales del hardware. Si desea establecer un
opción individual a un valor en particular, puede especificarlo después de la -mcpu opción,
como -mcpu = 970 -mno-altivec.

En AIX, el -maltivec y -mpowerpc64 opciones no están habilitadas o deshabilitadas por el -mcpu
opción en la actualidad porque AIX no tiene soporte completo para estas opciones. Puedes
aún habilítelos o deshabilítelos individualmente si está seguro de que funcionará en su
ambiente.

-mtune =tipo_cpu
Establecer los parámetros de programación de instrucciones para el tipo de máquina tipo_cpu, pero no establezca
el tipo de arquitectura o el uso del registro, como -mcpu =tipo_cpu lo hace. Los mismos valores para
tipo_cpu se utilizan para -mtune como para -mcpu. Si se especifican ambos, el código generado
utiliza la arquitectura y los registros establecidos por -mcpu, pero los parámetros de programación establecidos por
-mtune.

-mcmodel = pequeño
Genere código PowerPC64 para el modelo pequeño: el TOC está limitado a 64k.

-mcmodel = medio
Genere código PowerPC64 para el modelo medio: el TOC y otros datos estáticos pueden estar activos
a un total de 4G de tamaño.

-mcmodel = grande
Genere el código PowerPC64 para el modelo grande: el TOC puede tener un tamaño de hasta 4G. Otro
Los datos y el código solo están limitados por el espacio de direcciones de 64 bits.

-maltivec
-mno-altivec
Genere código que use (no use) instrucciones AltiVec, y también habilite el uso
de funciones integradas que permiten un acceso más directo al conjunto de instrucciones AltiVec.
Es posible que también deba configurar -mabi = altivec para ajustar el ABI actual con AltiVec ABI
mejoras

Cuándo -maltivec se usa, en lugar de -maltivec = le or -maltivec = ser, el orden de los elementos
para elementos intrínsecos de Altivec como "vec_splat", "vec_extract" y "vec_insert" coinciden
orden de los elementos de la matriz correspondiente al endianness del objetivo. Es decir, elemento
cero identifica el elemento más a la izquierda en un registro vectorial cuando se dirige a un big-endian
plataforma, e identifica el elemento más a la derecha en un registro de vector cuando se dirige a un
plataforma little-endian.

-maltivec = ser
Genere instrucciones Altivec usando el orden de elementos big-endian, independientemente de si
el objetivo es big o little-endian. Este es el valor predeterminado al apuntar a un big-endian
.

El orden de los elementos se utiliza para interpretar los números de los elementos en intrínsecos de Altivec, como
"vec_splat", "vec_extract" y "vec_insert". De forma predeterminada, estos elementos de matriz coinciden
orden correspondiente a la endianidad del objetivo.

-maltivec = le
Genere instrucciones Altivec usando el orden de elementos little-endian, independientemente de si
el objetivo es big o little-endian. Este es el valor predeterminado al apuntar un poco
plataforma endian. Actualmente, esta opción se ignora al apuntar a un big-endian
.

El orden de los elementos se utiliza para interpretar los números de los elementos en intrínsecos de Altivec, como
"vec_splat", "vec_extract" y "vec_insert". De forma predeterminada, estos elementos de matriz coinciden
orden correspondiente a la endianidad del objetivo.

-mvrsave
-mno-vrsave
Genere instrucciones VRSAVE al generar código AltiVec.

-mgen-cell-microcódigo
Genere instrucciones de microcódigo de celda.

-mwarn-cell-microcódigo
Advertir cuando se emite una instrucción de microcódigo de celda. Un ejemplo de microcódigo de celda
la instrucción es un cambio variable.

-msecure-plt
Generar código que permita ld y ld.so para crear ejecutables y bibliotecas compartidas con
secciones no ejecutables ".plt" y ".got". Esta es una opción ABI SYSV de PowerPC de 32 bits.

-mbss-plt
Genere código que use una sección BSS ".plt" que ld.so se completa y requiere ".plt"
y secciones ".got" que se pueden escribir y ejecutar. Este es un PowerPC de 32 bits
Opción SYSV ABI.

-misel
-mno-isel
Este interruptor habilita o deshabilita la generación de instrucciones ISEL.

-misel =si no
Este interruptor ha quedado obsoleto. Usar -misel y -mno-isel preferiblemente.

-mspe
-mno-spe
Este interruptor habilita o deshabilita la generación de instrucciones SPE simd.

-deparado
-mno-emparejado
Este interruptor habilita o deshabilita la generación de instrucciones SIMD EMPAREJADAS.

-mspe =si no
Esta opción ha quedado obsoleta. Usar -mspe y -mno-spe preferiblemente.

-mvsx
-mno-vsx
Genere código que use (no use) instrucciones vectoriales / escalares (VSX), y también
habilitar el uso de funciones integradas que permiten un acceso más directo al VSX
conjunto de instrucciones.

-mcripto
-mno-cripto
Habilite el uso (deshabilite) de las funciones integradas que permiten el acceso directo al
instrucciones criptográficas que se agregaron en la versión 2.07 de PowerPC ISA.

-mdirect-mover
-mno-movimiento-directo
Genere código que use (no use) las instrucciones para mover datos entre
registros de propósito general y los registros vectoriales / escalares (VSX) que se agregaron en
versión 2.07 de PowerPC ISA.

-poder8-fusión
-mno-power8-fusión
Genere código que mantenga (no mantenga) algunas operaciones enteras adyacentes para que el
Las instrucciones se pueden fusionar en los procesadores power8 y posteriores.

-poder8-vector
-mno-power8-vector
Genere código que use (no use) el vector y las instrucciones escalares que fueron
agregado en la versión 2.07 de PowerPC ISA. También habilita el uso de funciones integradas
que permiten un acceso más directo a las instrucciones vectoriales.

-mquad-memoria
-mno-quad-memoria
Genere código que use (no use) las instrucciones de memoria de cuatro palabras no atómicas.
La -mquad-memoria La opción requiere el uso del modo de 64 bits.

-mquad-memoria-atómica
-mno-quad-memoria-atómica
Genere código que use (no use) las instrucciones de memoria atómica de cuatro palabras. los
-mquad-memoria-atómica La opción requiere el uso del modo de 64 bits.

-mupper-regs-df
-mno-superior-regs-df
Genere código que use (no use) las instrucciones escalares de precisión doble que
apuntar a los 64 registros en el conjunto de registros de punto flotante vectorial / escalar que fueron
agregado en la versión 2.06 de PowerPC ISA. -mupper-regs-df está activado de forma predeterminada si
usas cualquiera de los -mcpu = power7, -mcpu = power8o -mvsx .

-mupper-regs-sf
-mno-superior-regs-sf
Genere código que use (no use) las instrucciones escalares de precisión simple que
apuntar a los 64 registros en el conjunto de registros de punto flotante vectorial / escalar que fueron
agregado en la versión 2.07 de PowerPC ISA. -mupper-regs-sf está activado de forma predeterminada si
usas cualquiera de los -mcpu = power8 or -poder8-vector .

-mupper-regs
-mno-superiores-regs
Genere código que use (no use) las instrucciones escalares que se dirigen a los 64
registros en el conjunto de registros de punto flotante vectorial / escalar, dependiendo del modelo de
la máquina.

Si -mno-superiores-regs se utiliza la opción, apaga ambos -mupper-regs-sf y
-mupper-regs-df .

-mfloat-gprs =si / simple / doble / no
-mfloat-gprs
Este interruptor habilita o deshabilita la generación de operaciones de punto flotante en el
registros de propósito general para arquitecturas que lo soportan.

El argumento si or soltero permite el uso de punto flotante de precisión simple
operaciones.

El argumento doble permite el uso de punto flotante de precisión simple y doble
operaciones.

El argumento no deshabilita las operaciones de punto flotante en los registros de propósito general.

Actualmente, esta opción solo está disponible en el MPC854x.

-m32
-m64
Genere código para entornos de 32 bits o 64 bits de objetivos Darwin y SVR4 (incluidos
GNU / Linux). El entorno de 32 bits establece int, long y pointer en 32 bits y
genera código que se ejecuta en cualquier variante de PowerPC. El entorno de 64 bits establece int en
32 bits y largo y puntero a 64 bits, y genera código para PowerPC64, como para
-mpowerpc64.

-mfull-toc
-mno-fp-en-toc
-mno-suma-en-toc
-mínimo-toc
Modificar la generación de la TOC (Tabla de contenido), que se crea para cada
Archivo ejecutable. los -mfull-toc La opción está seleccionada de forma predeterminada. En ese caso, GCC
asigna al menos una entrada TOC para cada referencia de variable no automática única en
su programa. GCC también coloca constantes de punto flotante en el TOC. Sin embargo, solo
Hay 16,384 XNUMX entradas disponibles en la tabla de contenido.

Si recibe un mensaje de error del vinculador que dice que ha desbordado el disponible
Espacio TOC, puede reducir la cantidad de espacio TOC utilizado con el -mno-fp-en-toc y
-mno-suma-en-toc . -mno-fp-en-toc evita que GCC ponga punto flotante
constantes en el TOC y -mno-suma-en-toc obliga a GCC a generar código para calcular el
suma de una dirección y una constante en tiempo de ejecución en lugar de poner esa suma en el TOC.
Puede especificar una de estas opciones o ambas. Cada uno hace que GCC produzca muy
código un poco más lento y más grande a expensas de conservar espacio TOC.

Si aún se queda sin espacio en el TOC incluso cuando especifica ambas opciones,
especificar -mínimo-toc en lugar de. Esta opción hace que GCC realice solo una entrada de TOC para
cada archivo. Cuando especifica esta opción, GCC produce un código que es más lento y más grande
pero que utiliza muy poco espacio de TOC. Es posible que desee utilizar esta opción solo en
archivos que contienen código ejecutado con menos frecuencia.

-maix64
-maix32
Habilite la ABI de AIX de 64 bits y la convención de llamada: punteros de 64 bits, tipo "largo" de 64 bits y
la infraestructura necesaria para apoyarlos. Especificando -maix64 implica -mpowerpc64,
mientras -maix32 deshabilita la ABI de 64 bits e implica -mno-powerpc64. GCC por defecto es
-maix32.

-mxl-compatible
-mno-xl-compatible
Producir código que se ajuste más a la semántica del compilador IBM XL cuando se utiliza AIX-
ABI compatible. Pasar argumentos de punto flotante a funciones prototipadas más allá del
registrar el área de guardado (RSA) en la pila además de los argumentos FPR. No asuma
que el doble más significativo en el valor doble largo de 128 bits se redondea correctamente cuando
comparando valores y convirtiéndolos al doble. Utilice nombres de símbolos XL para dobles largos
rutinas de apoyo.

La convención de llamadas de AIX se amplió pero no se documentó inicialmente para manejar una
oscuro caso de K&R C de llamar a una función que toma la dirección de sus argumentos con
menos argumentos de los declarados. Los compiladores de IBM XL acceden a argumentos de punto flotante que
no encajan en el RSA de la pila cuando se compila una subrutina sin
mejoramiento. Porque siempre almacenar argumentos de punto flotante en la pila es
ineficiente y rara vez se necesita, esta opción no está habilitada de forma predeterminada y solo
necesario al llamar a subrutinas compiladas por compiladores IBM XL sin optimización.

-mpe
Soporte IBM RS / 6000 SP Paralelo Entorno (EDUCACIÓN FÍSICA). Vincular una aplicación escrita para usar
mensaje que pasa con un código de inicio especial para permitir que la aplicación se ejecute. los
El sistema debe tener PE instalado en la ubicación estándar (/usr/lpp/ppe.poe/), o la
especificaciones El archivo debe anularse con el -specs = opción para especificar el apropiado
ubicación del directorio. El entorno paralelo no admite subprocesos, por lo que -mpe
opción y el -philo Las opciones son incompatibles.

-maligno-natural
-poder-maligno
En AIX, Darwin de 32 bits y PowerPC GNU / Linux de 64 bits, la opción -maligno-natural
anula la alineación definida por ABI de tipos más grandes, como dobles de punto flotante,
en su límite basado en el tamaño natural. La opción -poder-maligno instruye a GCC a
siga las reglas de alineación especificadas por ABI. GCC adopta la alineación estándar por defecto
definido en el ABI.

En Darwin de 64 bits, la alineación natural es la predeterminada y -poder-maligno no es
soportado.

-msoft-flotador
-mhard-flotador
Genere código que no use (use) el conjunto de registros de punto flotante. Software
Se proporciona emulación de punto flotante si utiliza la -msoft-flotador opción, y pase la
opción a GCC al vincular.

-msingle-flotador
-mdoble-flotador
Genere código para operaciones de punto flotante de precisión simple o doble.
-mdoble-flotador implica -msingle-flotador.

-msimple-fpu
No genere instrucciones "sqrt" y "div" para la unidad de punto flotante de hardware.

-mfpu =nombre
Especifique el tipo de unidad de coma flotante. Valores válidos para nombre en sp_lite (equivalente a
-msingle-flotador -msimple-fpu), dp_lite (equivalente a -mdoble-flotador -msimple-fpu),
sp_full (equivalente a -msingle-flotador), o dp_completo (equivalente a -mdoble-flotador).

-mxilinx-fpu
Realice optimizaciones para la unidad de punto flotante en Xilinx PPC 405/440.

-múltiple
-mno-múltiple
Genere código que use (no use) las instrucciones de carga de múltiples palabras y el
almacenar instrucciones de varias palabras. Estas instrucciones se generan de forma predeterminada en
Sistemas POWER, y no generados en sistemas PowerPC. No utilice -múltiple en poco
endian PowerPC, ya que esas instrucciones no funcionan cuando el procesador está en
modo little-endian. Las excepciones son PPC740 y PPC750 que permiten estos
instrucciones en modo little-endian.

-mstring
-mno-cadena
Genere código que use (no use) las instrucciones de la cadena de carga y la tienda
instrucciones de palabras de cadena para guardar múltiples registros y hacer movimientos de bloques pequeños. Estas
Las instrucciones se generan de forma predeterminada en los sistemas POWER y no se generan en PowerPC.
sistemas. No utilice -mstring en los sistemas Little-Endian PowerPC, ya que
las instrucciones no funcionan cuando el procesador está en modo little-endian. Las excepciones
son PPC740 y PPC750 que permiten estas instrucciones en modo little-endian.

-actualizar
-mno-actualización
Genere código que use (no use) la carga o almacene las instrucciones que actualizan el
registro base a la dirección de la ubicación de memoria calculada. Estas instrucciones
se generan de forma predeterminada. Si utiliza -mno-actualización, hay una pequeña ventana entre el
tiempo en que se actualiza el puntero de la pila y la dirección del marco anterior es
almacenado, lo que significa que el código que recorre el marco de la pila a través de interrupciones o señales puede
obtener datos corruptos.

-direcciones-indexadas-mavoid
-mno-evitar-direcciones-indexadas
Generar código que intente evitar (no evitar) el uso de carga o tienda indexada
instrucciones. Estas instrucciones pueden incurrir en una penalización de rendimiento en los procesadores Power6
en determinadas situaciones, como al pasar a través de matrices grandes que cruzan un 16M
Perímetro. Esta opción está habilitada de forma predeterminada cuando se apunta a Power6 y está deshabilitada
de otra manera.

-confundido-loco
-mno-fusionado-madd
Genera código que usa (no usa) el punto flotante multiplica y acumula
instrucciones. Estas instrucciones se generan de forma predeterminada si el hardware es un punto flotante.
se utiliza. El dependiente de la máquina -confundido-loco La opción ahora está asignada a la máquina.
independientes -ffp-contract = rápido opción, y -mno-fusionado-madd se asigna a
-ffp-contract = desactivado.

-mmulhw
-mno-mulhw
Genere código que use (no use) la media palabra multiplicar y multiplicar-acumular
instrucciones en los procesadores IBM 405, 440, 464 y 476. Estas instrucciones son
generado de forma predeterminada cuando se dirige a esos procesadores.

-mdlmzb
-mno-dlmzb
Genera código que usa (no usa) la búsqueda de cadenas dlmzb instrucción en el IBM
Procesadores 405, 440, 464 y 476. Esta instrucción se genera por defecto cuando
apuntando a esos procesadores.

-mno-bit-alinear
-mbit-alinear
En el Sistema V.4 y los sistemas PowerPC integrados no fuerzan las estructuras ni las uniones
que contienen campos de bits para alinearlos con el tipo base del campo de bits.

Por ejemplo, de forma predeterminada, una estructura que contiene nada más que 8 campos de bits "sin firmar" de
la longitud 1 está alineada con un límite de 4 bytes y tiene un tamaño de 4 bytes. Mediante el uso
-mno-bit-alinear, la estructura está alineada con un límite de 1 byte y tiene un tamaño de 1 byte.

-mno-estricto-alinear
-mstrict-alineación
En el Sistema V.4 y los sistemas PowerPC integrados no suponga (asuma) que la memoria no alineada
las referencias son manejadas por el sistema.

-relocalizable
-mno-reubicable
Genere código que permita (no permita) que un ejecutable estático sea reubicado en un
dirección diferente en tiempo de ejecución. Un cargador de sistema PowerPC integrado simple debería
reubicar todo el contenido de ".got2" y las ubicaciones de 4 bytes enumeradas en el ".fixup"
sección, una tabla de direcciones de 32 bits generada por esta opción. Para que esto funcione, todos
los objetos enlazados entre sí deben compilarse con -relocalizable or -mrelocatable-lib.
-relocalizable El código alinea la pila con un límite de 8 bytes.

-mrelocatable-lib
-mno-reubicable-lib
Me gusta -relocalizable, -mrelocatable-lib genera una sección ".fixup" para permitir estática
ejecutables para ser reubicados en tiempo de ejecución, pero -mrelocatable-lib no usa el
alineación de pila más pequeña de -relocalizable. Objetos compilados con -mrelocatable-lib podrían
estar vinculado con objetos compilados con cualquier combinación de los -relocalizable .

-mno-toc
-mtoc
En el Sistema V.4 y los sistemas PowerPC integrados, no suponga (asuma) que el registro 2 contiene
un puntero a un área global que apunta a las direcciones utilizadas en el programa.

-m poco
-mlittle-endian
En System V.4 y los sistemas PowerPC embebidos compilan el código para el procesador en poco
modo endian. los -mlittle-endian La opción es la misma que -m poco.

-muy grande
-mbig-endian
En el Sistema V.4 y los sistemas PowerPC embebidos compilan el código para el procesador en grandes
modo endian. los -mbig-endian La opción es la misma que -muy grande.

-mdynamic-sin-foto
En los sistemas Darwin y Mac OS X, compile el código para que no sea reubicable, pero que
sus referencias externas son reubicables. El código resultante es adecuado para
aplicaciones, pero no bibliotecas compartidas.

-mesa-base-de-una-imagen
Trate el registro utilizado para el direccionamiento PIC como de solo lectura, en lugar de cargarlo en el
prólogo para cada función. El sistema de tiempo de ejecución es responsable de inicializar este
registrarse con un valor apropiado antes de que comience la ejecución.

-mprioritize-restrictas-insns =lista de prioridades
Esta opción controla la prioridad que se asigna a la ranura de despacho restringida
instrucciones durante el segundo pase de programación. El argumento lista de prioridades toma el valor
0, 1o 2 para asignar ninguna prioridad, la más alta o la segunda más alta (respectivamente) a
instrucciones restringidas de espacio de despacho.

-msched-costly-dep =tipo_dependencia
Esta opción controla qué dependencias son consideradas costosas por el objetivo durante
programación de instrucciones. El argumento tipo_dependencia toma uno de los siguientes
valores:

no Ninguna dependencia es costosa.

todos Todas las dependencias son costosas.

true_store_to_load
Una verdadera dependencia de la tienda a la carga es costosa.

almacenar_para_cargar
Cualquier dependencia de la tienda a la carga es costosa.

número
Cualquier dependencia para la que la latencia sea mayor o igual a número es costoso

-minsert-sched-nops =esquema
Esta opción controla qué esquema de inserción NOP se usa durante la segunda programación
aprobar. El argumento esquema toma uno de los siguientes valores:

no No inserte NOP.

almohadilla Rellenar con NOP cualquier grupo de despacho que tenga espacios de emisión vacantes, de acuerdo con el
agrupación del planificador.

reagrupar_exacto
Inserte NOP para forzar a los costosos insns dependientes a grupos separados. Insertar exactamente
tantos NOP como sea necesario para forzar un insn a un nuevo grupo, de acuerdo con el estimado
agrupación de procesadores.

número
Inserte NOP para forzar a los costosos insns dependientes a grupos separados. Insertar número
NOP para forzar un insn a un nuevo grupo.

-mcall-sysv
En el Sistema V.4 y los sistemas PowerPC integrados, compile el código utilizando convenciones de llamada que
adherirse al borrador de marzo de 1995 de la interfaz binaria de la aplicación System V, PowerPC
suplemento de procesador. Este es el valor predeterminado a menos que haya configurado GCC usando
powerpc - * - eabiaix.

-mcall-sysv-eabi
-mcall-eabi
Especifique ambos -mcall-sysv y -meabi .

-mcall-sysv-noeabi
Especifique ambos -mcall-sysv y -mno-eabi .

-mcall-aixdesc
En el sistema V.4 y los sistemas PowerPC incorporados, compile el código para el sistema operativo AIX.

-mcall-linux
En el Sistema V.4 y los sistemas PowerPC integrados, compile el código para GNU basado en Linux
.

-mcall-freebsd
En System V.4 y los sistemas PowerPC embebidos compilan el código para el funcionamiento de FreeBSD.
.

-mcall-netbsd
En el Sistema V.4 y los sistemas PowerPC embebidos, compile el código para el sistema operativo NetBSD.
.

-mcall-openbsd
En el Sistema V.4 y los sistemas PowerPC embebidos compilan el código para el funcionamiento de OpenBSD.
.

-maix-estructura-retorno
Devuelve todas las estructuras en la memoria (según lo especificado por AIX ABI).

-msvr4-estructura-retorno
Devuelve estructuras de menos de 8 bytes en registros (según lo especificado por SVR4 ABI).

-mabi =tipo abi
Extienda la ABI actual con una extensión en particular o elimine dicha extensión. Válido
los valores son altivoc, sin altivec, específico, no-spe, ibmlongdoble, ieeelargodoble, elfv1,
elfv2.

-mabi = spe
Amplíe el ABI actual con las extensiones SPE ABI. Esto no cambia la ABI predeterminada,
en su lugar, agrega las extensiones SPE ABI a la ABI actual.

-mabi = no-spe
Desactive las extensiones Book-E SPE ABI para la ABI actual.

-mabi = ibmlongdouble
Cambie la ABI actual para utilizar doble largo de precisión extendida de IBM. Esto es un PowerPC
Opción SYSV ABI de 32 bits.

-mabi = ieeelongdouble
Cambie el ABI actual para utilizar IEEE Extended-Precision Long Double. Esto es un PowerPC
Opción ABI de Linux de 32 bits.

-mabi = elfv1
Cambie el ABI actual para usar ELFv1 ABI. Este es el ABI predeterminado para big-endian
PowerPC Linux de 64 bits. Anular la ABI predeterminada requiere un soporte especial del sistema y
es probable que falle de manera espectacular.

-mabi = elfv2
Cambie el ABI actual para usar ELFv2 ABI. Esta es la ABI predeterminada para
endian PowerPC Linux de 64 bits. Anular la ABI predeterminada requiere un sistema especial
apoyo y es probable que falle de manera espectacular.

-mprototipo
-mno-prototipo
En el Sistema V.4 y los sistemas PowerPC integrados, se asume que todas las llamadas al argumento variable
las funciones están debidamente prototipadas. De lo contrario, el compilador debe insertar una instrucción
antes de cada llamada no prototipada para establecer o borrar el bit 6 del registro de código de condición
("CR") para indicar si los valores de punto flotante se pasan en el punto flotante
se registra en caso de que la función tome argumentos variables. Con -mprototipo, solo llamadas
a funciones de argumento de variable prototipadas establecer o borrar el bit.

-msim
En los sistemas PowerPC integrados, suponga que el módulo de inicio se llama sim-crt0.o y
que las bibliotecas C estándar son libsim.a y libc.a. Este es el valor predeterminado para
powerpc - * - eabisim configuraciones.

-mmvme
En los sistemas PowerPC integrados, suponga que el módulo de inicio se llama crt0.o y
las bibliotecas C estándar son libmvme.a y libc.a.

-loco
En los sistemas PowerPC integrados, suponga que el módulo de inicio se llama crt0.o y
las bibliotecas C estándar son libads.a y libc.a.

-mi cuchillo amarillo
En los sistemas PowerPC integrados, suponga que el módulo de inicio se llama crt0.o y
las bibliotecas C estándar son libyk.a y libc.a.

-mvxworks
En System V.4 y sistemas PowerPC integrados, especifique que está compilando para un
Sistema VxWorks.

-miembro
En los sistemas PowerPC integrados, establezca el bit "PPC_EMB" en el encabezado de las banderas ELF para indicar
esa eabi se utilizan reubicaciones extendidas.

-meabi
-mno-eabi
En System V.4 y los sistemas PowerPC embebidos se adhieren (no) al Embedded
Interfaz binaria de aplicaciones (EABI), que es un conjunto de modificaciones al sistema
Especificaciones V.4. Seleccionar -meabi significa que la pila está alineada a un 8 bytes
límite, se llama una función "__eabi" desde "principal" para configurar el entorno EABI,
y -msdatos La opción puede usar "r2" y "r13" para señalar dos datos pequeños separados
áreas. Seleccionar -mno-eabi significa que la pila está alineada con un límite de 16 bytes, no
La función de inicialización de EABI se llama desde "principal", y la -msdatos opción solo usa
"r13" para apuntar a una única área de datos pequeña. los -meabi La opción está activada de forma predeterminada si
configurado GCC utilizando uno de los powerpc * - * - eabi * .

-msdata = eabi
En el Sistema V.4 y los sistemas PowerPC integrados, coloque una pequeña "const" inicializada global y
datos estáticos en la sección ".sdata2", a la que apunta el registro "r2". Poner pequeño
datos globales y estáticos no "const" inicializados en la sección ".sdata", que es
apuntado por el registro "r13". Coloque pequeños datos globales y estáticos no inicializados en el
La sección ".sbss", que se encuentra junto a la sección ".sdata". los -msdata = eabi opción
es incompatible con el -relocalizable opción. La -msdata = eabi La opción también establece la
-miembro .

-msdata = sysv
En System V.4 y sistemas PowerPC integrados, coloque pequeños datos globales y estáticos en el
Sección ".sdata", a la que apunta el registro "r13". Ponga pequeño sin inicializar
datos globales y estáticos en la sección ".sbss", que se encuentra junto a ".sdata"
sección. los -msdata = sysv La opción es incompatible con la -relocalizable .

-msdata = predeterminado
-msdatos
En System V.4 y sistemas PowerPC integrados, si -meabi se utiliza, compile el mismo código
as -msdata = eabi, de lo contrario compile el código igual que -msdata = sysv.

-msdata = datos
En System V.4 y sistemas PowerPC integrados, coloque pequeños datos globales en ".sdata"
sección. Coloque pequeños datos globales no inicializados en la sección ".sbss". No utilice
sin embargo, registre "r13" para tratar datos pequeños. Este es el comportamiento predeterminado a menos que
otros -msdatos se utilizan opciones.

-msdata = ninguno
-mno-sdatos
En los sistemas PowerPC integrados, coloque todos los datos estáticos y globales inicializados en el ".data"
sección, y todos los datos no inicializados en la sección ".bss".

-mblock-move-inline-limit =número
Inline todos los movimientos de bloque (como llamadas a "memcpy" o copias de estructura) menos que o
igual a número bytes. El valor mínimo para número es de 32 bytes en destinos de 32 bits y 64
bytes en destinos de 64 bits. El valor predeterminado es específico del objetivo.

-G número
En los sistemas PowerPC integrados, coloque los elementos globales y estáticos menores o iguales a número
bytes en las secciones de datos pequeños o BSS en lugar de en la sección de datos normales o BSS.
De forma predeterminada, número es 8. los -G número El conmutador también se pasa al enlazador. Todos los módulos
debe compilarse con el mismo -G número .

-mregnames
-mno-renombres
En System V.4 y los sistemas PowerPC integrados, no emiten (no) nombres de registro en el
Salida en lenguaje ensamblador usando formas simbólicas.

-mlongcall
-mno-llamada larga
De forma predeterminada, suponga que todas las llamadas están lejos para que una más larga y costosa
Se requiere secuencia de llamada. Esto es necesario para llamadas de más de 32 megabytes.
(33,554,432 bytes) desde la ubicación actual. Se genera una llamada corta si el
El compilador sabe que la llamada no puede estar tan lejos. Esta configuración puede ser anulada por
el atributo de función "shortcall", o por "#pragma llamada larga(0) ".

Algunos enlazadores son capaces de detectar llamadas fuera de rango y generar código de pegamento en
la mosca. En estos sistemas, las llamadas largas son innecesarias y generan un código más lento. Como
de este escrito, el enlazador AIX puede hacer esto, al igual que el enlazador GNU para PowerPC / 64. Eso
También se planea agregar esta característica al enlazador GNU para sistemas PowerPC de 32 bits.

En los sistemas Darwin / PPC, "#pragma longcall" genera "jbsr callee, L42", más un biblioteca
isla (código de pegamento). Las dos direcciones de destino representan el destinatario y la sucursal
isla. El enlazador Darwin / PPC prefiere la primera dirección y genera un "bl callee"
si la instrucción PPC "bl" llega directamente al destinatario de la llamada; de lo contrario, el enlazador
genera "bl L42" para llamar a la isla de sucursales. La isla de rama se adjunta al
cuerpo de la función de llamada; calcula la dirección completa de 32 bits del destinatario y
salta a él.

En los sistemas Mach-O (Darwin), esta opción dirige la emisión del compilador al pegamento para
cada llamada directa, y el enlazador Darwin decide si usarla o descartarla.

En el futuro, GCC puede ignorar todas las especificaciones de llamadas largas cuando se sabe que el enlazador
generar pegamento.

-mtls-marcadores
-mno-tls-marcadores
Marque (no marque) las llamadas a "__tls_get_addr" con una reubicación que especifique la función
argumento. La reubicación permite al enlazador asociar de manera confiable la llamada de función con
instrucciones de configuración de argumentos para la optimización de TLS, que a su vez permite a GCC mejorar
programar la secuencia.

-philo
Agrega soporte para subprocesos múltiples con el hilos de rosca Biblioteca. Esta opción establece banderas para
tanto el preprocesador como el enlazador.

-mrecip
-mno-receta
Esta opción permite el uso de la estimación recíproca y la estimación de raíz cuadrada recíproca
instrucciones con pasos adicionales de Newton-Raphson para aumentar la precisión en lugar de
hacer una división o raíz cuadrada y dividir para argumentos de punto flotante. Deberías usar
las -matemáticas-rápidas opción al usar -mrecip (o al menos -optimizaciones-matemáticas-divertidas,
-sólo-matemáticas-finitas, -matemáticas-recíprocas y -fno-trapping-matemáticas). Tenga en cuenta que mientras
El rendimiento de la secuencia es generalmente mayor que el rendimiento de la secuencia no
instrucción recíproca, la precisión de la secuencia se puede reducir hasta en 2 ulp
(es decir, el inverso de 1.0 es igual a 0.99999994) para raíces cuadradas recíprocas.

-mrecip =optar
Esta opción controla qué instrucciones de estimación recíproca se pueden utilizar. optar es un
lista de opciones separadas por comas, que pueden estar precedidas por un "!" para invertir la opción:

todos Habilite todas las instrucciones de estimación.

tu préstamo estudiantil
Habilite las instrucciones predeterminadas, equivalentes a -mrecip.

ninguna
Deshabilite todas las instrucciones de estimación, equivalente a -mno-receta.

div Habilite las instrucciones de aproximación recíproca para simple y doble
precisión.

divid
Habilite las instrucciones de aproximación recíproca de precisión simple.

división
Habilite las instrucciones de aproximación recíproca de doble precisión.

rqrt
Habilite las instrucciones de aproximación de raíz cuadrada recíproca para
Precisión doble.

rqrtf
Habilite las instrucciones de aproximación de raíz cuadrada recíproca de precisión simple.

rqrtd
Habilite las instrucciones de aproximación de raíz cuadrada recíproca de doble precisión.

Así por ejemplo, -mrecip = todo,! rsqrtd habilita toda la estimación recíproca
instrucciones, excepto las instrucciones "FRSQRTE", "XSRSQRTEDP" y "XVRSQRTEDP"
que manejan los cálculos de raíz cuadrada recíproca de doble precisión.

-mrecip-precisión
-mno-recip-precisión
Suponga (no asuma) que las instrucciones de estimación recíproca proporcionan mayor
estimaciones de precisión de lo que exige el PowerPC ABI. Seleccionar -mcpu = power6,
-mcpu = power7 or -mcpu = power8 selecciona automáticamente -mrecip-precisión. El doble-
Las instrucciones de estimación de raíz cuadrada de precisión no se generan de forma predeterminada en
máquinas de precisión, ya que no proporcionan una estimación que converja después de tres
pasos.

-mveclibabi =tipo
Especifica el tipo de ABI que se utilizará para vectorizar intrínsecos mediante una biblioteca externa.
El único tipo admitido en la actualidad es masa, que especifica utilizar IBM's Mathematical
Bibliotecas del subsistema de aceleración (MASS) para vectorizar intrínsecos utilizando
Bibliotecas. Actualmente, GCC emite llamadas a "acosd2", "acosf4", "acoshd2", "acoshf4",
"asind2", "asinf4", "asinhd2", "asinhf4", "atan2d2", "atan2f4", "atand2", "atanf4",
"atanhd2", "atanhf4", "cbrtd2", "cbrtf4", "cosd2", "cosf4", "coshd2", "coshf4",
"erfcd2", "erfcf4", "erfd2", "erff4", "exp2d2", "exp2f4", "expd2", "expf4", "expm1d2",
"expm1f4", "hypotd2", "hypotf4", "lgammad2", "lgammaf4", "log10d2", "log10f4",
"log1pd2", "log1pf4", "log2d2", "log2f4", "logd2", "logf4", "powd2", "powf4", "sind2",
"sinf4", "sinhd2", "sinhf4", "sqrtd2", "sqrtf4", "tand2", "tanf4", "tanhd2" y
"tanhf4" al generar código para power7. Ambos -ftree-vectorizar y
-optimizaciones-matemáticas-divertidas también debe estar habilitado. Las bibliotecas MASS deben ser
especificado en el momento del enlace.

-mfriz
-mno-frizz
Genere (no genere) la instrucción "friz" cuando el -optimizaciones-matemáticas-divertidas
La opción se utiliza para optimizar el redondeo de valores de punto flotante a enteros de 64 bits y
de vuelta al punto flotante. La instrucción "friz" no devuelve el mismo valor si la
El número de punto flotante es demasiado grande para caber en un entero.

-mpointers-a-funciones-anidadas
-mno-punteros-a-funciones-anidadas
Genere (no genere) código para cargar el registro de cadena estática ("r11") cuando
llamar a través de un puntero en AIX y sistemas Linux de 64 bits donde un puntero de función
apunta a un descriptor de 3 palabras que da la dirección de la función, el valor de TOC que se cargará en
el registro "r2" y el valor de la cadena estática que se cargará en el registro "r11". los
-mpointers-a-funciones-anidadas está activado de forma predeterminada. No puede llamar a través de punteros a
funciones anidadas o punteros a funciones compiladas en otros lenguajes que utilizan la
cadena estática si usas -mno-punteros-a-funciones-anidadas.

-msave-toc-indirecto
-mno-guardar-toc-indirecto
Genere (no genere) código para guardar el valor TOC en la ubicación reservada de la pila
en el prólogo de la función si la función llama a través de un puntero en AIX y 64 bits
Sistemas Linux. Si el valor de TOC no se guarda en el prólogo, se guarda justo antes
la llamada a través del puntero. los -mno-guardar-toc-indirecto La opción es la predeterminada.

-mcompat-align-parm
-mno-compatibilidad-alineación-parámetro
Genere (no genere) código para pasar parámetros de estructura con una alineación máxima
de 64 bits, para compatibilidad con versiones anteriores de GCC.

Las versiones anteriores de GCC (anteriores a 4.9.0) no alineaban incorrectamente un parámetro de estructura
en un límite de 128 bits cuando esa estructura contiene un miembro que requiere 128 bits
alineación. Esto se corrige en versiones más recientes de GCC. Esta opción se puede utilizar
para generar código que sea compatible con funciones compiladas con versiones anteriores de
CCG.

La -mno-compatibilidad-alineación-parámetro La opción es la predeterminada.

RX Opciones

Estas opciones de línea de comandos se definen para destinos RX:

-m64bit-dobles
-m32bit-dobles
Haga que el tipo de datos "doble" sea de 64 bits (-m64bit-dobles) o 32 bits (-m32bit-dobles)
en tamaño. El valor predeterminado es -m32bit-dobles. Note El hardware de punto flotante RX solo funciona
en valores de 32 bits, por lo que el valor predeterminado es -m32bit-dobles.

-fpu
-nofpu
Habilita (-fpu) o deshabilita (-nofpu) el uso de hardware de punto flotante RX. los
el valor predeterminado está habilitado para la serie RX600 y deshabilitado para la serie RX200.

Las instrucciones de coma flotante solo se generan para valores de coma flotante de 32 bits,
Sin embargo, el hardware FPU no se utiliza para dobles si el -m64bit-dobles opción es
usado.

Note Si -fpu la opción está habilitada entonces -optimizaciones-matemáticas-divertidas también está habilitado
automáticamente. Esto se debe a que las instrucciones de RX FPU no son seguras en sí mismas.

-mcpu =nombre
Selecciona el tipo de CPU RX al que se dirigirá. Actualmente se admiten tres tipos, el
genérico RX600 y RX200 hardware de la serie y el específico RX610 UPC. El valor predeterminado es
RX600.

La única diferencia entre RX600 y RX610 es que el RX610 no es compatible con el
Instrucción "MVTIPL".

La RX200 La serie no tiene una unidad de punto flotante de hardware, por lo que -nofpu está habilitado
de forma predeterminada cuando se selecciona este tipo.

-mbig-endian-datos
-mlittle-endian-datos
Almacene los datos (pero no el código) en formato big-endian. El valor predeterminado es
-mlittle-endian-datos, es decir, para almacenar datos en formato little-endian.

-msmall-data-limit =N
Especifica el tamaño máximo en bytes de variables globales y estáticas que se pueden colocar
en el área de datos pequeños. El uso del área de datos pequeña puede generar
código, pero el tamaño del área es limitado y depende del programador asegurarse de que
la zona no se desborda. Además, cuando se utiliza el área de datos pequeños, uno de los
Los registros (normalmente "r13") están reservados para su uso apuntando a esta área, por lo que no es
ya está disponible para su uso por el compilador. Esto podría resultar en más lento y / o más grande
código si las variables se insertan en la pila en lugar de mantenerse en este registro.

Tenga en cuenta que las variables comunes (variables que no se han inicializado) y las constantes son
no se colocan en el área de datos pequeños, ya que se asignan a otras secciones en el
salida ejecutable.

El valor predeterminado es cero, lo que desactiva esta función. Tenga en cuenta que esta función no
habilitado de forma predeterminada con niveles de optimización más altos (-O2 etc) debido a la
efectos potencialmente perjudiciales de reservar un registro. Depende del programador
para experimentar y descubrir si esta función beneficia a su programa. Ver
la descripción de la -mpid opción para una descripción de cómo el registro real
mantenga presionado el puntero de área de datos pequeña.

-msim
-mno-sim
Utilice el tiempo de ejecución del simulador. El valor predeterminado es usar el tiempo de ejecución específico de la placa libgloss.

-mas100-sintaxis
-mno-as100-sintaxis
Al generar la salida del ensamblador, use una sintaxis que sea compatible con el AS100 de Renesas
ensamblador. Esta sintaxis también puede ser manejada por el ensamblador GAS, pero tiene algunos
restricciones para que no se genere de forma predeterminada.

-mmax-constante-tamaño =N
Especifica el tamaño máximo, en bytes, de una constante que se puede utilizar como operando en
una instrucción RX. Aunque el conjunto de instrucciones RX permite constantes de hasta 4
bytes de longitud que se utilizarán en las instrucciones, un valor más largo equivale a un
instrucción. Por lo tanto, en algunas circunstancias puede ser beneficioso restringir el tamaño de
constantes que se utilizan en las instrucciones. Las constantes que son demasiado grandes son en cambio
colocado en un grupo constante y referenciado mediante direccionamiento indirecto de registros.

El valor N puede estar entre 0 y 4. Un valor de 0 (el predeterminado) o 4 significa que
Se permiten constantes de cualquier tamaño.

-relajarse
Habilite la relajación del enlazador. La relajación del enlazador es un proceso mediante el cual el enlazador intenta
para reducir el tamaño de un programa encontrando versiones más cortas de varias instrucciones.
Desactivado por defecto.

-registro-menta =N
Especifique el número de registros que se reservarán para las funciones del manejador de interrupciones rápidas. los
propuesta de N puede estar entre 0 y 4. Un valor de 1 significa que el registro "r13" está reservado
para uso exclusivo de manejadores de interrupciones rápidas. Un valor de 2 reservas "r13" y
"r12". Un valor de 3 reservas "r13", "r12" y "r11", y un valor de 4 reservas "r13"
a través de "r10". Un valor de 0, el predeterminado, no reserva ningún registro.

-msave-acc-en-interrupciones
Especifica que las funciones del manejador de interrupciones deben preservar el registro del acumulador.
Esto solo es necesario si el código normal puede usar el registro del acumulador, por ejemplo
porque realiza multiplicaciones de 64 bits. El valor predeterminado es ignorar el acumulador
ya que esto hace que los manejadores de interrupciones sean más rápidos.

-mpid
-mno-pid
Permite la generación de datos independientes de la posición. Cuando está habilitado cualquier acceso a
los datos constantes se realizan a través de un desplazamiento de una dirección base mantenida en un registro. Esta
permite determinar la ubicación de datos constantes en tiempo de ejecución sin necesidad de
el ejecutable que se va a reubicar, lo cual es un beneficio para las aplicaciones integradas con
limitaciones de memoria. Los datos que se pueden modificar no se ven afectados por esta opción.

Tenga en cuenta que el uso de esta función reserva un registro, generalmente "r13", para los datos constantes
dirección base. Esto puede resultar en un código más lento y / o más grande, especialmente en complicados
funciones.

El registro real elegido para mantener la dirección constante de la base de datos depende de si
las -mpequeño-límite-de-datos y / o la -registro-menta las opciones de la línea de comandos están habilitadas.
Comenzando con el registro "r13" y siguiendo hacia abajo, los registros se asignan primero
para satisfacer los requisitos de -registro-menta, entonces -mpid y finalmente
-mpequeño-límite-de-datos. Por lo tanto, es posible que el registro de área de datos pequeños sea "r8"
si ambos -registro-menta = 4 y -mpid se especifican en la línea de comando.

De forma predeterminada, esta función no está habilitada. El valor predeterminado se puede restaurar a través del -mno-pid
opción de línea de comandos.

-mno-advertir-múltiples-interrupciones-rápidas
-advertir-múltiples-interrupciones-rápidas
Evita que GCC emita un mensaje de advertencia si encuentra más de una interrupción rápida
manejador cuando está compilando un archivo. El valor predeterminado es emitir una advertencia por cada extra
Se ha encontrado un manejador de interrupciones rápidas, ya que RX solo admite una de estas interrupciones.

Nota: La opción genérica de línea de comandos de GCC -fijo-reg tiene un significado especial para el RX
puerto cuando se utiliza con el atributo de función "interrupción". Este atributo indica un
función destinada a procesar interrupciones rápidas. GCC asegura que solo usa los registros
"r10", "r11", "r12" y / o "r13" y siempre que el uso normal del
Los registros correspondientes se han restringido a través del -fijo-reg or -registro-menta
opciones de la línea de comandos.

S / 390 y serie z Opciones

Estos son el -m opciones definidas para la arquitectura S / 390 y zSeries.

-mhard-flotador
-msoft-flotador
Utilice (no utilice) las instrucciones y registros de punto flotante de hardware para
operaciones puntuales. Cuando -msoft-flotador se especifica, funciona en libgcc.a se utilizan para
realizar operaciones de punto flotante. Cuando -mhard-flotador se especifica, el compilador
genera instrucciones de punto flotante IEEE. Este es el predeterminado.

-mhard-dfp
-mno-duro-dfp
Utilice (no utilice) las instrucciones de hardware de coma flotante decimal para
operaciones de coma flotante. Cuando -mno-duro-dfp se especifica, funciona en libgcc.a en
utilizado para realizar operaciones de coma flotante decimal. Cuando -mhard-dfp se especifica, el
El compilador genera instrucciones de hardware de coma flotante decimal. Este es el predeterminado
para -marcha = z9-ec o superior.

-mlong-doble-64
-mlong-doble-128
Estos interruptores controlan el tamaño del tipo "doble largo". Un tamaño de 64 bits hace que
tipo "doble largo" equivalente al tipo "doble". Este es el predeterminado.

-mbalaje
-mno-cadena trasera
Almacene (no almacene) la dirección del marco de la persona que llama como puntero de backchain en el
marco de pila del destinatario. Es posible que se necesite una cadena secundaria para permitir la depuración utilizando herramientas que
no entiendo la información del marco de llamada DWARF 2. Cuando -mno-empaquetado-pila será en
efecto, el puntero de la cadena trasera se almacena en la parte inferior del marco de la pila; cuando
pila empaquetada está en efecto, la cadena de retroceso se coloca en la palabra más alta de la
Área de guardado de registros de 96/160 bytes.

En general, el código compilado con -mbalaje es compatible con llamadas con código compilado con
-mmo-cadena trasera; sin embargo, el uso de la backchain con fines de depuración generalmente requiere
que todo el binario está construido con -mbalaje. Tenga en cuenta que la combinación de
-mbalaje, pila empaquetada y -mhard-flotador no es apoyado. Para construir un
uso del kernel de linux -msoft-flotador.

El valor predeterminado es no mantener la cadena secundaria.

pila empaquetada
-mno-empaquetado-pila
Use (no use) el diseño de pila empaquetada. Cuando -mno-empaquetado-pila se especifica, el
El compilador usa todos los campos del área de guardado del registro de 96/160 bytes solo para su
propósito predeterminado; los campos no utilizados todavía ocupan espacio en la pila. Cuando pila empaquetada is
especificado, las ranuras de guardado de registro están densamente empaquetadas en la parte superior del registro de guardado
zona; el espacio no utilizado se reutiliza para otros fines, lo que permite un uso más eficiente de
el espacio de pila disponible. Sin embargo cuando -mbalaje también está en efecto, el más alto
La palabra del área de guardado siempre se usa para almacenar la cadena trasera y la dirección de retorno.
El registro siempre se guarda dos palabras debajo de la cadena secundaria.

Siempre que no se utilice la cadena de retroceso del marco de pila, el código generado con pila empaquetada
es compatible con llamadas con código generado con -mno-empaquetado-pila. Tenga en cuenta que algunos no FSF
versiones de GCC 2.95 para código generado S / 390 o zSeries que utiliza el marco de pila
backchain en tiempo de ejecución, no solo con fines de depuración. Dicho código no se llama
compatible con código compilado con pila empaquetada. Además, tenga en cuenta que la combinación de
-mbalaje, pila empaquetada y -mhard-flotador no es apoyado. Para construir un
uso del kernel de linux -msoft-flotador.

El valor predeterminado es no utilizar el diseño de pila empaquetada.

-msmall-ejecutivo
-mno-pequeño-ejecutivo
Genere (o no genere) código usando la instrucción "bras" para hacer una subrutina
llamadas. Esto solo funciona de manera confiable si el tamaño total del ejecutable no excede los 64k.
El valor predeterminado es utilizar la instrucción "basr" en su lugar, que no tiene esta
limitación.

-m64
-m31
Cuándo -m31 se especifica, generar código compatible con GNU / Linux para S / 390 ABI. Cuando
-m64 se especifica, generar código compatible con GNU / Linux para zSeries ABI. Esta
permite a GCC, en particular, generar instrucciones de 64 bits. Para el s390 objetivos, el
por defecto es -m31, Mientras que el s390x objetivos predeterminados a -m64.

-mzarch
-colina baja
Cuándo -mzarch está especificado, genere el código usando las instrucciones disponibles en
z / Arquitectura. Cuando -colina baja está especificado, genere código usando las instrucciones
disponible en ESA / 390. Tenga en cuenta que -colina baja no es posible con -m64. Al generar
código compatible con GNU / Linux para S / 390 ABI, el valor predeterminado es -colina baja. Al generar
código compatible con GNU / Linux para zSeries ABI, el valor predeterminado es -mzarch.

-mmvcle
-mno-mvcle
Genere (o no genere) código usando la instrucción "mvcle" para realizar el bloque
se mueve. Cuando -mno-mvcle se especifica, utilice un bucle "mvc" en su lugar. Este es el predeterminado
a menos que optimice el tamaño.

-mdebug
-mno-depuración
Imprima (o no imprima) información de depuración adicional al compilar. El valor predeterminado es
para no imprimir información de depuración.

-march =tipo cpu
Genere código que se ejecute en tipo cpu, que es el nombre de un sistema que representa un
cierto tipo de procesador. Posibles valores para tipo cpu en g5, g6, z900, z990, z9-109,
z9-ec, z10, z196, zEC12y z13. Al generar código usando las instrucciones
disponible en z / Architecture, el valor predeterminado es -marcha = z900. De lo contrario, el valor predeterminado es
-marcha = g5.

-mtune =tipo cpu
Sintonizar tipo cpu todo lo aplicable sobre el código generado, excepto el ABI
y el conjunto de instrucciones disponibles. La lista de tipo cpu los valores son los mismos que para
-marcha. El valor predeterminado es el que se utiliza para -marcha.

-mtpf-rastreo
-mno-tpf-rastreo
Generar código que agrega (no agrega) en ramas específicas de TPF OS para rastrear rutinas
en el sistema operativo. Esta opción está desactivada de forma predeterminada, incluso cuando se compila para el
Sistema operativo TPF.

-confundido-loco
-mno-fusionado-madd
Genera código que usa (no usa) el punto flotante multiplica y acumula
instrucciones. Estas instrucciones se generan de forma predeterminada si el hardware es un punto flotante.
se utiliza.

-mwarn-framesize =tamaño del marco
Emite una advertencia si la función actual excede el tamaño de marco dado. Porque esto es
una verificación en tiempo de compilación, no tiene por qué ser un problema real cuando se ejecuta el programa. Eso
está destinado a identificar funciones que probablemente causen un desbordamiento de pila. Está
útil para ser utilizado en un entorno con un tamaño de pila limitado, por ejemplo, el kernel de Linux.

-mwarn-pila dinámica
Emite una advertencia si la función llama a "alloca" o usa matrices de tamaño dinámico. Esta
generalmente es una mala idea con un tamaño de pila limitado.

-mstack-guard =guardia de pila
-mstack-size =tamaño de la pila
Si se proporcionan estas opciones, el back-end del S / 390 emite instrucciones adicionales en el
función prólogo que dispara una trampa si el tamaño de la pila es guardia de pila bytes por encima del
tamaño de la pila (recuerde que la pila en S / 390 crece hacia abajo). Si el guardia de pila
se omite la opción más pequeña de 2 más grande que el tamaño del marco del compilado
se elige la función. Estas opciones están diseñadas para ayudar a depurar la pila
problemas de desbordamiento. El código emitido adicionalmente provoca solo una pequeña sobrecarga y
por lo tanto, también se puede utilizar en sistemas similares a la producción sin un mayor rendimiento
degradación. Los valores dados deben ser potencias exactas de 2 y tamaño de la pila tiene que ser
mayor que guardia de pila sin superar los 64k. Para ser eficiente, el extra
el código asume que la pila comienza en una dirección alineada con el valor
dada por tamaño de la pila. guardia de pila La opción solo se puede utilizar junto con
tamaño de la pila.

-mhotpatch =medias palabras,post-medias palabras
Si la opción hotpatch está habilitada, se genera un prólogo de la función de "hot-patch" para
todas las funciones en la unidad de compilación. La etiqueta de la función se antepone con el dado
número de instrucciones NOP de dos bytes (medias palabras, máximo 1000000). Después de la
etiqueta, 2 * post-medias palabras se añaden bytes, utilizando las instrucciones similares a NOP más grandes
la arquitectura lo permite (máximo 1000000).

Si ambos argumentos son cero, el hotpatching está deshabilitado.

Esta opción se puede anular para funciones individuales con el atributo "hotpatch".

Puntuación Opciones

Estas opciones están definidas para las implementaciones de Score:

-meb
Compile código para el modo big-endian. Este es el predeterminado.

-mel
Compila código para el modo little-endian.

-mnhwloop
Desactive la generación de instrucciones "bcnz".

-muls
Habilite la generación de instrucciones de almacenamiento y carga no alineadas.

-mmac
Habilite el uso de instrucciones de acumulación múltiple. Desactivado por defecto.

-mscore5
Especifique SCORE5 como arquitectura de destino.

-mscore5u
Especifique SCORE5U de la arquitectura de destino.

-mscore7
Especifique SCORE7 como arquitectura de destino. Este es el predeterminado.

-mscore7d
Especifique SCORE7D como arquitectura de destino.

SH Opciones

Estas -m Se definen opciones para las implementaciones de SH:

-m1 Genere código para SH1.

-m2 Genere código para SH2.

-m2e
Genere código para SH2e.

-m2a-nofpu
Genere código para SH2a sin FPU, o para SH2a-FPU de tal manera que el
no se utiliza la unidad de coma flotante.

-m2a-único-solo
Genere código para SH2a-FPU, de tal manera que ningún punto flotante de doble precisión
se utilizan operaciones.

-m2a-single
Genere código para SH2a-FPU asumiendo que la unidad de punto flotante es de precisión simple
modo por defecto.

-m2a
Genere código para SH2a-FPU asumiendo que la unidad de punto flotante es de doble precisión
modo por defecto.

-m3 Genere código para SH3.

-m3e
Genere código para SH3e.

-m4-nofpu
Genere código para SH4 sin una unidad de punto flotante.

-m4-solo-solo
Genere código para el SH4 con una unidad de punto flotante que solo admita
aritmética de precisión.

-m4-sencillo
Genere código para el SH4 asumiendo que la unidad de punto flotante está en modo de precisión simple
por defecto

-m4 Genere código para SH4.

-m4-100
Genere código para SH4-100.

-m4-100-nofpu
Genere código para SH4-100 de tal manera que no se utilice la unidad de punto flotante.

-m4-100-sencillo
Genere código para SH4-100 asumiendo que la unidad de punto flotante está en modo de precisión simple
por defecto

-m4-100-solo-único
Genere código para SH4-100 de tal manera que ningún punto flotante de doble precisión
se utilizan operaciones.

-m4-200
Genere código para SH4-200.

-m4-200-nofpu
Genere código para SH4-200 sin de tal manera que la unidad de punto flotante no sea
usado.

-m4-200-sencillo
Genere código para SH4-200 asumiendo que la unidad de punto flotante está en modo de precisión simple
por defecto

-m4-200-solo-único
Genere código para SH4-200 de tal manera que ningún punto flotante de doble precisión
se utilizan operaciones.

-m4-300
Genere código para SH4-300.

-m4-300-nofpu
Genere código para SH4-300 sin de tal manera que la unidad de punto flotante no sea
usado.

-m4-300-sencillo
Genere código para SH4-300 de tal manera que ningún punto flotante de doble precisión
se utilizan operaciones.

-m4-300-solo-único
Genere código para SH4-300 de tal manera que ningún punto flotante de doble precisión
se utilizan operaciones.

-m4-340
Genere código para SH4-340 (sin MMU, sin FPU).

-m4-500
Genere código para SH4-500 (sin FPU). Pases -isa = sh4-nofpu al ensamblador.

-m4a-nofpu
Genere código para SH4al-dsp, o para SH4a de tal manera que el punto flotante
la unidad no se utiliza.

-m4a-único-solo
Genere código para el SH4a, de tal manera que ningún punto flotante de doble precisión
se utilizan operaciones.

-m4a-single
Genere código para SH4a asumiendo que la unidad de punto flotante es de precisión simple
modo por defecto.

-m4a
Genere código para SH4a.

-m4al
Igual que -m4a-nofpu, excepto que pasa implícitamente -dsp al ensamblador. GCC
no genera ninguna instrucción DSP en este momento.

-m5-32medios
Genere código de 32 bits para SHmedia.

-m5-32media-nofpu
Genere código de 32 bits para SHmedia de tal manera que la unidad de punto flotante no sea
usado.

-m5-64medios
Genere código de 64 bits para SHmedia.

-m5-64media-nofpu
Genere código de 64 bits para SHmedia de tal manera que la unidad de punto flotante no sea
usado.

-m5-compacto
Genere código para SHcompact.

-m5-compacto-nofpu
Genere código para SHcompact de tal manera que no se utilice la unidad de punto flotante.

-megabyte Compile código para el procesador en modo big-endian.

-ml Compile código para el procesador en modo little-endian.

-mdalign
Alinee dobles en límites de 64 bits. Tenga en cuenta que esto cambia las convenciones de llamadas,
y, por lo tanto, algunas funciones de la biblioteca C estándar no funcionan a menos que vuelva a compilar
es primero con -mdalign.

-relajarse
Acorte algunas referencias de direcciones en el momento del enlace, cuando sea posible; usa la opción del enlazador
-relajarse.

-mbigtable
Utilice compensaciones de 32 bits en tablas de "conmutadores". El valor predeterminado es utilizar compensaciones de 16 bits.

-mbitops
Habilite el uso de instrucciones de manipulación de bits en SH2A.

-mfmovd
Habilite el uso de la instrucción "fmovd". Cheque -mdalign para las restricciones de alineación.

-mrenesas
Cumplir con las convenciones de llamadas definidas por Renesas.

-mno-renesas
Cumplir con las convenciones de llamadas definidas para GCC antes de las convenciones de Renesas
estaban disponibles. Esta opción es la predeterminada para todos los destinos de la cadena de herramientas SH.

-mnomacsave
Marque el registro "MAC" como "call-clobbered", incluso si -mrenesas es dado.

-mieee
-mno-ieee
Controle el cumplimiento de IEEE de las comparaciones de punto flotante, lo que afecta el manejo
de casos en los que el resultado de una comparación no está ordenado. Por defecto -mieee is
habilitado implícitamente. Si -finita-solo-matemáticas está habilitado -mno-ieee está implícitamente establecido,
lo que da como resultado comparaciones de mayor-igual y menor-igual en coma flotante más rápidas. los
La configuración implcit se puede anular especificando -mieee or -mno-ieee.

-minline-ic_invalidate
Código en línea para invalidar las entradas de la caché de instrucciones después de configurar la función anidada
trampolines. Esta opción no tiene ningún efecto si -modo de usuario está en efecto y el seleccionado
opción de generación de código (p. ej. -m4) no permite el uso de la instrucción "icbi".
Si la opción de generación de código seleccionada no permite el uso del "icbi"
instrucción, y -modo de usuario no está en efecto, el código en línea manipula el
matriz de direcciones de caché de instrucciones directamente con una escritura asociativa. Esto no solo
requiere el modo privilegiado en tiempo de ejecución, pero también falla si la línea de caché se ha
mapeado a través de la TLB y no se ha mapeado.

-dimensionar
Volcar el tamaño y la ubicación de la instrucción en el código de ensamblaje.

-mpadstruct
Esta opción está obsoleta. Rellena las estructuras a múltiplos de 4 bytes, que es
incompatible con el SH ABI.

-modelo -matómico =modelo
Establece el modelo de operaciones atómicas y parámetros adicionales separados por comas
lista. Para obtener detalles sobre las funciones integradas atómicas, consulte __atómico Incorporados.
Se admiten los siguientes modelos y parámetros:

ninguna
Deshabilite las secuencias atómicas generadas por el compilador y emita llamadas de biblioteca para atomic
operaciones. Este es el valor predeterminado si el destino no es "sh * - * - linux *".

suave-gusa
Genere secuencias atómicas de software gUSA compatibles con GNU / Linux para la construcción atómica
en funciones. Las secuencias atómicas generadas requieren apoyo adicional del
código de manejo de interrupciones / excepciones del sistema y solo son adecuados para SH3 * y
Sistemas de un solo núcleo SH4 *. Esta opción está habilitada de forma predeterminada cuando el objetivo es
"sh * - * - linux *" y SH3 * o SH4 *. Cuando el objetivo es SH4A, esta opción también
utiliza parcialmente las instrucciones atómicas de hardware "movli.l" y "movco.l" para
crear código más eficiente, a menos que estricto está especificado.

suave-tcb
Genere secuencias atómicas de software que utilicen una variable en el control de subprocesos.
cuadra. Esta es una variación de las secuencias de gUSA que también se puede utilizar en SH1 *
y objetivos SH2 *. Las secuencias atómicas generadas requieren apoyo adicional de
el código de manejo de interrupciones / excepciones del sistema y solo son adecuados para
sistemas de un solo núcleo. Al utilizar este modelo, el gbr-offset = el parámetro tiene que ser
especificado también.

imask suave
Genere secuencias atómicas de software que deshabiliten temporalmente las interrupciones configurando
"SR.IMASK = 1111". Este modelo funciona solo cuando el programa se ejecuta en modo privilegiado
y solo es adecuado para sistemas de un solo núcleo. Apoyo adicional del
No se requiere el código de manejo de interrupciones / excepciones del sistema. Este modelo es
habilitado por defecto cuando el destino es "sh * - * - linux *" y SH1 * o SH2 *.

duro-llcs
Genere secuencias atómicas de hardware usando las instrucciones "movli.l" y "movco.l"
solamente. Esto solo está disponible en SH4A y es adecuado para sistemas multinúcleo.
Dado que las instrucciones de hardware solo admiten el acceso de variables atómicas de 32 bits a 8
o las variables de 16 bits se emulan con accesos de 32 bits. Código compilado con este
La opción también es compatible con otro modelo de software atómico interrupción / excepción
sistemas de manipulación si se ejecuta en un sistema SH4A. Apoyo adicional del
El código de manejo de interrupciones / excepciones del sistema no es necesario para este modelo.

gbr-offset =
Este parámetro especifica el desplazamiento en bytes de la variable en el control de subprocesos.
estructura de bloque que debe ser utilizada por las secuencias atómicas generadas cuando el
suave-tcb Se ha seleccionado el modelo. Para otros modelos, este parámetro se ignora.
El valor especificado debe ser un múltiplo entero de cuatro y en el rango 0-1020.

estricto
Este parámetro evita el uso mixto de varios modelos atómicos, incluso si son
compatible, y hace que el compilador genere secuencias atómicas de la especificada
solo modelo.

-mtas
Genere el código de operación "tas.b" para "__atomic_test_and_set". Tenga en cuenta que dependiendo de la
configuración particular de hardware y software, esto puede degradar el rendimiento general
debido a los vaciados de línea de la caché de operandos que están implícitos en la instrucción "tas.b". Sobre
procesadores SH4A de varios núcleos, la instrucción "tas.b" debe utilizarse con precaución, ya que
puede resultar en la corrupción de datos para ciertas configuraciones de caché.

-prefergot
Al generar código independiente de la posición, emita llamadas a funciones usando la compensación global
Tabla en lugar de la Tabla de vinculación de procedimientos.

-modo de usuario
-mno-modo-usuario
No permita (permita) que el compilador genere código en modo privilegiado. Especificando
-modo de usuario también implica -mno-inline-ic_invalidar si el código en línea no funciona
en modo usuario. -modo de usuario es el valor predeterminado cuando el objetivo es "sh * - * - linux *". Si el
el objetivo es SH1 * o SH2 * -modo de usuario no tiene ningún efecto, ya que no hay modo de usuario.

-multcost =número
Establezca el costo a asumir para multiplicar insn.

-mdiv =estrategia
Establezca la estrategia de división que se utilizará para las operaciones de división de enteros. Para SHmedia
estrategia puede ser uno de:

fp Realiza la operación en coma flotante. Tiene una latencia muy alta, pero necesita
solo unas pocas instrucciones, por lo que podría ser una buena opción si su código tiene suficiente
ILP fácilmente explotable para permitir al compilador programar el punto flotante
instrucciones junto con otras instrucciones. La división por cero provoca un
excepción de punto flotante.

inv Usa operaciones enteras para calcular el inverso del divisor y luego
multiplica el dividendo por el inverso. Esta estrategia permite CSE y izar
del cálculo inverso. La división por cero calcula un resultado no especificado,
pero no atrapa.

inv: minlat
Una variante de inv dónde, si no se han encontrado oportunidades de CSE o de izado, o si
toda la operación se ha izado al mismo lugar, las últimas etapas del
El cálculo inverso se entrelaza con la multiplicación final para reducir el total
latencia, a expensas de usar algunas instrucciones más y, por lo tanto, ofrecer menos
programar oportunidades con otro código.

llamar al
Llama a una función de biblioteca que generalmente implementa la inv: minlat estrategia. Esta
proporciona una alta densidad de código para compilaciones "m5- * media-nofpu".

llamar2
Utiliza un punto de entrada diferente de la misma función de biblioteca, donde asume que un
ya se ha configurado el puntero a una tabla de búsqueda, lo que expone la carga del puntero
a CSE y optimizaciones de elevación de código.

inv: llamar
inv: call2
inv: fp
Ingrese al inv algoritmo para la generación de código inicial, pero si el código permanece
no optimizado, volver al llamar al, llamar2o fp estrategias, respectivamente. Tenga en cuenta que
El efecto secundario potencialmente atrapante de la división por cero es llevado por un
instrucción, por lo que es posible que todas las instrucciones enteras se extraigan,
pero el marcador del efecto secundario permanece donde está. Una recombinación para
operaciones de punto flotante o una llamada no es posible en ese caso.

inv20u
inv20l
Variantes del inv: minlat estrategia. En el caso de que el cálculo inverso sea
no separados de la multiplicación, aceleran la división donde encaja el dividendo
en 20 bits (signo más cuando corresponda) insertando una prueba para omitir una serie de
operaciones en este caso; esta prueba ralentiza el caso de dividendos mayores.
inv20u asume que el caso de un dividendo tan pequeño es poco probable, y inv20l
asume que es probable.

Para objetivos distintos a SHmedia estrategia puede ser uno de:

llamada-div1
Llama a una función de biblioteca que utiliza la instrucción de división de un solo paso "div1" para
realizar la operación. La división por cero calcula un resultado no especificado y no
no trampa. Este es el valor predeterminado, excepto para SH4, SH2A y SHcompact.

llamar-fp
Llama a una función de biblioteca que realiza la operación en flotante de doble precisión
punto. La división por cero provoca una excepción de punto flotante. Este es el predeterminado
para SHcompact con FPU. Especificando esto para objetivos que no tienen doble
precisión FPU tiene como valor predeterminado "call-div1".

tabla de llamadas
Llama a una función de biblioteca que usa una tabla de búsqueda para divisores pequeños y el
Instrucción "div1" con distinción de mayúsculas y minúsculas para divisores más grandes. División por cero
calcula un resultado no especificado y no captura. Este es el valor predeterminado para SH4.
Especificar esto para objetivos que no tienen valores predeterminados de instrucciones de cambio dinámico
a "call-div1".

Cuando no se ha especificado una estrategia de división, la estrategia predeterminada se selecciona según
en el objetivo actual. Para SH2A, la estrategia predeterminada es utilizar "divs" y "divu"
instrucciones en lugar de llamadas a funciones de biblioteca.

-acumular-argumentos-salientes
Reserve espacio una vez para los argumentos salientes en el prólogo de la función en lugar de alrededor
cada llamada. Generalmente beneficioso para el rendimiento y el tamaño. También es necesario para relajarse.
para evitar cambiar el marco de la pila en torno al código condicional.

-mdivsi3_libfunc =nombre
Establezca el nombre de la función de biblioteca utilizada para la división con signo de 32 bits en nombre . Esto
solo afecta al nombre utilizado en el llamar al y inv: llamar estrategias de división, y la
El compilador todavía espera los mismos conjuntos de registros de entrada / salida / golpeados como si esto
opción no estaban presentes.

-mrango-fijo =rango de registro
Genera código tratando el rango de registro dado como registros fijos. Un registro fijo
es uno que el asignador de registros no puede utilizar. Esto es útil al compilar kernel
código. Un rango de registro se especifica como dos registros separados por un guión. Múltiple
los rangos de registro se pueden especificar separados por una coma.

-direccionamiento-indizado
Habilite el uso del modo de direccionamiento indexado para SHmedia32 / SHcompact. Esto es sólo
seguro si el hardware y / o el sistema operativo implementan semántica envolvente de 32 bits para el indexado
modo de direccionamiento. La arquitectura permite la implementación de procesadores con 64 bits.
MMU, que el sistema operativo podría usar para obtener direccionamiento de 32 bits, pero dado que no hay hardware actual
La implementación admite esta o cualquier otra forma de hacer que el modo de direccionamiento indexado sea seguro.
para usar en la ABI de 32 bits, el valor predeterminado es -mno-indexado-direccionamiento.

-mgettrcost =número
Establezca el costo asumido para la instrucción "gettr" en número. El valor predeterminado es 2 si
-mpt-fijo está en efecto, 100 en caso contrario.

-mpt-fijo
Suponga que las instrucciones "pt *" no quedan atrapadas. Esto generalmente genera un código mejor programado,
pero no es seguro en el hardware actual. La definición de arquitectura actual dice que
"ptabs" y "ptrel" cuando el objetivo y el 3 son 3. Esto tiene el
efecto involuntario de hacer que sea inseguro programar estas instrucciones antes de un
rama, o sacarlos de un bucle. Por ejemplo, "__do_global_ctors", una parte de
libgcc que ejecuta constructores al inicio del programa, llama a funciones en una lista que es
delimitado por -1. Con el -mpt-fijo opción, las "ptabs" se realizan antes de probar
contra -1. Eso significa que todos los constructores se ejecutan un poco más rápido, pero cuando el
bucle llega al final de la lista, el programa se bloquea porque "ptabs" carga -1 en un
registro de destino.

Dado que esta opción no es segura para cualquier hardware que implemente la arquitectura actual
especificación, el valor predeterminado es -mno-pt-fijo. A menos que se especifique explícitamente con
-mgettrcost, -mno-pt-fijo también implica -mgettrcost = 100; esto disuade el registro
asignación desde el uso de registros de destino para almacenar enteros ordinarios.

-símbolos-mínimos
Suponga que los símbolos pueden no ser válidos. Símbolos de funciones ordinarias generados por el compilador
siempre son válidos para cargar con "movi" / "shori" / "ptabs" o "movi" / "shori" / "ptrel", pero
con trucos de ensamblador y / o enlazador es posible generar símbolos que causen
"ptabs" o "ptrel" para atrapar. Esta opción solo es significativa cuando -mno-pt-fijo será en
efecto. Previene la CSE de bloques básicos cruzados, el izado y la mayoría de la programación de símbolos.
cargas. El valor predeterminado es -mno-símbolos-inválidos.

-costo-de-rama =número
Asumir número para ser el costo de una instrucción de rama. Números más altos hacen que el compilador
intente generar más código sin sucursales si es posible. Si no se especifica, el valor es
seleccionado en función del tipo de procesador para el que se está compilando.

-mzdcbranch
-mno-zdcbranch
Suponga (no asuma) que las instrucciones de bifurcación condicionales de desplazamiento cero "bt" y
"bf" son rápidos. Si -mzdcbranch se especifica, el compilador prefiere desplazamiento cero
secuencias de código de rama. Esto está habilitado de forma predeterminada al generar código para SH4 y
SH4A. Se puede deshabilitar explícitamente especificando -mno-zdcbranch.

-mcbranch-force-delay-ranura
Forzar el uso de ranuras de retardo para ramas condicionales, lo que rellena la ranura de retardo
con un "nop" si no se puede encontrar una instrucción adecuada. Por defecto, esta opción es
discapacitado. Se puede habilitar para evitar errores de hardware como se encuentra en el original
SH7055.

-confundido-loco
-mno-fusionado-madd
Genera código que usa (no usa) el punto flotante multiplica y acumula
instrucciones. Estas instrucciones se generan de forma predeterminada si el hardware es un punto flotante.
se utiliza. El dependiente de la máquina -confundido-loco La opción ahora está asignada a la máquina.
independientes -ffp-contract = rápido opción, y -mno-fusionado-madd se asigna a
-ffp-contract = desactivado.

-mfsca
-mno-fsca
Permitir o no permitir que el compilador emita la instrucción "fsca" para seno y coseno
aproximaciones. La opción -mfsca debe usarse en combinación con
-optimizaciones-matemáticas-divertidas. Está habilitado de forma predeterminada al generar código para SH4A.
Usar -mno-fsca desactiva las aproximaciones de seno y coseno incluso si
-optimizaciones-matemáticas-divertidas está en efecto.

-mfsrra
-mno-fsrra
Permitir o no permitir que el compilador emita la instrucción "fsrra" para el cuadrado recíproco
aproximaciones de raíz. La opción -mfsrra debe usarse en combinación con
-optimizaciones-matemáticas-divertidas y -finita-solo-matemáticas. Está habilitado por defecto cuando
generando código para SH4A. Utilizando -mno-fsrra desactiva la raíz cuadrada recíproca
aproximaciones incluso si -optimizaciones-matemáticas-divertidas y -finita-solo-matemáticas tiene
efecto.

-pretend-cmove
Prefiere las ramas condicionales de desplazamiento cero para la instrucción de movimiento condicional
patrones. Esto puede resultar en un código más rápido en el procesador SH4.

Solaris 2 Opciones

Estas -m las opciones son compatibles con Solaris 2:

-mclear-hwcap
-mclear-hwcap le dice al compilador que elimine las capacidades de hardware generadas por el
Ensamblador Solaris. Esto solo es necesario cuando los archivos de objeto usan extensiones ISA no
compatible con la máquina actual, pero compruebe en tiempo de ejecución si desea utilizarlos o no.

-texto-mimpuro
-texto-mimpuro, utilizado además de -compartido, le dice al compilador que no pase -z texto a
el vinculador al vincular un objeto compartido. Con esta opción, puede vincular la posición-
código dependiente en un objeto compartido.

-texto-mimpuro suprime "las reubicaciones permanecen contra asignables pero no modificables
Secciones "mensaje de error del vinculador. Sin embargo, las reubicaciones necesarias activan la copia en
escribir, y el objeto compartido no se comparte realmente entre procesos. En lugar de
usando -texto-mimpuro, debe compilar todo el código fuente con -fpic or -fPIC.

Estos conmutadores son compatibles además de los anteriores en Solaris 2:

-pthreads
Agregue soporte para subprocesos múltiples utilizando la biblioteca de subprocesos POSIX. Esta opción establece
indicadores para el preprocesador y el enlazador. Esta opción no afecta el hilo.
seguridad del código objeto producido por el compilador o de las bibliotecas suministradas con él.

-philo
Este es un sinónimo de -pthreads.

SPARC Opciones

Estas -m las opciones son compatibles con SPARC:

-mno-aplicación-registros
-mapa-registros
Especificar -mapa-registros para generar salida utilizando los registros globales 2 a 4, que
el SPARC SVR4 ABI se reserva para aplicaciones. Como el registro global 1, cada global
Los registros 2 a 4 se tratan como un registro asignable que es golpeado por
llamadas a funciones. Este es el predeterminado.

Para ser totalmente compatible con SVR4 ABI a costa de una pérdida de rendimiento, especifique
-mno-aplicación-registros. Debe compilar las bibliotecas y el software del sistema con esta opción.

-mplano
-mno-plano
Con -mplano, el compilador no genera instrucciones para guardar / restaurar y usa una
Modelo de ventana "plana" o de registro único. Este modelo es compatible con el regular
registrar modelo de ventana. Los registros locales y los registros de entrada (0--5) todavía están
se tratan como registros de "llamadas guardadas" y se guardan en la pila según sea necesario.

Con -mno-plano (predeterminado), el compilador genera instrucciones para guardar / restaurar (excepto
para funciones de hoja). Este es el modo de funcionamiento normal.

-mfpu
-mhard-flotador
Genere una salida que contenga instrucciones de punto flotante. Este es el predeterminado.

-mno-fpu
-msoft-flotador
Generar una salida que contiene llamadas a las bibliotecas de punto flotante. Advertencia: el requisito
las bibliotecas no están disponibles para todos los destinos SPARC. Normalmente las instalaciones del
Se utiliza el compilador C habitual de la máquina, pero esto no se puede hacer directamente en
Compilacion. Debe hacer sus propios arreglos para proporcionar una biblioteca adecuada
funciones para la compilación cruzada. Los objetivos incrustados sparc - * - aout y sparclite - * - *
proporcionan soporte de software de punto flotante.

-msoft-flotador cambia la convención de llamada en el archivo de salida; por lo tanto, es solo
útil si compilas todos de un programa con esta opción. En particular, necesita
compilar libgcc.a, la biblioteca que viene con GCC, con -msoft-flotador para esto
trabajar.

-mhard-quad-flotador
Genere una salida que contenga instrucciones de coma flotante de cuatro palabras (doble largo).

-msoft-quad-flotador
Genere una salida que contenga llamadas de biblioteca para punto flotante de cuatro palabras (doble largo)
instrucciones. Las funciones llamadas son las especificadas en SPARC ABI. Este es el
predeterminado.

Al momento de escribir este artículo, no hay implementaciones SPARC que tengan soporte de hardware para
las instrucciones de coma flotante de cuatro palabras. Todos invocan a un manipulador de trampas para uno de
estas instrucciones, y luego el gestor de trampas emula el efecto de la instrucción.
Debido a la sobrecarga del controlador de trampas, esto es mucho más lento que llamar a la biblioteca ABI
rutinas. Por lo tanto, la -msoft-quad-flotador La opción es la predeterminada.

-mno-dobles-no-alineados
-dobles-inmunalineados
Suponga que los dobles tienen una alineación de 8 bytes. Este es el predeterminado.

Con -dobles-inmunalineados, GCC asume que los dobles tienen alineación de 8 bytes solo si
están contenidos en otro tipo, o si tienen una dirección absoluta. De lo contrario
asume que tienen una alineación de 4 bytes. Especificar esta opción evita algunos
problemas de compatibilidad con el código generado por otros compiladores. No es el predeterminado
porque da como resultado una pérdida de rendimiento, especialmente para el código de punto flotante.

-modo-usuario
-mno-modo-usuario
No genere código que solo pueda ejecutarse en modo supervisor. Esto es relevante solo para
la instrucción "casa" emitida por el procesador LEON3. Este es el predeterminado.

-mno-estructuras-más rápidas
-mfaster-estructuras
Con -mfaster-estructuras, el compilador asume que las estructuras deben tener 8 bytes
alineación. Esto permite el uso de pares de instrucciones "ldd" y "std" para las copias.
en la asignación de estructura, en lugar del doble de pares "ld" y "st". sin embargo, el
el uso de esta alineación modificada viola directamente el SPARC ABI. Por lo tanto, está destinado
solo para uso en destinos donde el desarrollador reconoce que su código resultante es
no directamente en línea con las reglas de la ABI.

-mcpu =tipo_cpu
Establezca el conjunto de instrucciones, el conjunto de registros y los parámetros de programación de instrucciones para
tipo de máquina tipo_cpu. Valores admitidos para tipo_cpu en v7, ciprés, v8, superparc,
hiperparque, León, leon3, leon3v7, sparclita, f930, f934, sparlite86x, chispeante,
tsc701, v9, ultrasparc, ultrasparc3, Niágara, Niágara2, Niágara3 y Niágara4.

Las cadenas de herramientas nativas de Solaris y GNU / Linux también respaldan el valor nativo, que selecciona
la mejor opción de arquitectura para el procesador host. -mcpu = nativo no tiene efecto si
GCC no reconoce el procesador.

Los parámetros de programación de instrucciones predeterminados se utilizan para valores que seleccionan un
arquitectura y no una implementación. Estos son v7, v8, sparclita, chispeante, v9.

A continuación, se muestra una lista de cada arquitectura admitida y sus implementaciones admitidas.

ciprés v7, leon3v7

v8 supersparc, hipersparc, leones, leon3

sparclita
f930, f934, sparclite86x

chispeante
tsc701

v9 ultrasparc, ultrasparc3, ​​niágara, niágara2, niágara3, niágara4

De forma predeterminada (a menos que se configure de otra manera), GCC genera código para la variante V7 del
Arquitectura SPARC. Con -mcpu = ciprés, el compilador lo optimiza adicionalmente para
el chip Cypress CY7C602, como se utiliza en la serie SPARCStation / SPARCServer 3xx. Este es
También es apropiado para SPARCStation 1, 2, IPX, etc.

Con -mcpu = v8, GCC genera código para la variante V8 de la arquitectura SPARC. los
La única diferencia con el código V7 es que el compilador emite el número entero multiplicar y
instrucciones de división de enteros que existen en SPARC-V8 pero no en SPARC-V7. Con
-mcpu = supersparc, el compilador lo optimiza adicionalmente para el chip SuperSPARC, como
utilizado en las series SPARCStation 10, 1000 y 2000.

Con -mcpu = sparclite, GCC genera código para la variante SPARClite de SPARC
arquitectura. Esto agrega el paso de multiplicar enteros, dividir enteros y escanear ("ffs")
instrucciones que existen en SPARClite pero no en SPARC-V7. Con -mcpu = f930, la
El compilador lo optimiza adicionalmente para el chip Fujitsu MB86930, que es el original
SPARClite, sin FPU. Con -mcpu = f934, el compilador lo optimiza adicionalmente para
el chip Fujitsu MB86934, que es el SPARClite más reciente con FPU.

Con -mcpu = sparclet, GCC genera código para la variante SPARClet de SPARC
arquitectura. Esto suma el entero multiplicar, multiplicar / acumular, dividir entero
instrucciones de paso y escaneo ("ffs") que existen en SPARClet pero no en SPARC-V7. Con
-mcpu = tsc701, el compilador lo optimiza adicionalmente para el chip TEMIC SPARClet.

Con -mcpu = v9, GCC genera código para la variante V9 de la arquitectura SPARC. Esta
agrega instrucciones de movimiento de punto flotante y entero de 64 bits, 3 puntos flotantes adicionales
registros de códigos de condición e instrucciones de movimiento condicionales. Con -mcpu = ultrasparc,
el compilador lo optimiza adicionalmente para los chips Sun UltraSPARC I / II / IIi. Con
-mcpu = ultrasparc3, el compilador lo optimiza adicionalmente para Sun UltraSPARC
Fichas III / III + / IIIi / IIIi + / IV / IV +. Con -mcpu = niágara, el compilador además
lo optimiza para chips Sun UltraSPARC T1. Con -mcpu = niagara2, el compilador
además, lo optimiza para chips Sun UltraSPARC T2. Con -mcpu = niagara3, la
Además, el compilador lo optimiza para los chips Sun UltraSPARC T3. Con -mcpu = niagara4,
el compilador lo optimiza además para chips Sun UltraSPARC T4.

-mtune =tipo_cpu
Establecer los parámetros de programación de instrucciones para el tipo de máquina tipo_cpu, pero no establezca
el conjunto de instrucciones o conjunto de registros que la opción -mcpu =tipo_cpu hace.

Los mismos valores para -mcpu =tipo_cpu puede ser utilizado para -mtune =tipo_cpu, pero el único
Los valores útiles son aquellos que seleccionan una implementación de CPU en particular. Esos son
ciprés, superparc, hiperparque, León, leon3, leon3v7, f930, f934, sparlite86x,
tsc701, ultrasparc, ultrasparc3, Niágara, Niágara2, Niágara3 y Niágara4. Con
cadenas de herramientas nativas de Solaris y GNU / Linux, nativo también se puede utilizar.

-mv8plus
-mno-v8plus
Con -mv8plus, GCC genera código para SPARC-V8 + ABI. La diferencia con el V8
ABI es que los registros global y out se consideran de 64 bits de ancho. Esto está habilitado
de forma predeterminada en Solaris en modo de 32 bits para todos los procesadores SPARC-V9.

-mvis
-mno-vis
Con -mvis, GCC genera código que aprovecha las ventajas de UltraSPARC Visual
Extensiones del conjunto de instrucciones. El valor predeterminado es -mno-vis.

-mvis2
-mno-vis2
Con -mvis2, GCC genera código que aprovecha la versión 2.0 de UltraSPARC
Extensiones del conjunto de instrucciones visuales. El valor predeterminado es -mvis2 al apuntar a una CPU que
admite este tipo de instrucciones, como UltraSPARC-III y posteriores. Configuración -mvis2 también
conjuntos -mvis.

-mvis3
-mno-vis3
Con -mvis3, GCC genera código que aprovecha la versión 3.0 de UltraSPARC
Extensiones del conjunto de instrucciones visuales. El valor predeterminado es -mvis3 al apuntar a una CPU que
admite este tipo de instrucciones, como niagara-3 y posteriores. Configuración -mvis3 también establece
-mvis2 y -mvis.

-mcbcond
-mno-cbcond
Con -mcbcond, GCC genera código que aprovecha las ventajas de comparar y bifurcar
instrucciones, como se define en Sparc Architecture 2011. El valor predeterminado es -mcbcond cuando
apuntando a una CPU que admita tales instrucciones, como niagara-4 y posteriores.

-mpopc
-mno-popc
Con -mpopc, GCC genera código que aprovecha la población UltraSPARC
cuenta instrucción. El valor predeterminado es -mpopc al apuntar a una CPU que admita tales
instrucciones, como Niagara-2 y posteriores.

-mfmaf
-mno-fmaf
Con -mfmaf, GCC genera código que aprovecha las ventajas de UltraSPARC Fused Multiply-
Agregue extensiones de punto flotante. El valor predeterminado es -mfmaf al apuntar a una CPU que
admite este tipo de instrucciones, como Niagara-3 y posteriores.

-mfix-at697f
Habilite la solución alternativa documentada para la errata única del procesador Atmel AT697F
(que corresponde a la errata # 13 del procesador AT697E).

-mfix-ut699
Habilite las soluciones documentadas para las erratas de punto flotante y la caché de datos
anular erratas del procesador UT699.

Estas -m Las opciones son compatibles además de lo anterior en los procesadores SPARC-V9 en 64 bits.
ambientes:

-m32
-m64
Genere código para un entorno de 32 bits o 64 bits. El entorno de 32 bits establece int,
de largo y puntero a 32 bits. El entorno de 64 bits establece int en 32 bits y long y
puntero a 64 bits.

-mcmodel =que
Establezca el modelo de código en uno de

medio
El modelo de código medio / bajo: direcciones de 64 bits, los programas deben estar vinculados en el bajo 32
bits de memoria. Los programas se pueden vincular estática o dinámicamente.

medio
El modelo de código medio / medio: direcciones de 64 bits, los programas deben estar vinculados en la baja
44 bits de memoria, los segmentos de texto y datos deben tener un tamaño inferior a 2 GB y
el segmento de datos debe estar ubicado dentro de los 2 GB del segmento de texto.

Medany
El modelo de código Medio / En cualquier lugar: direcciones de 64 bits, los programas se pueden vincular en cualquier lugar
en la memoria, los segmentos de texto y datos deben tener un tamaño inferior a 2 GB y los datos
El segmento debe estar ubicado a 2 GB del segmento de texto.

Embedany
El modelo de código Medium / Anywhere para sistemas integrados: direcciones de 64 bits, el texto
y los segmentos de datos deben tener un tamaño inferior a 2 GB, ambos comenzando en cualquier lugar de la memoria
(determinado en el momento del enlace). El registro global% g4 apunta a la base de los datos
segmento. Los programas están vinculados estáticamente y PIC no es compatible.

-modelo-de-memoria =modelo de memoria
Establezca el modelo de memoria vigente en el procesador en uno de

tu préstamo estudiantil
El modelo de memoria predeterminado para el procesador y el sistema operativo.

rmo Orden de memoria relajada

pso Pedido parcial de tienda

tso Pedido total de la tienda

sc Consistencia secuencial

Estos modelos de memoria se definen formalmente en el Apéndice D de la arquitectura Sparc V9
manual, como se establece en el campo "PSTATE.MM" del procesador.

-mstack-sesgo
-mno-pila-sesgo
Con -mstack-sesgo, GCC asume que el puntero de pila, y el puntero de marco si está presente,
están compensados ​​por -2047, que se deben volver a agregar al hacer referencias a marcos de pila. Esta
es el predeterminado en el modo de 64 bits. De lo contrario, suponga que no existe tal compensación.

SPU Opciones

Estas -m las opciones son compatibles con la SPU:

-advertir-reloc
-merror-reloc
El cargador para SPU no maneja reubicaciones dinámicas. Por defecto, GCC da una
error cuando genera código que requiere una reubicación dinámica. -mno-error-reloc
desactiva el error, -advertir-reloc genera una advertencia en su lugar.

-msafe-dma
-munsafe-dma
Las instrucciones que inician o prueban la finalización de DMA no deben reordenarse con
respecto a las cargas y almacenes de la memoria a la que se accede. Con -munsafe-dma
debe utilizar la palabra clave "volátil" para proteger los accesos a la memoria, pero eso puede llevar a
código ineficiente en lugares donde se sabe que la memoria no cambia. En lugar de marcar
la memoria como volátil, puede utilizar -msafe-dma para decirle al compilador que trate el DMA
instrucciones que pueden afectar a toda la memoria.

-consejos-de-rama
De forma predeterminada, GCC genera una instrucción de sugerencia de bifurcación para evitar bloqueos de canalización para
ramas siempre tomadas o probablemente tomadas. No se genera una pista a menos de 8
instrucciones lejos de su rama. Hay pocas razones para deshabilitarlos, excepto por
fines de depuración o para hacer un objeto un poco más pequeño.

-msmall-mem
-m grande-mem
De forma predeterminada, GCC genera código asumiendo que las direcciones nunca superan los 18 bits.
Con -m grande-mem Se genera un código que asume una dirección completa de 32 bits.

-mstdmain
De forma predeterminada, GCC se vincula con el código de inicio que asume la función principal de estilo SPU
interfaz (que tiene una lista de parámetros poco convencional). Con -mstdmain, Enlaces GCC
su programa contra el código de inicio que asume una interfaz de estilo C99 para "principal",
incluyendo una copia local de cadenas "argv".

-mrango-fijo =rango de registro
Genera código tratando el rango de registro dado como registros fijos. Un registro fijo
es uno que el asignador de registros no puede utilizar. Esto es útil al compilar kernel
código. Un rango de registro se especifica como dos registros separados por un guión. Múltiple
los rangos de registro se pueden especificar separados por una coma.

-mea32
-mea64
Compile el código asumiendo que los punteros al espacio de direcciones PPU al que se accede a través de "__ea"
Los calificadores de espacio de direcciones con nombre tienen un ancho de 32 o 64 bits. El valor predeterminado es 32 bits.
Como se trata de una opción de cambio de ABI, se debe compilar todo el código objeto de un ejecutable
con el mismo ajuste.

-maddress-space-conversión
-mno-conversión-espacio-de-direcciones
Permitir / no permitir tratar el espacio de direcciones "__ea" como un superconjunto de la dirección genérica
espacio. Esto permite conversiones de tipos explícitos entre "__ea" y un puntero genérico, así como
conversiones implícitas de punteros genéricos a punteros "__ea". El valor predeterminado es permitir
conversiones de puntero de espacio de direcciones.

-mcache-size =tamaño del caché
Esta opción controla la versión de libgcc que el compilador vincula a un ejecutable
y selecciona una caché administrada por software para acceder a las variables en la dirección "__ea"
espacio con un tamaño de caché particular. Posibles opciones para tamaño del caché en 8, 16, 32, 64
y 128. El tamaño de caché predeterminado es 64 KB.

-Actualizaciones -matómicas
-mno-actualizaciones-atómicas
Esta opción controla la versión de libgcc que el compilador vincula a un ejecutable
y selecciona si hay actualizaciones atómicas en la caché administrada por software de las variables del lado de PPU
son usados. Si usa actualizaciones atómicas, cambia a una variable PPU del código SPU usando
el calificador de espacio de direcciones con nombre "__ea" no interfiere con los cambios en otras PPU
variables que residen en la misma línea de caché del código PPU. Si no usa atomic
actualizaciones, dicha interferencia puede ocurrir; sin embargo, escribir líneas de caché es más
eficiente. El comportamiento predeterminado es utilizar actualizaciones atómicas.

-mdual-nops
-mdual-nops =n
De forma predeterminada, GCC inserta nops para aumentar el problema dual cuando espera que aumente
rendimiento. n puede ser un valor de 0 a 10. Un valor menor n inserta menos nops. 10 es
el valor predeterminado, 0 es lo mismo que -mno-dual-nops. Discapacitado con -os.

-mhint-max-nops =n
Número máximo de nops para insertar para una sugerencia de rama. Una pista de rama debe ser de al menos 8
instrucciones lejos de la rama que está afectando. GCC inserta hasta n nops a
hacer cumplir esto, de lo contrario no genera la sugerencia de rama.

-mhint-max-distance =n
La codificación de la instrucción de sugerencia de rama limita la sugerencia para que esté dentro de 256
instrucciones de la sucursal a la que está afectando. De forma predeterminada, GCC se asegura de que esté dentro
125.

-msafe-sugerencias
Solucione un error de hardware que hace que la SPU se bloquee indefinidamente. Por defecto, GCC
inserta la instrucción "hbrp" para asegurarse de que este bloqueo no ocurra.

Opciones para System V

Estas opciones adicionales están disponibles en System V Release 4 para compatibilidad con otros
compiladores en esos sistemas:

-G Crea un objeto compartido. Se recomienda que -simbólico or -compartido ser utilizado en su lugar.

-Qy Identificar las versiones de cada herramienta que utiliza el compilador, en un ensamblador ".ident"
directiva en la salida.

-Qn Abstenerse de agregar directivas ".ident" al archivo de salida (este es el predeterminado).

-YP,dirs
Buscar los directorios dirs, y no otros, para bibliotecas especificadas con -l.

-Sí,dir
Busque en el directorio dir para encontrar el preprocesador M4. El ensamblador usa esto
.

AZULEJO-Gx Opciones

Estas -m las opciones son compatibles con TILE-Gx:

-mcmodel = pequeño
Genere código para el modelo pequeño. La distancia para llamadas directas está limitada a 500 M
en cualquier dirección. Las direcciones relativas a PC son de 32 bits. Soporte de direcciones absolutas
el rango completo de direcciones.

-mcmodel = grande
Genere código para el modelo grande. No hay limitación en la distancia de la llamada, pc-
direcciones relativas o direcciones absolutas.

-mcpu =nombre
Selecciona el tipo de CPU al que se dirigirá. Actualmente, el único tipo admitido es azulejox.

-m32
-m64
Genere código para un entorno de 32 bits o 64 bits. El entorno de 32 bits establece int,
de largo y puntero a 32 bits. El entorno de 64 bits establece int en 32 bits y long y
puntero a 64 bits.

-mbig-endian
-mlittle-endian
Genere código en modo endian grande / pequeño, respectivamente.

TILEPro Opciones

Estas -m las opciones son compatibles con TILEPro:

-mcpu =nombre
Selecciona el tipo de CPU al que se dirigirá. Actualmente, el único tipo admitido es Azulejos.

-m32
Genere código para un entorno de 32 bits, que establece int, long y pointer en 32 bits.
Este es el único comportamiento admitido, por lo que la bandera se ignora esencialmente.

V850 Opciones

Estas -m Las opciones están definidas para las implementaciones del V850:

-ml-llamadas-largas
-mno-llamadas-largas
Trate todas las llamadas como si estuvieran lejos (cerca). Si se supone que las llamadas están lejos, el
El compilador siempre carga la dirección de la función en un registro y llama indirectamente
a través del puntero.

-mno-ep
-mep
No optimice (optimice) los bloques básicos que utilizan el mismo puntero de índice 4 o más
veces para copiar el puntero en el registro "ep", y utilizar los "sld" y "sst" más cortos
instrucciones. los -mep La opción está activada de forma predeterminada si optimiza.

-función-mno-prolog
-función-emprolog
No utilice (utilice) funciones externas para guardar y restaurar registros en el prólogo
y epílogo de una función. Las funciones externas son más lentas, pero usan menos código
espacio si más de una función guarda el mismo número de registros. los
-función-emprolog La opción está activada de forma predeterminada si optimiza.

-mespacio
Intente hacer que el código sea lo más pequeño posible. En la actualidad, esto simplemente enciende el -mep
y -función-emprolog .

-mtda =n
Ponga variables estáticas o globales cuyo tamaño sea n bytes o menos en la pequeña área de datos
al que apunta el registro "ep". La pequeña área de datos puede contener hasta 256 bytes en total
(128 bytes para referencias de bytes).

-msda =n
Ponga variables estáticas o globales cuyo tamaño sea n bytes o menos en el área de datos pequeños
al que apunta el registro "gp". El área de datos pequeña puede contener hasta 64 kilobytes.

-mzda =n
Ponga variables estáticas o globales cuyo tamaño sea n bytes o menos en los primeros 32
kilobytes de memoria.

-mv850
Especifique que el procesador de destino es el V850.

-mv850e3v5
Especifique que el procesador de destino es el V850E3V5. La constante del preprocesador
"__v850e3v5__" se define si se utiliza esta opción.

-mv850e2v4
Especifique que el procesador de destino es el V850E3V5. Este es un alias para
-mv850e3v5 .

-mv850e2v3
Especifique que el procesador de destino es el V850E2V3. La constante del preprocesador
"__v850e2v3__" se define si se utiliza esta opción.

-mv850e2
Especifique que el procesador de destino es el V850E2. La constante del preprocesador
"__v850e2__" se define si se utiliza esta opción.

-mv850e1
Especifique que el procesador de destino es el V850E1. Las constantes del preprocesador
"__v850e1__" y "__v850e__" se definen si se utiliza esta opción.

-mv850es
Especifique que el procesador de destino es el V850ES. Este es un alias para -mv850e1
.

-mv850e
Especifique que el procesador de destino es el V850E. La constante del preprocesador "__v850e__"
se define si se utiliza esta opción.

Si ninguno -mv850 ni -mv850e ni -mv850e1 ni -mv850e2 ni -mv850e2v3 ni -mv850e3v5
se definen, a continuación, se elige un procesador de destino predeterminado y el correspondiente __v850 * __
La constante del preprocesador está definida.

Las constantes del preprocesador "__v850" y "__v851__" siempre se definen, independientemente de
qué variante de procesador es el objetivo.

-mdisable-llamada
-mno-deshabilitar-callt
Esta opción suprime la generación de la instrucción "CALLT" para los modelos v850e, v850e1,
Versiones v850e2, v850e2v3 y v850e3v5 de la arquitectura v850.

Esta opción está habilitada de forma predeterminada cuando el RH850 ABI está en uso (consulte -mrh850-abi), o
desactivado por defecto cuando el GCC ABI está en uso. Si las instrucciones "CALLT" están siendo
generado, se define el símbolo de preprocesador de C "__V850_CALLT__".

-relajarse
-mno-relajarse
Transmitir (o no transmitir) el -relajarse opción de línea de comandos para el ensamblador.

-ml-saltos-largos
-mno-saltos-largos
Deshabilite (o vuelva a habilitar) la generación de instrucciones de salto relativas a PC.

-msoft-flotador
-mhard-flotador
Deshabilite (o vuelva a habilitar) la generación de instrucciones de punto flotante de hardware. Esta
La opción solo es significativa cuando la arquitectura de destino es V850E2V3 o mas alto. Si
se generan instrucciones de punto flotante de hardware, luego el preprocesador de C
se define el símbolo "__FPU_OK__", de lo contrario se define el símbolo "__NO_FPU__".

-mbucle
Habilita el uso de la instrucción LOOP e3v5. El uso de esta instrucción no es
habilitado de forma predeterminada cuando se selecciona la arquitectura e3v5 porque su uso
experimental.

-mrh850-abi
-mghs
Habilita la compatibilidad con la versión RH850 del V850 ABI. Este es el predeterminado. Con
En esta versión de la ABI se aplican las siguientes reglas:

* Las estructuras y uniones de tamaño entero se devuelven a través de un puntero de memoria en lugar de
un registro.

* Las estructuras y uniones grandes (de más de 8 bytes de tamaño) se pasan por valor.

* Las funciones están alineadas con los límites de 16 bits.

* Los -m8byte-alinear Se admite la opción de línea de comandos.

* Los -mdisable-llamada La opción de línea de comandos está habilitada de forma predeterminada. los
-mno-deshabilitar-callt La opción de línea de comandos no es compatible.

Cuando esta versión de la ABI está habilitada, el símbolo del preprocesador C "__V850_RH850_ABI__"
está definido.

-mgcc-abi
Habilita la compatibilidad con la versión antigua de GCC del V850 ABI. Con esta versión del ABI
se aplican las siguientes reglas:

* Las estructuras y uniones de tamaño entero se devuelven en el registro "r10".

* Las estructuras y uniones grandes (de más de 8 bytes de tamaño) se pasan por referencia.

* Las funciones están alineadas con los límites de 32 bits, a menos que se optimicen por tamaño.

* Los -m8byte-alinear La opción de línea de comandos no es compatible.

* Los -mdisable-llamada La opción de línea de comandos es compatible pero no está habilitada de forma predeterminada.

Cuando esta versión de ABI está habilitada, el símbolo del preprocesador C "__V850_GCC_ABI__"
está definido.

-m8byte-alinear
-mno-8byte-alinear
Permite la alineación de tipos "dobles" y "largos largos" en límites de 8 bytes.
El valor predeterminado es restringir la alineación de todos los objetos a un máximo de 4 bytes. Cuando
-m8byte-alinear es en efecto el símbolo del preprocesador de C "__V850_8BYTE_ALIGN__" es
definido.

-mbig-interruptor
Genere código adecuado para grandes mesas de conmutación. Utilice esta opción solo si el
El ensamblador / enlazador se quejan de ramas fuera de rango dentro de una tabla de interruptores.

-mapa-registros
Esta opción hace que r2 y r5 se usen en el código generado por el compilador. Esta
El ajuste es el predeterminado.

-mno-aplicación-registros
Esta opción hace que r2 y r5 se traten como registros fijos.

VAX Opciones

Estas -m las opciones están definidas para el VAX:

-munix
No genere ciertas instrucciones de salto ("aobleq", etc.) que el ensamblador de Unix
porque el VAX no puede manejar en rangos largos.

-mgnu
Envíe esas instrucciones de salto, asumiendo que el ensamblador GNU está siendo
usado.

-mg Código de salida para números de coma flotante en formato G en lugar de formato D.

Visium Opciones

-mdebug
Un programa que realiza E / S de archivos y está destinado a ejecutarse en un objetivo MCM debe ser
vinculado con esta opción. Hace que las bibliotecas libc.ay libdebug.a estén vinculadas.
El programa debe ejecutarse en el destino bajo el control de la depuración remota de GDB
talón.

-msim
Un programa que realiza E / S de archivos y está destinado a ejecutarse en el simulador debe ser
vinculado con la opción. Esto hace que las bibliotecas libc.ay libsim.a estén vinculadas.

-mfpu
-mhard-flotador
Genere código que contenga instrucciones de punto flotante. Este es el predeterminado.

-mno-fpu
-msoft-flotador
Genere código que contenga llamadas de biblioteca para punto flotante.

-msoft-flotador cambia la convención de llamada en el archivo de salida; por lo tanto, es solo
útil si compilas todos de un programa con esta opción. En particular, necesita
compilar libgcc.a, la biblioteca que viene con GCC, con -msoft-flotador para esto
trabajar.

-mcpu =tipo_cpu
Establezca el conjunto de instrucciones, el conjunto de registros y los parámetros de programación de instrucciones para
tipo de máquina tipo_cpu. Valores admitidos para tipo_cpu en mcm, gr5 y gr6.

mcm es sinónimo de gr5 presente para compatibilidad con versiones anteriores.

De forma predeterminada (a menos que se configure de otra manera), GCC genera código para la variante GR5 de
la arquitectura Visium.

Con -mcpu = gr6, GCC genera código para la variante GR6 de la arquitectura Visium.
La única diferencia con el código GR5 es que el compilador generará movimiento de bloque
instrucciones.

-mtune =tipo_cpu
Establecer los parámetros de programación de instrucciones para el tipo de máquina tipo_cpu, pero no establezca
el conjunto de instrucciones o conjunto de registros que la opción -mcpu =tipo_cpu haría.

-modomsv
Generar código para el modo supervisor, donde no hay restricciones de acceso.
a los registros generales. Este es el predeterminado.

-modo-usuario
Generar código para el modo usuario, donde el acceso a algunos registros generales es
prohibido: en el GR5, no se puede acceder a los registros r24 a r31 en este modo; sobre el
GR6, solo se ven afectados los registros r29 a r31.

VMS Opciones

Estas -m Se definen opciones para las implementaciones de VMS:

-mvms-códigos-de-retorno
Devuelve los códigos de condición de VMS de "principal". El valor predeterminado es devolver la condición de estilo POSIX
(por ejemplo, error) códigos.

-mdebug-main =prefijo
Marque la primera rutina cuyo nombre comience con prefijo como la rutina principal para el
depurador

-mmalloc64
Por defecto a las rutinas de asignación de memoria de 64 bits.

-mpointer-size =tamaño
Establece el tamaño predeterminado de los punteros. Posibles opciones para tamaño en 32 or Corto por 32 bits
punteros, 64 or Corto para punteros de 64 bits, y no para admitir solo punteros de 32 bits.
La última opción desactiva "pragma pointer_size".

VxWorks Opciones

Las opciones en esta sección están definidas para todos los objetivos de VxWorks. Opciones específicas del
hardware de destino se enumeran con las otras opciones para ese destino.

-mrtp
GCC puede generar código tanto para núcleos de VxWorks como para procesos en tiempo real (RTP). Esta
La opción cambia de la primera a la última. También define la macro del preprocesador
"__RTP__".

-no-estático
Vincule un ejecutable RTP con bibliotecas compartidas en lugar de bibliotecas estáticas. los
opciones -estático y -compartido también se puede utilizar para RTP; -estático es el predeterminado.

-Bestático
-Bdinámico
Estas opciones se transmiten al vinculador. Están definidos por compatibilidad con
Diab.

-Xbind-perezoso
Habilite la vinculación diferida de llamadas a funciones. Esta opción es equivalente a -Wl, -z, ahora y es
definido para compatibilidad con Diab.

-Xbind-ahora
Deshabilite el enlace diferido de llamadas a funciones. Esta opción es la predeterminada y está definida para
compatibilidad con Diab.

x86 Opciones

Estas -m Las opciones están definidas para la familia de equipos x86.

-march =tipo cpu
Generar instrucciones para el tipo de máquina tipo cpu. En contraste con -mtune =tipo cpu,
que simplemente sintoniza el código generado para el especificado tipo cpu, -march =tipo cpu
permite que GCC genere código que puede que no se ejecute en absoluto en procesadores que no sean el
indicado. Especificando -march =tipo cpu implica -mtune =tipo cpu.

Las opciones para tipo cpu son:

nativo
Esto selecciona la CPU para generar código en el momento de la compilación determinando el
tipo de procesador de la máquina compiladora. Utilizando -march = nativo habilita todo
subconjuntos de instrucciones admitidos por la máquina local (por lo tanto, es posible que el resultado no se ejecute
en diferentes máquinas). Utilizando -mtune = nativo produce código optimizado para el local
máquina bajo las restricciones del conjunto de instrucciones seleccionado.

i386
CPU Intel i386 original.

i486
CPU Intel i486. (No se implementa ninguna programación para este chip).

i586
pentium
CPU Intel Pentium sin soporte MMX.

pentium-mmx
CPU Intel Pentium MMX, basada en el núcleo Pentium con soporte para conjuntos de instrucciones MMX.

pentium pro
CPU Intel Pentium Pro.

i686
Cuando se usa con -marcha, se utiliza el conjunto de instrucciones Pentium Pro, por lo que el código se ejecuta
en todos los chips de la familia i686. Cuando se usa con -mtune, tiene el mismo significado que
genérico.

pentium2
CPU Intel Pentium II, basada en el núcleo Pentium Pro con soporte para conjuntos de instrucciones MMX.

pentium3
pentium3m
CPU Intel Pentium III, basada en el núcleo Pentium Pro con conjunto de instrucciones MMX y SSE
apoyo.

pentium-m
Intel Pentium M; versión de bajo consumo de CPU Intel Pentium III con MMX, SSE y SSE2
soporte de conjunto de instrucciones. Utilizado por portátiles Centrino.

pentium4
pentium4m
CPU Intel Pentium 4 con soporte para conjuntos de instrucciones MMX, SSE y SSE2.

Prescott
Versión mejorada de la CPU Intel Pentium 4 con instrucciones MMX, SSE, SSE2 y SSE3
establecer soporte.

nocona
Versión mejorada de la CPU Intel Pentium 4 con extensiones de 64 bits, MMX, SSE, SSE2 y
Soporte de conjunto de instrucciones SSE3.

core2
CPU Intel Core 2 con extensiones de 64 bits, MMX, SSE, SSE2, SSE3 y SSSE3
soporte de conjunto de instrucciones.

Yo respiro
CPU Intel Nehalem con extensiones de 64 bits, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Compatibilidad con el conjunto de instrucciones SSE4.2 y POPCNT.

Westmere
CPU Intel Westmere con extensiones de 64 bits, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Compatibilidad con conjuntos de instrucciones SSE4.2, POPCNT, AES y PCLMUL.

Sandy Bridge
CPU Intel Sandy Bridge con extensiones de 64 bits, MMX, SSE, SSE2, SSE3, SSSE3,
Compatibilidad con conjuntos de instrucciones SSE4.1, SSE4.2, POPCNT, AVX, AES y PCLMUL.

Ivy Bridge
CPU Intel Ivy Bridge con extensiones de 64 bits, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Conjunto de instrucciones SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND y F16C
apoyo.

Haswell
CPU Intel Haswell con extensiones de 64 bits, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, IMC, BMI2
y soporte de conjunto de instrucciones F16C.

Broadwell
CPU Intel Broadwell con extensiones de 64 bits, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, IMC, IMC2,
Compatibilidad con el conjunto de instrucciones F16C, RDSEED, ADCX y PREFETCHW.

Bonnell
CPU Intel Bonnell con extensiones de 64 bits, MOVBE, MMX, SSE, SSE2, SSE3 y SSSE3
soporte de conjunto de instrucciones.

Silvermont
CPU Intel Silvermont con extensiones de 64 bits, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
Compatibilidad con conjuntos de instrucciones SSE4.1, SSE4.2, POPCNT, AES, PCLMUL y RDRND.

knl CPU Intel Knight's Landing con extensiones de 64 bits, MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, IMC,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER y AVX512CD
soporte de conjunto de instrucciones.

k6 CPU AMD K6 con soporte para conjuntos de instrucciones MMX.

k6-2
k6-3
Versiones mejoradas de la CPU AMD K6 con MMX y 3DNow! soporte de conjunto de instrucciones.

athlon
Athlon-tbird
CPU AMD Athlon con MMX, 3dNOW !, mejorado 3DNow! e instrucciones de captación previa de SSE
apoyo.

atlon-4
athlon-xp
atlon-mp
CPU AMD Athlon mejorada con MMX, 3DNow !, 3DNow mejorado! e instrucción SSE completa
establecer soporte.

k8
Opteron
atletismo64
athlon-fx
Procesadores basados ​​en el núcleo AMD K8 con soporte para conjuntos de instrucciones x86-64, que incluyen
los procesadores AMD Opteron, Athlon 64 y Athlon 64 FX. (Esto reemplaza a MMX,
SSE, SSE2, 3DNow !, mejorado 3DNow! y extensiones de conjuntos de instrucciones de 64 bits).

k8-sse3
opteron-sse3
atlon64-sse3
Versiones mejoradas de núcleos AMD K8 con soporte para conjuntos de instrucciones SSE3.

amdfam10
Barcelona
CPU basadas en núcleos AMD Family 10h con soporte para conjuntos de instrucciones x86-64. (Esta
superconjuntos MMX, SSE, SSE2, SSE3, SSE4A, 3DNow !, mejorado 3DNow !, ABM y 64 bits
extensiones del conjunto de instrucciones.)

bdver1
CPU basadas en núcleos AMD Family 15h con soporte para conjuntos de instrucciones x86-64. (Esta
superconjuntos FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM y extensiones de conjunto de instrucciones de 64 bits).

bdver2
CPU basadas en núcleo de la familia AMD 15h con soporte para conjuntos de instrucciones x86-64. (Esta
superconjuntos BMI, TBM, F16C, FMA, FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE,
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y conjunto de instrucciones de 64 bits
extensiones.)

bdver3
CPU basadas en núcleo de la familia AMD 15h con soporte para conjuntos de instrucciones x86-64. (Esta
superconjuntos BMI, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, XOP, LWP, AES, PCL_MUL, CX16,
MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y conjunto de instrucciones de 64 bits
extensiones.

bdver4
CPU basadas en núcleo de la familia AMD 15h con soporte para conjuntos de instrucciones x86-64. (Esta
superconjuntos BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP, AES,
PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y
Extensiones de conjuntos de instrucciones de 64 bits.

btver1
CPU basadas en núcleos AMD Family 14h con soporte para conjuntos de instrucciones x86-64. (Esta
superconjuntos MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM y conjunto de instrucciones de 64 bits
extensiones.)

btver2
CPU basadas en núcleos AMD Family 16h con soporte para conjuntos de instrucciones x86-64. Esta
incluye MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A,
SSSE3, SSE3, SSE2, SSE, MMX y extensiones de conjunto de instrucciones de 64 bits.

cabrestante-c6
CPU IDT WinChip C6, tratado de la misma manera que i486 con un conjunto de instrucciones MMX adicional
apoyo.

winchip2
CPU IDT WinChip 2, tratado de la misma manera que i486 con MMX y 3DNow adicionales!
soporte de conjunto de instrucciones.

c3 CPU VIA C3 con MMX y 3DNow! soporte de conjunto de instrucciones. (No hay programación
implementado para este chip.)

c3-2
CPU VIA C3-2 (Nehemiah / C5XL) con soporte para conjuntos de instrucciones MMX y SSE. (No
La programación está implementada para este chip).

geoda
Procesador integrado AMD Geode con MMX y 3DNow! soporte de conjunto de instrucciones.

-mtune =tipo cpu
Sintonizar tipo cpu todo lo aplicable sobre el código generado, excepto el ABI
y el conjunto de instrucciones disponibles. Al elegir un tipo cpu horarios
cosas apropiadamente para ese chip en particular, el compilador no genera ningún código
que no se puede ejecutar en el tipo de máquina predeterminado a menos que utilice un -march =tipo cpu .
Por ejemplo, si GCC está configurado para i686-pc-linux-gnu, entonces -mtune = pentium4 genera
código que está ajustado para Pentium 4 pero aún se ejecuta en máquinas i686.

Las opciones para tipo cpu son los mismos que para -marcha. Adicionalmente, -mtune admite 2
opciones adicionales para tipo cpu:

genérico
Produzca código optimizado para los procesadores IA32 / AMD64 / EM64T más comunes. Si tu
conozca la CPU en la que se ejecutará su código, entonces debe usar el correspondiente
-mtune or -marcha opción en lugar de -mtune = genérico. Pero, si no lo sabes
exactamente qué usuarios de CPU de su aplicación tendrán, entonces debe usar este
.

A medida que se implementan nuevos procesadores en el mercado, el comportamiento de esta opción
cambiará. Por lo tanto, si actualiza a una versión más reciente de GCC, la generación de código
controlado por esta opción cambiará para reflejar los procesadores que son más
común en el momento en que se lanza la versión de GCC.

No hay -march = genérico opción porque -marcha indica el conjunto de instrucciones
el compilador puede usar, y no hay un conjunto de instrucciones genérico aplicable a todos
procesadores. A diferencia de, -mtune indica el procesador (o, en este caso,
colección de procesadores) para los que se optimiza el código.

intel
Produzca código optimizado para los procesadores Intel más actuales, que son Haswell
y Silvermont para esta versión de GCC. Si conoce la CPU en la que su código
se ejecutará, entonces debe usar el correspondiente -mtune or -marcha opción en lugar de
-mtune = intel. Pero, si desea que su aplicación funcione mejor tanto en Haswell
y Silvermont, entonces debería usar esta opción.

A medida que se implementan nuevos procesadores Intel en el mercado, el comportamiento de este
la opción cambiará. Por lo tanto, si actualiza a una versión más reciente de GCC, el código
generación controlada por esta opción cambiará para reflejar el Intel más actual
procesadores en el momento en que se lanza esa versión de GCC.

No hay -march = intel opción porque -marcha indica el conjunto de instrucciones
el compilador puede usar, y no hay un conjunto de instrucciones común aplicable a todos
procesadores. A diferencia de, -mtune indica el procesador (o, en este caso,
colección de procesadores) para los que se optimiza el código.

-mcpu =tipo cpu
Un sinónimo obsoleto de -mtune.

-mfpmath =unidad
Genere aritmética de punto flotante para la unidad seleccionada unidad. Las opciones para unidad son:

387 Utilice el coprocesador de punto flotante estándar 387 presente en la mayoría de chips
y emulado de otra manera. El código compilado con esta opción se ejecuta en casi todas partes.
Los resultados temporales se calculan con precisión de 80 bits en lugar de la precisión
especificado por el tipo, lo que resulta en resultados ligeramente diferentes en comparación con la mayoría de
otros chips. Ver -Tienda-flotante para una descripción más detallada.

Esta es la opción predeterminada para destinos x86-32.

sse Utilice las instrucciones escalares de coma flotante presentes en el conjunto de instrucciones SSE. Esta
El conjunto de instrucciones es compatible con Pentium III y chips más nuevos, y en la línea AMD
por los chips Athlon-4, Athlon XP y Athlon MP. La versión anterior de SSE
conjunto de instrucciones sólo admite aritmética de precisión simple, por lo tanto, el doble y
La aritmética de precisión extendida todavía se hace usando 387. Una versión posterior, presente
solo en los chips Pentium 4 y AMD x86-64, también admite aritmética de doble precisión.

Para el compilador x86-32, debe usar -march =tipo cpu, -msse or -msse2 cambia a
habilite las extensiones SSE y haga que esta opción sea efectiva. Para el compilador x86-64,
estas extensiones están habilitadas de forma predeterminada.

El código resultante debería ser considerablemente más rápido en la mayoría de los casos y
evitar los problemas de inestabilidad numérica del código 387, pero puede romper algunos
código que espera que los temporales sean de 80 bits.

Ésta es la opción predeterminada para el compilador x86-64.

sse, 387
sse + 387
ambas
Intente utilizar ambos conjuntos de instrucciones a la vez. Esto efectivamente duplica la
cantidad de registros disponibles, y en chips con unidades de ejecución separadas para 387
y SSE los recursos de ejecución también. Utilice esta opción con cuidado, ya que todavía
experimental, porque el asignador de registros GCC no modela por separado
unidades funcionales bien, lo que resulta en un rendimiento inestable.

-masm =dialecto
Instrucciones de montaje de salida usando seleccionado dialecto. También afecta qué dialecto es
utilizado para "asm" básico y "asm" extendido. Las opciones admitidas (en orden de dialecto) son a
or intel. El valor predeterminado es a. Darwin no apoya intel.

-mieee-fp
-mno-ieee-fp
Controle si el compilador usa o no comparaciones de punto flotante IEEE. Estas
manejar correctamente el caso en el que el resultado de una comparación no está ordenado.

-msoft-flotador
Generar una salida que contiene llamadas a las bibliotecas de punto flotante.

Advertencia: las bibliotecas necesarias no forman parte de GCC. Normalmente las instalaciones del
Se utiliza el compilador C habitual de la máquina, pero esto no se puede hacer directamente en
Compilacion. Debe hacer sus propios arreglos para proporcionar una biblioteca adecuada
funciones para la compilación cruzada.

En máquinas donde una función devuelve resultados de punto flotante en el registro 80387
pila, algunos opcodes de punto flotante pueden ser emitidos incluso si -msoft-flotador se utiliza.

-mno-fp-ret-en-387
No utilice los registros FPU para devolver valores de funciones.

La convención de llamadas habitual tiene funciones que devuelven valores de tipos "float" y "double"
en un registro FPU, incluso si no hay FPU. La idea es que el sistema operativo
debería emular una FPU.

La opción -mno-fp-ret-en-387 hace que dichos valores se devuelvan en la CPU ordinaria
se registra en su lugar.

-mno-fantasia-matematicas-387
Algunos emuladores 387 no admiten las instrucciones "sin", "cos" y "sqrt" para
387. Especifique esta opción para evitar generar esas instrucciones. Esta opción es la
predeterminado en OpenBSD y NetBSD. Esta opción se anula cuando -marcha indica que
la CPU de destino siempre tiene una FPU, por lo que la instrucción no necesita emulación.
Estas instrucciones no se generan a menos que también utilice el
-optimizaciones-matemáticas-divertidas interruptor.

-malign-doble
-mno-alinear-doble
Controlar si GCC alinea las variables "double", "long double" y "long long" en un
límite de dos palabras o límite de una palabra. Alinear variables "dobles" en una palabra de dos
El límite produce código que se ejecuta algo más rápido en un Pentium a expensas de más
memoria.

En x86-64, -malign-doble está habilitado de forma predeterminada.

Advertencia: si usas el -malign-doble interruptor, estructuras que contienen los tipos anteriores
están alineados de manera diferente a las especificaciones de la interfaz binaria de la aplicación publicada
para x86-32 y no son binarios compatibles con estructuras en código compilado sin
ese interruptor.

-m96bit-largo-doble
-m128bit-largo-doble
Estos interruptores controlan el tamaño del tipo "doble largo". El binario de la aplicación x86-32
La interfaz especifica que el tamaño es de 96 bits, por lo que -m96bit-largo-doble es el predeterminado en
Modo de 32 bits.

Las arquitecturas modernas (Pentium y más recientes) prefieren que el "doble largo" esté alineado con un 8-
o límite de 16 bytes. En matrices o estructuras que se ajustan a la ABI, esto no es
posible. Tan especificando -m128bit-largo-doble alinea "doble largo" a 16 bytes
límite rellenando el "doble largo" con un cero adicional de 32 bits.

En el compilador x86-64, -m128bit-largo-doble es la opción predeterminada como su ABI
especifica que "doble largo" se alinea en el límite de 16 bytes.

Tenga en cuenta que ninguna de estas opciones permite una precisión adicional sobre el estándar x87
de 80 bits para un "doble largo".

Advertencia: si anula el valor predeterminado para su ABI objetivo, esto cambia el tamaño
de estructuras y matrices que contienen variables "dobles largas", además de modificar el
convención de llamada de función para funciones que toman "long double". Por lo tanto, no son
binario-compatible con código compilado sin ese modificador.

-mlong-doble-64
-mlong-doble-80
-mlong-doble-128
Estos interruptores controlan el tamaño del tipo "doble largo". Un tamaño de 64 bits hace que
tipo "doble largo" equivalente al tipo "doble". Este es el valor predeterminado para 32 bits.
Biblioteca Bionic C. Un tamaño de 128 bits hace que el tipo "doble largo" sea equivalente al
Tipo "__float128". Este es el valor predeterminado para la biblioteca Bionic C de 64 bits.

Advertencia: si anula el valor predeterminado para su ABI objetivo, esto cambia el tamaño
de estructuras y matrices que contienen variables "dobles largas", además de modificar el
convención de llamada de función para funciones que toman "long double". Por lo tanto, no son
binario-compatible con código compilado sin ese modificador.

-datos-malignos =tipo
Controle cómo GCC alinea las variables. Valores admitidos para tipo en compat usos aumentados
el valor de alineación compatible utiliza GCC 4.8 y versiones anteriores, abi usa el valor de alineación como
especificado por la psABI, y cachelina utiliza un valor de alineación aumentado para igualar el
tamaño de la línea de caché. compat es el predeterminado.

-umbral-de-datos-grande =umbral
Cuándo -mcmodel = medio se especifica, objetos de datos mayores que umbral se colocan en
la sección de datos grandes. Este valor debe ser el mismo en todos los objetos vinculados a
el binario, y el valor predeterminado es 65535.

-mrtd
Utilice una convención de llamada de función diferente, en la que las funciones que toman un
el número de argumentos devuelve con el "ret num " instrucción, que hace estallar sus argumentos
mientras regresa. Esto guarda una instrucción en la persona que llama, ya que no es necesario
pop los argumentos allí.

Puede especificar que se llame a una función individual con esta secuencia de llamada con
el atributo de función "stdcall". También puede anular el -mrtd opción usando la
atributo de función "cdecl".

Advertencia: esta convención de llamada es incompatible con la que se usa normalmente en Unix,
por lo que no puede usarlo si necesita llamar a bibliotecas compiladas con el compilador de Unix.

Además, debe proporcionar prototipos de funciones para todas las funciones que toman variables
número de argumentos (incluido "printf"); de lo contrario, se genera un código incorrecto para
llamadas a esas funciones.

Además, el código resulta muy incorrecto si llama a una función con demasiados
argumentos. (Normalmente, los argumentos adicionales se ignoran inofensivamente).

-mregparm =número
Controle cuántos registros se utilizan para pasar argumentos enteros. Por defecto, no
Los registros se utilizan para pasar argumentos y se pueden utilizar como máximo 3 registros. Usted puede
controlar este comportamiento para una función específica mediante el uso del atributo de función
"regparm".

Advertencia: si usa este interruptor, y número es distinto de cero, entonces debes compilar todos los módulos
con el mismo valor, incluidas las bibliotecas. Esto incluye las bibliotecas del sistema y
módulos de inicio.

-msseregparm
Utilice las convenciones de paso de registros SSE para argumentos flotantes y dobles y valores de retorno.
Puede controlar este comportamiento para una función específica utilizando el atributo de función
"sseregparm".

Advertencia: si usa este conmutador, debe compilar todos los módulos con el mismo valor,
incluidas las bibliotecas. Esto incluye las bibliotecas del sistema y los módulos de inicio.

-mvect8-ret-en-mem
Devuelve vectores de 8 bytes en la memoria en lugar de registros MMX. Este es el predeterminado en
Solaris @ tie {} 8 y 9 y VxWorks para que coincidan con la ABI de los compiladores de Sun Studio hasta
versión 12. Las versiones posteriores del compilador (comenzando con Studio 12 Update @ tie {} 1) siguen
la ABI utilizada por otros destinos x86, que es la predeterminada en Solaris @ tie {} 10 y posteriores.
Solo utilice esta opción si necesita seguir siendo compatible con el código existente producido por
las versiones anteriores del compilador o versiones anteriores de GCC.

-mpc32
-mpc64
-mpc80
Establezca la precisión de coma flotante del 80387 en 32, 64 u 80 bits. Cuando -mpc32 está especificado,
los significados de los resultados de las operaciones de punto flotante se redondean a 24 bits
(precisión simple); -mpc64 redondea los significados de los resultados de coma flotante
operaciones a 53 bits (doble precisión) y -mpc80 redondea el significado de los resultados
de operaciones de coma flotante a 64 bits (doble precisión extendida), que es la
defecto. Cuando se usa esta opción, las operaciones de punto flotante con mayor precisión son
no está disponible para el programador sin establecer explícitamente la palabra de control FPU.

Establecer el redondeo de las operaciones de punto flotante a menos de los 80 bits predeterminados puede
acelerar algunos programas en un 2% o más. Tenga en cuenta que algunas bibliotecas matemáticas asumen que
las operaciones de punto flotante de precisión extendida (80 bits) están habilitadas de forma predeterminada; rutinas
en tales bibliotecas podría sufrir una pérdida significativa de precisión, generalmente a través de
llamada "cancelación catastrófica", cuando esta opción se utiliza para establecer la precisión en
precisión menos que extendida.

-mstackrealinear
Vuelva a alinear la pila en la entrada. En el x86, el -mstackrealinear opción genera una
prólogo y epílogo alternativos que realinea la pila de tiempo de ejecución si es necesario. Esta
admite la mezcla de códigos heredados que mantienen la alineación de la pila de 4 bytes con los códigos modernos que
mantenga la alineación de la pila de 16 bytes para la compatibilidad con SSE. Ver también el atributo
"force_align_arg_pointer", aplicable a funciones individuales.

-límite-de-pila -preferido =número
Intente mantener el límite de la pila alineado con un 2 elevado a número límite de bytes. Si
-Límite-de-pila-preferido no se especifica, el valor predeterminado es 4 (16 bytes o 128 bits).

Advertencia: Al generar código para la arquitectura x86-64 con extensiones SSE
discapacitado, -límite-de-pila -preferido = 3 se puede utilizar para mantener alineado el límite de la pila
al límite de 8 bytes. Dado que x86-64 ABI requiere una alineación de pila de 16 bytes, esto es ABI
incompatible y destinado a ser utilizado en un entorno controlado donde el espacio de la pila es
limitación importante. Esta opción conduce a un código incorrecto cuando las funciones compiladas con 16
La alineación de la pila de bytes (como las funciones de una biblioteca estándar) se llama con
pila desalineada. En este caso, las instrucciones SSE pueden provocar un acceso a la memoria desalineado
trampas. Además, los argumentos variables se manejan incorrectamente para 16 bytes alineados
objetos (incluidos x87 long double y __int128), lo que genera resultados incorrectos. Usted debe
construir todos los módulos con -límite-de-pila -preferido = 3, incluidas las bibliotecas. Esta
incluye las bibliotecas del sistema y los módulos de inicio.

-mincoming-stack-boundary =número
Suponga que la pila entrante está alineada con un 2 elevado a número límite de bytes. Si
-límite-de-pila-próximo no está especificado, el especificado por
-Límite-de-pila-preferido se utiliza.

En Pentium y Pentium Pro, los valores "doble" y "doble largo" deben alinearse con un
Límite de 8 bytes (consulte -malign-doble) o sufrir un rendimiento significativo en el tiempo de ejecución
sanciones. En Pentium III, el tipo de datos Streaming SIMD Extension (SSE) "__m128" puede
no funciona correctamente si no está alineado con 16 bytes.

Para garantizar la alineación adecuada de estos valores en la pila, el límite de la pila debe ser lo
alineado como lo requiere cualquier valor almacenado en la pila. Además, cada función
debe generarse de manera que mantenga la pila alineada. Por lo tanto, llamar a una función
compilado con un límite de pila preferido superior a partir de una función compilada con un límite inferior
El límite de pila preferido probablemente desalinee la pila. Se recomienda que
las bibliotecas que usan devoluciones de llamada siempre usan la configuración predeterminada.

Esta alineación adicional consume espacio de pila adicional y generalmente aumenta el código
Talla. Código que es sensible al uso del espacio de pila, como sistemas integrados y
kernels del sistema operativo, es posible que desee reducir la alineación preferida a
-límite-de-pila -preferido = 2.

-mmmx
-msse
-msse2
-msse3
-mssse3
-msse4
-msse4a
-msse4.1
-msse4.2
-mavx
-mavx2
-mavx512f
-mavx512pf
-mavx512er
-mavx512cd
-msha
-maes
-mpclmul
-mclfushopt
-mfsgsbase
-mrdrnd
-mf16c
-mfma
-mfma4
-mno-fma4
-mprefetchwt1
-mxop
-mlwp
-m3dnow
-mpopcnt
-mabm
-mbmi
-mbmi2
-mlzcnt
-mfxsr
-mxguardar
-mxsaveopt
-mxsavec
-mx guarda
-mrtm
-mtbm
-mmpx
-mmesperax
Estos conmutadores permiten el uso de instrucciones en MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, AVX, AVX2, AVX512F, AVX512PF, AVX512ER, AVX512CD, SHA, AES, PCLMUL, FSGSBASE,
RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM, IMC, BMI2, FXSR, XSAVE, XSAVEOPT, LZCNT,
RTM, MPX, MWAITX o 3DNow! conjuntos de instrucciones ampliados. Cada uno tiene un correspondiente -mno-
opción para deshabilitar el uso de estas instrucciones.

Estas extensiones también están disponibles como funciones integradas: consulte x86 Incorporado Clave,
para obtener detalles de las funciones habilitadas y deshabilitadas por estos interruptores.

Para generar instrucciones SSE / SSE2 automáticamente a partir de código de punto flotante (a diferencia de
a 387 instrucciones), consulte -mfpmath = sse.

GCC presiona las instrucciones SSEx cuando -mavx se utiliza. En cambio, genera un nuevo AVX
instrucciones o equivalencia AVX para todas las instrucciones SSEx cuando sea necesario.

Estas opciones permiten a GCC utilizar estas instrucciones ampliadas en el código generado, incluso
sin -mfpmath = sse. Las aplicaciones que realizan la detección de CPU en tiempo de ejecución deben compilar
archivos separados para cada arquitectura compatible, utilizando los indicadores apropiados. En
En particular, el archivo que contiene el código de detección de la CPU debe compilarse sin
estas opciones.

-mdump-tune-características
Esta opción le indica a GCC que descargue los nombres de las funciones de ajuste de rendimiento x86 y
configuración por defecto. Los nombres se pueden utilizar en -mtune-ctrl =lista de características.

-mtune-ctrl =lista de características
Esta opción se utiliza para realizar un control detallado de las funciones de generación de código x86.
lista de características es una lista separada por comas de característica nombres. Ver también
-mdump-tune-características. Cuando se especifica, el característica se enciende si no está precedido
^, de lo contrario, se apaga. -mtune-ctrl =lista de características está destinado a ser utilizado
por desarrolladores de GCC. Su uso puede conducir a rutas de código no cubiertas por las pruebas y puede
potencialmente dar lugar a ICE del compilador o errores de tiempo de ejecución.

-mno-predeterminado
Esta opción indica a GCC que desactive todas las funciones ajustables. Ver también
-mtune-ctrl =lista de características y -mdump-tune-características.

-mcld
Esta opción indica a GCC que emita una instrucción "cld" en el prólogo de funciones.
que usan instrucciones de cadena. Las instrucciones de cadena dependen de la bandera DF para seleccionar
entre el modo de autoincremento o autodecreción. Mientras que la ABI especifica la bandera DF para
ser borrado en la entrada de la función, algunos sistemas operativos violan esta especificación al no
limpiando la bandera DF en sus despachadores de excepciones. El manejador de excepciones puede ser
invocado con la bandera DF activada, lo que conduce al modo de dirección incorrecta cuando la cadena
se utilizan instrucciones. Esta opción se puede habilitar de forma predeterminada en destinos x32 de 86 bits mediante
configurar GCC con el --habilitar-cld opción de configuración. Generación de "cld"
las instrucciones se pueden suprimir con el -mno-cld opción del compilador en este caso.

-mvzerosuperior
Esta opción indica a GCC que emita una instrucción "vzeroupper" antes de una transferencia de
controlar el flujo fuera de la función para minimizar la penalización de transición de AVX a SSE también
como eliminar los intrínsecos "zeroupper" innecesarios.

-prefer-avx128
Esta opción indica a GCC que utilice instrucciones AVX de 128 bits en lugar de AVX de 256 bits.
instrucciones en el auto-vectorizador.

-mcx16
Esta opción permite a GCC generar instrucciones "CMPXCHG16B". "CMPXCHG16B" permite
para operaciones atómicas en tipos de datos de doble palabra cuádruple (o oword) de 128 bits. Este es
útil para contadores de alta resolución que pueden ser actualizados por múltiples procesadores (o
núcleos). Esta instrucción se genera como parte de las funciones integradas atómicas: consulte
__ sincronizar Incorporados or __atómico Incorporados para obtener más detalles.

-msahf
Esta opción permite la generación de instrucciones "SAHF" en código de 64 bits. Intel temprano
CPU Pentium 4 con soporte Intel 64, antes de la introducción del paso Pentium 4 G1
en diciembre de 2005, carecía de las instrucciones "LAHF" y "SAHF" que están respaldadas por
AMD64. Estas son instrucciones de carga y almacenamiento, respectivamente, para ciertos indicadores de estado.
En el modo de 64 bits, la instrucción "SAHF" se utiliza para optimizar "fmod", "drem" y
funciones integradas "resto"; ver Otro Incorporados para obtener más detalles.

-mmovbe
Esta opción habilita el uso de la instrucción "movbe" para implementar "__builtin_bswap32"
y "__builtin_bswap64".

-mcrc32
Esta opción habilita las funciones integradas "__builtin_ia32_crc32qi",
"__builtin_ia32_crc32hi", "__builtin_ia32_crc32si" y "__builtin_ia32_crc32di" para
Genere la instrucción de máquina "crc32".

-mrecip
Esta opción habilita el uso de instrucciones "RCPSS" y "RSQRTSS" (y su vectorizado
variantes "RCPPS" y "RSQRTPS") con un paso adicional de Newton-Raphson para aumentar
precisión en lugar de "DIVSS" y "SQRTSS" (y sus variantes vectorizadas) para
argumentos de precisión de punto flotante. Estas instrucciones se generan solo cuando
-optimizaciones-matemáticas-divertidas está habilitado junto con -sólo-matemáticas-finitas y
-fno-trapping-matemáticas. Tenga en cuenta que si bien el rendimiento de la secuencia es mayor que el
rendimiento de la instrucción no recíproca, la precisión de la secuencia se puede
disminuyó hasta en 2 ulp (es decir, el inverso de 1.0 es igual a 0.99999994).

Tenga en cuenta que GCC implementa "1.0f / sqrtf (X)" en términos de "RSQRTSS" (o "RSQRTPS") ya
-matemáticas-rápidas (o la combinación de opciones anterior), y no necesita -mrecip.

También tenga en cuenta que GCC emite la secuencia anterior con un paso adicional de Newton-Raphson para
división de un solo flotador vectorizada y "sqrtf (X)" ya con -matemáticas-rápidas
(o la combinación de opciones anterior), y no necesita -mrecip.

-mrecip =optar
Esta opción controla qué instrucciones de estimación recíproca se pueden utilizar. optar es un
lista de opciones separadas por comas, que pueden estar precedidas por un ! para invertir la opción:

todos Habilite todas las instrucciones de estimación.

tu préstamo estudiantil
Habilite las instrucciones predeterminadas, equivalentes a -mrecip.

ninguna
Deshabilite todas las instrucciones de estimación, equivalente a -mno-receta.

div Habilite la aproximación para la división escalar.

vec-div
Habilite la aproximación para la división vectorizada.

sqrt
Habilite la aproximación para la raíz cuadrada escalar.

vec-sqrt
Habilite la aproximación para raíz cuadrada vectorizada.

Así por ejemplo, -mrecip = todo,! sqrt permite todas las aproximaciones recíprocas,
excepto por la raíz cuadrada.

-mveclibabi =tipo
Especifica el tipo de ABI que se utilizará para vectorizar intrínsecos mediante una biblioteca externa.
Valores admitidos para tipo en svml para la biblioteca matemática de vector corto de Intel y acml
para la biblioteca principal de matemáticas de AMD. Para utilizar esta opción, ambos -ftree-vectorizar y
-optimizaciones-matemáticas-divertidas debe estar habilitado y un SVML o ACML compatible con ABI
la biblioteca debe especificarse en el momento del enlace.

Actualmente, GCC emite llamadas a "vmldExp2", "vmldLn2", "vmldLog102", "vmldLog102",
"vmldPow2", "vmldTanh2", "vmldTan2", "vmldAtan2", "vmldAtanh2", "vmldCbrt2",
"vmldSinh2", "vmldSin2", "vmldAsinh2", "vmldAsin2", "vmldCosh2", "vmldCos2",
"vmldAcosh2", "vmldAcos2", "vmlsExp4", "vmlsLn4", "vmlsLog104", "vmlsLog104",
"vmlsPow4", "vmlsTanh4", "vmlsTan4", "vmlsAtan4", "vmlsAtanh4", "vmlsCbrt4",
"vmlsSinh4", "vmlsSin4", "vmlsAsinh4", "vmlsAsin4", "vmlsCosh4", "vmlsCos4",
"vmlsAcosh4" y "vmlsAcos4" para el tipo de función correspondiente cuando -mveclibabi = svml is
utilizado y "__vrd2_sin", "__vrd2_cos", "__vrd2_exp", "__vrd2_log", "__vrd2_log2",
"__vrd2_log10", "__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf",
"__vrs4_log2f", "__vrs4_log10f" y "__vrs4_powf" para el tipo de función correspondiente
cuando -mveclibabi = acml se utiliza.

-mabi =nombre
Genere código para la convención de llamada especificada. Los valores permitidos son sistema para
la ABI utilizada en GNU / Linux y otros sistemas, y ms para Microsoft ABI. los
el valor predeterminado es utilizar Microsoft ABI cuando se dirige a Microsoft Windows y SysV ABI
en todos los demás sistemas. Puede controlar este comportamiento para funciones específicas utilizando
los atributos de función "ms_abi" y "sysv_abi".

-mtls-dialecto =tipo
Genere código para acceder al almacenamiento local de subprocesos utilizando el ñu or gnu2 convenciones ñu
es el valor predeterminado conservador; gnu2 es más eficiente, pero puede agregar compilación y ejecución
requisitos de tiempo que no se pueden satisfacer en todos los sistemas.

-mpush-args
-mno-push-args
Utilice las operaciones PUSH para almacenar parámetros salientes. Este método es más corto y generalmente
igualmente rápido que el método que utiliza operaciones SUB / MOV y está habilitado de forma predeterminada. En algunos
Los casos que lo deshabilitan pueden mejorar el rendimiento debido a una programación mejorada y una reducción
dependencias.

-acumular-argumentos-salientes
Si está habilitado, la cantidad máxima de espacio requerida para los argumentos salientes se calcula en
el prólogo de la función. Esto es más rápido en la mayoría de las CPU modernas debido a la reducción
dependencias, programación mejorada y uso reducido de la pila cuando la pila preferida
el límite no es igual a 2. El inconveniente es un aumento notable en el tamaño del código. Esta
cambiar implica -mno-push-args.

-mhilos
Admite el manejo de excepciones seguro para subprocesos en MinGW. Programas que dependen de la seguridad para subprocesos
el manejo de excepciones debe compilar y vincular todo el código con el -mhilos opción. Cuándo
compilando, -mhilos define -D_MT; al vincular, se vincula en un ayudante de hilo especial
bibliotecas -lmingwthrd que limpia los datos de manejo de excepciones por subproceso.

-mno-align-stringops
No alinee el destino de las operaciones de cadena en línea. Este interruptor reduce el código
tamaño y mejora el rendimiento en caso de que el destino ya esté alineado, pero GCC
no lo sabe.

-minline-todos-stringops
Por defecto, las operaciones de cadena en línea de GCC solo cuando se sabe que el destino es
alineado con un límite mínimo de 4 bytes. Esto permite más inline y aumenta el código
tamaño, pero puede mejorar el rendimiento del código que depende de "memcpy", "strlen" y
"memset" para longitudes cortas.

-minline-stringops-dinámicamente
Para operaciones de cadena de tamaño desconocido, utilice comprobaciones en tiempo de ejecución con código en línea para
Bloques y una biblioteca convocatoria para bloques grandes.

-mstringop-estrategia =alg
Anular la heurística de decisión interna para el algoritmo particular que se utilizará para
operaciones de cadena en línea. Los valores permitidos para alg son:

rep_byte
rep_4bytes
rep_8bytes
Expanda usando el prefijo "rep" i386 del tamaño especificado.

bucle_bytes
loops
bucle_desenrollado
Expanda en un bucle en línea.

llamadalib
Utilice siempre una llamada a la biblioteca.

-mmemcpy-estrategia =estrategia
Anule la heurística de decisión interna para decidir si "__builtin_memcpy" debe ser
en línea y qué algoritmo en línea usar cuando el tamaño esperado de la operación de copia
es conocida. estrategia es una lista separada por comas de alg:tamaño máximo:destino_alinear trillizos. alg
se especifica en -mstringop-estrategia, tamaño máximo especifica el tamaño máximo de bytes con el que
algoritmo en línea alg esta permitido. Para el último triplete, el tamaño máximo debe ser "-1". los
tamaño máximo de los tripletes de la lista deben especificarse en orden creciente. los
tamaño de byte mínimo para alg es 0 para el primer triplete y "tamaño máximo + 1" de las
rango anterior.

-memset-estrategia =estrategia
La opción es similar a -mmemcpy-estrategia = excepto que es para controlar
Expansión "__builtin_memset".

-puntero-de-marco-de-hoja-de-momia
No mantenga el puntero del marco en un registro para funciones de hoja. Esto evita el
instrucciones para guardar, configurar y restaurar punteros de marco y hace un registro adicional
disponible en funciones hoja. La opción -fomit-leaf-frame-puntero quita el marco
puntero para funciones de hoja, lo que podría dificultar la depuración.

-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
Controla si se puede acceder a las variables TLS con compensaciones del segmento TLS
registro (% gs para 32 bits,% fs para 64 bits), o si el puntero de la base del subproceso debe ser
adicional. Si esto es válido o no depende del sistema operativo y si
asigna el segmento para cubrir toda el área de TLS.

Para los sistemas que usan la biblioteca GNU C, el valor predeterminado está activado.

-msse2avx
-mno-sse2avx
Especifique que el ensamblador debe codificar las instrucciones SSE con el prefijo VEX. La opción
-mavx activa esto de forma predeterminada.

-mentry
-mno-fentry
Si la creación de perfiles está activa (-página), coloque la llamada del contador de creación de perfiles antes del prólogo.
Nota: en arquitecturas x86, el atributo "ms_hook_prologue" no es posible en el
momento para -mentry y -página.

-mrecord-mcount
-mno-registro-mcount
Si la creación de perfiles está activa (-página), genera una sección __mcount_loc que contiene punteros
a cada llamada de perfilado. Esto es útil para parchear y enviar llamadas automáticamente.

-mnop-mcount
-mno-nop-mcount
Si la creación de perfiles está activa (-página), genera las llamadas a las funciones de creación de perfiles como nops.
Esto es útil cuando se deben parchear dinámicamente posteriormente. Esto es probablemente solo
útil junto con -mrecord-mcount.

-mskip-rax-configuración
-mno-skip-rax-configuración
Al generar código para la arquitectura x86-64 con las extensiones SSE deshabilitadas,
-configuración de skip-rax se puede usar para omitir la configuración del registro RAX cuando no hay variables
argumentos pasados ​​en registros vectoriales.

Advertencia: Dado que el registro RAX se utiliza para evitar guardar innecesariamente registros vectoriales en
apilar al pasar argumentos variables, los impactos de esta opción son llamadas
desperdiciar algo de espacio en la pila, portarse mal o saltar a una ubicación aleatoria. GCC 4.4 o más reciente
no tiene esos problemas, independientemente del valor del registro RAX.

-m8bit-idiv
-mno-8bit-idiv
En algunos procesadores, como Intel Atom, la división de enteros sin signo de 8 bits es mucho más rápida que
División de enteros de 32 bits / 64 bits. Esta opción genera una verificación en tiempo de ejecución. Si ambos
el dividendo y el divisor están dentro del rango de 0 a 255, la división de enteros sin signo de 8 bits es
se utiliza en lugar de la división de enteros de 32 bits / 64 bits.

-mavx256-carga dividida no alineada
-mavx256-tienda-no alineada-dividida
Dividir carga y almacenamiento no alineado AVX de 32 bytes.

-mstack-protector-guard =
Genere código de protección de pila usando canary en . Las ubicaciones admitidas son global
para canario global o tls para canary por subproceso en el bloque TLS (el valor predeterminado). Esta
La opción tiene efecto solo cuando -fstack-protector or -fstack-protector-todos está especificado.

Estas -m Los conmutadores son compatibles además de los anteriores en procesadores x86-64 en 64 bits
.

-m32
-m64
-mx32
-m16
Genere código para un entorno de 16 bits, 32 bits o 64 bits. los -m32 conjuntos de opciones "int",
"long" y tipos de puntero a 32 bits, y genera código que se ejecuta en cualquier sistema i386.

La -m64 La opción establece "int" en 32 bits y "long" y los tipos de puntero en 64 bits, y
genera código para la arquitectura x86-64. Para Darwin solo el -m64 opción también
apaga el -fno-pic y -mdynamic-sin-foto .

La -mx32 La opción establece "int", "long" y los tipos de puntero en 32 bits, y genera código
para la arquitectura x86-64.

La -m16 La opción es la misma que -m32, excepto que genera el ".code16gcc"
directiva de ensamblaje al comienzo de la salida del ensamblaje para que el binario pueda ejecutarse
en modo de 16 bits.

-mno-zona-roja
No utilice la denominada "zona roja" para el código x86-64. La zona roja es ordenada por el
x86-64 ABI; es un área de 128 bytes más allá de la ubicación del puntero de pila que no está
modificado por manejadores de señales o interrupciones y, por lo tanto, puede usarse para datos temporales
sin ajustar el puntero de la pila. La bandera -mno-zona-roja desactiva esta zona roja.

-mcmodel = pequeño
Generar código para el modelo de código pequeño: el programa y sus símbolos deben estar vinculados en
los 2 GB inferiores del espacio de direcciones. Los punteros son de 64 bits. Los programas pueden ser
vinculado estática o dinámicamente. Este es el modelo de código predeterminado.

-mcmodel = kernel
Genere código para el modelo de código del kernel. El kernel se ejecuta en los 2 GB negativos del
espacio de dirección. Este modelo debe utilizarse para el código del kernel de Linux.

-mcmodel = medio
Generar código para el modelo medio: el programa está vinculado en los 2 GB inferiores del
espacio de dirección. Allí también se colocan pequeños símbolos. Símbolos con tamaños superiores a
-umbral-de-datos-grande se colocan en secciones de datos grandes o BSS y se pueden ubicar
por encima de 2GB. Los programas se pueden vincular estática o dinámicamente.

-mcmodel = grande
Genere código para el modelo grande. Este modelo no hace suposiciones sobre direcciones
y tamaños de secciones.

-maddress-mode = largo
Genere código para el modo de dirección larga. Esto solo es compatible con 64 bits y x32
Ambientes. Es el modo de dirección predeterminado para entornos de 64 bits.

-maddress-mode = corto
Genere código para el modo de dirección corta. Esto solo es compatible con 32 bits y x32
Ambientes. Es el modo de dirección predeterminado para entornos de 32 bits y x32.

x86 Windows Opciones

Estas opciones adicionales están disponibles para destinos de Microsoft Windows:

-consola
Esta opción especifica que se generará una aplicación de consola, indicando
el vinculador para establecer el tipo de subsistema de encabezado PE necesario para las aplicaciones de consola.
Esta opción está disponible para objetivos Cygwin y MinGW y está habilitada de forma predeterminada en
esos objetivos.

-mdll
Esta opción está disponible para objetivos Cygwin y MinGW. Especifica que una DLL --- una
biblioteca de enlaces dinámicos --- se va a generar, lo que permite la selección de los
objeto de inicio en tiempo de ejecución y punto de entrada.

-mnop-diversión-dllimport
Esta opción está disponible para objetivos Cygwin y MinGW. Especifica que el
El atributo "dllimport" debe ignorarse.

-mhilo
Esta opción está disponible para objetivos MinGW. Especifica que el hilo específico de MinGW
se utilizará el apoyo.

-municódigo
Esta opción está disponible para objetivos MinGW-w64. Hace que el preprocesador "UNICODE"
macro para ser predefinido y elige un código de inicio de tiempo de ejecución compatible con Unicode.

-mwin32
Esta opción está disponible para objetivos Cygwin y MinGW. Especifica que el típico
Las macros predefinidas de Microsoft Windows deben configurarse en el preprocesador, pero no
influir en la elección de la biblioteca en tiempo de ejecución / código de inicio.

-mventanas
Esta opción está disponible para objetivos Cygwin y MinGW. Especifica que una GUI
La aplicación se generará indicando al vinculador que establezca el encabezado PE
tipo de subsistema apropiadamente.

-fno-set-stack-ejecutable
Esta opción está disponible para objetivos MinGW. Especifica que la bandera ejecutable para
la pila utilizada por las funciones anidadas no está configurada. Esto es necesario para ejecutar binarios
en modo kernel de Microsoft Windows, ya que existe la API User32, que se utiliza para configurar
privilegios ejecutables, no está disponible.

-fwritable-reubicado-rdata
Esta opción está disponible para objetivos MinGW y Cygwin. Especifica que reubicados-
los datos en la sección de solo lectura se colocan en la sección .data. Esto es necesario para mayores
Los tiempos de ejecución no admiten la modificación de las secciones .rdata para la pseudo-reubicación.

-mpe-alineados-comunes
Esta opción está disponible para objetivos Cygwin y MinGW. Especifica que el GNU
extensión al formato de archivo PE que permite la alineación correcta de variables COMUNES
debe usarse al generar código. Está habilitado por defecto si GCC detecta que el
El ensamblador de destino encontrado durante la configuración admite la función.

Ver también bajo x86 Opciones para opciones estándar.

xtormenta16 Opciones

Estas opciones están definidas para Xstormy16:

-msim
Elija los archivos de inicio y la secuencia de comandos del vinculador adecuados para el simulador.

xtensa Opciones

Estas opciones son compatibles con los destinos Xtensa:

-mconst16
-mno-const16
Habilite o deshabilite el uso de las instrucciones "CONST16" para cargar valores constantes. los
La instrucción "CONST16" no es actualmente una opción estándar de Tensilica. Cuando
habilitado, las instrucciones "CONST16" se utilizan siempre en lugar del estándar "L32R"
instrucciones. El uso de "CONST16" está habilitado de forma predeterminada solo si el "L32R"
la instrucción no está disponible.

-confundido-loco
-mno-fusionado-madd
Habilite o deshabilite el uso de las instrucciones fusionadas de multiplicar / sumar y multiplicar / restar en el
opción de punto flotante. Esto no tiene ningún efecto si la opción de punto flotante no está también
activado. La desactivación de las instrucciones fusionadas de multiplicar / sumar y multiplicar / restar fuerza
compilador para usar instrucciones separadas para las operaciones de multiplicar y sumar / restar.
Esto puede ser deseable en algunos casos donde se requieren resultados estrictos que cumplen con IEEE 754.
requerido: las instrucciones fusionadas multiplicar sumar / restar no redondean el intermedio
resultado, produciendo así resultados con más, bits de precisión que la especificada por el
Estándar IEEE. La desactivación de las instrucciones fusionadas multiplicar sumar / restar también asegura que
la salida del programa no es sensible a la capacidad del compilador para combinar multiplicar y
operaciones de suma / resta.

-mserializar-volátil
-mno-serializar-volátil
Cuando esta opción está habilitada, GCC inserta instrucciones "MEMW" antes de la memoria "volátil"
referencias para garantizar la coherencia secuencial. El valor predeterminado es -mserializar-volátil.
Uso -mno-serializar-volátil para omitir las instrucciones "MEMW".

-mforce-no-pic
Para objetivos, como GNU / Linux, donde todo el código Xtensa en modo de usuario debe estar posicionado:
código independiente (PIC), esta opción desactiva PIC para compilar el código del kernel.

-mtext-sección-literales
-mno-text-section-literales
Estas opciones controlan el tratamiento de las agrupaciones literales. El valor predeterminado es
-mno-text-section-literales, que coloca literales en una sección separada en la salida
expediente. Esto permite que el grupo literal se coloque en una RAM / ROM de datos, y también permite
el enlazador para combinar grupos literales de archivos de objetos separados para eliminar redundantes
literales y mejorar el tamaño del código. Con -mtext-sección-literales, los literales son
intercalados en la sección de texto para mantenerlos lo más cerca posible de su
referencias. Esto puede ser necesario para archivos de ensamblaje grandes.

-mtarget-alinear
-mno-objetivo-alinear
Cuando esta opción está habilitada, GCC indica al ensamblador que se alinee automáticamente
instrucciones para reducir las penalizaciones por sucursales a expensas de cierta densidad de código. los
El ensamblador intenta ampliar las instrucciones de densidad para alinear los objetivos de las ramas y el
instrucciones siguiendo las instrucciones de llamada. Si no hay suficiente caja fuerte precedente
instrucciones de densidad para alinear un objetivo, no se realiza ningún ensanchamiento. El valor predeterminado es
-mtarget-alinear. Estas opciones no afectan el tratamiento de la alineación automática.
instrucciones como "LOOP", que el ensamblador siempre alinea, ya sea ampliando
instrucciones de densidad o insertando instrucciones NOP.

-mlongllamadas
-mno-llamadas largas
Cuando esta opción está habilitada, GCC indica al ensamblador que traduzca las llamadas directas a
llamadas indirectas a menos que pueda determinar que el objetivo de una llamada directa está en el
rango permitido por la instrucción de llamada. Esta traducción se produce normalmente para llamadas a
funciones en otros archivos fuente. Específicamente, el ensamblador traduce un directo
Instrucción "CALL" en un "L32R" seguida de una instrucción "CALLX". El valor predeterminado es
-mno-llamadas largas. Esta opción debe usarse en programas donde el destino de la llamada puede
potencialmente estar fuera de rango. Esta opción se implementa en el ensamblador, no en el
compilador, por lo que el código ensamblador generado por GCC todavía muestra una llamada directa
instrucciones --- mire el código del objeto desmontado para ver las instrucciones reales.
Tenga en cuenta que el ensamblador utiliza una llamada indirecta para cada llamada entre archivos, no solo
los que realmente están fuera de alcance.

serie z Opciones

Estos se enumeran en

Opciones para Código Generación Convenciones
Estas opciones independientes de la máquina controlan las convenciones de interfaz utilizadas en el código.
generación.

La mayoría de ellos tienen formas tanto positivas como negativas; la forma negativa de -fuf is
-fno-foo. En la siguiente tabla, solo se enumera uno de los formularios --- el que no es el
defecto. Puede averiguar la otra forma eliminando nO- o agregarlo.

-comprobación-de-límites
Para las interfaces que lo admiten, genere código adicional para verificar que los índices utilizados para
las matrices de acceso están dentro del rango declarado. Esto actualmente solo es compatible con
Interfaces de Java y Fortran, donde esta opción por defecto es verdadero y falso
respectivamente.

-fstack-reuse =nivel de reutilización
Esta opción controla la reutilización del espacio de pila para las variables locales / automáticas declaradas por el usuario y
temporales generados por el compilador. nivel_reutilización puede ser todos, vars_nombreso ninguna. todos
permite la reutilización de la pila para todas las variables locales y temporales, vars_nombres permite que el
reutilizar solo para variables locales definidas por el usuario con nombres, y ninguna deshabilita la reutilización de la pila
completamente. El valor predeterminado es todos. La opción es necesaria cuando el programa se extiende
la vida útil de una variable local de ámbito o un compilador generado temporalmente más allá del
punto final definido por el idioma. Cuando termina la vida de una variable, y si el
variable vive en la memoria, el compilador de optimización tiene la libertad de reutilizar su pila
espacio con otros temporales o variables locales de ámbito cuyo rango en vivo no
superponerse con él. Es probable que el código heredado que extiende la vida útil local rompa con el
optimización de la reutilización de la pila.

Por ejemplo,

int * p;
{
intlocal1;

p = & local1;
locales1 = 10;
....
}
{
intlocal2;
locales2 = 20;
...
}

if (* p == 10) // uso fuera del alcance de local1
{

}

Otro ejemplo:

estructura A
{
A (int k): i (k), j (k) {}
int i;
intj;
};

A * ap;

void foo (const A & ar)
{
ap = & ar;
}

barra vacía ()
{
fooA(10)); // la vida útil del objeto temporal termina cuando foo regresa

{
A a(20);
....
}
ap-> i + = 10; // ap hace referencia a temp fuera del alcance cuyo espacio
// se reutiliza con un. ¿Cuál es el valor de ap-> i?
}

El tiempo de vida de un compilador generado temporalmente está bien definido por el estándar C ++.
Cuando termina la vida de un temporal, y si el temporal vive en la memoria, el
El compilador optimizador tiene la libertad de reutilizar su espacio de pila con otros temporales o
variables locales de ámbito cuyo rango en vivo no se superpone con él. Sin embargo, algunos de los
El código heredado se basa en el comportamiento de compiladores más antiguos en los que la pila temporal
el espacio no se reutiliza, la reutilización agresiva de la pila puede provocar errores de tiempo de ejecución. Esta
La opción se utiliza para controlar la optimización de la reutilización de la pila temporal.

-ftrapv
Esta opción genera trampas para el desbordamiento firmado al sumar, restar,
operaciones de multiplicación.

-fwrapv
Esta opción indica al compilador que asuma que el desbordamiento aritmético firmado de
suma, resta y multiplicación se envuelve usando complemento a dos
representación. Esta bandera habilita algunas optimizaciones y deshabilita otras. Esta
La opción está habilitada de forma predeterminada para la interfaz de Java, como lo requiere el lenguaje Java.
especificación.

-fexcepciones
Habilite el manejo de excepciones. Genera código adicional necesario para propagar excepciones. Para
algunos objetivos, esto implica que GCC genera información de desenrollado de tramas para todas las funciones,
que puede producir una sobrecarga de tamaño de datos significativa, aunque no afecta
ejecución. Si no especifica esta opción, GCC la habilita de forma predeterminada para los idiomas
como C ++ que normalmente requieren manejo de excepciones y lo deshabilita para lenguajes como
C que normalmente no lo requieren. Sin embargo, es posible que deba habilitar esta opción cuando
compilar código C que necesita interoperar correctamente con los manejadores de excepciones escritos
en C ++. También puede deshabilitar esta opción si está compilando C ++ más antiguo.
programas que no utilizan el manejo de excepciones.

-fnon-call-excepciones
Genere código que permita las instrucciones de captura para lanzar excepciones. Tenga en cuenta que esto
requiere soporte de tiempo de ejecución específico de la plataforma que no existe en todas partes. Es más,
solo permite captura instrucciones para lanzar excepciones, es decir, referencias de memoria o
instrucciones de coma flotante. No permite que se arrojen excepciones de arbitrarias
manejadores de señales como "SIGALRM".

-f eliminar-excepciones-muertas
Tenga en cuenta que las instrucciones que pueden generar excepciones pero que de otra manera no contribuyen a
la ejecución del programa se puede optimizar. Esta opción está activada de forma predeterminada
para la interfaz Ada, según lo permitido por la especificación del lenguaje Ada. Mejoramiento
Los pases que provocan la eliminación de excepciones muertas se habilitan de forma independiente en diferentes
niveles de optimización.

-Mesas-divertidas-de-viento
Similar a -fexcepciones, excepto que solo genera los datos estáticos necesarios, pero
no afecta el código generado de ninguna otra manera. Normalmente no es necesario
habilitar esta opción; en cambio, un procesador de lenguaje que necesita este manejo lo habilita
en su nombre.

-mesas-de-desenrollado-sincronizado
Genere una tabla de desenrollado en formato DWARF 2, si es compatible con la máquina de destino. La mesa es
exacto en cada límite de instrucción, por lo que se puede utilizar para desenrollar la pila de
eventos asincrónicos (como depurador o recolector de basura).

-fno-gnu-único
En sistemas con reciente ensamblador GNU y biblioteca C, el compilador C ++ usa el
Enlace "STB_GNU_UNIQUE" para asegurarse de que las definiciones de los miembros de datos estáticos de la plantilla
y las variables locales estáticas en funciones en línea son únicas incluso en presencia de
"RTLD_LOCAL"; esto es necesario para evitar problemas con una biblioteca utilizada por dos
Complementos "RTLD_LOCAL" dependiendo de una definición en uno de ellos y por lo tanto
en desacuerdo con el otro sobre la vinculación del símbolo. Pero esto causa
"dlclose" se ignorará para los DSO afectados; si su programa se basa en la reinicialización
de un DSO a través de "dlclose" y "dlopen", puede utilizar -fno-gnu-único.

-fpcc-estructura-retorno
Devuelve valores de "estructura" y "unión" "cortos" en la memoria como los más largos, en lugar de en
registros. Esta convención es menos eficiente, pero tiene la ventaja de permitir
intercallabilidad entre archivos compilados por GCC y archivos compilados con otros compiladores,
particularmente el compilador portátil de C (pcc).

La convención precisa para devolver estructuras en la memoria depende del objetivo
macros de configuración.

Las estructuras y uniones cortas son aquellas cuyo tamaño y alineación coinciden con los de algunos
tipo entero.

Advertencia: código compilado con el -fpcc-estructura-retorno el interruptor no es compatible con binarios
con código compilado con el -freg-estructura-retorno cambiar. Úselo para ajustarse a una
interfaz binaria de la aplicación predeterminada.

-freg-estructura-retorno
Devuelve los valores de "estructura" y "unión" en los registros cuando sea posible. Esto es más eficiente
para estructuras pequeñas que -fpcc-estructura-retorno.

Si no especifica ninguno -fpcc-estructura-retorno ni -freg-estructura-retorno, GCC por defecto es
cualquier convención que sea estándar para el objetivo. Si no existe una convención estándar,
GCC por defecto es -fpcc-estructura-retorno, excepto en objetivos donde GCC es el principal
compilador. En esos casos, podemos elegir el estándar y elegimos el más eficiente
registro alternativa de devolución.

Advertencia: código compilado con el -freg-estructura-retorno el interruptor no es compatible con binarios
con código compilado con el -fpcc-estructura-retorno cambiar. Úselo para ajustarse a una
interfaz binaria de la aplicación predeterminada.

-f-enumeraciones cortas
Asigne a un tipo "enum" solo tantos bytes como necesite para el rango declarado de
valores posibles. Específicamente, el tipo "enum" es equivalente al entero más pequeño
tipo que tiene suficiente espacio.

Advertencia: las -f-enumeraciones cortas El interruptor hace que GCC genere código que no es binario.
compatible con el código generado sin ese interruptor. Úselo para ajustarse a una
interfaz binaria de la aplicación predeterminada.

-f corto-doble
Utilice el mismo tamaño para "doble" que para "flotar".

Advertencia: las -f corto-doble El interruptor hace que GCC genere código que no es binario.
compatible con el código generado sin ese interruptor. Úselo para ajustarse a una
interfaz binaria de la aplicación predeterminada.

-fshort-wchar
Anule el tipo subyacente de "wchar_t" para que sea "short unsigned int" en lugar del
predeterminado para el objetivo. Esta opción es útil para crear programas que se ejecuten bajo
VINO.

Advertencia: las -fshort-wchar El interruptor hace que GCC genere código que no es binario.
compatible con el código generado sin ese interruptor. Úselo para ajustarse a una
interfaz binaria de la aplicación predeterminada.

-fno-común
En código C, controla la ubicación de variables globales no inicializadas. Compiladores de Unix C
tradicionalmente han permitido múltiples definiciones de tales variables en diferentes
unidades de compilación colocando las variables en un bloque común. Este es el comportamiento
especificado por -fcomún, y es el predeterminado para GCC en la mayoría de los destinos. Por otra parte,
este comportamiento no es requerido por ISO C, y en algunos objetivos puede llevar una velocidad o código
penalización de tamaño en referencias variables. los -fno-común La opción especifica que la
El compilador debe colocar variables globales no inicializadas en la sección de datos del objeto.
archivo, en lugar de generarlos como bloques comunes. Esto tiene el efecto de que si el
se declara la misma variable (sin "extern") en dos compilaciones diferentes, se obtiene un
error de definición múltiple al vincularlos. En este caso, debe compilar con
-fcomún en lugar de. Compilando con -fno-común es útil en objetivos para los que
proporciona un mejor rendimiento, o si desea verificar que el programa funcionará en
otros sistemas que siempre tratan las declaraciones de variables no inicializadas de esta manera.

-fno-ident
Ignore la directiva "#ident".

-directiva-de-tamaño-finhibit
No genere una directiva de ensamblador ".size" o cualquier otra cosa que pueda causar problemas
si la función está dividida en el medio y las dos mitades se colocan en ubicaciones lejanas
aparte en la memoria. Esta opción se usa al compilar crtstuff.c; no deberías necesitar
usarlo para cualquier otra cosa.

-fverbose-asm
Ponga información de comentario adicional en el código ensamblador generado para hacerlo más
legible. Esta opción generalmente solo es útil para aquellos que realmente necesitan leer el
código ensamblador generado (quizás mientras se depura el propio compilador).

-fno-verboso-asm, el valor predeterminado, hace que se omita la información adicional y se
útil cuando se comparan dos archivos ensambladores.

-frecord-gcc-interruptores
Este modificador hace que la línea de comando utilizada para invocar al compilador se registre en
el archivo de objeto que se está creando. Este cambio solo se implementa en algunos
destinos y el formato exacto de la grabación es el formato de archivo de destino y binario
dependiente, pero generalmente toma la forma de una sección que contiene texto ASCII. Esta
interruptor está relacionado con el -fverbose-asm cambiar, pero ese cambio solo graba
información en el archivo de salida del ensamblador como comentarios, por lo que nunca llega al objeto
expediente. Ver también -conmutadores-gcc-de-grecord para otra forma de almacenar las opciones del compilador en
el archivo de objeto.

-fpic
Genere un código independiente de la posición (PIC) adecuado para su uso en una biblioteca compartida, si
compatible con la máquina de destino. Dicho código accede a todas las direcciones constantes a través de un
tabla de compensación global (GOT). El cargador dinámico resuelve las entradas GOT cuando el
inicia el programa (el cargador dinámico no es parte de GCC; es parte de la operación
sistema). Si el tamaño GOT del ejecutable vinculado supera un máximo específico de la máquina
tamaño, recibe un mensaje de error del vinculador que indica que -fpic No funciona; en
ese caso, recompilar con -fPIC en lugar de. (Estos máximos son 8k en SPARC y 32k
en el m68k y RS / 6000. El x86 no tiene tal límite).

El código independiente de la posición requiere un soporte especial y, por lo tanto, solo funciona en
ciertas máquinas. Para el x86, GCC admite PIC para System V pero no para Sun
386i. El código generado para IBM RS / 6000 es siempre independiente de la posición.

Cuando se establece este indicador, las macros "__pic__" y "__PIC__" se definen en 1.

-fPIC
Si es compatible con la máquina de destino, emita un código independiente de la posición, adecuado para
vinculación dinámica y evitar cualquier límite en el tamaño de la tabla de compensación global. Esta
La opción marca la diferencia en el m68k, PowerPC y SPARC.

El código independiente de la posición requiere un soporte especial y, por lo tanto, solo funciona en
ciertas máquinas.

Cuando se establece este indicador, las macros "__pic__" y "__PIC__" se definen en 2.

-fpie
-fPIE
Estas opciones son similares a -fpic y -fPIC, pero generó un código independiente de la posición
solo se puede vincular a ejecutables. Por lo general, estas opciones se utilizan cuando -tarta GCC
La opción se utiliza durante la vinculación.

-fpie y -fPIE ambos definen las macros "__pie__" y "__PIE__". Las macros tienen el
valor 1 para -fpie y 2 para -fPIE.

-fno-tablas-de-salto
No use tablas de salto para declaraciones de cambio incluso donde sería más eficiente
que otras estrategias de generación de código. Esta opción se utiliza junto con
-fpic or -fPIC para el código de construcción que forma parte de un enlazador dinámico y no puede
referencia la dirección de una tabla de salto. En algunos objetivos, las tablas de salto no requieren
GOT y esta opción no es necesaria.

-fijo-reg
Trate el registro nombrado reg como registro fijo; el código generado nunca debe hacer referencia a
(excepto quizás como un puntero de pila, puntero de marco o en alguna otra función fija).

reg debe ser el nombre de un registro. Los nombres de registro aceptados son específicos de la máquina
y se definen en la macro "REGISTER_NAMES" en el archivo de macro de descripción de la máquina.

Esta bandera no tiene una forma negativa, porque especifica una opción de tres vías.

-fcall-usado-reg
Trate el registro nombrado reg como un registro asignable que es golpeado por función
llamadas. Puede asignarse para temporales o variables que no viven en un
llama. Las funciones compiladas de esta manera no guardan ni restauran el registro reg.

Es un error utilizar esta bandera con el puntero de marco o el puntero de pila. Uso de este
Marcar para otros registros que tienen roles omnipresentes fijos en la ejecución de la máquina
modelo produce resultados desastrosos.

Esta bandera no tiene una forma negativa, porque especifica una opción de tres vías.

-fcall-Saved-reg
Trate el registro nombrado reg como un registro asignable guardado por funciones. Puede ser
asignados incluso para temporales o variables que viven a través de una llamada. Funciones
compilado de esta manera guardar y restaurar el registro reg si lo usan.

Es un error utilizar esta bandera con el puntero de marco o el puntero de pila. Uso de este
Marcar para otros registros que tienen roles omnipresentes fijos en la ejecución de la máquina
modelo produce resultados desastrosos.

Un tipo diferente de desastre resulta del uso de esta bandera para un registro en el que
se pueden devolver valores de función.

Esta bandera no tiene una forma negativa, porque especifica una opción de tres vías.

-fpack-struct [=n]
Sin un valor especificado, empaque todos los miembros de la estructura juntos sin agujeros. Cuando una
se especifica el valor (que debe ser una pequeña potencia de dos), los miembros de la estructura del paquete
de acuerdo con este valor, que representa la alineación máxima (es decir, objetos con
Los requisitos de alineación predeterminados mayores que esto se generan potencialmente desalineados en
la siguiente ubicación de ajuste.

Advertencia: las -fpack-estructura El interruptor hace que GCC genere código que no es binario.
compatible con el código generado sin ese interruptor. Además, hace que el código
subóptimo. Úselo para ajustarse a una interfaz binaria de aplicación no predeterminada.

-funciones-del-instrumento
Generar llamadas de instrumentación para entrada y salida a funciones. Justo después de la función
entrada y justo antes de la salida de la función, las siguientes funciones de generación de perfiles se llaman con
la dirección de la función actual y su sitio de llamada. (En algunas plataformas,
"__builtin_return_address" no funciona más allá de la función actual, por lo que el sitio de llamada
De lo contrario, es posible que la información no esté disponible para las funciones de creación de perfiles).

void __cyg_profile_func_enter (void * this_fn,
void * call_site);
void __cyg_profile_func_exit (void * this_fn,
void * call_site);

El primer argumento es la dirección del inicio de la función actual, que puede ser
buscó exactamente en la tabla de símbolos.

Esta instrumentación también se realiza para funciones expandidas en línea en otras funciones.
Las llamadas de creación de perfiles indican dónde, conceptualmente, se ingresa la función en línea y
salido. Esto significa que deben estar disponibles versiones direccionables de dichas funciones. Si
todos los usos de una función se expanden en línea, esto puede significar una expansión adicional
del tamaño del código. Si usa "extern en línea" en su código C, una versión direccionable de
deben proporcionarse tales funciones. (Este es normalmente el caso de todos modos, pero si obtiene
suerte y el optimizador siempre expande las funciones en línea, es posible que haya obtenido
lejos sin proporcionar copias estáticas).

A una función se le puede asignar el atributo "no_instrument_function", en cuyo caso este
la instrumentación no está hecha. Esto se puede utilizar, por ejemplo, para la elaboración de perfiles.
funciones enumeradas anteriormente, rutinas de interrupción de alta prioridad y cualquier función de la cual
las funciones de creación de perfiles no se pueden llamar con seguridad (tal vez manejadores de señales, si el
las rutinas de generación de perfiles generan resultados o asignan memoria).

-funciones-de-instrumentos-excluir-lista-de-archivos =presentar,presentar, ...
Establezca la lista de funciones que están excluidas de la instrumentación (consulte la descripción
of -funciones-del-instrumento). Si el archivo que contiene una definición de función coincide
con uno de presentar, entonces esa función no está instrumentada. El partido se hace en
subcadenas: si el presentar El parámetro es una subcadena del nombre del archivo, se considera
ser un partido.

Por ejemplo:

-funciones-de-instrumentos-excluir-lista-de-archivos = / bits / stl, incluir / sys

excluye cualquier función en línea definida en archivos cuyos nombres de ruta contienen / bits / stl or
incluir / sys.

Si, por alguna razón, desea incluir una carta , en una de sym, escribir ,. Por ejemplo,
-funciones-de-instrumentos-excluir-lista-de-archivos = ',, tmp' (tenga en cuenta la comilla simple que rodea
la opción).

-funciones-de-instrumentos-excluir-lista-de-funciones =sym,sym, ...
Esto es similar a -funciones-de-instrumentos-lista-de-archivos-de-exclusión, pero esta opción establece el
lista de nombres de funciones que se excluirán de la instrumentación. El nombre de la función a ser
coincidente es su nombre visible para el usuario, como "vector bla (vector constante &)", no
el nombre mutilado interno (por ejemplo, "_Z4blahRSt6vectorIiSaIiEE"). El partido se hace en
subcadenas: si el sym parámetro es una subcadena del nombre de la función, se considera
ser un partido. Para los identificadores extendidos C99 y C ++, se debe proporcionar el nombre de la función
en UTF-8, sin utilizar nombres de caracteres universales.

-fstack-comprobar
Genere código para verificar que no va más allá del límite de la pila. usted
debe especificar este indicador si está ejecutando en un entorno con varios subprocesos,
pero rara vez es necesario especificarlo en un entorno de un solo subproceso, ya que la pila
el desbordamiento se detecta automáticamente en casi todos los sistemas si solo hay una pila.

Tenga en cuenta que este cambio no hace que se realice la comprobación; la operacion
el sistema o el tiempo de ejecución del idioma debe hacer eso. El cambio hace que la generación de código
asegúrese de que vean cómo se extiende la pila.

Además, puede especificar un parámetro de cadena: no significa que no hay verificación, genérico significa
forzar el uso de cheques a la antigua, soluciones y significa utilizar el mejor método de verificación y
es equivalente a desnudo -fstack-comprobar.

La comprobación de estilo antiguo es un mecanismo genérico que no requiere soporte de destino específico en
el compilador, pero tiene los siguientes inconvenientes:

1. Estrategia de asignación modificada para objetos grandes: siempre se asignan
dinámicamente si su tamaño excede un umbral fijo.

2. Límite fijo en el tamaño del marco estático de funciones: cuando está coronado por un
función particular, la comprobación de la pila no es confiable y el
compilador

3. Ineficiencia: debido tanto a la estrategia de asignación modificada como a la genérica
implementación, el rendimiento del código se ve obstaculizado.

Tenga en cuenta que la comprobación de pila de estilo antiguo también es el método alternativo para soluciones y si no
Se ha agregado soporte de destino en el compilador.

-fstack-limit-register =reg
-fstack-limit-symbol =sym
-fno-límite de pila
Genere código para asegurarse de que la pila no crezca más allá de un cierto valor, tampoco
el valor de un registro o la dirección de un símbolo. Si se requiere una pila más grande,
la señal se genera en tiempo de ejecución. Para la mayoría de los objetivos, la señal se eleva antes de que la pila
sobrepasa el límite, por lo que es posible captar la señal sin tomar especial
precauciones

Por ejemplo, si la pila comienza en la dirección absoluta 0x80000000 y crece hacia abajo,
puedes usar las banderas -fstack-limit-symbol = __ stack_limit y
-Wl, - defsym, __ stack_limit = 0x7ffe0000 para hacer cumplir un límite de pila de 128 KB. Tenga en cuenta que
esto solo puede funcionar con el enlazador GNU.

-fsplit-pila
Genere código para dividir automáticamente la pila antes de que se desborde. La resultante
El programa tiene una pila no contigua que solo puede desbordarse si el programa no puede
asignar más memoria. Esto es más útil cuando se ejecutan programas con subprocesos, ya que
ya no es necesario calcular un buen tamaño de pila para usar en cada subproceso. Este es
actualmente solo implementado para los objetivos x86 que ejecutan GNU / Linux.

Cuando el código se compila con -fsplit-pila código de llamadas compilado sin -fsplit-pila, ahí
Puede que no haya mucho espacio de pila disponible para que se ejecute el último código. Si compila todo
código, incluido el código de la biblioteca, con -fsplit-pila no es una opción, entonces el enlazador puede
arreglar estas llamadas para que el código compilado sin -fsplit-pila siempre tiene un gran
apilar. El soporte para esto se implementa en el enlazador de oro en la versión GNU binutils
2.21 y posteriores.

-guión-subrayado
Esta opción y su contraparte, -fno-líder-subrayado, cambiar a la fuerza la forma C
los símbolos se representan en el archivo de objeto. Un uso es ayudar a vincular el legado
código de ensamblaje.

Advertencia: las -guión-subrayado El interruptor hace que GCC genere un código que no es
binario compatible con código generado sin ese conmutador. Úselo para ajustarse a un
interfaz binaria de aplicación no predeterminada. No todos los objetivos brindan un soporte completo
para este interruptor.

-ftls-modelo =modelo
Modifique el modelo de almacenamiento local de subprocesos que se utilizará. los modelo El argumento debe ser uno de
dinámico global, local-dinámico, ejecutivo-inicial or ejecutivo local. Tenga en cuenta que la elección es
sujeto a optimización: el compilador puede usar un modelo más eficiente para símbolos que no
visible fuera de la unidad de traducción, o si -fpic no se da en la línea de comando.

El predeterminado sin -fpic is ejecutivo-inicial; con -fpic el valor predeterminado es dinámico global.

-fvisibilidad =[tu préstamo estudiantil|interno|oculto|protegido]
Establezca la visibilidad predeterminada del símbolo de imagen ELF en la opción especificada --- todos los símbolos son
marcado con esto a menos que se anule dentro del código. El uso de esta función puede
mejorar sustancialmente la vinculación y los tiempos de carga de las bibliotecas de objetos compartidos, producir más
código optimizado, proporciona una exportación API casi perfecta y evita conflictos de símbolos. Está
se mostró plenamente Se recomienda que lo use en cualquier objeto compartido que distribuya.

A pesar de la nomenclatura, tu préstamo estudiantil siempre significa público; es decir, disponible para ser vinculado
contra desde fuera del objeto compartido. protegido y interno son bastante inútiles en
uso en el mundo real, por lo que la única otra opción de uso común es oculto. El valor predeterminado si
-fvisibilidad no se especifica es tu préstamo estudiantil, es decir, hacer público cada símbolo.

Una buena explicación de los beneficios ofrecidos al garantizar que los símbolos ELF tengan la
la visibilidad viene dada por "Cómo escribir bibliotecas compartidas" de Ulrich Drepper (que puede ser
encontrado enhttp://www.akkadia.org/drepper/>) --- sin embargo, una solución superior hizo
posible mediante esta opción para marcar cosas ocultas cuando el valor predeterminado es público es hacer
las cosas ocultas y marcadas por defecto como públicas. Esta es la norma con DLL en Windows y
-fvisibilidad = oculta y "__attribute__ ((visibilidad (" predeterminado ")))" en lugar de
"__declspec (dllexport)" obtiene una semántica casi idéntica con una sintaxis idéntica.
Esta es una gran ayuda para quienes trabajan con proyectos multiplataforma.

Para aquellos que agregan compatibilidad de visibilidad al código existente, puede encontrar "#pragma GCC
visibilidad "de uso. Esto funciona adjuntando las declaraciones que desea establecer
visibilidad para con (por ejemplo) "#pragma GCC visibilidad empuje (oculto)" y "#pragma
Ventana emergente de visibilidad de GCC ". Tenga en cuenta que la visibilidad de los símbolos debe visualizarse as parte of
las API interfaz. contrato y por lo tanto, todo el código nuevo siempre debe especificar la visibilidad cuando
no es el predeterminado; es decir, las declaraciones solo para uso dentro del DSO local deben
hacerlo estar marcado explícitamente como oculto para evitar la indirección PLT
gastos generales --- dejar esto muy claro también ayuda a la legibilidad y la auto-documentación
del código. Tenga en cuenta que debido a los requisitos de la especificación ISO C ++, "operador nuevo" y
La "eliminación del operador" debe tener siempre la visibilidad predeterminada.

Tenga en cuenta que los encabezados externos a su proyecto, en particular los encabezados del sistema y
encabezados de cualquier otra biblioteca que utilice, es posible que no espere que se compilen con
visibilidad distinta a la predeterminada. Es posible que deba decir explícitamente "#pragma GCC
empuje de visibilidad (predeterminado) "antes de incluir dichos encabezados.

las declaraciones "externas" no se ven afectadas por -fvisibilidad, por lo que se puede convertir una gran cantidad de código
recompilado con -fvisibilidad = oculta sin modificaciones. Sin embargo, esto significa que
las llamadas a funciones "externas" sin visibilidad explícita utilizan el PLT, por lo que es más
efectivo para usar "__attribute ((visibilidad))" y / o "#pragma GCC visibilidad" para decir
el compilador cuyas declaraciones "externas" deben tratarse como ocultas.

Tenga en cuenta que -fvisibilidad afecta a las entidades de enlace vago de C ++. Esto significa que, para
Por ejemplo, una clase de excepción que se lanza entre DSO debe marcarse explícitamente
con visibilidad predeterminada para que el tipo_info los nodos están unificados entre los DSO.

Una descripción general de estas técnicas, sus beneficios y cómo usarlas se encuentra en
<http://gcc.gnu.org/wiki/Visibility>.

-fstrict-volátiles-bitfields
Esta opción debe usarse si se accede a campos de bits volátiles (u otra estructura
campos, aunque el compilador generalmente respeta esos tipos de todos modos) debe usar un solo
acceso del ancho del tipo de campo, alineado a una alineación natural si es posible.
Por ejemplo, los objetivos con registros periféricos mapeados en memoria pueden requerir todos estos
los accesos deben tener un ancho de 16 bits; con esta bandera puede declarar todos los campos de bits periféricos
como "unsigned short" (asumiendo que el corto es de 16 bits en estos objetivos) para forzar a GCC a usar
Accesos de 16 bits en lugar de, quizás, un acceso de 32 bits más eficiente.

Si esta opción está deshabilitada, el compilador usa la instrucción más eficiente. En el
ejemplo anterior, podría ser una instrucción de carga de 32 bits, aunque acceda
bytes que no contienen ninguna parte del campo de bits o registros mapeados en memoria
no relacionado con el que se está actualizando.

En algunos casos, como cuando el atributo "empaquetado" se aplica a un campo de estructura,
Puede que no sea posible acceder al campo con una sola lectura o escritura que sea correcta.
alineado para la máquina de destino. En este caso, GCC vuelve a generar múltiples
accesos en lugar de código que fallará o truncará el resultado en tiempo de ejecución.

Nota: debido a las restricciones del modelo de memoria C / C ++ 11, no se permiten los accesos de escritura
para tocar miembros que no son de campo de bits. Por tanto, se recomienda definir todos los bits del
tipo de campo como miembros de campo de bits.

El valor predeterminado de esta opción lo determina la interfaz binaria de la aplicación para
el procesador de destino.

-fsync-libcalls
Esta opción controla si alguna instancia fuera de línea de la familia "__sync" de
Las funciones se pueden utilizar para implementar la familia de funciones "__atomic" de C ++ 11.

El valor predeterminado de esta opción está habilitado, por lo que es la única forma útil de la opción
is -fno-sync-libcalls. Esta opción se utiliza en la implementación de la libatómico
Biblioteca de ejecución.

MEDIO AMBIENTE


Esta sección describe varias variables de entorno que afectan el funcionamiento de GCC. Algunos
de ellos funcionan especificando directorios o prefijos para usar al buscar varios tipos
de archivos. Algunos se utilizan para especificar otros aspectos del entorno de compilación.

Tenga en cuenta que también puede especificar lugares para buscar utilizando opciones como -B, -I y -L.
Estos tienen prioridad sobre los lugares especificados mediante variables de entorno, que a su vez
tienen prioridad sobre los especificados por la configuración de GCC.

IDIOMA
LC_CTYPE
LC_MENSAJES
LC_TODOS
Estas variables de entorno controlan la forma en que GCC usa la información de localización.
lo que permite a GCC trabajar con diferentes convenciones nacionales. GCC inspecciona la configuración regional
categoría LC_CTYPE y LC_MENSAJES si se ha configurado para hacerlo. Estos lugares
Las categorías se pueden establecer en cualquier valor admitido por su instalación. Un valor típico es
en_GB.UTF-8 para inglés en el Reino Unido codificado en UTF-8.

La LC_CTYPE La variable de entorno especifica la clasificación de caracteres. GCC lo usa para
determinar los límites de los caracteres en una cadena; esto es necesario para algunos multibyte
codificaciones que contienen comillas y caracteres de escape que de otro modo se interpretarían como un
fin de cuerda o escape.

La LC_MENSAJES La variable de entorno especifica el idioma que se utilizará en el diagnóstico.
mensajes.

Si LC_TODOS se establece la variable de entorno, anula el valor de LC_CTYPE y
LC_MENSAJES; de otra manera, LC_CTYPE y LC_MENSAJES predeterminado al valor de la IDIOMA
Variable ambiental. Si no se establece ninguna de estas variables, GCC se establece de forma predeterminada en el tradicional
C Comportamiento inglés.

TMPDIR
If TMPDIR está configurado, especifica el directorio que se utilizará para los archivos temporales. Usos de GCC
archivos temporales para contener la salida de una etapa de compilación que se utilizará como
entrada a la siguiente etapa: por ejemplo, la salida del preprocesador, que es el
entrada al compilador propiamente dicho.

GCC_COMPARE_DEBUG
Fijar GCC_COMPARE_DEBUG es casi equivalente a pasar -fcompare-depurar En el correo electrónico “Su Cuenta de Usuario en su Nuevo Sistema XNUMXCX”.
controlador del compilador. Consulte la documentación de esta opción para obtener más detalles.

GCC_EXEC_PREFIX
If GCC_EXEC_PREFIX está configurado, especifica un prefijo para usar en los nombres de
subprogramas ejecutados por el compilador. No se agrega ninguna barra cuando se combina este prefijo
con el nombre de un subprograma, pero puede especificar un prefijo que termine con una barra si
así lo desea.

If GCC_EXEC_PREFIX no está configurado, GCC intenta encontrar un prefijo apropiado para usar
basado en el nombre de ruta con el que se invoca.

Si GCC no puede encontrar el subprograma con el prefijo especificado, intenta buscar en el
lugares habituales del subprograma.

El valor predeterminado de GCC_EXEC_PREFIX is prefijo / lib / gcc / donde prefijo es el prefijo de
el compilador instalado. En muchos casos prefijo es el valor de "prefijo" cuando ejecutó el
configurar guión.

Otros prefijos especificados con -B tiene prioridad sobre este prefijo.

Este prefijo también se utiliza para buscar archivos como crt0.o que se utilizan para vincular.

Además, el prefijo se usa de una manera inusual para encontrar los directorios para buscar.
para archivos de encabezado. Para cada uno de los directorios estándar cuyo nombre normalmente comienza
/ usr / local / lib / gcc (más precisamente, con el valor de GCC_INCLUDE_DIR), GCC intenta
reemplazando ese comienzo con el prefijo especificado para producir un directorio alternativo
nombre. Así, con -Bfoo /, Búsquedas de GCC foo / bar justo antes de que busque el estándar
directorio / usr / local / lib / bar. Si un directorio estándar comienza con el configurado
prefijo entonces el valor de prefijo es reemplazado por GCC_EXEC_PREFIX al buscar encabezado
archivos.

RUTA_COMPILADOR
El valor de RUTA_COMPILADOR es una lista de directorios separados por dos puntos, muy similar a TRAYECTORIA.
GCC prueba los directorios así especificados al buscar subprogramas, si no puede
encontrar los subprogramas usando GCC_EXEC_PREFIX.

RUTA_BIBLIOTECA
El valor de RUTA_BIBLIOTECA es una lista de directorios separados por dos puntos, muy similar a TRAYECTORIA.
Cuando se configura como un compilador nativo, GCC prueba los directorios así especificados cuando
buscando archivos especiales de creación de enlaces, si no puede encontrarlos usando GCC_EXEC_PREFIX.
La vinculación mediante GCC también utiliza estos directorios cuando se buscan bibliotecas ordinarias.
para -l opción (pero los directorios especificados con -L ven primero).

IDIOMA
Esta variable se utiliza para pasar información de configuración regional al compilador. Una forma en la que
esta información se utiliza para determinar el conjunto de caracteres que se utilizará cuando
los literales, los literales de cadena y los comentarios se analizan en C y C ++. Cuando el compilador es
configurados para permitir caracteres multibyte, los siguientes valores para IDIOMA en
Reconocido:

C-JIS
Reconoce los personajes de JIS.

ISJC-C
Reconoce los personajes de SJIS.

C-EUCJP
Reconocer caracteres EUCJP.

If IDIOMA no está definido, o si tiene algún otro valor, entonces el compilador usa "mblen"
y "mbtowc" según lo definido por la configuración regional predeterminada para reconocer y traducir multibyte
personajes.

Algunas variables de entorno adicionales afectan el comportamiento del preprocesador.

CPATH
C_INCLUDE_RUTA
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
El valor de cada variable es una lista de directorios separados por un carácter especial, mucho
como TRAYECTORIA, en el que buscar archivos de encabezado. El personaje especial,
"PATH_SEPARATOR", depende del objetivo y se determina en el momento de la compilación de GCC. Para Microsoft
Los destinos basados ​​en Windows es un punto y coma, y ​​para casi todos los demás destinos es un
colon.

CPATH especifica una lista de directorios que se buscarán como si se especificara con -I, pero
después de cualquier camino dado con -I opciones en la línea de comando. Esta variable de entorno
se utiliza independientemente del idioma que se esté preprocesando.

Las variables de entorno restantes se aplican solo al preprocesar el
idioma indicado. Cada uno especifica una lista de directorios que se buscarán como si
especificado con -sistema, pero después de cualquier camino dado con -sistema opciones en el
línea de comando.

En todas estas variables, un elemento vacío indica al compilador que busque su
directorio de trabajo. Los elementos vacíos pueden aparecer al principio o al final de una ruta. Para
ejemplo, si el valor de CPATH es ": / special / include", que tiene el mismo efecto que
-YO. -Yo / especial / incluir.

DEPENDENCIAS_SALIDA
Si se establece esta variable, su valor especifica cómo generar dependencias para Make basado
en los archivos de encabezado que no son del sistema procesados ​​por el compilador. Los archivos de encabezado del sistema son
ignorado en la salida de dependencia.

El valor de DEPENDENCIAS_SALIDA puede ser solo un nombre de archivo, en cuyo caso las reglas de creación
se escriben en ese archivo, adivinando el nombre de destino del nombre del archivo de origen. O la
el valor puede tener la forma presentar dirigidos, en cuyo caso las reglas se escriben en el archivo presentar
usando dirigidos como nombre de destino.

En otras palabras, esta variable de entorno equivale a combinar las opciones -MM
y -MF, con un opcional -MONTE cambiar también.

SUNPRO_DEPENDENCIAS
Esta variable es la misma que DEPENDENCIAS_SALIDA (ver arriba), excepto que el sistema
Los archivos de encabezado no se ignoran, por lo que implica -M más bien que -MM. Sin embargo, las
se omite la dependencia del archivo de entrada principal.

Use g ++ en línea usando los servicios de onworks.net


Servidores y estaciones de trabajo gratuitos

Descargar aplicaciones de Windows y Linux

  • 1
    Avogadro
    Avogadro
    Avogadro es un molecular avanzado
    editor diseñado para uso multiplataforma
    en química computacional, molecular
    modelado, bioinformática, materiales
    ciencia y ...
    Descargar Avogadro
  • 2
    XML TV
    XML TV
    XMLTV es un conjunto de programas para procesar
    Listados de TV (tvguide) y ayuda a administrar
    su visualización de TV, almacenando listados en un
    Formato basado en XML. Hay utilidades para
    hacer...
    Descargar XML TV
  • 3
    huelga
    huelga
    Proyecto Strikr Free Software. Artefactos
    publicado bajo un 'basado en la intención'
    licencia dual: AGPLv3 (comunidad) y
    CC-BY-NC-ND 4.0 internacional
    (comercial)...
    descargar strikr
  • 5
    GIFLIB
    GIFLIB
    giflib es una biblioteca para leer y
    escribiendo imágenes gif. Es API y ABI
    compatible con libungif que estaba en
    amplio uso mientras que la compresión LZW
    el algoritmo fue...
    Descargar GIFLIB
  • 6
    Alt-F
    Alt-F
    Alt-F proporciona un código abierto y gratuito
    firmware alternativo para DLINK
    DNS-320/320L/321/323/325/327L and
    DNR-322L. Alt-F tiene Samba y NFS;
    soporta ext2 / 3/4 ...
    Descargar Alt-F
  • Más "

Comandos de Linux

  • 1
    2ping6
    2ping6
    2ping - Una utilidad de ping bidireccional...
    Ejecutar 2ping6
  • 2
    2a3-2.7
    2a3-2.7
    2to3-2.7 - Convertidor de Python2 a Python3
    ...
    Ejecutar 2to3-2.7
  • 3
    cpqarrayd
    cpqarrayd
    cpqarrayd - controlador de matrices
    demonio de monitorización SINTAXIS: cpqarrayd [-d]
    [-v] [-t anfitrión [-t anfitrión]] DESCRIPCIÓN:
    Este programa es capaz de monitorear HP
    (Compaq) Arr...
    Ejecutar cpqarrayd
  • 4
    protocolo
    protocolo
    cproto - generar prototipos de funciones C
    y convertir definiciones de funciones...
    Ejecutar cproto
  • 5
    reparación de gapi2
    reparación de gapi2
    indocumentado - No hay página de manual para esto
    programa. DESCRIPCIÓN: Este programa no
    no tiene una página de manual. Ejecute este comando
    con el interruptor de ayuda para ver lo que
    lo hace. Para p...
    Ejecutar gapi2-reparación
  • 6
    analizador gapi2
    analizador gapi2
    indocumentado - No hay página de manual para esto
    programa. DESCRIPCIÓN: Este programa no
    no tiene una página de manual. Ejecute este comando
    con el interruptor de ayuda para ver lo que
    lo hace. Para p...
    Ejecutar gapi2-parser
  • Más "

Ad