wmemchar for unix

Dmitry Olshansky dmitry.olsh at gmail.com
Tue Aug 27 12:18:50 PDT 2013


27-Aug-2013 18:41, H. S. Teoh пишет:
> On Tue, Aug 27, 2013 at 07:37:02AM -0700, Sean Kelly wrote:
>> On Aug 26, 2013, at 11:57 PM, monarch_dodra <monarchdodra at gmail.com> wrote:
>>
>>> For performance reasons, I need a "w" version of memchr.
>>>
>>> C defines wmemchr as:
>>> wchar_t * wmemchr ( const wchar_t *, wchar_t, size_t );
>>>
>>> Unfortunatly, on unix, "wchar_t" is defined a *4* bytes long,
>>> making wmemchr, effectivelly, "dmemchr".
>>>
>>> Are there any "2 byte" alternatives for wmemchr on unix?
>>
>> Why not cast the array to ushort[] and do a find()?  Or is that too
>> slow as well?
>
> Optimized searches of this kind ideally translate to the various rep*
> instructions on x86.

Rather a loop with XMM moves. What's best though is always a moving target.

> I'm not sure if dmd does that optimization. If you
> really feel inclined, you could do static if (X86) and throw in an asm
> block (but that would break purity, @safety, etc., so probably not a
> good idea).
>

It would be awesome to have pure D analogs for memchr, memcpy and its 
ilk that won't be so limiting (as in types used) but would guarantee top 
performance.

-- 
Dmitry Olshansky


More information about the Digitalmars-d-learn mailing list