travaille sur des long words et non des words et plus besoin d'un and
ou ton "and" fait le a la toute fin, quand le hash est fini de calculer
mais bon comme dit plus haut 5 ou 10 cycle c'est rien, ie si gagner "20 cycles" ne t'a fait gagner que 5% c'est que le bottleneck est ailleurs
Un bref calcul sachant qu'on prend une HW1 a 10Mhz,
qu'il faut entre 4 et 5 cycle d'horloge pour executer un cycle d'instruction sur un 68000 (donc je prend 4.5 front d'horloge pour faire une moyenne)
On a donc
(1 / (10 MHz)) * 4.5 = 100 nanosecondes
100 ns pour chaques cycles
Si on prend dans la doc officielle de motorola/freescale
andi #xx, dx
Il faut pour un byte/word 8 cycles
donc 8 * 100 ns soit 800 nanosecondes
si on prend un fichier de 65533 Octets, l'execution des 65533 andi prendras 52,4 ms
Si on prend le nombre total de cycles de:
move.l a2,a0 ; 4
move.b (a0)+,d0 ; 8
add.w d0,d0 ; 4
add.w d0,d0 ; 4
moveq #0,d1 ; 4
move.b (a0)+,d1 ; 8
add.w d1,d0 ; 4
add.w d0,d0 ; 4
add.w d0,d0 ; 4
move.b (a0),d1 ; 8
add.w d1,d0 ; 4
andi.w #$0FFF,d0 ; 8
add.w d0,d0 ; 4
add.w d0,d0 ; 4
lea 0(a6,d0.w),a1 ; 12
soit 84 cycles, autant dire que les 8 cycles sont quand meme ridicules...
sachant que la le code prendrait 550 ms pour lui tout seul.. 52 ms de plus ou de moins ne change plus grand chose, sachant que ce n'est pas le seul code utilisé
Je sais pas comment tu obtiens 58Ko/s mais la rien que théoriquement juste sur le calcul du hash ce n'est pas possible...
La on obtiens du 25 a 26Ko/s max juste pour le calcul du hash...
edit: #phoque#