150

Kevin Kofler
:
Pollux
:
Kevin Kofler
:
Pollux
: Et aussi que tu préfères la "validité" d'un programme à la taille qu'il prend (même si cette "validité" consiste à faire gagner 1 bit de seed pour prendre une 30aine d'octets en plus). Bizarrement, cette fois-ci c'est le contraire, alors que 99.000% est très inférieur à 99.994%
Tu compares des pourcentages qui ne sont pas comparables.
Si, ce sont des taux d'erreur pour un gain d'une 20aine d'octets [en admettant que le gain ne soit que d'une 20aine d'octets, ce dont je parle plus bas]. Et même mieux : l'erreur est encore plus grave dans le cas de tes "optimisations".

Désolé, je ne comprends pas du tout d'où tu sors ces chiffres. Si tu pouvais expliciter... Parce que les chiffres qui "tombent du ciel", je ne vois vraiment pas quoi y répondre. sad

Je détaille : ton 99% vient de toi et est censé être la proportion de progs ASM correctement compilés. Le 99.994% est la probabilité qu'il y n'ait pas la moindre collision dans la génération de 500 seeds différents avec un seed de 31 bits... Et l'ordre de grandeur est le même.
et que la place gagnée par les optimisations ASM ne doit jamais dépasser les 20 octets même sur le plus complexe des programmes

Relis les messages ci-dessus. J'ai gagné plusieurs KO sur CC rien qu'avec les optimisations du linker!

Putain, Kevin! mad Ca t'arrive de lire les posts en entier? Mon post précédent excluait explicitement le cas des optimisations sur le code C
Cf. le dernier paragraphe de ma réponse d'avant: se limiter à l'assembleur n'a aucun sens pour les raisons déjà évoquées.

Ce paragraphe-là n'explique rien, mais par contre le paragraphe suivant de ce post donne un semblant de raison...
pour le code C, on est d'accord, tu fais ce que tu veux (et tu as parfaitement le droit de le faire dans le linker si ça te fait plaisir, ce n'est pas ça que je critique). Je dis que pour le code ASM, le rapport gain de place / taux d'erreur est plus faible que pour le remplacement de ta fonction randomize() "mathématiquement idéale" (roll) par ma fonction.

Grave erreur. Je peux écrire un code ASM qui sera optimisable exactement autant que CC! C'est même trivial de le faire: tigcc -S *.c. grin

