Revision 76a66253 target-ppc/op_template.h
b/target-ppc/op_template.h | ||
---|---|---|
1 | 1 |
/* |
2 | 2 |
* PowerPC emulation micro-operations for qemu. |
3 | 3 |
* |
4 |
* Copyright (c) 2003-2005 Jocelyn Mayer
|
|
4 |
* Copyright (c) 2003-2007 Jocelyn Mayer
|
|
5 | 5 |
* |
6 | 6 |
* This library is free software; you can redistribute it and/or |
7 | 7 |
* modify it under the terms of the GNU Lesser General Public |
... | ... | |
19 | 19 |
*/ |
20 | 20 |
|
21 | 21 |
/* General purpose registers moves */ |
22 |
void OPPROTO glue(op_load_gpr_T0_gpr, REG)(void) |
|
22 |
void OPPROTO glue(op_load_gpr_T0_gpr, REG) (void)
|
|
23 | 23 |
{ |
24 | 24 |
T0 = regs->gpr[REG]; |
25 | 25 |
RETURN(); |
26 | 26 |
} |
27 | 27 |
|
28 |
void OPPROTO glue(op_load_gpr_T1_gpr, REG)(void) |
|
28 |
void OPPROTO glue(op_load_gpr_T1_gpr, REG) (void)
|
|
29 | 29 |
{ |
30 | 30 |
T1 = regs->gpr[REG]; |
31 | 31 |
RETURN(); |
32 | 32 |
} |
33 | 33 |
|
34 |
void OPPROTO glue(op_load_gpr_T2_gpr, REG)(void) |
|
34 |
void OPPROTO glue(op_load_gpr_T2_gpr, REG) (void)
|
|
35 | 35 |
{ |
36 | 36 |
T2 = regs->gpr[REG]; |
37 | 37 |
RETURN(); |
38 | 38 |
} |
39 | 39 |
|
40 |
void OPPROTO glue(op_store_T0_gpr_gpr, REG)(void) |
|
40 |
void OPPROTO glue(op_store_T0_gpr_gpr, REG) (void)
|
|
41 | 41 |
{ |
42 | 42 |
regs->gpr[REG] = T0; |
43 | 43 |
RETURN(); |
44 | 44 |
} |
45 | 45 |
|
46 |
void OPPROTO glue(op_store_T1_gpr_gpr, REG)(void) |
|
46 |
void OPPROTO glue(op_store_T1_gpr_gpr, REG) (void)
|
|
47 | 47 |
{ |
48 | 48 |
regs->gpr[REG] = T1; |
49 | 49 |
RETURN(); |
50 | 50 |
} |
51 | 51 |
|
52 |
void OPPROTO glue(op_store_T2_gpr_gpr, REG)(void) |
|
52 |
#if 0 // unused |
|
53 |
void OPPROTO glue(op_store_T2_gpr_gpr, REG) (void) |
|
53 | 54 |
{ |
54 | 55 |
regs->gpr[REG] = T2; |
55 | 56 |
RETURN(); |
56 | 57 |
} |
58 |
#endif |
|
57 | 59 |
|
58 | 60 |
#if REG <= 7 |
59 | 61 |
/* Condition register moves */ |
60 |
void OPPROTO glue(op_load_crf_T0_crf, REG)(void) |
|
62 |
void OPPROTO glue(op_load_crf_T0_crf, REG) (void)
|
|
61 | 63 |
{ |
62 | 64 |
T0 = regs->crf[REG]; |
63 | 65 |
RETURN(); |
64 | 66 |
} |
65 | 67 |
|
66 |
void OPPROTO glue(op_load_crf_T1_crf, REG)(void) |
|
68 |
void OPPROTO glue(op_load_crf_T1_crf, REG) (void)
|
|
67 | 69 |
{ |
68 | 70 |
T1 = regs->crf[REG]; |
69 | 71 |
RETURN(); |
70 | 72 |
} |
71 | 73 |
|
72 |
void OPPROTO glue(op_store_T0_crf_crf, REG)(void) |
|
74 |
void OPPROTO glue(op_store_T0_crf_crf, REG) (void)
|
|
73 | 75 |
{ |
74 | 76 |
regs->crf[REG] = T0; |
75 | 77 |
RETURN(); |
76 | 78 |
} |
77 | 79 |
|
78 |
void OPPROTO glue(op_store_T1_crf_crf, REG)(void) |
|
80 |
void OPPROTO glue(op_store_T1_crf_crf, REG) (void)
|
|
79 | 81 |
{ |
80 | 82 |
regs->crf[REG] = T1; |
81 | 83 |
RETURN(); |
82 | 84 |
} |
83 | 85 |
|
84 | 86 |
/* Floating point condition and status register moves */ |
85 |
void OPPROTO glue(op_load_fpscr_T0_fpscr, REG)(void) |
|
87 |
void OPPROTO glue(op_load_fpscr_T0_fpscr, REG) (void)
|
|
86 | 88 |
{ |
87 | 89 |
T0 = regs->fpscr[REG]; |
88 | 90 |
RETURN(); |
89 | 91 |
} |
90 | 92 |
|
91 | 93 |
#if REG == 0 |
92 |
void OPPROTO glue(op_store_T0_fpscr_fpscr, REG)(void) |
|
94 |
void OPPROTO glue(op_store_T0_fpscr_fpscr, REG) (void)
|
|
93 | 95 |
{ |
94 | 96 |
regs->fpscr[REG] = (regs->fpscr[REG] & 0x9) | (T0 & ~0x9); |
95 | 97 |
RETURN(); |
96 | 98 |
} |
97 | 99 |
|
98 |
void OPPROTO glue(op_store_T0_fpscri_fpscr, REG)(void) |
|
99 |
{ |
|
100 |
regs->fpscr[REG] = (regs->fpscr[REG] & ~0x9) | (PARAM(1) & 0x9); |
|
101 |
RETURN(); |
|
102 |
} |
|
103 |
|
|
104 |
void OPPROTO glue(op_clear_fpscr_fpscr, REG)(void) |
|
100 |
void OPPROTO glue(op_clear_fpscr_fpscr, REG) (void) |
|
105 | 101 |
{ |
106 | 102 |
regs->fpscr[REG] = (regs->fpscr[REG] & 0x9); |
107 | 103 |
RETURN(); |
108 | 104 |
} |
109 | 105 |
#else |
110 |
void OPPROTO glue(op_store_T0_fpscr_fpscr, REG)(void) |
|
106 |
void OPPROTO glue(op_store_T0_fpscr_fpscr, REG) (void)
|
|
111 | 107 |
{ |
112 | 108 |
regs->fpscr[REG] = T0; |
113 | 109 |
RETURN(); |
114 | 110 |
} |
115 | 111 |
|
116 |
void OPPROTO glue(op_store_T0_fpscri_fpscr, REG)(void) |
|
117 |
{ |
|
118 |
regs->fpscr[REG] = PARAM(1); |
|
119 |
RETURN(); |
|
120 |
} |
|
121 |
|
|
122 |
void OPPROTO glue(op_clear_fpscr_fpscr, REG)(void) |
|
112 |
void OPPROTO glue(op_clear_fpscr_fpscr, REG) (void) |
|
123 | 113 |
{ |
124 | 114 |
regs->fpscr[REG] = 0x0; |
125 | 115 |
RETURN(); |
... | ... | |
129 | 119 |
#endif /* REG <= 7 */ |
130 | 120 |
|
131 | 121 |
/* floating point registers moves */ |
132 |
void OPPROTO glue(op_load_fpr_FT0_fpr, REG)(void) |
|
122 |
void OPPROTO glue(op_load_fpr_FT0_fpr, REG) (void)
|
|
133 | 123 |
{ |
134 | 124 |
FT0 = env->fpr[REG]; |
135 | 125 |
RETURN(); |
136 | 126 |
} |
137 | 127 |
|
138 |
void OPPROTO glue(op_store_FT0_fpr_fpr, REG)(void) |
|
128 |
void OPPROTO glue(op_store_FT0_fpr_fpr, REG) (void)
|
|
139 | 129 |
{ |
140 | 130 |
env->fpr[REG] = FT0; |
141 | 131 |
RETURN(); |
142 | 132 |
} |
143 | 133 |
|
144 |
void OPPROTO glue(op_load_fpr_FT1_fpr, REG)(void) |
|
134 |
void OPPROTO glue(op_load_fpr_FT1_fpr, REG) (void)
|
|
145 | 135 |
{ |
146 | 136 |
FT1 = env->fpr[REG]; |
147 | 137 |
RETURN(); |
148 | 138 |
} |
149 | 139 |
|
150 |
void OPPROTO glue(op_store_FT1_fpr_fpr, REG)(void) |
|
140 |
void OPPROTO glue(op_store_FT1_fpr_fpr, REG) (void)
|
|
151 | 141 |
{ |
152 | 142 |
env->fpr[REG] = FT1; |
153 | 143 |
RETURN(); |
154 | 144 |
} |
155 | 145 |
|
156 |
void OPPROTO glue(op_load_fpr_FT2_fpr, REG)(void) |
|
146 |
void OPPROTO glue(op_load_fpr_FT2_fpr, REG) (void)
|
|
157 | 147 |
{ |
158 | 148 |
FT2 = env->fpr[REG]; |
159 | 149 |
RETURN(); |
160 | 150 |
} |
161 | 151 |
|
162 |
void OPPROTO glue(op_store_FT2_fpr_fpr, REG)(void) |
|
152 |
#if 0 // unused |
|
153 |
void OPPROTO glue(op_store_FT2_fpr_fpr, REG) (void) |
|
163 | 154 |
{ |
164 | 155 |
env->fpr[REG] = FT2; |
165 | 156 |
RETURN(); |
166 | 157 |
} |
167 |
|
|
168 |
#if REG <= 15 |
|
169 |
/* Segment register moves */ |
|
170 |
void OPPROTO glue(op_load_sr, REG)(void) |
|
171 |
{ |
|
172 |
T0 = env->sr[REG]; |
|
173 |
RETURN(); |
|
174 |
} |
|
175 |
|
|
176 |
void OPPROTO glue(op_store_sr, REG)(void) |
|
177 |
{ |
|
178 |
do_store_sr(env, REG, T0); |
|
179 |
RETURN(); |
|
180 |
} |
|
181 | 158 |
#endif |
182 | 159 |
|
183 | 160 |
#undef REG |
Also available in: Unified diff