<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
Hi Peter,<br>
<br>
Please have a look at JDK-8305959. I'm going to rewrite the itable
stub codes to use a single pass over itable! I have an aarch64
implementation which shows improvement on <span
style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">Ampere
Altra.</span><br>
<br>
Boris<br>
<br>
<div class="moz-cite-prefix">On 4/29/2023 6:18 AM, Peter Kessler OS
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:SJ0PR01MB74149EF5FB147590E6CB9815D4689@SJ0PR01MB7414.prod.exchangelabs.com">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="Generator" content="Microsoft Word 15 (filtered
medium)">
<style>@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;}p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-ligatures:standardcontextual;}span.EmailStyle17
{mso-style-type:personal-compose;
font-family:"Calibri",sans-serif;
color:windowtext;}.MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri",sans-serif;}div.WordSection1
{page:WordSection1;}</style>
<div class="WordSection1">
<p class="MsoNormal">I notice that <span
style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp
MacroAssembler::lookup_interface_method loops over the
itable list with code that uses two branches: one to check
for a null indicating the end of the list, and one to see if
the appropriate entry has been found. aarch64 has a "ccmp"
instruction that can be used to evaluate two conditions with
only one branch. On an out-of-order implementation with
more integer execution units than branch units, the trading
of a branch for a ccmp can be beneficial. The downside is
that one has to check, after the loop has exited, which of
the conditions cause the loop to exit, but if the loop
executes more than once or twice, that is still a win.<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">There
are other opportunities to use cmp;ccmp;br instead of
cmp;br;cmp;br. I happened to see the one in
MacroAssembler::lookup_interface_method because it was in
what passes for hand-written assembler in HotSpot. For
generic searches for a key in a key-value array the
improvement can be ~10% on a Ampere Altra, depending on how
far down the key-value array one has to look.<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">I
am only proposing to fix the loop in
MacroAssembler::lookup_interface_method, but I would be
interested in talking to people about where else the ccmp
style could be applied.<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:10.5pt;font-family:"Arial",sans-serif;color:#172B4D;background:white">
... peter</span><o:p></o:p></p>
</div>
</blockquote>
<br>
</body>
</html>