0

我有自己的 ARM asm(32 位 ARM/NEON)。从这个 asm 代码中,我调用了一些用 C 实现的函数。像这样:

        ARM

NormCorrS0_S0_S0_ PROC
        ...
        BL     ConvolveC4  <-- implemented in C/C++
        ...

1) 如果 ARM-asm 知道 ConvolveC4 是 Thumb2,它需要做什么才能调用它并切换到 Thumb2?

2) 如果 ARM-asm 不知道 ConvolveC4 是什么,那么显然 ARM asm 会保持原样,但我需要在 ConvolveC4 端添加某种单板以确保 ARM 状态正确切换。

4

1 回答 1

1

您必须使用 BX 或 BLX 或取决于 arm pop (ldm)。根据您的链接器,您可以这样保留它,并且链接器将添加一个 ConvolveC4_from_arm 例如,它基本上将链接寄存器设置为 bl 之后的返回地址,但蹦床会切换模式。

另一种方法是,除非您在同一源中调用函数并且您知道其模式,否则请始终使用 blx 或 bx。

如果您正确声明标签/功能,gnu 工具 binutils 可以为您处理其中的一些问题。

于 2013-10-28T05:23:18.273 回答