]>
git.proxmox.com Git - qemu.git/blob - target-ppc/op.c
2 * PowerPC emulation micro-operations for qemu.
4 * Copyright (c) 2003-2007 Jocelyn Mayer
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 #include "host-utils.h"
26 #include "helper_regs.h"
27 #include "op_helper.h"
29 #if !defined(CONFIG_USER_ONLY)
30 void OPPROTO
op_load_sdr1 (void)
36 void OPPROTO
op_store_sdr1 (void)
38 do_store_sdr1(env
, T0
);
42 #if defined (TARGET_PPC64)
43 void OPPROTO
op_load_asr (void)
49 void OPPROTO
op_store_asr (void)
51 ppc_store_asr(env
, T0
);
58 void OPPROTO
op_load_spr (void)
60 T0
= env
->spr
[PARAM1
];
64 void OPPROTO
op_store_spr (void)
66 env
->spr
[PARAM1
] = T0
;
70 void OPPROTO
op_load_dump_spr (void)
72 T0
= ppc_load_dump_spr(PARAM1
);
76 void OPPROTO
op_store_dump_spr (void)
78 ppc_store_dump_spr(PARAM1
, T0
);
82 void OPPROTO
op_mask_spr (void)
84 env
->spr
[PARAM1
] &= ~T0
;
88 void OPPROTO
op_load_tbl (void)
90 T0
= cpu_ppc_load_tbl(env
);
94 void OPPROTO
op_load_tbu (void)
96 T0
= cpu_ppc_load_tbu(env
);
100 void OPPROTO
op_load_atbl (void)
102 T0
= cpu_ppc_load_atbl(env
);
106 void OPPROTO
op_load_atbu (void)
108 T0
= cpu_ppc_load_atbu(env
);
112 #if !defined(CONFIG_USER_ONLY)
113 void OPPROTO
op_store_tbl (void)
115 cpu_ppc_store_tbl(env
, T0
);
119 void OPPROTO
op_store_tbu (void)
121 cpu_ppc_store_tbu(env
, T0
);
125 void OPPROTO
op_store_atbl (void)
127 cpu_ppc_store_atbl(env
, T0
);
131 void OPPROTO
op_store_atbu (void)
133 cpu_ppc_store_atbu(env
, T0
);
137 void OPPROTO
op_load_decr (void)
139 T0
= cpu_ppc_load_decr(env
);
143 void OPPROTO
op_store_decr (void)
145 cpu_ppc_store_decr(env
, T0
);
149 void OPPROTO
op_load_ibat (void)
151 T0
= env
->IBAT
[PARAM1
][PARAM2
];
155 void OPPROTO
op_store_ibatu (void)
157 do_store_ibatu(env
, PARAM1
, T0
);
161 void OPPROTO
op_store_ibatl (void)
164 env
->IBAT
[1][PARAM1
] = T0
;
166 do_store_ibatl(env
, PARAM1
, T0
);
171 void OPPROTO
op_load_dbat (void)
173 T0
= env
->DBAT
[PARAM1
][PARAM2
];
177 void OPPROTO
op_store_dbatu (void)
179 do_store_dbatu(env
, PARAM1
, T0
);
183 void OPPROTO
op_store_dbatl (void)
186 env
->DBAT
[1][PARAM1
] = T0
;
188 do_store_dbatl(env
, PARAM1
, T0
);
192 #endif /* !defined(CONFIG_USER_ONLY) */
194 /* Return from interrupt */
195 #if !defined(CONFIG_USER_ONLY)
196 /* Exception vectors */
197 void OPPROTO
op_store_excp_prefix (void)
199 T0
&= env
->ivpr_mask
;
200 env
->excp_prefix
= T0
;
204 void OPPROTO
op_store_excp_vector (void)
206 T0
&= env
->ivor_mask
;
207 env
->excp_vectors
[PARAM1
] = T0
;
213 void OPPROTO
op_load_601_rtcl (void)
215 T0
= cpu_ppc601_load_rtcl(env
);
219 void OPPROTO
op_load_601_rtcu (void)
221 T0
= cpu_ppc601_load_rtcu(env
);
225 #if !defined(CONFIG_USER_ONLY)
226 void OPPROTO
op_store_601_rtcl (void)
228 cpu_ppc601_store_rtcl(env
, T0
);
232 void OPPROTO
op_store_601_rtcu (void)
234 cpu_ppc601_store_rtcu(env
, T0
);
238 void OPPROTO
op_store_hid0_601 (void)
244 void OPPROTO
op_load_601_bat (void)
246 T0
= env
->IBAT
[PARAM1
][PARAM2
];
250 void OPPROTO
op_store_601_batl (void)
252 do_store_ibatl_601(env
, PARAM1
, T0
);
256 void OPPROTO
op_store_601_batu (void)
258 do_store_ibatu_601(env
, PARAM1
, T0
);
261 #endif /* !defined(CONFIG_USER_ONLY) */
265 #if !defined(CONFIG_USER_ONLY)
266 void OPPROTO
op_store_pir (void)
268 env
->spr
[SPR_PIR
] = T0
& 0x0000000FUL
;
272 void OPPROTO
op_load_403_pb (void)
274 do_load_403_pb(PARAM1
);
278 void OPPROTO
op_store_403_pb (void)
280 do_store_403_pb(PARAM1
);
284 void OPPROTO
op_load_40x_pit (void)
286 T0
= load_40x_pit(env
);
290 void OPPROTO
op_store_40x_pit (void)
292 store_40x_pit(env
, T0
);
296 void OPPROTO
op_store_40x_dbcr0 (void)
298 store_40x_dbcr0(env
, T0
);
302 void OPPROTO
op_store_40x_sler (void)
304 store_40x_sler(env
, T0
);
308 void OPPROTO
op_store_booke_tcr (void)
310 store_booke_tcr(env
, T0
);
314 void OPPROTO
op_store_booke_tsr (void)
316 store_booke_tsr(env
, T0
);
319 #endif /* !defined(CONFIG_USER_ONLY) */