Martial Demolins
: C'est malin, avec mon anglais à 2 balles, il va certainement tout comprendre.
Kevin KoflerLol je trouve ça fort. J'ai précisé hier sur IRC que j'avais pas le temps de répondre, comme t'as insisté comme un gros lourdeau j'ai quand même répondu à l'essentiel, et tu trouves encore le moyen de te la rammener... LOL.
: Nitro, tu n'as pas répondu à une grande partie de mon message. C'est fait exprès parce que tu ne sais plus quoi répondre?
Justement, je conçois ça comme une grave erreur de retirer à GCC ses avantages importants sur les autres compilateurs.Heureusement que tu n'es pas mainteneur de GCC.
Et ça change quoi à ce que j'ai dit ?et un grand nombre de programmes (surtout ceux qui sont multiplateforme) ne les utilise pas.TIGCC est multi-plateforme et nous utilisons pas mal d'extensions de GCC.
C'est clair qu'avec ce genre de raisonnement ça donne vachement envie de contribuer à TIGCC.Néanmoins c'est bien embêtant car les compilateurs qui veulent être compatibles avec les programmes qui utilisent ces extensions (ICC par exemple) sont obligés d'accepter ce dialecte de C.Tant pis pour eux. Cf. mon "3." ci-dessus.
Ça reste non standard.Ah, si TCC les accepte alors, ça change tout.Bah, ça veut dire que ce n'est pas aussi bizarre que ça comme idée.
1. Pas plus "de merde" qu'avant.
2. D'où l'ajout de ces extensions.
Les libraries statiques closed source ne sont pas notre problème.C'est pourquoi dorénavant je code en kernel avec des libs dynamiques. Au moins ce n'est plus mon problème non plus.
nitro
:Justement, je conçois ça comme une grave erreur de retirer à GCC ses avantages importants sur les autres compilateurs.Heureusement que tu n'es pas mainteneur de GCC.
1. Pas plus "de merde" qu'avant.Ah, -freg-relative-an ne marchait pas avant ?
2. D'où l'ajout de ces extensions.
Mais c'est sûr qu'il vaut mieux bidouiller là où on peut pour grappiller une poignée d'octets, au lieu de corriger les principaux problèmes que sont le générateur de code de GCC et le manque d'optimisation interprocédurale.
Mais bon ne t'en fais pas, je vais m'y mettre. Dès que j'ai fini les cours, je checkout la dernière version de développement de GCC, et j'y integre le résultat de mes travaux au labo concernant les générateurs de code et les optims. On verra bien ce que ça donne.
Kevin KoflerBen j'aime pas le fonctionnement du linker ça me paraît clair non ?
:GoldenCrystalBon, c'est comme je disais alors: "parce qu'il n'y a pas écrit 'GNU' devant". C'est malin... Newsflash: GTC n'a pas non plus écrit "GNU" devant, c'est aussi un "outil non standard". Et pourtant tu me sembles bien être de son côté (même remarque pour nitro, d'ailleurs).
: ld-tigcc ne me convient pas parce que c'est un outil non standard,
nom complexes impossibles à retenir, et surtout obligation de modifier la source pour modifier la sortieparce qu'il utilise des symbboles pour dfinir son fonctionnement,Où est le problème?
Oué mais ça ne l'est pas par défaut. Au moins un package externe avec une version exe serait pas mal.parce que c'est une dll,Pas seulement. Il peut être compilé en exécutable aussi.
Nan mais que ce soit désactivable ou pas rien que l'idée qu'il puisse le faire ne m'incite pas à l'utiliser. La gestion du code est à faire dans le compilateur. Si il optimise mal, plutôt que de corriger ça dans le linker c mieux de contribuer à améliorer le compilo non ?parce qu'il traffique le code,That's not a bug, it's a feature. Et c'est complètement optionnel et désactivable!
Quel bon point de référenceparce qu'il ne génère rien si tu ne définis pas de symbole _ti*** ou _v200,Les linkers précédents faisaient de même.
ben en assembleur ça serait bêtement un "jmp main"...parce que tu n'as pas accès à un stub standard en asm sans définir des symboles au nom immonde...C'est quoi un "stub standard" selon toi?
Parce que tu peux faire du code plus souple et tout aussi raisonnable en terme de taille avec une ou deux fonctions, mais là n'est pas le sujet3 - Une macro n'est pas la bonne solution.![]()
"pas la bonne solution" pour quoi et pourquoi?
Oué mais appeler gcc n'appelera jamais tigcc, ni n'aura exactement les mêmes effets donc...ça s'adresse pas à moi, mais -> l'éxécutable tigcc n'est pas standard.
Il est compatible avec gcc du point de vue de l'invocation.
Oué mais appeler gcc n'appelera jamais tigcc
GoldenCrystal :
Ben j'aime pas le fonctionnement du linker ça me paraît clair non ?
nom complexes impossibles à retenir,parce qu'il utilise des symbboles pour dfinir son fonctionnement,Où est le problème?
et surtout obligation de modifier la source pour modifier la sortie
Oué mais ça ne l'est pas par défaut. Au moins un package externe avec une version exe serait pas mal.parce que c'est une dll,Pas seulement. Il peut être compilé en exécutable aussi.
Nan mais que ce soit désactivable ou pas rien que l'idée qu'il puisse le faire ne m'incite pas à l'utiliser. La gestion du code est à faire dans le compilateur. Si il optimise mal, plutôt que de corriger ça dans le linker c mieux de contribuer à améliorer le compilo non ?
Quel bon point de référenceparce qu'il ne génère rien si tu ne définis pas de symbole _ti*** ou _v200,Les linkers précédents faisaient de même.
ben en assembleur ça serait bêtement un "jmp main"...parce que tu n'as pas accès à un stub standard en asm sans définir des symboles au nom immonde...C'est quoi un "stub standard" selon toi?
Parce que tu peux faire du code plus souple et tout aussi raisonnable en terme de taille avec une ou deux fonctions, mais là n'est pas le sujet3 - Une macro n'est pas la bonne solution.![]()
"pas la bonne solution" pour quoi et pourquoi?
Oué mais appeler gcc n'appelera jamais tigcc, ni n'aura exactement les mêmes effets donc...
Kevin Kofler
:Nan mais que ce soit désactivable ou pas rien que l'idée qu'il puisse le faire ne m'incite pas à l'utiliser. La gestion du code est à faire dans le compilateur. Si il optimise mal, plutôt que de corriger ça dans le linker c mieux de contribuer à améliorer le compilo non ?
Tu montres par cela que tu n'as rien compris à comment fonctionne l'optimisation du linker!
Le but de l'optimisation linker est d'optimiser ce qui ne peut pas être optimisé par le compilateur ou l'assembleur: les références d'un fichier objet à un autre (ou d'une section à une autre). Les distances ne sont connues qu'en temps de linking, donc seul le linker peut savoir si on peut adresser en PC-relatif voire en branchement court. Je me demande combien de fois il faudra que je répète cela pour que ça rentre dans la tête de certains! Je sens que je vais le mettre dans la FAQ de TIGCC...
GoldenCrystal :
langage intermédiaire powa![]()
Godzil :
je sens que l'idée de Pollux est un poil plus complexe que ça ^^
Kevin Kofler
: Mais rien de cela ne pourra complètement remplacer la compilation séparée et le linking traditionnel (il suffit de penser aux fichiers en assembleur, par exemple).
Et même s'il y a théoriquement d'autres solutions (peut-être meilleures), le fait est qu'avec un modèle de linking traditionnel, il n'est pas possible d'optimiser certaines choses autrement qu'avec le système d'optimisation linker qu'on utilise. Si on a décidé d'optimiser certaines choses dans le linker, ce n'est pas pour nous amuser.
Kevin Kofler :
Et au fait, les paranos, j'ai une nouvelle pour vous: les mots de passe MD5 ne sont pas non plus "sûrs", il y a une probabilité de 2-126 que votre mot de passe ait le même MD5 que "test", "1234", "0000" ou "password".![]()
Pollux
:Kevin KoflerComment ça ? Il suffit d'inclure aussi le code assembleur là-dedans.
: Mais rien de cela ne pourra complètement remplacer la compilation séparée et le linking traditionnel (il suffit de penser aux fichiers en assembleur, par exemple).
Et même s'il y a théoriquement d'autres solutions (peut-être meilleures), le fait est qu'avec un modèle de linking traditionnel, il n'est pas possible d'optimiser certaines choses autrement qu'avec le système d'optimisation linker qu'on utilise. Si on a décidé d'optimiser certaines choses dans le linker, ce n'est pas pour nous amuser.
Quelles choses ?
Kevin Kofler :
Et au fait, les paranos, j'ai une nouvelle pour vous: les mots de passe MD5 ne sont pas non plus "sûrs", il y a une probabilité de 2-126 que votre mot de passe ait le même MD5 que "test", "1234", "0000" ou "password".![]()
BouhComment tu sais qu'il y a 2 bits de perdus ?
Kevin Kofler
:PolluxDu coup, ce n'est plus de l'assembleur! Du moins avec la représentation interne de LLVM. Tu en as peut-être une meilleure.
:Kevin KoflerComment ça ? Il suffit d'inclure aussi le code assembleur là-dedans.
: Mais rien de cela ne pourra complètement remplacer la compilation séparée et le linking traditionnel (il suffit de penser aux fichiers en assembleur, par exemple).
Références d'un fichier objet à un autre.Et même s'il y a théoriquement d'autres solutions (peut-être meilleures), le fait est qu'avec un modèle de linking traditionnel, il n'est pas possible d'optimiser certaines choses autrement qu'avec le système d'optimisation linker qu'on utilise. Si on a décidé d'optimiser certaines choses dans le linker, ce n'est pas pour nous amuser.
Quelles choses ?
Kevin Kofler :
Et au fait, les paranos, j'ai une nouvelle pour vous: les mots de passe MD5 ne sont pas non plus "sûrs", il y a une probabilité de 2-126 que votre mot de passe ait le même MD5 que "test", "1234", "0000" ou "password".![]()
BouhComment tu sais qu'il y a 2 bits de perdus ?
4/2128=2-126
(Mais j'avoue ne pas avoir vérifié que mes 4 exemples ont des MD5 différents.)
Pollux
: Je ne propose pas de modifier le code assembleur, juste d'avoir une représentation interne qui autorise *et* des trucs de haut niveau *et* des trucs de bas niveau (quitte à ce que les trucs bas niveau soient en read-only).
Oui mais encore une fois ça n'a pas besoin d'opérer sur du code objet.
Et la "probabilité" que la définition de la sémantique de bsr ne coïncide pas avec celle décrétée par TIGCC (et qui change à chaque release, d'ailleurs) est relativement élevée (rien que dans le stub de lancement des progs kernel on trouve ce genre de code...)
Kevin Kofler
:Pollux
: Je ne propose pas de modifier le code assembleur, juste d'avoir une représentation interne qui autorise *et* des trucs de haut niveau *et* des trucs de bas niveau (quitte à ce que les trucs bas niveau soient en read-only).
"En read-only"? C'est-à-dire que les références d'un fichier objet codé en assembleur à un autre ne seraient pas optimisables?![]()
Le code de démarrage de tigcc.a en souffirirait beaucoup si c'était comme ça!
Et sinon, j'ai fini d'implémenter mon flag "Unoptimizable" pour les sources GNU as, donc l'optimisation est maintenant (dès la prochaine bêta si Sebastian accepte mes patches tels quels) sure à 100% pour toutes les sources en C ou assembleur GNU.
Pollux
:Et sinon, j'ai fini d'implémenter mon flag "Unoptimizable" pour les sources GNU as, donc l'optimisation est maintenant (dès la prochaine bêta si Sebastian accepte mes patches tels quels) sure à 100% pour toutes les sources en C ou assembleur GNU.
Bah voilàSauf qu'il manque encore le support A68k.