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