Revision efdef95f
b/target-ppc/cpu.h | ||
---|---|---|
779 | 779 |
target_ulong ppc_load_slb (CPUPPCState *env, int slb_nr); |
780 | 780 |
target_ulong ppc_load_sr (CPUPPCState *env, int sr_nr); |
781 | 781 |
int ppc_store_slb (CPUPPCState *env, target_ulong rb, target_ulong rs); |
782 |
int ppc_load_slb_esid (CPUPPCState *env, target_ulong rb, target_ulong *rt); |
|
783 |
int ppc_load_slb_vsid (CPUPPCState *env, target_ulong rb, target_ulong *rt); |
|
782 | 784 |
#endif /* defined(TARGET_PPC64) */ |
783 | 785 |
void ppc_store_sr (CPUPPCState *env, int srnum, target_ulong value); |
784 | 786 |
#endif /* !defined(CONFIG_USER_ONLY) */ |
b/target-ppc/helper.c | ||
---|---|---|
774 | 774 |
|
775 | 775 |
return 0; |
776 | 776 |
} |
777 |
|
|
778 |
int ppc_load_slb_esid (CPUPPCState *env, target_ulong rb, target_ulong *rt) |
|
779 |
{ |
|
780 |
int slot = rb & 0xfff; |
|
781 |
ppc_slb_t *slb = &env->slb[slot]; |
|
782 |
|
|
783 |
if (slot >= env->slb_nr) { |
|
784 |
return -1; |
|
785 |
} |
|
786 |
|
|
787 |
*rt = slb->esid; |
|
788 |
return 0; |
|
789 |
} |
|
790 |
|
|
791 |
int ppc_load_slb_vsid (CPUPPCState *env, target_ulong rb, target_ulong *rt) |
|
792 |
{ |
|
793 |
int slot = rb & 0xfff; |
|
794 |
ppc_slb_t *slb = &env->slb[slot]; |
|
795 |
|
|
796 |
if (slot >= env->slb_nr) { |
|
797 |
return -1; |
|
798 |
} |
|
799 |
|
|
800 |
*rt = slb->vsid; |
|
801 |
return 0; |
|
802 |
} |
|
777 | 803 |
#endif /* defined(TARGET_PPC64) */ |
778 | 804 |
|
779 | 805 |
/* Perform segment based translation */ |
b/target-ppc/helper.h | ||
---|---|---|
341 | 341 |
DEF_HELPER_FLAGS_1(tlbie, TCG_CALL_CONST, void, tl) |
342 | 342 |
#if defined(TARGET_PPC64) |
343 | 343 |
DEF_HELPER_FLAGS_2(store_slb, TCG_CALL_CONST, void, tl, tl) |
344 |
DEF_HELPER_1(load_slb_esid, tl, tl) |
|
345 |
DEF_HELPER_1(load_slb_vsid, tl, tl) |
|
344 | 346 |
DEF_HELPER_FLAGS_0(slbia, TCG_CALL_CONST, void) |
345 | 347 |
DEF_HELPER_FLAGS_1(slbie, TCG_CALL_CONST, void, tl) |
346 | 348 |
#endif |
b/target-ppc/op_helper.c | ||
---|---|---|
3753 | 3753 |
} |
3754 | 3754 |
} |
3755 | 3755 |
|
3756 |
target_ulong helper_load_slb_esid (target_ulong rb) |
|
3757 |
{ |
|
3758 |
target_ulong rt; |
|
3759 |
|
|
3760 |
if (ppc_load_slb_esid(env, rb, &rt) < 0) { |
|
3761 |
helper_raise_exception_err(POWERPC_EXCP_PROGRAM, POWERPC_EXCP_INVAL); |
|
3762 |
} |
|
3763 |
return rt; |
|
3764 |
} |
|
3765 |
|
|
3766 |
target_ulong helper_load_slb_vsid (target_ulong rb) |
|
3767 |
{ |
|
3768 |
target_ulong rt; |
|
3769 |
|
|
3770 |
if (ppc_load_slb_vsid(env, rb, &rt) < 0) { |
|
3771 |
helper_raise_exception_err(POWERPC_EXCP_PROGRAM, POWERPC_EXCP_INVAL); |
|
3772 |
} |
|
3773 |
return rt; |
|
3774 |
} |
|
3775 |
|
|
3756 | 3776 |
void helper_slbia (void) |
3757 | 3777 |
{ |
3758 | 3778 |
ppc_slb_invalidate_all(env); |
b/target-ppc/translate.c | ||
---|---|---|
4227 | 4227 |
#endif |
4228 | 4228 |
} |
4229 | 4229 |
|
4230 |
static void gen_slbmfee(DisasContext *ctx) |
|
4231 |
{ |
|
4232 |
#if defined(CONFIG_USER_ONLY) |
|
4233 |
gen_inval_exception(ctx, POWERPC_EXCP_PRIV_REG); |
|
4234 |
#else |
|
4235 |
if (unlikely(!ctx->mem_idx)) { |
|
4236 |
gen_inval_exception(ctx, POWERPC_EXCP_PRIV_REG); |
|
4237 |
return; |
|
4238 |
} |
|
4239 |
gen_helper_load_slb_esid(cpu_gpr[rS(ctx->opcode)], |
|
4240 |
cpu_gpr[rB(ctx->opcode)]); |
|
4241 |
#endif |
|
4242 |
} |
|
4243 |
|
|
4244 |
static void gen_slbmfev(DisasContext *ctx) |
|
4245 |
{ |
|
4246 |
#if defined(CONFIG_USER_ONLY) |
|
4247 |
gen_inval_exception(ctx, POWERPC_EXCP_PRIV_REG); |
|
4248 |
#else |
|
4249 |
if (unlikely(!ctx->mem_idx)) { |
|
4250 |
gen_inval_exception(ctx, POWERPC_EXCP_PRIV_REG); |
|
4251 |
return; |
|
4252 |
} |
|
4253 |
gen_helper_load_slb_vsid(cpu_gpr[rS(ctx->opcode)], |
|
4254 |
cpu_gpr[rB(ctx->opcode)]); |
|
4255 |
#endif |
|
4256 |
} |
|
4230 | 4257 |
#endif /* defined(TARGET_PPC64) */ |
4231 | 4258 |
|
4232 | 4259 |
/*** Lookaside buffer management ***/ |
... | ... | |
8300 | 8327 |
GEN_HANDLER2(mtsr_64b, "mtsr", 0x1F, 0x12, 0x06, 0x0010F801, PPC_SEGMENT_64B), |
8301 | 8328 |
GEN_HANDLER2(mtsrin_64b, "mtsrin", 0x1F, 0x12, 0x07, 0x001F0001, |
8302 | 8329 |
PPC_SEGMENT_64B), |
8303 |
GEN_HANDLER2(slbmte, "slbmte", 0x1F, 0x12, 0x0C, 0x00000000, PPC_SEGMENT_64B), |
|
8330 |
GEN_HANDLER2(slbmte, "slbmte", 0x1F, 0x12, 0x0C, 0x001F0001, PPC_SEGMENT_64B), |
|
8331 |
GEN_HANDLER2(slbmfee, "slbmfee", 0x1F, 0x13, 0x1C, 0x001F0001, PPC_SEGMENT_64B), |
|
8332 |
GEN_HANDLER2(slbmfev, "slbmfev", 0x1F, 0x13, 0x1A, 0x001F0001, PPC_SEGMENT_64B), |
|
8304 | 8333 |
#endif |
8305 | 8334 |
GEN_HANDLER(tlbia, 0x1F, 0x12, 0x0B, 0x03FFFC01, PPC_MEM_TLBIA), |
8306 | 8335 |
GEN_HANDLER(tlbiel, 0x1F, 0x12, 0x08, 0x03FF0001, PPC_MEM_TLBIE), |
Also available in: Unified diff