Code asm dans une macro C
Bonjour à toutes et tous !
Je cherche à remplacer une fonction avec quatre instructions asm dedans par une macro.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
signed long long mul32b(int a, int b)
{
asm(" mov %0,%%l0" :: "r"(a));
asm(" mov %0,%%l1" :: "r"(b));
asm(" smul %l1,%l0,%o1\n");
asm(" mov %y,%o0");
} |
Ce code est destiné à une architecture spécifique ;) .
Ceci dit, l'idée est de le remplacer par un :
Code:
1 2
|
#define MULT32(a,b) ... |
Je sais que ça se fait, mais je ne trouve plus comment faire, il doit me manquer des () et des : un peu partout :p .
Merci d'avance !
Re: Code asm dans une macro C
Citation:
Envoyé par progman
Je cherche à remplacer une fonction avec quatre instructions asm dedans par une macro.
Code:
1 2 3 4 5 6 7 8 9 10
|
#define MULT32(a,b)\
do\
{\
asm(" mov %0,%%l0" :: "r"(a));\
asm(" mov %0,%%l1" :: "r"(b));\
asm(" smul %l1,%l0,%o1\n");\
asm(" mov %y,%o0");\
}\
while (0) |
La structure do-while n'a pas de role fonctionnelle. Elle sert simplement à permettre de mettre la macro dans une structure de code (if, for, while etc.) et à forcer l'usage du ';' final.