mirror of https://gitee.com/openkylin/qemu.git
PowerPC merge (Jocelyn Mayer)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@566 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
3f5dcc340c
commit
985a19d6d1
|
@ -453,13 +453,6 @@ PPC_OP(reset_scrfx)
|
|||
RETURN();
|
||||
}
|
||||
|
||||
/* Set reservation */
|
||||
PPC_OP(set_reservation)
|
||||
{
|
||||
regs->reserve = T0 & ~0x03;
|
||||
RETURN();
|
||||
}
|
||||
|
||||
/* crf operations */
|
||||
PPC_OP(getbit_T0)
|
||||
{
|
||||
|
|
|
@ -349,9 +349,13 @@ void do_fnabs (void)
|
|||
}
|
||||
|
||||
/* Instruction cache invalidation helper */
|
||||
#define ICACHE_LINE_SIZE 32
|
||||
|
||||
void do_icbi (void)
|
||||
{
|
||||
// tb_invalidate_page(T0);
|
||||
/* Invalidate one cache line */
|
||||
T0 &= ~(ICACHE_LINE_SIZE - 1);
|
||||
tb_invalidate_page_range(T0, T0 + ICACHE_LINE_SIZE);
|
||||
}
|
||||
|
||||
/* TLB invalidation helpers */
|
||||
|
|
|
@ -134,6 +134,19 @@ PPC_OP(glue(glue(l, name), MEMSUFFIX)) \
|
|||
PPC_LDF_OP(fd, ldfq);
|
||||
PPC_LDF_OP(fs, ldfl);
|
||||
|
||||
/* Load and set reservation */
|
||||
PPC_OP(glue(lwarx, MEMSUFFIX))
|
||||
{
|
||||
if (T0 & 0x03) {
|
||||
do_queue_exception(EXCP_ALIGN);
|
||||
do_process_exceptions();
|
||||
} else {
|
||||
glue(ldl, MEMSUFFIX)((void *)T0);
|
||||
regs->reserve = T0 & ~0x03;
|
||||
}
|
||||
RETURN();
|
||||
}
|
||||
|
||||
/* Store with reservation */
|
||||
PPC_OP(glue(stwcx, MEMSUFFIX))
|
||||
{
|
||||
|
|
|
@ -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. */
|
||||
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue