163Fermer165
Lionel DebrouxLe 17/11/2008 à 13:34
__ld_bss_even_end (nom non définitif) pourrait facilement être calculé en temps d'exécution: move.l #__ld_bss_end,d0; addq.l #1,d0; lsr.w #1,d0; add.w d0,d0

Oooh, Kevin utilise la vilaine syntaxe non libre eek

move.l #__ld_bss_end,d0; addq.l #1,d0; andi.w $FFFE,d0 est plus rapide mais fait la même taille.
Comparée à
move.l #__ld_bss_even_end,d0
cette séquence coûte au moins 6 octets (économisables au linking, du moins dans les versions de ld-tigcc où ce patch trivial est implémenté):
* il y a relocation dans les deux cas, +/-0;
* si on pousse dn sur la pile, ça coûte 6 octets;
* si on transfère dn vers un registre d'adresse (_ld_bss_even_end est un pointeur, donc c'est pas improbable qu'on fasse ça si on l'utilise en tant que pointeur, comme borne d'itération par exemple), ça coûtera deux octets de plus.