blob: d64459d078e5f424ef80acd1a25b7efe64caf612 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#include <stdint.h>
static const unsigned int divtab[730] = {
[1] = 0xffff + 1l,
[3] = 0x5555 + 1l,
[9] = 0x1c71 + 1l,
[27] = 0x097b + 1l,
[81] = 0x0329 + 1l,
[243] = 0x010d + 1l,
[729] = 0x0059 + 1l
};
#define FASTDIV(n, d) (((n) * divtab[d]) >> 16)
int new32v3(int i, int x, int y)
{
int A;
A = i + x * y;
return A - 3 * y * (FASTDIV(A, 3 * y) - FASTDIV(i, 3 * y));
}
|