33784Fermer33786
GodzilLe 24/04/2018 à 13:18
Hmmmm:

https://godbolt.org/g/sVg5LB


En -O3 il deroule la boucle et produit enormement de code utilisant la vectorisation, c'est interessant, mais rend vraiment illisible. En -Os c'est plus interesant.

calc() va appeler strlen a chaque boucle, alors que calc2 non (ca parait logique vu le code, et passer un "const char *" n'y change rien) fait intéressant, calc2 utilise deux index, rbx comme position dans la chaine, rcx comme compteur, et le compteur lui est décentrementé. Donc le compilateur est tout a fait capable d'inverser le comptage pour rendre les choses "plus simple"

Autre point interessant, GCC ne produit pas le meme code:
https://godbolt.org/g/4ySEsN

strlen est inliné pour les deux fonction (repnz scasb) et n'est executé qu'une seule fois dans le cas de calc