PERFORCE change 102621 for review
John Birrell
jb at FreeBSD.org
Fri Jul 28 00:59:09 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=102621
Change 102621 by jb at jb_freebsd2 on 2006/07/28 00:58:37
Include the common asm source which is separeately included inline
in other asm code.
Affected files ...
.. //depot/projects/dtrace/src/sys/sun4v/sun4v/cpu_snapshot_save.S#3 edit
Differences ...
==== //depot/projects/dtrace/src/sys/sun4v/sun4v/cpu_snapshot_save.S#3 (text+ko) ====
@@ -2,151 +2,14 @@
#include <machine/asi.h>
#include <machine/asmacros.h>
#include <machine/cpu_snapshot.h>
-#ifdef _KERNEL
#include "assym.s"
-#endif
-#define STACK_G1 SPOFF
-#define STACK_G2 SPOFF + 0x08
-#define STACK_G3 SPOFF + 0x10
-#define STACK_G4 SPOFF + 0x18
-#define STACK_FREEC SPOFF + 0x20
-#define STACK_FREEB SPOFF + 0x28
-#define STACK_FREEA SPOFF + 0x30
-#define STACK_FREE9 SPOFF + 0x38
-#define STACK_FREE8 SPOFF + 0x40
-#define STACK_FREE7 SPOFF + 0x48
-#define STACK_FREE6 SPOFF + 0x50
-#define STACK_FREE5 SPOFF + 0x58
-#define STACK_FREE4 SPOFF + 0x60
-#define STACK_FREE3 SPOFF + 0x68
-#define STACK_FREE2 SPOFF + 0x70
-#define STACK_FREE1 SPOFF + 0x78
-#define STACK_SIZE 0x80
+#define CPU_SNAPSHOT_FUNC
ENTRY(cpu_snapshot_save)
- /* Create room on the stack for this leaf-function. */
- sub %sp, STACK_SIZE, %sp
- /* Save registers used in this function on the stack. */
- stx %g1, [ %sp + STACK_G1 ] ! cpu
- stx %g2, [ %sp + STACK_G2 ] ! Ptr to struct cpu_snapshot
- stx %g3, [ %sp + STACK_G3 ] ! i
- stx %g4, [ %sp + STACK_G4 ] ! Temporary value.
-
- /* Get the current CPU number. */
-#ifdef _KERNEL
- lduw [ PCPU(CPUID) ], %g1
-#else
- mov %g0, %g1
-#endif
-
- /*
- * Multiply the CPU ID by the size of the per-cpu array entry
- * to get the offset to the start of the CPU specific array.
- */
- sllx %g1, N_CPU_SNAPSHOT_BITS + CPU_SNAPSHOT_BITS, %g1
-
- /* Get the address of cpu_snapshot_data. */
- sethi %hi(cpu_snapshot_data), %g2
- or %g2, %lo(cpu_snapshot_data), %g2
-
- /*
- * Offset the cpu_snapshot_data point to get the address of
- * cpu_snapshot_data[cpuid][0].
- */
- add %g2, %g1, %g2
-
- /* Initialise the loop variable (i). */
- mov %g0, %g3
-
- /* Enter a loop... */
- cmp %g3, N_CPU_SNAPSHOT
- bge,pn %icc, .cpu_snapshot_save_4
-
-.cpu_snapshot_save_1:
- /* if p->r_o7 == 0, goto .cpu_snapshot_save_2 */
- ldx [ %g2 + CPU_SNAPSHOT_R_O7 ], %g4
- brz,pn %g4, .cpu_snapshot_save_2
- nop
-
- /* if p->r_o7 == %o7 goto .cpu_snapshot_save_2 */
- cmp %g4, %o7
- be,pn %icc, .cpu_snapshot_save_2
- nop
-
- ba,a .cpu_snapshot_save_3
- nop
+#include "machine/cpu_snapshot_save.h"
-.cpu_snapshot_save_2:
- /* Increment the call count. */
- ldx [ %g2 + CPU_SNAPSHOT_COUNT ], %g4
- inc %g4
- stx %g4, [ %g2 + CPU_SNAPSHOT_COUNT ]
-
- /* Save the registers in struct cpu_snapshot. */
- stx %i0, [ %g2 + CPU_SNAPSHOT_R_I0 ]
- stx %i1, [ %g2 + CPU_SNAPSHOT_R_I1 ]
- stx %i2, [ %g2 + CPU_SNAPSHOT_R_I2 ]
- stx %i3, [ %g2 + CPU_SNAPSHOT_R_I3 ]
- stx %i4, [ %g2 + CPU_SNAPSHOT_R_I4 ]
- stx %i5, [ %g2 + CPU_SNAPSHOT_R_I5 ]
- stx %i6, [ %g2 + CPU_SNAPSHOT_R_I6 ]
- stx %i7, [ %g2 + CPU_SNAPSHOT_R_I7 ]
- stx %o0, [ %g2 + CPU_SNAPSHOT_R_O0 ]
- stx %o1, [ %g2 + CPU_SNAPSHOT_R_O1 ]
- stx %o2, [ %g2 + CPU_SNAPSHOT_R_O2 ]
- stx %o3, [ %g2 + CPU_SNAPSHOT_R_O3 ]
- stx %o4, [ %g2 + CPU_SNAPSHOT_R_O4 ]
- stx %o5, [ %g2 + CPU_SNAPSHOT_R_O5 ]
- stx %o6, [ %g2 + CPU_SNAPSHOT_R_O6 ]
- stx %o7, [ %g2 + CPU_SNAPSHOT_R_O7 ]
- stx %o7, [ %g2 + CPU_SNAPSHOT_R_O7 ]
- ldx [ %sp + STACK_G1 ], %g4
- stx %g4, [ %g2 + CPU_SNAPSHOT_R_G1 ]
- ldx [ %sp + STACK_G2 ], %g4
- stx %g4, [ %g2 + CPU_SNAPSHOT_R_G2 ]
- ldx [ %sp + STACK_G3 ], %g4
- stx %g4, [ %g2 + CPU_SNAPSHOT_R_G3 ]
- ldx [ %sp + STACK_G4 ], %g4
- stx %g4, [ %g2 + CPU_SNAPSHOT_R_G4 ]
- stx %g5, [ %g2 + CPU_SNAPSHOT_R_G5 ]
- stx %g6, [ %g2 + CPU_SNAPSHOT_R_G6 ]
- stx %g7, [ %g2 + CPU_SNAPSHOT_R_G7 ]
-#ifdef _KERNEL
- rdpr %pstate, %g4
- stx %g4, [ %g2 + CPU_SNAPSHOT_PSTATE ]
- rdpr %tick, %g4
- stx %g4, [ %g2 + CPU_SNAPSHOT_TICK ]
- rdpr %pil, %g4
- stx %g4, [ %g2 + CPU_SNAPSHOT_PIL ]
- rdpr %tl, %g4
- stx %g4, [ %g2 + CPU_SNAPSHOT_TL ]
-#endif
-
- ba,a .cpu_snapshot_save_4
- nop
-
-.cpu_snapshot_save_3:
- /* Increment the loop variable. */
- inc %g3
-
- /* Point to the next array entry. */
- add %g2, CPU_SNAPSHOT_SIZE, %g2
-
- cmp %g3, N_CPU_SNAPSHOT
- bl %icc, .cpu_snapshot_save_1
-
-.cpu_snapshot_save_4:
-
- /* Restore saved registers. */
- ldx [ %sp + STACK_G1 ], %g1
- ldx [ %sp + STACK_G2 ], %g2
- ldx [ %sp + STACK_G3 ], %g3
- ldx [ %sp + STACK_G4 ], %g4
-
- /* Restore the stack before returning. */
- add %sp, STACK_SIZE, %sp
retl
- nop
+ nop
END(cpu_snapshot_save)
More information about the p4-projects
mailing list