我发布了this Q to TI's 28xx DSP forum,但没有听到回复,并认为这里可能有人知道。
我知道如何在程序集中编写函数,以便它们是C可调用的;如果C可调用名称为foo()
,则汇编函数名为_foo()
。
如果我想在汇编中使用C ++并优化类方法怎么办?我怎么做?我假设唯一的主要问题是:
如果我不想担心最后两个,那么也许我会写一个静态成员函数并执行此操作:
class MyClass
{
int x;
static int _doSomething(int u); // implement this in assembly
public:
inline void doSomething() { x = _doSomething(x); }
// lightweight C++ wrapper to handle the class member / "this" pointer stuff
};
答案 0 :(得分:5)
使用平台上的标准调用约定,this
指针作为函数的附加参数传递。在我熟悉的所有平台上,它都作为第一个参数传递,但我没有做很多C ++编码,所以我不确定这是否由标准保证。您始终可以在平台上反汇编某些C ++代码以进行确认。
C ++符号命名比C语言更痛苦,并且因编译器而异。我想你可以通过反汇编编译的函数定义找出正确的符号名称,只需确保:函数是正确类的成员,并且具有正确的参数数量和类型。
除非你真的需要在原地复制一个C ++函数,否则我可能只是制作一个标准的C函数并在其声明中执行通常的extern "C" { ... }
。
答案 1 :(得分:1)
您的编译器是否具有内联汇编语法?如果你有,那么它可能是最简单的选项,你可以让编译器处理函数命名和调用语法部分。
或者,Stephen建议将C ++方法编写为围绕“简单”C函数调用的内联包装器,这是一个很好的建议。 (你可能想让它只是一个简单的函数,而不是你帖子中的静态成员函数,以获得一个简单的C接口。)
答案 2 :(得分:0)
我会找到编译器相关的标志并在C ++函数中编写程序集。通常有一些方法可以在汇编部分中引用局部变量。