1

Bon voila, je voulais savoir si tigcc etait capable de suporte des asm() detruisant les registres a0...a7 et d0...d7 ou faut il les sauvgarder nous meme?
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

2

je crois qu'il fo les sauvegarder soi meme

3

bonne question...
perso, je les sauvgarde en général, ça évite tt pb...
mais si c dans une fonction, je crois que c pas besoin de sauvegarder les premiers ?
(mais pas sûr)
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

4

En fait il les sauvgarde en generale, mais ma question se pose sur cette situation precise quand je les detruits tous...
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

5

Non, il ne faut pas les sauvegarder soi-mêmes, il suffit de les indiquer comme "clobbered". http://tigcc.ticalc.org/doc/gnuexts.html#SEC94.
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é

6

Ok merciwink
Sinon autre question conne: comment fait on pour faire:
move.l GetPlane(0),%a6
?
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

7

Lis bien le lien que je viens de poster avant de poster d'autres questions du genre.
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é

8

Erf je comprend pas:
#define XClrGPlan(y) ({ asm volatile ("move.l %0,%%a7;bsr ClrGPlan":: "a" (y): "a7");})
#define XCpyGPlanToG(y) ({ asm volatile ("move.l %0,%%a7;bsr CpyGPlanToG":: "a" (y): "a7");})
ca marche pas.. il me met unknown register name a7 ....
J'ai completement rien compris au passage si qqn pouvait m'expliquer car la doc de tigcc je pige quedal
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

9

Faut pas mettre deux pour-cent devant les registres dans le code ASM, et un à la fin ?
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

10

Non, c'est bon comme ça. Mais tu ne peux pas traffiquer a7 parce que c'est là que les clobbers (les registres indiqués comme détruits) seront sauvegardés.
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

Erf bein ca va bien ralentire toutes mes routines alors....
C'etait ma question des le depart pourtant tout le monde ma dit que c'etait bon.. enfin bon pas grave... va faloir faire une entreloupe pour utiliser a7 ....
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

12

Une solution serait de faire des fonctions compilées avec A68k dans un *.o séparé.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

13

Bon apres une petite modification:
#define XClrGPlan(y) ({ asm volatile ("move.l %0,%%a0;bsr ClrGPlan":: "a" (y): "a0");})
mais je modifie a7 dans ClrGPlan, le compilateur compile, mais il me met une adresse error... je ne comprend pas, car il ne me semble pas que cela vienne de ma routine...
Serait ce un prob de tigcc?
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

14

TIGCC attend qu'il y a le pointeur vers la pile en a7. Je ne comprends pas pourquoi tu t'obstines à vouloir modifier a7.
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é

15

c'est fort simple... en utilisant le registre a7, ma routine est beaucoup plus rapide:

movem.l %d0-%d6/%a0-%a6,-(%a7) /* Boucle: 56 * 8 = 448 */


Si je modifie a7 tout en le sauvgardant et en le restaurant apres est ce que tigcc va le suorte parce que pour le moment j'ai un illegal instruction..
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

16

Il faut que tu le sauvegardes quelque part autre que sur la pile (dans une variable par exemple) et ça devrait passer sans problèmes.
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é

17

Erf desole de te dire ca, mais tigcc a un sacre bug:

je sauvgarde a7 dans une variable> ca marche
je met ca (juste ca) dans ma routine:
move.w %d0,%a0
move.w %d1,%a1
move.w %d2,%a2
ca marche!
je met ca:
move.w %d3,%a3
move.w %d4,%a4

move.w %d5,%a5
ca bug!
la boucle etant:

XGOn();
Teste=XNewGPlan();
XClrGPlan(Teste);
//XCpyGPlanToG(Teste);
XGOff();
XDestrGplan(Teste);
ngetchx();
le bug se produit APRES le ngetchx(); il me met une illegal instruction!


>> conclusion: il y a un serieux probleme avec tigcc
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

18

Ce n'est pas un bogue, c'est que tu n'as pas le droit de modifier ces registres. Il faut soit que tu marques tous les registres que tu détruis (sauf a7!) comme détruits dans l'instruction asm, soit que tu sauvegardes les registres détruits toi-même (mais la première solution est probablement meilleure).
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é

19

