Commit b236e048 authored by Dmytro Laktyushkin's avatar Dmytro Laktyushkin Committed by Alex Deucher

drm/amd/display: simplify dml log2 function

Current implementation is slightly inaccurate and will often
result in truncation/floor operation decrementing an exact
integer output by 1.

Only rounded down output is ever expected, just extract the fp
exponent for this to increase performance and avoid any
truncation issues.
Signed-off-by: default avatarDmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
Reviewed-by: default avatarEric Bernstein <Eric.Bernstein@amd.com>
Acked-by: default avatarQingqing Zhuo <qingqing.zhuo@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 0023b7ee
......@@ -86,9 +86,20 @@ static inline double dml_round(double a)
return floor;
}
static inline double dml_log2(double x)
/* float
static inline int dml_log2(float x)
{
return (double) dcn_bw_log(x, 2);
unsigned int ix = *((unsigned int *)&x);
return (int)((ix >> 23) & 0xff) - 127;
}*/
/* double */
static inline int dml_log2(double x)
{
unsigned long long ix = *((unsigned long long *)&x);
return (int)((ix >> 52) & 0x7ff) - 1023;
}
static inline double dml_pow(double a, int exp)
......@@ -116,11 +127,6 @@ static inline double dml_floor_ex(double x, double granularity)
return (double) dcn_bw_floor2(x, granularity);
}
static inline double dml_log(double x, double base)
{
return (double) dcn_bw_log(x, base);
}
static inline unsigned int dml_round_to_multiple(unsigned int num,
unsigned int multiple,
unsigned char up)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment