#include "game_types.h"

/* Float_Normalize2 @ 0x0801EC60 (real 90B) -- normalize via single-word loop into Sqrt. Mirrors src/matched/Float_Normalize2.c. */
/* Single-word variant (limit 30, pool 0x3FFFFFFF, INT_MIN -> 0xCF000000)
   ending in Float_Sqrt instead of FromIEEE754. */
extern int Float_Sqrt(int frame);

int Float_Normalize2(int x)
{
    int frame[4];
    int limit, lo;
    frame[0] = 3;
    frame[1] = (unsigned)x >> 31;
    if (x == 0) {
        frame[0] = 2;
    } else {
        limit = 30;
        lo = frame[1] != 0 ? -x : x;
        if (frame[1] != 0 && x == (int)0x80000000)
            return 0xCF000000;
        while ((unsigned)lo <= 0x3FFFFFFF) {
            lo <<= 1;
            limit--;
        }
        frame[2] = limit;
        frame[3] = lo;
    }
    return Float_Sqrt((int)frame);
}
