30 lines
543 B
C
30 lines
543 B
C
//---
|
|
// gint:image:fixed - Minimal fixed-point interface for linear transformations
|
|
//---
|
|
|
|
#ifndef GINT_IMAGE_FIXED
|
|
#define GINT_IMAGE_FIXED
|
|
|
|
/* Constants */
|
|
#define fconst(x) ((x) * 65536)
|
|
|
|
/* Multiplication */
|
|
static inline int fmul(int x, int y)
|
|
{
|
|
return ((int64_t)x * (int64_t)y) >> 32;
|
|
}
|
|
|
|
/* Multiplication with a scalar */
|
|
static inline int fmuls(int x, int s)
|
|
{
|
|
return ((int64_t)x * (int64_t)s) >> 16;
|
|
}
|
|
|
|
/* Division */
|
|
static inline int fdiv(int x, int y)
|
|
{
|
|
return ((int64_t)x << 16) / y;
|
|
}
|
|
|
|
#endif /* GINT_IMAGE_FIXED */
|