1

Bon voila, je voudrai des renseignements sur le passage par registre de tigcc..
comment fait on une fonction en asm demandant par exemple pour argument d0 d1 d2 a0 a6? (un exmple svp sinon je vais encore rien comprendre sad )
Comment peut on optimiser le passage par registre (registre que l'on peut detruire sans restaurer....)


Voila, merci

PS: je sais que c'est expliquer dans la doc de tigcc, mais moi pas comprendre, et moi peut de temps ... sad
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

2

void TaFonction(register int x asm("d0"),register int y asm("d1"),register int z asm("d2"), register void *p asm("a0"), register void *q asm("a6"));

>Comment peut on optimiser le passage par registre (registre que l'on peut detruire sans restaurer....)

d0, d1, d2, a0 et a1 peuvent être détruits sans les restaurer. Donc dans l'exemple ci-dessus, remplace a6 par a1 pour optimiser.
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

Ok merci beaucoup Kevin.
Neamoins, il semble que j'ai un probleme puisque tout les zip que je dl a partir de ie sont invalides alors que par dcc ils sont valides... donc je peut toujours pas essayer cette derniere version sad
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

4

As-tu Cygwin? Si oui:
wget http://tigcc.ticalc.org/beta/tigcc.zip
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é

5

Cygwin? je connais pas...

sinon j'ai une autre question concernant les fichiers *.a:
Dans plusieur de mes fonctions j'utilise des saut comme ceci:
move.l PxlPut_Label(%pc,%d2.w),%a1
jmp (%a1)
PxlPut_Label:
dc.l PxlWPut,PxlLPut...


comment peut on gerer de telles routines pour en faire un fichier *.a sachant que PxlWPut ... sont des fonctions a part entiere...
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

6

bon voila ce que j'ai fait:
j'ai dl la derniere version de tigcc, et j'ai ajouter ca dans la source de Xlib:
void PxlPut(register int x asm("d0"),register int y asm("d1"),register int c asm("d2"));

asm("
PxlPut:
	lsl.w			#2,%d2 
	move.l    PxlPut_Label(%pc,%d2.w),%a1; 
	jmp       (%a1) 
  
PxlPut_Label:
	dc.l PxlWPut,PxlLPut,PxlDPut,PxlBPut,PxlCPut

PxlWPut:
	move.l		CGplan,%a0
	add.w			#32,%d1
	add.w			#32,%d0
	add.w     %d1,%d1 
	move.w    %d0,%d3 
	lsr.w     #3,%d0  
	add.w     0(%a0,%d1.w),%d0 
	add.w     %d0,%a0  
	not.b     %d3 
	bclr.b   	%d3,(%a0)
	bclr.b   	%d3,6080(%a0)
	rts
PxlLPut:
	move.l		CGplan,%a0
	add.w			#32,%d1
	add.w			#32,%d0
	add.w     %d1,%d1 
	move.w    %d0,%d3 
	lsr.w     #3,%d0  
	add.w     0(%a0,%d1.w),%d0 
	add.w     %d0,%a0  
	not.b     %d3 
	bset.b   	%d3,(%a0)
	bclr.b   	%d3,6080(%a0)
	rts
PxlDPut:
	move.l		CGplan,%a0
	add.w			#32,%d1
	add.w			#32,%d0
	add.w     %d1,%d1 
	move.w    %d0,%d3 
	lsr.w     #3,%d0  
	add.w     0(%a0,%d1.w),%d0 
	add.w     %d0,%a0  
	not.b     %d3 
	bclr.b   	%d3,(%a0)
	bset.b   	%d3,6080(%a0)
	rts
PxlBPut:
	move.l		CGplan,%a0
	add.w			#32,%d1
	add.w			#32,%d0
	add.w     %d1,%d1 
	move.w    %d0,%d3 
	lsr.w     #3,%d0  
	add.w     0(%a0,%d1.w),%d0 
	add.w     %d0,%a0  
	not.b     %d3 
	bset.b   	%d3,(%a0)
	bset.b   	%d3,6080(%a0)
	rts
PxlCPut:
	move.l		CGplan,%a0
	add.w			#32,%d1
	add.w			#32,%d0
	add.w     %d1,%d1 
	move.w    %d0,%d3 
	lsr.w     #3,%d0  
	add.w     0(%a0,%d1.w),%d0 
	add.w     %d0,%a0  
	not.b     %d3 
	bchg.b   	%d3,(%a0)
	bchg.b   	%d3,6080(%a0)
	rts
	
PxlTest:
	move.l		CGplan,%a0
	add.w			#32,%d1
	add.w			#32,%d0
	add.w     %d1,%d1 
	move.w    %d0,%d3 
	lsr.w     #3,%d0  
	add.w     0(%a0,%d1.w),%d0 
	add.w     %d0,%a0  
	not.b     %d3 
	moveq			#0,%d0
	btst.b		%d3,(%a0)
	beq.s			_no_bit_plan1
	addq			#1,%d0
_no_bit_plan1:
	btst.b   	%d3,6080(%a0)
	beq.s			_no_bit_plan2
	addq			#2,%d0
_no_bit_plan2:
	rts
	
	
")

(pxlput et le label de ma fonction asm...)

malheureusement cela ne marche pas.. ca compile, mais ca fait comme si la fonction
n'etait pas appelée...
Faut il ajouter qqc? une balise ou autre?
[edit]Edité par TiMad le 31-03-2002 à 14:06:54[/edit]
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

7

ARG.... mais decidement ...
En plus du problme que j'ai dit dans le msg precedent, j'ai aussi ce probleme:
movea.w XGPlan(%Pc,%d1.w),%a0

>> ca me met bad expression
XGPlan est le nom d'un static char.... sad
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

8

>Cygwin? je connais pas...

Ignare! C'est le système Unix pour Win32, et c'est très pratique pour faire des manipulations style Unix (comme télécharger des fichiers par ligne de commande).
Mais comme tu ne connais pas, tu ne dois pas l'avoir.

>sinon j'ai une autre question concernant les fichiers *.a:
>Dans plusieur de mes fonctions j'utilise des saut comme ceci:
>move.l PxlPut_Label(%pc,%d2.w),%a1
>jmp (%a1)
>PxlPut_Label:
>dc.l PxlWPut,PxlLPut...
>
>comment peut on gerer de telles routines pour en faire un fichier *.a sachant que PxlWPut ... sont des >fonctions a part entiere...

Si tes sous-fonctions sont à usage interne seulement, tu mets tout dans le même fichier, sinon, tu mets chaque fonction dans un fichier séparé, le linker devrait faire en sorte que ça marche quand-même.

>bon voila ce que j'ai fait:
>j'ai dl la derniere version de tigcc, et j'ai ajouter ca dans la source de Xlib:
>
>[...]
>
>malheureusement cela ne marche pas.. ca compile, mais ca fait comme si la fonction
n'etait pas appelée...
>Faut il ajouter qqc? une balise ou autre?

Ta source m'a l'air de marcher correctement si je compile et teste sous VTI. Peut-être qu'il y a un problème avec tes routines d'affichage de pixels?

>ARG.... mais decidement ...
>En plus du problme que j'ai dit dans le msg precedent, j'ai aussi ce probleme:
>movea.w XGPlan(%Pc,%d1.w),%a0
>
> >> ca me met bad expression
>XGPlan est le nom d'un static char.... sad

Supprime static! Pour une variable globale, static veut dire "privé"!
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

ok merci, j'ai supprimer static.. mais ca me met toujours bad expression sad((((
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

10

Mets:
asm("movea.w XGPlan(%pc,%d1.w),%a0")
ou:
asm("movea.w XGPlan(%PC,%d1.w),%a0")

GNU as comprend pc et PC, mais pas Pc et pC.
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

Bon j'ai trouver l'erreur pour le pxlput.. cela venait du fait que j'utilisai D3 sans le restaurer...

Reste le probleme du movea a trouver sad
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

12

>Bon j'ai trouver l'erreur pour le pxlput.. cela venait du fait que j'utilisai D3 sans le restaurer...

Remplace d3 par d2 dans tes routines et c'est bon. (Comme ça pas besoin de sauvegarder et restaurer.)

>Reste le probleme du movea a trouver sad

Lis le message n°10.
[edit]Edité par Kevin Kofler le 31-03-2002 à 18:56:20[/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é

13

pour d2 je l'avais deja fait...
Bon pour le movea, il semblerai qu'avec pc, ca marche.
Il me reste plus que le problme de out of rang...

Mercismile
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

14

il doit y avoir un probleme:
en fait je le declare comme cela:
unsigned short XGPlan[161];

Et il me met un out of rang... je ne comprend vraiment pas sad
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

15

ARG...:
Value out of range
Value of -268 too large for field of 1 bytes at 0xc21


Pourquoi moi pas comprendresad
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

16

x(%pc,%dn) ne marche qu'avec -127<=x<=128.
En d'autres mots: tu ne pourras pas utiliser ce mode d'adressage. sad
Une alternative possible (je ne sais pas si c'est la meilleure):
lea XGPlan(%pc),%a0
movea.w 0(%a0,%d1.w),%a0

et si XGPlan peut être très loin (plus de 16383 octets de distance), il faudra même:
move.l #XGPlan,%a0
movea.w 0(%a0,%d1.w),%a0

ou, ce qui revient au même:
lea XGPlan:l,%a0
movea.w 0(%a0,%d1.w),%a0

[edit]Edité par Kevin Kofler le 01-04-2002 à 05:36:39[/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é

17

ok Merci bcp smile
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!