By just adding the next predicate to avoid generation of immediate 16-bits stores I got +5% jbb2005 on woodcrest: // Store Short/Char Immediate instruct storeImmI16(memory mem, immI16 src) %{ + predicate(UseImm16ForStore); match(Set mem (StoreC mem src)); ins_cost(150); format %{ "MOV16 $mem,$src" %} opcode(0xC7); /* C7 /0 Same as 32 store immediate with prefix */ ins_encode( SizePrefix, OpcP, RMopc_Mem(0x00,mem), Con16( src )); ins_pipe( ialu_mem_imm ); %} hsdev-3% sh compare ref.jbb.n2 ref.jbb.n2_n16s ============================================================================ ref.jbb.n2 Benchmark Samples Mean Stdev Geomean Weight specjbb2000 20 120380.43 591.43 specjbb2005 20 51259.08 741.56 ============================================================================ ref.jbb.n2_n16s Benchmark Samples Mean Stdev %Diff P Significant specjbb2000 20 122106.15 856.48 1.43 0.000 Yes specjbb2005 20 54137.34 989.22 5.62 0.000 Yes ============================================================================
|