Buenas, he visto que los compiladores pueden optimizar las divisiones con constantes, por ejemplo, si divides entre 9 al optimizar se vería algo así:
Código PHP:
mov eax, 38e38e38
mul esi
mov eax,edx
shr eax,1
La cosa es invertir eso y que cuando vea ese código pueda obtener el divisor.
He encontrado informacion en inglés y con un nivel de matemáticas que no comprendo y que el inglés no me ayuda porque no sé mucho.
Hasta ahora hago algo como:
(2^(32+s))/M=D
D es divisor
s es el valor de desplazamiento lógico
M es el número mágico .
Esto funciona pero no para todos, por ejemplo con el 62, 63, 70...
Dónde esa formula no sirve y el compilador no hace lo mismo y hace algo así por ejemplo para el 63:
Código PHP:
mov eax,41041041
mul esi
sub esi,edx
shr esi,1
add esi, edx
shr esi,5
Como ven enreda bastante más y no sé a que fórmula equivale ni como decidir cuándo debo usar una u otra.
¿Alguien que entienda y pueda ayudarme?