Optimisons un poil ! [Was: Re: Les Endians attaquent]

Top Page

Reply to this message
Author: Francois-Xavier KOWALSKI
Date:  
To: guilde
Old-Topics: Re: Les Endians attaquent
Subject: Optimisons un poil ! [Was: Re: Les Endians attaquent]
Salut,

histoire de tenter de maximiser la vitesse de cette charmante fonction
(qui, si elle est utilisée, l'est probablement à des cadences
élévées...).

>>>>> "Edgar" == Edgar Bonet Orozco <edgar@???>
>>>>> writes:


[...]

Edgar> Pour traduire entre gros boutiste et petit boutiste sur Intel, tu peux
Edgar> utiliser les fonctions htons() et compagnie (host byte order = petit
Edgar> boutiste sur Intel, network byte order = gros boutiste). Tu peux aussi
Edgar> inverser les octets à la main, comme dans

  Edgar>     short inverse_short(short x)
  Edgar>     {
  Edgar>         return x<<8 & 0xff00 | x>>8 & 0xff;
  Edgar>     }


Edgar> Tu peux aussi faire un inline ou un #define.

1) Si x est un vrai short comme je l'entends (16 bits signés), le
"x>>8 & 0xff" peut-etre replacé par un "x>>8" tout simple. Je ne
suis pas sûr qu'un compilo touve celà tout seul.

2) Je suppose qu'une opération -- si simple soit-elle (comme le
chargement d'un registre depuis la mémoire, ou le ET bit-à-bit) --
est plus rapide sur un octet que sur un short. Je suggère donc "(x
& 0xff) << 8" en lieu et place de "x<<8 & 0xff00".

3) Simple remarque de codeur: Je suis surpris que le compilo ne
s'insurge pas à la lecture d'une expréssion comportant somme toute
pas mal d'opérateurs, pour bien peu de parenthèses...

Commentaires ?
    A+.
        Fix.
-- 
Fix & Cathy KOWALSKI                      mailto:ayoul@club-internet.fr
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Too many people are thinking of security instead of opportunity.  They
seem more afraid of life than death. -- James F. Byrnes