1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef ARCH_PERF_REGS_H 3*4882a593Smuzhiyun #define ARCH_PERF_REGS_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <stdlib.h> 6*4882a593Smuzhiyun #include <linux/types.h> 7*4882a593Smuzhiyun #include <asm/perf_regs.h> 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun void perf_regs_load(u64 *regs); 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #define PERF_REGS_MAX PERF_REG_X86_XMM_MAX 12*4882a593Smuzhiyun #ifndef HAVE_ARCH_X86_64_SUPPORT 13*4882a593Smuzhiyun #define PERF_REGS_MASK ((1ULL << PERF_REG_X86_32_MAX) - 1) 14*4882a593Smuzhiyun #define PERF_SAMPLE_REGS_ABI PERF_SAMPLE_REGS_ABI_32 15*4882a593Smuzhiyun #else 16*4882a593Smuzhiyun #define REG_NOSUPPORT ((1ULL << PERF_REG_X86_DS) | \ 17*4882a593Smuzhiyun (1ULL << PERF_REG_X86_ES) | \ 18*4882a593Smuzhiyun (1ULL << PERF_REG_X86_FS) | \ 19*4882a593Smuzhiyun (1ULL << PERF_REG_X86_GS)) 20*4882a593Smuzhiyun #define PERF_REGS_MASK (((1ULL << PERF_REG_X86_64_MAX) - 1) & ~REG_NOSUPPORT) 21*4882a593Smuzhiyun #define PERF_SAMPLE_REGS_ABI PERF_SAMPLE_REGS_ABI_64 22*4882a593Smuzhiyun #endif 23*4882a593Smuzhiyun #define PERF_REG_IP PERF_REG_X86_IP 24*4882a593Smuzhiyun #define PERF_REG_SP PERF_REG_X86_SP 25*4882a593Smuzhiyun __perf_reg_name(int id)26*4882a593Smuzhiyunstatic inline const char *__perf_reg_name(int id) 27*4882a593Smuzhiyun { 28*4882a593Smuzhiyun switch (id) { 29*4882a593Smuzhiyun case PERF_REG_X86_AX: 30*4882a593Smuzhiyun return "AX"; 31*4882a593Smuzhiyun case PERF_REG_X86_BX: 32*4882a593Smuzhiyun return "BX"; 33*4882a593Smuzhiyun case PERF_REG_X86_CX: 34*4882a593Smuzhiyun return "CX"; 35*4882a593Smuzhiyun case PERF_REG_X86_DX: 36*4882a593Smuzhiyun return "DX"; 37*4882a593Smuzhiyun case PERF_REG_X86_SI: 38*4882a593Smuzhiyun return "SI"; 39*4882a593Smuzhiyun case PERF_REG_X86_DI: 40*4882a593Smuzhiyun return "DI"; 41*4882a593Smuzhiyun case PERF_REG_X86_BP: 42*4882a593Smuzhiyun return "BP"; 43*4882a593Smuzhiyun case PERF_REG_X86_SP: 44*4882a593Smuzhiyun return "SP"; 45*4882a593Smuzhiyun case PERF_REG_X86_IP: 46*4882a593Smuzhiyun return "IP"; 47*4882a593Smuzhiyun case PERF_REG_X86_FLAGS: 48*4882a593Smuzhiyun return "FLAGS"; 49*4882a593Smuzhiyun case PERF_REG_X86_CS: 50*4882a593Smuzhiyun return "CS"; 51*4882a593Smuzhiyun case PERF_REG_X86_SS: 52*4882a593Smuzhiyun return "SS"; 53*4882a593Smuzhiyun case PERF_REG_X86_DS: 54*4882a593Smuzhiyun return "DS"; 55*4882a593Smuzhiyun case PERF_REG_X86_ES: 56*4882a593Smuzhiyun return "ES"; 57*4882a593Smuzhiyun case PERF_REG_X86_FS: 58*4882a593Smuzhiyun return "FS"; 59*4882a593Smuzhiyun case PERF_REG_X86_GS: 60*4882a593Smuzhiyun return "GS"; 61*4882a593Smuzhiyun #ifdef HAVE_ARCH_X86_64_SUPPORT 62*4882a593Smuzhiyun case PERF_REG_X86_R8: 63*4882a593Smuzhiyun return "R8"; 64*4882a593Smuzhiyun case PERF_REG_X86_R9: 65*4882a593Smuzhiyun return "R9"; 66*4882a593Smuzhiyun case PERF_REG_X86_R10: 67*4882a593Smuzhiyun return "R10"; 68*4882a593Smuzhiyun case PERF_REG_X86_R11: 69*4882a593Smuzhiyun return "R11"; 70*4882a593Smuzhiyun case PERF_REG_X86_R12: 71*4882a593Smuzhiyun return "R12"; 72*4882a593Smuzhiyun case PERF_REG_X86_R13: 73*4882a593Smuzhiyun return "R13"; 74*4882a593Smuzhiyun case PERF_REG_X86_R14: 75*4882a593Smuzhiyun return "R14"; 76*4882a593Smuzhiyun case PERF_REG_X86_R15: 77*4882a593Smuzhiyun return "R15"; 78*4882a593Smuzhiyun #endif /* HAVE_ARCH_X86_64_SUPPORT */ 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun #define XMM(x) \ 81*4882a593Smuzhiyun case PERF_REG_X86_XMM ## x: \ 82*4882a593Smuzhiyun case PERF_REG_X86_XMM ## x + 1: \ 83*4882a593Smuzhiyun return "XMM" #x; 84*4882a593Smuzhiyun XMM(0) 85*4882a593Smuzhiyun XMM(1) 86*4882a593Smuzhiyun XMM(2) 87*4882a593Smuzhiyun XMM(3) 88*4882a593Smuzhiyun XMM(4) 89*4882a593Smuzhiyun XMM(5) 90*4882a593Smuzhiyun XMM(6) 91*4882a593Smuzhiyun XMM(7) 92*4882a593Smuzhiyun XMM(8) 93*4882a593Smuzhiyun XMM(9) 94*4882a593Smuzhiyun XMM(10) 95*4882a593Smuzhiyun XMM(11) 96*4882a593Smuzhiyun XMM(12) 97*4882a593Smuzhiyun XMM(13) 98*4882a593Smuzhiyun XMM(14) 99*4882a593Smuzhiyun XMM(15) 100*4882a593Smuzhiyun #undef XMM 101*4882a593Smuzhiyun default: 102*4882a593Smuzhiyun return NULL; 103*4882a593Smuzhiyun } 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun return NULL; 106*4882a593Smuzhiyun } 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun #endif /* ARCH_PERF_REGS_H */ 109