as AS - 便携式 GNU 汇编器。
as [-a[cdghlns][=file]] [--alternate] [--compress-debug-sections] [--nocompress-debug-sections] [-D] [--dump-config] [--debug-prefix-map old=new] [--defsym sym=val] [--elf-stt-common=[no|yes]] [--emulation=name] [-f] [-g] [--gstabs] [--gstabs+] [--gdwarf-<N>] [--gdwarf-sections] [--gdwarf-cie-version=VERSION] [--generate-missing-build-notes=[no|yes]] [--gsframe] [--hash-size=N] [--help] [--target-help] [-I dir] [-J] [-K] [--keep-locals] [-L] [--listing-lhs-width=NUM] [--listing-lhs-width2=NUM] [--listing-rhs-width=NUM] [--listing-cont-lines=NUM] [--multibyte-handling=[allow|warn|warn-sym-only]] [--no-pad-sections] [-o objfile] [-R] [--sectname-subst] [--size-check=[error|warning]] [--statistics] [-v] [-version] [--version] [-W] [--warn] [--fatal-warnings] [-w] [-x] [-Z] [@FILE] [target-options] [--|files ...]
目标 AArch64 选项:
[-EB|-EL] [-mabi=ABI]
目标 Alpha 选项:
[-mcpu] [-mdebug | -no-mdebug] [-replace | -noreplace] [-relax] [-g] [-Gsize] [-F] [-32addr]
目标 ARC 选项:
[-mcpu=cpu] [-mA6|-mARC600|-mARC601|-mA7|-mARC700|-mEM|-mHS] [-mcode-density] [-mrelax] [-EB|-EL]
目标 ARM 选项:
[-mcpu=processor[+extension...]] [-march=architecture[+extension...]] [-mfpu=floating-point-format] [-mfloat-abi=abi] [-meabi=ver] [-mthumb] [-EB|-EL] [-mapcs-32|-mapcs-26|-mapcs-float| -mapcs-reentrant] [-mthumb-interwork] [-k]
目标 Blackfin 选项:
[-mcpu=processor[-sirevision]] [-mfdpic] [-mno-fdpic] [-mnopic]
目标 BPF 选项:
[-EL] [-EB]
目标 CRIS 选项:
[--underscore | --no-underscore] [--pic] [-N] [--emulation=criself | --emulation=crisaout] [--march=v0_v10 | --march=v10 | --march=v32 | --march=common_v10_v32]
目标 C-SKY 选项:
[-march=arch] [-mcpu=cpu] [-EL] [-mlittle-endian] [-EB] [-mbig-endian] [-fpic] [-pic] [-mljump] [-mno-ljump] [-force2bsr] [-mforce2bsr] [-no-force2bsr] [-mno-force2bsr] [-jsri2bsr] [-mjsri2bsr] [-no-jsri2bsr ] [-mno-jsri2bsr] [-mnolrw ] [-mno-lrw] [-melrw] [-mno-elrw] [-mlaf ] [-mliterals-after-func] [-mno-laf] [-mno-literals-after-func] [-mlabr] [-mliterals-after-br] [-mno-labr] [-mnoliterals-after-br] [-mistack] [-mno-istack] [-mhard-float] [-mmp] [-mcp] [-mcache] [-msecurity] [-mtrust] [-mdsp] [-medsp] [-mvdsp]
目标 D10V 选项:
[-O]
目标 D30V 选项:
[-O|-n|-N]
目标主显节选项:
[-mepiphany|-mepiphany16]
目标 H8/300 选项:
[-h-tick-hex]
目标 i386 选项:
[--32|--x32|--64] [-n] [-march=CPU[+EXTENSION...]] [-mtune=CPU]
目标 IA-64 选项:
[-mconstant-gp|-mauto-pic] [-milp32|-milp64|-mlp64|-mp64] [-mle|mbe] [-mtune=itanium1|-mtune=itanium2] [-munwind-check=warning|-munwind-check=error] [-mhint.b=ok|-mhint.b=warning|-mhint.b=error] [-x|-xexplicit] [-xauto] [-xdebug]
目标 IP2K 选项:
[-mip2022|-mip2022ext]
目标 M32C 选项:
[-m32c|-m16c] [-relax] [-h-tick-hex]
目标 M32R 选项:
[--m32rx|--[no-]warn-explicit-parallel-conflicts| --W[n]p]
目标 M680X0 选项:
[-l] [-m68000|-m68010|-m68020|...]
目标 M68HC11 选项:
[-m68hc11|-m68hc12|-m68hcs12|-mm9s12x|-mm9s12xg] [-mshort|-mlong] [-mshort-double|-mlong-double] [--force-long-branches] [--short-branches] [--strict-direct-mode] [--print-insn-syntax] [--print-opcodes] [--generate-example]
目标 MCORE 选项:
[-jsri2bsr] [-sifilter] [-relax] [-mcpu=[210|340]]
目标元选项:
[-mcpu=cpu] [-mfpu=cpu] [-mdsp=cpu]
目标 MICROBLAZE 选项:
目标 MIPS 选项:
[-nocpp] [-EL] [-EB] [-O[optimization level]] [-g[debug level]] [-G num] [-KPIC] [-call_shared] [-non_shared] [-xgot [-mvxworks-pic] [-mabi=ABI] [-32] [-n32] [-64] [-mfp32] [-mgp32] [-mfp64] [-mgp64] [-mfpxx] [-modd-spreg] [-mno-odd-spreg] [-march=CPU] [-mtune=CPU] [-mips1] [-mips2] [-mips3] [-mips4] [-mips5] [-mips32] [-mips32r2] [-mips32r3] [-mips32r5] [-mips32r6] [-mips64] [-mips64r2] [-mips64r3] [-mips64r5] [-mips64r6] [-construct-floats] [-no-construct-floats] [-mignore-branch-isa] [-mno-ignore-branch-isa] [-mnan=encoding] [-trap] [-no-break] [-break] [-no-trap] [-mips16] [-no-mips16] [-mmips16e2] [-mno-mips16e2] [-mmicromips] [-mno-micromips] [-msmartmips] [-mno-smartmips] [-mips3d] [-no-mips3d] [-mdmx] [-no-mdmx] [-mdsp] [-mno-dsp] [-mdspr2] [-mno-dspr2] [-mdspr3] [-mno-dspr3] [-mmsa] [-mno-msa] [-mxpa] [-mno-xpa] [-mmt] [-mno-mt] [-mmcu] [-mno-mcu] [-mcrc] [-mno-crc] [-mginv] [-mno-ginv] [-mloongson-mmi] [-mno-loongson-mmi] [-mloongson-cam] [-mno-loongson-cam] [-mloongson-ext] [-mno-loongson-ext] [-mloongson-ext2] [-mno-loongson-ext2] [-minsn32] [-mno-insn32] [-mfix7000] [-mno-fix7000] [-mfix-rm7000] [-mno-fix-rm7000] [-mfix-vr4120] [-mno-fix-vr4120] [-mfix-vr4130] [-mno-fix-vr4130] [-mfix-r5900] [-mno-fix-r5900] [-mdebug] [-no-mdebug] [-mpdr] [-mno-pdr]
目标 MMIX 选项:
[--fixed-special-register-names] [--globalize-symbols] [--gnu-syntax] [--relax] [--no-predefined-symbols] [--no-expand] [--no-merge-gregs] [-x] [--linker-allocated-gregs]
目标 Nios II 选项:
[-relax-all] [-relax-section] [-no-relax] [-EB] [-EL]
目标 NDS32 选项:
[-EL] [-EB] [-O] [-Os] [-mcpu=cpu] [-misa=isa] [-mabi=abi] [-mall-ext] [-m[no-]16-bit] [-m[no-]perf-ext] [-m[no-]perf2-ext] [-m[no-]string-ext] [-m[no-]dsp-ext] [-m[no-]mac] [-m[no-]div] [-m[no-]audio-isa-ext] [-m[no-]fpu-sp-ext] [-m[no-]fpu-dp-ext] [-m[no-]fpu-fma] [-mfpu-freg=FREG] [-mreduced-regs] [-mfull-regs] [-m[no-]dx-regs] [-mpic] [-mno-relax] [-mb2bb]
目标 PDP11 选项:
[-mpic|-mno-pic] [-mall] [-mno-extensions] [-mextension|-mno-extension] [-mcpu] [-mmachine]
目标 picoJava 选项:
[-mb|-me]
目标 PowerPC 选项:
[-a32|-a64] [-mpwrx|-mpwr2|-mpwr|-m601|-mppc|-mppc32|-m603|-m604|-m403|-m405| -m440|-m464|-m476|-m7400|-m7410|-m7450|-m7455|-m750cl|-mgekko| -mbroadway|-mppc64|-m620|-me500|-e500x2|-me500mc|-me500mc64|-me5500| -me6500|-mppc64bridge|-mbooke|-mpower4|-mpwr4|-mpower5|-mpwr5|-mpwr5x| -mpower6|-mpwr6|-mpower7|-mpwr7|-mpower8|-mpwr8|-mpower9|-mpwr9-ma2| -mcell|-mspe|-mspe2|-mtitan|-me300|-mcom] [-many] [-maltivec|-mvsx|-mhtm|-mvle] [-mregnames|-mno-regnames] [-mrelocatable|-mrelocatable-lib|-K PIC] [-memb] [-mlittle|-mlittle-endian|-le|-mbig|-mbig-endian|-be] [-msolaris|-mno-solaris] [-nops=count]
目标 PRU 选项:
[-link-relax] [-mnolink-relax] [-mno-warn-regname-label]
目标 RISC-V 选项:
[-fpic|-fPIC|-fno-pic] [-march=ISA] [-mabi=ABI] [-mlittle-endian|-mbig-endian]
目标 RL78 选项:
[-mg10] [-m32bit-doubles|-m64bit-doubles]
目标接收选项:
[-mlittle-endian|-mbig-endian] [-m32bit-doubles|-m64bit-doubles] [-muse-conventional-section-names] [-msmall-data-limit] [-mpid] [-mrelax] [-mint-register=number] [-mgcc-abi|-mrx-abi]
目标 s390 选项:
[-m31|-m64] [-mesa|-mzarch] [-march=CPU] [-mregnames|-mno-regnames] [-mwarn-areg-zero]
目标分数选项:
[-EB][-EL][-FIXDD][-NWARN] [-SCORE5][-SCORE5U][-SCORE7][-SCORE3] [-march=score7][-march=score3] [-USE_R1][-KPIC][-O0][-G num][-V]
目标 SPARC 选项:
[-Av6|-Av7|-Av8|-Aleon|-Asparclet|-Asparclite -Av8plus|-Av8plusa|-Av8plusb|-Av8plusc|-Av8plusd -Av8plusv|-Av8plusm|-Av9|-Av9a|-Av9b|-Av9c -Av9d|-Av9e|-Av9v|-Av9m|-Asparc|-Asparcvis -Asparcvis2|-Asparcfmaf|-Asparcima|-Asparcvis3 -Asparcvisr|-Asparc5] [-xarch=v8plus|-xarch=v8plusa]|-xarch=v8plusb|-xarch=v8plusc -xarch=v8plusd|-xarch=v8plusv|-xarch=v8plusm|-xarch=v9 -xarch=v9a|-xarch=v9b|-xarch=v9c|-xarch=v9d|-xarch=v9e -xarch=v9v|-xarch=v9m|-xarch=sparc|-xarch=sparcvis -xarch=sparcvis2|-xarch=sparcfmaf|-xarch=sparcima -xarch=sparcvis3|-xarch=sparcvisr|-xarch=sparc5 -bump] [-32|-64] [--enforce-aligned-data][--dcti-couples-detect]
目标 TIC54X 选项:
[-mcpu=54[123589]|-mcpu=54[56]lp] [-mfar-mode|-mf] [-merrors-to-file <filename>|-me <filename>]
目标 TIC6X 选项:
[-march=arch] [-mbig-endian|-mlittle-endian] [-mdsbt|-mno-dsbt] [-mpid=no|-mpid=near|-mpid=far] [-mpic|-mno-pic]
目标 TILE-Gx 选项:
[-m32|-m64][-EB][-EL]
目标 Visium 选项:
[-mtune=arch]
目标 Xtensa 选项:
[--[no-]text-section-literals] [--[no-]auto-litpools] [--[no-]absolute-literals] [--[no-]target-align] [--[no-]longcalls] [--[no-]transform] [--rename-section oldname=newname] [--[no-]trampolines] [--abi-windowed|--abi-call0]
目标 Z80 选项:
[-march=CPU[-EXT][+EXT]] [-local-prefix=PREFIX] [-colonless] [-sdcc] [-fp-s=FORMAT] [-fp-d=FORMAT]
GNU as 实际上是一个汇编程序家族。如果您在一种体系结构上使用(或已经使用)GNU 汇编器,那么当您在另一种体系结构上使用它时,您应该会发现一个相当相似的环境。每个版本与其他版本都有很多共同点,包括目标文件格式、大多数汇编程序指令(通常称为伪操作)和汇编程序语法。
as 主要用于汇编 GNU C 编译器 gcc 的输出,以供链接器 ld 使用。尽管如此,我们还是尝试让 as 正确地组装同一台机器的其他汇编程序将组装的所有内容。任何异常都会被明确记录。这并不意味着 as 总是使用与同一架构的另一个汇编器相同的语法;例如,我们知道 680x0 汇编语言语法的几个不兼容版本。
每次您运行as时,它都会准确地汇编一个源程序。源程序由一个或多个文件组成。 (标准输入也是一个文件。)
您指定 as 具有零个或多个输入文件名的命令行。读取输入文件(从左文件名到右)。没有特殊含义的命令行参数(在任何位置)将被视为输入文件名。
如果您没有给 as 文件名,它会尝试从 as 标准输入(通常是您的终端)读取一个输入文件。您可能需要输入ctl-D来告诉as没有更多的程序需要汇编。
如果需要在命令行中显式命名标准输入文件,请使用--。
如果源为空,as 会生成一个小的空目标文件。
as 可能会将警告和错误消息写入标准错误文件(通常是您的终端)。当编译器自动运行时,这种情况不应该发生。警告报告了一种假设,以便 as 可以继续组装有缺陷的程序;错误报告了导致装配停止的严重问题。
如果您通过 GNU C 编译器调用 as,则可以使用 -Wa 选项将参数传递给汇编器。汇编程序参数必须用逗号彼此分隔(以及 -Wa)。例如:
gcc -c -g -O -Wa,-alh,-L file.c
这会将两个选项传递给汇编器:-alh(使用高级和汇编源代码将列表发送到标准输出)和-L(在符号表中保留本地符号)。
通常您不需要使用此-Wa机制,因为许多编译器命令行选项都会由编译器自动传递给汇编器。 (您可以使用 -v 选项调用 GNU 编译器驱动程序,以准确查看它传递给每个编译过程的选项,包括汇编器。)
从文件读取命令行选项。读取的选项将插入到原始 @file 选项的位置。如果文件不存在或无法读取,则该选项将按字面意思处理,而不是删除。 文件中的选项由空格分隔。通过用单引号或双引号将整个选项括起来,可以将空白字符包含在选项中。任何字符(包括反斜杠)都可以通过在要包含的字符前添加反斜杠来包含。 文件本身可能包含额外的@文件选项;任何此类选项都将被递归处理。
通过多种方式之一打开列表:
省略假条件句
省略调试指令
包括一般信息,例如版本和传递的选项
包括高级源
包括装配
包括宏扩展
省略表格处理
包括符号
设置列表文件的名称
您可以组合这些选项;例如,使用 -aln 进行汇编列表而不进行表单处理。 =file 选项(如果使用)必须是最后一个。 -a 本身默认为 -ahls。
以备用宏模式开始。
使用 zlib 和 ELF ABI 中的 SHF_COMPRESSED 压缩 DWARF 调试部分。生成的目标文件可能与较旧的链接器和目标文件实用程序不兼容。请注意,如果压缩会使给定部分变大,那么它就不会被压缩。
这些选项控制 DWARF 调试部分的压缩方式。 --compress-debug-sections=none 相当于 --nocompress-debug-sections。 --compress-debug-sections=zlib 和 --compress-debug-sections=zlib-gabi 相当于 --compress-debug-sections强>。 --compress-debug-sections=zlib-gnu 使用过时的 zlib-gnu 格式压缩 DWARF 调试部分。调试部分已重命名为以 .zdebug 开头。 --compress-debug-sections=zstd 使用 zstd 压缩 DWARF 调试部分。注意 - 如果压缩实际上会使某个部分变大,那么它就不会被压缩,也不会被重命名。
不要压缩 DWARF 调试部分。这通常是除 x86/x86_64 之外的所有目标的默认设置,但可以使用配置时间选项来覆盖它。
如果支持,请在目标特定后端中启用调试。否则忽略。即使被忽略,该选项也会被接受,以保证脚本与其他汇编程序的调用兼容。
在old目录中组装文件时,请像在new中那样记录描述它们的调试信息。
在组装输入文件之前,将符号 sym 定义为 value。 值必须是整数常量。与 C 中一样,前导 0x 表示十六进制值,前导 0 表示八进制值。可以通过使用 .set 伪操作在源文件内覆盖符号的值。
显示汇编程序如何配置然后退出。
这些选项控制 ELF 汇编器是否应生成 STT_COMMON 类型的通用符号。默认值可以通过配置选项--enable-elf-stt-common控制。
如果汇编器配置为支持多个不同的目标配置,则可以使用此选项来选择所需的形式。
快速——跳过空格和注释预处理(假设源是编译器输出)。
使用目标首选的调试格式为每个汇编源代码行生成调试信息。目前这意味着 STABS、ECOFF 或 DWARF2。当调试格式为 DWARF 时,仅当汇编文件本身不生成时,才会发出 .debug_info 和 .debug_line 部分。
为每个汇编器行生成 Stas 调试信息。如果调试器可以处理的话,这可能有助于调试汇编代码。
使用可能只有 gdb 可以处理的 GNU 扩展为每个汇编器行生成 stats 调试信息,这可能会使其他调试器崩溃或拒绝读取您的程序。这可能有助于调试汇编代码。目前唯一的 GNU 扩展是汇编时当前工作目录的位置。
为每个汇编器行生成 DWARF2 调试信息。如果调试器可以处理的话,这可能有助于调试汇编代码。注意——此选项仅受部分目标支持,并非全部。
此选项与 --gdwarf-2 选项相同,只是它允许根据 DWARF 规范版本 3 生成额外的调试信息。注意 - 启用此选项并不能保证生成任何额外信息,这样做的选择是基于每个目标的。
此选项与 --gdwarf-2 选项相同,不同之处在于它允许根据 DWARF 规范版本 4 生成额外的调试信息。注意 - 启用此选项并不能保证生成任何额外信息,这样做的选择是基于每个目标的。
此选项与 --gdwarf-2 选项相同,不同之处在于它允许根据 DWARF 规范版本 5 生成额外的调试信息。注意 - 启用此选项并不能保证生成任何额外信息,这样做的选择是基于每个目标的。
不要创建 .debug_line 部分,而是创建一系列 .debug_line.foo 部分,其中 foo 是相应代码部分的名称。例如,名为 .text.func 的代码节会将其矮行号信息放入名为 .debug_line.text.func 的节中。如果代码部分仅称为 .text,则调试行部分仍将仅称为 .debug_line,不带任何后缀。
控制生成哪个版本的 DWARF 通用信息条目 (CIE)。当未指定此标志时,默认值为版本 1,但某些目标可以修改此默认值。 version 的其他可能值为 3 或 4。
这些选项控制 ELF 汇编器是否应生成 GNU Build 属性注释(如果输入源中不存在)。默认值可以通过--enable-generate-build-notes配置选项进行控制。
从 CFI 指令创建 .sframe 部分。
被忽略了。支持与其他汇编器的命令行兼容性。
打印命令行选项的摘要并退出。
打印所有目标特定选项的摘要并退出。
将目录 dir 添加到 .include 指令的搜索列表中。
不要警告签名溢出。
当差异表因长位移而更改时发出警告。
保留(在符号表中)局部符号。这些符号以系统特定的本地标签前缀开头,通常用于 ELF 系统的 .L 或用于传统 a.out 系统的 L。
将汇编器列表的输出数据列的最大宽度(以字为单位)设置为数字。
将汇编程序列表中连续行的输出数据列的最大宽度(以字为单位)设置为 number。
将列表中显示的输入源行的最大宽度设置为 number 个字节。
将单行输入在列表中打印的最大行数设置为 number + 1。
控制汇编器如何处理输入中的多字节字符。默认值(可以通过使用 allow 参数恢复)是允许此类字符而不存在任何抱怨。使用 warn 参数将使汇编器在遇到任何多字节字符时生成警告消息。使用 warn-sym-only 参数只会在使用包含多字节字符的名称定义符号时生成警告。 (引用未定义的符号不会生成警告)。
停止汇编器以填充输出节的末端以与该节对齐。默认情况下是填充这些部分,但这可能会浪费内存限制严格的目标上可能需要的空间。
将对象文件输出命名为as objfile。
将数据部分折叠到文本部分中。
被忽略了。支持与为汇编器和链接器提供相同选项的工具兼容。
尊重节名称中的替换序列。
针对无效的 ELF .size 指令发出错误或警告。
打印程序集使用的最大空间(以字节为单位)和总时间(以秒为单位)。
从传出符号表中删除局部绝对符号。
打印as版本。
打印as版本并退出。
抑制警告消息。
将警告视为错误。
不要抑制警告消息或将其视为错误。
被忽略了。
被忽略了。
即使发生错误也生成目标文件。
标准输入或要汇编的源文件。
当为 ARM 架构 (AArch64) 的 64 位模式配置时,以下选项可用。
此选项指定应将汇编器生成的输出标记为针对大端处理器进行编码。
此选项指定应将汇编器生成的输出标记为针对小端处理器进行编码。
指定源代码使用哪个 ABI。识别的参数为:ilp32和lp64,分别决定生成的目标文件为ELF32和ELF64格式。默认值为 lp64。
该选项指定目标处理器。如果尝试汇编不会在目标处理器上执行的指令,汇编器将发出错误消息。可识别以下处理器名称:cortex-a34、cortex-a35、cortex-a53、cortex-a55 、cortex-a57、cortex-a65、cortex-a65ae、cortex-a72、cortex- a73、cortex-a75、cortex-a76、cortex-a76ae、cortex-a77、 cortex-a78、cortex-a78ae、cortex-a78c、cortex-a510、cortex-a710 、ares、exynos-m1、falkor、neoverse-n1、neoverse- n2、。neoverse-e1、neoverse-v1、qdf24xx、saphira、thunderx 、vulcan、xgene1、xgene2、cortex-r82、cortex-x1代码>和<代码>cortex-x2
特殊名称all可用于允许汇编器接受对任何支持的处理器有效的指令,包括所有可选扩展。除了基本指令集之外,还可以告诉汇编器接受或限制扩展处理器的各种扩展助记符。如果特定处理器的某些实现可以具有扩展,那么这些扩展将自动启用。因此,您通常不必指定任何附加扩展名。
该选项指定目标架构。如果尝试汇编不会在目标体系结构上执行的指令,汇编器将发出错误消息。可识别以下架构名称:armv8-a、armv8.1-a、armv8.2-a、armv8.3 -a,armv8.4-aarmv8.5-a,armv8.6-a,armv8。 7-a、armv8.8-a、armv8-r、armv9-a、armv9.1- a、armv9.2-a 和 armv9.3-a。如果同时指定了-mcpu和-march,汇编器将使用-mcpu的设置。如果两者均未指定,汇编器将默认为-mcpu=all。可以使用与-mcpu选项相同的指令集扩展选项来扩展架构选项。与-mcpu不同,扩展并不总是默认启用,
此选项启用 AArch64 Gas 的详细错误消息。默认情况下启用此选项。
此选项禁用 AArch64 Gas 中的详细错误消息。
当为 Alpha 处理器配置时,以下选项可用。
该选项指定目标处理器。如果尝试汇编一条不会在目标处理器上执行的指令,汇编器可能会将该指令扩展为宏或发出错误消息。此选项相当于 .arch 指令。可识别以下处理器名称:21064、21064a、21066、21068、21164 >、21164a、21164pc、21264、21264a、21264b、 ev4、ev5、lca45、ev5、ev56、pca56 、ev6、ev67、ev68。特殊名称all可用于允许汇编器接受对任何Alpha处理器有效的指令。为了支持 OSF/1 中关于 .arch 的现有实践,以及 MILO(Linux ARC 引导加载程序)中的现有实践,编号的处理器名称(例如 21064)启用处理器特定的 PALcode 指令,而 electro-vlasic 名称(例如 ev4)则不启用。
启用或禁用为 Staps 指令和过程描述符生成 .mdebug 封装。默认情况下,当看到第一个 Staps 指令时,自动启用 .mdebug。
此选项强制将所有重定位放入目标文件中,而不是节省空间并在汇编时解决某些重定位。请注意,此选项不会将所有符号算术传播到目标文件中,因为并非所有符号算术都可以表示。然而,该选项在特定应用中仍然有用。
在汇编时和链接时启用或禁用过程调用的优化。这些选项仅适用于 VMS 目标,并且 -replace 是默认值。请参阅 OpenVMS 链接器实用程序手册的第 1.4.1 节。
当编译器生成调试信息时使用该选项。当gcc使用mips-tfile为ECOFF生成调试信息时,必须将本地标签传递到目标文件。否则该选项无效。
大于size的局部公共符号放置在.bss中,而较小的符号放置在.sbss中。
为了向后兼容,这些选项将被忽略。
当为 ARC 处理器配置时,以下选项可用。
此选项选择核心处理器变体。
选择大端 (-EB) 或小端 (-EL) 输出。
启用代码密度扩展指令。
当为 ARM 处理器系列配置时,以下选项可用。
指定哪个 ARM 处理器变体是目标。
指定目标使用哪种 ARM 架构变体。
选择哪个浮点架构是目标。
选择正在使用的浮点 ABI。
启用仅 Thumb 指令解码。
选择正在使用的过程调用约定。
选择大端 (-EB) 或小端 (-EL) 输出。
指定生成的代码考虑了 Thumb 和 ARM 代码之间的互操作。
打开 CodeComposer Studio 程序集语法兼容模式。
指定已生成 PIC 代码。
当为 Blackfin 处理器系列进行配置时,以下选项可用。
该选项指定目标处理器。汇编程序中不使用可选的sirevision。正是在这里,GCC 可以轻松地传递其 -mcpu= 选项。如果尝试汇编不会在目标处理器上执行的指令,汇编器将发出错误消息。可识别以下处理器名称:bf504、bf506、bf512、bf514、bf516 >、bf518、bf522、bf523、bf524、bf525、 bf526、bf527、bf531、bf532、bf533、bf534 、bf535(尚未实现)、bf536、bf537、bf538、bf539 、bf542、bf542m、bf544、bf544m、bf547、bf547m ,bf548,bf548m,bf549,bf549m,bf561,和bf592。
为 FDPIC ABI 进行组装。
禁用-mfdpic。
当为 Linux 内核 BPF 处理器系列配置时,以下选项可用。
@chapter BPF 相关功能
该选项指定汇编器应发出大端 eBPF。
该选项指定汇编器应发出小端 eBPF。
请注意,如果在命令行中未指定字节序选项,则使用主机字节序。有关 CRIS 特定选项的文档,请参阅信息页面。
当为 C-SKY 处理器系列配置时,以下选项可用。
为架构archname进行组装。 --help 选项列出了 archname 的有效值。
为体系结构 cpuname 进行组装。 --help 选项列出了 cpuname 的有效值。
生成小端输出。
生成大端输出。
生成与位置无关的代码。
启用/禁用短分支指令 jbf、jbt 和 jbr 到 jmpi 的转换。此选项仅适用于 V2 处理器。它在不支持 jmpi 指令的 CK801 和 CK802 目标上被忽略,并且默认情况下对其他处理器启用。
将 bsr 指令的 R_CKCORE_PCREL_IMM26BY2 重定位传递给链接器。此选项仅适用于裸机 C-SKY V2 ELF 目标,默认情况下处于启用状态。它不能用在将动态链接到共享库的代码中。
启用/禁用 jbsr 指令到 bsr 的转换。对于 CK801/CK802 目标,此选项始终启用(并且忽略 -mno-force2bsr)。当 -mbranch-stub 生效时,它也始终处于启用状态。
启用/禁用 jsri 指令到 bsr 的转换。默认情况下启用此选项。
启用/禁用将 lrw 指令转换为 movih/ori 对。
启用/禁用扩展 lrw 指令。对于 CK800 系列处理器,此选项默认启用。
在每个函数之后启用/禁用文字池的放置。
启用/禁用无条件分支后文字池的放置。默认情况下启用此选项。
启用/禁用中断堆栈指令。该选项在 CK801、CK802 和 CK802 处理器上默认启用。
以下选项明确启用某些可选指令。这些功能还可以通过使用 -mcpu= 指定支持它的处理器来隐式启用。
启用硬浮点指令。
启用多处理器指令。
启用协处理器指令。
启用缓存预取指令。
启用C-SKY安全指令。
启用中天信任指令。
启用 DSP 指令。
启用增强型 DSP 指令。
启用矢量 DSP 指令。
当为 Epiphany 处理器配置时,以下选项可用。
指定允许使用 32 位和 16 位指令。这是默认行为。
将允许的指令限制为仅 16 位集。
当为 H8/300 处理器配置时,以下选项可用。 @chapter H8/300 相关功能
瑞萨 H8/300 版本的 as 有一个与机器相关的选项:
除了 0x00 样式之外,还支持 H'00 样式的十六进制常量。
设置 H8300 机器型号。可识别以下机器名称:h8300h、h8300hn、h8300s、h8300sn、h8300sx > 和 h8300sxn。
当为 i386 处理器配置时,以下选项可用。
选择字大小,32 位或 64 位。 --32 表示 Intel i386 架构,而 --x32 和 --64 表示 AMD x86-64 架构(32 位或 64 位)分别为位字大小。这些选项仅适用于 ELF 对象文件格式,并且要求已包含必要的 BFD 支持(在 32 位平台上,您必须添加 --enable-64-bit-bfd 来配置启用 64 位使用和使用 x86-64 作为目标平台)。
默认情况下,x86 GAS 将用于在代码段内对齐的多个 nop 指令替换为多字节 nop 指令,例如 leal 0(%esi,1),%esi。如果将单字节 nop (0x90) 显式指定为对齐的填充字节,则此开关将禁用优化。
在 SVR4 派生平台上,字符 / 被视为注释字符,这意味着它不能在表达式中使用。 --divide 选项将 / 转换为普通字符。这不会在开始注释的行的开头禁用 /,也不会影响使用 # 开始注释。
该选项指定目标处理器。如果尝试汇编不会在目标处理器上执行的指令,汇编器将发出错误消息。可识别以下处理器名称:i8086、i186、i286、i386、i486 >、i586、i686、pentium、pentiumpro、pentiumii、 pentiumiii、pentium4、prescott、nocona、core、core2 、corei7、iamcu、k6、k6_2、athlon、opteron 、k8、amdfam10、bdver1、bdver2、bdver3、 bdver4、znver1、znver2、znver3、znver4、btver1、btver2、generic32 和 generic64。除了基本指令集之外,还可以告诉汇编器接受各种扩展助记符。例如,-march=i686+sse4+vmx 使用 sse4 和 vmx 扩展了 i686。
目前支持以下扩展:8087、287、387、687、cmov >、fxsr、mmx、sse、sse2、sse3、 sse4a、ssse3、sse4.1、sse4.2、sse4、avx 、avx2、adx、rdseed、prfchw、smap、 mpx、sha、rdpid、ptwrite、cet、gfni、vaes、vpclmulqdq、prefetchwt1、clflushopt、se1、<代码>clwb ,<代码>movdiri,<代码>movdir64b,<代码>enqcmd,<代码>序列化,<代码>tsxldtrk代码>、<代码>kl、<代码>widekl、<代码>hreset、<代码>avx512f、<代码>avx512cd、<代码>avx512er、avx512pf、avx512vl、avx512bw、avx512dq、avx512ifma >、avx512vbmi、avx512_4fmaps、avx512_4vnniw、avx512_vpopcntdq、avx512_vbmi2、 avx512_vnni、avx512_bitalg、avx512_vp2intersect、tdx、avx512_bf16、avx_vnni 、avx512_fp16、prefetchi、avx_ifma、avx_vnni_int8、cmpccxadd、wrmsrns 、msrlist、avx_ne_convert、rao_int、amx_int8、amx_bf16、 amx_fp16、amx_tile、vmx、vmfunc、smx、xsave /code>、xsaveopt、xsavec、xsaves、aes、pclmul、<代码>fsgsbase,<代码>rdrnd,<代码>f16c,<代码>bmi2,<代码>fma,<代码>movbe、<代码>ept、<代码>lzcnt、<代码>popcnt、<代码>hle、<代码>rtm、<代码>tsx、invpcid、clflush、mwaitx、clzero、wbnoinvd >、pconfig、waitpkg、uintr、cldemote、rdpru、 mcommit、sev_es、lwp、fma4、xop、cx16 、系统调用、rdtscp、3dnow、3dnowa、sse4a、sse5 、snp、invlpgb、tlbsync、svme 和 挂锁。
请注意,这些扩展助记符可以以 no 为前缀来撤销相应的(以及任何依赖的)功能。当 .arch 指令与 -march 一起使用时,.arch 指令将优先。
该选项指定要优化的处理器。与-march选项结合使用时,只会生成-march选项指定的处理器的指令。有效的CPU值与-march=CPU的处理器列表相同。
此选项指定汇编器应使用 VEX 前缀对 SSE 指令进行编码。
此选项指定汇编器应将对齐向量移动编码为未对齐向量移动。
这些选项控制汇编器是否应检查 SSE 指令。 -msse-check=none 将使汇编器不检查 SSE 指令,这是默认值。 -msse-check=警告将使汇编器对任何 SSE 指令发出警告。 -msse-check=error 将使汇编器对任何 SSE 指令发出错误。
这些选项控制汇编器应如何编码标量 AVX 指令。 -mavxscalar=128 将以 128 位向量长度(默认值)对标量 AVX 指令进行编码。 -mavxscalar=256 将以 256 位向量长度编码标量 AVX 指令。警告:请勿将其用于生产代码 - 由于 CPU 勘误,生成的代码可能无法在某些型号上运行。
这些选项控制汇编器应如何编码 VEX.W 忽略 (WIG) VEX 指令。 -mvexwig=0 将使用 vex.w=0(默认值)对 WIG VEX 指令进行编码。 -mvexwig=1 将使用 vex.w=1 编码 WIG EVEX 指令。警告:请勿将其用于生产代码 - 由于 CPU 勘误,生成的代码可能不会在某些模型上工作。
这些选项控制汇编器应如何编码忽略长度 (LIG) EVEX 指令。 -mevexlig=128 将以 128 位向量长度(默认值)对 LIG EVEX 指令进行编码。 -mevexlig=256 和 -mevexlig=512 将分别以 256 位和 512 位向量长度编码 LIG EVEX 指令。
这些选项控制汇编器应如何编码 w 忽略 (WIG) EVEX 指令。 -mevexwig=0 将使用 evex.w=0(默认值)对 WIG EVEX 指令进行编码。 -mevexwig=1 将使用 evex.w=1 编码 WIG EVEX 指令。
该选项指定匹配指令的指令助记符。 .att_mnemonic 和 .intel_mnemonic 指令将优先。
该选项指定处理指令时的指令语法。 .att_syntax 和 .intel_syntax 指令将优先。
此选项指定寄存器不需要 % 前缀。 .att_syntax 和 .intel_syntax 指令将优先。
此选项强制汇编器向所有分支添加 BND 前缀,即使源代码中未明确指定此类前缀。
在 ELF 目标上,汇编器通常会针对具有默认可见性的定义的非弱全局分支目标优化非 PLT 重定位。 -mshared 选项告诉汇编器生成可以进入共享库的代码,其中所有具有默认可见性的非弱全局分支目标都可以被抢占。生成的代码稍大一些。该选项仅影响分支指令的处理。
在 PE/COFF 目标上,此选项强制使用大对象文件格式,该格式允许超过 32768 个部分。
这些选项控制汇编器应如何编码锁定前缀。此选项旨在作为在锁定前缀上失败的处理器的解决方法。此选项只能安全地用于单核、单线程计算机-momit-lock-prefix=yes将省略所有锁定前缀。 -momit-lock-prefix=no 将照常编码锁定前缀,这是默认值。
这些选项控制汇编器如何编码 lfence、mfence 和 sfence。 -mfence-as-lock-add=yes 将把 lfence、mfence 和 sfence 编码为 lock addl $0x0, (%rsp ) 在 64 位模式下,lock addl $0x0, (%esp) 在 32 位模式下。 -mfence-as-lock-add=no 将照常编码 lfence、mfence 和 sfence,这是默认值。
这些选项控制汇编器是否应在 32 位模式下生成松弛重定位 R_386_GOT32X,或在 64 位模式下生成 R_X86_64_GOTPCRELX 和 R_X86_64_REX_GOTPCRELX。 -mrelax-relocations=yes 将生成松弛重定位。 -mrelax-relocations=no 不会生成松弛重定位。默认值可以通过配置选项--enable-x86-relax-relocations控制。
该选项控制汇编器如何将分支与段前缀或 NOP 对齐。 NUM 必须是 2 的幂。它应该是 0 或不少于 16。分支将在 NUM 字节边界内对齐。 -malign-branch-boundary=0(默认值)不对齐分支。
此选项指定要对齐的分支类型。 TYPE是jcc的组合,它对齐条件跳转,fused,它对齐融合条件跳转,jmp,它对齐无条件跳转,call 对齐调用,ret 对齐 rets,indirect 对齐间接跳转和调用。默认为-malign-branch=jcc+fused+jmp。
此选项指定指令上用于对齐分支的最大前缀数。 NUM 应介于 0 和 5 之间。默认 NUM 为 5。
此选项将 32 字节边界内的条件跳转、融合条件跳转和无条件跳转与指令上最多 5 个段前缀对齐。它相当于 -malign-branch-boundary=32 -malign-branch=jcc+fused+jmp -malign-branch-prefix-size=5 。默认情况下不对齐分支。
这些选项控制汇编器是否应在加载指令后生成 lfence。 -mlfence-after-load=yes 将生成 lfence。 -mlfence-after-load=no 不会生成 lfence,这是默认值。
这些选项控制汇编器是否应在间接近分支指令之前生成 lfence。 -mlfence-before-indirect-branch=all 将在通过寄存器的间接近分支之前生成 lfence,并在通过内存的间接近分支之前发出警告。当没有显式 -mlfence-before-ret= 时,它还会隐式设置 -mlfence-before-ret=shl。 -mlfence-before-indirect-branch=register 将通过寄存器在间接近分支之前生成 lfence。 -mlfence-before-indirect-branch=内存将在通过内存进行间接近分支之前发出警告。 -mlfence-before-indirect-branch=none 不会生成 lfence 也不会发出警告,这是默认设置。请注意,在通过 -mlfence-after-load=yes 寄存器进行间接近分支之前,不会生成 lfence,因为 lfence 将在加载分支目标寄存器之后生成。
这些选项控制汇编器是否应在 ret 之前生成 lfence。 -mlfence-before-ret=or 将使用 lfence 生成生成或指令。 -mlfence-before-ret=shl/yes 将使用 lfence 生成 shl 指令。 -mlfence-before-ret=not 将生成 not lfence 指令。 -mlfence-before-ret=none 不会生成 lfence,这是默认值。
这些选项控制汇编器是否应生成 GNU_PROPERTY_X86_ISA_1_USED 和 GNU_PROPERTY_X86_FEATURE_2_USED GNU 属性注释。默认值可以通过 --enable-x86-used-note 配置选项进行控制。
这些选项控制汇编器应如何编码仅 SAE EVEX 指令。 -mevexrcig=rne 会将 EVEX 指令的 RC 位编码为 00,这是默认值。 -mevexrcig=rd、-mevexrcig=ru 和 -mevexrcig=rz 将分别使用 01、10 和 11 RC 位对仅 SAE EVEX 指令进行编码。
此选项指定汇编器应仅接受 64 位模式下的 AMD64 或 Intel64 ISA。默认值是接受通用、仅 Intel64 和 AMD64 ISA。
以更小的指令大小优化指令编码。 -O 和 -O1 将具有 64 位立即数的 64 位寄存器加载指令编码为具有 31 位或 32 位立即数的 32 位寄存器加载指令,编码 64位寄存器清除指令 与 32 位寄存器清除指令,编码 256 位/512 位 VEX/EVEX 向量寄存器清除指令 与 128 位 VEX 向量寄存器清除指令,编码 128 位/256 位 EVEX 向量寄存器加载/store 指令与 VEX 向量寄存器加载/存储指令,并使用 128 位/256 位 VEX 打包整数逻辑编码 128 位/256 位 EVEX 打包整数逻辑指令。 -O2 包括 -O1 优化,并使用 128 位 EVEX 向量寄存器清除指令对 256 位/512 位 EVEX 向量寄存器清除指令进行编码。在 64 位模式下,如果允许使用 2 字节 VEX 前缀形式而不是 3 字节前缀形式,则具有可交换源操作数的 VEX 编码指令也将交换其源操作数。某些形式的 AND 以及具有指定两次相同(寄存器)操作数的 OR 也将更改为 TEST。 -Os 包括 -O2 优化以及将带有立即数的 16 位、32 位和 64 位寄存器测试编码为带有立即数的 8 位寄存器测试。 -O0 关闭此优化。
当为 Ubicom IP2K 系列配置时,以下选项可用。
指定允许扩展IP2022指令。
恢复默认行为,将允许的指令限制为基本的 IP2022 指令。
当为 Renesas M32C 和 M16C 处理器进行配置时,以下选项可用。
汇编 M32C 指令。
汇编M16C指令(默认)。
启用对链接时间放宽的支持。
除了 0x00 样式之外,还支持 H'00 样式的十六进制常量。
当为 Renesas M32R(以前称为 Mitsubishi M32R)系列进行配置时,以下选项可用。
指定 M32R 系列中的哪个处理器是目标。默认值通常是 M32R,但此选项将其更改为 M32RX。
当遇到有问题的并行构造时生成警告消息。
当遇到有问题的并行结构时,不要生成警告消息。
当为 Motorola 68000 系列配置时,以下选项可用。
将未定义符号的引用缩短为一个单词而不是两个。
指定 68000 系列中的哪个处理器是目标。默认值通常是 68020,但可以在配置时更改。
目标机器有(或没有)浮点协处理器。默认情况下假定协处理器为 68020、68030 和 cpu32。尽管基本 68000 与 68881 不兼容,但可以指定两者的组合,因为可以使用主处理器来模拟协处理器指令。
目标机器有(或没有)内存管理单元协处理器。默认情况下假定 MMU 用于 68020 及更高版本。
当为 Altera Nios II 处理器配置时,以下选项可用。
如果可能,用 PC 相关的 jmp 序列替换已识别的超出范围的分支。生成的代码序列适合用于位置无关代码,但由于序列的长度,扩展的分支范围存在实际限制。此选项是默认选项。
将无法确定在范围内的分支指令和所有调用指令分别替换为 jmp 和 callr 序列。此选项针对目标符号生成绝对重定位,并且不适用于与位置无关的代码。
不要替换任何分支或呼叫。
生成大端输出。
生成小端输出。这是默认设置。
该选项指定目标架构。如果尝试汇编不会在目标体系结构上执行的指令,汇编器会发出错误消息。可以识别以下架构名称:r1、r2。默认值为r1。
当为 PRU 处理器配置 as 时,以下选项可用。
假设 LD 将通过检查表达式的高 16 位来优化 LDI32 指令。如果它们全为零,则 LD 会将 LDI32 指令缩短为单个 LDI。在这种情况下,as 将为 diff 表达式输出 DIFF 重定位。
假设 LD 不会优化 LDI32 指令。因此,不会发出 DIFF 重定位。
如果标签名称与寄存器名称匹配,则不发出警告。通常汇编程序员会希望发出此警告。 C 编译器可能想要关闭此功能。
当为 MIPS 处理器配置时,以下选项可用。
此选项设置可以使用 gp 寄存器隐式引用的对象的最大大小。它仅适用于使用 ECOFF 格式的目标,例如运行 Ultrix 的 DECstation。默认值为 8。
生成大端格式输出。
生成小端格式输出。
生成特定 MIPS 指令集架构级别的代码。 -mips1 是 -march=r3000 的别名,-mips2 是 -march=r6000 的别名, -mips3 是 -march=r4000 的别名,-mips4 是 -march=r8000 的别名。 -mips5、-mips32、-mips32r2、-mips32r3、-mips32r5、 -mips32r6、-mips64、-mips64r2、-mips64r3、-mips64r5、和 -mips64r6 对应于通用 MIPS V、MIPS32、MIPS32 Release 2、MIPS32 Release 3、MIPS32 Release 5、MIPS32 Release 6、MIPS64、MIPS64 Release 2、MIPS64 Release 3、MIPS64 Release 5 和 MIPS64分别发布6个ISA处理器。
为特定 MIPS CPU 生成代码。
针对特定 MIPS CPU 进行调度和调整。
如果对 mfhi 或 mflo 指令的目标寄存器的读取发生在以下两条指令中,则导致插入 nops。
如果 dmult 或 dmultu 指令后面跟着加载指令,则导致插入 nop。
不要尝试将前面的指令调度到位于 6 个或更少指令的短循环末尾的分支指令的延迟槽中,并始终在那里调度一个 nop 指令。由于 R5900 芯片中的硬件错误,某些条件下的短循环错误会导致循环仅执行一次或两次。
使 Stas 风格的调试输出进入 ECOFF 风格的 .mdebug 部分,而不是标准 ELF .stabs 部分。
控制 .pdr 部分的生成。
寄存器大小通常是从 ISA 和 ABI 推断出来的,但这些标志强制某些寄存器组始终被视为 32 位宽。 -mgp32 控制通用寄存器的大小,-mfp32 控制浮点寄存器的大小。
寄存器大小通常是从 ISA 和 ABI 推断出来的,但这些标志强制某些寄存器组始终被视为 64 位宽。 -mgp64 控制通用寄存器的大小,-mfp64 控制浮点寄存器的大小。
寄存器大小通常是根据 ISA 和 ABI 推断的,但将此标志与 -mabi=32 结合使用可启用 ABI 变体,该变体将与 32 或 64 位宽的浮点寄存器一起正确运行。
当 ISA 支持时,允许在奇数单精度寄存器上使用浮点运算。 -mfpxx 表示 -mno-odd-spreg,否则默认为 -modd-spreg。
为 MIPS 16 处理器生成代码。这相当于将 .module mips16 放在汇编文件的开头。 -no-mips16 关闭此选项。
允许在 MIPS16 模式下使用 MIPS16e2 指令。这相当于将 .module mips16e2 放在汇编文件的开头。 -mno-mips16e2 关闭此选项。
为 microMIPS 处理器生成代码。这相当于将 .module micromips 放在汇编文件的开头。 -mno-micromips 关闭此选项。这相当于将 .module nomicromips 放在汇编文件的开头。
启用对 MIPS32 指令集的 SmartMIPS 扩展。这相当于将 .module smartmips 放在汇编文件的开头。 -mno-smartmips 关闭此选项。
生成 MIPS-3D 应用程序特定扩展的代码。这告诉汇编器接受 MIPS-3D 指令。 -no-mips3d 关闭此选项。
生成 MDMX 应用程序特定扩展的代码。这告诉汇编器接受 MDMX 指令。 -no-mdmx 关闭此选项。
为 DSP Release 1 应用特定扩展生成代码。这告诉汇编器接受 DSP Release 1 指令。 -mno-dsp 关闭此选项。
为 DSP Release 2 应用特定扩展生成代码。此选项意味着-mdsp。这告诉汇编器接受 DSP Release 2 指令。 -mno-dspr2 关闭此选项。
为 DSP Release 3 应用特定扩展生成代码。该选项意味着-mdsp和-mdspr2。这告诉汇编器接受 DSP Release 3 指令。 -mno-dspr3 关闭此选项。
为 MIPS SIMD 架构扩展生成代码。这告诉汇编器接受 MSA 指令。 -mno-msa 关闭此选项。
为 MIPS 扩展物理地址 (XPA) 扩展生成代码。这告诉汇编器接受 XPA 指令。 -mno-xpa 关闭此选项。
为 MT 应用程序特定扩展生成代码。这告诉汇编器接受 MT 指令。 -mno-mt 关闭此选项。
为 MCU 应用程序特定扩展生成代码。这告诉汇编器接受 MCU 指令。 -mno-mcu 关闭此选项。
生成 MIPS 循环冗余校验 (CRC) 应用程序特定扩展的代码。这告诉汇编器接受 CRC 指令。 -mno-crc 关闭此选项。
为全局 INValidate (GINV) 应用程序特定扩展生成代码。这告诉汇编器接受 GINV 指令。 -mno-ginv 关闭此选项。
为龙芯多媒体扩展指令(MMI)应用程序特定扩展生成代码。这告诉汇编器接受 MMI 指令。 -mno-loongson-mmi 关闭此选项。
为龙芯内容地址存储器(CAM)指令生成代码。这告诉汇编器接受龙芯CAM指令。 -mno-loongson-cam 关闭此选项。
生成龙芯EXTensions (EXT) 指令的代码。这告诉汇编器接受龙芯EXT指令。 -mno-loongson-ext 关闭此选项。
生成龙芯EXTensions R2(EXT2)指令的代码。此选项意味着-mloongson-ext。这告诉汇编器接受龙芯EXT2指令。 -mno-loongson-ext2 关闭此选项。
为 microMIPS 处理器生成代码时仅使用 32 位指令编码。该选项禁止使用任何 16 位指令。这相当于将 .set insn32 放在汇编文件的开头。 -mno-insn32 关闭此选项。这相当于将 .set noinsn32 放在汇编文件的开头。默认情况下选择-mno-insn32,允许使用所有指令。
--no-construct-floats 选项通过将值的两半加载到构成双宽度寄存器的两个单宽度浮点寄存器中来禁用双宽度浮点常量的构造。默认情况下,选择--construct-floats,允许构造这些浮点常量。
--relax-branch 选项可以松弛超出范围的分支。默认情况下,选择--no-relax-branch,这会导致任何超出范围的分支产生错误。
忽略 ISA 模式之间无效转换的分支检查。分支的语义不提供 ISA 模式切换,因此在大多数情况下,分支已编码的 ISA 模式必须与分支目标标签的 ISA 模式相同。因此,GAS 实施了检查,以在分支汇编中验证两种 ISA 模式是否匹配。 -mignore-branch-isa 禁用这些检查。默认情况下,选择-mno-ignore-branch-isa,导致任何需要在 ISA 模式之间转换的无效分支产生错误。
选择 IEEE 754-2008 (-mnan=2008) 或旧版 (-mnan=legacy) NaN 编码格式。后者是默认值。
此选项以前用于在支持 ELF 和 ECOFF 输出的目标(例如 IRIX 5)上切换 ELF 和 ECOFF 输出。 MIPS ECOFF 支持在 GAS 2.24 中被删除,因此该选项现在没有什么用处。保留它是为了向后兼容。可用的配置名称为:mipself、mipslelf 和 mipsbelf。现在选择 mipself 没有任何效果,因为输出始终是 ELF。 mipslelf 和 mipsbelf 分别选择小端和大端输出,但 -EL 和 -EB 现在是而是首选选项。
as 忽略此选项。它被接受是因为与本机工具兼容。
控制如何处理乘法溢出和除零。 --trap 或 --no-break (它们是同义词)捕获异常陷阱(并且仅适用于指令集架构级别 2 及更高级别); --break 或 --no-trap (也是同义词,也是默认值)采用中断异常。
使用此选项时,as 每次从宏生成 nop 指令时都会发出警告。
当为 LoongArch 处理器配置时,以下选项可用。
生成与位置无关的代码
不生成与位置无关的代码(默认)
当为元处理器配置时,以下选项可用。
生成 Meta 1.1 的代码。
生成 Meta 1.2 的代码。
生成 Meta 2.1 的代码。
允许代码使用 Meta 2.1 的 FPU 硬件。
有关 MMIX 特定选项的文档,请参阅信息页。
当为 NDS32 处理器配置时,以下选项可用。
优化性能。
优化空间。
产生小端数据输出。
产生小端数据输出。
生成图片。
抑制此文件的 fp-as-gp 松弛。
背靠背分支优化。
抑制该文件的所有松弛。
组装架构<架构名称>,可以是 v3、v3j、v3m、v3f、v3s、v2、v2j、v2f、v2s。
组装基线
指定 FPU 配置。
指定 abi 版本
启用/禁用乘法指令支持。
启用/禁用除法指令支持。
启用/禁用 16 位扩展
启用/禁用 d0/d1 寄存器
启用/禁用性能扩展
启用/禁用性能扩展 2
启用/禁用字符串扩展
启用/禁用精简寄存器配置 (GPR16) 选项
启用/禁用音频 ISA 扩展
启用/禁用 FPU SP 扩展
启用/禁用 FPU DP 扩展
启用/禁用 FPU 融合乘加指令
开启所有扩展和指令支持
当为 PowerPC 处理器配置时,以下选项可用。
生成 ELF32 或 XCOFF32。
生成 ELF64 或 XCOFF64。
在 ELF 标志中设置 EF_PPC_RELOCATABLE_LIB。
生成 POWER/2 (RIOS2) 的代码。
生成 POWER (RIOS1) 代码
生成 PowerPC 601 的代码。
生成 PowerPC 603/604 的代码。
生成 PowerPC 403/405 的代码。
生成 PowerPC 440.BookE 和一些 405 指令的代码。
生成 PowerPC 464 的代码。
生成 PowerPC 476 的代码。
生成 PowerPC 7400/7410/7450/7455 的代码。
为 PowerPC 750CL/Gekko/Broadway 生成代码。
生成 PowerPC 821/850/860 的代码。
生成 PowerPC 620/625/630 的代码。
生成 e200 变体、带 LSP 的 e200z2、带 SPE 的 e200z4 的代码。
为 PowerPC e300 系列生成代码。
为 Motorola e500 核心复合体生成代码。
为 Freescale e500mc 核心复合体生成代码。
为 Freescale e500mc64 核心复合体生成代码。
为 Freescale e5500 核心复合体生成代码。
为 Freescale e6500 核心复合体生成代码。
使能LSP指令。 (禁用 SPE 和 SPE2。)
为 Motorola SPE 指令生成代码。 (禁用 LSP。)
为 Freescale SPE2 指令生成代码。 (禁用 LSP。)
为 AppliedMicro Titan 核心复合体生成代码。
为 PowerPC 64 生成代码,包括桥接插件。
生成 32 位 BookE 的代码。
生成 A2 架构的代码。
使用 AltiVec 指令为处理器生成代码。
为 Freescale PowerPC VLE 指令生成代码。
使用矢量标量 (VSX) 指令为处理器生成代码。
使用硬件事务内存指令为处理器生成代码。
生成 Power4 架构的代码。
生成 Power5 架构的代码。
生成 Power6 架构的代码。
生成 Power7 架构的代码。
生成 Power8 架构的代码。
生成 Power9 架构的代码。
生成 Power10 架构的代码。
为“未来”架构生成代码。
为 Cell 宽带引擎架构生成代码。
生成Power/PowerPC通用指令代码。
为任何架构(PWR/PWRX/PPC)生成代码。
允许寄存器使用符号名称。
不允许寄存器使用符号名称。
支持 GCC 的 -mrelocatable 选项。
支持 GCC 的 -mrelocatable-lib 选项。
设置 ELF 标志中的 PPC_EMB 位。
为小端机生成代码。
为大端机器生成代码。
生成 Solaris 代码。
不要为 Solaris 生成代码。
如果对齐指令插入超过 count 个 nop,请在开头放置一个分支以跳过 nops 的执行。
当为 RISC-V 处理器配置时,以下选项可用。
生成与位置无关的代码
不生成与位置无关的代码(默认)
选择 ISA 指定的基本 isa。例如 -march=rv32ima。如果未设置此选项和体系结构属性,则汇编器将检查默认配置设置 --with-arch=ISA。
选择默认的 isa 规范版本。如果 -march 未设置 ISA 版本,则汇编器将帮助根据默认选择的规范设置版本。如果未设置此选项,则汇编器将检查默认配置设置 --with-isa-spec=ISAspec。
选择特权规格版本。我们可以根据选择的规范来决定CSR是否有效。如果未设置此选项和权限属性,则汇编器将检查默认配置设置 --with-priv-spec=PRIVspec。
选择 ABI,可以是 ilp32 或 lp64,可选地后跟 f、d 或 q 以指示单精度、双精度或四精度浮点调用约定,或者无以指示软浮点调用约定。另外,ilp32 后面可以选择跟 e 来指示 RVE ABI,它始终是软浮点。
利用链接器松弛来减少实现符号地址所需的指令数量。 (默认)
不要进行链接器松弛。
如果未设置 .attribute 指令,则生成 riscv elf 属性部分的默认内容。该部分用于记录链接器或运行时加载器检查兼容性所需的信息。此信息包括 ISA 字符串、堆栈对齐要求、未对齐的内存访问以及特权规范的主要版本、次要版本和修订版本。
如果未设置 .attribute 指令,则不要生成默认的 riscv elf 属性部分。
启用对 ISA 相关 CRS 和只读 CSR 的 CSR 检查。依赖于 ISA 的 CSR 仅在设置了特定 ISA 时才有效。只读CSR 不能由CSR 指令写入。
不进行 CSR 检查。
为小端机生成代码。
为大端机器生成代码。
有关 RX 特定选项的文档,请参阅信息页。
当为 s390 处理器系列配置时,以下选项可用。
选择字大小,31/32 位或 64 位。
选择架构模式,企业系统架构 (esa) 或 z/架构模式 (zarch)。
指定目标 s390 处理器型号:g5(或 arch3)、g6、z900(或 z900) >arch5)、z990(或arch6)、z9-109、z9-ec(或 arch7)、z10(或 arch8)、z196(或 arch9) 、zEC12(或arch10)、z13(或arch11)、z14(或 arch12)、z15(或 arch13)或 z16(或 arch14 )。
允许或禁止寄存器的符号名称。
每当基址或索引寄存器的操作数已指定但计算结果为零时发出警告。
当为 TMS320C6000 处理器配置时,以下选项可用。
启用(仅)来自架构arch的指令。默认情况下,允许所有指令。接受以下 arch 值:c62x、c64x、c64x+、c67x 、c67x+、c674x。
-mdsbt 选项使汇编器生成值为 1 的 Tag_ABI_DSBT 属性,表示代码正在使用 DSBT 寻址。默认的 -mno-dsbt 选项使标记的值为 0,表示代码不使用 DSBT 寻址。如果不同类型(DSBT 和非 DSBT)的对象链接在一起,链接器将发出警告。
-mpid= 选项使汇编器生成 Tag_ABI_PID 属性,其值指示代码使用的数据寻址形式。 -mpid=no(默认值)表示位置相关的数据寻址,-mpid=near 表示使用近 DP 寻址的 GOT 访问的位置无关寻址, -mpid=far 表示使用远 DP 寻址的 GOT 访问的位置无关寻址。如果使用此选项的不同设置构建的对象链接在一起,链接器将发出警告。
-mpic 选项使汇编器生成值为 1 的 Tag_ABI_PIC 属性,表示代码使用与位置无关的代码寻址,-mno -pic 选项(默认值)使标记的值为 0,表示位置相关的代码寻址。如果不同类型(位置相关和位置无关)的对象链接在一起,链接器将发出警告。
生成指定字节顺序的代码。默认为小端字节序。
当为 TILE-Gx 处理器配置时,以下选项可用。
选择字大小,32 位或 64 位。
选择字节序,大字节序 (-EB) 或小字节序 (-EL)。
当为 Visium 处理器配置时,以下选项可用。
该选项指定目标架构。如果尝试汇编不会在目标体系结构上执行的指令,汇编器将发出错误消息。可以识别以下名称: mcm24 mcm gr5 gr6
当为 Xtensa 处理器配置时,以下选项可用。
控制文字池的处理。默认值为--no-text-section-literals,它将文字放置在输出文件中的单独部分中。这允许将文字池放置在数据 RAM/ROM 中。使用--text-section-literals,文字散布在文本部分中,以使它们尽可能接近其引用。这对于大型汇编文件可能是必要的,否则文字将超出文本部分中 L32R 指令的范围。文字按照 .literal_position 指令或前面的 ENTRY 指令分组到池中。这些选项仅影响通过 PC 相关 L32R 指令引用的文字;绝对模式L32R指令的文字是单独处理的。
控制文字池的处理。默认值为 --no-auto-litpools,在没有 --text-section-literals 的情况下,它会将文字放置在输出文件中的单独部分中。这允许将文字池放置在数据 RAM/ROM 中。使用 --auto-litpools,文字会散布在文本部分中,以使它们尽可能接近其引用,不需要显式的 .literal_position 指令。对于非常大的函数来说,这可能是必要的,因为函数末尾的 L32R 指令可能无法访问函数开头的单个文字池。这些选项仅影响通过 PC 相关 L32R 指令引用的文字;绝对模式L32R指令的文字是单独处理的。与 --text-section-literals 一起使用时,--auto-litpools 优先。
向汇编器指示 L32R 指令是使用绝对寻址还是 PC 相对寻址。如果处理器包含绝对寻址选项,则默认情况下使用绝对L32R重定位。否则,只能使用相对于 PC 的 L32R 重定位。
启用或禁用自动对齐以减少分支惩罚,但会牺牲代码大小。默认情况下启用此优化。请注意,汇编器将始终对齐具有固定对齐要求的指令,例如LOOP。
启用或禁用调用指令的转换以允许跨更大范围的地址进行调用。当呼叫目标可能超出范围时,应使用此选项。它可能会降低代码大小和性能,但当调用在范围内结束时,链接器通常可以优化掉不必要的开销。默认值为--no-longcalls。
启用或禁用 Xtensa 指令的所有汇编器转换,包括松弛和优化。默认为--transform; --no-transform 仅应在指令必须与汇编源代码中指定的指令完全相同的极少数情况下使用。使用--no-transform会导致超出范围的指令操作数出错。
将oldname部分重命名为newname。可以多次使用此选项来重命名多个部分。
启用或禁用跳转指令的转换以允许跨越更大范围的地址跳转。当跳跃目标可能超出范围时,应使用此选项。在没有此类跳转的情况下,此选项不会影响代码大小或性能。默认为--trampolines。
选择写入 .xtensa.info 部分的 ABI 标记。 ABI标签表示汇编代码的ABI。尝试链接具有不一致 ABI 标记的目标文件时,链接器会发出警告。默认 ABI 由 Xtensa 核心配置选择。
当为 Z80 处理器配置时,以下选项可用。
@chapter Z80 相关功能
该选项指定目标处理器。如果尝试汇编不会在目标处理器上执行的指令,汇编器将发出错误消息。可识别以下处理器名称:z80、z180、ez80、gbz80、z80n >,r800。除了基本指令集之外,还可以告诉汇编器接受一些扩展助记符。例如,-march=z180+sli+infc 使用 SLI 指令和 IN F,(C) 扩展 z180 >。目前支持以下扩展:full(所有已知指令)、adl(默认 ADL CPU 模式,仅限 eZ80)、sli(指令称为 SLI、SLL 或 SL1)、xyhl(具有一半索引寄存器的指令:IXL 、IXH、IYL、IYH)、xdcb(类似于 RotOp (II +d),R 和 BitOp n,(II+d),R),infc(指令 IN F,(C) 或 IN (C)),outc0(指令 OUT (C),0)。请注意,以 - 开头的扩展助记符不是扩展基本指令集,而是撤销相应的功能:-march=z80-full+xyhl 首先删除所有默认扩展并添加对索引寄存器的支持仅减半。如果未指定此选项,则假定为 -march=z80+xyhl+infc。
将所有具有指定前缀的标签标记为本地。但这样的标签可以在代码中显式标记为全局的。此选项不会更改默认的本地标签前缀 .L,它只是添加新的前缀。
接受无冒号标签。行开头的所有符号都被视为标签。
接受 SDCC 生成的汇编代码。
单精度浮点数格式。默认值:ieee754(32 位)。
双精度浮点数格式。默认值:ieee754(64 位)。
gcc (1), ld (1), and the Info entries for binutils and ld.
版权所有 (c) 1991-2023 自由软件基金会, Inc.
根据 GNU 自由文档许可证 1.3 版或自由软件基金会发布的任何更高版本的条款,授予复制、分发和/或修改本文档的许可;没有不变部分,没有封面文本,也没有封底文本。许可证的副本包含在标题为 GNU 自由文档许可证的部分中。