img
@_ö
(10:00)  Bienvenue ! - Inscrivez vous pour poster ! -
@Boo + 44 inconnu(s)

Login :  Mot de passe :      Se souvenir de moi.  Mot de passe perdu ?
/!\:: Cliquez ici pour vous inscrire et poster, créer des sujets ou des forums ! ::/!\
 « - 1/2 - Suivant » :: Pages
 Index » Forum informatique & développement :: Forum Ti 89, Titanium / 92+ / Voyage 200 et TI-Nspire » Algorithmie et optimisation (31r) » Ma technique du jour
./Post de départ - Ma technique du jour
23.01.2004 - 12377
12:15  Folco_ - Posté : 07-03-2008  M   Signaler un abus Signaler un contenu inapproprié

Quand vous écrivez ça :
	movem.l	%a2-%a3/%d3-%d5,-(%sp) 
	[...]	 
	move.w	#mode,-(%sp)			|sp - 2 
	pea.l	String(%pc)			|sp - 6 
	move.w	y(%pc),-(%sp)			|sp - 8 
	move.w	x(%pc),-(%sp)			|sp - 10 
	RC	DrawStr 
	lea.l	10(%sp),%sp 
	[...] 
	movem.l	(%sp)+,%a2-%a3/%d3-%d5 
	rts

