【发布时间】:2017-05-15 08:18:28
【问题描述】:
是否可以在可能的情况下强制生成 thumb 32 位指令?
例如我有:
int main(void) {
8000280: b480 push {r7}
8000282: b085 sub sp, #20
8000284: af00 add r7, sp, #0
uint32_t a, b, c;
a = 1;
8000286: 2301 movs r3, #1
8000288: 60fb str r3, [r7, #12]
b = 1;
800028a: 2301 movs r3, #1
800028c: 60bb str r3, [r7, #8]
c = a+b;
800028e: 68fa ldr r2, [r7, #12]
8000290: 68bb ldr r3, [r7, #8]
8000292: 4413 add r3, r2
8000294: 607b str r3, [r7, #4]
while (1) ;
8000296: e7fe b.n 8000296 <main+0x16>
但它们都是拇指 16 位。出于测试原因,我想要拇指 32 位指令。
【问题讨论】:
-
我认为 Thumb 的全部意义在于它更喜欢 16 位指令?
-
可能。但是,我想尽可能生成拇指 32 指令。 (皮质 M4)
-
我不是这里的专家,我什至没有 ARM 处理器,但 the guidance I find 对我来说似乎很清楚你正在追求一项不可能完成的任务。如果您想发出 32 位指令,只需针对标准 ARM 指令集进行编译。如果这不令人满意,请考虑解释为什么您尝试这样做,也许有人可以为您提供更好的解决方法。
-
如果您将
.w附加到指令中,它将指示编译器更喜欢 32 位编码。 -
@CodyGray 32 位 ARM 和 thumb2 扩展之间存在很大差异。如前所述,这是针对不支持 32 位 ARM 指令但支持 140 个左右的 thumb2 扩展 (armv7-m) 的 cortex-m4。