22Fermer24
PolluxLe 20/03/2006 à 14:41
Je ne sais pas si ça t'intéressera, elle n'a pas du tout la prétention d'être state-of-the-art ou quoi que ce soit, je dis juste qu'elle est plus efficace que ./17 smile
// d3 <= 8
// d4 = (1<<d3)-1
// d5 = ~d4

  move.w (a1)+,d0
  rol.l d3,d0    // ou ror/swap si shift>8
  and.w d4,d0

boucle {

  move.l (a1)+,d1
  rol.l d3,d1    // ou ror/swap si shift>8
  move.l d1,d2
  and.w d4,d2
  and.w d5,d1
  or.w d1,d0
  move.l d0,(a0)+

  ... idem en échangeant d0 et d2 ...

}

soit 48+2n cycles pour afficher 32 nouveaux pixels, à comparer avec 28+2m cycles pour afficher 16 pixels avec la méthode de ./17 ^^

(le pire des cas est atteint pour n=9, donc 66 cycles/32 bits avec cette méthode, comparé au pire des cas m=8 -- 44 cycles/16 bits = 88 cycles/32 bits avec ./17 modifié pour que shift<=8 ; donc en fait c'est 33% plus rapide smile)