Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a838834b authored by Alex Deucher's avatar Alex Deucher
Browse files

drm: fix 64 bit drm fixed point helpers



Sign bit wasn't handled properly and a small typo.

Thanks to Christian for helping me sort this out.

Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 42a21826
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -84,12 +84,12 @@ static inline int drm_fixp2int(int64_t a)
	return ((s64)a) >> DRM_FIXED_POINT;
}

static inline s64 drm_fixp_msbset(int64_t a)
static inline unsigned drm_fixp_msbset(int64_t a)
{
	unsigned shift, sign = (a >> 63) & 1;

	for (shift = 62; shift > 0; --shift)
		if ((a >> shift) != sign)
		if (((a >> shift) & 1) != sign)
			return shift;

	return 0;
@@ -100,9 +100,9 @@ static inline s64 drm_fixp_mul(s64 a, s64 b)
	unsigned shift = drm_fixp_msbset(a) + drm_fixp_msbset(b);
	s64 result;

	if (shift > 63) {
		shift = shift - 63;
		a >>= shift >> 1;
	if (shift > 61) {
		shift = shift - 61;
		a >>= (shift >> 1) + (shift & 1);
		b >>= shift >> 1;
	} else
		shift = 0;
@@ -120,7 +120,7 @@ static inline s64 drm_fixp_mul(s64 a, s64 b)

static inline s64 drm_fixp_div(s64 a, s64 b)
{
	unsigned shift = 63 - drm_fixp_msbset(a);
	unsigned shift = 62 - drm_fixp_msbset(a);
	s64 result;

	a <<= shift;
@@ -154,7 +154,7 @@ static inline s64 drm_fixp_exp(s64 x)
	}

	if (x < 0)
		sum = drm_fixp_div(1, sum);
		sum = drm_fixp_div(DRM_FIXED_ONE, sum);

	return sum;
}