msvcrt - memmove/memcpy optimizations

Zebediah Figura z.figura12 at gmail.com
Fri Aug 14 11:07:10 CDT 2020


On 8/14/20 9:18 AM, Zebediah Figura wrote:
> On 8/14/20 3:27 AM, piotr at codeweavers.com wrote:
>> Hi Fabian,
>>
>> I'll be back from vacation on Monday (currently I have very limited
>> internet access). I'll look on it then.
>>
>> I'm not sure how complicated the assembly implementation is but I'm
>> expecting that a separated assembly file will not be needed. Also,
>> AFAIK, we can't take the implementation from glibc. It would be also
>> useful to know how efficient Microsoft implementation is.
> 
> I believe you are correct. I misread their licensing files and thought
> they used LGPL 2, not GPL 2.

As Henri points out, I am even more confused than that. The project uses
several licenses, so one must truly read the header of the file in question.

All of the x86_64 implementations of memmove(), at least, seem to be
under LGPL 2.1. Unless there's another, unrelated reason why we can't
use them?

> 
>>
>> Musl also have platform specific implementation of memove (for i386 and
>> x64) written is assembly. I bet it should be good enough for Wine.
>>
>> Thanks,
>> Piotr
>>
>> On Aug 12, 2020 23:33, Fabian Maurer <dark.shadow4 at web.de> wrote:
>>
>>     Hello,
>>
>>     since msvcrt isn't relying on the standard library memmove/memcpy
>>     anymore,
>>     there's been a pretty bad performance regression. See
>>     https://bugs.winehq.org/
>>     show_bug.cgi?id=49663.
>>
>>     For the best performance, and since those memory operations are
>>     pretty common,
>>     we'd presumably like to optimize them as much as possible. You might
>>     have seen
>>     my patch for an implementation from musl, although Zebediah
>>     rightfully pointed
>>     out we might want to opt for the best performance we can get...
>>     glibc currently offers the best performance, thanks to SSE/AVX
>>     implementations
>>     and runtime selection of the best supported path.
>>
>>     First, would you have any objections adding specialized paths
>>     written in
>>     assembly for x86?
>>     And if we were to add them, would we link against assembly files, or
>>     someway
>>     transform them into inline assembly? AFAIK, Wine didn't come with pure
>>     assembly files yet...
>>
>>     If you want, I could set up a few crude benchmarks to see how different
>>     versions compare.
>>
>>     Regards,
>>     Fabian Maurer
>>
>>
>>
> 
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20200814/968f46b0/attachment-0001.sig>


More information about the wine-devel mailing list