InglésFrancésEspañol

Ad


icono de página de OnWorks

g ++ - 4.7 - Online en la nube

Ejecute g ++ - 4.7 en el proveedor de alojamiento gratuito de OnWorks sobre Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS

Este es el comando g ++ - 4.7 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...] [-pedante]
[-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.

El 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 sería -fno-foo. Este manual documenta solo uno de
estas 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] -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 -fopenmp -fms-extensiones -fplan9-extensiones -trigrafos
-no-integrado-cpp -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 -fconserve-espacio
-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 -fstats -ftemplate-depth =n
-fno-threadsafe-estática -fusible-cxa-atexit -fno-débil -nostdinc ++ -fno-predeterminado-en línea
-fvisibilidad-en-lineas-ocultas -fvisibilidad-ms-compat -Wabi -Wconversion-nulo
-Wctor-dtor-privacidad -Wdelete-no-virtual-dtor -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 -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]
-fno-diagnósticos-mostrar-opción

advertencia Opciones
-fsyntax-solo -fmax-errores =n -pedante -Errores-pedantes -w -Wextra -Pared
-vestido -Volumen-retorno -Límites de guerra -Wno-atributos
-Wno-incorporado-macro-redefinido -Wc ++ - compat -Wc ++ 11-compat -Wcast-alinear -Wcast-calificación
-Wchar-subíndices -Aplastado -Comentario -Wconversión -Wcoverage-discordancia -Wno-cpp
-Wno-obsoleto -Wno-declaraciones-obsoletas -Wdisabled-optimización -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 -Wformato-y2k
-Wframe-mayor-que =len -Wno-objeto-libre-sin-montón -Wjump-falla-init
-Calificadores-pelirrojos -Wimplícito -Declaración-función-débil -Wimplicit-int
-Winit-yo -Línea ganadora -Wmaybe-sin inicializar -Wno-int-a-puntero-cast
-Wno-invalido-offsetof -Winvalid-pch -Mayor-que =len -Optimizaciones Wunsafe-loop
-Wlogic-op -Mucho-largo -Wprincipal -Wmaybe-sin inicializar -Fuerzos-de-perdidos
-Inicializadores-de-campo-faltante -Atributo-formato-Wmissing -Wmissing-include-dirs
-Wno-guardabarros -Wno-multichar -Wnonnull -Wno-desbordamiento -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
-Tipo de dolor -Punto de secuencia -Sombra -Wsign-comparar -Conversión de wsign
-Wstack-protector -Wstack-use =len -Wstrict-aliasing -Wstrict-aliasing = n
-Wstrict-desbordamiento -Wstrict-overflow =n -Wsuggest-atributo =[puro|const|sin retorno]
-Interruptor -Wswitch-predeterminado -Wswitch-enumeración -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
-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 -fdbg-cnt-lista -fdbg-cnt =contador
lista de valores -fdisable-ipa-nombre_de_contraseña -fdisable-rtl-nombre_de_contraseña -fdisable-rtl-aprobar-
nombre =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-vcg -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-tree-guardabarros[-n]
-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-árbol-vrp[-n] -ftree-vectorizer-verbose =n -fdump-tree-storeccp[-n]
-fdump-final-insns =presentar -fcompare-depurar[=opta] -fcompare-debug-segundo
-feliminado-enano2-dups -feliminar-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 -informe-fmem -fpre-ipa-mem-informe
-fpost-ipa-mem-informe -fprofile-arcos -semilla-aleatoria =cadena -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 + -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
-funciones-falsas [=n] -falign-saltos [=n] -etiquetas-falsas [=n] -falign-loops [=n]
-matemática-fasociativa -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 -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
-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-matrix-reorg -fipa-pta -fipa-perfil -fipa-puro-constante
-fipa-referencia -algoritmo-fira =algoritmo -fira-region =región -fira-loop-presión
-fno-ira-compartir-guardar-ranuras -fno-ira-share-spill-tragamonedas -fira-verbose =n -fivoptos
-fkeep-inline-funciones -fkeep-constancias-estáticas -bloque-bucle -floop-aplanar
-intercambio-de-bucle -floop-strip-mina -floop-paralelizar-todo -flto
-flto-nivel-de-compresión -flto-partición =alg -flto-informe -fusión-de-todas-las-constantes
-fmerge-constantes -fmodulo-programado -fmodulo-sched-allow-regmoves -fmove-bucle-invariantes
guardabarros -fmudflapir -fmudflapth -fno-branch-count-reg -fno-predeterminado-en línea
-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-registrar-mover
-foptimizar-llamadas-entre-hermanos -finvestimiento-parcial -fpeel-bucles -fpredictivo-común
-fprefetch-bucle-matrices -fperfil-corrección -fprofile-dir =camino -fprofile-generar
-fprofile-generate =camino -fprofile-uso -fprofile-use =camino -fvalores-de-perfil
-matemáticas-recíprocas Sin -fregmove -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-insns
-fschedule-insns2 -fsección-anclajes -programación-selectiva -fprogramación-selectiva2
-fsel-programado-canalización -fsel-sched-pipelining-external-bucles -f-envoltura retráctil
-fseñalización-nans -fsingle-precisión-constante -fsplit-ivs-en-desenrollador
-fsplit-wide-tipos -fstack-protector -fstack-protector-todos -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-paralelize-loops =n
-ftree-pre -free-parcial-pre -ftree-pta -ftree-reasoc -fregadero de tres -ftre-sra
conversión de tres interruptores -fusión-de-tres-colas -ftree-ter -versión-de-bucle-de-tres-vect
-ftree-vectorizar -ftree-vrp -funit-a-la-vez -funroll-todos-bucles -funroll-bucles
-optimizaciones-de-bucle-divertido -optimizaciones-matemáticas-divertidas -funswitch-bucles
-expansión-variable-en-desenrollador -modelo-de-costos-fvect -fvpt -fweb -programa-completo -fwpa
-fuse-ld =izquierda -fusible-linker-plugin --param nombre =propuesta de -O -O0 -O1 -O2 -O3 -os
-Comida

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

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

enlaces Opciones
nombre-archivo-objeto -lbibliotecas -nostartfiles -nodefaultlibs -nostdlib -tarta -rdinámico -s
-estático -static-libgcc -static-libstdc ++ -compartido -libgcc-compartido -simbólico -T guión
-Wl,opción -Xlinker opción -u símbolo

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

Máquina Dependiente Opciones
AAArch64 Opciones -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 -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

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
-mwords-little-endian -mfloat-abi =nombre -mfpe -formato-mfp16 =nombre -mthumb-interfuncionamiento
-mno-pulgar-interwork -mcpu =nombre -march =nombre -mfpu =nombre -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 -mcirrus-fix-insns-inválidos
-mno-cirrus-fix-inválidos-insns -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

AVR Opciones -mmcu =mcu -argmentos-acumulativos -costo-de-rama =el costo -mcall-prólogos -menta8
-mno-interrumpe -relajarse -llamadas-cortas -mstrict-X -mtiny-pila

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 -malpha-as -gas -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

Diciembre Alfa / VMS Opciones -mvms-códigos-de-retorno -mdebug-main =prefijo -mmalloc64

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 -menta32 -maligno-300

HPPA Opciones -march =tipo de arquitectura -mbig-interruptor -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-gran-interruptor -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

i386 y x86-64 Opciones -mtune =tipo cpu -march =tipo cpu -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 -maes -mpclmul
-mfsgsbase -mrdrnd -mf16c -mfma -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4
-mxop -mlzcnt -mbmi2 -mlwp -mhilos -mno-align-stringops -minline-todos-stringops
-minline-stringops-dinámicamente -mstringop-estrategia =alg -mpush-args
-acumular-argumentos-salientes -m128bit-largo-doble -m96bit-largo-doble -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 -umbral-de-datos-grande =número -msse2avx
-mentry -m8bit-idiv -mavx256-carga dividida no alineada -mavx256-tienda-no alineada-dividida

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

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

IA-64 / VMS Opciones -mvms-códigos-de-retorno -mdebug-main =prefijo -mmalloc64

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
-modo-mxl-modelo de aplicación

MIPS Opciones -EL -EB -march =arco -mtune =arco -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips64 -mips64r2 -mips16 -mno-mips16 -mflip-mips16
-minterlink-mips16 -mno-interlink-mips16 -mabi =abi -mabicalladas -mno-abicalls
-mcompartido -mno-compartido -mplt -mno-plt -mxgot -mno-xgot -mgp32 -mgp64 -mfp32
-mfp64 -mhard-flotador -msoft-flotador -msingle-flotador -mdoble-flotador -mdsp -mno-dsp
-mdspr2 -mno-dspr2 -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
-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-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

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

RS / 6000 y PowerPC Opciones -mcpu =tipo cpu -mtune =tipo cpu -mcmodel =modelo de código -poder
-mno-poder -poder2 -mno-poder2 -poderpc -mpowerpc64 -mno-powerpc -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
-mnew-mnemotécnicos -mnemotécnicos-de-moldes -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

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 -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

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 -madjust-desenrollar
-direccionamiento-indizado -mgettrcost =número -mpt-fijo -acumular-argumentos-salientes
-símbolos-mínimos -msoft-atómico -costo-de-rama =número -mcbranchdi -mcmpeqdi -confundido-loco
-pretend-cmove

Solaris 2 Opciones -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 -mv8plus -mno-v8plus -mvis -mno-vis -mvis2 -mno-vis2
-mvis3 -mno-vis3 -mfmaf -mno-fmaf -mpopc -mno-popc -mfix-at697f

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

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 -mbig-interruptor

VAX Opciones -mg -mgnu -munix

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

x86-64 Opciones Consulte Opciones de i386 y x86-64.

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
-Mesas-divertidas-de-viento -mesas-de-desenrollado-sincronizado -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 -ftrapv
-fwrapv -comprobación-de-límites -fvisibilidad -fstrict-volátiles-bitfields

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 saldrá con el código 1 si alguna fase del compilador
devuelve un código de retorno no satisfactorio. Si especifica -códigos-pass-exit, la gcc programa
en su lugar, regresará con el error numéricamente más alto producido por cualquier fase que regresó
una indicación de error. Las interfaces de C, C ++ y Fortran devuelven 4, si es un
se encuentra un error del compilador.

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 independientemente de cualquier tipo de salida
que se está produciendo, ya sea un archivo ejecutable, un archivo objeto, un archivo ensamblador o
código C preprocesado.

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 transmitirá a la
varios procesos invocados por gcc, para que puedan mostrar las opciones de la línea de comandos
Aceptan. Si el -Wextra También se ha especificado la opción (antes de la --ayuda
opción), luego opciones de línea de comandos que no tienen documentación asociada con ellas
también se mostrará.

--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
Esto mostrará todas las opciones de optimización admitidas por el compilador.

advertencias
Esto mostrará todas las opciones que controlan los mensajes de advertencia producidos por el
compilador

dirigidos
Esto mostrará opciones específicas del objetivo. A diferencia del --objetivo-ayuda opción
sin embargo, las opciones específicas de destino del enlazador y ensamblador no serán
desplegado. Esto se debe a que esas herramientas no son compatibles con la extensión
--help = sintaxis.

params
Esto mostrará los valores reconocidos por el --param .

idioma
Esto 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
Esto mostrará 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 se puede utilizar lo siguiente:

--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
tanto que no hay nada que mostrar. Sin embargo, un caso en el que funciona es cuando
una de las clases es dirigidos. Entonces, por ejemplo, para mostrar todos los objetivos específicos
Se pueden utilizar las siguientes opciones de optimización:

--help = target, optimizadores

El --help = La opción se puede repetir en la línea de comando. Cada uso sucesivo
mostrar su clase de opciones solicitadas, omitiendo las que ya han sido
desplegado.

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 invocará todos los subprogramas de gcc bajo gdb --argumentos, de ahí la invocación de cc1
se mostrarán 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.

-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
trata .c, .h y .i archivos como archivos fuente C ++ en lugar de archivos fuente C a menos que -x is
utilizado y especifica automáticamente la vinculación con la biblioteca de C ++. 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 ++.
En 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.

El -ansi Esta opción no provoca el rechazo gratuito de programas que no son ISO. Para
menciona eso, -pedante 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 estarían integradas pero que no tienen la semántica definida por ISO C
(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. Al especificar un estándar base, el
El compilador aceptará todos los programas que sigan ese estándar y aquellos que usen GNU
extensiones que no la contradicen. Por ejemplo, -std = c90 apaga ciertos
características de GCC que son incompatibles con ISO C90, como "asm" y "typeof"
palabras clave, pero no otras extensiones GNU que no tienen un significado en ISO C90, como
omitiendo el término medio de una expresión "?:". Por otro lado, al especificar un GNU
dialecto de un estándar, todas las características que admite el compilador están habilitadas, incluso cuando
Las características cambian el significado del estándar básico y algunos programas estrictos.
puede ser rechazado. El estándar particular es utilizado por -pedante para identificar cual
Las características son extensiones GNU dada esa versión del estándar. Por ejemplo -std = gnu90
-pedante advertiría sobre el estilo C ++ // comentarios, mientras -std = gnu99 -pedante se
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. Tenga en cuenta que este estándar aún no es totalmente compatible; ver
<http://gcc.gnu.org/gcc-4.7/c99status.html> para obtener 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. El soporte es incompleto y
experimental. El nombre c1x es obsoleto.

gnu90
gnu89
Dialecto GNU de ISO C90 (incluidas algunas características de C99). Este es el valor predeterminado para C
código.

gnu99
gnu9x
Dialecto GNU de ISO C99. Cuando ISO C99 esté completamente implementado en GCC, esto
convertirse en el predeterminado. El nombre gnu9x es obsoleto.

gnu11
gnu1x
Dialecto GNU de ISO C11. El soporte es incompleto y experimental. El nombre gnu1x
es obsoleto.

c ++ 98
La norma ISO C ++ de 1998 más enmiendas. Igual que -ansi para código C ++.

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

c ++ 11
El estándar 2011 ISO C ++ más enmiendas. El soporte para C ++ 11 todavía es
experimental y puede cambiar de formas incompatibles en versiones futuras.

gnu ++ 11
Dialecto GNU de -std = c ++ 11. El soporte para C ++ 11 aún es experimental y puede 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.
Esta opción es aceptada e ignorada por las versiones 4.1.3 de GCC hasta pero sin incluir
4.3. En las versiones 4.3 y posteriores de GCC, cambia el comportamiento de GCC en el modo C99. Utilizando
esta opción es aproximadamente equivalente a agregar el atributo de función "gnu_inline" a todos
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 fue admitida por primera vez en GCC 4.3. Esta 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
incorporado, y se sabe que "strlen" no modifica 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 se lleva a cabo en un entorno alojado. Esto implica -fintegrado.
Un 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 se lleva a cabo en 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.

-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 v3.0http://www.openmp.org/>. Esta opción
implica -philoy, por lo tanto, solo se admite en objetivos que tienen soporte para
-philo.

-fgnu-tm
Cuando la opcion -fgnu-tm se especifica, el compilador generará 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
.

-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.

-no-integrado-cpp
Realiza una compilación en dos pasos: preprocesamiento y compilación. Esta opción permite
un usuario proporcionado "cc1", "cc1plus" o "cc1obj" a través del -B opción. El usuario suministró
El paso de compilación puede agregar un paso de preprocesamiento adicional después de lo normal.
preprocesamiento pero antes de compilar. El valor predeterminado es usar el cpp integrado
(CPP interno)

La semántica de esta opción cambiará si se combinan "cc1", "cc1plus" y "cc1obj".

-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 ++;
pero también puede utilizar la mayoría de las opciones del compilador GNU independientemente del idioma
programa está en. Por ejemplo, puede compilar un archivo "firstClass.C" como este:

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 ++. La versión 2 es la versión de C ++ ABI que primero
apareció en G ++ 3.4. La versión 1 es la versión de C ++ ABI que apareció por primera vez en
G ++ 3.2. La versión 0 siempre será la versión que más se ajuste a C ++.
Especificación ABI. Por lo tanto, el ABI obtenido con la versión 0 cambiará como ABI
Se corrigen errores.

La predeterminada es la versión 2.

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.

Vea también -Wabi.

-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 "operador nuevo" solo devolverá 0 si se declara lanzar(),
en cuyo caso el compilador siempre comprobará el valor de retorno incluso sin este
opción. En todos los demás casos, cuando "operador nuevo" tiene una excepción no vacía
especificación, el agotamiento de la memoria se indica lanzando "std :: bad_alloc". Ver también
nueva (no tirar).

-fconserve-espacio
Coloque las variables globales inicializadas en tiempo de ejecución o no inicializadas en el segmento común, como
C lo hace. Esto ahorra espacio en el ejecutable a costa de no diagnosticar duplicados
definiciones. Si compila con esta bandera y su programa falla misteriosamente
después de que "main ()" se haya completado, es posible que tenga un objeto que se está destruyendo dos veces
porque se fusionaron dos definiciones.

Esta opción ya no es útil en la mayoría de los objetivos, ahora que se ha agregado soporte para
poner variables en BSS sin hacerlas comunes.

-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, y las versiones de G ++ anteriores
4.1 siempre funcionó de esa manera. Sin embargo, en ISO C ++ una función amiga que no es
declarado en un ámbito adjunto solo se puede encontrar mediante la búsqueda dependiente de argumentos.
Esta opción hace que los amigos se inyecten como en versiones anteriores.

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
construcciones de producción, al igual que definir NDEBUG. Esto no otorga permiso al código de usuario.
lanzar excepciones en violación de las especificaciones de excepción; el compilador
aún optimizar en función de las especificaciones, por lo que lanzar una excepción inesperada
resultar en un comportamiento indefinido.

-fpara-alcance
-fno-por-alcance
If -fpara-alcance se especifica, el alcance de las variables declaradas en un instrucción-for-init
se limita a la para bucle 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 ++.

El valor predeterminado si no se da ninguna bandera para seguir el estándar, pero para permitir y dar un
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 las compilaciones con y sin optimización
necesitan 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
#pragma implementación. Esto provocará 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 pedantes 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 hará que la función sea más pequeña
porque las limpiezas de EH para esas variables se pueden optimizar. La semántica
El efecto es que una excepción descartada de una función con tal excepción
La especificación resultará en 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 permitirá 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 imprimirá 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) [con 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 omitirá 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, usando -fno-bonitas-plantillas los desactivará.

-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 no lo haces
use esas partes del idioma, puede ahorrar algo de espacio usando esta bandera. Nota
ese manejo de excepciones usa la misma información, pero la generará según sea necesario.
El Dynamic_cast El operador aún se puede usar para moldes que no requieren tiempo de ejecución.
tipo de información, es decir, se convierte en "void *" o en clases base inequívocas.

-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-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 funcionará si su C
la biblioteca admite "__cxa_atexit".

-fno-use-cxa-get-excepción-ptr
No utilice la rutina de tiempo de ejecución "__cxa_get_exception_ptr". Esto causará
"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 tomaron 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
incluir la clase con visibilidad explícita no tendrá 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 diferente: aquellos
Las declaraciones están permitidas si hubieran sido permitidas cuando esta opción fue
no utilizado.

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 definido en diferentes objetos compartidos será diferente, por lo que
cambiar uno no cambiará el otro; y que los punteros a los miembros funcionales definidos
en diferentes objetos compartidos puede que no sean iguales. Cuando se da esta bandera, es un
violación de la ODR para definir tipos con el mismo nombre de manera diferente.

-fno-débil
No utilice un soporte de símbolo débil, incluso si lo proporciona el enlazador. Por defecto, G ++
utilizará símbolos débiles si están disponibles. Esta opción existe solo para pruebas y
no debe ser utilizado por usuarios finales; resultará en 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 ++:

-fno-predeterminado-en línea
No asuma en línea para funciones definidas dentro de un ámbito de clase.
Tenga en cuenta que estas funciones tendrán vínculos como funciones en línea; ellos simplemente no lo harán
estar en línea de forma predeterminada.

-Wabi (Solo C, Objective-C, C ++ y Objective-C ++)
Advertir cuando G ++ genera código que probablemente no sea compatible con el proveedor neutral
C ++ ABI. Aunque se ha hecho un esfuerzo para advertir sobre todos estos casos, existen
probablemente 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
El código que se genere será 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.

Las incompatibilidades conocidas en -versión-fabi = 2 (el predeterminado) incluye:

· Una plantilla con un parámetro de plantilla que no es de tipo de tipo de referencia está alterada
incorrectamente:

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

Esto está arreglado en -versión-fabi = 3.

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

El destrozo se cambia en -versión-fabi = 4.

Las incompatibilidades conocidas en -versión-fabi = 1 incluyen:

· Manejo incorrecto del relleno de cola para campos de bits. G ++ puede intentar empaquetar datos
en el mismo byte que una clase base. Por ejemplo:

estructura A {vacío virtual f (); int f1: 1; };
estructura B: público A {int f2: 1; };

En este caso, G ++ colocará "B :: f2" en el mismo byte que "A :: f1"; otros compiladores
no. Puede evitar este problema rellenando explícitamente "A" para que su tamaño
es un múltiplo del tamaño de bytes en su plataforma; que causará G ++ y otros
compiladores para diseñar "B" de forma idéntica.

· Manejo incorrecto de tail-padding para bases virtuales. G ++ no usa cola
relleno al diseñar bases virtuales. Por ejemplo:

estructura A {vacío virtual f (); char c1; };
estructura B {B (); char c2; };
estructura C: público A, público virtual B {};

En este caso, G ++ no colocará "B" en el relleno de cola para "A"; otro
los compiladores lo harán. Puede evitar este problema rellenando explícitamente "A" para que su
el tamaño es un múltiplo de su alineación (ignorando las clases base virtuales); esa voluntad
hacen que G ++ y otros compiladores diseñen "C" de manera idéntica.

· Manejo incorrecto de campos de bits con anchos declarados mayores que los de su
tipos subyacentes, cuando los campos de bits aparecen en una unión. Por ejemplo:

unión U {int i: 4096; };

Suponiendo que un "int" no tiene 4096 bits, G ++ hará que la unión sea demasiado pequeña
por el número de bits en un "int".

· Las clases vacías se pueden colocar en compensaciones incorrectas. Por ejemplo:

estructura A {};

estructura B {
un un;
vacío virtual f ();
};

estructura C: público B, público A {};

G ++ colocará la clase base "A" de "C" en un desplazamiento distinto de cero; debe ser colocado
en offset cero. G ++ cree erróneamente que el miembro de datos "A" de "B" es
ya en offset cero.

· Nombres de funciones de plantilla cuyos tipos implican "typename" o plantilla de plantilla
los parámetros se pueden alterar incorrectamente.

plantilla
void f (nombre de tipo Q :: X) {}

plantilla clase Q>
void f (typename Q ::X) {}

Las instancias de estas plantillas se pueden alterar incorrectamente.

También advierte sobre cambios relacionados con psABI. Los cambios conocidos de psABI en este punto incluyen:

· Para SYSV / x86-64, cuando se pasa union con long double, se cambia para pasar
memoria como se especifica en psABI. Por ejemplo:

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

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

-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.

-Wdelete-no-virtual-dtor (Solo C ++ y Objective-C ++)
Advertir cuando borrar se usa para destruir una instancia de una clase que tiene funciones virtuales
y destructor no virtual. No es seguro eliminar una instancia de una clase derivada
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.

-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, lanzar() or no excepto)
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
cuyo caso sería posible pero inseguro eliminar una instancia de una clase derivada
a través de un puntero a la clase base. Esta advertencia también está habilitada si -Weffc ++ is
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 reorganizará los inicializadores de miembros para i y j para que coincida con el
orden de declaración de los miembros, emitiendo una advertencia a tal efecto. Esta advertencia es
habilitado por -Pared.

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 ++ Segundo Edición libro:

