CT BitArray

Johan j at j.nl
Sat Apr 4 12:03:46 UTC 2020


On Friday, 3 April 2020 at 20:06:50 UTC, Steven Schveighoffer 
wrote:
> On 4/3/20 3:13 PM, Johan wrote:
>> On Thursday, 2 April 2020 at 12:41:28 UTC, Steven 
>> Schveighoffer wrote:
>
>>>
>>> Hm... I thought there was precedent for providing fallback 
>>> implementations for intrinsics. That is, you define the 
>>> function, which is only used if the intrinsic is not 
>>> available.
>>>
>>> I can't remember where I saw this. But you could try this by 
>>> simply implementing the bitops in core.bitop, and see if they 
>>> are used outside ctfe.
>> 
>> There are a bunch of functions implemented with `if 
>> (!__ctfe)`. DMD and LDC are smart enough to elide 
>> `if(false/true)` control flow completely even in debug code, 
>> so there is no penalty to using `if (!__ctfe)`.
>> See for example: 
>> https://github.com/ldc-developers/druntime/blob/ldc/src/core/bitop.d#L85
>
> Nice!
>
> I'm trying to understand that. It looks like you are calling 
> the intrinsic that llvm recognizes. What can you do when bsf 
> *is* the intrinsic? Does DMD have to change its intrinsic to 
> something that's not core.bitop.bsf so we can call it? Or would 
> that code as written work if ported to druntime mainline?

I think it'd work without any changes needed. (note the version 
statements)

> I.e. the compiler replaces the bsf with the intrinsic and 
> ignores the implementation in runtime code, but works at 
> comiple time.

I think that's correct, yes.

-Johan



More information about the Digitalmars-d-learn mailing list