Re: [Mesa-dev] [PATCH] intel/compiler: Print floating point values upto precision 8

2018-10-22 Thread Matt Turner
On Mon, Oct 22, 2018 at 2:14 PM Sagar Ghuge  wrote:
>
>
>
> On 10/22/18 10:34 AM, Matt Turner wrote:
> > On Fri, Oct 5, 2018 at 11:15 AM Sagar Ghuge  wrote:
> >>
> >> avoid misinterpretation of encoded immediate values in instruction and
> >> disassembled output.
> >>
> >> Signed-off-by: Sagar Ghuge 
> >> ---
> >> While encoding the immediate floating point values in instruction we use
> >> values upto precision 8, but while disassembling, we print precision to
> >> 6 places, which round up the value and gives wrong interpretation for
> >> encoded immediate constant. Printing it upto precision 8 will help in
> >> reassembling it again.
> >
> > Let's put that in the commit message.
> >
> >>  src/intel/compiler/brw_disasm.c | 2 +-
> >>  1 file changed, 1 insertion(+), 1 deletion(-)
> >>
> >> diff --git a/src/intel/compiler/brw_disasm.c 
> >> b/src/intel/compiler/brw_disasm.c
> >> index 322f4544df..7cbbc080b3 100644
> >> --- a/src/intel/compiler/brw_disasm.c
> >> +++ b/src/intel/compiler/brw_disasm.c
> >> @@ -1293,7 +1293,7 @@ imm(FILE *file, const struct gen_device_info 
> >> *devinfo, enum brw_reg_type type,
> >>format(file, "0x%08xV", brw_inst_imm_ud(devinfo, inst));
> >>break;
> >> case BRW_REGISTER_TYPE_F:
> >> -  format(file, "%-gF", brw_inst_imm_f(devinfo, inst));
> >> +  format(file, "%.8fF", brw_inst_imm_f(devinfo, inst));
> >
> > I'm not sure 8 digits is sufficient to get an exact representation
> > that the assembler can "round-trip". This page [1] indicates that 9
> > digits are necessary for binary->decimal->binary round-trips.
> >
> I was also not sure about it, [1] article is nice.
>
> > NIR takes another approach:
> >
> > vec1 32 ssa_0 = load_const (0x3f80 /* 1.00 */)
> >
> > What do you think about printing the binary representation and the
> > floating-point value? That way humans can easily read one number and
> > the assembler can easily read the other :)
> >
> I think we can just print F and DF to 9 and 17 precision respectively to avoid
> output alignment issue.

Ken pointed out to me that this wouldn't allow us to round-trip
different variations of NaN :(

So I think we have to take the NIR approach.
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH] intel/compiler: Print floating point values upto precision 8

2018-10-22 Thread Sagar Ghuge


On 10/22/18 10:34 AM, Matt Turner wrote:
> On Fri, Oct 5, 2018 at 11:15 AM Sagar Ghuge  wrote:
>>
>> avoid misinterpretation of encoded immediate values in instruction and
>> disassembled output.
>>
>> Signed-off-by: Sagar Ghuge 
>> ---
>> While encoding the immediate floating point values in instruction we use
>> values upto precision 8, but while disassembling, we print precision to
>> 6 places, which round up the value and gives wrong interpretation for
>> encoded immediate constant. Printing it upto precision 8 will help in
>> reassembling it again.
> 
> Let's put that in the commit message.
> 
>>  src/intel/compiler/brw_disasm.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/src/intel/compiler/brw_disasm.c 
>> b/src/intel/compiler/brw_disasm.c
>> index 322f4544df..7cbbc080b3 100644
>> --- a/src/intel/compiler/brw_disasm.c
>> +++ b/src/intel/compiler/brw_disasm.c
>> @@ -1293,7 +1293,7 @@ imm(FILE *file, const struct gen_device_info *devinfo, 
>> enum brw_reg_type type,
>>format(file, "0x%08xV", brw_inst_imm_ud(devinfo, inst));
>>break;
>> case BRW_REGISTER_TYPE_F:
>> -  format(file, "%-gF", brw_inst_imm_f(devinfo, inst));
>> +  format(file, "%.8fF", brw_inst_imm_f(devinfo, inst));
> 
> I'm not sure 8 digits is sufficient to get an exact representation
> that the assembler can "round-trip". This page [1] indicates that 9
> digits are necessary for binary->decimal->binary round-trips.
> 
I was also not sure about it, [1] article is nice. 
 
> NIR takes another approach:
> 
> vec1 32 ssa_0 = load_const (0x3f80 /* 1.00 */)
> 
> What do you think about printing the binary representation and the
> floating-point value? That way humans can easily read one number and
> the assembler can easily read the other :)
> 
I think we can just print F and DF to 9 and 17 precision respectively to avoid
output alignment issue.

