4

我在TI 的 28xx DSP 论坛上发布了这个 Q,但没有收到回复,我想这里可能有人知道。


我知道如何在汇编中编写函数,以便它们是 C 可调用的;如果 C 可调用名称是foo(),则汇编函数名为_foo()

如果我想使用 C++ 并优化汇编中的类方法怎么办?我怎么做?我认为唯一的主要问题是:

  • 命名
  • 访问“this”指针
  • 通过以某种方式知道偏移量来访问类成员

如果我不想担心最后两个,那么也许我会写一个静态成员函数并这样做:

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
};
4

3 回答 3

5

使用平台上的this标准调用约定,指针作为附加参数传递给函数。在我熟悉的所有平台上,它作为第一个参数传递,但我没有做很多 C++ 编码,所以我不确定标准是否能保证这一点。您可以随时在您的平台上反汇编一些 C++ 代码来确认。

C++ 符号命名比在 C 中更痛苦,并且因编译器而异。我想您可以通过反汇编已编译的函数定义找出要使用的正确符号名称,只需确保:该函数是正确类的成员,并且具有正确数量和类型的参数。

除非你真的需要在原地重现 C++ 函数,否则我可能只会制作一个标准的 C 函数并extern "C" { ... }围绕它的声明做通常的事情。

于 2010-01-11T14:45:39.670 回答
1

你的编译器有内联汇编语法吗?如果你有,它可能是最简单的选择,你可以让编译器处理函数命名和调用语法片段。

或者,Stephen 建议将 C++ 方法编写为“简单”C 函数调用的内联包装器,这是一个很好的建议。(你可能想让它只是一个普通函数,而不是你帖子中的静态成员函数,以获得一个简单的 C 接口。)

于 2010-01-11T18:47:22.507 回答
0

我会找到与编译器相关的标志并在 C++ 函数中编写程序集。通常有一些方法可以从汇编部分中引用局部变量。

于 2010-01-11T20:32:41.247 回答