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