· Elemento 11: Defina un constructor de copia y un operador de asignación para clases con
memoria asignada dinámicamente.

· Ítem 12: Prefiere la inicialización a la asignación en constructores.

· Ítem 14: Hacer virtuales los destructores en clases base.

· Elemento 15: Haga que "operator =" devuelva una referencia a * this.

· Ítem 23: No intente devolver una referencia cuando deba devolver un objeto.

También advierta sobre las violaciones de las siguientes pautas de estilo de Scott Meyers Más
Eficaz C + + libro:

· Elemento 6: Distinguir entre formas de incremento y decremento de prefijo y sufijo
operadores.

· Elemento 7: Nunca sobrecargue "&&", "||" o ",".

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 ++)
Advertir también sobre el uso de un "NULL" no lanzado como centinela. Al compilar solo con
GCC es un centinela válido, ya que "NULL" se define como "__null". Aunque es un nulo
puntero constante no es un puntero nulo, se garantiza que será del mismo tamaño que un puntero
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 moldes de nuevo estilo (Dynamic_cast, transmisión estática, reinterpret_casty const_cast) son
menos vulnerable a efectos no deseados y mucho más fácil 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 ();

fallará al compilar.

-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 ++ intentarían preservar la falta de firma, pero el estándar exige la
comportamiento actual.

estructura A {
operador int ();
Un operador & = (int);
};

principal ()
{
A a, b;
a = b;
}

En este ejemplo, G ++ sintetizará un valor predeterminado A& operador = (constante A&);, mientras que cfront
usará el definido por el usuario operador =.

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 Objective-C ++, pero también puede utilizar la mayoría de los programas GNU independientes del lenguaje.
opciones del compilador. Por ejemplo, puede compilar un archivo "alguna_clase.m" como este:

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, anulará 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 ejecutará 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 ejecutará todos los destructores predeterminados,
en orden inverso.

Los métodos "- (id) .cxx_construct" y "- (void) .cxx_destruct" así generados
solo operan en variables de instancia declaradas en la clase Objective-C actual, y no
los heredados de las superclases. Es responsabilidad del Objective-C
runtime para invocar todos estos métodos en la jerarquía de herencia de un objeto. La identificación)
Los métodos .cxx_construct "serán invocados por el tiempo de ejecución inmediatamente después de un nuevo objeto.
se asigna la instancia; se invocarán los métodos "- (void) .cxx_destruct"
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.

-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 omitirá tales advertencias si las diferencias encontradas se limitan a tipos que
comparten el 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, ...). Las opciones que se describen a continuación se pueden utilizar para controlar
algoritmo de formato de 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. En este momento, solo el front-end de C ++ puede
respete estas opciones. Sin embargo, se espera, en un futuro próximo, que el frente restante
extremos sería capaz de digerirlos correctamente.

-fmensaje-longitud =n
Intente formatear los mensajes de error para que quepan en líneas de aproximadamente n caracteres. los
por defecto es de 72 caracteres para g ++ y 0 para el resto de los frontales apoyados por
GCC. Si n es cero, entonces no se realizará ningún ajuste de línea; cada mensaje de error aparecerá
en una sola línea.

-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 una vez información de ubicación de la fuente; 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.

-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.

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 adjunta 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 -W, Por ejemplo -Wimplícito
para solicitar advertencias sobre declaraciones implícitas. Cada una de estas opciones de advertencia específicas también
tiene 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 más,
Las opciones específicas del idioma también se refieren a C + + Dialecto Opciones y Objective-C y
Objetivo-C ++ Dialecto Opciones.

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

-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 requerirán -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.

-pedante 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 -pedante 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
-pedante. 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 -pedante se dan donde están
requerido por el estándar básico. (No tendría sentido que se dieran 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
Me gusta -pedante, excepto que se producen errores en lugar de advertencias.

-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 (solo con -O2) -Wc ++ 11-compat -Wchar-subíndices
-Wenum-comparar (en C / Objc; está activado de forma predeterminada en C ++) -Wimplicit-int (C y
Objective-C solamente) -Declaración-función-débil (Solo C y Objective-C) -Comentario
-Formato -Wprincipal (solo para C / ObjC y a menos que independiente) -Wmaybe-sin inicializar
-Fuerzos-de-perdidos -Wnonnull -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 ++) Tanto un enumerador como un no enumerador aparecen en un condicional
expresión.

· (Solo C ++) Bases virtuales ambiguas.

· (Solo C ++) Subscripting a una matriz que ha sido declarada registrarse.

· (Solo C ++) Tomando la dirección de una variable que ha sido declarada registrarse.

· (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 cambió entre -fprofile-gen y -fprofile-uso, los archivos con el
Los comentarios del perfil pueden no coincidir con el archivo de origen y GCC no puede usar el perfil.
información de retroalimentación. De forma predeterminada, esta advertencia está habilitada y se trata 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 realizará todo el cálculo con "doble" porque el flotante-
literal de punto es un "doble".

-Formato
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 -pedante se usa con -Formato,
Se darán advertencias sobre las características del formato que no están en la versión estándar seleccionada (pero
no para los formatos "strfmon", ya que no están en ninguna versión del estándar C).

Como -Formato también comprueba los argumentos de formato nulo para varias funciones, -Formato
también implica -Wnonnull.

-Formato esta incluido en -Pared. Para tener más control sobre algunos aspectos de la verificación de formato,
las opciones -Wformato-y2k, -Wno-formato-extra-argumentos, -Wno-formato-longitud-cero,
-Wformat-no literal, -Seguridad de formatoy -Wformat = 2 están disponibles, pero no
incluido en -Pared.

NOTA: En Ubuntu 8.10 y versiones posteriores, esta opción está habilitada de forma predeterminada para C, C ++,
ObjC, ObjC ++. Para deshabilitar, use -Wformat = 0.

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

-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 excesivos a un "printf" o "scanf"
función de formato. El estándar C especifica que tales argumentos se ignoran.

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 suprimirá la
advertencia si los argumentos no utilizados son todos punteros, ya que la Especificación Única de Unix
dice que esos argumentos no utilizados están permitidos.

-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-no literal
If -Formato se especifica, también advierte si la cadena de formato no es una cadena literal y
por lo que no se puede verificar, a menos que la función de formato tome sus argumentos de formato como un
"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 formato
La cadena proviene de una entrada que no es de confianza y contiene %n. (Este es actualmente un subconjunto de lo que
-Wformat-no literal advierte, pero en el futuro se pueden agregar advertencias a
-Seguridad de formato que no estan incluidos en -Wformat-no literal.)

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 deshabilite todas las advertencias de formato
-Wformat = 0. Para que las advertencias de seguridad de formato sean fatales, especifique
-Werror = formato-seguridad.

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

-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 advertirá sobre la cancelación de la inicialización de "i" solo en el siguiente fragmento
cuando -Winit-yo se ha especificado:

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

-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 externo
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 -pedante.

-Fuerzos-de-perdidos
Advierte si un inicializador agregado o de unión no está completamente entre corchetes. En el siguiente
ejemplo, el inicializador para a no está completamente entre corchetes, pero para b es totalmente
entre corchetes.

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 advertir si una comparación como x <= y <= z aparece; esto es equivalente a (x <= y ? 1 : 0)
<= z, que es una interpretación diferente de la de la notación matemática ordinaria.

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
el potencial de esta confusión, GCC emitirá una advertencia cuando esta bandera sea
especificado. Para eliminar la advertencia, agregue llaves explícitas alrededor del "si" más interno
declaración por lo que no hay forma de que el "else" pueda pertenecer al "if" adjunto. los
el código resultante se vería así:

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

También advierte sobre usos peligrosos de?: Con la extensión GNU del operando central omitida. Cuando
la condición en el operador?: es una expresión booleana, el valor omitido será
siempre 1. A menudo, el usuario espera 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 ++.

-Tipo de dolor
Advertir cada vez que una función se define 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.

-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".

-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 no usado atributo.

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 no usado atributo.

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 no usado atributo.

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

-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 no usado atributo.

-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 no usado atributo.

-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 vacío. Esto incluye una expresión-declaración
o el lado izquierdo de una expresión de coma que no contiene efectos secundarios. Para
ejemplo, una expresión como x [i, j] causará una advertencia, mientras que x [(anulado) i, j] seguirá
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
estático const El miembro 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
Estas advertencias dependerán 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, la variable no es
inicializado, el compilador emitirá una advertencia si no puede probar el no inicializado
las rutas no ocurren en tiempo de ejecución. Estas advertencias se hacen 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
tiene 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, el usuario debe proporcionar un caso predeterminado
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 emitirán advertencias para pragmas desconocidos en
archivos de encabezado del sistema. Este no es el caso si las advertencias solo fueron habilitadas por 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 en que funciona -O. -Wstrict-aliasing is
equivalente a -Wstrict-aliasing = n, con n = 3.

Nivel 1: más agresivo, rápido, menos preciso. Posiblemente útil cuando los niveles más altos
no advertir, 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 requerirá un bucle, en particular cuando
determinar si se ejecutará un bucle.

-Wstrict-overflow = 1
Advierte sobre casos que son cuestionables y fáciles de evitar. Por ejemplo: "x +
1> x "; con -fstrict-desbordamiento, el compilador simplificará esto a 1. Este nivel
of -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 simplificará a" x> 0 ".

-Wstrict-overflow = 4
También advierta sobre otras simplificaciones no cubiertas por los casos anteriores. Para
ejemplo: "(x * 10) / 5" se simplificará 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 simplificará a "x + 1
> = y ". Esto se informa solo en el nivel de advertencia más alto porque
La simplificación se aplica a muchas comparaciones, por lo que este nivel de advertencia dará una
gran número de falsos positivos.

-Wsuggest-atributo =[puro|const|sin retorno]
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 ni devuelve anormalmente lanzando, llamando a "abort ()" o capturando. Esta
el análisis requiere una 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.

-Límites de guerra
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.

-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
seguirá 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ño dato o código que se crea al correr.
tiempo en la pila cuando se toma la dirección de una función anidada, y
se utiliza para llamar indirectamente a la función anidada. 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 la pila
para que sea 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, verificaría
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 los literales de cadena en el cuerpo de la macro. En
El reemplazo de macros de C tradicional tiene lugar dentro de los literales de cadena, pero no
en ISO C.

· En C tradicional, algunas directivas de preprocesador no existían. Tradicional
Los preprocesadores solo considerarían una línea como una directiva si el # aparecido en
columna 1 en la línea. Por lo tanto -Wtradicional advierte sobre directivas que
C tradicional entiende pero ignoraría porque el # no aparece como el
primer carácter de la línea. También sugiere que oculte directivas como #pragma
no se entiende por C tradicional al sangrarlos. Algunos tradicionales
las implementaciones no reconocerían #elif, por lo que 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 causaría 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 y no con versiones de GCC anteriores a GCC 3.0.

-Wundef
Advertir si se evalúa un identificador indefinido en un #Si Directiva.

-Etiquetas Wno-endif
No advertir siempre que un #else o un #terminara si van seguidos de texto.

-Sombra
Advertir siempre que una variable local o una declaración de tipo oculte otra variable,
parámetro, tipo o miembro de clase (en C ++), o siempre que una función incorporada sea
ensombrecido. Tenga en cuenta que en C ++, el compilador no advertirá si una variable local oculta una
struct / class / enum, pero advertirá si oculta un typedef explícito.

-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 pudo asumir nada en
los límites de los índices de bucle. Con -optimizaciones-de-bucle-divertido advertir si el compilador
hizo tales suposiciones.

-Formato-wno-pedante-ms (Solo objetivos MinGW)
Desactiva las advertencias sobre especificadores de ancho de formato "printf" / "scanf" no ISO "I32",
"I64" y "I" que se utilizan en los destinos de Windows según el tiempo de ejecución de MS, cuando se utiliza
las opciones -Formato y -pedante sin extensiones GNU.

-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 -pedante.

-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 < or >=. Esta advertencia también está habilitada por
-Wextra.

-Wbad-función-emitida (Solo C y Objective-C)
Advertir cada vez que una llamada de función se envía a un tipo que no coincide. Por ejemplo, advertir si
"int malloc ()" se convierte en "cualquier cosa *".

-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.

-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 *" recibirá una advertencia. Estas
las advertencias lo ayudarán a encontrar en tiempo de compilación un 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, solo será 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
Advertir sobre variables que pueden ser cambiadas por Longjmp or horquilla. Esta advertencia también es
habilitado por -Wextra.

-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 utilizarán un operador de conversión de tipo: conversiones a "anular", el
mismo tipo, una clase base o una referencia a ellos. Advertencias sobre conversiones entre
los enteros firmados y sin firmar están deshabilitados de forma predeterminada en C ++ a menos que -Conversión de wsign
está 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.

-Cuerpo-húmedo
Advertir si se produce un cuerpo vacío en un if, más or do mientras declaración. Esta advertencia es
también 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.

-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.

-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).

-Wno-atributos
No advertir si se utiliza un "__attribute__" inesperado, como atributos no reconocidos,
atributos de función aplicados a variables, etc. Esto no detendrá 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. El objetivo es
detectar funciones globales que no están declaradas en archivos de encabezado.

-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
plantillas de funciones, o 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 causaría 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 desencadenaría una advertencia:

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

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

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

GCC también advertirá sobre las definiciones de funciones que podrían ser candidatas para "formato".
atributos. Nuevamente, estos son solo posibles candidatos. GCC adivinará 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 las que
Es posible que los atributos de "formato" sean apropiados y no se detecten.

-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.

-Wnormalizado =
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.

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. Usted
solo querría hacer esto si estuviera usando algún otro esquema de normalización (como
"D"), porque de lo contrario puede crear fácilmente errores que son literalmente imposibles 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 mostrará como una "n" normal
que se ha colocado en un superíndice. ISO 10646 define el NFKC normalización
plan para convertir todos estos en una forma estándar también, y GCC le advertirá si su
el código no está en NFKC si usa -Wnormalizado = nfkc. Esta advertencia es comparable a
advirtiendo sobre cada identificador que contiene la letra O porque podría confundirse
con el dígito 0, por lo que no es el predeterminado, pero puede ser útil como codificación local
convención si el entorno de programación no se puede arreglar para mostrar estos
caracteres distintivamente.

-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.

-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"
estar desalineado aunque "struct bar" no tenga 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.

-Línea ganadora
Advierte si una función no se puede insertar y se declaró como integrada. Incluso con esto
opción, el compilador no advertirá 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 compensación de macro a un tipo que no sea POD. De acuerdo a
la norma ISO C ++ de 1998, aplicando compensación de a un tipo que no es POD no está definido. En
implementaciones de C ++ existentes, sin embargo, compensación de normalmente da resultados significativos
incluso cuando se aplica a ciertos tipos de tipos que no son POD. (Como un simple struct esa
no es un tipo POD solo en virtud de tener un constructor.) Esta bandera es para
usuarios que son conscientes de que están escribiendo código no portátil y que deliberadamente han
elegido para ignorar la advertencia al respecto.

