Je déclarre une fonction qui demandeun paramètre par d0 come ça:
__attribute__((regparm)) extern void SetTempo_voice1 (unsigned short asm("d0"));
Lorsque j'écrit dans le code SetTempo (120); dans le fichier généré par TIGCC j'obtient: moveq.l #120,d0. Pourquoi moveq.l et non moveq.w?
heu moveq.l et moveq.w n'existe pas c'est moveq tout court il me semnle (ca erase tout le reg)
D'accord, mais alors pourquoi moveq car 120>16 donc supérieur à 4 bits?
oui, le moveq envoie un octet dans un long
Pour autant qu'il me semble, moveq est en principe la syntaxe standard. moveq.l est la seule formulation correcte de moveq si on veut mettre une taille, ce que fait GCC.
8 bits != d'un octet ?
je dois parler dans le vide alors ...
En plus de mettre un octet dans dn, moveq fait un extb, opération qui n'existe que sur 68020 ou plus pour autant qu'il me semble.
oui, il met un octet dans un long ....
geogeo> parce qu'il optimise.
Un move.w #120,d0 aurait été plus lent et plus gros.