Albert Instinct :
:/
Moi je dis oui. On a avancé.
OK.
Mais le "bug" va réapparaître quand on assemblera en appelant directement A68k (càd sans passer par tiggcc.exe) ?
Déjà appeler directement
A68k n'est pas officiellement supporté, la méthode correcte est
tigcc -c. Mais tu auras le même problème: il faut passer
-WA,-d. C'est inévitable, parce que:
Il n'est pas possible de corriger a68k pour qu'il active lui-même -d quand on lui demande d'optimiser les bsr ?
... c'est le linker qui fait l'optimisation, pas l'assembleur. Comment veux-tu que A68k sache ce que tu veux mettre comme optimisations en linkant si tu fais le linking séparément? Donc non, ce n'est pas possible. La seule exception est la création de librairies statiques avec
tigcc -ar ou l'équivalent dans l'IDE, qui devra aussi utiliser
-d automatiquement (de même qu'elle utilise aussi toujours le mode all-relocs, parce qu'on ne sait pas en créant la librairie si le range-cutting sera activé lors du linking ou non).
Et je précise que je n'ai pas vraiment envie de changer le comportement par défaut de
A68k pour des raisons de compatibilité.
Jean-Mouloud :
Bon, je bosse en ce moment sur ld-tigcc pour y rajouter le support du TIB.
Le code d'export est terminé, il ne reste plus qu'à intégrer ça dans ld-tigcc pour qu'il l'utilise vraiment, sorte un fichier
d'extension .tib et pas autre chose, et voir quel symbole il faudra lui transmettre pour lier en TIB.
Cool.
Pollux
:
Kevin Kofler
:
C'est vraiment n'importe quoi, on ne sait pas quelles suppositions on peut faire sans casser la prochaine version...
Encore une fois, rien ne t'empêche de désactiver les optimisations si elles te dérangent.
D'accord... Donc tu recommandes à ceux qui programment en assembleur de désactiver les optimisations du linker ? Comme quoi, ces fameuses optimisations sont vraiment une avancée majeure 
Personnellement, je compile mes programmes en assembleur à optimisations du linker activées et je n'ai jamais eu un problème.
Et ces optimisations sont une avancée surtout pour les fichiers en plusieurs modules, c'est-à-dire les programmes modulaires (propres) et/ou qui utilisent intensivement
tigcc.a. C'est surtout le cas pour les programmes en C. Même si ça peut aussi servir pour certains programmes en assembleur. (On pourrait par exemple compiler
DB92 proprement en plusieurs fichiers ASM séparés au lieu de tout mettre dans un seul avec
include.
À mort le hack des
include de code.)
N'importe quoi. Si tu programmes en assembleur, surtout à optimisations désactivées, c'est évidemment à toi de donner le code optimal. Et sur du code C, nos optimisations fonctionnent très bien.
Oui, mais soit on active les optimisations du linker, soit on ne les active pas... Même si j'ai 2 ko de code ASM et 40 ko de code C, je suis qd même obligé de les désactiver...
Si ton code assembleur est propre, tu n'as aucun problème. Mes programmes assembleur sont compilables sans problèmes avec toutes les optimisations.
Mais tu n'es pas forcément l'auteur du fichier .a! Je te parle d'utiliser des librairies statiques d'auteurs tiers, moi! C'est le cas le plus fréquent, parce que c'est à ça que servent les librairies. (Bon, c'est quand-même mieux si l'auteur met la source, mais tu fais quoi s'il ne l'a pas mise?`)
Je réitère ma question : l'auteur tiers le génère à partir de quoi le .a, à ton avis? Le compilateur qui génère le .a a qd même plus que du code objet à sa disposition...
Mais ce que je veux dire est que les fichiers .a générés avec TIGCC (c'est-à-dire 99,9% des fichiers .a) seront inutilisables avec ton compilateur.
Désolé, le linker n'a (actuellement) aucun moyen de savoir si tu as spécifié une taille ou non, donc il optimise toujours.
C'est bien ce qui me semblait : toutes vos optimisations sont unsafe 
Ce n'est pas unsafe. Qu'il y ait un
bra.w ou un
bra.s ne change strictement rien au sens du code. (Rappel: Les sauts PC-relatifs sont ajustés. C'est à ça que sert le mode all-relocs que j'ai rajouté aux 2 assembleurs.)
Flanker :
J'aime tes contradictions :
tu refuses d'utiliser un programme qui n'est pas sûr à 100%, et en même temps tu proposes des optimisations qui elles mêmes ne sont pas sures à 100%
Déjà, c'est Sebastian qui a introduit ces optimisations.

Ce que j'ai rajouté, moi, c'est le range-cutting, qui permet de gagner en taille du code lui-même et pas juste en nombre de relogements. Et puis, c'est sûr à au moins 99% (tes cas ne comptent pas parce que tu n'as pas mis le switch
-d que la documentation dit de mettre - en le mettant, le problème disparaît), donc assez sûr pour moi.

Dans les cas où il y a vraiment un problème, on peut toujours désactiver l'optimisation qui pose problème.
tu te bats pour gagner quelques octets, alors que les rares exemples de tes programmes que j'ai regardé sont loin d'être à quelques octets près
Dans les optimisations du linker, il ne s'agit pas d'octets, mais de
kilo-octets! À titre d'exemple,
CC (le compilateur on-calc) a gagné plusieurs KO avec les optimisations du linker (et d'autres encore avec BSS, relogements personnalisés etc.)! (Il faut d'ailleurs que je sorte la version recompilée. Mais bon, c'est facile à recompiler soi-mêmes à l'aide de la source fournie. Vous verrez bien la différence entre les optimisations activées et désactivées!)
nitro
:
Kevin Kofler :
Le linker sait faire la différence entre code et données à travers plusieurs mécanismes qui marchent à coup presque sûr
Donc c'est du bidouillage, pur et simple.
Mais du "bidouillage" qui a le mérite de fonctionner très bien, et d'être
le point fort de TIGCC 0.95, donc désolé les puristes, mais on ne peut plus revenir en arrière. Les mécontents qui postent ici se comptent sur les doigts d'une main (ou presque), et en plus Pollux et Thibaut s'associent systématiquement à toute critique de TIGCC, justifiée ou non.

Les gens qui nous ont remercié pour les nouvelles optimisations et les excellents résultats qu'ils donnent, eux, se comptent en dizaines.
Une meilleure idée (celle qu'à suggeré Pollux) est de déferer la génération de code au linker, qui pourrait, avant ça, effectuer des optimisations globales sur l'IR, puis générer l'assembleur, ou le code machine machine directement. Cette approche a déjà été experimentée par plusieurs chercheurs, notament sur un compilateur Modula 2 si je me souviens bien, et ça marche très bien. (cf. articles sur http://www.citeseer.com)
Comme ça?
http://llvm.cs.uiuc.edu/
Mais ça n'apparaîtra pas dans TIGCC 0.95 ou 0.96. Au plus tôt dans la 0.97,
si c'est utilisable dans TIGCC (ce qui n'est pas sûr).
Sasume
:
Kevin> Pour ton optimisation, je suis plutôt contre, parce que tu utilises un switch qui n'a rien à voir avec vos saletés.
C'est un switch qui dit à l'assembleur de ne pas cacher ses symboles au linker. Pour pouvoir optimiser convenablement, notre linker travaille en partant du principe que l'assembleur lui dit la vérité. S'il lui cache ses labels, le linker a du mal à travailler. Donc voilà le rapport.
En outre, ça risque de ralentir l'édition des liens (enfin, ça reste peu important).
Peu importe, les optimisations la ralentissent beaucoup plus.

Et le mode all-relocs nécessaire pour le range-cutting introduit aussi au moins autant d'informations dans le fichier objet que le switch
-d. Et puis l'équivalent GNU as de
-d est
--keep-locals, qui est automatiquement activé en mode all-relocs (on n'a pas le choix: contrairement au format AmigaOS, le format COFF ne nous permet pas d'émettre les relogements qu'il nous faut sans émettre les labels correspondants), qui lui-même est activé automatiquement par le range-cutting (parce que le linker a besoin de connaître les références PC-relatives pour pouvoir réduire la taille d'un morceau de code au plein milieu d'un programme).
Personnellement, je suis plus que contre ce genre d'optimisations qui, comme l'a souligné Pollux, n'ont vraiment pas leur place dans le linker.
Dorénavant, je les désactiverai par défaut, et je trouve que TIGCC devrait en faire autant, il faudrait qu'elles ne soient activées que si l'utilisateur le demande explicitement.
En ligne de commandes, c'est le cas, mais bon, le défaut en ligne de commandes est aussi -O0, donc...

L'IDE, elle, cherche à mettre des règlages par défaut plus raisonnables, et donc -Os et optimisations du linker activées. Mais tout est personnalisable.
Godzil
:
quand tu utiliser GCC sous linux, ou VisualC sous windows, par défaut il te met des optimisations ?
Cf. ci-dessus.