[11] RFR(M) 8201193: Use XMM/YMM for objects initialization

Vladimir Kozlov vladimir.kozlov at oracle.com
Mon Jun 11 22:04:25 UTC 2018


Hi John,

thank you for looking on it.

AD files have only 'format' code which produce output for 
PrintOptoAssembly flag. $$emit$$ is a new way to produce format %{ %} 
when you have conditions (global flags checks).

All AD files calls the same one method MacroAssembler::clear_mem().

Yes, 'format' (PrintOptoAssembly) output will be different from 
generated assembly. But I thought that it is pseudo-assembly anyway (we 
never promised it will match assembly) and we can have slightly 
different output but make it simple in AD file.

Regards,
Vladimir

On 6/11/18 2:09 PM, John Rose wrote:
> On Jun 11, 2018, at 1:57 PM, Vladimir Kozlov <vladimir.kozlov at oracle.com 
> <mailto:vladimir.kozlov at oracle.com>> wrote:
>>
>> AMD processors don't have ERMS (Enhanced REP MOVSB/STOSB) support. To 
>> have good performance it is suggested to use SSE/AVX wide registers 
>> stores instead of 'rep stosq'. It shows better performance on AMD cpus.
>>
>> Tested with jdk-tier1, hs-tier1, hs-tier2, hs-precheckin-comp 
>> (-Xcomp), hs-graal on all x86 OSs. And using '-XX:-UseFastStosb 
>> -XX:+UseXMMForObjInit' flags combination to force new code generation.
> 
> Good stuff.  I have one suggestion:  If possible, let's use
> macroassembler to generate the code from the AD files.
> It is a maintainability problem to have three copies of
> the same algorithm.  I notice in particular that the AD
> file versions don't support UseAVX==1 while the assembler
> does.  That's going to give some maintainer nightmares
> in a few years.
> 
> — John


More information about the hotspot-compiler-dev mailing list