Ce n'est pas une raison pour transformer les bsr/rts en bra, parce que ça change carrément la sémantique... Normalement, la sémantique de "tigcc *.s" devrait être la même que "cat *.s > $$.s && tigcc $$.s && rm -f $$.s" (modulo le nom du fichier de sortie, et modulo les éventuels conflits de macro). Et c'est largement faisable : sauf qu'il ne faut pas utiliser un format objet hacké dans tous les sens, il faut utiliser un code intermédiaire gardant toutes les infos sémantiques du fichier assembleur de départ...
Si on ne remarque pas les optimisations dans la plupart des programmes actuels en assembleur, c'est parce qu'ils ont été écrits pour des linkers débiles (parfois même pour des non-linkers qui ne prenaient qu'un seul fichier objet!) et utilisent donc des hacks affreux de style les include de code (comme déjà dit: à mort ce hack!). On peut tout à fait programmer proprement, c'est-à-dire en suivant les principes de la programmation modulaire (compilation séparée etc.) en assembleur, et là, on aura besoin des optimisations du linker pour que le style propre ait exactement la même efficacité que le style sale et obsolète. Un des grands points forts des optimisations du linker est d'encourager la programmation modulaire propre en éliminant totalement la pénalité de l'utilisation de plusieurs fichiers objet, rendant ainsi le hack des include de code totalement inutile et obsolète. Et c'est valable pour l'assembleur autant que pour le C.
(sans compter que l'impact d'une collision de générateur aléatoire est quasi-nul, alors que celui d'un programme qui se comporte anormalement est très grave et fait perdre un temps précieux au programmeur).
Je vois ça autrement: les collisions (ou autres problèmes) causé(e)s par un mauvais générateur de nombres aléatoires sont inévitables. En exécutant le programme suffisamment de fois, on atteint forcément le cas "mauvais".
Si tu te mets à parler d'inévitable, ça veut dire que tu fais des tests successifs; alors tu n'auras une collision qu'au bout de 2 milliards de tests (et pas 16000 en prenant des tests aléatoires).
Mon "million" était un chiffre au hasard (d'où l'écriture en lettres, pas en chiffres), et ici, j'ai même opté pour "suffisamment de fois" qui est encore plus clair. 2 milliards de fois, c'est un nombre fini d'essais, donc qualifie très bien comme "suffisamment de fois".

Qui parle de million?
En revanche, pour les programmes détruits par un optimisateur, il suffit de vérifier que le programme a été compilé correctement (par exemple en le testant, ou idéalement en comparant les sources avec ce que sort ttdasm) et puis il restera correct, qu'on l'exécute une fois ou des millions de fois. Une fois la correction vérifiée, on ne peut jamais produire l'erreur rien qu'en exécutant le programme, même si on passe toute sa vie à exécuter le programme en boucle. C'est donc un problème de nature totalement différente.
Sauf que _personne_ n'a _jamais_ fait la vérification avec ttdasm de son programme,

Sauf moi. grin C'est la meilleure manière de voir si la sortie correspond à l'entrée. Mais bon, j'avoue que je ne l'ai fait que pour des très petits programmes, et c'était souvent pour déboguer le linker.

Bah oui, en dehors de testcases simples, c'est complètement impraticable.
et pour cause : si j'assemble un truc, je suppose que l'assembleur va faire son boulot et pas le modifier en faisant des suppositions trop fortes sur la signification de "bsr", par exemple. En plus, c'est pas du tout viable : le formattage est très différent (sans même parler des macros!), et ttdasm n'est pas parfait.

Le formattage différent n'a aucune importance, vu qu'il s'agit de comparer à la main, pas automatiquement. smile

sick Donc en plus il faut le faire à chaque modification du fichier?
La seule méthode réellement employée, et ça tu ne peux pas le nier, c'est le débogage à la main. Ca veut dire que l'erreur peut se manifester une fois sur 50, ou bien seulement dans des cas particuliers

Dans ces cas, tout dépend de la qualité des tests effectués. Avec un bon whiteboxing, on teste tous les chemins d'exécution. Mais comme déjà dit, l'idéal est de comparer avec ce que sort ttdasm.

Bah dans les deux cas c'est gore, et tout sauf sûr.
(par exemple le bug de mon exemple de fonction de détection de ghost space pourrait ne foirer que si le programme avait déjà été appelé par un prog basic et que donc le programme n'a pas été rechargé par le TIOS, etc... : typiquement, c'est le genre de truc difficilement reproductible et donc difficilement testable). Et crois-moi, ça fait perdre un temps précieux.

Il est vrai que des fois les tests sont vraiment durs à faire. D'où mon conseil d'utiliser ttdasm. smile

Toujours aussi impraticable, ça n'a pas changé depuis les 3 paragraphes précédents tongue
Et d'ailleurs, pour le cas des problèmes avec l'optimisation tailcall des bsr, il suffit de regarder la source pour voir s'il y a un problème, on n'a même pas besoin de désassembler ou tester le résultat! C'est simple: S'il y a un bsr ou jsr label suivi d'un rts sans aucun label entre les 2, ça sera optimisé.

Bah oui mais on n'a pas forcément toutes les optimisations en tête, et rien ne dit que tu ne vas pas en rajouter de nouvelles...
Et il suffit d' "upgrader" sa version de TIGCC pour introduire des nouveaux bugs, c'est ça le plus gênant neutral

Non, il "suffit" de mettre à jour TIGCC et d'activer de nouvelles optimisations. smile Et il ne faut vraiment pas faire semblant de ne pas être au courant, vu que toutes mes annonces des bêtas parlent à chaque fois des nouvelles optimisations (dans les "rappels").

Sauf qu'en pratique on les active qd même, ces optimisations parce que sans, TIGCC génère du code très largement moins bon que GTC...
Actuellement, on a obligatoirement besoin des optimisations du linker aussi pour le C. GCC 3.4 pourra changer ça un peu (il permet de compiler plusieurs .c en même temps). Mais pas entièrement
Ca, c'est un autre pb : si vous ne savez pas implémenter ça, tant pis. Mais tel que c'est implémenté, c'est complètement immonde, ça favorise les bugs, et je comprends qu'on veuille rester à TIGCC 0.94 si on veut utiliser plus d'une centaine de lignes de code ASM...

Ben, moi, je ne comprends pas vraiment. Ce qui règne ici, c'est une grosse paranoia appuyée sur des exemples construits (pas tirés du monde réel) pour des cas totalement improbables, ainsi que sur des exemples réels (ceux de Flanker) qui ne boguent pas à cause d'une erreur fondamentale des optimisations du linker, mais à cause d'un problème de switches qui peut être résolu par l'utilisateur en RTFM et par les versions futures de TIGCC en mettant le bon switch automatiquement. Je répète: les exemples réels cités par Flanker ne sont pas des victimes inévitables des optimisations du linker! Toutes les victimes inévitables citées étaient des exemples construits spécialement pour ça (dont je connaissais déjà l'existance théorique), qui n'existent pas en pratique.

Ca, ça m'étonnerait énormément...
les librairies statiques, qui chez nous sont de vraies librairies statiques, pas des archives de sources.
Et vive les approximations foireuses ... Il y a bcp moins de différence entre le code intermédiaire et votre code objet avec tous les labels locaux qu'entre la source et le code intermédiaire...

Personnellement, je trouve que le mode all-relocs est le seul mode d'assemblage raisonnable. L'assembleur n'a pas à essayer de faire le travail du linker en supprimant les labels locaux et en prérésolvant les références PC-relatives locales. La résolution des relogements et la gestion des labels font partie du boulot du linker. Je trouve que ce n'est vraiment pas malin de mettre la résolution des relogements dans l'assembleur, ça ne fait que dupliquer le travail du linker. Si jamais j'écris un nouvel assembleur pour TIGCC, il n'utilisera que le mode all-relocs.

roll Le code objet n'est pas fait pour voir sa taille modifiée, il ne contient pas assez d'infos pour ça (même avec les labels locaux). La solution propre, c'est de prendre un code intermédiaire plus puissant que le code objet.

EDIT : oublié un [/ cite]

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

151

Et ça serait bien si on pouvait revenir à parler de la bêta actuelle de TIGCC et pas:
* des mérites philosophiques de l'optimisation du linker: De toute façon, l'optimisation du linker est désormais un fait qui fait partie de notre réalité, il est inutile de discuter si ça a été un bon choix ou pas, j'ai déja expliqué qu'on ne peut plus revenir en arrière.
* des défauts de mes argumentations: Que je réponde sélectivement ou pas n'a franchement strictement rien à voir avec la bêta de TIGCC (donc c'est totalement hors-sujet ici), et les posts de vince et nitro ont carrément lancé une flamewar qui a floodé mon topic. Comme quoi j'avais bien raison de les kicker. roll
* du ban de Vertyos de Ti-Gen: Ça n'a rien à voir avec TIGCC là non plus.
Alors merci d'arrêter de flooder mon topic pour parler d'un de ces 3 sujets.
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é

152

Kevin Kofler
: Ne comprends-tu pas que tu ne fais qu'aggraver ton cas, et réduire à chaque fois la probabilité (déjà minime) d'être débanni un jour?

Tu sais que tu me donne pas trop envie d'arrêter là ? Comme de tte façon je serais jamais déban et que ça me coute rien de me réenregistrer, je vois pas pkoi je le ferais pas (du moins tant que tu ne me donneras pas des raisons valables, là pê que j'envisagerais d'arrêter)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

153

Kevin Kofler
:
Pollux
: et n' "oublie" pas non plus de répondre à mon post...

J'ai répondu à tout là, alors pour les accusations de réponses sélectives, c'est DVC. bang

Je trouvais juste que tu mettais du temps à réagir alors que tu avais posté 40 minutes avant dans ce même topic... Ce n'était pas une accusation, c'était juste un rappel smile

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

154

Kevin Kofler
: Et d'ailleurs, je n'avais pas répondu parce que c'est une accusation tellement grossière et insolente (de plus qu'elle est totalement infondée) que je n'avais pas du tout envie d'y répondre.


C'est vrai que "c'est DVC" n'est pas du tout grossier et insolent...
So much code to write, so little time.

155

Bon:
* Je ne répondrai pas au ./150 de Pollux parce que j'ai marre du hors-sujet.

* Pour le ./152 de Vertyos: si tu continues à faire le malin, je sens qu'on finira par te reporter à ton FAI pour abus systématique du site, et là, tu auras des problèmes sérieux...
Et je te prie d'arrêter cette discussion là, parce que j'ai vraiment marre du hors-sujet (et encore plus de ce hors-sujet là que sur celui du linker qui a au moins un minimum de rapport avec le sujet).
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é

156

heu je veux bien que tu repporte mon fai mais c'est pas depuis mon ip que sont créés les comptes donc ça va pas changer grand chose neutral
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

157

Pollux
:
Kevin Kofler
:
Pollux
:et n' "oublie" pas non plus de répondre à mon post...

J'ai répondu à tout là, alors pour les accusations de réponses sélectives, c'est DVC. bang

Je trouvais juste que tu mettais du temps à réagir alors que tu avais posté 40 minutes avant dans ce même topic... Ce n'était pas une accusation, c'était juste un rappel smile

Rappel: Répondre prend du temps. Ces 40 minutes, ils sont passés à écrire mon message!
Et arrête le hors-sujet maintenant!

./154: Hors sujet là aussi!

C'est le dernier avertissement. Si on ne peut plus parler du sujet d'origine, je serai obligé soit de vous kicker, soit de fermer carrément le topic qui est parti complètement en c***lles.
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é

158

fesses
*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & sabrina

159

pleure po kevin
avatar

160

!kick Vark
--- Kick : Vark kické(e) par Kevin Kofler

!kick Peio
--- Kick : Peio kické(e) par Kevin Kofler

Alors là, si ces kicks sont "injustifiés"... roll
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é

161

N'empeche que nitro a raison, le "D*C" c'est pas très correct non plus :/
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

162

Kevin Kofler :
Bon:
* Je ne répondrai pas au ./150 de Pollux parce que j'ai marre du hors-sujet.

Je soupçonne aussi d'autres raisons... (surtout que c franchement moins hors sujet que l'autre discussion parallèle, et que tu viens à peine d'entamer le vif du sujet)

Bon, je vais te faire un résumé des questions ouvertes auxquelles j'aimerais avoir une réponse :
* ton argument principal est que les optimisations du linker servent pour l'assembleur, qd il y a plusieurs .asm; à ceci, je réponds que la seule sémantique valable est celle d'A68k avec tous les fichiers mergés; parce que le format objet contient trop peu d'informations (différence entre bra.w et bra tout court, différence entre dc.w 0x1234 et move.l $direct,a0 ...) pour que les transformations effectuées soient sûres
* en outre, est-ce qu'on est bien d'accord que les optimisations type mono-objet (transformation move.l foo.l,a0 -> move.l foo(pc),a0) et les optimisations type peephole (bsr/rts) sont complètement orthogonales ? Je suis pour les premières (elle permettent un gain substantif de taille sans changement de signification), et contre les deuxièmes (changement de signification du code, faible gain de taille)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

163

Non mais oà vas le monde, je vous jure...

Kevin ton post à dévié, mais de toute l'information interessante est dans le titre.

D'ailleur pour le reste du topic, il parle de TIGCC que cala soit spécialement sur la beta6 ou pas cela parle de tigcc car le linker FAIT PARTIT de tigcc
donc ce n'est PAS du offtopic !

kick moi si cela te plais, mais comme le disait pollux plus haut, tu ne fais que montrer que tu as tords en kickant à dans tout les sens comme ça. Et fermer le topic reviens strictement au même..
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

164

Surtout que TIGCC 0.95 est encore en beta, donc le linker a aussi le statut de beta / nouveauté. Et j'ajouterais que les topics sur les autres betas de TIGCC 0.95 sont fermés, donc ce n'est pas possible de le mettre ailleurs.

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

165

Avec GTC on n'aura pas de problèmes de ce genre j'espère smile

Est-ce qu'une intégration du traducteur Java->C de Quesoft est prévue à TIGCC ?
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.

166

tu rigoles ?
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

167

"Tu n'as pas compris: Pour montrer le bogue, il suffit de le faire une fois! Lui, il a fait ça systématiquement (au moins 3 fois), alors que dès la première fois, j'ai remplacé son message par une remarque comme quoi ce qu'il faisait était interdit par les règles de Ti-Gen. Donc il savait très bien que ce qu'il faisait n'était pas OK, il l'a fait exprès pour faire ch**r!"

deja, remplacer son message n'etait peut etre pas la meilleure chose a faire. ensuite, ce que j'ai compris, c'est que ce bug n'est toujours pas corrige... pas tres serieux non? cheeky

si yAro avait reagi comme vous, yaronet n'aurait sans doute jamais pris autant d'ampleur. sachant qu'il a eu a subir bien pire et plus lourd pour son hebergeur que ce truc ridicule...

et j'ai la tres forte impression que tu eprouves une forte frustration ici.. un forum ou tout le monde ne te venere pas comme des petits chiens venerent leur maitre?
tu sais, si ton ego surdimensionne a du mal a supporter ca, c'est pas forcement une raison pour te defouler sur les gens en t'ennervant inutilement et en kickant a tout va ^^ ya des psys qui font un tres bon boulot... (je suis serieux)

pis je sais pas.. t'as jamais rien d'autre a foutre que de passer 40 minutes a taper un reply dans un thread sur un forum?
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

168

Pollux
: Bon, je vais te faire un résumé des questions ouvertes auxquelles j'aimerais avoir une réponse :

OK, mais on peut arrêter après? Parce que c'est lourd. (Mais oui, le hors-sujet lancé par les trolls de vince et nitro est pire, je suis bien d'accord.)
* ton argument principal est que les optimisations du linker servent pour l'assembleur, qd il y a plusieurs .asm; à ceci, je réponds que la seule sémantique valable est celle d'A68k avec tous les fichiers mergés; parce que le format objet contient trop peu d'informations (différence entre bra.w et bra tout court, différence entre dc.w 0x1234 et move.l $direct,a0 ...) pour que les transformations effectuées soient sûres

