1

yop,

Suite à la release de PedroM 0.82 top, on lit ça sur le site :
[ 1 ] * Add a graph application;[ 2 ] * Add a ASM/C compiler application;


Je suppose que le [ 1 ] ne concerne que le CAS (PrettyPrint, saisie d'expressions, courbes de fonctions etc... ) ? Pas une interface graphique pour PedroM ?

Le [ 2 ] signifie l'intégration de GTC ? D'un autre compilateur ?

2

[1]: Possibilité de tracer des courbes y(x)=.... ou paramétré ou ...
Etc.

[2]: J'avais plutôt en tête GCC 1.42 ou modifier le linkeur pour supporter les flash appli.

3

Ok. Je posais pas cette question au hasard en fait... c'est la peine que je continue mon assembleur dédié à PedroM ? Sinon, je fais autre chose... Le terminal aurait besoin de travail, ainsi que le langage de script etc... tout comme les fichiers lockés, les fichiers archivés etc... je voulais t'en parler à part, mais là tu me prends de court ^^

4

Mais j'ai jamais dit que je ne comptais pas sur ton assembleur oui

5

Bon ok t'as répondré, merci grin

6

C’est une blague pour gcc 1.42 j’imagine ? C’est vraiment pas possible pour GTC (à cause de la licence ?) ?
Folco> Il ne tournera pas sur AMS ton assembleur ?
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

7

J'utilise plein de trucs qui sont super sous PedroM... Mais je pense que ce serait possible de le wrapper facilement pour tourner sous AMS.
J'utilise :
- la forme int main( short ARGC, char **ARGV) (100 fois plus simple que l'estack)
- pedrom::tmnam, pedrom::stdout/err, pedrom:tonguerintf, pedrom::fprintf, pedrom::unlink, pedrom::HeapRealloc et c'est ptêt pas fini
- trap #3 pour déréférencer
- le handler RAM_THROW

Un wrapper consisterait à parser l'estack pour y lire les arguments, créer une lib "pedrom", fake-lib reprenant les fonctions de l'OS (TIGCCLIB les implémente, j'ai déjà fait ça), un handler pour le trap #3, et un handler pour RAM_THROW (fline). Comme tu vois, c'est pas foncièrement compliqué, mais ça serait pas mal bourré de hacks.

A mon sens, AMS n'est pas une plateforme de développement idéale, et les gros progrès du CAS de PedroM devraient aider à une éventuelle migration (étant entendu que de toute façon, seul un geek serait intéressé par un assembleur on-calc).[nosmile]

8

Sasume (./6) :
C’est une blague pour gcc 1.42 j’imagine ?

Non, pourquoi ? C'est un test.
Sasume (./6) :
C’est vraiment pas possible pour GTC (à cause de la licence ?) ?

Ben, je laisse Pollux répondre. Il peut toujours faire une PedroM application (Voir Martial pour le format).

9

Les versions antiques de GCC avaient des consommations en mémoire beaucoup moins élevées, ils tournaient sur de vieux Unix 68k avec très peu de mémoire. Maintenant, si ça suffit pour tourner sur les calculatrices, je ne sais pas. Mais c'est à envisager. Mais il faudra aussi un linker qui va avec. La consommation de RAM de ld-tigcc se mesure en MO, donc c'est mal parti. 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é

10

Ouep, tant que GCC 1.42 ponds du source A68k compliant, ça fera l'affaire. tongue

11

Euh non, ça pond de la syntaxe MIT, genre %sp@- pour -(%sp). Je pense que la syntaxe Motorola n'a été rajoutée qu'aprè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é

12

ergh, pitié pas ça. sick Au mieux, ça se patche, au pire, ça se mit2asm tongue

13

Dans Boot.asm :
	; Init Key System
	jsr	GKeyFlush
	move.w	#24,(a7)
	jsr	OSInitBetweenKeyDelay
	move.w	#130,(a7)
	jsr	OSInitKeyInitDelay


Ca serait possible d'utiliser des constantes définies dans Const.h ? Je modifie la seconde valeur quand je me fais mon PedroM perso, ça serait mieux de modifier ça dans un header que dans le code du boot, non ?

14

Ok, fait.

15

Mici.

16

Dirien

17

Une optimisation dans Script.asm :
Routine d'origine :
;26 bytes, 108 clocks
ScriptReadLong:				; Size	Clocks
	move.b (a2),d0			; 2	8
	lsl.w #8,d0			; 4	22
	move.b 1(a2),d0			; 4	12
	swap d0				; 2	4
	move.b 2(a2),d0			; 4	12
	lsl.w #8,d0			; 4	22
	move.b 3(a2),d0			; 4	12
	rts				; 2	16


En plus petit et plus rapide, ça fait 75 cycles en moyenne vs 108 :
;24 bytes, 90/52 clocks
ScriptReadLong:				; Size	Clocks
	move.w	a2,d0			; 2	4
	btst.l	#0,d0			; 2	10
	beq.s	\Even			; 2
		move.l	-1(a2),d0	; 4	8+16
		lsl.l	#8,d0		; 4	24
		move.b	3(a2),d0	; 4	12
		rts			; 2	16
\Even:	move.l	(a2),d0			; 2	10+12
	rts				; 2	16



J'ai écrit ça aussi, ça fait la même taille mais c'est un poil plus lent:
;24 bytes, 98/52 clocks
ScriptReadLong:				; Size	Clocks
	move.w	a2,d0			; 2	4
	btst.l	#0,d0			; 2	10
	beq.s	\Even			; 2
		subq.l	#1,a2		; 2	8+8
		move.l	(a2)+,d0	; 2	12
		lsl.l	#8,d0		; 4	24
		move.b	(a2),d0		; 2	8
		subq.l	#3,a2		; 2	8
		rts			; 2	16
\Even:	move.l	(a2),d0			; 2	10+12
	rts				; 2	16

Je pense que la première solution proposée est donc la meilleure.

18

Si tu as testé et que ton test est bon, je prends, sinon j'attends embarrassed
Tout çà pour dire que commiter du code non testé, c'est mal. Et aussi qu'est-ce que tu es allez voir cette fonction au fond du trou de PedroM ? triso

19

PpHd (./18) :
Tout çà pour dire que commiter du code non testé, c'est mal.

Je fais ça ce soir ou demain, de toute façon j'attendais cette réponse, mais je ne voulais pas tester au cas où je me prenais une fin de non-recevoir. grin
PpHd (./18) :
Et aussi qu'est-ce que tu es allez voir cette fonction au fond du trou de PedroM ?

Je m'attendais à celle-là aussi grin Je lisais PedroM, tranquillement, par un bel après-midi ensoleillé, ça m'arrive régulièrement. cheeky
J'aime bien lire ton code, c'est comme ça que je prends les leçons du maitre. tongue

20

Bon, ben la première routine (la plus rapide) marche. smile
Script de test :
#!PedroM
3->a
if a = 3
echo truc
else echo machin

Ca affiche donc truc. le if est lu avec la lecture non-alignée, le 'a' qui suit avec la lecture alignée (3 bytes d'écart). Ca plante pas, ça retourne bien ce qu'on veut. Les octets copiés dans d0 sont bien ceux pointés par a2, quelque soit la parité, donc tout a l'air d'aller.

Patch :
--- Script.asm~	2010-01-19 22:26:59.000000000 +0100
+++ Script.asm	2010-03-11 15:36:55.000000000 +0100
@@ -111,13 +111,14 @@
 
 ; Read an (un)aligned long from a2
 ScriptReadLong:
-	move.b (a2),d0
-	lsl.w #8,d0
-	move.b 1(a2),d0
-	swap d0
-	move.b 2(a2),d0
-	lsl.w #8,d0
-	move.b 3(a2),d0
+	move.w	a2,d0
+	btst.l	#0,d0
+	beq.s	\Even
+		move.l	-1(a2),d0
+		lsl.l	#8,d0
+		move.b	3(a2),d0
+		rts
+\Even:	move.l	(a2),d0
 	rts
   
 ScriptElseCmd:


ps -> tu skippes les 3 premiers octets du script en l'ouvrant, ça fairait foirer si un éditeur de texte avait l'idée de ne pas mettre d'espace d'en-tête de ligne façon TI dans ses textes. Si tu ne skippes pas cet espace et fais un SkipSpace() avant, ça devrait marcher pareil.

21

Bon intégrer

22

"lsr.w #1,d0; bcc.s \Even" ?
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

23

8 cycles, vs 6 ou 10 pour le btst. A toi les tests tongue

24

Optimisation : remplacer tous les addq.l #imm,an par des addq.w. -4 cycles à chaque fois. Je ne fournis pas de patch, je te laisser cette joie. grin
Perso je suis en train d'updater mes sources, j'avais jamais percuté avant triso
Boulot à faire %)
Bcd.asm:	addq.l	#2,a0			; Skip Exponent
Bcd.asm:\Next		addq.l	#1,a0
Bcd.asm:	addq.l	#1,a0
Bcd.asm:	addq.l	#6,a7
Bcd.asm:	addq.l	#4,a7
Builtin.asm:		addq.l	#8,a7		; Pop args
Builtin.asm:		addq.l	#8,a7
Builtin.asm:		addq.l	#4,a2
Builtin.asm:		addq.l	#8,a7
Builtin.asm:			addq.l	#8,a7
Builtin.asm:		addq.l	#4,a7
Builtin.asm:\Ret	addq.l	#6,a7				; Pop the stack
Builtin.asm:	addq.l	#8,a7
Builtin.asm:		addq.l	#8,a7
Builtin.asm:	addq.l	#8,a7
Builtin.asm:\Ok2:	addq.l	#6,a7
Builtin.asm:		addq.l	#8,a7
Builtin.asm:		addq.l	#4,a7
Builtin.asm:		addq.l	#4,a7
Builtin.asm:	addq.l	#6,a7
Builtin.asm:		addq.l	#6,a7
Builtin.asm:		addq.l	#4,a7
Builtin.asm:	addq.l	#6,a7
Builtin.asm:		addq.l	#6,a7
Builtin.asm:			addq.l	#3,a0
Builtin.asm:				addq.l	#8,a7
Builtin.asm:				addq.l	#2,a0
Builtin.asm:		addq.l	#8,a3
Builtin.asm:		addq.l	#8,a3
Cert.asm:		addq.l	#8,a7
Cert.asm:	addq.l	#4,a7
Cert.asm:	addq.l	#4,a7
Cert.asm:	addq.l	#4,a7
Cert.asm:	addq.l	#4,a7
Cert.asm:		addq.l	#1,a4
Cert.asm:	addq.l	#6,a7
Cert.asm:		addq.l	#8,a7
Cert.asm:		addq.l	#6,a7
Dialog.asm:	addq.l	#4,a7
Dialog.asm:		addq.l	#6,a7
Dialog.asm:\Nothing	addq.l	#6,a7				; Pop the stack
Dialog.asm:	addq.l	#4,a7
Dialog.asm:		addq.l	#8,a7
Dialog.asm:\Ret	addq.l	#8,a7				; It returns 0 if continue
Dialog.asm:		addq.l	#8,a7
Dialog.asm:	addq.l	#4,a7
Dialog.asm:			addq.l	#6,a7
Dialog.asm:			addq.l	#4,a7
Dialog.asm:	addq.l	#8,a7
Dialog.asm:	addq.l	#4,a7
Dialog.asm:			addq.l	#6,a7
Dialog.asm:				addq.l	#4,a7
Dialog.asm:			addq.l	#6,a7
Dialog.asm:			addq.l	#6,a7
Dialog.asm:	addq.l	#4,a7
Dialog.asm:			addq.l	#2,a7
Dialog.asm:				addq.l	#8,a7
Dialog.asm:	addq.l	#4,a7
Dialog.asm:\Done	addq.l	#2,a7
Dialog.asm:			addq.l	#6,a7
Dialog.asm:			addq.l	#6,a7
Dialog.asm:	addq.l	#2,a7
Dialog.asm:	addq.l	#2,a7
Dialog.asm:	;addq.l	#2,a7
Dialog.asm:\ret		addq.l	#4,a7
Dialog.asm:		addq.l	#4,a7
Dialog.asm:		addq.l	#8,a7
Dialog.asm:		addq.l	#2,a7
Dialog.asm:		addq.l	#2,a7
Dialog.asm:		addq.l	#8,a7		
Dialog.asm:	addq.l	#8,a7
Dialog.asm:	addq.l	#4,a7
Dialog.asm:	addq.l	#6,a7
Dialog.asm:	addq.l	#4,a7
Estack2.asm:		addq.l	#1,a2			; One char
Estack2.asm:			addq.l	#2,a7
Estack2.asm:			addq.l	#4,a7			; Pop old ESI
Estack2.asm:		addq.l	#8,a7
Estack2.asm:\Function	addq.l	#1,a2			; Skip '('
Estack2.asm:		addq.l	#1,a2			; Advance String Ptr
Estack2.asm:	addq.l	#6,a7
Estack2.asm:	addq.l	#4,a7
Estack2.asm:		addq.l	#4,a7
Estack2.asm:		addq.l	#4,a7
Estack2.asm:	addq.l	#2,a7
Estack2.asm:	addq.l	#2,a7
Estack2.asm:		addq.l	#1,a5
Estack2.asm:			addq.l	#8,a7
Estack2.asm:			addq.l	#4,a2
Estack2.asm:			addq.l	#4,a7
Estack2.asm:		addq.l	#1,a1
Estack2.asm:	addq.l	#4,a7
Estack2.asm:		addq.l	#4,a7
Estack2.asm:		addq.l	#4,a7
Estack.asm:	addq.l	#4,a7
Estack.asm:	addq.l	#2,a7
Estack.asm:	addq.l	#1,a0
Estack.asm:	addq.l	#2,a0
Estack.asm:	addq.l	#1,a1
Estack.asm:	addq.l	#1,a0
Estack.asm:	addq.l	#8,a7
Estack.asm:	addq.l	#8,a7
Estack.asm:	addq.l	#8,a7
Estack.asm:\EndTag		addq.l	#1,a0		; Do not skip these tags!
Estack.asm:	addq.l	#2,a7
Estack.asm:	addq.l	#1,a0			; Skip LAST tag
Estack.asm:	addq.l	#8,a7
Estack.asm:	addq.l	#4,a7
Estack.asm:	addq.l	#1,a0		; Skip Current TAG
Estack.asm:	addq.l	#4,a7
Extra.asm:		addq.l	#6,a7
Flash.asm:\NoDelete	addq.l	#2,a7			; Skip Src
Flash.asm:		addq.l	#2,a7			; EM_abandon return a non NULL value if success
Flash.asm:\Error:	addq.l	#4,a7	
Flash.asm:\End	addq.l	#6,a7
Graph.asm:	addq.l	#1,a0
Graph.asm:	addq.l	#1,a1
Graph.asm:	addq.l #1,a1
Graph.asm:	addq.l #1,a1
Graph.asm:		addq.l	#2,a7
Graph.asm:		addq.l	#4,a7	; pop return1
Graph.asm:	addq.l	#2,a7
Graph.asm:	addq.l	#2,a7
Graph.asm:	addq.l	#2,a7
Graph.asm:	addq.l	#2,a7
Graph.asm:	addq.l	#2,a7
Graph.asm:	addq.l	#4,a3			; 3rd point
Graph.asm:	addq.l	#2,a7
Heap.asm:\Ok	addq.l	#4,a7			; Pop the saved size
Heap.asm:\error	addq.l	#2,a7
Heap.asm:	addq.l	#4,a7
Heap.asm:	addq.l	#4,a7
Ints.asm:		addq.l	#2,a7
Ints.asm:		addq.l	#4,a0
Ints.asm:		addq.l	#2,a0
Ints.asm:		addq.l	#1,a0
Kernel.asm:	addq.l	#2,a0		; Skip the PPG file size
Kernel.asm:		addq.l	#2,a0		; Src is here
Kernel.asm:		addq.l	#8,a7
Library.asm:	addq.l	#8,a7
Link.asm:		addq.l	#6,a7
Link.asm:	addq.l	#2,a7		; Pop LIO timer
Link.asm:		addq.l	#6,a7
Link.asm:	addq.l	#6,a7
Link.asm:		addq.l	#4,a0			; Skip Data Len (We don't care about it !)
Link.asm:		addq.l	#6,a7	
Link.asm:			addq.l	#8,a7		
Link.asm:				addq.l	#6,a0
Link.asm:				addq.l	#1,a3			; Skip first (0)
Link.asm:		addq.l	#6,a0			; Len
Link.asm:		addq.l	#2,a7
Link.asm:		addq.l	#5,a0			; Skip Size.l (Nothing to read) and Type (Nothing to read).
Link.asm:	addq.l	#2,a7
Link.asm:	addq.l	#4,a7
Link.asm:		addq.l	#4,a7
Link.asm:	addq.l	#1,a0			; Skip 0
Memstr.asm:\S2_End:	addq.l	#1,a1
Memstr.asm:		addq.l	#1,a0
Memstr.asm:		addq.l	#1,a1
Misc2.asm:	addq.l	#8,a7
Misc2.asm:	addq.l	#6,a7
Misc2.asm:	addq.l	#6,a7
Misc2.asm:	addq.l	#1,a1
Misc2.asm:\final_calc	addq.l	#1,a0
Misc2.asm:		addq.l	#4,a7
Misc2.asm:	addq.l	#2,a0				; Skip Handle
Misc2.asm:\Done	addq.l	#6,a7				; Pop frame
Misc.asm:	addq.l	#4,a7				; Pop return address (should be the same as a1)
Misc.asm:	addq.l	#2,a7				; Pop APD timer
Misc.asm:	addq.l	#2,a7
Misc.asm:	addq.l	#2,a7
Misc.asm:	addq.l	#1,a0
Process.asm:		addq.l	#2,a7
Script.asm:	addq.l	#3,a0				; Skip first infos.
Script.asm:	addq.l #1,a2
Script.asm:	addq.l	#3,a2
Script.asm:	addq.l	#6,a2
ShellIO.asm:	addq.l	#4,a7
ShellIO.asm:\exit	addq.l	#8,a7
ShellIO.asm:	addq.l	#1,a1
ShellIO.asm:	addq.l	#1,a1
ShellIO.asm:	addq.l	#6,a7
ShellIO.asm:\Done1:	addq.l	#1,a1					; *a1 == ' ', so skip again ' '
ShellIO.asm:		addq.l	#4,a2				; Next entry
ShellIO.asm:\FDone1	addq.l	#1,a1
ShellIO.asm:	addq.l	#2,a7
ShellIO.asm:	addq.l	#8,a7
ShellIO.asm:	addq.l	#4,a7
ShellIO.asm:		addq.l	#4,a7
ShellIO.asm:		addq.l	#4,a7
ShellIO.asm:	addq.l	#8,a7
System.asm:\Find:	addq.l	#6,a7
System.asm:	addq.l	#4,a7
System.asm:\Skip	addq.l	#1,a0		; Skip this character
System.asm:			addq.l	#1,a2		; Skip first '"'
System.asm:		addq.l	#1,a2		; Skip the 2 next chars '2>'
System.asm:		addq.l	#1,a2		;  Skip the next char '>' or '<'
System.asm:		addq.l	#1,a2		;  Skip the next char '>'
System.asm:			addq.l	#6,a7
System.asm:		addq.l	#2,a1			; default: write
System.asm:			addq.l	#1,a0		; Skip second char '>'
System.asm:			addq.l	#2,a1		; mode: append
System.asm:		addq.l	#4,a7
System.asm:	addq.l	#6,a7		; Pop stack
System.asm:\no:		addq.l	#2,a2			; Next command
System.asm:		addq.l	#2,a7				; Pop pushed Handle
System.asm:		addq.l	#4,a7				; Pop its address
System.asm:	addq.l	#4,a7				; Fix stack Ptr
System.asm:		addq.l	#1,a2
System.asm:		addq.l	#4,a7
Tib.asm:		addq.l	#4,a7				; Pop adress
Tib.asm:		addq.l	#8,a7				; Update stack ptr
Tib.asm:	addq.l	#6,a7			; Pop args of call
Tib.asm:		addq.l	#1,a4
Vat.asm:	addq.l	#4,a7
Vat.asm:\Cont	addq.l	#4,a7
Vat.asm:	addq.l	#2,a0		; skips the 1st word (Max items)
Vat.asm:	addq.l	#6,a7
Vat.asm:	addq.l	#2,a0		; Skip max files
Vat.asm:	addq.l	#2,a0		; Skip max files
Vat.asm:	addq.l	#1,a0
Vat.asm:	addq.l	#6,a7
Vat.asm:	addq.l	#1,a1
Vat.asm:		addq.l	#2,a7		; Pop size 
Vat.asm:\error	addq.l	#4,a7		; Pop a1
Vat.asm:	addq.l	#1,a1			; a1 -> Name
Vat.asm:	addq.l	#1,a1			; A1 -> ANSI Name of the folder to lock
Vat.asm:	addq.l	#2,a0
Vat.asm:	addq.l	#1,a1					; Check for Src name
Vat.asm:			addq.l	#1,a1			; Find it 
Vat.asm:\end2:		addq.l	#4,a7
Vat.asm:	addq.l	#1,a1
Vat.asm:	addq.l	#1,a1
Vat.asm:	addq.l	#4,a7				; Skip CUR_FOLDER_STR address
Vat.asm:		addq.l	#2,a7			; Skip Folder Handle
Vat.asm:	addq.l	#6,a7
Vat.asm:	addq.l	#1,a1
Vat.asm:	addq.l	#1,a0
Vat.asm:	addq.l	#1,a0			; ANSI Ptr
Vat.asm:		addq.l	#1,a1
Vat.asm:	addq.l	#2,a0			; Skip MAX item
Vat.asm:			addq.l	#2,a0
Vat.asm:				addq.l	#2,a0			; Skip Number of entries
Vat.asm:	addq.l	#6,a7
Vat.asm:	addq.l	#6,a7
Vat.asm:	addq.l	#1,a1
Vat.asm:	addq.l	#1,a0
Vat.asm:	addq.l	#2,a7
Vat.asm:	addq.l	#6,a7
Vat.asm:\NoFree			addq.l	#2,a7				
Vat.asm:			addq.l	#2,a7
Vat.asm:	addq.l	#6,a7
Vat.asm:		addq.l	#8,a7
Vat.asm:		addq.l	#4,a7
Vat.asm:	addq.l	#6,a7
Vat.asm:	addq.l	#6,a7
Vat.asm:		addq.l	#4,a7
Vat.asm:			addq.l	#6,a7	
Vat.asm:\invalid2	addq.l	#2,a7
Vat.asm:	addq.l	#4,a7
Vat.asm:	addq.l	#4,a7
Vat.asm:	addq.l	#4,a7
Vat.asm:\Done:	addq.l	#1,a0
Vat.asm:	addq.l	#4,a7
Vat.asm:	addq.l	#6,a7
Vat.asm:		addq.l	#6,a7
Vat.asm:			addq.l	#4,a7
Vat.asm:	addq.l	#4,a7			; SKip return address
Vectors.asm:	addq.l	#2,sp
Window.asm:	addq.l	#4,a7
Window.asm:	addq.l	#2,a7
Window.asm:		addq.l	#8,a7
Window.asm:		addq.l	#4,a7
Window.asm:		addq.l	#8,a7
Window.asm:	addq.l	#8,a7	
Window.asm:\Quit:	addq.l	#8,a7
Window.asm:	addq.l	#8,a7		; Pop Clip & Rect
Window.asm:\Quit:	addq.l	#8,a7
Window.asm:	addq.l	#4,a7
Window.asm:	addq.l	#4,a7
Window.asm:\end	addq.l	#6,a7
Window.asm:	addq.l	#2,sp
Window.asm:	addq.l	#4,a7

Je pense qu'un script devrait faciliter la tâche cheeky (et je suis gentil, j'ai pas listé les subq embarrassed)

Le pire est que tu fais parfois des addq.w #imm,an. J'ai pas vérifié si c'était parce que tu étais sûr d'être dans une BSS avec une adresse sur deux octets, ou dans la table des vecteurs ou que sais-je. Mais parfois (2 ou 3 fois), tu le fais aussi pour sp.

25

Folco (./24) :

Optimisation : remplacer tous les addq.l #imm,an par des addq.w. -4 cycles à chaque fois. Je ne fournis pas de patch, je te laisser cette joie. biggrin.gif
Perso je suis en train d'updater mes sources, j'avais jamais percuté avant triso.gif


T'es sûr ? Pour dn c'est vrai. Mais pour an c'était faux il me semble (et ca à du sens puisque même si on ajoute 1 16 bits, il faut mettre à jour toute l'adresse).

26

lea $1234FFFF,a0
addq.w #1,a0

=> a0 = $12350000
Ca me semble bon, non ? Il y a apparemment extension de l'entier, puis addition, puis copie dans le registre. J'ai testé ce matin au débuggueur, (avec ces valeurs-là) je le refais asap.

27

C'est ce que je dis. Je dis juste que c'est 8 cycles pour addq.w #8,an

28

Pas sûr, mais je ne trouve pas la signification de l'astérisque dans la doc de Motorola :/
The numbers of clock periods shown in Table 8-5 include the times to fetch immediate
operands, perform the operations, store the results, and read the next operation. The total
number of clock periods, the number of read cycles, and the number of write cycles are
shown in the previously described format. The number of clock periods, the number of
read cycles, and the number of write cycles, respectively, must be added to those of theeffective address calculation where indicated by a plus sign (+).

G4MR

Et il paraitrait que le compteur de cycles de VTI n'est pas fiable. Par contre, pour subq, c'est toujours 8 cycles, qu'on soit en word ou en long. Mais pourquoi Motorola aurait-il donné 4 cycles pour addq.w #x,an, si de toute façon l'instruction prenait toujours les 8 cycles d'un addq.l ?

edit -> Oublié de mettre l'entête du tableau roll C'est la colonne du milieu pour <an> (à gauche dn, à droite les autres adressages)

29

J'avais mesuré sur ma calc : pas de différences. Ensuite, il faudrait voir chez d'autres, et la signification de l'astérisque.

30

J'ai pensé à faire un bench sur 100 000 000 instructions, oui grin Au fait, c'était bien sur ta calc, pas VTI ?

Mais que signifie le 4(1/0)* alors, s'il ne peut arriver puisqu'on aura toujours l'extension.