The default fence instruction with no parameters is the strongest form of barrier. But it also takes an optional set of flags to give fine-grained control over exactly what operations the fence is a barrier for, and in which direction.
I see two design choices here:
just let the caller specify an arbitrary set of flags (somehow), or
have a set of canned variants for the common cases (like Linux's rmb/wmb/...)
Hi! I need to think more about this, but currently, I think that riscv should support common cases. For very specific scenarios, developers could always use inline assembly.
The default
fence
instruction with no parameters is the strongest form of barrier. But it also takes an optional set of flags to give fine-grained control over exactly what operations the fence is a barrier for, and in which direction.I see two design choices here:
rmb
/wmb
/...)(These aren't exclusive of course.)
Thoughts?
cc @dreiss