GCC et MOVEM
4 sujets de 1 à 4 (sur un total de 4)
-
Je crois que c’est un truc comme ca sur GCC:
D’abord, definis toi ce define pour te simplifier la vie:
#define ASMOPT(code) {__asm__ __volatile__(code: : : « cc »);return;}
Puis, dans ton code:
ASMOPT(« movel d1,d0; subqw #2,d0 »);
(Il s’agit d’un exemple bidon).
Attention, c’est de la syntaxe MIT, pas MOT! J’en sais pas plus. C’est un ami qui m’avait montré ca et je n’utilise pas Gcc sur Amiga.
Je te conseille de chercher un peu plus d’infos sur google.
a+
[EDIT] Je pense que j’ai mal compris ta question. En fait, je ne connais pas de syntaxe C qui fasse ce que tu demandes. Il faut, a mon avis, que tu forces ton code Asm a l’endroit ou tu en as besoin.
Effectivement c’est pas vraiment ce que je demandais mais c’étais sympa de répondre
Le problème d’inclure de l’assembleur comme tu fais c’est qu’on assume utiliser D0
Or ce registre peut déjà être utilise par le compilo à ce moment
L’idéal serait qu’une syntaxe C comme
register LONG x,y,z,w;
LONG *t;
*t++=x;
*t++=y;
*t++=z;
*t++=w;
devienne une seule instruction asm : un MOVEM de d0-d3
A y réfléchir ta méthode peut marcher si on utilise la syntaxe Amiga-GCC qui fixe un registre particulier pour une variable
le problème c’est que ça bloque ces 4 registres sur ces 4 variables qui servent vraiment que pour la copie du movem
Alain
La syntaxe de l’assembleur inline n’est pas très simple et surtout très mal documenté, dès qu’on sort un peu du x86 et de l’ARM.
Voici ce que j’ai trouvé :
int t1,t2,t3,t4;
asm volatile (« moveml %1/%2/%3/%4,%0@-«
: « =a » (out), « =d » (t1), « =d » (t2), « =d » (t3), « =d » (t4)
: « 1 » (0), « 2 » (0), « 3 » (0), « 4 » (0), « 0 » (&stack[4]));
Dans ce cas, il semble que 4 registres soient chargés depuis la pile.
Je te conseille de faire des essais et de voir le code généré. Je me demande si l’exemple si dessus ne devrait pas indiquer au compilo que le contenu des registres a été modifié. Ou alors le fait qu’ils soient marqués comme « =d » suffit …
4 sujets de 1 à 4 (sur un total de 4)
- Vous devez être connecté pour répondre à ce sujet.
› Forums › AmigaOS, MorphOS et AROS › Développement › GCC et MOVEM