2
* Copyright 2007 Sony Corporation
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License as published by
6
* the Free Software Foundation; version 2 of the License.
8
* This program is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
* GNU General Public License for more details.
13
* You should have received a copy of the GNU General Public License
14
* along with this program.
15
* If not, see <http://www.gnu.org/licenses/>.
18
#ifndef _ASM_POWERPC_EMULATED_OPS_H
19
#define _ASM_POWERPC_EMULATED_OPS_H
21
#include <linux/atomic.h>
22
#include <linux/perf_event.h>
25
#ifdef CONFIG_PPC_EMULATED_STATS
27
struct ppc_emulated_entry {
32
extern struct ppc_emulated {
34
struct ppc_emulated_entry altivec;
36
struct ppc_emulated_entry dcba;
37
struct ppc_emulated_entry dcbz;
38
struct ppc_emulated_entry fp_pair;
39
struct ppc_emulated_entry isel;
40
struct ppc_emulated_entry mcrxr;
41
struct ppc_emulated_entry mfpvr;
42
struct ppc_emulated_entry multiple;
43
struct ppc_emulated_entry popcntb;
44
struct ppc_emulated_entry spe;
45
struct ppc_emulated_entry string;
46
struct ppc_emulated_entry unaligned;
47
#ifdef CONFIG_MATH_EMULATION
48
struct ppc_emulated_entry math;
49
#elif defined(CONFIG_8XX_MINIMAL_FPEMU)
50
struct ppc_emulated_entry 8xx;
53
struct ppc_emulated_entry vsx;
56
struct ppc_emulated_entry mfdscr;
57
struct ppc_emulated_entry mtdscr;
61
extern u32 ppc_warn_emulated;
63
extern void ppc_warn_emulated_print(const char *type);
65
#define __PPC_WARN_EMULATED(type) \
67
atomic_inc(&ppc_emulated.type.val); \
68
if (ppc_warn_emulated) \
69
ppc_warn_emulated_print(ppc_emulated.type.name); \
72
#else /* !CONFIG_PPC_EMULATED_STATS */
74
#define __PPC_WARN_EMULATED(type) do { } while (0)
76
#endif /* !CONFIG_PPC_EMULATED_STATS */
78
#define PPC_WARN_EMULATED(type, regs) \
80
perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, \
82
__PPC_WARN_EMULATED(type); \
85
#define PPC_WARN_ALIGNMENT(type, regs) \
87
perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, \
88
1, regs, regs->dar); \
89
__PPC_WARN_EMULATED(type); \
92
#endif /* _ASM_POWERPC_EMULATED_OPS_H */