Mon avis reste que la compilation séparée a des avantages importants qu'il ne faut pas abandonner au profit d'une optimisation qui peut aussi être effectuée autrement (dans le linker). Si on veut compiler tout en un, il y a le hack des include de code, mais c'est ce que c'est: un hack.

Et une grande partie de mon travail pour TIGCC 0.95 consistait justement à rajouter des informations au format objet pour rendre possibles ces optimisations. Par exemple, on n'optimise qu'en présence d'un relogement, les données pures ne sont pas touchées. Et pour les versions futures, je vais probablement mettre encore plus d'informations dans le format objet, pour avoir des optimisations qui sont sûres à 100% de ne modifier que les instructions visées, et pas quelque chose au milieu d'une instruction ou une donnée relogeable (variable globale contenant un pointeur) qui a par hasard la même structure. De toute façon, plus on met dans les fichiers objet, mieux ça sera pour le futur débogueur qu'on prévoit toujours.
* en outre, est-ce qu'on est bien d'accord que les optimisations type mono-objet (transformation move.l foo.l,a0 -> move.l foo(pc),a0) et les optimisations type peephole (bsr/rts) sont complètement orthogonales ? Je suis pour les premières (elle permettent un gain substantif de taille sans changement de signification), et contre les deuxièmes (changement de signification du code, faible gain de taille)

