1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#ifndef __ASM_PPC_DISASSEMBLE_H__
21#define __ASM_PPC_DISASSEMBLE_H__
22
23#include <linux/types.h>
24
25static inline unsigned int get_op(u32 inst)
26{
27 return inst >> 26;
28}
29
30static inline unsigned int get_xop(u32 inst)
31{
32 return (inst >> 1) & 0x3ff;
33}
34
35static inline unsigned int get_sprn(u32 inst)
36{
37 return ((inst >> 16) & 0x1f) | ((inst >> 6) & 0x3e0);
38}
39
40static inline unsigned int get_dcrn(u32 inst)
41{
42 return ((inst >> 16) & 0x1f) | ((inst >> 6) & 0x3e0);
43}
44
45static inline unsigned int get_tmrn(u32 inst)
46{
47 return ((inst >> 16) & 0x1f) | ((inst >> 6) & 0x3e0);
48}
49
50static inline unsigned int get_rt(u32 inst)
51{
52 return (inst >> 21) & 0x1f;
53}
54
55static inline unsigned int get_rs(u32 inst)
56{
57 return (inst >> 21) & 0x1f;
58}
59
60static inline unsigned int get_ra(u32 inst)
61{
62 return (inst >> 16) & 0x1f;
63}
64
65static inline unsigned int get_rb(u32 inst)
66{
67 return (inst >> 11) & 0x1f;
68}
69
70static inline unsigned int get_rc(u32 inst)
71{
72 return inst & 0x1;
73}
74
75static inline unsigned int get_ws(u32 inst)
76{
77 return (inst >> 11) & 0x1f;
78}
79
80static inline unsigned int get_d(u32 inst)
81{
82 return inst & 0xffff;
83}
84
85static inline unsigned int get_oc(u32 inst)
86{
87 return (inst >> 11) & 0x7fff;
88}
89
90static inline unsigned int get_tx_or_sx(u32 inst)
91{
92 return (inst) & 0x1;
93}
94
95#define IS_XFORM(inst) (get_op(inst) == 31)
96#define IS_DSFORM(inst) (get_op(inst) >= 56)
97
98
99
100
101static inline unsigned make_dsisr(unsigned instr)
102{
103 unsigned dsisr;
104
105
106
107 dsisr = (instr & 0x03ff0000) >> 16;
108
109 if (IS_XFORM(instr)) {
110
111 dsisr |= (instr & 0x00000006) << 14;
112
113 dsisr |= (instr & 0x00000040) << 8;
114
115 dsisr |= (instr & 0x00000780) << 3;
116 } else {
117
118 dsisr |= (instr & 0x04000000) >> 12;
119
120 dsisr |= (instr & 0x78000000) >> 17;
121
122 if (IS_DSFORM(instr))
123 dsisr |= (instr & 0x00000003) << 18;
124 }
125
126 return dsisr;
127}
128#endif
129