Assembly 如何在Gnu Assembler中测试cpu变量

Assembly 如何在Gnu Assembler中测试cpu变量,assembly,gcc,arm,gnu-assembler,Assembly,Gcc,Arm,Gnu Assembler,我想根据我正在组装的cpu变量,以不同的方式实现一些汇编代码。 我目前正在为ARM编译,cpu变量通过GCC的“-mcpu”选项传递。我的问题是在汇编代码中如何测试变量 我知道如何使用.cpu指令(例如.cpu cortex-m3)声明变量,但我希望根据目标内核使用不同的指令。我想我能做到。ifeq,但我无法看到在条件字段中放置什么。有人知道这一点吗?在命令行上定义宏并确保使用预处理的asm文件(.S)可能是最简单的方法。我了解了这一点,但这意味着用两种不同的方式(mcpu和a-D)表达相同的信

我想根据我正在组装的cpu变量,以不同的方式实现一些汇编代码。 我目前正在为ARM编译,cpu变量通过GCC的“-mcpu”选项传递。我的问题是在汇编代码中如何测试变量


我知道如何使用.cpu指令(例如.cpu cortex-m3)声明变量,但我希望根据目标内核使用不同的指令。我想我能做到。ifeq,但我无法看到在条件字段中放置什么。有人知道这一点吗?

在命令行上定义宏并确保使用预处理的asm文件(
.S
)可能是最简单的方法。我了解了这一点,但这意味着用两种不同的方式(mcpu和a-D)表达相同的信息。这是潜在错误和头痛的根源,我宁愿不这样做。而且,对于某些体系结构(CRIS体系结构),似乎也有可能进行奇怪的测试,例如:.if..asm.arch.CRIS.v32 CRIS v32的代码您可以在构建脚本中对其进行宏处理,例如
-DARMCPU=$cpu-mcpu=$cpu
,这会迫使您将
cpu=cortex-m3
或任何与命令分开的设置,从而使它们稍微混乱起来。统一语法完全失败。有两种可能的路径。原始thumb指令兼容从armv4t到armv7-a、r、m的所有内核和全尺寸,因此您可以将通用代码限制到该指令集。另一种选择是类似于某种类型的ifdef,如上文所述,宏是有条件地以构建类型的方式引入的,或者是在代码体中引入的,如果是cortex-m0,那么是else,如果是armv7-a,那么是else。对于在宏上扩展,您可以简单地在每个核心上有一个单独的文件,并在构建系统中解决这个问题,因为您链接了多个二进制文件。在这种统一的语法中,我看不出什么是真正的失败。对我来说,这比使用armv4要清楚得多,每次将手臂/拇指和bx混合在一起都是一团乱麻。事实上,我尝试在Cortex-M0+上运行一些汇编例程(与arm-v6m中的所有组件交叉兼容),并为armv7-m优化版本。