Las restricciones sobre compensación de se puede 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 Corto Corto se utiliza el tipo. Esto está habilitado por -pedante 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 pedante ISO C90, o la sintaxis alternativa GNU
cuando está en modo pedante ISO C99. Esto es predeterminado. Para inhibir los mensajes de advertencia, utilice
-Wno-macros-variádicas.

-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.

-Wvla
Advertir si se utiliza una matriz de longitud variable en el código. -Wno-vla evitará el
-pedante 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 pudieron manejar el código de manera efectiva. A menudo, el problema es que
su código es demasiado grande o demasiado complejo; GCC se negará a optimizar programas cuando el
Es probable que la optimización en sí misma 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
-pedante, 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 estará protegido contra la rotura de la pila.

-Wno-guardabarros
Suprime las advertencias sobre construcciones que no pueden ser instrumentadas por -fguardia.

-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 -pedante, y se puede desactivar con -Wno-sobrelongitud-cadenas.

-Wsin sufijo-flotante-constantes (Solo C y Objective-C)
GCC emitirá una advertencia para cualquier constante flotante que no tenga sufijo. Cuando
usado junto con -Wsystem-encabezados advertirá sobre tales constantes en el encabezado del sistema
archivos. Esto puede resultar útil al preparar el código para usar con "FLOAT_CONST_DECIMAL64"
pragma de la extensión de coma flotante decimal a C99.

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 hará que otros depuradores se bloqueen o se nieguen a leer el programa. Si quieres
para controlar con certeza si generar la información adicional, utilice -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 estaban en
mano; Algunas sentencias pueden ejecutarse en diferentes lugares porque fueron movidas fuera 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.

-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.

-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 aumentará el tamaño de la información de depuración
tanto como un factor de dos.

-fno-depuración-tipos-sección
De forma predeterminada, al usar DWARF v4 o superior, los DIE se colocarán en su propio
.debug_types sección en lugar de hacerlos parte de la sección .debug_info. Está
más eficiente ponerlos en secciones comdat separadas, ya que el enlazador será
capaz de eliminar duplicados. Pero no todos los consumidores DWARF admiten las secciones .debug_types
todavía.

-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). Este es el
formato utilizado por DBX en IRIX 6. El valor de versión puede ser 2, 3 o 4; los
la versión predeterminada es 2.

Tenga en cuenta que con la versión 2 de DWARF, algunos puertos requieren, y siempre usarán, algunos
extensiones de DWARF 3 en conflicto en las tablas 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.

-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. Este es el predeterminado.

-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.

-gvms
Produzca información de depuración en formato de depuración VMS (si es compatible). Este es el
formato utilizado por DEBUG en sistemas 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, pero sin información sobre variables locales y sin números de línea.

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 omitir esta opción la hubiera generado,
o enciéndalo en el nivel 2 de lo contrario. La posición de este argumento en la línea de comando
no importa, entra en vigor después de que se procesan todas las demás opciones, y lo hace
sólo una vez, no importa cuántas veces se administre. Esto está destinado principalmente a ser utilizado
-fcompare-depurar.

-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 determinará 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 rechazará como una opción no válida en cualquier
compilación real (en lugar de preprocesamiento, ensamblaje o vinculación). Para obtener solo un
advertencia, ajuste 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 DWARF2 eliminando la información duplicada sobre cada
símbolo. Esta opción solo tiene sentido al generar información de depuración DWARF2
-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 definió 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 definió 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 generará información de depuración.
La intención es reducir la información de depuración de estructura duplicada entre diferentes objetos
archivos dentro del mismo programa.

Esta opción es una versión detallada de -femit-struct-debug-reducido y
-femit-struct-depuración-baseonly, que servirá 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 sería legal, 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
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 los tipos declarados en foo.c y foo.h tendrá información de depuración, pero
los tipos declarados en otro encabezado no lo harán. El valor sis significa esos tipos que satisfacen
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

-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.

-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 el 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 coincidirán más estrechamente con los archivos de origen,
si no optimiza.

-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, Así 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) devolverá verdadero solo para los primeros 10
invocaciones

-fenable-tipo-pass
-fdeshabilitar-tipo-pass=lista de rango
Este es un conjunto de opciones de depuración que se utilizan para deshabilitar / habilitar explícitamente
pasa de optimización. Para los usuarios del compilador, opciones regulares para habilitar / deshabilitar pases
debe usarse en su lugar.

* <- 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 el 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 cgraph de la función UID is
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-fdisable-pass>
* <- árbol-fdisable-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 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.

# 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
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. Tenga en cuenta que el número de pase es
calcula estáticamente a medida que los pases se registran en el administrador de pases. Por lo tanto, la
la numeración no está relacionada con el orden dinámico de ejecución de los pases. 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 explícitamente
especificado y no es un ejecutable, de lo contrario es el nombre base de la fuente
expediente. Estos interruptores pueden tener diferentes efectos cuando -E se utiliza para el 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 permitir el vertido después de los dos sub-
pasa de eliminación de expresió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-regmove
Volcado después del pase de movimiento de registro.

-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-ver
Volcado después de eliminación de extensión de letrero.

-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
-fdump-rtl-split1, -fdump-rtl-split2, -fdump-rtl-split3, -fdump-rtl-split4 y
-fdump-rtl-split5 habilitar 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 utilizó 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.

-dv Para cada uno de los demás archivos de volcado indicados (-fdump-rtl-pass), volcar un
representación del diagrama de flujo de control adecuado para ver con VCG para
archivo.pass.vcg.

-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.

-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 hará que los contadores se sumen en toda la unidad de compilación mientras
-detalles volcará cada evento a medida que los pases los generen. El predeterminado sin
La opción es sumar contadores para cada función compilada.

-fdump-árbol-cambiar
-fdump-árbol-cambiar-opciones
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.
Si -opciones se utiliza la forma, opciones es una lista de - opciones separadas que controlan
los detalles del vertedero. No todas las opciones son aplicables a todos los vertederos; los que son
no significativo será ignorado. 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
Inhibir el dumping de miembros de un ámbito o cuerpo de una función simplemente porque
se ha alcanzado el alcance. Solo descargue dichos artículos cuando sean accesibles directamente por
algún otro camino. Al descargar árboles con impresiones bonitas, esta opción inhibe el vertido
los cuerpos de las estructuras de control.

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).

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).

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.

todos Active todas las opciones, excepto crudo, Delgado, verboso y lino.

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.

vcg Vierta el gráfico de flujo de control de cada función en un archivo en formato VCG. El archivo
el nombre se hace agregando .vcg al nombre del archivo de origen. Tenga en cuenta que si el archivo
contiene más de una función, el archivo generado no puede ser utilizado directamente por
VCG. Deberá cortar y pegar el gráfico de cada función en su propio
archivo primero.

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.

solapa de barro
Vacíe cada función después de agregar la instrumentación de guardabarros. El nombre del archivo está formado por
adjuntando .solapa de barro 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.

-ftree-vectorizer-verbose =n
Esta opción controla la cantidad de salida de depuración que imprime el vectorizador. Esta
la información se escribe con error estándar, a menos que -fdump-tree-todos or -fdump-árbol-vect
se especifica, en cuyo caso se envía al archivo de listado de volcado habitual, .vector. For
n= 0 no se reporta información de diagnóstico. Si n= 1 el vectorizador informa cada bucle
que se vectorizaron y el número total de bucles que se vectorizaron. Si n= 2 el
vectorizer también informa bucles no vectorizados que pasaron la primera fase de análisis
(vect_analyze_loop_form) - es decir, contable, más interno, single-bb, single-entry / exit
bucles. Este es el mismo nivel de verbosidad que -fdump-árbol-vect-stats usos. Más alto
Los niveles de verbosidad significan más información descargada para cada bucle informado, o la misma
cantidad de información reportada para más bucles: si n= 3, modelo de costo del vectorizador
se reporta la información. Si n= 4, la información relacionada con la alineación se agrega al
informes. Si n= 5, información relacionada con referencias de datos (por ejemplo, dependencias de memoria,
patrones de acceso) se agrega a los informes. Si n= 6, el vectorizador también informa no
bucles vectorizados más internos que no pasaron la primera fase de análisis (es decir, pueden no
ser contables, o puede tener un flujo de control complicado). Si n= 7, el vectorizador informa
también bucles anidados no vectorizados. Si n= 8, la información relacionada con SLP se agrega al
informes. Para n= 9, toda la información que genera el vectorizador durante su análisis
y se informa la transformación. Este es el mismo nivel de verbosidad que
-fdump-tree-vect-detalles usos.

-semilla-aleatoria =cadena
Esta opción proporciona una semilla que GCC usa cuando de otra manera usaría números aleatorios.
Se utiliza para generar ciertos nombres de símbolos que tienen que ser diferentes en cada
archivo compilado. También se utiliza para colocar sellos únicos en archivos de datos de cobertura y
archivos de objeto que los producen. Puedes usar el -semilla-aleatoria opción de producir
archivos de objetos idénticos reproduciblemente.

El cadena 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 produciría 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

crearía 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 serán
creado y mantenido, pero descartado al final.

-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 buscará --- y no hará 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 del
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 utilizará 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 hagas 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).

-feliminar-tipos-de-depuración-no utilizados
Normalmente, al producir una salida DWARF2, GCC emitirá información de depuración para todos
tipos declarados en una unidad de compilación, independientemente de si son o no
utilizado en esa unidad de compilación. A veces esto es útil, como si, en el depurador,
desea convertir un valor a un tipo que no se usa realmente en su programa (pero que es
declarado). Más a menudo, sin embargo, esto da como resultado una cantidad significativa de espacio desperdiciado.
Con esta opción, GCC evitará producir una salida de símbolo de depuración para tipos que son
en ninguna parte del archivo fuente que se está compilando.

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 esperaría 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 -fcompare-elim -fcprop-registros -fdce -fdefer-pop rama retrasada
-fdse -f adivinar-rama-probabilidad -fif-conversión2 -fif-conversión -fipa-puro-constante
-fipa-perfil -fipa-referencia -fmerge-constantes -fsplit-wide-tipos -ftree-bit-ccp
-ftree-incorporado-llamada-dce -ftree-ccp -ftre-ch -ftree-copyrename -ftre-dce
-ftree-dominator-opciones -ftre-dse -ftree-forwprop -ftree-fre -ftree-phiprop -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 -Optimizaciones-económicas -fgcse
-fgcse-lm -fines-pequeñas-funciones -findirect-inline -fipa-sra
-foptimizar-llamadas-entre-hermanos -finvestimiento-parcial -fmirilla2 -fregmove -Bloques-de-pedidos
-freorder-funciones -frerun-cse-después-de-bucle -fsched-interbloqueo -fsched-spec
-fschedule-insns -fschedule-insns2 -fstrict-aliasing -fstrict-desbordamiento
conversión de tres interruptores -fusión-de-tres-colas -ftree-pre -ftree-vrp

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-vectorizar, -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 -versión-de-bucle-de-tres-vect

-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 compatibles con el estándar. Eso
se enciende -matemáticas-rápidas y el específico de Fortran -fno-proteger-parens y -fstack-matrices.

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 sería -fno-foo. En la mesa
a continuación, solo se enumera uno de los formularios, el que normalmente utilizará. Puedes figurar
la otra 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-predeterminado-en línea
No haga que las funciones miembro estén en línea de forma predeterminada simplemente porque están definidas dentro
el ámbito de la clase (solo C ++). De lo contrario, cuando especifique -O, funciones miembro definidas
dentro del alcance de la clase se compilan en línea de forma predeterminada; es decir, no es necesario agregar en línea
delante del nombre de la función miembro.

-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.

A partir de la versión 4.6 de GCC, la configuración predeterminada (cuando no se optimiza el tamaño) para
Los destinos Linux x32 de 86 bits y Darwin x32 de 86 bits se han cambiado a
-fomit-frame-puntero. El valor predeterminado se puede revertir a -fno-omitir-puntero-marco by
configurar GCC con el --enable-frame-puntero opción de configuración.

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.

-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 el
se hizo 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 resultará en 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ódulo basada en SMS más agresiva con movimientos de registro permitidos. Por
Al establecer esta bandera, se eliminarán ciertos bordes de anti-dependencias que activarán
la generación de reg-movimientos basados ​​en el análisis de rango de vida. Esta opcion es
efectivo 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.

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
yendo 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.

-fguardia -fmudflapth -fmudflapir
Para las interfaces que lo admiten (C y C ++), instrumente todos los punteros / arreglos de riesgo
operaciones de desreferenciación, algunas funciones estándar de cadena / montón de biblioteca y algunas otras
constructos asociados con pruebas de rango / validez. Los módulos así instrumentados deben
Inmune a desbordamientos de búfer, uso de montón no válido y algunas otras clases de C / C ++
errores de programación. La instrumentación se basa en una biblioteca de tiempo de ejecución separada
(libmudflap), que se vinculará a un programa si -fguardia se proporciona en el momento del enlace.
El comportamiento en tiempo de ejecución del programa instrumentado está controlado por el MUDFLAP_OPCIONES
Variable ambiental. Consulte "env MUDFLAP_OPTIONS = -help a.out" para conocer sus opciones.

Uso -fmudflapth en lugar de -fguardia para compilar y vincular si su programa es múltiple
roscado. Usar -fmudflapir, además de -fguardia or -fmudflapth, Si
la instrumentación debe ignorar las lecturas del puntero. Esto produce menos instrumentación (y
por lo tanto, una ejecución más rápida) y aún proporciona cierta protección contra la memoria total
corrompe escrituras, pero permite que los datos leídos erróneamente se propaguen dentro de un programa.

saltos de hilo
Realizamos optimizaciones donde verificamos si un salto se ramifica a una ubicación donde
Se encuentra otra comparación subsumida por la primera. Si es así, la primera rama es
redirigido al destino de la segunda rama o un punto inmediatamente
seguirlo, 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 seguirá 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 intentará
mover cargas que solo mueren a causa de las tiendas en sí mismas. Esto permite un bucle
que contiene una secuencia de carga / almacenamiento que se cambiará a una carga fuera del bucle, y un
copiar / almacenar dentro del bucle.

Habilitado de forma predeterminada cuando gcse 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 intentará sacar las tiendas de los bucles. Cuando
utilizado junto con -fgcse-lm, los bucles que contienen una secuencia de carga / almacenamiento se pueden
cambiado 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-divertido
Si se da, el optimizador de bucle asumirá 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 gama más amplia
de optimizaciones de bucle incluso si el optimizador de bucle en sí mismo no puede probar que estos
las suposiciones son válidas. Utilizando -Optimizaciones Wunsafe-loop, el compilador te advertirá
si encuentra este tipo de bucle.

-f salto cruzado
Realiza una transformación de salto cruzado. Esta transformación unifica código equivalente y
guardar 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 el uso
de movimientos condicionales, min, max, set flags e instrucciones de abdominales, y algunos trucos factibles
por aritmética estándar. El uso de ejecución condicional en chips donde está
disponible está controlado por "if-conversion2".

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.

-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-inlining") y propagación constante entre procedimientos (-fipa-cp). Activado
a niveles -O2, -O3, -os.

-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 x86 en niveles -O2, -O3.

-foptimizar-registrar-mover
-fregmove
Intente reasignar números de registro en instrucciones de movimiento y como operandos de otros
instrucciones sencillas para maximizar la cantidad de vinculación de registros. Este es
especialmente útil en máquinas con instrucciones de dos operandos.

Note -fregmove y -foptimizar-registrar-mover son la misma optimización.

Habilitado en niveles -O2, -O3, -os.

-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-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.

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.
Esto solo 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, como consecuencia, registrar derrames en el registro
asignación.

-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 moverá 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
Defina cuántos grupos insn (ciclos) se examinarán en busca de una dependencia de un
insn que es candidato para la eliminación prematura de la cola de insns estancados. Esta
tiene un efecto solo durante el segundo pase de programación, y solo si
-fsched-stacked-insns se utiliza. -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 el algoritmo de programación de superbloque.
La programación de superbloques permite el movimiento a través de los límites de los bloques básicos, lo que resulta en más rápido
horarios. Esta opción es experimental, ya que no todas las descripciones de máquinas utilizadas por GCC
modele la CPU lo suficientemente cerca para evitar resultados poco confiables 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 viene antes que la programación tradicional, si un bucle era módulo
programado, es posible que deseemos evitar que los pases de programación posteriores cambien su
horario, usamos esta opción para controlar eso.

-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 efecto hasta que uno de -programación-selectiva or -fprogramación-selectiva2 is
encendido.

-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 hasta -fsel-programado-canalización está prendido.

-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
Permitir que los valores se asignen en registros que serán golpeados por llamadas a funciones,
emitiendo instrucciones adicionales para guardar y restaurar los registros alrededor de dichas llamadas.
Dicha asignación se realiza solo cuando parece dar como resultado un código mejor que el
de lo contrario se producirá.

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.

-fconserve-pila
Intente minimizar el uso de la pila. El compilador intentará utilizar menos espacio de pila,
incluso si eso hace que el programa sea más lento. Esta opción implica configurar el pila grande
marco 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.

-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 no pueden escapar de la unidad de compilación.
Habilitado por defecto 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 interprocedimiento realizará la función de clonación 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-matrix-reorg
Realice el aplanamiento y la transposición de la matriz. El aplanamiento de la matriz intenta reemplazar un
Matriz m-dimensional con su matriz n-dimensional equivalente, donde n <m. Esta
reduce el nivel de direccionamiento indirecto necesario para acceder a los elementos de la matriz. los
La segunda optimización es la transposición de matrices, que intenta cambiar el orden de la
dimensiones de la matriz para mejorar la localidad de la caché. Ambas optimizaciones necesitan
-programa-completo bandera. La transposición está habilitada solo si la información de perfil está
para todos.

-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.

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-personas y --con-cloog a
habilitar la infraestructura de transformación de bucle Graphite.

-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 bucles transformará el bucle como si el usuario hubiera 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-personas
y --con-cloog para 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 bucle transformará el bucle como si el usuario hubiera 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-personas
y --con-cloog para 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 transformará el bucle como si el usuario hubiera 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
iterará 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-personas
y --con-cloog para 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 CLooG también realiza algunas optimizaciones mínimas, como index
división y eliminación de código muerto en bucles.

-floop-aplanar
Elimina la estructura de anidamiento de bucles: transforma el nido de bucles en un solo bucle. Esta
La transformación puede ser útil como una transformación de habilitación para la vectorización y
paralelización. Esta característica es experimental. Para utilizar esta transformación de código, GCC
tiene que ser configurado con --con-personas y --con-cloog para habilitar el bucle Graphite
infraestructura de transformación.

-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 transformaría 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 serían
difícil de manejar a nivel RTL (llamadas a funciones, operaciones que se expanden a no triviales
secuencias de insns). Con -funswitch-bucles también mueve operandos de condiciones que
son invariantes fuera del ciclo, por lo 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 estaban integradas 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 mantendrá las variables de la función inline-into aparte de
entre sí, de modo que es más probable que contengan los valores esperados en un
sesión de depuración. Este era el valor predeterminado en las versiones de GCC anteriores a 4.7.

-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-vectorizar
Realice la vectorización de bucles en árboles. Esta bandera está habilitada por defecto en -O3.

-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.

