blob: ec48cc8988913cc3ee0791441780cf01069324d0 [file] [log] [blame]
//#include "math.h"
// Arithmatic functions using add & subtract
#include "h264parse.h"
uint32_t mult_u(register uint32_t var1, register uint32_t var2)
{
register unsigned long var_out = 0;
while (var2 > 0)
{
if (var2 & 0x01)
{
var_out += var1;
}
var2 >>= 1;
var1 <<= 1;
}
return var_out;
}// mult_u
uint32_t ldiv_mod_u(uint32_t a, uint32_t b, uint32_t * mod)
{
register unsigned long div = b;
register unsigned long res = 0;
register unsigned long bit = 0x1;
if (!div)
{
*mod = 0;
return 0xffffffff ; // Div by 0
}
if (a < b)
{
*mod = a;
return 0; // It won't even go once
}
while (!(div & 0x80000000))
{
div <<= 1;
bit <<= 1;
}
while (bit)
{
if (div <= a)
{
res |= bit;
a -= div;
}
div >>= 1;
bit >>= 1;
}
*mod = a;
return res;
}// ldiv_mod_u
unsigned ldiv_u(register unsigned a, register unsigned b)
{
register unsigned div = b << 16;
register unsigned res = 0;
register unsigned bit = 0x10000;
while (bit)
{
div >>= 1;
bit >>= 1;
if (div < a)
{
res |= bit;
a -= div;
}
}
return res;
}