<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Wed, Dec 5, 2018 at 5:32 AM Pohjolainen, Topi <<a href="mailto:topi.pohjolainen@gmail.com">topi.pohjolainen@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Wed, Dec 05, 2018 at 12:26:06PM +0100, Iago Toral wrote:<br>
> On Wed, 2018-12-05 at 13:20 +0200, Pohjolainen, Topi wrote:<br>
> > On Wed, Dec 05, 2018 at 11:53:44AM +0100, Iago Toral wrote:<br>
> > > On Wed, 2018-12-05 at 11:39 +0200, Pohjolainen, Topi wrote:<br>
> > > > I remember people preferring to order things 16, 32, 64 before.<br>
> > > > Should<br>
> > > > we follow that here as well?<br>
> > > <br>
> > > Yes, it makes sense. I'll change that.<br></blockquote><div><br></div><div>Agreed.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
> > > <br>
> > > > On Tue, Dec 04, 2018 at 08:16:46AM +0100, Iago Toral Quiroga<br>
> > > > wrote:<br>
> > > > > ---<br>
> > > > >  src/compiler/nir/nir_opt_algebraic.py | 5 +++++<br>
> > > > >  1 file changed, 5 insertions(+)<br>
> > > > > <br>
> > > > > diff --git a/src/compiler/nir/nir_opt_algebraic.py<br>
> > > > > b/src/compiler/nir/nir_opt_algebraic.py<br>
> > > > > index 6c3b77c9b6e..747f1751086 100644<br>
> > > > > --- a/src/compiler/nir/nir_opt_algebraic.py<br>
> > > > > +++ b/src/compiler/nir/nir_opt_algebraic.py<br>
> > > > > @@ -778,6 +778,8 @@ def fexp2i(exp, bits):<br>
> > > > >        return ('ishl', ('iadd', exp, 127), 23)<br>
> > > > >     elif bits == 64:<br>
> > > > >        return ('pack_64_2x32_split', 0, ('ishl', ('iadd', exp,<br>
> > > > > 1023), 20))<br>
> > > > > +   elif bits == 16:<br>
> > > > > +      return ('i2i16', ('ishl', ('iadd', exp, 15), 10))<br>
> > > > >     else:<br>
> > > > >        assert False<br>
> > > > >  <br>
> > > > > @@ -796,6 +798,8 @@ def ldexp(f, exp, bits):<br>
> > > > >        exp = ('imin', ('imax', exp, -252), 254)<br>
> > > > >     elif bits == 64:<br>
> > > > >        exp = ('imin', ('imax', exp, -2044), 2046)<br>
> > > > > +   elif bits == 16:<br>
> > > > > +      exp = ('imin', ('imax', exp, -30), 30)<br>
> > > > <br>
> > > > I expected this to be:<br>
> > > > <br>
> > > >          exp = ('imin', ('imax', exp, -29), 30)<br>
> > > <br>
> > > Actually, I think this should be -28, since the minimum exponent<br>
> > > value<br>
> > > is -14.<br>
> > <br>
> > I kept wondering about. The offset is 15 and -14 - 15 yields -29. But<br>
> > -28<br>
> > in turn would be more in line with the 32- and 64-bit cases.<br>
> <br>
> I think the idea is to have this be 2x the minimum (and maximum)<br>
> exponents we can represent, since below we are dividing it by two and<br>
> emitting two exponentials, each with half that exponent. That way we<br>
> ensure that when we divide the exponent by 2 we still produce a<br>
> representable exponent for the bit-size.<br>
<br>
Ah, right. I should have checked the context, -28 makes sense now.<br>
<br>
Reviewed-by: Topi Pohjolainen <<a href="mailto:topi.pohjolainen@intel.com" target="_blank">topi.pohjolainen@intel.com</a>><br></blockquote><div><br></div><div>With things in the right order and [-28, 30],</div><div><br></div><div>Reviewed-by: Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>><br></div></div></div>