Re: [PATCH RFC 1/2] m68k: io_mm.h: conditionalize ISA address translation on Atari

Finn Thain
2021-06-05T00:24:22Z

On Sat, 5 Jun 2021, I wrote:

>
> Anyway, I see that we can already write this:
>
> #define IS_MULTI(a,b) __or(IS_ENABLED(a), IS_ENABLED(b))
>

Oops. The 2-way case would be,
#define IS_MULTI(a,b) __and(IS_ENABLED(a), IS_ENABLED(b))

> So maybe we just need an exclusive-OR macro to go with the other operators
> defined in include/linux/kconfig.h? Then we could write this:
>
> #define IS_SINGLE(a,b) __xor(IS_ENABLED(a), IS_ENABLED(b))
>
> But these only work for a 2-way group. Extending them to N-way groups is
> beyond my CPP abilities. It probably requires N-way __or() and __xor()...
>

For the 3 way case,
#define IS_SINGLE(a,b,c) (__xor(IS_ENABLED(a), IS_ENABLED(b), IS_ENABLED(c)) &&
!__and(IS_ENABLED(a), IS_ENABLED(b), IS_ENABLED(c)))
#define IS_MULTI(a,b,c) (!IS_SINGLE(a,b,c) &&
__or(IS_ENABLED(a), IS_ENABLED(b), IS_ENABLED(c)))