ARM到Thumb2的互通

时间:2013-10-28 01:45:08

标签: arm thumb

我有自己的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状态切换正常。

1 个答案:

答案 0 :(得分:1)

你必须使用BX或BLX或取决于手臂弹出(ldm)。根据您的链接器,你可以保留它,链接器将添加一个ConvolveC4_from_arm,例如它基本上将链接寄存器设置为bl后的返回地址,但是trampoline切换模式。

另一种方法是除非你在相同的源中调用函数并且你知道模式,然后总是使用blx或bx。

如果你正确地声明标签/功能,gnu工具binutils可以为你解决一些问题。

相关问题