-versión-de-bucle-de-tres-vect
Realice el control de versiones de bucle al realizar la vectorización de bucle en árboles. Cuando aparece un bucle
ser vectorizable excepto que no se puede determinar la alineación o la dependencia de los datos
en tiempo de compilación, luego se generan versiones vectorizadas y no vectorizadas del bucle
junto con comprobaciones en tiempo de ejecución de alineación o dependencia para controlar qué versión es
ejecutado. Esta opción está habilitada de forma predeterminada excepto en el nivel -os donde está deshabilitado.

-modelo-de-costos-fvect
Habilite el modelo de costos para la vectorización.

-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.

-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 funcionen mejor.

-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. Esta opción hace
código más grande, y puede o no hacer que se ejecute más rápido.

-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,

-fsplit-ivs-en-desenrollador
Permite 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.

Combinación de -fweb y CSE suele ser suficiente para obtener el mismo efecto. Sin embargo
en los casos en que el cuerpo del bucle sea más complicado que un solo bloque básico, esto no es
de confianza. Tampoco funciona en absoluto en algunas de las 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 creará múltiples copias de algunas variables locales
al desenrollar un bucle 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 utilizará 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 algunas probabilidades de ramificación están especificadas por __incorporado_esperar, Entonces el
Se utilizarán heurísticas para adivinar las probabilidades de ramificación para el resto del flujo de control.
gráfico, tomando el __incorporado_esperar información en cuenta. Las interacciones entre el
heurísticas y __incorporado_esperar puede ser complejo y, en algunos casos, puede ser útil para
desactivar las heurísticas para que los efectos de __incorporado_esperar son 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.

-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, la retroalimentación del perfil debe estar disponible 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 funcionará 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;
}

El -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 asumirá
que una expresión como "i + 10> i" siempre será cierta para la "i" con signo. Esta
la suposición solo es válida 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 opción está en
Efectuar cualquier intento de determinar si una operación con números firmados se desbordará.
debe escribirse con cuidado para no involucrar realmente un 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.

El -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 alinearía con el siguiente límite de 32 bytes solo si
esto se puede hacer omitiendo 23 bytes o menos.

-fno-alinear-funciones y -funciones-falsas = 1 son equivalentes y significan que funciones
no se alineará.

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 serán
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.
La esperanza es que el bucle se ejecute muchas veces, lo que compensará cualquier
ejecución de las operaciones ficticias.

-fno-alinear-bucles y -falign-loops = 1 son equivalentes y significan que los bucles no serán
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 serán
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 eliminarán. 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
los atributos.

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 permanecerán 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. Si ORO se utiliza como complemento del vinculador,
Los atributos "externally_visible" se agregan automáticamente a las funciones (aún no son variables
debido a una corriente ORO problema) a los que se accede fuera de los objetos LTO de acuerdo con
archivo de resolución producido por ORO. Para otros enlazadores que no pueden generar resolución
file, los atributos explícitos "externally_visible" siguen siendo necesarios. Mientras esta opcion
es equivalente al uso adecuado de la palabra clave "estática" para programas que constan de una
lima única, en combinación con la opción -flto esta bandera se puede utilizar para compilar muchos
programas de menor escala, ya que las funciones y variables se vuelven locales para el conjunto
unidad de compilación combinada, no para el archivo fuente único en sí.

Esta opción implica -file-completo para los programas de Fortran.

-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 debe 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,
-flto La bandera debe pasarse tanto a los comandos de compilación como a los 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.

Tenga en cuenta que cuando se compila un archivo con -flto, el archivo de objeto generado es mayor que
un archivo de objeto normal porque contiene códigos de bytes de GIMPLE y el código final habitual.
Esto significa que los archivos de objetos con información LTO se pueden vincular como objetos normales.
archivos; si -flto no se pasa al enlazador, no se realizan optimizaciones entre procedimientos
aplicado.

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 -flto foo.c
gcc -c -O0 -flto bar.c
gcc -o miprog -flto -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 sin -flto, entonces miprog no está optimizado.

Al producir el binario final con -flto, GCC solo aplica optimizaciones de tiempo de enlace
a aquellos archivos que contienen bytecode. Por lo tanto, puede mezclar y combinar archivos de objetos
y bibliotecas con códigos de bytes GIMPLE y código 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. Actualmente, las siguientes opciones
se guardan en los archivos de código de bytes de GIMPLE: -fPIC, -fcomún y todos los -m banderas de destino.

En el momento del enlace, estas opciones se leen y se vuelven a aplicar. Tenga en cuenta que la corriente
La implementación no intenta reconocer valores en conflicto para estas opciones. Si
diferentes archivos tienen valores de opción en conflicto (por ejemplo, un archivo se compila con -fPIC
y otro no), el compilador simplemente usa el último valor leído del código de bytes
archivos. Se recomienda, entonces, que compile todos los archivos que participan en el
mismo enlace con las mismas opciones.

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.
en las transacciones.

Otra característica de LTO es que es posible aplicar optimizaciones entre procedimientos
en archivos escritos en diferentes idiomas. Esto requiere apoyo en el frente del idioma.
fin. Actualmente, las interfaces de C, C ++ y Fortran son capaces de emitir GIMPLE
bytecodes, así que algo como esto debería funcionar:

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 regular (no LTO); todo lo que necesitas agregar es -flto a toda la
compilar y enlazar comandos.

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 habilitar esta función, use la bandera -fusible-linker-plugin
en el momento del enlace:

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.

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 / nueva 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 errores
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.

Esta opción está deshabilitada por defecto.

-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 de origen originales o
"equilibrado" para especificar la partición en trozos de igual tamaño (siempre que sea posible).
Si especifica "ninguno" como algoritmo, se deshabilita el particionado y la transmisión por secuencias por completo. los
el valor predeterminado es "equilibrado".

-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.

-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". Ver -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. Además, nm, ar y ranlib deben admitir el enlazador
complementos para permitir un entorno de compilación con todas las funciones (capaz de compilar
bibliotecas, etc.).

El valor predeterminado es -fat-lto-objetos pero este valor predeterminado está destinado a cambiar en el futuro
lanzamientos cuando los entornos habilitados para complementos de vinculadores se vuelven más comunes.

-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.

-fuse-ld = oro
Ingrese al ORO enlazador en lugar del enlazador predeterminado.

-fuse-ld = bfd
Ingrese al ld.bfd enlazador en lugar del enlazador predeterminado.

-fcprop-registros
Después de dividir la asignación de registros y la instrucción de asignación posterior al registro,
realizar una pasada de propagación de copia para intentar reducir las dependencias de programación y
ocasionalmente elimine 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
use 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. De forma predeterminada, GCC utilizará el
directorio actual como camino, por lo que el archivo de datos de perfil aparecerá en el mismo
directorio como 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-arcs", "-fprofile-valores", "-fvpt".

If camino se especifica, GCC mirará el camino para encontrar los datos de comentarios del perfil
archivos. Ver -fprofile-dir.

-fprofile-uso
-fprofile-use =camino
Habilitar optimizaciones dirigidas a comentarios de perfil y optimizaciones generalmente rentables
solo con comentarios de perfil disponibles.

Las siguientes opciones están habilitadas: "-fbranch-probabilities", "-fvpt",
"-funroll-loops", "-fpeel-loops", "-ftracer"

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 mirará el camino para encontrar los datos de comentarios del perfil
archivos. Ver -fprofile-dir.

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, el exceso de precisión seguirá 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
Sets -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 el 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.

-fvpt
Si se combina con -fprofile-arcos, le indica al compilador que agregue un código para recopilar
información sobre valores de expresiones.

Con -franch-probabilidades, lee los datos recopilados y realiza la
optimizaciones basadas en ellos. Actualmente las optimizaciones incluyen la especialización de
operación 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 beneficiará más a los procesadores con
muchos 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 permanecerán en un
"registro de inicio".

Habilitado por defecto con -funroll-bucles y -fpeel-bucles.

-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 funcionen mejor.

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 crearán un objeto más grande y
archivos ejecutables y también será más lento. No podrá utilizar "gprof" en todos
sistemas si especifica esta opción y puede tener problemas con la depuración si
especificar 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
se registra 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 a 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

NOTA: En Ubuntu 6.10 y versiones posteriores, esta opción está habilitada de forma predeterminada para C, C ++,
ObjC, ObjC ++, si ninguno de -fno-protector-de-pila, -nostdlib, ni independiente en
Incluso cuando ambos padres biológicos vivían con el niño, los hogares casados eran más pacíficos que los que convivían, descubrió el Sr. Zill.

-fstack-protector-todos
Me gusta -fstack-protector excepto que todas las funciones están protegidas.

