1

Bon voila... j'ai toujours un probleme dans ce genre de cas... j'ai une routine ASM et je veux l'utiliser en Cwink Je sais la doc de tigcc explique ca.. je l'ai luewink mais j'ai aussi lu la doc de dark angel... mais rien a faire , je suis bete et j'y arrive pas...
Je veux gere tout seul le passage a ma fonction asm comme cela:
#define Sprite16x16_MASK(x,y,sprite) ({
asm ("movem.l %d0-%d4/%a0-%a3,-(%a7)")
asm ("move.w %0,%%d0" :: "d"(x)); 
asm ("move.w %0,%%d1" :: "d"(y)); 
asm ("move.l %0,%%a0" :: "g"(sprite));
asm ("bsr Sprite_16_MASK")
}) 


Cela devrai marcher theoriquement tout les registres sont sauve etc.. mais malheureusement ca marche pas.... puis a chaque fois il me met implicite declaration de ma fct asm... ca me gave un peu.. alors si qqn pouvais me donner une solution rapide et simple ca eviterait que je m'arrache les tripeswink

merciwink

NB: je restaure les registre dans la fonction graphique, pour eviter une perte trop importante d'octetwink
[edit]Edité par TiMad le 30-10-2001 à 00:20:15[/edit]
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

2

1. Utilises-tu A68k comme assembleur? Si oui:
2. As-tu TIGCC 0.92? (C'est ce qu'il faut pour mélanger A68k et C correctement.)
3. As-tu mis un xdef pour ta fonction dans ton fichier A68k?

De plus:
1. Réunis tes plusieurs asm en un seul. (Même s'il y a un warning sur les "multi-line string literals", tu t'en fiches.)
2. Remplace asm par asm volatile.
[edit]Edité par Kevin Kofler le 30-10-2001 à 01:15:18[/edit]
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

3

heu j'utilise tigcc version 0.91 avec l'ide...
et j'ai rien specifiewink

en bref il doit me manque pas mal de chose ...wink
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

4

dans le genre bug trop con:
#define BlackPxl(x,y) ({asm ("move.w %0,%%d0" :: "d"(x));asm ("move.w %0,%%d1" :: "d"(y));asm ("bsr BlackPxl_r");})
ca merde completement le pxl s'affiche n'importe ou!!!

alors que si j'appelle directement BlackPxl_r et si j'ajoute move.x #1,d0 move.w #2, d1 au debut de BlackPxl_r ca marche parfaitement bien....
franchement tigcc se fout un peu de notre geule quand il nous dit qu'il supporte bien l'asm...

PS: ce n'est pas un probleme d'ecrasement de registre... mais bien du compilateur et ca me gave grave!!
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

5

Dans ton premeier code, je crois que tu oublies de restaurer les registres ...
Et sinon, compile avec -S pour verifier le code generé ...

6

1. Il faut impérativement réunir les instructions asm en une seule!
2. Rajoute volatile (asm -> asm volatile).

Donc:
#define BlackPxl(x,y) ({asm volatile ("move.w %0,%%d0;move.w %1,%%d1;bsr BlackPxl_r" :: "d"(x), "d"(y));})
[edit]Edité par Kevin Kofler le 30-10-2001 à 22:42:05[/edit]
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

7

darkangel:> les registres sont restaurés dans la fonctions pour que le code compile soit moins gros (en taille bien surwink)

kevinkofler: toutes les routines asm sont reunis dans un meme asm(...) sauf les macros...

#define BlackPxl(x,y) ({asm volatile ("move.w %0,%%d0" :: "d"(x));asm ("move.w %0,%%d1" :: "d"(y));asm ("bsr BlackPxl_r");})
ca bugue toujours.. toujours le meme probleme, il semblerai que le passage dans les registres d0 et d1 bugs!
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

8

1. Pour la dernière fois, réunis-les en 1 instruction asm! Si tu refuses de corriger tes problèmes, je ne peux pas t'aider! Le problème ici est que TIGCC peut réutiliser d0 ou d1 entre les instructions asm séparées.
2. Si ça ne marche pas même avec ce que j'ai posté dans le dernier message, remplace les "d" par "a", ou marque "d0" et "d1" comme "clobbers". Comme ça, tu peux être sûr que TIGCC ne mettra pas les opérandes input en d0 ou d1.
[edit]Edité par Kevin Kofler le 30-10-2001 à 23:48:51[/edit]
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

9

ha... j'avais compris reunir les routines en un seul asm...
bon j'ai essaye de reunir le macro mais j'y arrive pas (hehe pas douewink)

#define BlackPxl(x,y) ({ asm volatile ("move.w %0,%%d0; move.w %1,%%d1; bsr BlackPxl_r": "=d" (x), "=d" (y) : "0" (x), "1" (y));;})

il me met pour BlackPxl(1,126);
invalid Ivalue of assignment sad
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

10

Ça ne va pas du tout là. On ne peut pas mettre un nombre en output (et c'est ce que tu essayes de faire avec ta macro). Essaye plutôt:
#define BlackPxl(x,y) ({ asm volatile ("move.w %0,%%d0; move.w %1,%%d1; bsr BlackPxl_r":: "d" (x), "d" (y) : "d0", "d1");})
Et je t'avertis que tu ne dois en aucun cas restaurer les registres dans ta routine si tu fais ça (parce que TIGCC le fera automatiquement).
[edit]Edité par Kevin Kofler le 31-10-2001 à 19:58:23[/edit]
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

11

Ok ca marche merciwink
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!