christophe_d13 L'efficacité à tout prix. | Harkonen> Juste pour le fun...
En fait il y a quelques problèmes dans ton code...
Code :
- mov cl, bitposition //U... OK
- mov ah, 1 //V... OK
- mov al, 1 //U...OK
- sub ah, bitvalue //V...Attention sur certains cpu la lecture de la mémoire n'est pas paralélisation sur V ou pose de problème
- shl al, cl //U...OK (mais 2 cycles au total)
- xor ah, chaine //V...Idem que plus haut
- and ah, al //U...OK
- xor chaine, ah //V...WAR ! 1 cycle de pénalité. + 1 cycles de plus car on fait un Read-Modify-Write de chaine (read passe dans le pipe pour ne faire qu'un cycle de plus !)
|
Total... 7 cycles... A la deuxième exécution. (10 cycles à la première)
Ensuite il y a une erreur, ton code génère un problème sur le bit 0.
Je propose un code un peu différent (plus lisible également)
Code :
- mov cl, bitposition
- mov al, bitvalue
- shl al, cl
- mov dl, chaine
- or dl, al
- nop
- mov chaine, dl
|
Total... 5 cycles... (8 cycles à la première exécution)
On peut pousser à 5 cycles avec un WAR... (et 6 cycles à la première exécution)
Code :
- mov cl, bitposition
- mov dl, chaine
- shl bitvalue, cl
- or dl, bitvalue //WAR
- mov chaine, dl
|
Faut faire des concours pour le fun...
PS:Le code le plus rapide n'existe pas ! Message édité par christophe_d13 le 20-04-2004 à 23:42:02
|