Oui, ils sont orthogonales, mais il y a un seul type de peepholes dans le linker, et c'est l'optimisation tailcall. Et nous avons vraiment fait tout notre possible pour minimiser les erreurs: optimisation seulement en présence d'un relogement (par exemple, nous ne touchons pas à jsr (%a0);rts), optimisation seulement s'il n'y a pas de label entre les 2 instructions, ... Le risque d'erreurs est vraiment minime sous ces conditions.
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é

169

Pollux
:Surtout que TIGCC 0.95 est encore en beta, donc le linker a aussi le statut de beta / nouveauté.

Mais on a déjà passé de loin le point de non-retour au niveau des optimisations du linker: ces optimisations sont là, il est trop tard pour les supprimer, donc inutile d'en discuter.
Albert Instinct :
Avec GTC on n'aura pas de problèmes de ce genre j'espère smile

!kick Albert Instinct
--- Kick : Albert Instinct kické(e) par Kevin Kofler
Tu fais ch**r. C'est hors sujet (on parle de TIGCC ici), et tu le sais très bien.
Est-ce qu'une intégration du traducteur Java->C de Quesoft est prévue à TIGCC ?

Non.

Ce n'est de toute façon pas possible parce qu'il n'y a pas de version Linux. Nous ne rajoutons plus aucun feature Win32-only, et je suis en train d'implémenter la version Linux du dernier feature actuellement Win32-only: l'IDE.

