Pregunta

He publicado este Q al foro DSP 28xx de TI, pero no han escuchado una respuesta y pensé que tal vez alguien aquí podría saber.


Yo sé cómo escribir funciones en el montaje de manera que sean C-exigible; si el nombre de C-exigible se foo() entonces la función de montaje se denomina _foo().

¿Qué pasa si quiero usar C ++ y optimizar un método de clase en el montaje? ¿Cómo puedo hacer eso? Asumo que los únicos problemas principales son:

  • nombrando
  • acceder al puntero "this"
  • para acceder a las compensaciones por miembros de la clase de alguna manera sabiendo

y si no quiero que preocuparse de los dos últimos, entonces tal vez me gustaría escribir una función miembro estática y hacer esto:

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
};
¿Fue útil?

Solución

El puntero this pasa como un argumento adicional a la función, utilizando el estándar de convención de llamada de su plataforma. En todas las plataformas que estoy familiarizado con él se pasa como primer argumento, pero no hago un montón de codificación C ++, así que no estoy seguro de si esto está garantizado por la norma. Siempre se puede desmontar algo de código C ++ en su plataforma para confirmar.

El C ++ símbolo de nomenclatura es bastante más dolorosa que en C, y varía de compilador para compilador. Supongo que se podría averiguar el nombre del símbolo derecho a utilizar mediante el desmontaje de una definición de función compilado, sólo asegúrese de que:. La función es un miembro de la clase a la derecha, y tiene el número y el tipo de argumentos

A menos que realmente necesita para reproducir una función de C ++ in situ, probablemente me acaba de hacer una función estándar de C y hacer lo extern "C" { ... } habitual en torno a su declaración.

Otros consejos

¿Su compilador tiene una sintaxis de ensamblador en línea? Si usted tiene que, puede ser la opción más fácil, y se puede dejar que el compilador de manejar el nombramiento función y llamar a piezas de sintaxis.

Como alternativa, la sugerencia de escribir el método C ++ como una envoltura de inline en torno a una llamada a la función C "simple" de Stephen es una buena. (Es posible que desee para que sea sólo una función normal, no una función miembro estática como en su puesto, para obtener una interfaz sencilla C a ella.)

Me gustaría encontrar la bandera compilador dependiente y escribir el montaje dentro de la función C ++. Por lo general, hay maneras de hacer referencia a variables locales dentro de la sección de montaje.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top