base/reggump.h, base/regdump-*.S: Commentary and formatting improvements.
authorMark Wooding <mdw@distorted.org.uk>
Sat, 2 Mar 2024 12:02:39 +0000 (12:02 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Sat, 2 Mar 2024 12:02:39 +0000 (12:02 +0000)
No code change at all.

base/regdump-arm.S
base/regdump-arm64.S
base/regdump.h

index 6adcbdd..cd7ae67 100644 (file)
@@ -104,7 +104,8 @@ FUNC(regdump_xtsave)
   endprologue
        // On entry, r13 points to an extended save area, of size determined
        // by `regdump_gpsave' above.  On exit, the save area is filled in
-       // and a handy map placed at its base.
+       // and a handy map placed at its base, and r5 is left pointing to the
+       // reigster map.
 
        // Set up the map/extended save area pointer.
        add     r5, r13, #7
index 183d38f..1dacf2c 100644 (file)
@@ -119,7 +119,8 @@ FUNC(regdump_xtsave)
   endprologue
        // On entry, sp points to an extended save area, of size determined
        // by `regdump_gpsave' above.  On exit, the save area is filled in
-       // and a handy map placed at its base.
+       // and a handy map placed at its base, and x21 is left pointing
+       // pointing to the register map.
 
        // Set up the map/extended save area pointer.
        mov     x21, sp
index 3a6d59c..4934f5c 100644 (file)
@@ -187,10 +187,10 @@ union gp64 { uint64 u64; int64 i64; PTR64 };
 #if !__ASSEMBLER__
 
 #if CPUFAM_X86
-typedef union gp32 gpreg;
+  typedef union gp32 gpreg;
 #endif
 #if CPUFAM_AMD64
-typedef union gp64 gpreg;
+  typedef union gp64 gpreg;
 #endif
 
 struct gpsave {
@@ -203,7 +203,7 @@ union stmmx {
 #if FLT_RADIX == 2 && LDBL_MANT_DIG == 64
   long double f80;
 #endif
-unsigned char _pad[16];
+  unsigned char _pad[16];
 };
 
 union xmm { SIMD_COMMON(128); };
@@ -263,9 +263,23 @@ struct regmap {
 #else
 
        .extern regdump_gpsave
+         // Save general-purpose registers at r/esp; flags, r/eax, and, on
+         // x86, ebx, should have been filled in already, together with the
+         // focus address, in `REGIX_ADDR', if relevant.  Return required
+         // extended save area size in ecx, and leave r/ebp pointing to the
+         // save area.
+
        .extern regdump_xtsave
+         // Save extended registers at r/esp, leaving r/ebp pointing to the
+         // register map.
+
        .extern regdump_xtrstr
+         // Restore extended registers from register map in r/ebp, leaving
+         // r/ebp pointing to general-purpose save area.
+
        .extern regdump_gprstr
+         // Restore general-purpose registers, except r/esp, from save area
+         // at r/ebp.
 
        regmap_gp = 0*WORDSZ
        regmap_fx = 1*WORDSZ
@@ -385,8 +399,8 @@ DO8(REGDEF_SIMD)
        mov     [SP - REGDUMP_SPADJ + (REGIX_AX - 1)*WORDSZ], AX
 
   .ifnes "\addr", "nil"
-       // Collect the effective address for the following dump, leaving it
-       // in the `addr' slot of the dump.
+       // Collect the focus address for the following dump, leaving it in
+       // the `addr' slot of the dump.
        lea     AX, \addr
        mov     [SP - REGDUMP_SPADJ + (REGIX_ADDR - 1)*WORDSZ], AX
   .endif
@@ -546,9 +560,22 @@ struct regmap {
 #else
 
        .extern regdump_gpsave
+         // Save general-purpose registers at r13; r12 and r14 should have
+         // been filled in already, along with the focus address in
+         // `REGIX_ADDR', if relevant.  Return required extended save area
+         // size in r0, leave r4 pointing to the save area, and set r6 to
+         // the focus address.
+
        .extern regdump_xtsave
+         // Save extended registers at r13, leaving r5 pointing to the
+         // register map.
+
        .extern regdump_xtrstr
+         // Restore extended registers from register map at r5.
+
        .extern regdump_gprstr
+         // Restore general-purpose registers, except r13 and r14, from save
+         // area at r4.
 
        regmap_gp = 0
        regmap_fp = 4
@@ -598,8 +625,8 @@ DO16(REGDEF_NEONQ)
        str     r14, [r13, #-REGDUMP_GPSIZE + 14*4]
 
   .ifnes "\base,\off", "nil,#0"
-       // Collect the effective address for the following dump, leaving it
-       // in the `addr' slot of the dump.
+       // Collect the focus address for the following dump, leaving it in
+       // the `addr' slot of the dump.
     .ifeqs "\base", "nil"
        adrl    r14, \off
     .else
@@ -699,9 +726,22 @@ struct regmap {
 #else
 
        .extern regdump_gpsave
+         // Save general-purpose registers at sp; x16, x17, and x30, should
+         // have been filled in already, along with the focus address in
+         // `REGIX_ADDR', if relevant.  Return required extended save area
+         // size in x0, leave x20 pointing to the save area, and set x22 to
+         // the focus address.
+
        .extern regdump_xtsave
+         // Save extended registers at sp, leaving x21 pointing to the
+         // register map.
+
        .extern regdump_xtrstr
+         // Restore extended registers from register map at x21.
+
        .extern regdump_gprstr
+         // Restore general-purpose registers, except sp and x30, from save
+         // area at x20.
 
        regmap_gp = 0
        regmap_fp = 8
@@ -761,8 +801,8 @@ DO32(REGDEF_FP)
        str     x30, [sp, #-REGDUMP_GPSIZE + 30*8]
 
   .ifnes "\base,\off", "nil,#0"
-       // Collect the effective address for the following dump, leaving it
-       // in the `addr' slot of the dump.
+       // Collect the focus address for the following dump, leaving it in
+       // the `addr' slot of the dump.
     .ifeqs "\base", "nil"
        adr     x30, \off
     .else