If statement GNU汇编程序-如何将.ifdef与逻辑AND、OR一起使用
在C语言中,我可以使用If statement GNU汇编程序-如何将.ifdef与逻辑AND、OR一起使用,if-statement,gcc,assembly,arm,gnu-assembler,If Statement,Gcc,Assembly,Arm,Gnu Assembler,在C语言中,我可以使用 #if defined(MULTI_CORE) || defined(CORE_INDEX) 如何在arm程序集文件中实现相同的结果(使用.ifdef或.if或任何其他受支持的表达式)?我正在使用GCC编译器工具链。在.S文件中使用C预处理器语法,就像在.C/.h中一样。使用gcc-cfoo.S(而不是直接使用as)构建代码,这会导致gcc(编译器前端)在将文件作为馈送到之前通过CPP运行文件 因此,CPP填充完全发生在任何.if气体宏填充之前,并与之分开 .ifdef
#if defined(MULTI_CORE) || defined(CORE_INDEX)
如何在arm程序集文件中实现相同的结果(使用.ifdef或.if或任何其他受支持的表达式)?我正在使用GCC编译器工具链。在
.S
文件中使用C预处理器语法,就像在.C
/.h
中一样。使用gcc-cfoo.S
(而不是直接使用as
)构建代码,这会导致gcc
(编译器前端)在将文件作为馈送到之前通过CPP运行文件
因此,CPP填充完全发生在任何.if
气体宏填充之前,并与之分开
.ifdef
和其他GAS宏功能的设计目的不是取代CPP。您应该使用CPP(或m4
或其他)作为asm源的预处理器
请注意,直接在.S
上使用as
通常在x86上构建时不会出现错误消息,因为#
是该目标的GAS语法中的注释字符。e、 g.将#if 0
/#endif
放在一些指令周围:它们将在foo.o
之后作为-o foo.o foo.S
。所有#if
行都被视为注释
在ARM上,您应该会遇到嘈杂的故障,因为注释字符是@
(#
用于立即)。如果您真的想防止在任何平台上意外生成没有CPP的文件,您可以定义此文件需要CPP
,然后在下一行写入此文件需要CPP此文件需要CPP
。(两次,因此这不是有效的标签声明)。使用CPP宏处理,这将成为一个空行,而不是无效的insnas
会自动删除/
和/***/
注释,因此您不能仅使用它。但是大多数人没有做任何特别的事情;他们的构建脚本可以工作,并且在没有CPP的情况下不会随机构建.S
文件
另见:
- 。(
测试符号,而不是.ifdef
宏).macro
- (CPP将
转换为.ifdef宏\u从\u CMDLINE
).ifdef 1
.S
重命名程序集文件,则可以使用C预处理器指令,如\If
、\ifdef
等,以及程序集文件中的C宏处理等。我查找了一个副本,但没有找到,因此我想我会将这些注释转化为答案。