1 // SPDX-License-Identifier: GPL-2.0
2 #include <errno.h>
3 #include <dwarf-regs.h>
4 #include "../../../arch/s390/include/uapi/asm/perf_regs.h"
5
__get_dwarf_regnum_for_perf_regnum_s390(int perf_regnum)6 int __get_dwarf_regnum_for_perf_regnum_s390(int perf_regnum)
7 {
8 static const int dwarf_s390_regnums[] = {
9 [PERF_REG_S390_R0] = 0,
10 [PERF_REG_S390_R1] = 1,
11 [PERF_REG_S390_R2] = 2,
12 [PERF_REG_S390_R3] = 3,
13 [PERF_REG_S390_R4] = 4,
14 [PERF_REG_S390_R5] = 5,
15 [PERF_REG_S390_R6] = 6,
16 [PERF_REG_S390_R7] = 7,
17 [PERF_REG_S390_R8] = 8,
18 [PERF_REG_S390_R9] = 9,
19 [PERF_REG_S390_R10] = 10,
20 [PERF_REG_S390_R11] = 11,
21 [PERF_REG_S390_R12] = 12,
22 [PERF_REG_S390_R13] = 13,
23 [PERF_REG_S390_R14] = 14,
24 [PERF_REG_S390_R15] = 15,
25 [PERF_REG_S390_FP0] = 16,
26 [PERF_REG_S390_FP1] = 20,
27 [PERF_REG_S390_FP2] = 17,
28 [PERF_REG_S390_FP3] = 21,
29 [PERF_REG_S390_FP4] = 18,
30 [PERF_REG_S390_FP5] = 22,
31 [PERF_REG_S390_FP6] = 19,
32 [PERF_REG_S390_FP7] = 23,
33 [PERF_REG_S390_FP8] = 24,
34 [PERF_REG_S390_FP9] = 28,
35 [PERF_REG_S390_FP10] = 25,
36 [PERF_REG_S390_FP11] = 29,
37 [PERF_REG_S390_FP12] = 26,
38 [PERF_REG_S390_FP13] = 30,
39 [PERF_REG_S390_FP14] = 27,
40 [PERF_REG_S390_FP15] = 31,
41 [PERF_REG_S390_MASK] = 64,
42 [PERF_REG_S390_PC] = 65,
43 };
44
45 if (perf_regnum == 0)
46 return 0;
47
48 if (perf_regnum < 0 || perf_regnum > (int)ARRAY_SIZE(dwarf_s390_regnums) ||
49 dwarf_s390_regnums[perf_regnum] == 0)
50 return -ENOENT;
51
52 return dwarf_s390_regnums[perf_regnum];
53 }
54