문제

나는 게시했다 이 Q는 Ti의 28xx DSP 포럼입니다 그러나 응답을 듣지 못했고 여기 누군가가 알고 있을지도 모른다고 생각했습니다.


나는 c-callable이되도록 어셈블리에 함수를 작성하는 방법을 알고 있습니다. C-Callable 이름이 인 경우 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
};
도움이 되었습니까?

해결책

그만큼 this 포인터는 플랫폼의 표준 호출 규칙을 사용하여 기능에 대한 추가 인수로 전달됩니다. 내가 익숙한 모든 플랫폼에서는 첫 번째 인수로 전달되지만 C ++ 코딩을 많이하지 않으므로 표준에 의해 이것이 보장되는지 확실하지 않습니다. 플랫폼에서 항상 일부 C ++ 코드를 분해하여 확인할 수 있습니다.

C ++ 기호 명명은 C보다 다소 고통스럽고 컴파일러마다 다릅니다. 컴파일 된 함수 정의를 분해하여 사용할 올바른 기호 이름을 알아낼 수 있다고 생각합니다. 기능은 올바른 클래스의 구성원이며 올바른 번호와 인수 유형을 가지고 있습니다.

현장에서 C ++ 함수를 재현 할 필요가 없다면 표준 C 기능을 만들고 평소를 할 것입니다. extern "C" { ... } 선언 주변.

다른 팁

컴파일러에 인라인 어셈블리 구문이 있습니까? 그럴 경우 가장 쉬운 옵션 일 수 있으며 컴파일러가 기능 명명을 처리하고 구문 조각을 호출하도록 할 수 있습니다.

또는 "간단한"C 함수 호출 주변의 상감 래퍼로서 C ++ 메소드를 작성하겠다는 Stephen의 제안은 좋은 것입니다. (당신은 아마도 당신의 게시물과 같은 정적 멤버 함수가 아닌 단순한 기능으로 만들고 싶을 것입니다. 간단한 C 인터페이스를 얻을 수 있습니다.)

컴파일러 의존 플래그를 찾아 C ++ 함수 내에 어셈블리를 작성합니다. 일반적으로 조립 섹션 내에서 로컬 변수를 참조하는 방법이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top