Vous faites un lea pour restaurer la pile (4 octets, puis ça bouffe des cycles parce que c'est long à décoder cette cochonnerie).

Je vous propose ça :
	movem.l	%a2-%a3/%d0/%d3-%d5,-(%sp)	|rajoutez un petit d0, ou d1 ou autre, mais en-dessous de ce que voulez garder 
	[...]	 
	move.w	#mode,(%sp)			|écrasez-le sans pitié, puis à mon avis ç gagne des cycles de pas post-décrémenter la pile 
	pea.l	String(%pc)			|sp - 4 
	move.w	y(%pc),-(%sp)			|sp - 6 
	move.w	x(%pc),-(%sp)			|sp - 8 
	RC	DrawStr 
	addq.l	#8,%sp				|et voilà ! deux octets et encore des cycles grapillés ! 
	[...] 
	movem.l	(%sp)+,%a2-%a3/%d1/%d3-%d5	|vous pouvez même en trasher un autre si le coeur vous en dit 
	rts


Et voilà ! Formidable, n'est-il pas ? Je suis sûr que cette technique (prononcer : "teuchnaïk") vous sera profitable à tous ! (j'ai bien dit : "à tous !". Enjoy et bonne journée. #cool#

Edité par Martial Demolins le 07-03-2008 à 12:28:38.

Mon journal de bord <flux rss manuel> asTI68k : WIP </flux>

Le modernisme ne diffère guère de la libre pensée absolue que par sa prétention de demeurer catholique.
./Publicité AdSense
./1
01.04.2002 - 19680
12:19  Orion_ - Posté : 07-03-2008  M   Signaler un abus Signaler un contenu inapproprié

heu honnêtement, gagner 2 ou 4 pauvres cycles quand on utilise des romcall c'est comment dire ... useless ? %)
(sans parler du movem ...)


Retro Game Programming !

`*-._ website - vimeo channel
./2
23.01.2004 - 12377
12:22  Folco_ - Posté : 07-03-2008  M   Signaler un abus Signaler un contenu inapproprié

je sais, au niveau cycle, c'est nul :D (encore que ce rom call me semble beaucoup plus rapide sous PedroM que sous AMS).
C'était surtout pour les deux octets du lea->addq. Ca, j'y tiens. #oui#


Mon journal de bord <flux rss manuel> asTI68k : WIP </flux>

Le modernisme ne diffère guère de la libre pensée absolue que par sa prétention de demeurer catholique.
./3
28.10.2001 - 7330
12:55  Lionel Debroux - Posté : 07-03-2008  M   Signaler un abus Signaler un contenu inapproprié

Le GCC de TIGCC est capable (enfin, à une époque, il l'a été, je n'ai pas vérifié récemment) de réutiliser (sp) au lieu d'utiliser -(sp), à partir du deuxième appel à une fonction stkparm (si assez de données ont été empilées lors du premier appel, naturellement) :)

addq.l #8,%sp |et voilà ! deux octets et encore des cycles grapillés !

Deux octets gaspillés par rapport à lea 8(sp), sp - mais aucun cycle.


Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
./4
23.01.2004 - 12377
13:08  Folco_ - Posté : 07-03-2008  M   Signaler un abus Signaler un contenu inapproprié

tiens, marrant, lire un entier sur deux octets en plus ne prend pas de temps ?


Mon journal de bord <flux rss manuel> asTI68k : WIP </flux>

Le modernisme ne diffère guère de la libre pensée absolue que par sa prétention de demeurer catholique.
./5
30.06.2001 - 49992
13:25  Godzil - Posté : 07-03-2008  M   Signaler un abus Signaler un contenu inapproprié

non, c'est plus lent de lire un char ou un long sur un 68000 que de lire un short car le bus de donnée est... sur 16bits


Proud to be CAKE©®™
The cake is a lie! - Love your weighted companion cube

->986-Studio's Wonder Project!<-

./6
23.01.2004 - 12377
14:00  Folco_ - Posté : 07-03-2008  M   Signaler un abus Signaler un contenu inapproprié

Oui et non Godzil, lire un long est plus long, mais lire un octet ou deux, c'est pareil.

Et il y a aussi le fait que le bus de donné est pas utilisé pour un addq.l #imm,%an, vu que le '8' est codé directement dans le corps des deux octets de l'instruction, alors que pour lea, l'offset est écrit en dur dans les octets 2 et 3 de l'instruction.

Ca montre juste qu'il met du temps à décoder un addq (8 cycles pour l'instruction complète).


Mon journal de bord <flux rss manuel> asTI68k : WIP </flux>

Le modernisme ne diffère guère de la libre pensée absolue que par sa prétention de demeurer catholique.
./7
30.06.2001 - 49992
14:05  Godzil - Posté : 07-03-2008  M   Signaler un abus Signaler un contenu inapproprié

Pour l'octet c'est non dans un cas, si l'octet est a une valeur impaire, tu as un décalage a faire (enfin pas toi, le cpu)


Proud to be CAKE©®™
The cake is a lie! - Love your weighted companion cube

->986-Studio's Wonder Project!<-

./8
23.01.2004 - 12377
14:07  Folco_ - Posté : 07-03-2008  M   Signaler un abus Signaler un contenu inapproprié

Tu es sûr de toi ? Il ne parle pas du fait qu'un octet soit rendu à une adresse paire ou impaire dans le 68kPM...
Par contre, si tu veux lire un word à une adresse imparaire, oui, ça va te prendre du temps. %)


Mon journal de bord <flux rss manuel> asTI68k : WIP </flux>

Le modernisme ne diffère guère de la libre pensée absolue que par sa prétention de demeurer catholique.
./9
30.06.2001 - 49992
14:08  Godzil - Posté : 07-03-2008  M   Signaler un abus Signaler un contenu inapproprié

oui je suis sur, meme que sur certain révision du 68000 lire un octet sur une @ impaire est impossible directement

faudrait que j'aille chercher ma doc sur le 68000

mais si tu regarde le bus A du 68000 il n'y a pas de A0 (bon il est possible de "l'émuler" via d'autre signaux, mais bon)


Proud to be CAKE©®™
The cake is a lie! - Love your weighted companion cube

->986-Studio's Wonder Project!<-

./10
10.06.2001 - 32551
16:17  Kevin Kofler - Posté : 07-03-2008  M   Signaler un abus Signaler un contenu inapproprié

Un accès .b prend le même temps que l'adresse soit paire ou impaire.


Mes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
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
30.06.2001 - 49992
16:31  Godzil - Posté : 07-03-2008  M   Signaler un abus Signaler un contenu inapproprié

C'est que le 68k qu'on a en est capable


Proud to be CAKE©®™
The cake is a lie! - Love your weighted companion cube

->986-Studio's Wonder Project!<-

./12
16.06.2001 - 55182
16:43  squalyl - Posté : 07-03-2008  M   Signaler un abus Signaler un contenu inapproprié

pourquoi ce serait différent sur d'autres versions du 68k?
a mon avis le shifter doit être en hard sur le bus quand on doit lire un byte sur d8-d15 avec /UDS, nan?


For most people, good enough is near enough. For the few, good enough is never enough.
Nspire wiki
CONDUCTEUR Va-et-vient Des QUATRE MANCHE AVEC DES DIODES
./13
01.04.2005 - 756
17:59  frost - Posté : 07-03-2008  M   Signaler un abus Signaler un contenu inapproprié



Codeur retraité coulant des jours paisibles...

Je raconte ma vie: http://blog.frosties.org/

./14
23.01.2004 - 12377
18:15  Folco_ - Posté : 07-03-2008  M   Signaler un abus Signaler un contenu inapproprié

Euh... connu tout ça, et j'appele pas ça de l'"extrême optimising", mais de l'optimisation de base :D

Mais merci pour le lien. :)


Mon journal de bord <flux rss manuel> asTI68k : WIP </flux>

Le modernisme ne diffère guère de la libre pensée absolue que par sa prétention de demeurer catholique.
./15
30.06.2001 - 49992
18:53  Godzil - Posté : 07-03-2008  M   Signaler un abus Signaler un contenu inapproprié

squalyl (./12) :
pourquoi ce serait différent sur d'autres versions du 68k?
a mon avis le shifter doit être en hard sur le bus quand on doit lire un byte sur d8-d15 avec /UDS, nan?

parce qu'entre les premiers sortit et les derniers sortit le coeur a evolué meme en restant compatible. Je prendrais comme exemple le 6502 qui entre les premieres et dernieres version (le 65C02, la version CMOS) il y a de legere différence au niveau du nombre de cycles, mais surtout des instructions en plus, pourtant ce sont des 6502

tout ça pour dire que quelque a moins que le 68000 a chercher directement a une adresse impaire la valeur, il faut, pour un octet, forcement un shift, alors que quand l'octet est a une adresse pair, le shift n'est pas utile, donc ça rajoute forcement du temps de calcul, meme si c'est juste un simple cycle en plus


Proud to be CAKE©®™
The cake is a lie! - Love your weighted companion cube

->986-Studio's Wonder Project!<-

./16
28.10.2001 - 7330
19:18  Lionel Debroux - Posté : 07-03-2008  M   Signaler un abus Signaler un contenu inapproprié

D'après les timings des tables du 68000 User's Manual de Motorola, ça n'a pas l'air de faire de différence entre byte et word ?

La seule particularité du 68000 (qui ne se traduit peut-être pas sur les processeurs suivants de la famille, je ne sais pas) avec la gestion des bytes/words que je connaisse, est le shift rapide à gauche de 8 rangs:
move.b <ea>, -(sp)
move.w (sp)+, dn
move.b <ea>, (sp)+


à la place de

move.b <ea>, dn
lsl.w #8, dn
move.b <ea>, dn


(même taille, plus lent).
La routine de décompression ttunpack fait grand usage de cette optimisation.


Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
./17
23.01.2004 - 12377
19:52  Folco_ - Posté : 07-03-2008  M   Signaler un abus Signaler un contenu inapproprié

Godzil => tu nous fais un bench pour voir ? %) Sur quelques milliards de lecture, ça devrait commencer à devenir visible %)


Mon journal de bord <flux rss manuel> asTI68k : WIP </flux>

Le modernisme ne diffère guère de la libre pensée absolue que par sa prétention de demeurer catholique.
./18
11.06.2001 - 18903
20:22  PpHd - Posté : 07-03-2008  M   Signaler un abus Signaler un contenu inapproprié

./0: Connu. J'ai du l'utiliser quelque part çà (dans PedroM ou genlib)



./19
10.06.2001 - 21295
20:23  Thibaut - Posté : 07-03-2008  M   Signaler un abus Signaler un contenu inapproprié

GCC le fait :p
GTC je ne sais pas.


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.
./20
23.01.2004 - 12377
20:28  Folco_ - Posté : 07-03-2008  M   Signaler un abus Signaler un contenu inapproprié

PpHd (./18) :
./0: Connu. J'ai du l'utiliser quelque part çà (dans PedroM ou genlib)

Oui mais à toi, je ne prétends rien apprendre :D


Mon journal de bord <flux rss manuel> asTI68k : WIP </flux>

Le modernisme ne diffère guère de la libre pensée absolue que par sa prétention de demeurer catholique.
./21
27.04.2006 - 30199
22:04  Zerosquare - Posté : 07-03-2008  @_ö   Signaler un abus Signaler un contenu inapproprié

Godzil (./9) :
oui je suis sur, meme que sur certain révision du 68000 lire un octet sur une @ impaire est impossible directement
Je veux bien te croire, mais ça paraît quand même énorme. Ça casserait la compatibilité avec énormément de code, et c'est franchement pénible de ne pas avoir d'accès byte, en particulier pour les écritures (qui ne sont plus atomiques, du coup).

Godzil (./15) :
tout ça pour dire que quelque a moins que le 68000 a chercher directement a une adresse impaire la valeur, il faut, pour un octet, forcement un shift, alors que quand l'octet est a une adresse pair, le shift n'est pas utile, donc ça rajoute forcement du temps de calcul, meme si c'est juste un simple cycle en plus
Euh, je suis de l'avis de squalyl, y'a de fortes chances que ce soit implémenté sous la forme d'un multiplexeur et pas d'un shift, et dans ce cas le temps de traitement c'est pas de l'ordre du cycle, mais du temps de propagation dans les éléments logiques %)


Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
./22
10.06.2001 - 21295
22:13  Thibaut - Posté : 07-03-2008  M   Signaler un abus Signaler un contenu inapproprié

9 ns pour la logique TTL si mes souvenirs sont bons. Pour le MOS, c'est combien ?


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.
./23
27.04.2006 - 30199
22:19  Zerosquare - Posté : 07-03-2008  @_ö   Signaler un abus Signaler un contenu inapproprié

Ça dépend du process de fabrication #hehe#


Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
./24
30.06.2001 - 49992
00:52  Godzil - Posté : 08-03-2008  M   Signaler un abus Signaler un contenu inapproprié

Zerosquare (./21) :
[cite] Godzil (./9) :
oui je suis sur, meme que sur certain révision du 68000 lire un octet sur une @ impaire est impossible directement
Je veux bien te croire, mais ça paraît quand même énorme. Ça casserait la compatibilité avec énormément de code, et c'est franchement pénible de ne pas avoir d'accès byte, en particulier pour les écritures (qui ne sont plus atomiques, du coup).

quand tu n'a pas de ligne 0 sur le bus d'addresse il faut bien faire avec !

Faudrait que je retrouve mes infos la dessus, mais je me souviens d'une carte 68000 ou accéder en 8bit était plus que déconseillé...


Proud to be CAKE©®™
The cake is a lie! - Love your weighted companion cube

->986-Studio's Wonder Project!<-

./25
26.05.2006 - 349
05:51  KillerX - Posté : 08-03-2008  M   Signaler un abus Signaler un contenu inapproprié

Il me semble que, dans la doc présentée par martial sur le forum assembleur, on parle de deus lignes appelées UDS et LDS, qui permettent de lire soit la mémoire impaire, soit la mémoire paire, ou les deux... Si j'ai bien compris, le processeur 68000 peut donc lire sur un octet impair, un octet pair, ou les deux à la fois...


Je me souviens
Ad mari usque ad mare

GENERATION 23: The first time you see this, copy it into your sig on any forum and add 1 to the generation. Social experiment.
./26
30.06.2001 - 49992
11:33  Godzil - Posté : 08-03-2008  M   Signaler un abus Signaler un contenu inapproprié

oui mais utiliser UDS/LDS pour cabler la mémoire n'est pas indispensable (et oui)


Proud to be CAKE©®™
The cake is a lie! - Love your weighted companion cube

->986-Studio's Wonder Project!<-

./27
23.01.2004 - 12377
21:47  Folco_ - Posté : 08-03-2008  M   Signaler un abus Signaler un contenu inapproprié

Mais arrêtez de vous battre, apparemment c'est pas toujours possible, mais sur TI on peut, ça va pas chercher plus loin hein :D


Mon journal de bord <flux rss manuel> asTI68k : WIP </flux>

Le modernisme ne diffère guère de la libre pensée absolue que par sa prétention de demeurer catholique.
./28
23.01.2004 - 12377
22:26  Folco_ - Posté : 22-03-2008  M   Signaler un abus Signaler un contenu inapproprié

Amélioration, toujours du jour :
FunctionSection DrawWindowsFrame 
	movem.l	%a2/%d0/%d3-%d6,-(%sp)		|d0 will be trashed 
	RC	ScreenClear 
[...] 
	move.w	#A_NORMAL,(%sp)			|mode 
	move.w	(%a2),-(%sp)			|y1 
	move.w	SCR_WIDTH(%fp),-(%sp)		|x1 
	move.w	(%a2)+,-(%sp)			|y0 
	clr.w	-(%sp)				|x0 
	RC	DrawLine 
	addq.l	#8,%sp 
[...] 
DrawWindowsFrameEnd: 
	movem.l	(%sp)+,%a2/%d0/%d3-%d6 
	rts

Version optimisée :
FunctionSection DrawWindowsFrame 
	movem.l	%a2/%d0/%d3-%d6,-(%sp)		|d0 will be trashed 
	RC	ScreenClear 
[...] 
	move.w	#A_NORMAL,(%sp)			|mode 
	move.w	(%a2),-(%sp)			|y1 
	move.w	SCR_WIDTH(%fp),-(%sp)		|x1 
	move.w	(%a2)+,-(%sp)			|y0 
	clr.w	-(%sp)				|x0 
	RC	DrawLine 
	|addq.l	#8,%sp				|don't pop args  /!\see DrawWindowsFrameEnd 
[...] 
DrawWindowsFrameEnd: 
	movem.l	(%sp)+,%a2/%d0-%d6		|added d1-d2 to pop status line drawing arguments 
	rts



Mon journal de bord <flux rss manuel> asTI68k : WIP </flux>

Le modernisme ne diffère guère de la libre pensée absolue que par sa prétention de demeurer catholique.
./29
10.06.2001 - 32551
00:22  Kevin Kofler - Posté : 23-03-2008  M   Signaler un abus Signaler un contenu inapproprié

Et quand tu changes ton code, tu ne comprendras pas pourquoi tu as un Address Error ou une Illegal Instruction...


Mes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
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é
./Publicité AdSense
 « - 1/2 - Suivant » :: Pages
 Index » Forum informatique & développement :: Forum Ti 89, Titanium / 92+ / Voyage 200 et TI-Nspire » Algorithmie et optimisation (31r) » Ma technique du jour

./Poster un nouveau message. - Ouvrir dans une nouvelle fenêtre
Login : Mot de passe :

url - image - media  
spoiler - pre - fixed
quote - box - hr
poll - code





Smileys
Smileys perso
Pièce jointe
     Flood control (?) :    
Les messages postés sont la propriété de leurs auteurs. Nous ne sommes pas responsables de leurs contenus.

» yN ©1624 - Aide / Charte / Crédits
46ms | Statistiques