X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=target-ppc%2Fexec.h;h=d89698c63a2f4f67020317297a998e1463297290;hb=c7eb95e1180c524a9ef97e3fdfc8ad5d40b0cebb;hp=8a255ec6f1df36f6262442f1659d1ceecc966c5e;hpb=9a64fbe4d89751524be0954f87dd514083295e99;p=qemu diff --git a/target-ppc/exec.h b/target-ppc/exec.h index 8a255ec..d89698c 100644 --- a/target-ppc/exec.h +++ b/target-ppc/exec.h @@ -1,7 +1,7 @@ /* - * PPC emulation definitions for qemu. - * - * Copyright (c) 2003 Jocelyn Mayer + * PowerPC emulation definitions for qemu. + * + * Copyright (c) 2003-2007 Jocelyn Mayer * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -15,145 +15,44 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA */ #if !defined (__PPC_H__) #define __PPC_H__ -#include "dyngen-exec.h" - -register struct CPUPPCState *env asm(AREG0); -register uint32_t T0 asm(AREG1); -register uint32_t T1 asm(AREG2); -register uint32_t T2 asm(AREG3); - -#define PARAM(n) ((uint32_t)PARAM##n) -#define SPARAM(n) ((int32_t)PARAM##n) -#define FT0 (env->ft0) -#define FT1 (env->ft1) -#define FT2 (env->ft2) -#define FTS0 ((float)env->ft0) -#define FTS1 ((float)env->ft1) -#define FTS2 ((float)env->ft2) +#include "config.h" -#define RETURN() __asm__ __volatile__(""); +#include "dyngen-exec.h" #include "cpu.h" #include "exec-all.h" -static inline uint32_t rotl (uint32_t i, int n) -{ - return ((i << n) | (i >> (32 - n))); -} - -/* XXX: move that to a generic header */ -#if !defined(CONFIG_USER_ONLY) - -#define ldul_user ldl_user -#define ldul_kernel ldl_kernel - -#define ACCESS_TYPE 0 -#define MEMSUFFIX _kernel -#define DATA_SIZE 1 -#include "softmmu_header.h" - -#define DATA_SIZE 2 -#include "softmmu_header.h" - -#define DATA_SIZE 4 -#include "softmmu_header.h" - -#define DATA_SIZE 8 -#include "softmmu_header.h" -#undef ACCESS_TYPE -#undef MEMSUFFIX - -#define ACCESS_TYPE 1 -#define MEMSUFFIX _user -#define DATA_SIZE 1 -#include "softmmu_header.h" - -#define DATA_SIZE 2 -#include "softmmu_header.h" - -#define DATA_SIZE 4 -#include "softmmu_header.h" +/* Precise emulation is needed to correctly emulate exception flags */ +#define USE_PRECISE_EMULATION 1 -#define DATA_SIZE 8 -#include "softmmu_header.h" -#undef ACCESS_TYPE -#undef MEMSUFFIX - -/* 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" - -#define DATA_SIZE 2 -#include "softmmu_header.h" - -#define DATA_SIZE 4 -#include "softmmu_header.h" - -#define DATA_SIZE 8 -#include "softmmu_header.h" -#undef ACCESS_TYPE -#undef MEMSUFFIX - -#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) - -#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) +register struct CPUPPCState *env asm(AREG0); +#if !defined(CONFIG_USER_ONLY) +#include "softmmu_exec.h" #endif /* !defined(CONFIG_USER_ONLY) */ -int check_exception_state (CPUState *env); - -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); - -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); - -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); +static always_inline void env_to_regs (void) +{ +} -void do_icbi (void); -void do_tlbia (void); -void do_tlbie (void); +static always_inline void regs_to_env (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); +static always_inline int cpu_halted (CPUState *env) +{ + if (!env->halted) + return 0; + if (msr_ee && (env->interrupt_request & CPU_INTERRUPT_HARD)) { + env->halted = 0; + return 0; + } + return EXCP_HALTED; +} #endif /* !defined (__PPC_H__) */