Re: [PATCH] tools/memory-model: Document herd7 (internal) representation

From: Boqun Feng
Date: Tue May 28 2024 - 14:00:20 EST


On Mon, May 27, 2024 at 03:40:13PM +0200, Jonas Oberhauser wrote:
>
>
> Am 5/27/2024 um 3:28 PM schrieb Andrea Parri:
> > > > + | smp_store_mb | W[once] ->po F[mb] |
> > >
> > > I expect this one to be hard-coded in herd7 source code, but I cannot find
> > > it. Can you give me a pointer?
> >
> > smp_store_mb() is currently mapped to { __store{once}(X,V); __fence{mb}; } in
> > the .def file, so it's semantically equivalent to "WRITE_ONCE(); smp_mb();".
>
> By the way, I experimented a little with these kind of mappings to see if we
> can just explicitly encode the mapping there. E.g., I had an idea to use
> { __fence{mb-successful-rmw}; __cmpxchg{once}...;
> __fence{mb-successful-rmw}; }
>
> for defining (almost) the current mapping of cmpxchg explicitly.
>
> But none of the changes I made were accepted by herd7.
>
> Do you know how the syntax works?
>

This may not be trivial. Note that cmpxchg() is an expression (it has a
value), so in .def, we want to define it as an expression. However, the
C-like multiple-statement expression is not supported by herd parser, in
other words we want:

{
__fence{mb-successful-rmw};
int tmp = __cmpxchg{once}(...);
__fence{mb-successful-rmw};
tmp;
}

but herd parser doesn't support this as a valid expression.

Regards,
Boqun

> jonas
>