!kick sBibi
--- Kick : sBibi kické(e) par Kevin Kofler
Justification: Le ./167, en plus d'être totalement hors-sujet, et cela malgré mes avertissements à ce sujet, est un flamebait de première catégorie.
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é

170

Kevin: deja ce sont encore des kicks abusifs....

et deux, je sais pas quel français on ta appris, mais je croit que tu parle pas la france français neutral
Kevin Kofler :
Justification: Le ./167, en plus d'être totalement hors-sujet, et cela malgré mes avertissements à ce sujet, est un flamebait de première catégorie.

avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

171

"Tu fais ch**r. C'est hors sujet (on parle de TIGCC ici), et tu le sais très bien."

et quand toi tu parles de TIGCC ©® lorsque le sujet c'est GTC? golgol
*** Ne sous-estimez pas la puissance de la Marmotte ***


© Marmotte Team : LaMarmotte, sBibi, Vark & sabrina

172

Godzil
:Kevin: deja ce sont encore des kicks abusifs....

Non, ce sont des kicks pour hors-sujet prolongé (en d'autres mots: flood) de mon topic. (J'ai d'ailleurs à chaque fois mis une justification précise.) Et tu seras le prochain si tu continues. (Il y a les mini-messages pour discuter de ce genre de trucs, pas la peine de flooder mon topic.)
et deux, je sais pas quel français on ta appris, mais je croit que tu parle pas la france français neutral
Kevin Kofler :
Justification: Le ./167, en plus d'être totalement hors-sujet, et cela malgré mes avertissements à ce sujet, est un flamebait de première catégorie.

C'est un terme informatique, donc il est normal qu'il soit en anglais.

Et puis:
!kick LaMarmotte
--- Kick : LaMarmotte kické(e) par Kevin Kofler
Raison: Floodeur professionnel, devrait être banni globalement.
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é

173

Kevin Kofler
:
* ton argument principal est que les optimisations du linker servent pour l'assembleur, qd il y a plusieurs .asm; à ceci, je réponds que la seule sémantique valable est celle d'A68k avec tous les fichiers mergés; parce que le format objet contient trop peu d'informations (différence entre bra.w et bra tout court, différence entre dc.w 0x1234 et move.l $direct,a0 ...) pour que les transformations effectuées soient sûres

Mon avis reste que la compilation séparée a des avantages importants qu'il ne faut pas abandonner au profit d'une optimisation qui peut aussi être effectuée autrement (dans le linker). Si on veut compiler tout en un, il y a le hack des include de code, mais c'est ce que c'est: un hack.

Je voudrais bien entendre ces "avantages importants"... Le temps d'assemblage est négligeable. Et je ne parle pas d'include, je parle d'attendre le linking final pour produire du code binaire.
Et une grande partie de mon travail pour TIGCC 0.95 consistait justement à rajouter des informations au format objet pour rendre possibles ces optimisations. Par exemple, on n'optimise qu'en présence d'un relogement, les données pures ne sont pas touchées. Et pour les versions futures, je vais probablement mettre encore plus d'informations dans le format objet, pour avoir des optimisations qui sont sûres à 100% de ne modifier que les instructions visées, et pas quelque chose au milieu d'une instruction ou une donnée relogeable (variable globale contenant un pointeur) qui a par hasard la même structure.

Bah oui, mais pour gérer vraiment tous les cas tordus (du genre move.w #0x6000,d0; dc.w l1-l2), il faut faire extrêmement gaffe et la manière légère avec laquelle vous avez fait ça laisse supposer qu'il y a des chances qu'il reste des bugs... La seule façon où on est sûr de ne pas faire d'erreur, c'est d'assembler au dernier moment (et qui est certainement bien plus simple à implémenter que vos hacks qui consistent plus ou moins à désassembler le code objet).
De toute façon, plus on met dans les fichiers objet, mieux ça sera pour le futur débogueur qu'on prévoit toujours.

De toute façon le débuggeur travaille toujours à un niveau supérieur (lignes de source), non?
* en outre, est-ce qu'on est bien d'accord que les optimisations type mono-objet (transformation move.l foo.l,a0 -> move.l foo(pc),a0) et les optimisations type peephole (bsr/rts) sont complètement orthogonales ? Je suis pour les premières (elle permettent un gain substantif de taille sans changement de signification), et contre les deuxièmes (changement de signification du code, faible gain de taille)

Oui, ils sont orthogonales, mais il y a un seul type de peepholes dans le linker, et c'est l'optimisation tailcall. Et nous avons vraiment fait tout notre possible pour minimiser les erreurs: optimisation seulement en présence d'un relogement (par exemple, nous ne touchons pas à jsr (%a0);rts), optimisation seulement s'il n'y a pas de label entre les 2 instructions, ... Le risque d'erreurs est vraiment minime sous ces conditions.

Non, c'est toujours assez risqué... Et tes suggestions plus haut dans ce topic laissent supposer que tu veux rajouter d'autres peepholes.

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

174

Kevin Kofler ©® est la loi, où qu'il soit les règles et la normalité doivent dépendre de son esprit dérangé.
Il n'y a rien à redire sur ces décisions.
Lui il peut se permettre d'être hors topic, parler de couilles, etc ...

Les autres ne peuvent pas être hors topic, ni même montrer de fessessad
DTC !

175

Kevin> tu peux s'il te plait arretter de kicker a tout va? te kicker toi resoudrait tout les pbl deja, mais ensuite tu ne fais qu'ecarter les questions qui te derangent.. tu te voile ta propre face sur ta facon d'agir... tu critiques des trucs chez les autres, alors que tu fais exactement la meme chose... et apres ca tu as la pretention de savoir moderer des forums? mais laisse moi rire...

allez je te le remets rien que pour toi:

"et quand toi tu parles de TIGCC ©® lorsque le sujet c'est GTC? golgol"

DTC !

176

!kick LeGode
--- Kick : LeGode kické(e) par Ximoon
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

177

Vive Kevin !
TIGCC PoWa !!!!!

(ça va, je suis bien dans le sujet là trilove ?)

178

Pollux
:
Kevin Kofler
:
* ton argument principal est que les optimisations du linker servent pour l'assembleur, qd il y a plusieurs .asm; à ceci, je réponds que la seule sémantique valable est celle d'A68k avec tous les fichiers mergés; parce que le format objet contient trop peu d'informations (différence entre bra.w et bra tout court, différence entre dc.w 0x1234 et move.l $direct,a0 ...) pour que les transformations effectuées soient sûres

Mon avis reste que la compilation séparée a des avantages importants qu'il ne faut pas abandonner au profit d'une optimisation qui peut aussi être effectuée autrement (dans le linker). Si on veut compiler tout en un, il y a le hack des include de code, mais c'est ce que c'est: un hack.
Je voudrais bien entendre ces "avantages importants"... Le temps d'assemblage est négligeable. Et je ne parle pas d'include, je parle d'attendre le linking final pour produire du code binaire.

Les avantages:
* Temps d'assemblage économisé (pas nécessairement négligeable).
* Gestion des librairies statiques.
* Gestion du linking entre sources en des langages divers (C, GNU as, A68k, voire d'autres qui pourraient être introduits plus tard). La méthode du tout-en-un ne marche plus si on a du A68k et du GNU as.
Et puis, pour "attendre le linking final pour produire du code binaire", il faut à un moment convertir ça en include, et aussi renommer tous les labels non-exportés pour éviter les conflits. C'est beaucoup plus dur que ça n'a l'air, sachant que les assembleurs n'ont aucun support pour l'assemblage de plusieurs sources en même temps. Et puis je trouve que c'est au linker de faire le linking, pas à l'assembleur.
Bah oui, mais pour gérer vraiment tous les cas tordus (du genre move.w #0x6000,d0; dc.w l1-l2), il faut faire extrêmement gaffe et la manière légère avec laquelle vous avez fait ça laisse supposer qu'il y a des chances qu'il reste des bugs...

Ce cas est déjà géré correctement. C'est à ça que sert le mode all-relocs: Il y aura un relogement vers l1 relatif à l2 (relogement de différence d'adresses). Le linker calcule l'offset final après les optimisations qui suppriment du code.
La seule façon où on est sûr de ne pas faire d'erreur, c'est d'assembler au dernier moment (et qui est certainement bien plus simple à implémenter que vos hacks qui consistent plus ou moins à désassembler le code objet).

Notre méthode consiste surtout à repérer les relogements, et nous servir des relogements pour optimiser. Seulement s'il y a un relogement, nous regardons ce qu'il y a devant pour identifier l'instruction.
De toute façon, plus on met dans les fichiers objet, mieux ça sera pour le futur débogueur qu'on prévoit toujours.
De toute façon le débuggeur travaille toujours à un niveau supérieur (lignes de source), non?

Tout débogueur a besoin d'informations de débogage dans le fichier objet pour fonctionner. La nature exacte des informations dont nous aurons besoin n'est pas encore connue. Ça va se fixer au fur et à mesure de l'implémentation, quand il sera temps de réaliser le débogueur.
Oui, ils sont orthogonales, mais il y a un seul type de peepholes dans le linker, et c'est l'optimisation tailcall. Et nous avons vraiment fait tout notre possible pour minimiser les erreurs: optimisation seulement en présence d'un relogement (par exemple, nous ne touchons pas à jsr (%a0);rts), optimisation seulement s'il n'y a pas de label entre les 2 instructions, ... Le risque d'erreurs est vraiment minime sous ces conditions.
Non, c'est toujours assez risqué...

Je ne trouve pas, moi. Désolé, je crains que nous resterons en désaccord sur ce point.
Et tes suggestions plus haut dans ce topic laissent supposer que tu veux rajouter d'autres peepholes.

Je proposais juste d'élargir le peephole existant, mais je vois maintenant que ce n'est probablement pas une bonne idée. De toute façon, le cas généralisé ne serait plus qu'un gain de vitesse sans gain de taille, donc il ne m'intéresse pas vraiment (contrairement au cas particulier actuel qui optimise en taille et vitesse).

En tout cas, aucune autre optimisation style peephole n'est actuellement prévue du côté du linker.
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é

179

TIGCC trifesses.gifcrocodile c'est trop fort!!!! trilovetrilove

Kevin! tu es mon dieu, mon heros!!! tous les soir je reve de toi enmitouflee au fond de mes couvertures love et me m.. hem..
Kevinichou!! je t'aime!! heartfessesbanana
ET PAAAAAAAAAAAAAAAFFF !!!

180

Kevin Kofler
:
Pollux
:
Kevin Kofler
:
* ton argument principal est que les optimisations du linker servent pour l'assembleur, qd il y a plusieurs .asm; à ceci, je réponds que la seule sémantique valable est celle d'A68k avec tous les fichiers mergés; parce que le format objet contient trop peu d'informations (différence entre bra.w et bra tout court, différence entre dc.w 0x1234 et move.l $direct,a0 ...) pour que les transformations effectuées soient sûres

Mon avis reste que la compilation séparée a des avantages importants qu'il ne faut pas abandonner au profit d'une optimisation qui peut aussi être effectuée autrement (dans le linker). Si on veut compiler tout en un, il y a le hack des include de code, mais c'est ce que c'est: un hack.
Je voudrais bien entendre ces "avantages importants"... Le temps d'assemblage est négligeable. Et je ne parle pas d'include, je parle d'attendre le linking final pour produire du code binaire.

Les avantages: * Temps d'assemblage économisé (pas nécessairement négligeable).

Si, très clairement. Surtout qu'il n'y a aucun parsing à faire.
* Gestion des librairies statiques.

Il n'y a aucune différence : en l'occurrence, il faut aussi que les libs statiques se conforment au nouveau format de fichiers objets.
* Gestion du linking entre sources en des langages divers (C, GNU as, A68k, voire d'autres qui pourraient être introduits plus tard). La méthode du tout-en-un ne marche plus si on a du A68k et du GNU as.

Si. Ca ne demande pas plus de boulot que de se conformer au nouveau format de fichier objet, voire même plutôt moins (parce qu'il faudra encore rajouter des hacks pour la gestion des infos supplémentaires que tu compte rajouter).
Et puis, pour "attendre le linking final pour produire du code binaire", il faut à un moment convertir ça en include, et aussi renommer tous les labels non-exportés pour éviter les conflits. C'est beaucoup plus dur que ça n'a l'air, sachant que les assembleurs n'ont aucun support pour l'assemblage de plusieurs sources en même temps. Et puis je trouve que c'est au linker de faire le linking, pas à l'assembleur.

Je ne parle pas de passer par un fichier texte intermédiaire, je parle juste d'utiliser les routines de l'assembleur. Ce n'est vraiment pas compliqué.
Bah oui, mais pour gérer vraiment tous les cas tordus (du genre move.w #0x6000,d0; dc.w l1-l2), il faut faire extrêmement gaffe et la manière légère avec laquelle vous avez fait ça laisse supposer qu'il y a des chances qu'il reste des bugs...

Ce cas est déjà géré correctement. C'est à ça que sert le mode all-relocs: Il y aura un relogement vers l1 relatif à l2 (relogement de différence d'adresses). Le linker calcule l'offset final après les optimisations qui suppriment du code.

Non, c'est pire que ça. Je dis que sans une certaine forme de désassemblage ou à moins de gérer des tonnes de cas particuliers (donc c'est très casse-gueule),
move.w #0x6000,d0; dc.w l1-l2 a des chances de se retrouver transformé en move.w #(0x60<<8)|(l1-l2),d0 ...
(et je présume que le linker ne gère pas ça correctement non plus... roll]
La seule façon où on est sûr de ne pas faire d'erreur, c'est d'assembler au dernier moment (et qui est certainement bien plus simple à implémenter que vos hacks qui consistent plus ou moins à désassembler le code objet).
Notre méthode consiste surtout à repérer les relogements, et nous servir des relogements pour optimiser. Seulement s'il y a un relogement, nous regardons ce qu'il y a devant pour identifier l'instruction.

Et? Ca ne suffit pas... (cf plus haut)
De toute façon, plus on met dans les fichiers objet, mieux ça sera pour le futur débogueur qu'on prévoit toujours.
De toute façon le débuggeur travaille toujours à un niveau supérieur (lignes de source), non?
Tout débogueur a besoin d'informations de débogage dans le fichier objet pour fonctionner. La nature exacte des informations dont nous aurons besoin n'est pas encore connue. Ça va se fixer au fur et à mesure de l'implémentation, quand il sera temps de réaliser le débogueur.

J'ai déjà réfléchi au pb, mais il n'y a pas du tout besoin d'infos aussi fines que celles nécessaires à redimensionner un code & faire vos hacks.
Oui, ils sont orthogonales, mais il y a un seul type de peepholes dans le linker, et c'est l'optimisation tailcall. Et nous avons vraiment fait tout notre possible pour minimiser les erreurs: optimisation seulement en présence d'un relogement (par exemple, nous ne touchons pas à jsr (%a0);rts), optimisation seulement s'il n'y a pas de label entre les 2 instructions, ... Le risque d'erreurs est vraiment minime sous ces conditions.
Non, c'est toujours assez risqué...

Je ne trouve pas, moi. Désolé, je crains que nous resterons en désaccord sur ce point.[/cite]
Oui, je le crains neutral

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)