Question

posté ce Q au forum DSP de TI 28xx mais ont pas entendu une réponse et peut-être pensé que quelqu'un pourrait connaître ici.


Je sais comment écrire des fonctions dans l'assemblage afin qu'ils soient C-appelable; si le nom de C-appelable est foo() alors la fonction d'assemblage est nommé _foo().

Que faire si je veux utiliser C ++ et optimiser une méthode de classe dans l'assemblage? Comment je fais ça? Je suppose que les seuls problèmes majeurs sont:

  • nommer
  • accéder au pointeur "this"
  • accéder à des membres de la classe en quelque sorte sachant décalages

et si je ne veux pas à vous soucier de ces deux derniers, je aurais peut-être écrire une fonction membre statique et faire ceci:

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
};
Était-ce utile?

La solution

Le pointeur this est transmis comme un argument supplémentaire à la fonction, en utilisant la convention d'appel standard sur votre plate-forme. Sur toutes les plates-formes que je suis familier avec elle est passée comme premier argument, mais je ne fais pas beaucoup de codage C ++, donc je ne sais pas si cela est garanti par la norme. Vous pouvez toujours démonter un code C ++ sur votre plate-forme pour confirmer.

C ++ dénomination de symbole est un peu plus difficile que dans C, et varie d'un compilateur de compilateur. Je suppose que vous pouvez trouver le nom du symbole droit d'utiliser en démontant une définition de fonction compilée, assurez-vous que:. La fonction est un membre de la classe à droite, et a le bon nombre et le type d'arguments

Sauf si vous avez vraiment besoin de reproduire une fonction C ++ in situ, je ne serais probablement juste faire une fonction standard C et faire la extern "C" { ... } habituelle autour de sa déclaration.

Autres conseils

Votre compilateur a une syntaxe assembleur en ligne? Si vous avez cela, il peut être l'option la plus facile, et vous pouvez laisser le compilateur gérer la désignation de fonctions et d'appeler des morceaux de syntaxe.

Alternativement, la suggestion de Stephen d'écrire la méthode C ++ comme une enveloppe autour d'une fonction inline « simple » C appel est un bon. (Vous voulez sans doute faire juste une fonction simple, pas une fonction membre statique dans votre poste, pour obtenir une interface simple C à elle.)

Je trouverais le drapeau dépendant du compilateur et écrire l'assemblage dans la fonction C ++. En général, il existe des moyens de faire référence à des variables locales à l'intérieur de la section d'assemblage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top