base/regdump.h: Pass cooked register index to `REGDEF_GPX86_COMMON'.
authorMark Wooding <mdw@distorted.org.uk>
Tue, 29 Oct 2019 18:38:27 +0000 (18:38 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Sat, 9 May 2020 19:57:33 +0000 (20:57 +0100)
I want to define `BP' and `SP' as macros, but they'll expand in the
calls to `REGDEF_GPX86_COMMON', which will break things.  They don't
expand directly in the body of `REGDEF_GPX86_XP' because `##' inhibits
this.  Alas, this means we have to do this token-gluing in the interface
macros rather than the common core.

base/regdump.h

index f5b3306..db96864 100644 (file)
@@ -271,11 +271,11 @@ struct regmap {
        regmap_avx = 2*WORDSZ
        regmap_size = 3*WORDSZ
 
-#define REGDEF_GPX86_COMMON(rn, RN)                                    \
-       regsrc.e##rn = REGSRC_GP | REGIX_##RN;                          \
+#define REGDEF_GPX86_COMMON(rn, ix)                                    \
+       regsrc.e##rn = REGSRC_GP | ix;                                  \
        regty.e##rn = REGF_32;                                          \
        regfmt.e##rn = REGF_HEX;                                        \
-       regsrc.r##rn = REGSRC_GP | REGIX_##RN;                          \
+       regsrc.r##rn = REGSRC_GP | ix;                                  \
        regty.r##rn = REGF_64;                                          \
        regfmt.r##rn = REGF_HEX
 
@@ -289,7 +289,7 @@ struct regmap {
        regsrc.rn##x = REGSRC_GP | REGIX_##RN##X;                       \
        regty.rn##x = REGF_16;                                          \
        regfmt.rn##x = REGF_HEX;                                        \
-       REGDEF_GPX86_COMMON(rn##x, RN##X)
+       REGDEF_GPX86_COMMON(rn##x, REGIX_##RN##X)
 REGDEF_GPX86_ABCD(a, A)
 REGDEF_GPX86_ABCD(b, B)
 REGDEF_GPX86_ABCD(c, C)
@@ -312,7 +312,7 @@ REGDEF_GPX86_ABCD(d, D)
        regsrc.rn = REGSRC_GP | REGIX_##RN;                             \
        regty.rn = REGF_16;                                             \
        regfmt.rn = REGF_HEX;                                           \
-       REGDEF_GPX86_COMMON(rn, RN)
+       REGDEF_GPX86_COMMON(rn, REGIX_##RN)
 REGDEF_GPX86_XP(ip, IP)
 REGDEF_GPX86_XP(si, SI)
 REGDEF_GPX86_XP(di, DI)