<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)">
<style><!--
/* Font Definitions */
@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;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","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;}
span.apple-converted-space
        {mso-style-name:apple-converted-space;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@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"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Christian, I will take a look.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Regards,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Michael<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""> Christian Thalinger [mailto:christian.thalinger@oracle.com]
<br>
<b>Sent:</b> Monday, June 01, 2015 2:27 PM<br>
<b>To:</b> Berg, Michael C<br>
<b>Cc:</b> hotspot-compiler-dev@openjdk.java.net<br>
<b>Subject:</b> Re: RFR 8076276 support for AVX512<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">On Jun 1, 2015, at 1:21 PM, Berg, Michael C <<a href="mailto:michael.c.berg@intel.com">michael.c.berg@intel.com</a>> wrote:<o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Yes Christian, in restore, we should add like in the other two locations in that code.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I have other changes which address more AVX512 extensions, do you want me to just add this change to the webrev I created for that set?</span><o:p></o:p></p>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<p class="MsoNormal">Yes.  I wanted to ask you something else:  currently I’m trying to merge with these changes:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><a href="http://hg.openjdk.java.net/graal/graal/diff/a560c9b81f0f/src/cpu/x86/vm/sharedRuntime_x86_64.cpp">http://hg.openjdk.java.net/graal/graal/diff/a560c9b81f0f/src/cpu/x86/vm/sharedRuntime_x86_64.cpp</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">and I’m trying to use enum values for offsets instead of hardcoded ones.  Unfortunately I don’t have a good solution yet but maybe you have an idea.  I would like to have this change upstream.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Thanks,</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Michael</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
</div>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<div>
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">From:</span></b><span class="apple-converted-space"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""> </span></span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">Christian
 Thalinger [<a href="mailto:christian.thalinger@oracle.com">mailto:christian.thalinger@oracle.com</a>]<span class="apple-converted-space"> </span><br>
<b>Sent:</b><span class="apple-converted-space"> </span>Monday, June 01, 2015 10:51 AM<br>
<b>To:</b><span class="apple-converted-space"> </span>Berg, Michael C<br>
<b>Cc:</b><span class="apple-converted-space"> </span><a href="mailto:hotspot-compiler-dev@openjdk.java.net">hotspot-compiler-dev@openjdk.java.net</a><br>
<b>Subject:</b><span class="apple-converted-space"> </span>Re: RFR 8076276 support for AVX512</span><o:p></o:p></p>
</div>
</div>
</div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
<div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal">On May 8, 2015, at 12:09 PM, Vladimir Kozlov <<a href="mailto:vladimir.kozlov@oracle.com"><span style="color:purple">vladimir.kozlov@oracle.com</span></a>> wrote:<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">I applied small "cosmetic" changes sent by Michael and I am pushing this.<br>
<br>
Here is updated webrev for the record (I also removed trailing spaces in .ad files):<br>
<br>
<a href="http://cr.openjdk.java.net/~kvn/8076276/webrev.03"><span style="color:purple">http://cr.openjdk.java.net/~kvn/8076276/webrev.03</span></a><o:p></o:p></p>
</div>
</div>
</blockquote>
<div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal">I think I found a bug:<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"><a href="http://cr.openjdk.java.net/~kvn/8076276/webrev.03/src/cpu/x86/vm/sharedRuntime_x86_64.cpp.udiff.html"><span style="color:purple">http://cr.openjdk.java.net/~kvn/8076276/webrev.03/src/cpu/x86/vm/sharedRuntime_x86_64.cpp.udiff.html</span></a><o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">in RegisterSaver::restore_live_registers:<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">      __ vinsertf64x4h(xmm31, Address(rsp, 992));<br>
      __ subptr(rsp, 1024);<br>
<br>
Shouldn’t that be an add?<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"><br>
<br>
<br>
<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal"><br>
Thanks,<br>
Vladimir<br>
<br>
On 5/7/15 4:41 PM, Berg, Michael C wrote:<br>
<br>
<br>
<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">Ok, I will leave that way it is plus the comment.<br>
<br>
Thanks,<br>
-Michael<br>
<br>
-----Original Message-----<br>
From: Vladimir Kozlov [<a href="mailto:vladimir.kozlov@oracle.com"><span style="color:purple">mailto:vladimir.kozlov@oracle.com</span></a>]<br>
Sent: Thursday, May 07, 2015 4:33 PM<br>
To: Berg, Michael C; Roland Westrelin<br>
Cc:<span class="apple-converted-space"> </span><a href="mailto:hotspot-compiler-dev@openjdk.java.net"><span style="color:purple">hotspot-compiler-dev@openjdk.java.net</span></a><br>
Subject: Re: RFR 8076276 support for AVX512<br>
<br>
You should have said this from the beginning! Add comment to x86_32.ad before operand vecS explaining why it uses vectors_reg_legacy.<br>
<br>
To avoid unneeded runtime code generation by adlc. It produces the same result regardless evex support for these vectors in 32-bit VM.<br>
<br>
Thanks,<br>
Vladimir<br>
<br>
On 5/7/15 3:43 PM, Berg, Michael C wrote:<br>
<br>
<br>
<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">Tried it out as a single definition referencing reg_class_dynamic for both 64-bit and 32-bit. On the new machine model it does work correctly for both.  However on 32-bit we will now emit more auto generated code through the adlc layer
 as we will have the same definitions on both evex and non evex, it is why I used separate definitions.<br>
<br>
-Michael<br>
<br>
-----Original Message-----<br>
From: Vladimir Kozlov [<a href="mailto:vladimir.kozlov@oracle.com"><span style="color:purple">mailto:vladimir.kozlov@oracle.com</span></a>]<br>
Sent: Thursday, May 07, 2015 2:28 PM<br>
To: Berg, Michael C; Roland Westrelin<br>
Cc:<span class="apple-converted-space"> </span><a href="mailto:hotspot-compiler-dev@openjdk.java.net"><span style="color:purple">hotspot-compiler-dev@openjdk.java.net</span></a><br>
Subject: Re: RFR 8076276 support for AVX512<br>
<br>
On 5/7/15 2:07 PM, Berg, Michael C wrote:<br>
<br>
<br>
<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">Roland,<br>
<br>
VecS like the other forms of Vec{D|X|Y|Z} are defined as needed in each of the 32 and 64 ad files, as they are divergent now.  The 32-bit version only has the legacy bank.<br>
64-bit version uses the newly defined reg_class_dynamic definition to provide the appropriate bank of registers based on CPUID.  The chunk3 rename is an artifact of removing the kreg bank.<o:p></o:p></p>
</div>
</blockquote>
<div>
<p class="MsoNormal"><br>
<br>
For 32-bit reg_class_dynamic will give the same result as legacy because registers after XMM7 will be cut of by #ifdef _LP64. So I don't understand why you need to split Vec{D|X|Y} operands. You do kept vecZ operand the same for 32- and 64-bit.<br>
<br>
Regards,<br>
Vladimir<br>
<br>
<br>
<br>
<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">I will put it back to the old name (and test it out).  Eventually, we will change it back once we formalize the usage of kreg into all facets of code generation ( in a later patch ).<br>
If we made a single version out of os_supports_avx_vectors()'s loop, we would have a guard in the loop as the size of the regions are now different, it seems cleaner the way it is.<br>
<br>
In x86.64.ad:<br>
<br>
<br>
<br>
<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">3463 // Float register operands<br>
3473 // Double register operands<o:p></o:p></p>
</div>
</blockquote>
</blockquote>
<div>
<p class="MsoNormal"><br>
I will re-add the comments.<br>
<br>
In chaitain.hpp:<br>
<br>
144   uint16_t _num_regs;            // 2 for Longs and Doubles, 1 for all else<br>
<br>
I will fix the comment location.<br>
<br>
Thanks,<br>
Michael<br>
<br>
-----Original Message-----<br>
From: hotspot-compiler-dev<br>
[<a href="mailto:hotspot-compiler-dev-bounces@openjdk.java.net"><span style="color:purple">mailto:hotspot-compiler-dev-bounces@openjdk.java.net</span></a>] On Behalf Of<br>
Roland Westrelin<br>
Sent: Thursday, May 07, 2015 11:40 AM<br>
To: Vladimir Kozlov<br>
Cc:<span class="apple-converted-space"> </span><a href="mailto:hotspot-compiler-dev@openjdk.java.net"><span style="color:purple">hotspot-compiler-dev@openjdk.java.net</span></a><br>
Subject: Re: RFR 8076276 support for AVX512<br>
<br>
<br>
<br>
<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal"><a href="http://cr.openjdk.java.net/~kvn/8076276/webrev.02"><span style="color:purple">http://cr.openjdk.java.net/~kvn/8076276/webrev.02</span></a><o:p></o:p></p>
</div>
</blockquote>
<div>
<p class="MsoNormal"><br>
This looks good to me. A few minor remarks:<br>
<br>
Shouldn't the #ifdef _LP64 new instruct be in x86_64.ad? I see there are already other #ifdef _LP64 in x86.ad so I'm not sure what the guideline is.<o:p></o:p></p>
</div>
</blockquote>
<div>
<p class="MsoNormal"><br>
Why you need #ifdef _LP64 in x86_64.ad were _LP64 is set by default (used only in 64-bit VM)? What new instructions you are talking about?<o:p></o:p></p>
</div>
</blockquote>
<div>
<p class="MsoNormal"><br>
I'm talking about:<br>
4101 #ifdef _LP64<br>
4102 instruct rvadd2L_reduction_reg(rRegL dst, rRegL src1, vecX src2,<br>
regF tmp, regF tmp2) %{<br>
<br>
for instance in x86.ad<br>
Why isn't it in x86_64.ad?<br>
<br>
Roland.<br>
<br>
<br>
<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal"><br>
<br>
<br>
<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
In vm_version_x86.hpp, os_supports_avx_vectors(), you could have a single copy of the loop with different parameters.<br>
<br>
Not sure why you dropped:<br>
<br>
3463 // Float register operands<br>
3473 // Double register operands<br>
<br>
in x86_64.ad<br>
<br>
In chaitin.hpp:<br>
<br>
144   uint16_t _num_regs;            // 2 for Longs and Doubles, 1 for all else<br>
<br>
comment is not aligned with the one below anymore.<br>
<br>
Roland.<o:p></o:p></p>
</blockquote>
<div>
<p class="MsoNormal"><br>
I also have questions to Michael.<br>
<br>
Why you renamed chunk2 to "alloc_class chunk3(RFLAGS);"?<br>
<br>
Why you moved "operand vecS() etc." from x86.ad ? Do you mean  evex is not supported in 32-bit?<br>
<br>
Thanks,<br>
Vladimir<o:p></o:p></p>
</div>
</blockquote>
</blockquote>
</blockquote>
</blockquote>
</div>
</blockquote>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>