J'ai quelques questions sur de l'optimisation de code.
Je travail sur un �mulateur et l code suivant � pour but de lire un word stock� en big endian (sur une architecture little endian)
B = Base
A = Adresse
D = La donn�e
1�re solution :
=> Je compte 2 acc�s m�moire (1 fois pour lire B[A+0] et une autre pour lire B[A+1))Code:D = (B[A+0] << 8) | (B[A+1])
2 �me solution :
=> Je compte 1 acc�s m�moire mais plus d'op�ration (je suppose que D est travaill�e dans un registre ...)Code:
1
2 D = *((u16*) (B + A)) /* On lit le word à l'adresse B + A */ D = ((D & 0xFF) << 8) | ((D & 0xFF00) >> 8) /* On swap les bytes */
3 �me solution :
=> �quivalent � la deuxi�me mais �crit en une seule ligne.Code:D = ((*((u16*) (B + A)) & 0xFF) << 8) | ((*((u16*) (B + A)) & 0xFF00) >> 8)
Est ce que le compilateur va d�tecter que *((u16*) (B + A)) est pr�sent deux fois et ne va faire qu'un seul acc�s m�moire ?
Merci pour l'aide que vous pourrez m'apporter.