RFR: 8240772: x86_64: Pre-generate Assembler::popa, pusha and vzeroupper

Ioi Lam ioi.lam at oracle.com
Tue Mar 10 23:56:59 UTC 2020



On 3/10/20 11:40 AM, Ioi Lam wrote:
> Hi Claes,
>
> This is a really good optimization! Small bang for big bucks!

Sorry my grammar has failed me again. I meant the opposite -- big bang 
for small bucks!

- Ioi
>
> I have a suggestion code coding style:
>
> Rename Assembler::popa to Assembler::popa_slow();
>
> void Assembler::popa() { // 64bit
>   if (!precomputed) {
>     precompute_instructions();
>   }
>   copy_precomputed_instructions(popa_code, popa_len);
> }
>
> static void precompute_instructions() {
>   ...
>   MacroAssembler masm(&buffer);
>
>   address begin_popa  = masm.code_section()->end();
>   masm.popa_slow();
>   address end_popa    = masm.code_section()->end();
>   ...
> }
>
> ----
>
> Also, maybe you can add this assert after generating the code for all 
> 3 macros:
>
>   assert(masm->code()->total_relocation_size() == 0 &&
> masm->code()->total_oop_size() == 0 &&
> masm->code()->total_metadata_size() == 0,
>          "precomputed code cannot have any of these");
>
>
> Thanks!
> - Ioi
>
>
>
> On 3/10/20 6:46 AM, Claes Redestad wrote:
>> Hi,
>>
>> calculate some invariant Assembler routines at bootstrap, copy on
>> subsequent invocations.
>>
>> For popa and pusha this means an overhead reduction of around 98% (from
>> ~2500 instructions to emit a pusha to ~50). For vzeroupper an overhead
>> reduction of ~65% (117 -> 42). Together these add up to about a 1%
>> reduction of instructions executed on a Hello World - with some
>> (smaller) scaling impact on larger applications.
>>
>> The initialization is very simple/naive, i.e., lacks any kind of 
>> synchronization protocol. But as this setup is guaranteed to happen very
>> early during bootstrap this should be fine. Thanks Ioi for some helpful
>> suggestions here!
>>
>> Bug:    https://bugs.openjdk.java.net/browse/JDK-8240772
>> Webrev: http://cr.openjdk.java.net/~redestad/8240772/open.00/
>>
>> Testing: tier1-3
>>
>> Thanks!
>>
>> /Claes
>



More information about the hotspot-compiler-dev mailing list