<div dir="auto">That is likely to change depending on GCC optimization setting, no?<div dir="auto"><br></div><div dir="auto">J.E.B.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Mar 16, 2019, 5:12 PM  <<a href="mailto:karl@aspodata.se">karl@aspodata.se</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Will Godfrey:<br>
> On Wed, 13 Mar 2019 00:09:17 +0100 (CET)<br>
> <a href="mailto:karl@aspodata.se" target="_blank" rel="noreferrer">karl@aspodata.se</a> wrote:<br>
> <br>
> >Will Godfrey:<br>
> >> Does anyone know if GCC will replace power of 2 multiplications/divisions of<br>
> >> unsigned integers with bit shifts?  <br>
...<br>
> >$ cat a.c<br>
> >#include <stdint.h><br>
> ><br>
> >int main(int argc, char *argv[]) {<br>
> >  uint16_t b = argc * 2;<br>
> ><br>
> >  return b;<br>
> >}<br>
> >$ gcc -S a.c <br>
,,,<br>
> >It seems it just adds the value with itself here.<br>
...<br>
> Thanks, that seems to hold true for a mixture of AMD and Intel machines.<br>
<br>
BTW, testing with 4, 8 and 16 instead of 2, it does actually do bit <br>
shifts:<br>
<br>
$ diff a.02.s a.04.s <br>
16c16<br>
<       addl    %eax, %eax<br>
---<br>
>       sall    $2, %eax<br>
$ diff a.02.s a.08.s <br>
16c16<br>
<       addl    %eax, %eax<br>
---<br>
>       sall    $3, %eax<br>
$ diff a.02.s a.16.s <br>
16c16<br>
<       addl    %eax, %eax<br>
---<br>
>       sall    $4, %eax<br>
<br>
Regards,<br>
/Karl Hammar<br>
_______________________________________________<br>
Linux-audio-dev mailing list<br>
<a href="mailto:Linux-audio-dev@lists.linuxaudio.org" target="_blank" rel="noreferrer">Linux-audio-dev@lists.linuxaudio.org</a><br>
<a href="https://lists.linuxaudio.org/listinfo/linux-audio-dev" rel="noreferrer noreferrer" target="_blank">https://lists.linuxaudio.org/listinfo/linux-audio-dev</a><br>
</blockquote></div>