J'ai tenté de faire une fonction en C pour effacer un buffer (bon ici c'est l'écran) histoire de voir comment je pouvais optimiser au maximum (je pense que ça ne sert pas à grand chose de dérouler encore la boucle) ça et voilà ce que ça donne :
__attribute__((regparm))void clrbuff()
{
short i=0;
unsigned long long *screen_long = (long long*)LCD_MEM;
while(i<750) // 750 = 3000 / 32
{
*screen_long++=0x00000000;
*screen_long++=0x00000000;
*screen_long++=0x00000000;
*screen_long++=0x00000000;
*screen_long++=0x00000000;
*screen_long++=0x00000000;
*screen_long++=0x00000000;
*screen_long++=0x00000000;
i=i+16;
}
}
Je serais curieux de savoir comment on peut faire pour l'optimiser encore plus (si possible) en C.... enfin ça ne me dérange pas si il y a de l'asm non plus.
En asm ça donne :
move.w #19456,%a0
move.w #736,%d0
.L8:
clr.l (%a0)+
clr.l (%a0)+
clr.l (%a0)+
clr.l (%a0)+
clr.l (%a0)+
clr.l (%a0)+
clr.l (%a0)+
clr.l (%a0)+
clr.l (%a0)+
clr.l (%a0)+
clr.l (%a0)+
clr.l (%a0)+
clr.l (%a0)+
clr.l (%a0)+
clr.l (%a0)+
clr.l (%a0)+
add.w #-16,%d0
jbpl .L8
Ca ne doit pas vraiment être ce qu'il y a de plus rapide. Je crois que movem.l va est bcp plus rapide mais je ne sais pas comment l'utiliser.