Thread overview
Read/Write memory barriers in D?
Aug 13, 2017
Igor
Aug 13, 2017
Daniel Kozak
Aug 13, 2017
Daniel Kozak
Aug 13, 2017
Igor
August 13, 2017
I am converting a C code that uses this macro:

#define CompletePastWritesBeforeFutureWrites _WriteBarrier(); _mm_sfence()

As far as I see core.atomic:atomicFence() is the equivalent of _mm_sfence() but I can't find what would be the equivalent of _WriteBarrier(). As far as I understand it is used just to tell the compiler it can't rearrange instructions during optimizations so subsequent memory writes happen before previous ones. Same for _ReadBarrier().
August 13, 2017
maybe something like https://dlang.org/phobos/core_bitop.html#.volatileLoad and https://dlang.org/phobos/core_bitop.html#.volatileStore

On Sun, Aug 13, 2017 at 1:37 PM, Igor via Digitalmars-d-learn < digitalmars-d-learn@puremagic.com> wrote:

> I am converting a C code that uses this macro:
>
> #define CompletePastWritesBeforeFutureWrites _WriteBarrier(); _mm_sfence()
>
> As far as I see core.atomic:atomicFence() is the equivalent of
> _mm_sfence() but I can't find what would be the equivalent of
> _WriteBarrier(). As far as I understand it is used just to tell the
> compiler it can't rearrange instructions during optimizations so subsequent
> memory writes happen before previous ones. Same for _ReadBarrier().
>


August 13, 2017
or maybe use core.atomic.atomicLoad and store with right https://dlang.org/phobos/core_atomic.html#.MemoryOrder

On Sun, Aug 13, 2017 at 1:51 PM, Daniel Kozak <kozzi11@gmail.com> wrote:

> maybe something like https://dlang.org/phobos/ core_bitop.html#.volatileLoad and https://dlang.org/phobos/ core_bitop.html#.volatileStore
>
> On Sun, Aug 13, 2017 at 1:37 PM, Igor via Digitalmars-d-learn < digitalmars-d-learn@puremagic.com> wrote:
>
>> I am converting a C code that uses this macro:
>>
>> #define CompletePastWritesBeforeFutureWrites _WriteBarrier();
>> _mm_sfence()
>>
>> As far as I see core.atomic:atomicFence() is the equivalent of
>> _mm_sfence() but I can't find what would be the equivalent of
>> _WriteBarrier(). As far as I understand it is used just to tell the
>> compiler it can't rearrange instructions during optimizations so subsequent
>> memory writes happen before previous ones. Same for _ReadBarrier().
>>
>
>


August 13, 2017
On Sunday, 13 August 2017 at 11:58:56 UTC, Daniel Kozak wrote:
> or maybe use core.atomic.atomicLoad and store with right https://dlang.org/phobos/core_atomic.html#.MemoryOrder
>
> On Sun, Aug 13, 2017 at 1:51 PM, Daniel Kozak <kozzi11@gmail.com> wrote:
>
>> maybe something like https://dlang.org/phobos/ core_bitop.html#.volatileLoad and https://dlang.org/phobos/ core_bitop.html#.volatileStore
>>

Based on documentation volatileLoad/volatileStore seems like the closest thing so I'll go with that for now. Thanks.