V4L/DVB: lgs8gxx: Use shifts rather than multiply/divide when possible
If val is a u64, then following: val *= (u64)1 << 32; val /= (u64)1 << 32; should surely be better represented as: val <<= 32; val >>= 32; Especially as, for the division, the compiler might want to actually do a division: drivers/built-in.o: In function `lgs8gxx_get_afc_phase': drivers/media/dvb/frontends/lgs8gxx.c:250: undefined reference to `__udivdi3' Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
committed by
Mauro Carvalho Chehab
parent
5bf5834738
commit
3ab1b9cecd
@@ -199,7 +199,7 @@ static int lgs8gxx_set_if_freq(struct lgs8gxx_state *priv, u32 freq /*in kHz*/)
|
|||||||
|
|
||||||
val = freq;
|
val = freq;
|
||||||
if (freq != 0) {
|
if (freq != 0) {
|
||||||
val *= (u64)1 << 32;
|
val <<= 32;
|
||||||
if (if_clk != 0)
|
if (if_clk != 0)
|
||||||
do_div(val, if_clk);
|
do_div(val, if_clk);
|
||||||
v32 = val & 0xFFFFFFFF;
|
v32 = val & 0xFFFFFFFF;
|
||||||
@@ -246,7 +246,7 @@ static int lgs8gxx_get_afc_phase(struct lgs8gxx_state *priv)
|
|||||||
|
|
||||||
val = v32;
|
val = v32;
|
||||||
val *= priv->config->if_clk_freq;
|
val *= priv->config->if_clk_freq;
|
||||||
val /= (u64)1 << 32;
|
val >>= 32;
|
||||||
dprintk("AFC = %u kHz\n", (u32)val);
|
dprintk("AFC = %u kHz\n", (u32)val);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user