我有自己的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状态切换正常。
答案 0 :(得分:1)
你必须使用BX或BLX或取决于手臂弹出(ldm)。根据您的链接器,你可以保留它,链接器将添加一个ConvolveC4_from_arm,例如它基本上将链接寄存器设置为bl后的返回地址,但是trampoline切换模式。
另一种方法是除非你在相同的源中调用函数并且你知道模式,然后总是使用blx或bx。
如果你正确地声明标签/功能,gnu工具binutils可以为你解决一些问题。