Sqrt inverso para ponto fixo

Estou procurando o melhor algoritmo de raiz quadrada inversa para números de ponto fixo 16.16. O código abaixo é o que tenho até agora (mas basicamente ele pega a raiz quadrada e divide pelo número original, e eu gostaria de obter a raiz quadrada inversa sem uma divisão). Se mudar alguma coisa, o código será compilado para armv5te.

uint32_t INVSQRT(uint32_t n)
{
    uint64_t op, res, one;
    op = ((uint64_t)n<<16);
    res = 0;
    one = (uint64_t)1 << 46;
    while (one > op) one >>= 2;
    while (one != 0)
    {
        if (op >= res + one)
        {
            op -= (res + one);
            res +=  (one<<1);
        }
        res >>= 1;
        one >>= 2;
    }
    res<<=16;
    res /= n;
    return(res);
}

questionAnswers(2)

yourAnswerToTheQuestion