
XDanger
a écrit : Pour avoir des différences de taille assez importantes, est-ce que GTC ferait par défaut des optimisations qui font gagner beaucoup de place, que GCC ne ferait pas ?
Par optimisations qui font gagner beaucoup de place, que GCC (ou peut-être que c'est le linker, pas le compilateur) ne fait pas par défaut, il y a les conversions lea xxx.l,an, jsr xxx.l -> lea d(pc),an, jsr d(pc)/bsr. jsr xxx.l prend 6 octets + 4 octets pour la relocation, jsr d(pc) et bsr en prennent 4. Pourtant, ces conversions sont parfaitement licites, font gagner de la place et du temps, s'il y a moins de 32 KO de différence...
Pollux
a écrit : Sans oublier les labels locaux de la forme \label, et qui sont définis jusque dans les accolades (assez pratique pour les sauts en arrière du type asm { \ret rts ; myfunc: add.w d0,d0 ; bne \ret ; ds.w 128 ; addq.w #1,d0 ; rts } )
Pollux a écrit :
Je rappelle que Tiltmaze se compile sans la moindre modification...
Bon je suis pas totalement sûr que la version GTC n'a pas de bug mais en tout cas :
TI-GCC > 8280 octets GTC > 7870 octets
la version GTC fait en fait 7960 octets
Pollux a écrit :
Et hop, TI-Mahjongg se recompile lui aussi avec GTC sans une seule modification!
En PPG (puisque c'est le format de la distribution TICT), GTC->6762 octets ; TIGCC->7112 octets.
Si je dis que je ne trouve pas ça un vrai problème, ce n'est pas parce que je ne l'ai jamais rencontré dans mes projets personnels, mais parce que le fait de mettre le nom 2 fois ne me dérange pas du tout. Le copier-coller est fait pour ça. Comment penses-tu que j'ai fait pour mes sprites en 0b? Je n'ai pas utilisé de logiciel d'édition d'images, juste des lignes tapées à la main et du copier-coller.
Pollux a écrit :
> GNU as (et donc l'assembleur inline de GCC) utilise des numéros pour ça Oui c'est vrai, j'avais oublié de dire qu'on ne peut pas faire de labels locaux avec un nom humain dans GCC.
> Mais la différence n'est pas si énorme que ça.
Tiens c'est bizarre, au début tu disais que le moindre % de différence était significatif et qu'il fallait refuser de compiler quoi que ce soit avec GTC pour cette raison
Pollux a écrit :
Le copier coller ne suffit pas, puisque tu es obligé de renommer offsetof(SYM_ENTRY,handle) en SYM_ENTRY__handle
Pollux a écrit :
mais Kevin, GTC gère aussi les F-Line
Kevin Kofler a écrit (#32) :
Et est-ce que GTC sait faire ça?
tigcc -Os -fomit-frame-pointer -DUSE_FLINE_ROM_CALLS -DUSE_INTERNAL_FLINE_EMULATOR -fno-function-cse test3.c
Linked test3 - Size: 2041 bytes Je n'ai retiré aucun patch, et j'ai une taille du 89z de 2129 octets seulement.
Pollux a écrit (#33) :
Non parce que c lent, et donc si on veut faire un prog lent mais petit, on pourra bientôt utiliser GT-Basic
Sinon c quoi -Wa,l ?
> Pour le genre d'exemple que tu as montré, un label 0: marche très bien.ça n'était qu'un exemple, dans la pratique, les fonctions sont bien plus grosses que ça (n'importe quelle fonction ASM comporte une bonne vingtaine de labels locaux, alors pour s'y retrouver, c pas top
)
Pollux a écrit :
> > mais Kevin, GTC gère aussi les F-Line
> Depuis quand? La dernière fois qu'on en a parlé, ils n'y étaient pas...
Oui, mais ça m'a pris environ 5 minutes chrono à rajouter (et en plus les function-cse marchent pour tout ce qui est autre chose que des ROM_CALLs)
> Mets un préfixe à tous tes labels. Ce n'est pas plus lourd que le '\'. Bien sûr que si, tu es obligé de rajouter un truc du style __DrawChar_ devant (ce qui rend déjà pas mal illisible),
et pour peu que tu veuilles créer une nouvelle fonction DrawCharInv, tu es obligé de renommer tous tes labels...
> Kevin Kofler a écrit :
> Un remplacement automatique fait ça en 10 secondes. Et ça peut être dangereux. Je t'ai déjà entendu le dire.