tools/testing/selftests/powerpc/pmu/ebb/ebb_handler.S

Source file repositories/reference/linux-study-clean/tools/testing/selftests/powerpc/pmu/ebb/ebb_handler.S

File Facts

System
Linux kernel
Corpus path
tools/testing/selftests/powerpc/pmu/ebb/ebb_handler.S
Extension
.S
Size
7495 bytes
Lines
366
Domain
Support Tooling And Documentation
Bucket
tools
Inferred role
Support Tooling And Documentation: tools
Status
atlas-only

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

#include <ppc-asm.h>
#include "reg.h"


/* ppc-asm.h defines most of the reg aliases, but not r1/r2. */
#define r1 1
#define r2 2

#define RFEBB   .long 0x4c000924

/* Stack layout:
 *
 *                   ^
 *  User stack       |
 *  Back chain ------+	<- r1		<-------+
 *  ...						|
 *  Red zone / ABI Gap				|
 *  ...						|
 *  vr63	<+				|
 *  vr0		 |				|
 *  VSCR	 |				|
 *  FSCR	 |				|
 *  r31		 | Save area			|
 *  r0		 |				|
 *  XER		 |				|
 *  CTR		 |				|
 *  LR		 |				|
 *  CCR		<+				|
 *  ...		<+				|
 *  LR		 | Caller frame			|
 *  CCR		 |				|
 *  Back chain	<+	<- updated r1	--------+
 *
 */

#if defined(_CALL_ELF) && _CALL_ELF == 2
#define ABIGAP		512
#else
#define ABIGAP		288
#endif

#define NR_GPR		32
#define NR_SPR		6
#define NR_VSR		64

#define SAVE_AREA	((NR_GPR + NR_SPR) * 8 + (NR_VSR * 16))
#define CALLER_FRAME	112

#define STACK_FRAME	(ABIGAP + SAVE_AREA + CALLER_FRAME)

#define CCR_SAVE	(CALLER_FRAME)
#define LR_SAVE		(CCR_SAVE + 8)
#define CTR_SAVE	(LR_SAVE  + 8)
#define XER_SAVE	(CTR_SAVE + 8)
#define GPR_SAVE(n)	(XER_SAVE + 8 + (8 * n))
#define FSCR_SAVE	(GPR_SAVE(31) + 8)
#define VSCR_SAVE	(FSCR_SAVE + 8)
#define VSR_SAVE(n)	(VSCR_SAVE + 8 + (16 * n))

#define SAVE_GPR(n)	std n,GPR_SAVE(n)(r1)
#define REST_GPR(n)	ld  n,GPR_SAVE(n)(r1)
#define TRASH_GPR(n)	lis n,0xaaaa

#define SAVE_VSR(n, b)	li b, VSR_SAVE(n); stxvd2x n,b,r1
#define LOAD_VSR(n, b)	li b, VSR_SAVE(n); lxvd2x  n,b,r1

#define LOAD_REG_IMMEDIATE(reg,expr)	\
	lis     reg,(expr)@highest;	\
	ori     reg,reg,(expr)@higher;	\
	rldicr  reg,reg,32,31;		\

Annotation

Implementation Notes