<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    <div class="markdown-here-wrapper" data-md-url="" style="">
      <p style="margin: 0px 0px 1.2em !important;">Hi Brian,<br>
        I have been playing some more with the benchmark you provided
        here:</p>
      <p style="margin: 0px 0px 1.2em !important;"><a href="https://gist.github.com/broneill/3a39051635e3cb758d0cca5a963c685e" class="moz-txt-link-freetext">https://gist.github.com/broneill/3a39051635e3cb758d0cca5a963c685e</a></p>
      <p style="margin: 0px 0px 1.2em !important;">The following patch
        seems to help quite significantly:</p>
      <p style="margin: 0px 0px 1.2em !important;"><a href="https://cr.openjdk.org/~mcimadamore/panama/segment_normalize_offsets.patch" class="moz-txt-link-freetext">https://cr.openjdk.org/~mcimadamore/panama/segment_normalize_offsets.patch</a></p>
      <p style="margin: 0px 0px 1.2em !important;">Here are the
        benchmark results:</p>
      <p style="margin: 0px 0px 1.2em !important;">(before)</p>
      <pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important;">Benchmark                         Mode  Cnt   Score   Error  Units
BinarySearch.binarySearch_panama  avgt   30  61.404 ? 1.315  ns/op
BinarySearch.binarySearch_unsafe  avgt   30  28.099 ? 0.330  ns/op
</code></pre>
      <p style="margin: 0px 0px 1.2em !important;">(after)</p>
      <pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important;">Benchmark                         Mode  Cnt   Score   Error  Units
BinarySearch.binarySearch_panama  avgt   30  38.103 ? 0.471  ns/op
BinarySearch.binarySearch_unsafe  avgt   30  27.556 ? 0.208  ns/op
</code></pre>
      <p style="margin: 0px 0px 1.2em !important;">We believe there must
        be some C2 issue lurking in there - basically we’re forcing all
        offsets to be positive using this:</p>
      <pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important;">@ForceInline
    private static long normalize(long offset) {
        if (offset < 0) {
            throw new IndexOutOfBoundsException("Offset is < 0");
        }
        return offset & Long.MAX_VALUE;
    }
</code></pre>
      <p style="margin: 0px 0px 1.2em !important;">Now, surprisingly, if
        the “& Long.MAX_VALUE” is dropped, performance dips again. I
        believe we lose track of the positivity here and the above patch
        provides some kind of workaround.</p>
      <p style="margin: 0px 0px 1.2em !important;">I’d be interested to
        know if this patch helps the situation with your bigger
        benchmark, or if things stay the same (in which case, we would
        have to conclude that this benchmark, while interesting, is
        perhaps not reflective of the issues in your bigger codebase).</p>
      <p style="margin: 0px 0px 1.2em !important;">Thanks<br>
        Maurizio</p>
      <p style="margin: 0px 0px 1.2em !important;">On 06/07/2023 23:19,
        Brian S O’Neill wrote:</p>
      <p style="margin: 0px 0px 1.2em !important;"></p>
      <div class="markdown-here-exclude">
        <p></p>
        <blockquote type="cite" cite="mid:b456f83b-9d4e-01bc-90cc-63749f9218b3@gmail.com">When
          I use the "ALL" MemorySegment instead of allocating
          MemorySegments on the fly for copies, the performance
          regression drops to ~2%.</blockquote>
        <p></p>
      </div>
      <p style="margin: 0px 0px 1.2em !important;"></p>
      <div title="MDH:PHA+SGkgQnJpYW4sPGJyPkkgaGF2ZSBiZWVuIHBsYXlpbmcgc29tZSBtb3JlIHdpdGggdGhlIGJlbmNobWFyayB5b3UgcHJvdmlkZWQgaGVyZTo8YnI+PGJyPmh0dHBzOi8vZ2lzdC5naXRodWIuY29t
