<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:"MS Gothic";
        panose-1:2 11 6 9 7 2 5 8 2 4;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
        {font-family:"\@MS Gothic";
        panose-1:2 11 6 9 7 2 5 8 2 4;}
@font-face
        {font-family:inherit;
        panose-1:0 0 0 0 0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
code
        {mso-style-priority:99;
        font-family:"Courier New";}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;}
span.EmailStyle21
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal>Zhenyu,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></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.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Hemant  <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>From:</b> P4-dev <p4-dev-bounces@lists.p4.org> <b>On Behalf Of </b>Zhenyu Zhou<br><b>Sent:</b> Monday, September 03, 2018 10:42 AM<br><b>To:</b> mbudiu@vmware.com<br><b>Cc:</b> p4-dev@lists.p4.org<br><b>Subject:</b> Re: [P4-dev] Floating point support in P4<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><div><div><p class=MsoNormal>Hello Mihai,<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></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.)<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Zhenyu<o:p></o:p></p></div><div><div><div><div><div><div><pre style='white-space:pre-wrap'><span style='color:#222222'><o:p> </o:p></span></pre></div></div></div></div></div></div><p class=MsoNormal><o:p> </o:p></p></div><p class=MsoNormal><o:p> </o:p></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:<o:p></o:p></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 style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><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><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=RO> </span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=RO>Mihai</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p></o:p></p></div><div class=MsoNormal align=center style='text-align:center'><hr size=3 width="98%" align=center></div><div id="m_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> <o:p></o:p></p><div><p class=MsoNormal> <o:p></o:p></p></div></div><div><div><div><div><div><div><div><div><div><p class=MsoNormal>Hello,<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></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). <o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></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:<o:p></o:p></p></div><div><pre style='background:#E6FFFF'><code><span style='font-size:9.5pt;font-family:"inherit",serif;color:black'>expression<o:p></o:p></span></code></pre><pre style='background:#E6FFFF'><code><span style='font-size:9.5pt;font-family:"inherit",serif;color:black'>    ......<o:p></o:p></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<o:p></o:p></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'><o:p></o:p></span></pre></div><div><p class=MsoNormal><o:p> </o:p></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><o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Thanks in advance!<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Zhenyu<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><div><div><div><div><div><div><div><div><pre style='white-space:pre-wrap'><span style='color:#222222'><o:p> </o:p></span></pre></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></blockquote></div></div></body></html>