
Thibaut (./83) :
Le deuxième paragraphe en langage humain, ça donne quoi ?
xdef _ti89 xdef _nostub ; --------------------------------- BSRS MACRO ; func,retFunc move.b #(\@suiteDuCode-\2-2),\2+1 bra.s \1 \@suiteDuCode: ENDM RTSS MACRO ; retFunc \1 bra.s * ENDM BSRW MACRO ; func,retFunc move.w #(\@suiteDuCode-\2-2),\2+2 bra.w \1 \@suiteDuCode: ENDM RTSW MACRO ; retFunc \1 bra.w *+$FFE ; pour contrer l'optim forcée de bra.w * vers bra.s * avec les switchs par défaut #grrrr# ENDM ; --------------------------------- _ti89: _nostub: ; bra.s * BSRS func1,retFunc1 BSRW func2,retFunc2 rts ds.l 10 func1: move.l #-1,($4c00+50*30+8).w RTSS retFunc1 ds.b 300 func2: move.l #$FF00FF00,($4c00+49*30+8).w move.l #$00FF00FF,($4c00+50*30+8).w move.l #$FF00FF00,($4c00+51*30+8).w RTSW retFunc2 END
Pen^2 (./96) :
Ça ne bouffe pas de registre du tout, et ça se contente d'un accès mémoire en écriture, ça devrait être mieux qu'un bsr+rts non ?
(à priori ça fonctionne, mais vu mes souvenirs, ça demande à être vérifié)
Kevin Kofler (./98) :
bra.w avec un .w explicit n'est plus optimisé en bra.s depuis TIGCC 0.96 Beta 1.
Pollux (./99) :Pen^2 (./96) :Malheureusement non : tu dois lire un mot supplémentaire pour connaître \@suiteDuCode, et au moins un autre pour connaître \2+2 (en supposant qu'il n'y a pas de relogement) ; du coup rien que le move.w prend 16 cycles, ce qui fait que ton appel est 2 cycles plus lent qu'un bsr+rts ^^
Ça ne bouffe pas de registre du tout, et ça se contente d'un accès mémoire en écriture, ça devrait être mieux qu'un bsr+rts non ?
(à priori ça fonctionne, mais vu mes souvenirs, ça demande à être vérifié)
Thibaut (./97) :
Je crois qu'on fait difficilement plus crado
Pollux (./99) :
Bref, le code auto-modifié c'est généralement rentable que quand on exécute plusieurs fois le code modifié...
xdef _ti89 xdef _nostub ; --------------------------------- BSRS MACRO ; func,retFunc move.b #(\@suiteDuCode-\2-2),\2+1 bra.s \1 \@suiteDuCode: ENDM RTSS MACRO ; retFunc \1 bra.s * ENDM BSRW MACRO ; func,retFunc move.w #(\@suiteDuCode-\2-2),\2+2 bra.w \1 \@suiteDuCode: ENDM RTSW MACRO ; retFunc \1 bra.w *+$FFE ; pour contrer l'optim forcée de bra.w * vers bra.s * avec les switchs par défaut de TIGCC<0.96 Beta 1 ENDM ; --------------------------------- _ti89: _nostub: ;bra.s * move.l d0,-(a7) moveq #-1,d0 BSRS func1,retFunc1 dbf d0,*-2 BSRW func2,retFunc2 dbf d0,*-4 move.l (a7)+,d0 rts ds.l 10 func1: move.l #-1,($4c00+50*30+8).w RTSS retFunc1 ds.b 300 func2: move.l #$FF00FF00,($4c00+49*30+8).w move.l #$00FF00FF,($4c00+50*30+8).w move.l #$FF00FF00,($4c00+51*30+8).w RTSW retFunc2 END