我把这个问题发布到了TI的28xx DSP论坛,但没有听到回复,并认为这里可能有人知道.
我知道如何在程序集中编写函数,以便它们是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 };
Stephen Cano.. 5
该this
指针被作为额外的参数传递给函数,使用平台上的标准调用约定.在我熟悉的所有平台上,它都作为第一个参数传递,但我没有做很多C++编码,所以我不确定这是否由标准保证.您始终可以在平台上反汇编某些C++代码以进行确认.
C++符号命名比C语言更痛苦,并且因编译器而异.我想你可以通过反汇编编译的函数定义找出正确的符号名称,只需确保:函数是正确类的成员,并且具有正确的参数数量和类型.
除非你真的需要在原地重现一个C++函数,否则我可能只需要制作一个标准的C函数并按照惯例extern "C" { ... }
进行.
该this
指针被作为额外的参数传递给函数,使用平台上的标准调用约定.在我熟悉的所有平台上,它都作为第一个参数传递,但我没有做很多C++编码,所以我不确定这是否由标准保证.您始终可以在平台上反汇编某些C++代码以进行确认.
C++符号命名比C语言更痛苦,并且因编译器而异.我想你可以通过反汇编编译的函数定义找出正确的符号名称,只需确保:函数是正确类的成员,并且具有正确的参数数量和类型.
除非你真的需要在原地重现一个C++函数,否则我可能只需要制作一个标准的C函数并按照惯例extern "C" { ... }
进行.