RFR: 8281744: x86: Use short jumps in TIG::set_vtos_entry_points
Aleksey Shipilev
shade at openjdk.java.net
Tue Feb 15 16:45:08 UTC 2022
On Mon, 14 Feb 2022 15:47:41 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:
> Performance in `-Xint` mode seems to be bottlenecked on the code size, rather than particular instruction hotspots, which means code density is important.
>
> There are forward branches in `TemplateInterpreterGenerator::set_vtos_entry_points`, which cannot be shortened by `MacroAssembler`, unless we tell it specifically that the upcoming branch target would be within the 8-bit offset. Which it apparently is in this particular case, because there are just a handful of `push`-es between the jump and its target. If a jump offset is more than 8 bits, the interpreter would catch fire just about everywhere, since `set_vtos_entry_points` is used at every bytecode entry. `fastdebug` builds assert the offset sanity directly.
>
> Current patch improves `SPECjvm2008` performance in `-Xint` mode on Ryzen 7 5700G:
>
>
> compiler.compiler: +4.1%
> compiler.sunflow: +4.7%
> compress: +9.9%
> crypto.signverify: +5.2%
> scimark.fft.large: +9.5%
> scimark.fft.small: +10.1%
> serial: +7.3%
> xml.transform: +7.1%
> xml.validation: +3.3%
>
>
> There are other places in template interpreter where forward jumps can be short, I'll do them separately, since they are riskier and also less important.
>
> Additional testing:
> - [x] Linux x86_64 fastdebug, `tier1`
> - [x] Linux x86_32 fastdebug, `tier1`
Thanks for reviews!
-------------
PR: https://git.openjdk.java.net/jdk/pull/7463
More information about the hotspot-dev
mailing list