-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 calcularía las direcciones de las tres variables, pero si lo compila
-fsección-anclajes, accederá a las variables desde un punto de ancla común
en lugar de. 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 incluirá 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 se dan en
la siguiente tabla:

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 flancos 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 se necesita más de este número arbitrario de instrucciones
buscado, el ahorro de tiempo al llenar la ranura de retardo será 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 asignará para
realizar la optimización de eliminación de subexpresión común global. Si mas memoria
de lo especificado es necesario, no se realizará la optimización.

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 insertará o eliminará la expresión y, por lo tanto, dejará
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 permitirá la programación antes de vaciar
el estado actual y empezar de nuevo. Grandes funciones con pocas ramas o llamadas
puede crear listas excesivamente grandes que consumen 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 del á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 considerará para el inlining. Solo esto
afecta las funciones declaradas en línea y los 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 considerará la inserción en línea. 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.

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 ser demasiado ajustado (considere la unidad que consta de la función A que está en línea y
B que solo llama 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 unidades muy grandes que constan de
pequeñas funciones en línea, sin embargo, el límite de crecimiento de la unidad general es necesario para
evitar la explosión exponencial del tamaño del código. Por lo tanto, para unidades más pequeñas, el tamaño es
aumentó 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 30, lo que limita el crecimiento de la unidad a 1.3 veces el tamaño original.

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 fuera de línea copia de auto recursiva en línea
La función puede crecer al realizar una alineación recursiva.

Para funciones declaradas en línea --param max-inline-insns-recursivo es tomado en
cuenta. Para la función no declarada en línea, la inserción recursiva ocurre solo cuando
-funciones-de-fin-line (incluido en -O3) está habilitado y --param max-inline-insns-
auto recursivo se utiliza. 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 por la inserción recursiva.

Para funciones declaradas en línea --param profundidad-recursiva-en-línea-máxima es tomado en
cuenta. Para la función no declarada en línea, la inserción recursiva ocurre solo cuando
-funciones-de-fin-line (incluido en -O3) está habilitado y --param max-inline-recursivo-
profundidad-automática se utiliza. 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 dada.
expresión. Este parámetro limita la alineación solo para llamar a la expresión cuya
la probabilidad excede el umbral dado (en porcentajes). El valor predeterminado es 10.

insns de entrada temprana
Especifique el crecimiento que puede lograr el inliner temprano. En efecto, aumenta la cantidad de
inlining para código que tiene una gran penalización de abstracción. El valor predeterminado es 10.

iteraciones-max-early-inliner
iteraciones-max-early-inliner
Límite de iteraciones del inliner temprano. Esto básicamente limita el número de anidadas
las llamadas indirectas pueden resolverse con el inliner temprano. Las cadenas más profundas todavía se manejan tarde
en línea

comdat-compartir-probabilidad
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.

min-vect-loop-obligado
El número mínimo de iteraciones bajo las cuales un bucle no se vectorizará 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 sea la proporción, más agresiva será la elevación de código con
expresiones, es decir, las expresiones que han costado menos de gcse-sin restricciones-
el costo. Especificar 0 deshabilitará la elevación de expresiones simples. El valor por defecto
el valor es 10.

gcse-costo no restringido
Costo, medido aproximadamente como el costo de una sola instrucción de máquina típica, en
qué optimizaciones de GCSE no limitarán 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 será el izado de código. Especificar 0 permitirá a todos
expresiones para 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 evitará
limitando la búsqueda, pero puede ralentizar la compilación de funciones enormes. El valor por defecto
el valor 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 debe tener un bucle si ese bucle es
desenrollado, y si el bucle se desenrolla, determina cuántas veces el código del bucle
se desenrolla.

max-promedio-desenrollado-insns
El número máximo de instrucciones sesgadas por las probabilidades de su ejecución que
un bucle debería tener si ese bucle está desenrollado, y si el bucle está desenrollado,
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 debe tener un bucle si ese bucle se despega,
y si se despega el bucle, determina cuántas veces se despega el código del bucle.

tiempos máximos de pelado
El número máximo de peladuras de un solo bucle.

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 de todos los candidatos
se consideran para cada uso en optimizaciones de variables de inducción. Solo los mas
Se consideran candidatos relevantes si hay más candidatos, 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 intentamos
eliminar los IV innecesarios del conjunto durante su optimización cuando se agrega un nuevo IV
al set.

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 Omega podrá
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. Ver opción ftree-vect-loop-version
para obtener más información.

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. Consulte la opción ftree-vect-loop-version para
más información.

max-iteraciones-a-seguimiento
El número máximo de iteraciones de un bucle el algoritmo de fuerza bruta para el análisis
de # de iteraciones del bucle intenta evaluar.

fracción-cuenta-bb-caliente
Seleccione la fracción del recuento máximo de repeticiones del bloque básico en el programa
dado el bloque básico debe considerarse caliente.

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 donde la función contiene un solo bucle con un enlace conocido y otro bucle con
desconocido. Predecimos correctamente el número conocido de iteraciones, mientras que el desconocido
promedio de iteraciones a aproximadamente 10. Esto significa que el bucle sin
los límites parecerían artificialmente fríos en relación con el otro.

alinear-umbral
Seleccione la fracción de la frecuencia máxima de ejecuciones del bloque básico en función
dado el bloque básico se alineará.

alinear iteraciones de bucle
Se espera que un bucle se repita para que no se obtenga el número seleccionado de iteraciones.
alineado.

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.

El retroalimentación de cobertura dinámica de trazador se usa solo cuando la retroalimentación del perfil es
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. Este es
argumento bastante cursi, ya que la mayoría de los duplicados se eliminarán más adelante 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 menor que esta
límite.

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
Número máximo de bloques básicos en la ruta que considera cse. El valor predeterminado es 10.

max-cse-insns
El proceso máximo de instrucciones CSE antes de descargar. 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
Utilizado por el pase de reordenación de bloques básicos para decidir si se debe usar la rama incondicional
o duplicar el código en su destino. El código está duplicado cuando se estima
el tamaño es menor que este valor multiplicado por el tamaño estimado de incondicional
saltar en los puntos calientes del programa.

El reordenar-bloquear-duplicar-retroalimentación se usa solo cuando la retroalimentación del perfil es
disponible y se puede establecer en valores superiores a 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. 0 - deshabilitar
extensión de región, N - hacer como máximo N iteraciones. El valor predeterminado es 0.

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
insn se programará. El valor predeterminado es 40.

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 programará una instrucción durante
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 generará el programador del 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.

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.

min-mapeos-virtuales
Especifica el número mínimo de asignaciones virtuales en el actualizador SSA incremental
que debe registrarse para activar la heurística de asignaciones virtuales definida por
proporción-de-asignaciones-virtuales. El valor predeterminado es 100.

proporción-de-asignaciones-virtuales
Si el número de asignaciones virtuales es virtual-mappings-ratio mayor que el número
de símbolos virtuales que se van a actualizar, el actualizador SSA incremental cambia a un
actualización completa para esos símbolos. La proporción predeterminada es 3.

SSP-tamaño de búfer
El tamaño mínimo de búferes (es decir, matrices) que recibirán aplastamiento de pila
protección 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.

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 que trataremos de manera sensible al campo
durante el análisis de puntero. El valor predeterminado es cero para -O0 y -O1 y 100 para -Os,
-O2 y -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 que buscamos por adelantado 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 negará a crear matrices que sean 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
Permitir 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 realizará y
las optimizaciones que dependen de él se deshabilitarán. El tamaño máximo predeterminado de SCC es
10000.

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.

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 10000
para -O2 y superior.

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 serán manejados entonces por el
optimizaciones utilizando 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 reemplazará un puntero a un agregado con uno o más parámetros nuevos
solo cuando su tamaño acumulativo es menor o igual a factor-de-crecimiento-ipa-sra-ptr
multiplicado por el tamaño del parámetro de puntero original.

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 guardarán 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.

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.

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-cargar-datos-carreras
Permita que los optimizadores introduzcan nuevas carreras de datos en cargas. Establecer en 1 para permitir,
de lo contrario a 0. Esta opción está habilitada de forma predeterminada a menos que la establezca implícitamente
-modelo-de-memoria = .

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 a menos que la establezca implícitamente
-modelo-de-memoria = .

permitir-carreras-de-carga-empaquetadas
Permita que los optimizadores introduzcan nuevas carreras de datos en cargas de datos empaquetadas. Establecer en 1 para
permitir, de lo contrario a 0. Esta opción está habilitada de forma predeterminada a menos que la establezca implícitamente
las -modelo-de-memoria = .

Permitir carreras de datos de tienda empaquetadas
Permita que los optimizadores introduzcan nuevas carreras de datos en almacenes de datos empaquetados. Establecer en 1 para
permitir, de lo contrario a 0. Esta opción está habilitada de forma predeterminada a menos que la establezca implícitamente
las -modelo-de-memoria = .

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.

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 sabe cómo reconocer.

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.

-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 comando
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.

El -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 del
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 es experimental; en un
futura versión de GCC, estará habilitado de forma predeterminada para C99 y C ++.

-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.

-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 comando. 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.

El -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 sabe reconocer.

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.

-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 pasará al enlazador, las opciones que especifican el enlace de las bibliotecas del sistema, como
como "-static-libgcc" o "-shared-libgcc", se ignorarán. Los archivos de inicio estándar
se utilizan normalmente, a menos que -nostartfiles se utiliza. El compilador puede generar llamadas a
"memcmp", "memset", "memcpy" y "memmove". Por lo general, estas entradas se resuelven mediante
entradas en libc. Estos puntos de entrada deben suministrarse 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 pasarán al vinculador, opciones
especificando la vinculación de las bibliotecas del sistema, como "-static-libgcc" o
"-shared-libgcc", se ignorará. El compilador puede generar llamadas a "memcmp",
"memset", "memcpy" y "memmove". Estas entradas generalmente se resuelven mediante entradas en
libc. Estos puntos de entrada deben suministrarse a través de algún otro mecanismo cuando este
Se especifica la 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. (Por ejemplo, __principal, usado para asegurar C ++
se llamará a los constructores.)

-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 que se utilizaron para generar código
(-fpie, -fPIE, o subopciones de modelo) cuando especifica esta opció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 que se utilizaron para generar código (-fpic, -fPICo
subopciones de modelo) cuando especifica esta opción. [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 estará vinculado con el 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, vinculará la versión compartida de libgcc en bibliotecas compartidas por
defecto. De lo contrario, aprovechará el enlazador y optimizará el
enlazando 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.

-static-libstdc ++
Cuando el g ++ programa se utiliza para vincular un programa C ++, normalmente automáticamente
enlace contra libstdc ++. Si libstdc ++ está disponible como una biblioteca compartida, y la
-estático opción no se utiliza, entonces esto se vinculará con la versión compartida de
libstdc ++. Eso normalmente está bien. Sin embargo, a veces es útil congelar el
versión de libstdc ++ utilizado por el programa sin llegar a un nivel completamente estático
Enlace. La -static-libstdc ++ opción dirige la g ++ controlador para vincular libstdc ++
estáticamente, sin vincular 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.

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 ignorará la opción. El directorio seguirá siendo
buscado pero como un directorio del sistema en su posición normal en el sistema incluyen la cadena.
Esto es para asegurar que el procedimiento de GCC para arreglar los encabezados del sistema con errores y el orden
para la directiva include_next no se cambian 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 #incluir "presentar"; no son buscados #incluir <presentar>,
de lo contrario, como -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 especificó, 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 comprobará si la ruta proporcionada por el -B se refiere a un directorio,
y si es necesario agregará 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 a archivos de inclusión 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, entonces será reemplazado por [dir /] incluir. Esto es para ayudar con
boot-strapping 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 buscaría encabezados en / usr / include y bibliotecas en / Usr / lib,
en su lugar buscará dir / usr / include y dir / usr / lib.

Si usa tanto esta opción como la -isysroot opción, entonces la --sysroot la opción será
se aplican a las bibliotecas, pero el -isysroot La opción se aplicará 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 seguirá funcionando, pero el aspecto de la biblioteca no.

-I- Esta opción ha quedado obsoleta. Por favor use -Yo cito en lugar de -I directorios antes
las -I- y quitar el -I-. Cualquier directorio que especifique con -I opciones antes del
-I- La opción se busca solo para el caso de #incluir "presentar"; no son buscados
para #incluir <presentar>.

Si se especifican directorios adicionales con -I opciones después de la -I-, Estos
se buscan todos los directorios #incluir directivas. (Ordinariamente todos -I directorios
se utilizan de esta manera.)

Además, la -I- opción inhibe el uso del directorio actual (donde la
del archivo de entrada actual) como el primer directorio de búsqueda para #incluir "presentar".
No hay forma de anular este efecto de -I-. Con -YO. puede especificar la búsqueda
el directorio que estaba actual cuando se invocó 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.

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 si esto reduce o aumenta el tamaño del código
puede variar de un caso a otro.

-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 nops 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 el
banderas. Esto es más rápido que una comparación de software, pero puede obtener resultados incorrectos en
la presencia de NaN, o cuando dos números pequeños diferentes se comparan de manera que su
la diferencia se calcula como cero. El valor predeterminado es -msoft-cmpsf, que usa más lento, pero
Comparaciones de software 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 la ABI, compilando 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 (en caso contrario, 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. El valor por defecto
is -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 funciones de biblioteca
no se verá afectado, si no usan los modos vectoriales SIMD en lugares donde 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 podría 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. Los valores permitidos para reg son r43 y r63,
que especifican usar ese registro como un registro fijo, y ninguno, lo que significa que no
register se utiliza para este propósito. El valor predeterminado es -m1reg-ninguno.

AAArch64 Opciones

Estas opciones están definidas para implementaciones de AArch64:

-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
"pequeña".

-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 manejará 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.

-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 para arco is armv8-a. Los posibles valores para característica están documentados en el
subsección a continuación.

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. Esta opción se puede utilizar junto con o en lugar de la -mcpu =
.

-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 sea posible
valores para cpu en genérico, large. Los posibles valores para característica están documentados en
la subsección a continuación.

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.

-mtune =nombre
Especifique el nombre del procesador para ajustar el rendimiento. El código se sintonizará
como si el procesador de destino fuera del tipo especificado en esta opción, pero aún usando
instrucciones compatibles con el procesador de destino especificado por un -mcpu = opción. Esta
La opción no puede tener el sufijo de modificadores de características.

-marcha y -mcpu modificadores de características

Modificadores de características usados ​​con -marcha y -mcpu puede ser uno de los siguientes:

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 =.

ARM Opciones

Estas -m Las opciones están definidas para arquitecturas de Máquinas RISC Avanzadas (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 hará que los marcos de la pila no se
generado para funciones de hoja. El valor predeterminado es -mno-apcs-marco.

-mapas
Este es un sinónimo de -mapcs-marco.

-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 comenzarán con un conjunto de instrucciones reconocibles (o, de hecho, una de las
elección de un pequeño conjunto de prólogos de funciones diferentes), y esta información puede ser
se usa para ubicar las funciones start if dentro de un fragmento de código ejecutable. El valor por defecto
is -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.

-mwords-little-endian
Esta opción solo se aplica al generar código para procesadores big-endian. Generar
código para un orden de palabras little-endian pero un orden de bytes big-endian. Es decir, un byte
orden de la forma 32107654. Nota: esta opción solo debe usarse si necesita
compatibilidad con código para procesadores ARM big-endian generados por versiones del
compilador anterior a 2.8. Esta opción ahora está obsoleta.

-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, iwmmxt, iwmmxt2, ep9312.

-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 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-a15, corteza-r4, corteza-r4f, corteza-r5, Cortex-m4, Cortex-m3, Cortex-m1,
Cortex-m0, xescala, iwmmxt, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te, fmp626,
fa726te.

-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 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 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
-mfpe =número
-mfp =número
Esto especifica qué hardware de punto flotante (o emulación de hardware) está disponible en
el objetivo. Los nombres permitidos son: fpa, fpe2, fpe3, disidente, vfp, vfpv3, vfpv3-fp16,
vfpv3-d16, vfpv3-d16-fp16, vfpv3xd, vfpv3xd-fp16, neón, neón-fp16, vfpv4, vfpv4-d16,
fpv4-sp-d16 y neón-vfpv4. -mfp y -mfpe son sinónimos de -mfpu=fpenúmero, Para
compatibilidad con versiones anteriores de GCC.

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 serán utilizadas 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
El tamaño de todas las estructuras y uniones se redondeará 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 el 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 "noreturn". Va a
se ejecutará 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 interruptor si la función de destino estará 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 convertirán en llamadas largas.
La heurística es que las funciones estáticas, funciones que tienen la llamada breve atributo,
funciones que están dentro del alcance de un #pragma sin_llamadas_largas directiva y funciones
cuyas definiciones ya han sido compiladas dentro de la unidad de compilación actual,
no se convierta en largas llamadas. La excepción a esta regla es esa función débil
definiciones, funciones con el llamada larga atributo o el . atributo, y
funciones que están dentro del alcance de un #pragma llamadas_largas directiva, siempre será
se convirtió en llamadas largas.

Esta función no está habilitada de forma predeterminada. Especificando -mno-llamadas-largas restaurará el
comportamiento predeterminado, al igual que colocar las llamadas a funciones dentro del alcance de un #pragma
larga_llamadas_apagadas directiva. 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.

-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. El valor predeterminado es R10 a menos que se apile
la verificación está habilitada, cuando se utiliza R9.

-mcirrus-fix-insns-inválidos
Inserte NOP en el flujo de instrucciones para solucionar problemas con
combinaciones de instrucciones Maverick no válidas. Esta opción solo es válida si el
-mcpu = ep9312 Se ha utilizado la opción para permitir la generación de instrucciones para el Cirrus.
Coprocesador de coma flotante Maverick. Esta opción no está habilitada por defecto, ya que
el problema solo está presente en implementaciones antiguas de Maverick. El valor predeterminado se puede volver
habilitado mediante el uso de la -mno-cirrus-fix-inválidos-insns interruptor.

-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 accederá a las palabras en estructuras de datos empaquetadas
un byte a la vez.

El atributo ARM "Tag_CPU_unaligned_access" se establecerá en el archivo de objeto generado.
a verdadero o falso, dependiendo de la configuración de esta opción. Si no está alineado
el acceso está habilitado, el símbolo del preprocesador "__ARM_FEATURE_UNALIGNED" también será
definido.

-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.

AVR Opciones

-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 {} = "ata6289", "attiny13", "attiny13a", "attiny2313",
"attiny2313a", "attiny24", "attiny24a", "attiny25", "attiny261", "attiny261a",
"attiny43u", "attiny4313", "attiny44", "attiny44a", "attiny45", "attiny461",
"attiny461a", "attiny48", "attiny84", "attiny84a", "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 {} = "atmega16u2", "atmega32u2", "atmega8u2",
"attiny167", "at90usb162", "at90usb82".

"avr4"
Dispositivos "mejorados" con hasta 8 @ tie {} KiB de memoria de programa. mcu@tie {} =
"atmega48", "atmega48a", "atmega48p", "atmega8", "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 {} = "atmega16", "atmega16a", "atmega16hva", "atmega16hva2", "atmega16hvb",
"atmega16m1", "atmega16u4", "atmega161", "atmega162", "atmega163", "atmega164a",
"atmega164p", "atmega165", "atmega165a", "atmega165p", "atmega168", "atmega168a",
"atmega168p", "atmega169", "atmega169a", "atmega169p", "atmega169pa", "atmega32",
"atmega32c1", "atmega32hvb", "atmega32m1", "atmega32u4", "atmega32u6",
"atmega323", "atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a",
"atmega325p", "atmega3250", "atmega3250a", "atmega3250p", "atmega328",
"atmega328p", "atmega329", "atmega329a", "atmega329p", "atmega329pa",
"atmega3290", "atmega3290a", "atmega3290p", "atmega406", "atmega64", "atmega64c1",
"atmega64hve", "atmega64m1", "atmega640", "atmega644", "atmega644a", "atmega644p",
"atmega644pa", "atmega645", "atmega645a", "atmega645p", "atmega6450",
"atmega6450a", "atmega6450p", "atmega649", "atmega649a", "atmega649p",
"atmega6490", "at90can32", "at90can64", "at90pwm216", "at90pwm316", "at90scr100",
"at90usb646", "at90usb647", "at94k", "m3000".

"avr51"
Dispositivos "mejorados" con 128 @ tie {} KiB de memoria de programa. mcu@tie {} = "atmega128",
"atmega128rfa1", "atmega1280", "atmega1281", "atmega1284p", "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 {} = "atmega2560", "atmega2561".

"avrxmega2"
Dispositivos "XMEGA" con más de 8 @ tie {} KiB y hasta 64 @ tie {} KiB de memoria de programa.
mcu@tie {} = "atxmega16a4", "atxmega16d4", "atxmega16x1", "atxmega32a4",
"atxmega32d4", "atxmega32x1".

"avrxmega4"
Dispositivos "XMEGA" con más de 64 @ tie {} KiB y hasta 128 @ tie {} KiB de programa
memoria. mcu@tie {} = "atxmega64a3", "atxmega64d3".

"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", "atxmega128d3", "atxmega192a3", "atxmega192d3", "atxmega256a3",
"atxmega256a3b", "atxmega256a3bu", "atxmega256d3".

"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".

"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.

-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. Configurar "-mrelax" simplemente agrega la opción "--relax" a la
línea de comando del vinculador cuando se llama al vinculador.

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.

-llamadas-cortas
Esta opción ha quedado obsoleta y se eliminará en GCC 4.8. Ver "-mrelax" para una
reemplazo.

Utilice las instrucciones "RCALL" / "RJMP" incluso en dispositivos con 16 @ tie {} KiB o más de programa
memoria, es decir, en dispositivos que tienen las instrucciones "CALL" y "JMP".

-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 configuración que no sea "-mmcu = avr2" o "-mmcu = avr25", el controlador del compilador
agregará o eliminará esta opción de la línea de comando del compilador propiamente dicho, porque el
El compilador luego sabe si el dispositivo o la arquitectura tiene un puntero de pila de 8 bits y, por lo tanto,
sin registro "SPH" 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.

"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 stubs
correctamente una situación completa. Vea la opción del compilador "-mrelax" y la opción linler
"--relajarse". Hay casos de esquina en los que se supone que el enlazador genera stubs pero
aborta sin relajación y sin un mensaje de error útil.

· El script de creación de enlaces predeterminado está organizado para el 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 tal 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 mayor que 64 @ tie {KiB} y el compilador necesita 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.

· GCC no admite RAM de más de 64 @ tie {KiB} 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, se activa mediante la opción de línea de comandos "-mmcu =".

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, 102, 104, 105, 106, 107

para mcu= "avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",
"avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7", respectivamente. Si mcu
especifica un dispositivo, esta macro incorporada se configura en consecuencia. Por ejemplo, con
"-mmcu = atmega8" la macro se definirá en 4.

"__AVR_Dispositivo__"
Configuración "-mmcu =dispositivo" define esta macro incorporada que refleja el nombre del dispositivo.
Por 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 en "-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 estar 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 y si "-mshort-calls" no está configurado.

"__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-stack".

"__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 opción de línea de comando "-mno-interrupts".

"__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_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
Opción de configuración "--with-avrlibc".

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. El opcional señorvisión especifica el
revisión de silicio del procesador Blackfin de destino. Cualquier solución alternativa disponible para
Se habilitará la revisión de silicio dirigida. Si señorvisión is ninguna, no hay soluciones alternativas
activado. Si señorvisión is cualquier, todas las soluciones para el procesador de destino serán
activado. La macro "__SILICON_REVISION__" se define con dos dígitos hexadecimales.
que representan los números mayor y menor en la revisión de silicio. Si señorvisión is
ninguna, el "__SILICON_REVISION__" no está definido. Si señorvisión is cualquier, la
"__SILICON_REVISION__" se define como 0xffff. Si esto es opcional señorvisión no es
utilizado, GCC asume la última revisión de silicio conocida del Blackfin objetivo
procesador.

Apoyo a bf561 está incompleto. Para bf561, Solo se define la macro del procesador.
Sin esta opción, bf532 se utiliza como procesador de forma predeterminada. El correspondiente
macros de procesador predefinidas para cpu se va a definir. Y para bfin-elfo cadena de herramientas
esto hace que el BSP de hardware proporcionado por libgloss se vincule en si -msim no es
dado.

-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 asegurará 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 asegurará 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 generará un código más lento para las entradas de salto y llamadas.

-id-biblioteca-compartida-ms = n
Especificó el número de identificación de la biblioteca compartida basada en ID que se está compilando.
Especificar un valor de 0 generará un código más compacto, especificar otros valores
forzar la asignación de ese número a la biblioteca actual pero no hay más espacio o
tiempo más 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 restaurará 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 el procesador Blackfin multinúcleo. Archivos de inicio adecuados y
Los scripts de enlace se utilizarán para admitir multinúcleo. Esta opción define
"__BFIN_MULTICORE". Solo se puede utilizar con -mcpu = bf561[-señorvisión]. Puede ser usado
-mcorea or -mcoreb. Si se usa sin -mcorea or -mcoreb, Soltero
Se utiliza el modelo de programación de aplicación / doble núcleo. En este modelo, la función principal de
El núcleo B debe llamarse coreb_main. Si se usa con -mcorea or -mcoreb, un experto
Se utiliza la aplicación por modelo de programación de núcleo. Si no se utiliza esta opción, solo
Se utiliza el modelo de programación de aplicaciones centrales.

-mcorea
Cree una aplicación independiente para el núcleo A de BF561 cuando utilice una aplicación por núcleo
modelo de programación. Se utilizarán archivos de inicio y scripts de enlace adecuados para admitir Core A.
Esta opción define "__BFIN_COREA". Debe usarse con -mmultinúcleo.

-mcoreb
Cree una aplicación independiente para el núcleo B de BF561 cuando utilice una aplicación por núcleo
modelo de programación. Se utilizarán archivos de inicio y scripts de enlace adecuados para admitir Core B.
Esta opción define "__BFIN_COREB". Cuando se usa esta opción, coreb_main debe ser
utilizado en lugar de main. Debe usarse con -mmultinúcleo.

-msdram
Cree una aplicación independiente para SDRAM. Los archivos de inicio y los scripts de enlace adecuados serán
utilizado para poner la aplicación en SDRAM. El cargador debe inicializar SDRAM antes de cargar
la aplicación en SDRAM. Esta opción define "__BFIN_SDRAM".

-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
Ponga pequeños datos globales y estáticos en el .neardata sección, a la que apunta
registrar "B14". Coloque pequeños datos globales y estáticos no inicializados en el .bss sección,
que es adyacente a la .neardata sección. Ponga pequeños datos de solo lectura en el .rodata
sección. Las secciones correspondientes que se utilizan para grandes cantidades de datos son .fardata, .far
y .const.

-msdata = todos
Coloque todos los datos, no solo pequeños objetos, 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 el .far sección. Ponga todos los datos constantes en el .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 (sin opciones) arreglan (eliminan 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 almacenamiento para la variable local.

-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 el cris-axis-elf se arregla para enlazar con entrada-salida
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 elfo
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 cuando se elige la opción -mcr16c ya que la arquitectura CR16C no
Admite modelo de datos lejanos.

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"; creará un archivo de objeto para
la arquitectura única para la que se diseñó. GCC de Apple en Darwin crea
archivos "gordos" si hay varios -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 permitirá el uso de instrucciones que sean válidas para el subtipo de
el archivo que está generando, por lo que no puede poner instrucciones de 64 bits en un ppc750 archivo de objeto.
El enlazador para bibliotecas compartidas, / usr / bin / libtool, fallará e imprimirá un error si se le solicita
para 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 dará al ejecutable el subtipo más restrictivo de cualquiera de los
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 "Encabezados" y/o "PrivateHeaders" directorio contenido directamente en él
que termina en ".estructura". El nombre de un marco es el nombre de este directorio
excluyendo el ".estructura". Los encabezados asociados con el marco se encuentran en uno de
esos dos directorios, con "Encabezados" siendo buscado primero. Una subestructura es una
directorio de framework que está en un framework "Marcos" directorio. Incluye de
Los encabezados de subtrama solo pueden aparecer en un encabezado de un marco que contiene el
subframework, o en un encabezado de subframework hermano. Dos subestructura son hermanos si
ocurren en el mismo marco. Una subestructura no debe tener el mismo nombre que una
marco, se emitirá una advertencia si se infringe. Actualmente una subestructura
no puede tener subestructuras, en el futuro, el mecanismo puede extenderse para admitir
esta. Los marcos estándar se pueden encontrar en "/ Sistema / Biblioteca / Marcos" y
"/ Biblioteca / Marcos". Un ejemplo de inclusión se parece a "#include ",
donde Marco conceptual denota el nombre del marco y header.h se encuentra en el
"PrivateHeaders" or "Encabezados" 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 STABS,
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-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
Anular los valores predeterminados de bool para que sizeof (bool) == 1. Por defecto sizeof (bool) is 4
al compilar para Darwin / PowerPC y 1 al compilar para Darwin / x86, por lo que esta opción
no tiene ningún efecto en x86.

Advertencia: El -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 código adecuado para un desarrollo rápido. Necesario para habilitar gdb para
cargue dinámicamente archivos ".o" 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 producirá una biblioteca dinámica en lugar de un ejecutable
al vincular, 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 será utilizado para
realizar operaciones de punto flotante. A menos que sean reemplazados por rutinas que emulen
las operaciones de punto flotante, o compiladas de tal manera que llamen a tales emulaciones
rutinas, estas rutinas emitirán operaciones de punto flotante. Si estas compilando
para un Alpha sin operaciones de punto flotante, debe asegurarse de que la biblioteca esté
construido 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. Bajo DEC Unix, esto tiene el efecto de que
Se vincularán las rutinas de la biblioteca matemática conforme a IEEE.

-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, generará el
constante como literal y generar 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, utilizaría esta opción para crear un cargador dinámico de biblioteca compartida. Sí mismo
una biblioteca compartida, debe reubicarse en la memoria antes de poder encontrar las variables
y constantes en su propio segmento de datos.

-malpha-as
-gas
Seleccione si desea generar código para ser ensamblado por el ensamblador proporcionado por el proveedor
(-malpha-as) o por el ensamblador GNU -gas.

-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 se
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
elegirá los valores predeterminados para el conjunto de instrucciones del procesador que especifique.
Si no especifica un tipo de procesador, GCC utilizará 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.

Diciembre Alfa / VMS Opciones

Estas -m Las opciones están definidas para las implementaciones de DEC Alpha / VMS:

-mvms-códigos-de-retorno
Devuelve los códigos de condición de VMS de main. 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.

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 encajarán 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 nops en el paquete anterior.
Esta opción solo tiene efecto cuando el empaquetado VLIW está habilitado. No crea nuevos
paquetes simplemente agrega nops 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.

-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 ejecutará 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.

-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.

-msalto-en-retraso
Llenar ranuras de retardo de llamadas a funciones con instrucciones de salto incondicionales modificando
el puntero de retorno para que la llamada a la función sea el objetivo del salto condicional.

-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 funcionará 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 las 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 tiene ningún efecto sobre el nombre de ld, solo
cambia los parámetros que se pasan a ese ld. El ld que se llama está determinado por
las --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`.
Esta 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 tiene
cualquier efecto en el que se llame a ld, solo cambia los parámetros que se pasan a ese
ld. El ld que se llama está determinado por el --con-ld opción de configuración, GCC
ruta de búsqueda del programa, y ​​finalmente por el usuario TRAYECTORIA. El enlazador utilizado por GCC puede ser
impreso usando que `ccg -print-prog-name = ld`. Esta opción solo está disponible en
HP-UX GCC de 64 bits, 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 degradará el rendimiento.
Sin embargo, puede ser útil en aplicaciones grandes, particularmente cuando el enlace parcial es
utilizado para construir 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,
establecer y restaurar la variable __xpg4_extended_mask según sea apropiado. 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.

Intel 386 y AMD x86-64 Opciones

Estas -m Las opciones están definidas para la familia de computadoras i386 y x86-64:

-mtune =tipo cpu
Sintonizar tipo cpu todo lo aplicable sobre el código generado, excepto el ABI
y el conjunto de instrucciones disponibles. Las opciones para tipo cpu son:

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 opción en lugar de -mtune = genérico. Pero, si no sabe exactamente qué CPU
que tendrán los usuarios de su aplicación, entonces debe usar esta opción.

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, el código
La opción generada cambiará para reflejar los procesadores que eran más comunes cuando
esa versión de GCC fue lanzada.

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.

nativo
Esto selecciona la CPU para sintonizar en el tiempo de compilación determinando el procesador
tipo de máquina compiladora. Utilizando -mtune = nativo producirá código optimizado
para la máquina local bajo las restricciones del conjunto de instrucciones seleccionado.
Usar -march = nativo habilitará todos los subconjuntos de instrucciones admitidos por el local
machine (por lo tanto, es posible que el resultado no se ejecute en diferentes máquinas).

i386
CPU i386 de Intel original.

i486
CPU i486 de Intel. (No se implementa ninguna programación para este chip).

i586, pentium
CPU Intel Pentium sin soporte MMX.

pentium-mmx
CPU Intel PentiumMMX basada en un núcleo Pentium con soporte para conjuntos de instrucciones MMX.

pentium pro
CPU Intel PentiumPro.

i686
Igual que "genérico", pero cuando se usa como opción de "marcha", el conjunto de instrucciones PentiumPro
se utilizará, por lo que el código se ejecutará en todos los chips de la familia i686.

pentium2
CPU Intel Pentium2 basada en el núcleo PentiumPro con soporte para conjuntos de instrucciones MMX.

pentium3, pentium3m
CPU Intel Pentium3 basada en el núcleo PentiumPro con conjunto de instrucciones MMX y SSE
apoyo.

pentium-m
Versión de bajo consumo de CPU Intel Pentium3 con conjunto de instrucciones MMX, SSE y SSE2
apoyo. Utilizado por portátiles Centrino.

pentium4, pentium4m
CPU Intel Pentium4 con soporte para conjuntos de instrucciones MMX, SSE y SSE2.

Prescott
Versión mejorada de la CPU Intel Pentium4 con instrucciones MMX, SSE, SSE2 y SSE3
establecer soporte.

nocona
Versión mejorada de la CPU Intel Pentium4 con extensiones de 64 bits, MMX, SSE, SSE2 y
Soporte de conjunto de instrucciones SSE3.

core2
CPU Intel Core2 con extensiones de 64 bits, instrucciones MMX, SSE, SSE2, SSE3 y SSSE3
establecer soporte.

corei7
CPU Intel Core i7 con extensiones de 64 bits, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 y
Soporte de conjunto de instrucciones SSE4.2.

corei7-avx
CPU Intel Core i7 con extensiones de 64 bits, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Compatibilidad con conjuntos de instrucciones SSE4.2, AVX, AES y PCLMUL.

núcleo-avx-i
CPU Intel Core con extensiones de 64 bits, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Compatibilidad con conjuntos de instrucciones SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND y F16C.

átomo
CPU Intel Atom con extensiones de 64 bits, instrucciones MMX, SSE, SSE2, SSE3 y SSSE3
establecer soporte.

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, atlon-xp, atlon-mp
CPU AMD Athlon mejorada con MMX, 3DNow !, 3DNow mejorado! e instrucción SSE completa
establecer soporte.

k8, opteron, atlon64, athlon-fx
CPU basadas en núcleo AMD K8 con soporte para conjuntos de instrucciones x86-64. (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 k8, opteron y athlon64 con soporte para el conjunto de instrucciones SSE3.

amdfam10, Barcelona
CPU basadas en núcleo de la familia AMD 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úcleo de la familia AMD 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, 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).

btver1
CPU basadas en núcleo de la familia AMD 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.)

cabrestante-c6
CPU IDT Winchip C6, tratado de la misma manera que i486 con un conjunto de instrucciones MMX adicional
apoyo.

winchip2
CPU IDT Winchip2, tratado de la misma manera que i486 con MMX y 3DNow adicionales!
soporte de conjunto de instrucciones.

c3 Vía CPU C3 con MMX y 3DNow! soporte de conjunto de instrucciones. (No hay programación
implementado para este chip.)

c3-2
Vía CPU C3-2 con soporte para conjuntos de instrucciones MMX y SSE. (No hay programación
implementado para este chip.)

geoda
CPU AMD integrada con MMX y 3DNow! soporte de conjunto de instrucciones.

Al elegir un tipo cpu programará las cosas apropiadamente para eso
chip en particular, el compilador no generará ningún código que no se ejecute en el
tipo de máquina predeterminado sin el -march =tipo cpu opción que se está utilizando. Por ejemplo, si
GCC está configurado para i686-pc-linux-gnu luego -mtune = pentium4 generará código que
está ajustado para Pentium4, pero seguirá funcionando en máquinas i686.

-march =tipo cpu
Generar instrucciones para el tipo de máquina tipo cpu. Las opciones para tipo cpu son el
lo mismo que para -mtune. Además, especificando -march =tipo cpu implica -mtune =tipo cpu.

-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 el compilador i386.

sse Utilice las instrucciones escalares de coma flotante presentes en el conjunto de instrucciones SSE. Esta
El conjunto de instrucciones es compatible con Pentium3 y chips más nuevos, en la línea AMD por
Fichas Athlon-4, Athlon-xp y Athlon-mp. La versión anterior de la instrucción SSE
conjunto admite sólo aritmética de precisión simple, por lo tanto, el doble y extendido-
la aritmética de precisión todavía se hace usando 387. Una versión posterior, presente sólo en
Pentium4 y los futuros chips AMD x86-64, admiten aritmética de doble precisión


Para el compilador i386, debe usar -march =tipo cpu, -msse or -msse2 interruptores
para habilitar las extensiones SSE y hacer 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 el
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 resultando en un rendimiento inestable.

-masm =dialecto
Instrucciones de salida de conjunto utilizando seleccionados dialecto. Las opciones admitidas son intel or a
(el predeterminado). 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: el requisito
las bibliotecas no forman parte de GCC. Normalmente las facilidades del habitual C de la máquina
se utilizan el compilador, pero esto no se puede hacer directamente en la compilación cruzada. Usted debe
haga sus propios arreglos para proporcionar funciones de biblioteca adecuadas para
Compilacion.

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 FreeBSD, OpenBSD y NetBSD. Esta opción se anula cuando -marcha
indica que la CPU de destino siempre tendrá una FPU y, por lo tanto, la instrucción no
necesita emulación. A partir de la revisión 2.6.1, estas instrucciones no se generan a menos que usted
también use 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
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
se alineará de manera diferente a la interfaz binaria de la aplicación publicada
especificaciones para el 386 y no será binario compatible con estructuras en código
compilado sin ese modificador.

-m96bit-largo-doble
-m128bit-largo-doble
Estos interruptores controlan el tamaño del tipo "doble largo". El binario de la aplicación i386
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 el "doble largo" se alineará 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, las estructuras y
las matrices que contienen variables "dobles largas" cambiarán su tamaño y su función
Se modificará la convención de llamada para la función que toma "doble largo". Por eso ellos
no será binario compatible con matrices o estructuras en código compilado sin eso
interruptor.

-umbral-de-datos-grande =número
Cuándo -mcmodel = medio se especifica, los datos mayores que umbral se colocan en grandes
sección de datos. Este valor debe ser el mismo en todos los objetos vinculados al 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
número de argumentos que se devuelven con "ret" número 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 generará un código incorrecto
para llamadas a esas funciones.

Además, se producirá un código 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 Intel x86, el -mstackrealinear la opción generará
un prólogo y un epílogo alternativos que realinea la pila de tiempo de ejecución si es necesario.
Esto admite la combinación de códigos heredados que mantienen una pila alineada de 4 bytes con códigos modernos
que mantienen una pila de 16 bytes para compatibilidad 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. Debes construir todos los módulos con -límite-de-pila -preferido = 3,
incluidas las bibliotecas. Esto 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 utilizará.

En Pentium y PentiumPro, los valores "double" y "long double" 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 desalineará 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
-mno-mmx
-msse
-mno-sse
-msse2
-mno-sse2
-msse3
-mno-sse3
-mssse3
-mno-ssse3
-msse4.1
-mno-sse4.1
-msse4.2
-mno-sse4.2
-msse4
-mno-sse4
-mavx
-mno-avx
-mavx2
-mno-avx2
-maes
-mno-aes
-mpclmul
-mno-pclmul
-mfsgsbase
-mno-fsgsbase
-mrdrnd
-mno-rdrnd
-mf16c
-mno-f16c
-mfma
-mno-fma
-msse4a
-mno-sse4a
-mfma4
-mno-fma4
-mxop
-mno-xop
-mlwp
-mno-lwp
-m3dnow
-mno-3dnow
-mpopcnt
-mno-popcnt
-mabm
-mno-abm
-mbmi
-mbmi2
-mno-bmi
-mno-bmi2
-mlzcnt
-mno-lzcnt
-mtbm
-mno-tbm
Estos interruptores habilitan o deshabilitan el uso de instrucciones en MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP,
LWP, ABM, BMI, BMI2, LZCNT o 3DNow!
conjuntos de instrucciones ampliados. Estas extensiones también están disponibles como integradas
funciones: ver X86 Incorporado Clave, para obtener detalles de las funciones habilitadas y
desactivado por estos interruptores.

Para que las instrucciones SSE / SSE2 se generen automáticamente a partir del código de punto flotante (como
opuesto a 387 instrucciones), ver -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 permitirán 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
compile archivos separados para cada arquitectura compatible, utilizando los indicadores apropiados.
En particular, el archivo que contiene el código de detección de la CPU debe compilarse sin
estas opciones.

-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, así como
eliminar elementos intrínsecos innecesarios de zeroupper.

-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 permitirá a GCC utilizar la instrucción CMPXCHG16B en el código generado.
CMPXCHG16B permite operaciones atómicas en datos de doble palabra cuádruple (o oword) de 128 bits
tipos. Esto es útil para contadores de alta resolución que podrían actualizarse mediante múltiples
procesadores (o núcleos). Esta instrucción se genera como parte de atomic built-in
funciones: ver __ sincronizar Incorporados or __atómico Incorporados para obtener más detalles.

-msahf
Esta opción permitirá a GCC utilizar la instrucción SAHF en el código generado de 64 bits. Temprano
Las CPU Intel con Intel 64 carecían de instrucciones LAHF y SAHF compatibles con AMD64 hasta
introducción del paso Pentium 4 G1 en diciembre de 2005. LAHF y SAHF se cargan y almacenan
instrucciones, respectivamente, para ciertos indicadores de estado. En modo de 64 bits, SAHF
La instrucción se usa para optimizar las funciones integradas "fmod", "drem" o "resto": ver
Otro Incorporados para obtener más detalles.

-mmovbe
Esta opción permitirá a GCC usar la instrucción movbe para implementar "__builtin_bswap32"
y "__builtin_bswap64".

-mcrc32
Esta opción habilitará 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 permitirá a GCC utilizar las instrucciones RCPSS y RSQRTSS (y sus
variantes vectorizadas RCPPS y RSQRTPS) con un paso adicional de Newton-Raphson para
aumentar la precisión en lugar de DIVSS y SQRTSS (y sus variantes vectorizadas) para
argumentos de punto flotante de precisión simple. 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 con
-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 permite controlar qué instrucciones de estimación recíproca se pueden utilizar. optar
es una lista de opciones separadas por comas, que puede ir precedida por un "!" para invertir el
opción: "todos": habilita todas las instrucciones de estimación, "predeterminado": habilita el valor predeterminado
instrucciones, equivalente a -mrecip, "none": inhabilita todas las instrucciones de estimación,
equivalente a -mno-receta, "div": habilita la aproximación para la división escalar,
"vec-div": habilita la aproximación para la división vectorizada, "sqrt": habilita la
aproximación para la raíz cuadrada escalar, "vec-sqrt": habilita la aproximación para
raíz cuadrada vectorizada.

Así por ejemplo, -mrecip = todo,! sqrt permitiría 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.
Los tipos admitidos son "svml" para la biblioteca matemática de vectores cortos de Intel y "acml" para
Interfaz del estilo de biblioteca de núcleo matemático de AMD. GCC emitirá actualmente 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
tipo de función correspondiente cuando -mveclibabi = svml se utiliza 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. Ambos -ftree-vectorizar y -optimizaciones-matemáticas-divertidas tienen
para ser habilitado. Deberá especificarse una biblioteca compatible con SVML o ACML ABI en el enlace
en las transacciones.

-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. El valor por defecto
es utilizar la ABI de Microsoft al apuntar a Windows. En todos los demás sistemas, el valor predeterminado
es el SYSV ABI. Puede controlar este comportamiento para una función específica utilizando el
atributo de función ms_abi/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 será
calculado en la función prólogo. Esto es más rápido en la mayoría de las CPU modernas debido a
dependencias reducidas, programación mejorada y uso reducido de la pila cuando se prefiere la pila
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 Mingw32. Código que se basa en 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 tamaño del código
y mejora el rendimiento en caso de que el destino ya esté alineado, pero GCC no
saber sobre esto.

-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 inserciones, aumentar el tamaño del código,
pero puede mejorar el rendimiento del código que depende de memcpy, strlen y memset rápidos 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
Sobrescribir la heurística de decisión interna sobre un algoritmo particular en una cadena en línea
operación con. Los valores permitidos son "rep_byte", "rep_4byte", "rep_8byte" para
expandiendo usando el prefijo i386 "rep" del tamaño especificado, "byte_loop", "loop",
"unrolled_loop" para expandir el bucle en línea, "libcall" para expandir siempre la biblioteca
llamada.

-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.

-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 legal o no depende del sistema operativo y si
asigna el segmento para cubrir toda el área de TLS.

Para los sistemas que usan GNU libc, 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: Activado
arquitecturas x86, el atributo "ms_hook_prologue" no es posible en este momento para
-mentry y -página.

-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.

Estas -m Los conmutadores son compatibles además de los anteriores en los procesadores AMD x86-64 en
Entornos de 64 bits.

-m32
-m64
-mx32
Genere código para un entorno de 32 bits o 64 bits. los -m32 conjuntos de opciones int, long y
puntero a 32 bits y genera código que se ejecuta en cualquier sistema i386. los -m64 opción
establece int en 32 bits y long y puntero en 64 bits y genera código para AMD
Arquitectura x86-64. los -mx32 La opción establece int, long y pointer en 32 bits y
genera código para la arquitectura x86-64 de AMD. Para Darwin solo el -m64 la opción gira
fuera de la -fno-pic y -mdynamic-sin-foto .

-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 puede ser 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
Generar 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.

i386 y x86-64 Windows Opciones

Estas opciones adicionales están disponibles para destinos de Windows:

-consola
Esta opción está disponible para objetivos Cygwin y MinGW. Especifica que una consola
se generará la aplicación, indicando al enlazador que establezca el encabezado PE
tipo de subsistema requerido para aplicaciones de consola. Este es el comportamiento predeterminado para
Objetivos Cygwin y MinGW.

-mdll
Esta opción está disponible para objetivos Cygwin y MinGW. Especifica que una DLL - una
biblioteca de enlaces dinámicos: se debe 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. Especifica que la macro UNICODE
se está predefiniendo y que se elige el código de inicio en 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 Windows se deben configurar en el preprocesador, pero no influyen
la elección del código de inicio / biblioteca en tiempo de ejecución.

-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 los binarios que se ejecutan en
modo kernel de Windows, ya que existe la API user32, que se utiliza para configurar ejecutables
privilegios, no está disponible.

-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. Se habilitará de forma predeterminada si GCC detecta
que el ensamblador de destino encontrado durante la configuración admite la función.

Ver también bajo i386 y x86-64 Opciones para opciones estándar.

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 DWARF2. Esta
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,
itanium1, merced, itanium2 y 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 resultará en
generación de las instrucciones ld.a y las correspondientes instrucciones de verificación (ld.c /
chk.a). 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 resultará en generación
de las 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 resultará en 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 elegirán para la programación solo si hay
no hay otras opciones en este momento. Esto hará uso de la especulación de datos.
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 especulativas de control se elegirán para la programación solo si
no hay otras opciones en este momento. Esto hará que el uso de la especulación de control
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 considerarán durante el cálculo de la
prioridades de instrucciones. Esto hará 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
No permitir más de 'msched-max-memory-insns' en el grupo de instrucciones. De lo contrario, limite
es "suave", lo que significa que preferiríamos operaciones sin memoria cuando se alcanza el límite, pero
aún puede programar operaciones de memoria.

IA-64 / VMS Opciones

Estas -m Las opciones están definidas para las implementaciones de IA-64 / VMS:

-mvms-códigos-de-retorno
Devuelve los códigos de condición de VMS de main. 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.

LM32 Opciones

Estas -m Las opciones están definidas para la arquitectura Lattice Mico32:

-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 utilizará durante el código.
Generacion. Estos pseudo-registros se utilizarán como registros reales, por lo que hay un
compensación entre la capacidad de GCC para ajustar el código en los registros disponibles, y la
penalización de rendimiento de utilizar memoria en lugar de registros. Tenga en cuenta que todos los módulos de una
El programa debe compilarse con el mismo valor para esta opción. Por eso tu
no debe usar esta opción con las bibliotecas de tiempo de ejecución predeterminadas que compila 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 generará
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 generará
"seth / add3" para cargar sus direcciones), y asumir que las subrutinas pueden no ser
alcanzable con la instrucción "bl" (el compilador generará 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 colocarán en uno de .datos, bsso
.rodata (a menos que se haya especificado el atributo "sección"). Este es el predeterminado.

El área de datos pequeña consta de secciones .sdata y .sbs. Los objetos pueden ser explícitamente
poner en el área de datos pequeños con el atributo "sección" usando una de estas secciones.

-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 es así, el vinculador dará un error
mensaje --- no se generará 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 preferirán las ramas a
código condicional, si es 2, se aplicará 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 _vaciar_caché, pero una llamada a la función solo se utilizará si no hay una trampa
para todos.

-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 objetivo ColdFire.
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 51cn 51em 51 qe
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_cpu cuando el objetivo de ColdFire cpu está seleccionado. También
define __mcf_familia_familia, donde el valor de familia viene dado por la tabla de arriba.

-mtune =melodía
Ajuste el código para una microarquitectura en 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 __metrouarca__ 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 __TENGO_68881__ en M680x0
objetivos 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 generará un código incorrecto
para llamadas a esas funciones.

Además, se producirá un código 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 interruptor, GCC alineará las estructuras que contienen el
los tipos anteriores de manera diferente a la mayoría de las interfaces binarias de aplicaciones publicadas
especificaciones 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 las referencias de memoria no alineadas serán manejadas por el sistema.

-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 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 ejecutar en el lugar y bibliotecas 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
Especificó el número de identificación de la biblioteca compartida basada en ID que se está compilando.
Especificar un valor de 0 generará un código más compacto, especificar otros valores
forzar la asignación de ese número a la biblioteca actual pero no hay más espacio o
tiempo más 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 colocarán en la sección ".based" por
defecto. Las variables basadas utilizan el registro $ tp como registro base, y hay un
Límite de 128 bytes para la sección ".based".

-mbitops
Habilita las instrucciones de operación de bits: prueba de bits ("btstm"), set ("bsetm"), clear
("bclrm"), invertir ("bnotm") y probar y configurar ("tas").

-mc =nombre
Selecciona en qué sección se colocarán los datos constantes. nombre puede ser "pequeño", "cercano" o
"lejos".

-mclip
Habilita la instrucción "clip". Tenga en cuenta que "-mclip" no es útil a menos que también
proporcione "-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 "predeterminada".

-mccop
Habilita las instrucciones del coprocesador. De forma predeterminada, este es un coprocesador de 32 bits. Nota
que el coprocesador normalmente está habilitado a través de la opción "-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 "-mall-opts".

-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 serán asignados 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 una CPU determinada. Los valores admitidos están en el formato
vX.YY.Z, Donde X es una versión principal, YY es la versión menor, y Z es compatibilidad
código. 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. Utilice -fstack-check en su lugar.

-mxl-gp-optar
Utilice las secciones sdata / sbss relativas de 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.

-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 debe ser 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 ejecutará 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, mips64 y mips64r2. 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, 74kc, 74kf2_1, 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1,
1004kf1_1, loongson2e, loongson2f, loongson3a, m4k, octeón, octeón +, octeon2, Orión,
r2000, r3000, r3900, r4000, r4400, r4600, r4650, r6000, r8000, rm7000, rm9000, r10000,
r12000, r14000, r16000, sb1, sr71000, vr4100, vr4111, vr4120, vr4130, vr4300, vr5000,
vr5400, vr5500 y xlr. El valor especial de-abi selecciona el más compatible
arquitectura para la ABI seleccionada (es decir, mips1 para ABI de 32 bits y mips3 para 64 bits
ABI).

Las cadenas de herramientas nativas de Linux / GNU e IRIX también respaldan el valor nativo, que selecciona el
la mejor opción de arquitectura para el procesador host. -march = nativo no tiene ningún efecto si GCC
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 capitalizado de _MIPS_ARCH. Por ejemplo,
-marcha = r2000 establecerá _MIPS_ARCH a "r2000" y definir la macro _MIPS_ARCH_R2000.

Tenga en cuenta que _MIPS_ARCH macro utiliza los nombres de procesador dados anteriormente. En otras palabras,
tendrá el prefijo completo y no se abreviará 000 as k. En el caso de de-
abi, la macro nombra la arquitectura resuelta (ya sea "mips1" or "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 optimizará para el procesador especificado por -marcha.
Mediante el uso -marcha y -mtune juntos, es posible generar código que se ejecutará en
una familia de procesadores, pero optimiza el código para un miembro particular de ese
familia.

-mtune define las macros _MIPS_TUNE y _MIPS_TUNE_foo, que funcionan de la misma manera que
las -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.

-mips32r2
Equivalente a -marcha = mips32r2.

-mips64
Equivalente a -marcha = mips64.

-mips64r2
Equivalente a -marcha = mips64r2.

-mips16
-mno-mips16
Genere (no genere) código MIPS16. Si GCC tiene como objetivo un MIPS32 o MIPS64
arquitectura, utilizará 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-mips16
-mno-interlink-mips16
Requiere (no requiere) que el código que no sea MIPS16 sea compatible con el enlace con el código MIPS16.

Por ejemplo, el código que no es MIPS16 no puede saltar directamente al código MIPS16; debe usar un
llamada o un salto indirecto. -minterlink-mips16 por lo tanto, desactiva los saltos directos a menos que
GCC sabe que el objetivo del salto no es MIPS16.

-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 el mthc1 y mfhc1 instrucciones y, por lo tanto, solo es compatible con
Procesadores MIPS32R2.

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, pero todos los de 64 bits
se guardan.

-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 seguirá
generalmente hacen 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 funcionará si el GOT es menor que aproximadamente 64k.
Cualquier cosa más grande hará 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. Entonces debería funcionar con
GOT muy grandes, aunque también será menos eficiente, ya que tomará 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.

-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.

-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.

-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 utilizará las instrucciones si el
la arquitectura de destino los soporta.

-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. También
define __mips_dsp_rev a 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.

-mmt
-mno-mt
Utilice (no utilice) las instrucciones MT Multithreading.

-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 acceder a los datos de manera más eficiente; ver -mgpopt para
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 estarán en una pequeña sección de datos si
que los datos están 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 pasarán un valor desconocido en $ gp.
(En tales situaciones, el monitor de arranque se compilaría 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 por defecto
is -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.

-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.

Cuando se utilizan instrucciones de acumulación múltiple, se calcula el producto intermedio
con precisión infinita y no está sujeto al bit FCSR Flush to Zero. Esto podría ser
indeseable en algunas circunstancias.

-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-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 de 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 por GCC, aunque GCC evitará el uso de "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 fue 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é sobrescribirán 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 tendrán un 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 or __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 generarán 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 programamos la FP
instrucciones 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
alinear 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 de "sincronización" (si están habilitadas) se generarán cuando
Se compila "__builtin ___ clear_cache ()".

Esta opción tiene el valor predeterminado "-mno-synci", pero el valor predeterminado se puede anular configurando
con "--with-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 invalidará 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 "-mexplicit-relocs" está en
efecto. Con "-mno-explicit-relocs", esta optimización la puede realizar 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:

· Devolver 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 darían 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__.

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
ejecutar en cualquiera de los otros tipos de AE. El código no será tan eficiente como lo sería si
compilado para un tipo de EA específico y algunos tipos de operación (por ejemplo, multiplicación)
no funcionará 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 generará programas más grandes, que se ejecutan más rápido que cuando la opción no es
usó. Sin embargo, los resultados varían de un programa a otro, por lo que se deja como usuario
opción, 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 generará una advertencia indicando al
programador que deben reescribir el código para evitar operaciones de bytes, o para apuntar a un
Tipo AE que cuenta con el soporte hardware necesario. Esta opción habilita la advertencia para
apagarse.

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
"ninguno", que utiliza funciones de multiplicación de software. La opción "g13" es para
El hardware multiplica / divide el periférico solo en los objetivos RL78 / G13. La opción "rl78"
es para la multiplicación de hardware estándar definida en el manual del software RL78.

IBM RS / 6000 y PowerPC Opciones

Estas -m Las opciones están definidas para IBM RS / 6000 y PowerPC:

-poder
-mno-poder
-poder2
-mno-poder2
-poderpc
-mno-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
GCC admite dos arquitecturas de conjuntos de instrucciones relacionadas para RS / 6000 y PowerPC.
El POWER conjunto de instrucciones son las instrucciones admitidas por el ríos conjunto de chips utilizado
en los sistemas RS / 6000 originales y PowerPC conjunto de instrucciones es la arquitectura de
los microprocesadores Freescale MPC5xx, MPC6xx, MPC8xx y los IBM 4xx, 6xx y
microprocesadores de seguimiento.

Ninguna arquitectura es un subconjunto de la otra. Sin embargo, existe un gran subconjunto común
de instrucciones respaldadas por ambos. Se incluye un registro MQ en los procesadores
apoyando la arquitectura POWER.

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.

El -poder permite a GCC generar instrucciones que se encuentran solo en el
POWER y utilizar el registro MQ. Especificando -poder2 implica -poder y
también permite a GCC generar instrucciones que están presentes en la arquitectura POWER2
pero no la arquitectura POWER original.

El -poderpc permite a GCC generar instrucciones que se encuentran solo en el
Subconjunto de 32 bits de la arquitectura PowerPC. Especificando -mpowerpc-gpopt implica
-poderpc y también permite a GCC utilizar las instrucciones opcionales de la arquitectura PowerPC en
el grupo de uso general, incluida la raíz cuadrada de punto flotante. Especificando
-mpowerpc-gfxopt implica -poderpc y también permite a GCC usar el PowerPC opcional
instrucciones de arquitectura en el grupo Gráficos, incluida la selección de punto flotante.

El -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.
El -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.

El -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.

Si especifica ambos -mno-poder y -mno-powerpc, GCC utilizará solo las instrucciones en
el subconjunto común de ambas arquitecturas más algunas llamadas especiales de modo común de AIX, y
no utilizará el registro MQ. Especificando ambos -poder y -poderpc permite a GCC
utilizar cualquier instrucción de cualquiera de las arquitecturas y permitir el uso del registro MQ;
especifique esto para el Motorola MPC601.

-mnew-mnemotécnicos
-mnemotécnicos-de-moldes
Seleccione qué mnemónicos usar en el código ensamblador generado. Con -mnew-mnemotécnicos,
GCC utiliza los mnemónicos de ensamblador definidos para la arquitectura PowerPC. Con
-mnemotécnicos-de-moldes utiliza los mnemónicos de ensamblador definidos para la arquitectura POWER.
Las instrucciones definidas en una sola arquitectura tienen solo un mnemónico; GCC usa eso
mnemónico independientemente de cuál de estas opciones se especifique.

GCC utiliza por defecto los mnemónicos apropiados para la arquitectura en uso. Especificando
-mcpu =tipo_cpu a veces anula el valor de estas opciones. A menos que estés construyendo
un compilador cruzado, normalmente no deberías especificar -mnew-mnemotécnicos or
-mnemotécnicos-de-moldes, pero debería aceptar el valor predeterminado.

-mcpu =tipo_cpu
Establezca el tipo de arquitectura, el uso de registros, la elección de mnemónicos y la programación de instrucciones.
parámetros para el 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, ec603e, G3, G4, G5, titán, industria , power2, power3, power4, power5,
power5 +, power6, poder6x, power7, común, powerpc, potenciapc64, ríos, rios1, rios2, rsc,
y rs64.

-mcpu = común selecciona un procesador completamente genérico. Código generado bajo esta opción
se ejecutará en cualquier procesador POWER o PowerPC. GCC utilizará solo las instrucciones en el
subconjunto común de ambas arquitecturas y no utilizará el registro MQ. GCC asume un
modelo de procesador genérico para fines de programación.

-mcpu = poder, -mcpu = power2, -mcpu = powerpcy -mcpu = powerpc64 especificar POTENCIA genérica,
POWER2, ​​PowerPC puro de 32 bits (es decir, no MPC601) y arquitectura PowerPC de 64 bits
tipos de máquina, con un modelo de procesador genérico apropiado asumido para la programación
propósitos.

Las otras opciones especifican un procesador específico. Código generado bajo esas opciones
funcionará mejor en ese procesador y es posible que no se ejecute en otros.

El -mcpu opciones habilitan o deshabilitan automáticamente las siguientes opciones:

-maltivec -mfprnd -mhard-flotador -mmfcrf -múltiple -mnew-mnemotécnicos -mpopcntb
-mpopcntd -poder -poder2 -mpowerpc64 -mpowerpc-gpopt -mpowerpc-gfxopt
-msingle-flotador -mdoble-flotador -msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx

Las opciones particulares establecidas para cualquier CPU en particular variarán 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, uso de registro o elección de mnemónicos, como -mcpu =tipo_cpu
haría. Los mismos valores para tipo_cpu se utilizan para -mtune como para -mcpu. Si ambos son
especificado, el código generado utilizará la arquitectura, los registros y el conjunto mnemotécnico
by -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

-mvrsave
-mno-vrsave
Genere instrucciones VRSAVE al generar código AltiVec.

-mgen-cell-microcódigo
Generar instrucciones de microcódigo de celda

-mwarn-cell-microcódigo
Advertencia cuando se va a emitir una instrucción de microcódigo de celda. Un ejemplo de celda
La instrucción de microcódigo es un cambio variable.

-msecure-plt
Genere código que permita a ld y ld.so construir ejecutables y bibliotecas compartidas con
secciones no ejecutivas .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 complete y requiera .plt y
.got secciones que se pueden escribir y ejecutar. Este es un SYSV PowerPC de 32 bits
Opción 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.

-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
asignará al menos una entrada de TOC para cada referencia de variable no automática única
en su programa. GCC también colocará constantes de punto flotante en el TOC. Sin embargo,
sólo 16,384 entradas están disponibles en el TOC.

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 producirá 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 y
-poderpc, mientras -maix32 deshabilita la ABI de 64 bits e implica -mno-powerpc64. CCG
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
Especifique el tipo de unidad de coma flotante. Los valores válidos son sp_lite (equivalente a
-msingle-float -msimple-fpu), dp_lite (equivalente a -mdouble-float -msimple-fpu),
sp_full (equivalente a -msingle-float), y dp_completo (equivalente a -mdouble-float).

-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 al apuntar 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 serán 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/1/2 asignar no / más alto / segundo más alto prioridad para despachar espacio restringido
instrucciones.

-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: alguna
la dependencia de la tienda a la carga es costosa, número: cualquier dependencia para la cual latencia> =
número es costoso

-minsert-sched-nops =esquema
Esta opción controla qué esquema de inserción de nop se utilizará durante el segundo
pase de programación. El argumento esquema toma uno de los siguientes valores: no: No
inserte nops. almohadilla: Rellene con nops cualquier grupo de despacho que tenga espacios de emisión vacantes,
según la agrupación del planificador. reagrupar_exacto: Inserte nops para forzar costosos
insns dependientes en grupos separados. Inserte exactamente tantos nops como sea necesario para forzar
un insn a un nuevo grupo, de acuerdo con la agrupación de procesadores estimada. número: Insertar
nops para forzar costosos insns dependientes en grupos separados. Insertar número nops a
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
se adhiere 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.

-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 Booke 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.

-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 pasaron en el punto flotante
se registra en caso de que la función tome argumentos variables. Con -mprototipo, solo llamadas
a las 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 del
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 del
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 del
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, configure el PPC_EMB bit en el encabezado de 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 V.4
especificaciones. Seleccionar -meabi significa que la pila está alineada a un 8 bytes
límite, se llama a una función "__eabi" desde "main" para configurar el entorno eabi,
y del -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
no llamar a una función de inicialización desde "main", y el -msdatos la opción solo usará
"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 el .sdata2 sección, a la que apunta el registro "r2". Poner pequeño
datos globales y estáticos no "const" inicializados en el .sdata sección, que es puntiaguda
a mediante el registro "r13". Coloque pequeños datos globales y estáticos no inicializados en el .sbs
sección, que es adyacente a la .sdata sección. 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
.sdata sección, a la que apunta el registro "r13". Ponga pequeño global no inicializado
y datos estáticos en el .sbs sección, que es adyacente a la .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 el .sdata
sección. Ponga pequeños datos globales no inicializados en el .sbs sección. 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 globales y estáticos inicializados en el .datos
sección, y todos los datos no inicializados en el .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 la sección normal de datos 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 llamada más larga y costosa
Se requiere secuencia. Esto es necesario para llamadas de más de 32 megabytes.
(33,554,432 bytes) desde la ubicación actual. Se generará 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" generará "jbsr callee, L42", más un
"isla de rama" (código de pegamento). Las dos direcciones de destino representan el destinatario y el
"isla sucursal". El enlazador Darwin / PPC preferirá la primera dirección y generará una
"bl callee" si la instrucción PPC "bl" llegará directamente al destinatario; de lo contrario, el
El enlazador generará "bl L42" para llamar a la "isla de sucursales". La "isla sucursal" es
adjunto al cuerpo de la función de llamada; calcula la dirección completa de 32 bits de
el llamado 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, podemos hacer que GCC ignore todas las especificaciones de llamadas largas cuando el enlazador
se sabe que genera 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 a ld asociar de manera confiable la llamada de función con el argumento
instrucciones de configuración para la optimización de TLS, que a su vez permite a gcc programar mejor
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 permitirá a GCC utilizar la estimación recíproca y la raíz cuadrada recíproca
estimar 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. usted
debería usar el -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 si bien el rendimiento de la secuencia es generalmente
mayor que el rendimiento de la instrucción no recíproca, la precisión de la
la secuencia se puede reducir hasta en 2 ulp (es decir, la inversa de 1.0 es igual a 0.99999994)
para raíces cuadradas recíprocas.

-mrecip =optar
Esta opción permite controlar qué instrucciones de estimación recíproca se pueden utilizar. optar
es una lista de opciones separadas por comas, que puede ir precedida por un "!" para invertir el
opción: "todos": habilita todas las instrucciones de estimación, "predeterminado": habilita el valor predeterminado
instrucciones, equivalente a -mrecip, "none": inhabilita todas las instrucciones de estimación,
equivalente a -mno-receta; "div": habilita las instrucciones de aproximación recíproca para
precisión simple y doble; "divf": habilita el recíproco de precisión simple
instrucciones de aproximación; "divd": habilita el recíproco de doble precisión
instrucciones de aproximación; "rsqrt": habilita la aproximación recíproca de raíz cuadrada
instrucciones para precisión simple y doble; "rsqrtf": habilita el single-
instrucciones de aproximación de raíz cuadrada recíproca de precisión; "rsqrtd": habilita el
instrucciones de aproximación de raíz cuadrada recíproca de doble precisión;

Así por ejemplo, -mrecip = todo,! rsqrtd permitiría la totalidad de 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 or
-mcpu = power7 selecciona automáticamente -mrecip-precisión. El cuadrado de doble precisión
Las instrucciones de estimación raíz no se generan de forma predeterminada en máquinas de baja 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 "masivo", que especifica el uso de IBM
Bibliotecas del Subsistema de Aceleración Matemática (MASS) para vectorizar intrínsecos usando
bibliotecas externas. Actualmente, GCC emitirá 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 tiene que estar habilitado. Las bibliotecas MASS deberán 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ático (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
registrarse r2y valor de la cadena estática que se cargará en el registro r11.
-mpointers-a-funciones-anidadas está activado de forma predeterminada. No podrás llamar a través de
punteros a funciones anidadas o punteros a funciones compiladas en otros lenguajes que
use la cadena estática si usa el -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.

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
por defecto está habilitado para el RX600 serie y deshabilitado para el RX200 .

Las instrucciones de coma flotante solo se generarán para valores de coma flotante de 32 bits
Sin embargo, si el -m64bit-dobles opción está en uso, entonces el hardware FPU no será
utilizado para dobles.

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".

El 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 que alguna vez pudieron haberse mantenido en el registro reservado ahora
empujado a la pila.

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, por lo que generarlo no es la opción 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
intentar reducir el tamaño de un programa encontrando versiones más cortas de varios
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" será
reservado para el uso exclusivo de los 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
reserva "r13" a "r10". Un valor de 0, el predeterminado, no reserva ninguna
registros.

-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 realizarán mediante un desplazamiento desde una dirección base contenida 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.

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 se asegurará de que solo utilice el
registra "r10", "r11", "r12" y / o "r13" y solo 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 utilizará
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
se utilizará para realizar operaciones de coma flotante decimal. Cuando -mhard-dfp is
especificado, el compilador genera instrucciones de hardware de coma flotante decimal. Esta
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 ejecutará 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 y z10. Al generar código usando las instrucciones disponibles 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. Este es
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 s390 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 arriba
las tamaño de la pila (recuerde que la pila en s390 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 de producción sin 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.

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
Deshabilite generar instrucción bcnz.

-muls
Habilite generar instrucción de almacenamiento y carga no alineada.

-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.

-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.

-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 funcionarán 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.

-mhitachi
Cumplir con las convenciones de llamadas definidas por Renesas.

-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 -mhitachi 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 opcin no tiene ningn efecto si -musermode est en efecto y el seleccionado
La opción de generación de código (por ejemplo, -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 de la instrucción icbi,
y -musermode no está en efecto, el código en línea manipulará la instrucción
matriz de direcciones de caché directamente con una escritura asociativa. Esto no solo requiere
modo privilegiado, pero también fallará si la línea de caché se ha asignado a través de la TLB
y ha quedado sin cartografiar.

-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.

-msoft-atómico
Genere secuencias atómicas de software gUSA compatibles con GNU / Linux para el
funciones. Las secuencias atómicas generadas requieren el apoyo de la interrupción /
código de manejo de excepciones del sistema y solo son adecuados para sistemas de un solo núcleo.
No funcionarán correctamente en sistemas de varios núcleos. Esta opción está habilitada por
predeterminado cuando el objetivo es "sh - * - linux *". Para obtener más información sobre el atómico incorporado
funciones ver __atómico Incorporados.

-mespacio
Optimice el espacio en lugar de la velocidad. Implicado por -os.

-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
No genere código solo en modo privilegiado; implica -mno-inline-ic_invalidate si el
el código en línea no funcionaría en modo de usuario. Este es el valor predeterminado cuando el objetivo es
"sh - * - linux *".

-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 se establecerá de forma predeterminada en "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 instrucciones de cambio dinámico
por defecto a "call-div1".

Cuando no se ha especificado una estrategia de división, se seleccionará la estrategia predeterminada
basado en el objetivo actual. Para SH2A, la estrategia predeterminada es utilizar los "divs" y
instrucciones "divu" 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 afectan el nombre usado en la llamada e inv: estrategias de división de llamadas, y la
El compilador seguirá esperando los mismos conjuntos de registros de entrada / salida / golpeados como si
esta opción no estaba presente.

-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.

-madjust-desenrollar
Desenrollar el acelerador para evitar golpear los registros de destino. Esta opción solo tiene un
efecto si la base del código gcc admite el gancho de destino TARGET_ADJUST_UNROLL_MAX.

-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 generará mejores programas
código, pero no es seguro en el hardware actual. La definición de arquitectura actual dice
que ptabs y ptrel atrapan cuando el objetivo y el 3 son 3. Esto tiene el
efecto involuntario de hacer que no sea seguro programar ptabs / ptrel antes de una sucursal, o
sáquelo de un bucle. Por ejemplo, __do_global_ctors, una parte de libgcc que se ejecuta
constructores al inicio del programa, llama a funciones en una lista que está delimitada por -1.
Con la opción -mpt-fixed, los ptabs se realizarán antes de probar contra -1. Ese
significa que todos los constructores se ejecutarán un poco más rápido, pero cuando el ciclo llegue a
al final de la lista, el programa se bloquea porque ptabs carga -1 en un objetivo
Registrarse. Dado que esta opción no es segura para cualquier hardware que implemente la
especificación de arquitectura, el valor predeterminado es -mno-pt-fixed. A menos que el usuario especifique un
costo específico con -mgettrcost, -mno-pt-fixed también implica -mgettrcost = 100; esta
disuade la asignación de registros utilizando 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 será válido para cargar con movi / shori / ptabs o movi / shori / ptrel, pero con
trucos de ensamblador y / o enlazador es posible generar símbolos que causarán
ptabs / ptrel para atrapar. Esta opción solo es significativa cuando -mno-pt-fijo será en
efecto. A continuación, evitará el cse de bloques básicos cruzados, el izado y la mayoría de la programación de
cargas de símbolo. 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 harán que
El compilador intenta generar más código sin ramificaciones si es posible. Si no se especifica el
El valor se selecciona según el tipo de procesador para el que se está compilando.

-mcbranchdi
Habilite el patrón de instrucción "cbranchdi4".

-mcmpeqdi
Emite el patrón de instrucción "cmpeqdi_t" incluso cuando -mcbranchdi está en efecto.

-confundido-loco
Permitir el uso de la instrucción "fmac" (multiplicar-acumular en coma flotante) si el
el tipo de procesador lo admite. Habilitar esta opción podría generar código que produzca
diferentes resultados numéricos de punto flotante en comparación con la aritmética estricta IEEE 754.

-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:

-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 activarán la copia
en escritura, 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
tratados como registros de "llamada guardada" y se guardarán 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.

-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
no estará 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, sparclita, f930, f934, sparlite86x, chispeante, tsc701, v9,
ultrasparc, ultrasparc3, Niágara, Niágara2, Niágara3y 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

v8 supersparc, hypersparc, león

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 haría.

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, f930, f934, sparlite86x, tsc701, ultrasparc,
ultrasparc3, Niágara, Niágara2, Niágara3 y Niágara4. Con Solaris nativo y
Cadenas de herramientas 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.

-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).

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. De forma predeterminada, GCC dará una
error cuando genera código que requiere una reubicación dinámica. -mno-error-reloc
desactiva el error, -advertir-reloc generará 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. Los usuarios normalmente
abordar este problema utilizando la palabra clave volátil, pero eso puede conducir a un código ineficiente
en lugares donde se sabe que la memoria no cambia. En lugar de marcar la memoria como
volátil tratamos las instrucciones DMA como potencialmente afectando a toda la memoria. Con
-munsafe-dma los usuarios deben utilizar la palabra clave volátil para proteger los accesos a la memoria.

-consejos-de-rama
Por defecto, GCC generará una instrucción de sugerencia de bifurcación para evitar paradas de la tubería para
siempre tomadas o probablemente tomadas ramas. No se generará 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, GCC enlazará
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 interferirá 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é será más
eficiente. El comportamiento predeterminado es utilizar actualizaciones atómicas.

-mdual-nops
-mdual-nops =n
De forma predeterminada, GCC insertará nops para aumentar el problema dual cuando espera que aumente
rendimiento. n puede ser un valor de 0 a 10. Un valor menor n insertará 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á efectuando. GCC insertará hasta n nops a
hacer cumplir esto, de lo contrario no generará 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 rama que está efectuando. 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
insertará 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:

-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.

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 cargará la dirección de funciones en un registro y llamará 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.

-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 hará que r2 y r5 se usen en el código generado por el compilador.
Este ajuste es el predeterminado.

-mno-aplicación-registros
Esta opción hará que r2 y r5 se traten como registros fijos.

-mv850e2v3
Especifique que el procesador de destino es el V850E2V3. Las constantes del preprocesador
__v850e2v3__ se definirá si se utiliza esta opción.

-mv850e2
Especifique que el procesador de destino es el V850E2. Las constantes del preprocesador
__v850e2__ se definirá si se utiliza esta opción.

-mv850e1
Especifique que el procesador de destino es el V850E1. Las constantes del preprocesador
__v850e1__ y __v850e__ se definirá 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 definirá si se utiliza esta opción.

Si ninguno -mv850 ni -mv850e ni -mv850e1 ni -mv850e2 ni -mv850e2v3 están definidos
entonces se elegirá un procesador de destino predeterminado y el correspondiente __v850 * __ preprocesador
constante se definirá.

Las constantes del preprocesador __v850 y __v851__ siempre están definidos, independientemente de qué
La variante del procesador es el objetivo.

-mdisable-llamada
Esta opción suprimirá la generación de la instrucción CALLT para los modelos v850e, v850e1,
Versiones v850e2 y v850e2v3 de la arquitectura v850. El valor predeterminado es
-mno-deshabilitar-callt que permite utilizar la instrucción CALLT.

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 se ensamblará con el
Ensamblador GNU.

-mg Código de salida para números de coma flotante en formato G en lugar de formato D.

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-64 Opciones

Estos se enumeran en

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
Controla el tratamiento de las piscinas literales. El valor predeterminado es -mno-text-section-literales,
que coloca literales en una sección separada en el archivo de salida. Esto permite
grupo literal que se colocará en una RAM / ROM de datos, y también permite que el enlazador combine
grupos de literales de archivos de objetos separados para eliminar literales redundantes y mejorar el código
Talla. Con -mtext-sección-literales, los literales se intercalan en la sección de texto
para mantenerlos lo más cerca posible de sus 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 realizará 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 alineará, ya sea ampliando
instrucciones de densidad o insertando instrucciones no operativas.

-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 seguirá mostrando la llamada directa
instrucciones --- mire el código del objeto desmontado para ver las instrucciones reales.
Tenga en cuenta que el ensamblador utilizará una llamada indirecta para cada llamada entre archivos, no solo
aquellos que realmente estará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 sería
-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.

-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 generará información de desenrollado de tramas para todos
funciones, que pueden producir una sobrecarga de tamaño de datos significativa, aunque no
afectar la ejecución. Si no especifica esta opción, GCC la habilitará de forma predeterminada
para lenguajes como C ++ que normalmente requieren manejo de excepciones, y deshabilítelo para
lenguajes como C que normalmente no lo requieren. Sin embargo, es posible que deba habilitar
esta opción al compilar código C que necesita interoperar correctamente con excepción
controladores escritos en C ++. También puede deshabilitar esta opción si está
compilar programas antiguos de C ++ 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".

-Mesas-divertidas-de-viento
Similar a -fexcepciones, excepto que solo generará los datos estáticos necesarios, pero
no afectará el código generado de ninguna otra manera. Normalmente no habilitará
esta opción; en cambio, un procesador de lenguaje que necesita este manejo lo habilitaría en
su nombre.

-mesas-de-desenrollado-sincronizado
Genere una tabla de desenrollado en formato dwarf2, 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).

-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" será equivalente al más pequeño
tipo entero 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 para wchar_t para ser Corto no firmado int en vez de
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,
obtiene un error de definición múltiple cuando los vincula. En este caso, debe compilar
-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
Ignora el #identificación Directiva.

-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 que se usó para invocar al compilador sea
registrado en el archivo de objeto que se está creando. Este cambio solo está implementado
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 386 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 386, 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 utilizará 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 guardarán ni restaurarán el registro reg.

Es un error utilizar esta bandera con el puntero de trama 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 producirá 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 trama 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 producirá resultados desastrosos.

Un tipo diferente de desastre resultará del uso de esta bandera para un registro en
qué valores de función se pueden devolver.

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 generarán potencialmente desalineados
en la siguiente ubicación de montaje.

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, se llamarán las siguientes funciones de generación de perfiles
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 perfilado indicarán dónde, conceptualmente, se ingresa la función en línea
y salió. Esto significa que deben estar disponibles versiones direccionables de dichas funciones.
Si todos los usos de una función se amplían en línea, esto puede significar una
expansión del tamaño del código. Si utiliza externo en línea en su código C, un direccionable
debe proporcionarse una versión de dichas funciones. (Este es normalmente el caso de todos modos, pero
Si tiene suerte y el optimizador siempre expande las funciones en línea, es posible que tenga
se escapó sin proporcionar copias estáticas).

A una función se le puede asignar el atributo "no_instrument_function", en cuyo caso este
no se realizará la instrumentación. 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
de "-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

excluirá cualquier función en línea definida en archivos cuyos nombres de ruta contengan "/ bits / stl"
o "incluir / sys".

Si, por alguna razón, desea incluir la letra ',' en uno de sym, escribir ','. Para
ejemplo, "-finstrument-functions-exclude-file-list = ',, tmp'" (observe las comillas simples
rodeando la opción).

-funciones-de-instrumentos-excluir-lista-de-funciones =sym,sym, ...
Esto es similar a "-finstrument-functions-exclude-file-list", pero esta opción establece
la lista de nombres de funciones que se excluirán de la instrumentación. El nombre de la función a
coincidir es su nombre visible para el usuario, como "vector bla (vector constante &) ",
no el nombre mutilado interno (por ejemplo, "_Z4blahRSt6vectorIiSaIiEE"). El partido esta hecho
en subcadenas: si el sym parámetro es una subcadena del nombre de la función, es
considerado un partido. Para identificadores extendidos C99 y C ++, el nombre de la función
se debe dar en UTF-8, sin usar 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 solo en raras ocasiones 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 verificación de estilo antiguo, "específico" significa usar la mejor verificación
método y es equivalente a bare -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 asignarán
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 desempeño 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 "específico" 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 la pila creciera más allá
el valor, se eleva una señal. Para la mayoría de los objetivos, la señal se genera antes de que
pila sobrepasa el límite, por lo que es posible captar la señal sin tomar
precauciones especiales.

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 backends i386 y x86_64 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", "dinámico-local", "ejecutivo-inicial" o "ejecutivo-local".

El predeterminado sin -fpic es "initial-exec"; con -fpic el valor predeterminado es
"dinámica global".

-fvisibilidad =predeterminado | interno | oculto | protegido
Establezca la visibilidad predeterminada del símbolo de la imagen ELF en la opción especificada --- todos los símbolos
estar 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, "predeterminado" siempre significa público; es decir, disponible para ser vinculado
contra desde fuera del objeto compartido. "protegido" e "interno" son bastante inútiles
en el uso en el mundo real, por lo que la única otra opción de uso común estará "oculta". los
predeterminado si -fvisibilidad no se especifica es "predeterminado", es decir, hace que todos los símbolos
public --- esto causa el mismo comportamiento que las versiones anteriores de GCC.

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://people.redhat.com/~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 soporte de visibilidad al código existente, puede encontrar #pragma GCC
la visibilidad de uso. Esto funciona adjuntando las declaraciones que desea establecer.
visibilidad para con (por ejemplo) #pragma GCC la visibilidad empujar (oculto) y #pragma GCC
la visibilidad Deliciosos. Tenga en cuenta que la visibilidad del símbolo debe verse 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
ser marcado explícitamente como oculto para evitar gastos indirectos de PLT --- haciendo esto
abundantemente claro también ayuda a la legibilidad y auto-documentación del código. Tenga en cuenta que
Debido a los requisitos de la especificación ISO C ++, el operador nuevo y la eliminación del operador deben
ser siempre de 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
la visibilidad empujar (predeterminado) antes de incluir tales encabezados.

externo las declaraciones 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
llamadas a externo funciones sin visibilidad explícita utilizarán el PLT, por lo que es más
efectivo de usar __atributo ((visibilidad)) y/o #pragma GCC la visibilidad decirle al
compilador que externo las declaraciones deben tratarse como ocultas.

Tenga en cuenta que -fvisibilidad afecta a las entidades de enlace vago de C ++. Esto significa que, para
instancia, una clase de excepción que se lanzará entre los DSO debe ser explícitamente
marcado con visibilidad predeterminada para que el tipo_info Los nodos se unificarán 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 el usuario puede declarar todos los bits periféricos
campos como "unsigned short" (asumiendo que el corto es de 16 bits en estos objetivos) para forzar a GCC
utilizar 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 usará la instrucción más eficiente. En
el ejemplo anterior, que podría ser una instrucción de carga de 32 bits, aunque eso
bytes de acceso que no contienen ninguna parte del campo de bits, o asignados en memoria
registros no relacionados con el que se está actualizando.

Si el objetivo requiere una alineación estricta, y respetar el tipo de campo requeriría
violando esta alineación, se emite una advertencia. Si el campo tiene el atributo "empaquetado",
el acceso se realiza sin respetar el tipo de campo. Si el campo no tiene
atributo "empaquetado", el acceso se realiza respetando el tipo de campo. En ambos casos, GCC
asume que el usuario sabe algo sobre el hardware de destino que desconoce.

El valor predeterminado de esta opción lo determina la interfaz binaria de la aplicación para
el procesador de destino.

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.

El 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 final de cuerda o escape.

El 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 intentará encontrar un prefijo apropiado para
uso basado en el nombre de ruta con el que se invocó.

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 /, GCC buscará foo / bar donde normalmente buscaría
/ usr / local / lib / bar. Estos directorios alternativos se buscan primero; el estandar
los directorios vienen a continuación. Si un directorio estándar comienza con el configurado prefijo luego
el valor de prefijo es reemplazado por GCC_EXEC_PREFIX al buscar archivos de encabezado.

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 usará
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 ++ - 4.7 en línea usando los servicios de onworks.net


Servidores y estaciones de trabajo gratuitos

Descargar aplicaciones de Windows y Linux

  • 1
    turcodevops
    turcodevops
    TurkDevOps a ? K kaynak yaz? L? M
    geli? tirici topluluklar? Equipo DevTurks
    Taraf?ndan desteklenmektedir..
    Características: https://github.com/turkdevops https://turkdevops.g...
    Descargar turkdevops
  • 2
    asamdf
    asamdf
    * asammdf * es un analizador rápido de Python y
    editor de ASAM (Asociación para
    Estandarización de Automatización y
    Sistemas de medición) MDF / MF4
    (Formato de datos de medición ...
    Descargar asammdf
  • 3
    LAME (Lame no es un codificador MP3)
    LAME (Lame no es un codificador MP3)
    LAME es una herramienta educativa para ser utilizada
    para obtener información sobre la codificación de MP3. Él
    El objetivo del proyecto LAME es mejorar
    la psicoacústica, calidad y velocidad
    de diputado...
    Descargar LAME (Lame no es un codificador de MP3)
  • 4
    wxPython
    wxPython
    Un conjunto de módulos de extensión de Python que
    envuelva las clases GUI multiplataforma de
    wxWidgets.. Audiencia: Desarrolladores. Usuario
    Interfaz: Sistema X Window (X11), Win32...
    Descargar wxPython
  • 5
    administrador de archivos de paquete
    administrador de archivos de paquete
    Este es el administrador de archivos del paquete Total War
    proyecto, a partir de la versión 1.7. A
    breve introducción a Warscape
    modificación: ...
    Descargar administrador de archivos de paquete
  • 6
    IPerf2
    IPerf2
    Una herramienta de tráfico de red para medir
    Rendimiento de TCP y UDP con métricas
    en torno al rendimiento y la latencia. los
    Los objetivos incluyen mantener un activo
    iperf bacalao ...
    Descargar IPerf2
  • Más "

Comandos de Linux

Ad