> Also, I think the DF case immediately after this should be handled as well.
> 
Yes,  I was planning to handle it when I shift to 64 bit datatypes. But I can 
club both in single
patch. 
> [1] 
> https://www.exploringbinary.com/number-of-digits-required-for-round-trip-conversions/
> 
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH] intel/compiler: Print floating point values upto precision 8

2018-10-22 Thread Matt Turner
On Fri, Oct 5, 2018 at 11:15 AM Sagar Ghuge  wrote:
>
> avoid misinterpretation of encoded immediate values in instruction and
> disassembled output.
>
> Signed-off-by: Sagar Ghuge 
> ---
> While encoding the immediate floating point values in instruction we use
> values upto precision 8, but while disassembling, we print precision to
> 6 places, which round up the value and gives wrong interpretation for
> encoded immediate constant. Printing it upto precision 8 will help in
> reassembling it again.

Let's put that in the commit message.

>  src/intel/compiler/brw_disasm.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/src/intel/compiler/brw_disasm.c b/src/intel/compiler/brw_disasm.c
> index 322f4544df..7cbbc080b3 100644
> --- a/src/intel/compiler/brw_disasm.c
> +++ b/src/intel/compiler/brw_disasm.c
> @@ -1293,7 +1293,7 @@ imm(FILE *file, const struct gen_device_info *devinfo, 
> enum brw_reg_type type,
>format(file, "0x%08xV", brw_inst_imm_ud(devinfo, inst));
>break;
> case BRW_REGISTER_TYPE_F:
> -  format(file, "%-gF", brw_inst_imm_f(devinfo, inst));
> +  format(file, "%.8fF", brw_inst_imm_f(devinfo, inst));

I'm not sure 8 digits is sufficient to get an exact representation
that the assembler can "round-trip". This page [1] indicates that 9
digits are necessary for binary->decimal->binary round-trips.

NIR takes another approach:

vec1 32 ssa_0 = load_const (0x3f80 /* 1.00 */)

What do you think about printing the binary representation and the
floating-point value? That way humans can easily read one number and
the assembler can easily read the other :)

Also, I think the DF case immediately after this should be handled as well.

[1] 
https://www.exploringbinary.com/number-of-digits-required-for-round-trip-conversions/
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] intel/compiler: Print floating point values upto precision 8

2018-10-05 Thread Sagar Ghuge
avoid misinterpretation of encoded immediate values in instruction and
disassembled output.

Signed-off-by: Sagar Ghuge 
---
While encoding the immediate floating point values in instruction we use
values upto precision 8, but while disassembling, we print precision to
6 places, which round up the value and gives wrong interpretation for
encoded immediate constant. Printing it upto precision 8 will help in
reassembling it again.
 src/intel/compiler/brw_disasm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/intel/compiler/brw_disasm.c b/src/intel/compiler/brw_disasm.c
index 322f4544df..7cbbc080b3 100644
--- a/src/intel/compiler/brw_disasm.c
+++ b/src/intel/compiler/brw_disasm.c
@@ -1293,7 +1293,7 @@ imm(FILE *file, const struct gen_device_info *devinfo, 
enum brw_reg_type type,
   format(file, "0x%08xV", brw_inst_imm_ud(devinfo, inst));
   break;
case BRW_REGISTER_TYPE_F:
-  format(file, "%-gF", brw_inst_imm_f(devinfo, inst));
+  format(file, "%.8fF", brw_inst_imm_f(devinfo, inst));
   break;
case BRW_REGISTER_TYPE_DF:
   format(file, "%-gDF", brw_inst_imm_df(devinfo, inst));
-- 
2.17.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev