X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;ds=sidebyside;f=target-ppc%2Ftranslate.c;h=f6df06b5bfdf82101874d48518f023ad9dcee9d7;hb=297d8e6227ff1186857b17b1890fc94c637733da;hp=34f92bd16d55d166617377f2de8bd45c490562ac;hpb=9a64fbe4d89751524be0954f87dd514083295e99;p=qemu diff --git a/target-ppc/translate.c b/target-ppc/translate.c index 34f92bd..f6df06b 100644 --- a/target-ppc/translate.c +++ b/target-ppc/translate.c @@ -1229,10 +1229,10 @@ GEN_HANDLER(lswi, 0x1F, 0x15, 0x12, 0x00000001, PPC_INTEGER) if (nb == 0) nb = 32; nr = nb / 4; - if (((start + nr) > 32 && start <= ra && (start + nr - 32) >= ra) || - ((start + nr) <= 32 && start <= ra && (start + nr) >= ra)) { + if (((start + nr) > 32 && start <= ra && (start + nr - 32) > ra) || + ((start + nr) <= 32 && start <= ra && (start + nr) > ra)) { RET_EXCP(EXCP_PROGRAM, EXCP_INVAL | EXCP_INVAL_LSWX); - } + } if (ra == 0) { gen_op_set_T0(0); } else { @@ -1302,8 +1302,14 @@ GEN_HANDLER(isync, 0x13, 0x16, 0xFF, 0x03FF0801, PPC_MEM) /* lwarx */ #if defined(CONFIG_USER_ONLY) +#define op_lwarx() gen_op_lwarx_raw() #define op_stwcx() gen_op_stwcx_raw() #else +#define op_lwarx() (*gen_op_lwarx[ctx->mem_idx])() +static GenOpFunc *gen_op_lwarx[] = { + &gen_op_lwarx_user, + &gen_op_lwarx_kernel, +}; #define op_stwcx() (*gen_op_stwcx[ctx->mem_idx])() static GenOpFunc *gen_op_stwcx[] = { &gen_op_stwcx_user, @@ -1320,9 +1326,8 @@ GEN_HANDLER(lwarx, 0x1F, 0x14, 0xFF, 0x00000001, PPC_RES) gen_op_load_gpr_T1(rB(ctx->opcode)); gen_op_add(); } - op_ldst(lwz); + op_lwarx(); gen_op_store_T1_gpr(rD(ctx->opcode)); - gen_op_set_reservation(); } /* stwcx. */ @@ -2992,7 +2997,7 @@ CPUPPCState *cpu_ppc_init(void) if (create_ppc_proc(ppc_opcodes, env->spr[PVR]) < 0) return NULL; init_spr_rights(env->spr[PVR]); - tlb_flush(env); + tlb_flush(env, 1); #if defined (DO_SINGLE_STEP) /* Single step trace mode */ msr_se = 1; @@ -3169,9 +3174,11 @@ int gen_intermediate_code_internal (CPUState *env, TranslationBlock *tb, while (lj <= j) gen_opc_instr_start[lj++] = 0; tb->size = 0; +#if 0 if (loglevel > 0) { page_dump(logfile); } +#endif } else { tb->size = (uint32_t)ctx.nip - pc_start; }