Re: MemoryFence()


Laszlo Ersek
 

On 02/08/21 20:18, Andrew Fish wrote:

The VC++ docs seem to point you toward:
1) volatile + /volatile:iso compiler flag for MMIO.
3) For synchronization: inline void atomic_thread_fence(memory_order Order) noexcept;

It looks like memory_order maps into the primitives you are proposing?

memory_order_relaxed The fence has no effect.
memory_order_consume The fence is an acquire fence.
memory_order_acquire The fence is an acquire fence.
memory_order_release The fence is a release fence.
memory_order_acq_rel The fence is both an acquire fence and a release fence.
memory_order_seq_cst The fence is both an acquire fence and a release fence, and is sequentially consistent.
But it kind of seems like we may be falling down a C++ rabbit holeā€¦..
Yes, this points too much toward C++.

But Paolo's find:

#define _Compiler_barrier() \
_STL_DISABLE_DEPRECATED_WARNING _ReadWriteBarrier() \
_STL_RESTORE_DEPRECATED_WARNING

suggests we should still stick with _ReadWriteBarrier (usable in plain
C), even if it's officially deprecated.

Thanks
Laszlo

Join rfc@edk2.groups.io to automatically receive all group messages.