On 23 November 2015 at 12:49, Joe Stringer <joestrin...@nicira.com> wrote:
> On 23 November 2015 at 10:06, Ben Pfaff <b...@ovn.org> wrote:
>> When Joe added these types I assumed that he used the unconventional
>> prototypes for hton128() and ntoh128() because the return value
>> convention was inefficient.  If GCC and Clang actually optimize the use
>> of a return value in some kind of sensible way then I agree that the
>> usual convention is nicer.
>>
>> Joe, did you have another reason?
>
> This was mostly done based on an assumption that this was more
> optimal, rather than actually digging into the compiled code and
> seeing that it was generated differently.
>
> Looking now, before this patch vs. after on my 64-bit system..
>
> GCC-4.9: hton128/ntoh128 require one less MOV with this patch, but
> calling conventions (in format_u128) require 3 extra MOV (+4 MOV, -1
> LEA) for format_u128().
> Clang-3.7: hton128/ntoh128 are roughly equivalent, although with this
> patch they use some MOVUPS/MOVAPS instructions for 128-bit moves.
> Calling conventions seem to require as much as 6-12 (!) extra MOVs
> however, details below.

<snip>

Woops, looks like I missed compiler optimizations. They look much
closer together with --O2, so I think this patch makes sense to apply
without reservation.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to