[gas][cortex-m23]为什么这个beq.w会导致hard fault?

[gas][cortex-m23] why does this beq.w results in hard fault?

编写一些代码来测试 CM-23 ARM 汇编指令集,我遇到了关于以下条件跳转的这种奇怪的(对我来说)行为。

00001240: 0x01f0ef80 beq.w 0x2422 <cmp_r0__r1_failed>

包含函数具有以下指令:

根据Generic User Guide rev. r1p0,B{cond} 的使用限制如下[−256 字节到+254 字节]。 这种情况下的有效跳转约为 0x200,但 .w 后缀至少应将此范围扩展到 16 位领域。

在构建过程中,汇编程序没有给出任何错误/警告,并且整个过程已完成。然后发生硬故障(指向这样的指令作为罪魁祸首)。

如果我写了一个非法的指令,至少我希望汇编程序会抱怨。

我在这里错过了什么?感谢您提供任何线索。

在cortex-m23技术参考手册中可以看到

This processor is an implementation of the ARMv8-M baseline architecture.

然后在armv8-m架构参考手册中。

Armv7-M compatibility requires the Main Extension.

并且你可以在armv7-m文档中看到宽条件分支只有armv7-m。以及在 armv6-m 体系结构参考手册中看不到它们。

请注意,两种主要类型的 arm 文档是每个核心的技术参考手册和每个体系结构的体系结构参考手册。而且那些文档还不错,其他的ARM文档和网页就没那么好,不误会误导人。

如果您说这些工具正在生成代码,那么它不应该向 binutils 人员提交工单。