On 05/31/2016 11:39 AM, Pranith Kumar wrote:
+********* Memory Barrier support + +* mb <$arg>
Document what $arg should be.
+Generate a target memory barrier instruction to ensure memory ordering as being +enforced by a corresponding guest memory barrier instruction. The ordering +enforced by the backend may be stricter than the ordering required by the guest. +It cannot be weaker. This opcode takes an optional constant argument if required +to generate the appropriate barrier instruction. The backend should take care to
The argument is *not* optional.
+void tcg_gen_mb(TCGArg a) +{ + /* ??? Enable only when MTTCG is enabled. */ + tcg_gen_op1(&tcg_ctx, INDEX_op_mb, 0);
Pass A to tcg_gen_op1, not 0.
+/* TCGOpmb args */ +#define TCG_MB_FULL ((TCGArg)(0)) +#define TCG_MB_READ ((TCGArg)(1)) +#define TCG_MB_WRITE ((TCGArg)(2)) +#define TCG_MB_ACQUIRE ((TCGArg)(3)) +#define TCG_MB_RELEASE ((TCGArg)(4))
This is, IMO, confused. Either we should use the C++11 barrier types, or the Linux barrier types, but not both.
r~