#include "dglfixp.h"
fixed fix_sqrt(fixed x) {
int32 t, q, b, r;
r = x;
b = 0x40000000;
q = 0;
while (b > 0x40) {
t = q + b;
if (r >= t) {
r -= t;
q = t + b;
}
r <<= 1;
b >>= 1;
q >>= 8;
return q;
fixed fix_atan2(fixed y, fixed x) {
fixed absY, mask, angle, r, r3;
mask = (y >> (sizeof(fixed)*8-1));
absY = (y + mask) ^ mask;
if (x >= 0) {
r = fix_div(x - absY, x + absY);
} else {
r = fix_div(x + absY, absY - x);
return 0;