Kevin Kofler
:
Pollux
:
Fait par le compilateur.
Pas dans les sources en assembleur, je suppose. 
C'est tout l'intérêt. Un code en assembleur, ça n'est pas censé être optimisé de manière automatique, parce que ça peut aboutir à toutes sortes de conflits. Tu as l'air de t'en foutre éperdument, mais c'est probablement parce que peu de programmes se servent de bcp d'ASM, ou alors parce que ceux qui s'en servent ne sont pas passé à TIGCC 0.95. Et puisque tu n'as pas l'air de me croire, je vais détailler un peu.
De même que l'assembleur n'a pas à optimiser move.w #6,d0 en moveq #6,d0 (même si ce serait correct dans 95% des cas) parce que ça peut foirer, l'assembleur n'a pas à transformer bsr/rts en bra parce que ça peut aussi foirer. Par exemple, on peut parfaitement imaginer la routine :
isinghostspace
bsr \chkghost
rts
\chkghost:
moveq #4,d0
and.w (a7),d0
rts
Je te défie de trouver aussi court en étant compilable avec TIGCC et les ""optimisations"" du nouveau linker... (avec exactement la même convention d'appel, bien sûr)
Je ne parle même pas du cas du code automodifiant :
drawstuff:
...
bsr drawline
rts
drawline:
moveq #1,d0 ; color mode ?
...
setglobalfont:
; 0=white
; 1=black
; 2=bold
subq.w #1,d0
bmi \nothingtobedone
lea drawline,a0
subq.w #1,(a0) ; transform to a moveq #0
tst.w d0
beq \nothingtobedone
subq.w #4,-(a0) ; transform to a nop
\nothingtobedone
rts
(et on ne peut pas se contenter de mettre un label devant les instructions qu'on ne modifie : ici, le label ne serait pas utilisé)
Si je veux faire du pseudo-assembleur et que je m'engage à respecter une sémantique plus forte que celle de l'assembleur pur (par exemple lorsque j'écris foo.w j'accepte que la partie haute du registre soit détruite; ou encore je m'engage à ne pas utiliser l'adresse de retour d'une fonction ailleurs que pour faire un rts), alors libre à moi d'utiliser un langage de programmation bas niveau qui serait une sorte d' "assembleur optimisé" (mais il faut bien être conscient que certains bouts de code ne pourront pas être aussi bien optimisés, paradoxalement, dans l'assembleur "optimisé" que dans l'assembleur pur : cf mes deux exemples) ; mais je n'ai aucune envie que le linker s'amuse à faire sa cuisine et modifie mon code assembleur pour pallier les incapacités du compilateur C...
Et puis on a aussi les optimisations des relogements, dont tu auras besoin au plus tard le jour où tu gèreras les vraies librairies statiques.
Tu me cherches, là

Seule l'exportation de librairie statique n'est pas encore implémentée; l'importation, elle, marche depuis lgtps

Et le nouveau générateur de code utilisera les libs statiques comme des libs de code intermédiaire, pas comme des libs de code objet, donc les optimisations seront largement plus poussées qu'avec des optimisations côté linker...