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 {
/* 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,
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. */
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;
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;
}