Statistics
| Branch: | Revision:

root / target-ppc / op_template.h @ d7e4b87e

History | View | Annotate | Download (3.8 kB)

1 28b6751f bellard
/*
2 3fc6c082 bellard
 *  PowerPC emulation micro-operations for qemu.
3 5fafdf24 ths
 *
4 76a66253 j_mayer
 *  Copyright (c) 2003-2007 Jocelyn Mayer
5 28b6751f bellard
 *
6 28b6751f bellard
 * This library is free software; you can redistribute it and/or
7 28b6751f bellard
 * modify it under the terms of the GNU Lesser General Public
8 28b6751f bellard
 * License as published by the Free Software Foundation; either
9 28b6751f bellard
 * version 2 of the License, or (at your option) any later version.
10 28b6751f bellard
 *
11 28b6751f bellard
 * This library is distributed in the hope that it will be useful,
12 28b6751f bellard
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 28b6751f bellard
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 28b6751f bellard
 * Lesser General Public License for more details.
15 28b6751f bellard
 *
16 28b6751f bellard
 * You should have received a copy of the GNU Lesser General Public
17 28b6751f bellard
 * License along with this library; if not, write to the Free Software
18 28b6751f bellard
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 28b6751f bellard
 */
20 28b6751f bellard
21 9a64fbe4 bellard
/* General purpose registers moves */
22 76a66253 j_mayer
void OPPROTO glue(op_load_gpr_T0_gpr, REG) (void)
23 28b6751f bellard
{
24 36081602 j_mayer
    T0 = env->gpr[REG];
25 9a64fbe4 bellard
    RETURN();
26 28b6751f bellard
}
27 28b6751f bellard
28 76a66253 j_mayer
void OPPROTO glue(op_load_gpr_T1_gpr, REG) (void)
29 28b6751f bellard
{
30 36081602 j_mayer
    T1 = env->gpr[REG];
31 9a64fbe4 bellard
    RETURN();
32 28b6751f bellard
}
33 28b6751f bellard
34 76a66253 j_mayer
void OPPROTO glue(op_load_gpr_T2_gpr, REG) (void)
35 28b6751f bellard
{
36 36081602 j_mayer
    T2 = env->gpr[REG];
37 9a64fbe4 bellard
    RETURN();
38 28b6751f bellard
}
39 28b6751f bellard
40 76a66253 j_mayer
void OPPROTO glue(op_store_T0_gpr_gpr, REG) (void)
41 28b6751f bellard
{
42 36081602 j_mayer
    env->gpr[REG] = T0;
43 9a64fbe4 bellard
    RETURN();
44 28b6751f bellard
}
45 28b6751f bellard
46 76a66253 j_mayer
void OPPROTO glue(op_store_T1_gpr_gpr, REG) (void)
47 28b6751f bellard
{
48 36081602 j_mayer
    env->gpr[REG] = T1;
49 9a64fbe4 bellard
    RETURN();
50 28b6751f bellard
}
51 28b6751f bellard
52 76a66253 j_mayer
#if 0 // unused
53 76a66253 j_mayer
void OPPROTO glue(op_store_T2_gpr_gpr, REG) (void)
54 28b6751f bellard
{
55 36081602 j_mayer
    env->gpr[REG] = T2;
56 9a64fbe4 bellard
    RETURN();
57 28b6751f bellard
}
58 76a66253 j_mayer
#endif
59 28b6751f bellard
60 35cdaad6 j_mayer
#if defined(TARGET_PPCEMB)
61 0487d6a8 j_mayer
void OPPROTO glue(op_load_gpr64_T0_gpr, REG) (void)
62 0487d6a8 j_mayer
{
63 36081602 j_mayer
    T0_64 = env->gpr[REG];
64 0487d6a8 j_mayer
    RETURN();
65 0487d6a8 j_mayer
}
66 0487d6a8 j_mayer
67 0487d6a8 j_mayer
void OPPROTO glue(op_load_gpr64_T1_gpr, REG) (void)
68 0487d6a8 j_mayer
{
69 36081602 j_mayer
    T1_64 = env->gpr[REG];
70 0487d6a8 j_mayer
    RETURN();
71 0487d6a8 j_mayer
}
72 0487d6a8 j_mayer
73 0487d6a8 j_mayer
#if 0 // unused
74 0487d6a8 j_mayer
void OPPROTO glue(op_load_gpr64_T2_gpr, REG) (void)
75 0487d6a8 j_mayer
{
76 36081602 j_mayer
    T2_64 = env->gpr[REG];
77 0487d6a8 j_mayer
    RETURN();
78 0487d6a8 j_mayer
}
79 0487d6a8 j_mayer
#endif
80 0487d6a8 j_mayer
81 0487d6a8 j_mayer
void OPPROTO glue(op_store_T0_gpr64_gpr, REG) (void)
82 0487d6a8 j_mayer
{
83 36081602 j_mayer
    env->gpr[REG] = T0_64;
84 0487d6a8 j_mayer
    RETURN();
85 0487d6a8 j_mayer
}
86 0487d6a8 j_mayer
87 0487d6a8 j_mayer
void OPPROTO glue(op_store_T1_gpr64_gpr, REG) (void)
88 0487d6a8 j_mayer
{
89 36081602 j_mayer
    env->gpr[REG] = T1_64;
90 0487d6a8 j_mayer
    RETURN();
91 0487d6a8 j_mayer
}
92 0487d6a8 j_mayer
93 0487d6a8 j_mayer
#if 0 // unused
94 0487d6a8 j_mayer
void OPPROTO glue(op_store_T2_gpr64_gpr, REG) (void)
95 0487d6a8 j_mayer
{
96 36081602 j_mayer
    env->gpr[REG] = T2_64;
97 0487d6a8 j_mayer
    RETURN();
98 0487d6a8 j_mayer
}
99 0487d6a8 j_mayer
#endif
100 35cdaad6 j_mayer
#endif /* defined(TARGET_PPCEMB) */
101 0487d6a8 j_mayer
102 28b6751f bellard
#if REG <= 7
103 9a64fbe4 bellard
/* Condition register moves */
104 76a66253 j_mayer
void OPPROTO glue(op_load_crf_T0_crf, REG) (void)
105 28b6751f bellard
{
106 36081602 j_mayer
    T0 = env->crf[REG];
107 9a64fbe4 bellard
    RETURN();
108 28b6751f bellard
}
109 28b6751f bellard
110 76a66253 j_mayer
void OPPROTO glue(op_load_crf_T1_crf, REG) (void)
111 28b6751f bellard
{
112 36081602 j_mayer
    T1 = env->crf[REG];
113 9a64fbe4 bellard
    RETURN();
114 28b6751f bellard
}
115 28b6751f bellard
116 76a66253 j_mayer
void OPPROTO glue(op_store_T0_crf_crf, REG) (void)
117 28b6751f bellard
{
118 36081602 j_mayer
    env->crf[REG] = T0;
119 9a64fbe4 bellard
    RETURN();
120 28b6751f bellard
}
121 28b6751f bellard
122 76a66253 j_mayer
void OPPROTO glue(op_store_T1_crf_crf, REG) (void)
123 28b6751f bellard
{
124 36081602 j_mayer
    env->crf[REG] = T1;
125 9a64fbe4 bellard
    RETURN();
126 28b6751f bellard
}
127 28b6751f bellard
128 fb0eaffc bellard
/* Floating point condition and status register moves */
129 76a66253 j_mayer
void OPPROTO glue(op_load_fpscr_T0_fpscr, REG) (void)
130 fb0eaffc bellard
{
131 36081602 j_mayer
    T0 = env->fpscr[REG];
132 fb0eaffc bellard
    RETURN();
133 fb0eaffc bellard
}
134 fb0eaffc bellard
135 fb0eaffc bellard
#if REG == 0
136 76a66253 j_mayer
void OPPROTO glue(op_store_T0_fpscr_fpscr, REG) (void)
137 fb0eaffc bellard
{
138 36081602 j_mayer
    env->fpscr[REG] = (env->fpscr[REG] & 0x9) | (T0 & ~0x9);
139 fb0eaffc bellard
    RETURN();
140 fb0eaffc bellard
}
141 fb0eaffc bellard
142 76a66253 j_mayer
void OPPROTO glue(op_clear_fpscr_fpscr, REG) (void)
143 fb0eaffc bellard
{
144 36081602 j_mayer
    env->fpscr[REG] = (env->fpscr[REG] & 0x9);
145 fb0eaffc bellard
    RETURN();
146 fb0eaffc bellard
}
147 fb0eaffc bellard
#else
148 76a66253 j_mayer
void OPPROTO glue(op_store_T0_fpscr_fpscr, REG) (void)
149 fb0eaffc bellard
{
150 36081602 j_mayer
    env->fpscr[REG] = T0;
151 fb0eaffc bellard
    RETURN();
152 fb0eaffc bellard
}
153 fb0eaffc bellard
154 76a66253 j_mayer
void OPPROTO glue(op_clear_fpscr_fpscr, REG) (void)
155 fb0eaffc bellard
{
156 36081602 j_mayer
    env->fpscr[REG] = 0x0;
157 fb0eaffc bellard
    RETURN();
158 fb0eaffc bellard
}
159 fb0eaffc bellard
#endif
160 fb0eaffc bellard
161 28b6751f bellard
#endif /* REG <= 7 */
162 28b6751f bellard
163 fb0eaffc bellard
/* floating point registers moves */
164 76a66253 j_mayer
void OPPROTO glue(op_load_fpr_FT0_fpr, REG) (void)
165 28b6751f bellard
{
166 28b6751f bellard
    FT0 = env->fpr[REG];
167 fb0eaffc bellard
    RETURN();
168 28b6751f bellard
}
169 28b6751f bellard
170 76a66253 j_mayer
void OPPROTO glue(op_store_FT0_fpr_fpr, REG) (void)
171 28b6751f bellard
{
172 28b6751f bellard
    env->fpr[REG] = FT0;
173 fb0eaffc bellard
    RETURN();
174 fb0eaffc bellard
}
175 fb0eaffc bellard
176 76a66253 j_mayer
void OPPROTO glue(op_load_fpr_FT1_fpr, REG) (void)
177 fb0eaffc bellard
{
178 fb0eaffc bellard
    FT1 = env->fpr[REG];
179 fb0eaffc bellard
    RETURN();
180 fb0eaffc bellard
}
181 fb0eaffc bellard
182 76a66253 j_mayer
void OPPROTO glue(op_store_FT1_fpr_fpr, REG) (void)
183 fb0eaffc bellard
{
184 fb0eaffc bellard
    env->fpr[REG] = FT1;
185 fb0eaffc bellard
    RETURN();
186 fb0eaffc bellard
}
187 fb0eaffc bellard
188 76a66253 j_mayer
void OPPROTO glue(op_load_fpr_FT2_fpr, REG) (void)
189 fb0eaffc bellard
{
190 fb0eaffc bellard
    FT2 = env->fpr[REG];
191 fb0eaffc bellard
    RETURN();
192 fb0eaffc bellard
}
193 fb0eaffc bellard
194 76a66253 j_mayer
#if 0 // unused
195 76a66253 j_mayer
void OPPROTO glue(op_store_FT2_fpr_fpr, REG) (void)
196 fb0eaffc bellard
{
197 fb0eaffc bellard
    env->fpr[REG] = FT2;
198 fb0eaffc bellard
    RETURN();
199 28b6751f bellard
}
200 9a64fbe4 bellard
#endif
201 9a64fbe4 bellard
202 28b6751f bellard
#undef REG