[PATCH], Add PowerPC ISA 3.0 Atomic Memory Operation functions
Segher Boessenkool
segher@kernel.crashing.org
Fri Oct 6 18:00:00 GMT 2017
Hi Mike,
On Thu, Oct 05, 2017 at 06:14:14PM -0400, Michael Meissner wrote:
> This patch adds support for most of the PowerPC ISA 3.0 Atomic Memory Operation
> instructions, listed in section 4.5 of the manual. Currently these functions
> are done via extended asm. At some point in the future, I will probably move
> the inner part of the patch to use new built-in functions to replace the
> extended asm.
Just some asm comments for now, have to think about the rest a bit more.
> +#define _AMO_LD_SIMPLE(NAME, TYPE, OPCODE, FC) \
> +static __inline__ TYPE \
> +NAME (TYPE *_PTR, TYPE _VALUE) \
> +{ \
> + unsigned __int128 _TMP; \
> + TYPE _RET; \
> + __asm__ volatile ("mr %L1,%3\n" \
> + "\t" OPCODE " %1,%4,%5\t\t# %0\n" \
> + "\tmr %2,%1\n" \
> + : "+Q" (_PTR[0]), "=&r" (_TMP), "=r" (_RET) \
> + : "r" (_VALUE), "b" (&_PTR[0]), "n" (FC)); \
> + return _RET; \
> +}
You don't need arg 4: "%P0" is the same thing.
Do you really need the mr insns? Can't you express that in the
arguments? Perhaps using a union of __int128 with something that
is two long ints?
> +#define _AMO_ST_SIMPLE(NAME, TYPE, OPCODE, FC) \
> +static __inline__ void \
> +NAME (TYPE *_PTR, TYPE _VALUE) \
> +{ \
> + __asm__ volatile (OPCODE " %1,%2,%3\t\t# %0" \
> + : "+Q" (_PTR[0]) \
> + : "r" (_VALUE), "b" (&_PTR[0]), "n" (FC)); \
> + return; \
> +}
Same for "b" (arg 2) here.
Segher
More information about the Gcc-patches
mailing list