summaryrefslogtreecommitdiff
path: root/target-ppc/exec.h
diff options
context:
space:
mode:
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>2004-01-04 22:58:38 +0000
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>2004-01-04 22:58:38 +0000
commit9a64fbe4d89751524be0954f87dd514083295e99 (patch)
tree090826caf337daefaf5d8c06d2d97c85be76d3f4 /target-ppc/exec.h
parentefe160c502bc9ebb4d9e6fcb94cea708af73a2a1 (diff)
downloadqemu-9a64fbe4d89751524be0954f87dd514083295e99.tar.gz
PowerPC system emulation (Jocelyn Mayer) - modified patch to use new TLB api
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@528 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'target-ppc/exec.h')
-rw-r--r--target-ppc/exec.h181
1 files changed, 87 insertions, 94 deletions
diff --git a/target-ppc/exec.h b/target-ppc/exec.h
index da1ebb765a..8a255ec6f1 100644
--- a/target-ppc/exec.h
+++ b/target-ppc/exec.h
@@ -41,126 +41,119 @@ register uint32_t T2 asm(AREG3);
#include "cpu.h"
#include "exec-all.h"
-static inline uint8_t ld8 (uint32_t EA)
+static inline uint32_t rotl (uint32_t i, int n)
{
- return *((uint8_t *)EA);
+ return ((i << n) | (i >> (32 - n)));
}
-static inline uint16_t ld16 (uint32_t EA)
-{
- return __be16_to_cpu(*((uint16_t *)EA));
-}
+/* XXX: move that to a generic header */
+#if !defined(CONFIG_USER_ONLY)
-static inline uint16_t ld16r (uint32_t EA)
-{
- return __le16_to_cpu(*((uint16_t *)EA));
-}
+#define ldul_user ldl_user
+#define ldul_kernel ldl_kernel
-static inline uint32_t ld32 (uint32_t EA)
-{
- return __be32_to_cpu(*((uint32_t *)EA));
-}
-
-static inline uint32_t ld32r (uint32_t EA)
-{
- return __le32_to_cpu(*((uint32_t *)EA));
-}
+#define ACCESS_TYPE 0
+#define MEMSUFFIX _kernel
+#define DATA_SIZE 1
+#include "softmmu_header.h"
-static inline uint64_t ld64 (uint32_t EA)
-{
- return __be64_to_cpu(*((uint64_t *)EA));
-}
+#define DATA_SIZE 2
+#include "softmmu_header.h"
-static inline uint64_t ld64r (uint32_t EA)
-{
- return __le64_to_cpu(*((uint64_t *)EA));
-}
+#define DATA_SIZE 4
+#include "softmmu_header.h"
-static inline void st8 (uint32_t EA, uint8_t data)
-{
- *((uint8_t *)EA) = data;
-}
+#define DATA_SIZE 8
+#include "softmmu_header.h"
+#undef ACCESS_TYPE
+#undef MEMSUFFIX
-static inline void st16 (uint32_t EA, uint16_t data)
-{
- *((uint16_t *)EA) = __cpu_to_be16(data);
-}
+#define ACCESS_TYPE 1
+#define MEMSUFFIX _user
+#define DATA_SIZE 1
+#include "softmmu_header.h"
-static inline void st16r (uint32_t EA, uint16_t data)
-{
- *((uint16_t *)EA) = __cpu_to_le16(data);
-}
+#define DATA_SIZE 2
+#include "softmmu_header.h"
-static inline void st32 (uint32_t EA, uint32_t data)
-{
- *((uint32_t *)EA) = __cpu_to_be32(data);
-}
+#define DATA_SIZE 4
+#include "softmmu_header.h"
-static inline void st32r (uint32_t EA, uint32_t data)
-{
- *((uint32_t *)EA) = __cpu_to_le32(data);
-}
+#define DATA_SIZE 8
+#include "softmmu_header.h"
+#undef ACCESS_TYPE
+#undef MEMSUFFIX
-static inline void st64 (uint32_t EA, uint64_t data)
-{
- *((uint64_t *)EA) = __cpu_to_be64(data);
-}
+/* these access are slower, they must be as rare as possible */
+#define ACCESS_TYPE 2
+#define MEMSUFFIX _data
+#define DATA_SIZE 1
+#include "softmmu_header.h"
-static inline void st64r (uint32_t EA, uint64_t data)
-{
- *((uint64_t *)EA) = __cpu_to_le64(data);
-}
+#define DATA_SIZE 2
+#include "softmmu_header.h"
-static inline void set_CRn(int n, uint8_t value)
-{
- env->crf[n] = value;
-}
+#define DATA_SIZE 4
+#include "softmmu_header.h"
-static inline void set_carry (void)
-{
- xer_ca = 1;
-}
+#define DATA_SIZE 8
+#include "softmmu_header.h"
+#undef ACCESS_TYPE
+#undef MEMSUFFIX
-static inline void reset_carry (void)
-{
- xer_ca = 0;
-}
+#define ldub(p) ldub_data(p)
+#define ldsb(p) ldsb_data(p)
+#define lduw(p) lduw_data(p)
+#define ldsw(p) ldsw_data(p)
+#define ldl(p) ldl_data(p)
+#define ldq(p) ldq_data(p)
-static inline void set_overflow (void)
-{
- xer_so = 1;
- xer_ov = 1;
-}
+#define stb(p, v) stb_data(p, v)
+#define stw(p, v) stw_data(p, v)
+#define stl(p, v) stl_data(p, v)
+#define stq(p, v) stq_data(p, v)
-static inline void reset_overflow (void)
-{
- xer_ov = 0;
-}
+#endif /* !defined(CONFIG_USER_ONLY) */
-static inline uint32_t rotl (uint32_t i, int n)
-{
- return ((i << n) | (i >> (32 - n)));
-}
+int check_exception_state (CPUState *env);
-void raise_exception (int exception_index);
-void raise_exception_err (int exception_index, int error_code);
+void do_queue_exception_err (uint32_t exception, int error_code);
+void do_queue_exception (uint32_t exception);
+void do_process_exceptions (void);
+void do_check_exception_state (void);
-uint32_t do_load_cr (void);
-void do_store_cr (uint32_t crn, uint32_t value);
-uint32_t do_load_xer (void);
-void do_store_xer (uint32_t value);
-uint32_t do_load_msr (void);
-void do_store_msr (uint32_t msr_value);
+void do_load_cr (void);
+void do_store_cr (uint32_t mask);
+void do_load_xer (void);
+void do_store_xer (void);
+void do_load_msr (void);
+void do_store_msr (void);
void do_load_fpscr (void);
void do_store_fpscr (uint32_t mask);
-int32_t do_sraw(int32_t Ta, uint32_t Tb);
-void do_lmw (int reg, uint32_t src);
-void do_stmw (int reg, uint32_t dest);
-void do_lsw (uint32_t reg, int count, uint32_t src);
-void do_stsw (uint32_t reg, int count, uint32_t dest);
+void do_sraw(void);
+
+void do_fctiw (void);
+void do_fctiwz (void);
+void do_fsqrt (void);
+void do_fsqrts (void);
+void do_fres (void);
+void do_fsqrte (void);
+void do_fsel (void);
+void do_fcmpu (void);
+void do_fcmpo (void);
+void do_fabs (void);
+void do_fnabs (void);
-void do_dcbz (void);
void do_icbi (void);
+void do_tlbia (void);
+void do_tlbie (void);
+
+void dump_rfi (void);
+void dump_store_sr (int srnum);
+void dump_store_ibat (int ul, int nr);
+void dump_store_dbat (int ul, int nr);
+void dump_store_tb (int ul);
+void dump_update_tb(uint32_t param);
#endif /* !defined (__PPC_H__) */