<div dir="ltr"><div>Hello Hemant,</div><div><br></div><div>Thanks for the fantastic explanation! It helps me understand P4 perfectly and totally makes sense to me!</div><div><br></div><div>Zhenyu</div><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><pre style="margin-top:0px;margin-bottom:0px;padding:0px;font-size:12px;color:rgb(51,51,51);white-space:pre-wrap!important"><pre style="color:rgb(34,34,34);margin-top:0px;margin-bottom:0px;padding:0px"><font face="arial, helvetica, sans-serif"><font color="#333333"><span style="white-space:pre-wrap"><br></span></font></font></pre><pre style="color:rgb(34,34,34);margin-top:0px;margin-bottom:0px;padding:0px"><font face="arial, helvetica, sans-serif"><font color="#333333"><span style="white-space:pre-wrap"><br></span></font></font></pre></pre></div></div></div></div></div></div><br></div><br><div class="gmail_quote"><div dir="ltr">On Mon, Sep 3, 2018 at 11:56 AM <<a href="mailto:hemant@mnkcg.com">hemant@mnkcg.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="blue" vlink="purple"><div class="m_7260550277510785715WordSection1"><p class="MsoNormal">Zhenyu,<u></u><u></u></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">The P4 compiler (p4c) has a backend which is platform-specific.  A hardware platform (e.g. switching asic) implements the p4c backend.  If a platform does not support certain operations, the p4c backend should raise an error and fail to compile the P4 program.<u></u><u></u></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">Hemant  <u></u><u></u></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal"><b>From:</b> P4-dev <<a href="mailto:p4-dev-bounces@lists.p4.org" target="_blank">p4-dev-bounces@lists.p4.org</a>> <b>On Behalf Of </b>Zhenyu Zhou<br><b>Sent:</b> Monday, September 03, 2018 10:42 AM<br><b>To:</b> <a href="mailto:mbudiu@vmware.com" target="_blank">mbudiu@vmware.com</a><br><b>Cc:</b> <a href="mailto:p4-dev@lists.p4.org" target="_blank">p4-dev@lists.p4.org</a><br><b>Subject:</b> Re: [P4-dev] Floating point support in P4<u></u><u></u></p><p class="MsoNormal"><u></u> <u></u></p><div><div><p class="MsoNormal">Hello Mihai,<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Thank you so much for the reply! It sounds like that even integer division and multiplication cannot be guaranteed. So may I ask what if it is not supported? How can we know whether it's supported or not, and if not, what happens if we still install such P4 program? (I believe this should be common knowledge for the P4 community, please forgive my stupid question.)<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Zhenyu<u></u><u></u></p></div><div><div><div><div><div><div><pre style="white-space:pre-wrap"><span style="color:#222222"><u></u> <u></u></span></pre></div></div></div></div></div></div><p class="MsoNormal"><u></u> <u></u></p></div><p class="MsoNormal"><u></u> <u></u></p><div><div><p class="MsoNormal">On Sun, Sep 2, 2018 at 11:54 PM Mihai Budiu <<a href="mailto:mbudiu@vmware.com" target="_blank">mbudiu@vmware.com</a>> wrote:<u></u><u></u></p></div><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in"><div><div><p class="MsoNormal"><span lang="RO">There is no fp datatype in p4. Even in C you can do integer divison and multiplication using these operators. Note that in p4 these are only guaranteed to be compile-time integer operations, a specific device may not support them at all.</span><u></u><u></u></p><p class="MsoNormal"><span lang="RO"> </span><u></u><u></u></p><p class="MsoNormal"><span lang="RO">Mihai</span><u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p></div><div class="MsoNormal" align="center" style="text-align:center"><hr size="3" width="98%" align="center"></div><div id="m_7260550277510785715m_4786444696151807938m_5832128165237084519divRplyFwdMsg"><p class="MsoNormal"><b><span style="color:black">From:</span></b><span style="color:black"> P4-dev <<a href="mailto:p4-dev-bounces@lists.p4.org" target="_blank">p4-dev-bounces@lists.p4.org</a>> on behalf of Zhenyu Zhou <<a href="mailto:zzy@cs.duke.edu" target="_blank">zzy@cs.duke.edu</a>><br><b>Sent:</b> Sunday, September 2, 2018 8:52:17 PM<br><b>To:</b> <a href="mailto:p4-dev@lists.p4.org" target="_blank">p4-dev@lists.p4.org</a><br><b>Subject:</b> [P4-dev] Floating point support in P4</span> <u></u><u></u></p><div><p class="MsoNormal"> <u></u><u></u></p></div></div><div><div><div><div><div><div><div><div><div><p class="MsoNormal">Hello,<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">I'm new to p4 and have a question regarding p4: does it support floating point calculations? Say, floating point multiplication and division (eg. 0.9*0.3 = 0.27). <u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">I find this video (<a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__na01.safelinks.protection.outlook.com_-3Furl-3Dhttps-253A-252F-252Fwww.youtube.com-252Fwatch-253Fv-253DU3Mn6o2j4zQ-26data-3D02-257C01-257Cmbudiu-2540vmware.com-257C203b3da1ffe346d6e62008d611505c3a-257Cb39138ca3cee4b4aa4d6cd83d9dd62f0-257C1-257C0-257C636715434173849832-26sdata-3DXkk7MFkZvboyKMd46IQJSzvQU46Mspv6oGhnCKbi-252FH8-253D-26reserved-3D0&d=DwMFJg&c=imBPVzF25OnBgGmVOlcsiEgHoG1i6YHLR0Sj_gZ4adc&r=Kqghso_RsUpNgH0awiGhJw&m=DJmsXirKLZPmsnwmI3sdkzcYhbfwyFd48S_ocqxhqCk&s=2e8ro9WbESLO-6R8_UYomP0M9BquE7ReYCLk67kYXGY&e=" target="_blank">https://www.youtube.com/watch?v=U3Mn6o2j4zQ</a>, 16min20s) suggesting that floating point is not supported. But the spec (<a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__na01.safelinks.protection.outlook.com_-3Furl-3Dhttps-253A-252F-252Fp4.org-252Fp4-2Dspec-252Fdocs-252FP4-2D16-2Dv1.0.0-2Dspec.html-2523sec-2Dexpr-2Deval-2Dorder-26data-3D02-257C01-257Cmbudiu-2540vmware.com-257C203b3da1ffe346d6e62008d611505c3a-257Cb39138ca3cee4b4aa4d6cd83d9dd62f0-257C1-257C0-257C636715434173849832-26sdata-3Dy5t1pIn8tHnfHtDgVJKYNAZyY3I8mVr2ZMg4Va-252BR1Jw-253D-26reserved-3D0&d=DwMFJg&c=imBPVzF25OnBgGmVOlcsiEgHoG1i6YHLR0Sj_gZ4adc&r=Kqghso_RsUpNgH0awiGhJw&m=DJmsXirKLZPmsnwmI3sdkzcYhbfwyFd48S_ocqxhqCk&s=kla6ekUJOGUV-sIyh3MP5NvJWjK8wV2KV6weH7XkQoY&e=" target="_blank">https://p4.org/p4-spec/docs/P4-16-v1.0.0-spec.html#sec-expr-eval-order</a>) says:<u></u><u></u></p></div><div><pre style="background:#e6ffff"><code><span style="font-size:9.5pt;font-family:"inherit",serif;color:black">expression<u></u><u></u></span></code></pre><pre style="background:#e6ffff"><code><span style="font-size:9.5pt;font-family:"inherit",serif;color:black">    ......<u></u><u></u></span></code></pre><pre style="background:#e6ffff"><code><span style="font-size:9.5pt;font-family:"inherit",serif;color:black">    | expression </span></code><code><span style="font-size:9.5pt;font-family:"inherit",serif;color:maroon">'*'</span></code><code><span style="font-size:9.5pt;font-family:"inherit",serif;color:black"> expression<u></u><u></u></span></code></pre><pre style="background:#e6ffff"><code><span style="font-size:9.5pt;font-family:"inherit",serif;color:black">    | expression </span></code><code><span style="font-size:9.5pt;font-family:"inherit",serif;color:maroon">'/'</span></code><code><span style="font-size:9.5pt;font-family:"inherit",serif;color:black"> expression</span></code><span style="color:black"><u></u><u></u></span></pre></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">I'm kind of confused here. Any insights for this? Can I achieve such arithmetic<span style="font-family:"MS Gothic"">?</span><u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Thanks in advance!<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Zhenyu<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><div><div><div><div><div><div><div><div><pre style="white-space:pre-wrap"><span style="color:#222222"><u></u> <u></u></span></pre></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></blockquote></div></div></div></blockquote></div>