En fait il faut que je sauvgarde quels reistres?
si je les marque comme detruit est ce que cela va optimiser mon code?
comment les marquer comme detruit (je pige que dale a l'anglais;'(( )
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

20

Bah:
#define XClrGPlan(y) ({ asm volatile ("move.l %0,%%a0;bsr ClrGPlan":: "a" (y): "a0","a1","a2","a3","a4","a5","a6");})
Et tu sauvegardes a7 toi-même.
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é

21

Erf j'ai 2 erreur avec le code que tu m'as donne:
Invalid 'asm' statement:
Fixef or forbidden register 8 (%a0) was spilled for class ADRR_REGS


Sinon faut il que je precise que je detruits le sregistres d0 - d7 au compilo?
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

22

Bon je comprend decidement rien.. soit je sait plus programmer en asm soit il a un bleme....
voila une petite partie de mon code source:
// macro define //
#define XClrGPlan(y) ({ asm volatile ("move.l %0,%%a0;bsr ClrGPlan":: "a" (y): "a0");}) 

// Code asm //
asm("
virtual_pc:
	dc.l	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	



/***************************/
/*     Efface un Gplan     */
/***************************/
/* Input:                  */
/*         adrr Gplan (a7) */
/***************************/


ClrGPlan:
	movem.l	%d0-%d7/%a1-%a7,virtual_pc
	lea 		8704(%a0),%a7
	moveq 	#0,%d0
	moveq 	#0,%d1
	moveq 	#0,%d2
	moveq 	#0,%d3
	moveq 	#0,%d4
	moveq 	#0,%d5
	moveq 	#0,%d6
	moveq		#0,%d7
	move.w 	%d0,%a0
	move.w 	%d1,%a1
	move.w 	%d2,%a2
	move.w 	%d3,%a3
	move.w 	%d4,%a4
	move.w 	%d5,%a5
	move.w 	%d6,%a6
	bsr ClrGplan_bsr
	bsr ClrGplan_bsr
	bsr ClrGplan_bsr
	bsr ClrGplan_bsr
	bsr ClrGplan_bsr
	bsr ClrGplan_bsr /* dans ce cas la, le bsr est interessant bien qu'il ait 8 cycles plus que le dbra */
	bsr ClrGplan_bsr /* 8*960=7680 */
	movem.l	virtual_pc,%d0-%d7/%a1-%a7
	rts

ClrGplan_bsr:
	movem.l %d0-%d7/%a0-%a6,-(%a7) 
	movem.l %d0-%d7/%a0-%a6,-(%a7)
	movem.l %d0-%d7/%a0-%a6,-(%a7)
	movem.l %d0-%d7/%a0-%a6,-(%a7) 
	movem.l %d0-%d7/%a0-%a6,-(%a7)
	movem.l %d0-%d7/%a0-%a6,-(%a7)
	movem.l %d0-%d7/%a0-%a6,-(%a7)
	movem.l %d0-%d7/%a0-%a6,-(%a7)
	movem.l %d0-%d7/%a0-%a6,-(%a7) 
	movem.l %d0-%d7/%a0-%a6,-(%a7)
	movem.l %d0-%d7/%a0-%a6,-(%a7)
	movem.l %d0-%d7/%a0-%a6,-(%a7) 
	movem.l %d0-%d7/%a0-%a6,-(%a7)
	movem.l %d0-%d7/%a0-%a6,-(%a7)
	movem.l %d0-%d7/%a0-%a6,-(%a7)
	movem.l %d0-%d7/%a0-%a6,-(%a7) /* 16*((8+7)*4)=960 */
	rts
")



Bon cette routine marche si l'on ne met pas les bsr et que l'on remplace par le contenu du bsr .. si je met le bsr j'ai une || illegal instruction || sad
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

23


Tout d'abord, préfère bsr.s, tu gagnes au moins 2 cycles par appel wink

ensuite ben.... Un bsr ça modifie la pile puisque l'adresse de retour y est poussée !!!
D'où plantage !

Tu ne sais plus programmer en ASM grin
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

24

Pour ta première question, c'est que si tu utilises tous les registres d'adresses, tu ne peux pas utiliser "a" (y). Mets "g" (y) à la place.
Pour le deuxième, c'est parce que bsr place l'adresse de retour sur la pile, c'est-à-dire en (a7)!

Et normalement, GNU as est suffisamment intelligent pour mettre bsr.s tout seul. Mais je ne sais pas s'il ne faut pas mettre jbsr au lieu de bsr seulement pour que GNU as optimise un branchement.
[edit]Edité par Kevin Kofler le 27-12-2001 à 15:36: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é

25

Avec la confirmation de Kevin smile
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

26

merciwink

bon va faloir que je dl Zguide moi parce que d'habitude a7 je m'en fou completement...
Erf crote va faloir trouver une autre optimisation...
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

27

Oublie ZGuide. Va télécharger le 68kguide de Jimmy Mårdell (la traduction française est dans la partie ASM de http://www.ti-cas.org au cas où tu ne sais pas l'anglais grin).
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é

28

Bon j'en ai marre j'y arrive paswink(:
voila un exemple:
ClrGPlan:
	movem.l	%d0-%d7/%a1-%a7,virtual_pc
	lea 		8704(%a0),%a0
	moveq #1,%d1; moveq #1,%d2;	moveq #1,%d3;	moveq #1,%d4;	moveq #1,%d5;	moveq #1,%d6;	moveq #1,%d7
	move.w %d1,%a1; move.w %d2,%a2; move.w %d3,%a3; move.w %d4,%a4; move.w %d5,%a5; move.w %d6,%a6; move.w %d7,%a7
	movem.l %d1-%d7/%a1-%a7,-(%a0)
	movem.l	virtual_pc,%d0-%d7/%a1-%a7
	rts
ClrGplan_loop:
	movem.l %d1-%d7/%a1-%a7,-(%a0)
	rts

si qqn peut me dire exactement ce que je doit faire pour que cela marche...
la j'ai une adr error alors que si je remplase le bsr par son contenu ca marche...
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

29

oupswink
c'est bon merci sbibiwink
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!