L2Jyb25laWxsLzNhMzkwNTE2MzVlM2NiNzU4ZDBjY2E1YTk2M2M2ODVlPGJyPjwvcD48cD5UaGUg
Zm9sbG93aW5nIHBhdGNoIHNlZW1zIHRvIGhlbHAgcXVpdGUgc2lnbmlmaWNhbnRseTo8L3A+PHA+
aHR0cHM6Ly9jci5vcGVuamRrLm9yZy9+bWNpbWFkYW1vcmUvcGFuYW1hL3NlZ21lbnRfbm9ybWFs
aXplX29mZnNldHMucGF0Y2g8L3A+PHA+SGVyZSBhcmUgdGhlIGJlbmNobWFyayByZXN1bHRzOjxi
cj48L3A+PHA+KGJlZm9yZSk8YnI+PGJyPmBgYDxicj5CZW5jaG1hcmsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsgTW9kZSZuYnNwOyBDbnQmbmJzcDsmbmJzcDsgU2NvcmUmbmJzcDsmbmJz
cDsgRXJyb3ImbmJzcDsgVW5pdHM8YnI+QmluYXJ5U2VhcmNoLmJpbmFyeVNlYXJjaF9wYW5hbWEm
bmJzcDsgYXZndCZuYnNwOyZuYnNwOyAzMCZuYnNwOyA2MS40MDQgPyAxLjMxNSZuYnNwOyBucy9v
cDxicj5CaW5hcnlTZWFyY2guYmluYXJ5U2VhcmNoX3Vuc2FmZSZuYnNwOyBhdmd0Jm5ic3A7Jm5i
c3A7IDMwJm5ic3A7IDI4LjA5OSA/IDAuMzMwJm5ic3A7IG5zL29wPGJyPmBgYDxicj48YnI+KGFm
dGVyKTxicj48YnI+YGBgPGJyPkJlbmNobWFyayZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyBNb2RlJm5ic3A7IENudCZuYnNwOyZuYnNwOyBTY29yZSZuYnNwOyZuYnNwOyBFcnJvciZuYnNw
OyBVbml0czxicj5CaW5hcnlTZWFyY2guYmluYXJ5U2VhcmNoX3BhbmFtYSZuYnNwOyBhdmd0Jm5i
c3A7Jm5ic3A7IDMwJm5ic3A7IDM4LjEwMyA/IDAuNDcxJm5ic3A7IG5zL29wPGJyPkJpbmFyeVNl
YXJjaC5iaW5hcnlTZWFyY2hfdW5zYWZlJm5ic3A7IGF2Z3QmbmJzcDsmbmJzcDsgMzAmbmJzcDsg
MjcuNTU2ID8gMC4yMDgmbmJzcDsgbnMvb3A8YnI+YGBgPGJyPjxicj5XZSBiZWxpZXZlIHRoZXJl
IG11c3QgYmUgc29tZSBDMiBpc3N1ZSBsdXJraW5nIGluIHRoZXJlIC0gYmFzaWNhbGx5IHdlJ3Jl
IGZvcmNpbmcgYWxsIG9mZnNldHMgdG8gYmUgcG9zaXRpdmUgdXNpbmcgdGhpczo8L3A+PHA+YGBg
PGJyPkBGb3JjZUlubGluZTxicj4mbmJzcDsmbmJzcDsmbmJzcDsgcHJpdmF0ZSBzdGF0aWMgbG9u
ZyBub3JtYWxpemUobG9uZyBvZmZzZXQpIHs8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7IGlmIChvZmZzZXQgJmx0OyAwKSB7PGJyPiZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB0aHJvdyBu
ZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigiT2Zmc2V0IGlzICZsdDsgMCIpOzxicj4mbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgfTxicj4mbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcmV0dXJuIG9mZnNldCAmYW1wOyBMb25nLk1B
WF9WQUxVRTs8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+YGBgPC9wPjxwPk5vdywgc3VycHJp
c2luZ2x5LCBpZiB0aGUgIiZhbXA7IExvbmcuTUFYX1ZBTFVFIiBpcyBkcm9wcGVkLCBwZXJmb3Jt
YW5jZSBkaXBzIGFnYWluLiBJIGJlbGlldmUgd2UgbG9zZSB0cmFjayBvZiB0aGUgcG9zaXRpdml0
eSBoZXJlIGFuZCB0aGUgYWJvdmUgcGF0Y2ggcHJvdmlkZXMgc29tZSBraW5kIG9mIHdvcmthcm91
bmQuPC9wPjxwPkknZCBiZSBpbnRlcmVzdGVkIHRvIGtub3cgaWYgdGhpcyBwYXRjaCBoZWxwcyB0
aGUgc2l0dWF0aW9uIHdpdGggeW91ciBiaWdnZXIgYmVuY2htYXJrLCBvciBpZiB0aGluZ3Mgc3Rh
eSB0aGUgc2FtZSAoaW4gd2hpY2ggY2FzZSwgd2Ugd291bGQgaGF2ZSB0byBjb25jbHVkZSB0aGF0
IHRoaXMgYmVuY2htYXJrLCB3aGlsZSBpbnRlcmVzdGluZywgaXMgcGVyaGFwcyBub3QgcmVmbGVj
dGl2ZSBvZiB0aGUgaXNzdWVzIGluIHlvdXIgYmlnZ2VyIGNvZGViYXNlKS48YnI+PC9wPjxwPlRo
YW5rczxicj5NYXVyaXppbzxicj48L3A+PHA+PGJyPjwvcD48ZGl2IGNsYXNzPSJtb3otY2l0ZS1w
cmVmaXgiPk9uIDA2LzA3LzIwMjMgMjM6MTksIEJyaWFuIFMgTydOZWlsbCB3cm90ZTo8YnI+PC9k
aXY+PGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIgY2l0ZT0ibWlkOmI0NTZmODNiLTlkNGUtMDFiYy05
MGNjLTYzNzQ5ZjkyMThiM0BnbWFpbC5jb20iPldoZW4gSSB1c2UgdGhlICJBTEwiIE1lbW9yeVNl
Z21lbnQgaW5zdGVhZCBvZiBhbGxvY2F0aW5nIE1lbW9yeVNlZ21lbnRzIApvbiB0aGUgZmx5IGZv
ciBjb3BpZXMsIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIGRyb3BzIHRvIH4yJS48L2Jsb2Nr
        cXVvdGU+" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0;">​</div>
    </div>
  </body>
</html>