Optimierung hier noch möglich?
-
Hi,
kann man folgenden Code noch weiter optimieren auf mehr speed?
__inline unsigned long cw2 (unsigned long Number) { unsigned long RetVal = 1; __asm { xor ecx, ecx bsr ecx, Number inc ecx shl RetVal, cl } return(RetVal); }
Die Funktion errechnet den nächst höhergelegenen Zweierpotenz. Also gibt man 960 an, spuckt er 1024 aus.
-
__inline unsigned long cw2 (unsigned long Number) { __asm { mov eax, 1 xor ecx, ecx bsr ecx, Number inc ecx shl eax, cl } }
ABER: DAs bringt wohl sowieso nichts mehr...
-
stimmt auch wieder
-
mov eax, 1 xor ecx, ecx bsr ecx, Number inc ecx shl eax, cl
wird zu
mov eax, 2 xor ecx, ecx bsr ecx, Number shl eax, cl
das mit dem xor ecx,ecx kann ich nicht nacvollziehen. AFAIR ist das ergebnis von bsr von 0 undefiniert und nicht einfach nixtun.
assert(Number!=0); mov eax, 2 bsr ecx, Number shl eax, cl