CT BitArray
Steven Schveighoffer
schveiguy at gmail.com
Fri Apr 3 20:06:50 UTC 2020
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.e. the compiler replaces the bsf with the
intrinsic and ignores the implementation in runtime code, but works at
comiple time.
-Steve
More information about the Digitalmars-d-learn
mailing list