base/regdump.[ch]: Add a feature for printing plain messages.
authorMark Wooding <mdw@distorted.org.uk>
Thu, 7 Nov 2019 01:34:06 +0000 (01:34 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Sat, 9 May 2020 19:57:33 +0000 (20:57 +0100)
Introduce a `REGSRC_NONE' which just prints the message, and add a `msg'
macro which invokes this.

base/regdump.c
base/regdump.h

index c591fd5..89edbcd 100644 (file)
@@ -213,6 +213,7 @@ static const char *regname(char *buf, uint32 f)
 
   switch (src) {
 
+    case REGSRC_NONE:
     case REGSRC_ABS:
       return (0);
 
@@ -803,6 +804,11 @@ void regdump(const void *base, const char *lbl, uint32 f)
   }
 
   switch (f&REGF_SRCMASK) {
+
+    case REGSRC_NONE:
+      printf(";; %s\n", lbl);
+      return;
+
     case REGSRC_ABS:
       p = base;
       break;
index 3ada7ea..e056820 100644 (file)
@@ -135,6 +135,7 @@ union gp64 { uint64 u64; int64 i64; PTR64 };
 #define   REGSRC_SIMD  0x04000000      /* SIMD vector register */
 #define   REGSRC_STMMX 0x05000000      /* x86-specific: x87/MMX register */
 #define   REGSRC_SEG   0x06000000      /* x86-specific: segment register */
+#define   REGSRC_NONE  0x0f000000      /* just a message */
 /* Where to find the values. */
 
 #define REGF_WDMASK    0xf0000000
@@ -432,6 +433,17 @@ DO8(REGDEF_SIMD)
        lea     SP, [SP + REGDUMP_SPADJ]
 .endm
 
+.macro _nilbase
+#  if CPUFAM_X86
+       xor     eax, eax
+       mov     [SP + 0], eax
+#  elif ABI_SYSV
+       xor     edi, edi
+#  elif ABI_WIN
+       xor     ecx, ecx
+#  endif
+.endm
+
 .macro _regbase
 #  if CPUFAM_X86
        mov     [SP + 0], BP
@@ -625,6 +637,10 @@ DO16(REGDEF_NEONQ)
        add     r13, r13, #REGDUMP_GPSIZE
 .endm
 
+.macro _nilbase
+       mov     r0, #0
+.endm
+
 .macro _regbase
        mov     r0, r5
 .endm
@@ -776,6 +792,10 @@ DO32(REGDEF_FP)
        add     sp, sp, #REGDUMP_GPSIZE
 .endm
 
+.macro _nilbase
+       mov     x0, #0
+.endm
+
 .macro _regbase
        mov     x0, x21
 .endm
@@ -889,6 +909,15 @@ extern void regdump_freshline(void);
        _rstrregs
 .endm
 
+.macro msg     lbl
+       _saveregs
+       _nilbase
+       _reglbl "\lbl"
+       _regfmt REGSRC_NONE | (1 << REGF_WDSHIFT)
+       callext F(regdump)
+       _rstrregs
+.endm
+
 .macro reg     lbl, rn, fmt=0
        _saveregs
        _regbase