禁用ARM 16位thumb指令

禁用ARM 16位thumb指令,arm,thumb,Arm,Thumb,在ARM世界中,有没有办法只使用32位指令(例如在Cortex M3上)和禁用16位thumb指令?我说的是指令本身,而不是加载/存储访问机制 抱歉,如果这个问题已经被问到了,或者这个问题太愚蠢了,等等 非常感谢您的帮助……大多数较新的芯片只使用Thumb-2指令集,这意味着您将有一些16位指令和一些32位指令。如果你想使用老式的32位ARM指令集,你需要找到旧的硬件。cortex-m3只是一个thumb机器,所以它只有一个16位thumb内核,32位指令只是未定义的16位扩展,因此,您必须使用

在ARM世界中,有没有办法只使用32位指令(例如在Cortex M3上)和禁用16位thumb指令?我说的是指令本身,而不是加载/存储访问机制

抱歉,如果这个问题已经被问到了,或者这个问题太愚蠢了,等等


非常感谢您的帮助……

大多数较新的芯片只使用Thumb-2指令集,这意味着您将有一些16位指令和一些32位指令。如果你想使用老式的32位ARM指令集,你需要找到旧的硬件。

cortex-m3只是一个thumb机器,所以它只有一个16位thumb内核,32位指令只是未定义的16位扩展,因此,您必须使用16位thumb内核,甚至可以获得32位thumb2扩展…因此,根据定义,这是不可能的


此外,32位扩展还不足以完成您可能需要的所有操作

如果您只想强制选择32位编码,而不选择16位编码,则可以在汇编中为单个助记符添加
.W
后缀。然后,汇编程序将发出32位编码,如果没有,则会引发错误。因此,您不能简单地将其应用于每一条指令,因为有些指令只有16位编码,但构建某种基于grotty正则表达式的转换似乎是可行的。如果您处理的是已编译的高级代码,那么转换中间程序集列表或破解汇编程序/编译器可能是唯一可行的选择。

这并不能回答我的问题,主要是因为我的问题不够精确。出于什么原因(例如研究),我想禁用16位指令,只在Cortex M3上运行32位指令(例如在FPGA上运行的HDL模型上)。任何胶水如何禁用16位拇指与现代编译器,但继续使用32位拇指2指令(在现代芯片上)?哦,我明白你的要求。不,我认为没有任何编译器提供这样做的选项。假设32位指令足够完整,可以表达整个程序,我认为可以很容易地修改clang,只发出那些指令。除了CB(N)Z指令外,我总能找到32位指令的“替代品”——在ISA中快速运行——但我并不总能找到16位的替代品。所以我认为对于编译器来说总是有一个32位的解决方案,我想知道是否可以放弃对16位指令的优化。这让我想到了一个问题:除了像以前建议的那样使用叮当声之外,您可以禁用单个指令吗?我很想看到“-disable-thumb16”或“-disable-arc-reg-t1”,但我想我必须使用16位指令-我只是想确定一下。谢谢你们。你们需要指定是要硬件禁用这些指令,还是编译器不使用它们。后者在理论上是可能的,但有编译器支持吗?不确定,这是值得他们追求的特性吗?您当然可以自己将其添加到gcc和/或llvm中……您确实了解,thumb2指令集在armv6m和armv7m之间差异很大,因此这只适用于cortex-m3和m4,而不适用于m0,并且您必须手动检查较大的cortex-A以查看它们支持什么大多数cortex-M芯片仅使用thumb2模式。实际上只有拇指和手臂模式。Thumb2是thumb模式的扩展,它具有32位和16位指令以及伪条件执行。所有这些过载的概念都会让这个问题(和答案)变得混乱。直到Cortex-m3,只有拇指模式。M4和M7支持拇指2。任何Cortex-M家族都没有ARM模式。