Can't implement conformant memset/memcpy without compiler -ffreestanding support

rikki cattermole rikki at cattermole.co.nz
Wed Jul 25 09:37:56 UTC 2018


On 25/07/2018 9:32 PM, Zheng (Vic) Luo wrote:
> On Wednesday, 25 July 2018 at 09:16:19 UTC, rikki cattermole wrote:
>> On 25/07/2018 8:59 PM, Zheng (Vic) Luo wrote:
>>> Minimal example in D: https://run.dlang.io/is/EYVTzb. Affects at 
>>> least dmd and ldc.
>>>
>>
>> https://run.dlang.io/is/8tPOVX
>>
>> Note that switch void* to ubyte* won't matter once its extern(C)'d.
>>
>> My version (_memcpy_impl2) is just the regular old memcpy without 
>> optimizations. Your example is syntax sugar for a function call.
> 
> A naive implementation of memset also lead to "call memset": 
> https://run.dlang.io/is/k3Hl04

Okay yup, that is an optimization.

This won't optimize:

extern(C) void* memset(ubyte* dest, int val, size_t count) {
     immutable c = cast(ubyte)val;
     foreach(i; 0..count) {
         dest[i] = c;
     }
     return dest;
}

And yes the name is important :)


More information about the Digitalmars-d mailing list