PPC: Add dcbtls emulation
The dcbtls instruction is able to lock data inside the L1 cache. Unfortunately we don't emulate any caches, so we have to tell the guest that its locking attempt failed. However, by implementing the instruction we at least don't give the guest a program exception which it definitely does not expect. Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
ea71258da4
commit
4d09d5291d
@ -4481,6 +4481,17 @@ static void gen_dcbtst(DisasContext *ctx)
|
||||
*/
|
||||
}
|
||||
|
||||
/* dcbtls */
|
||||
static void gen_dcbtls(DisasContext *ctx)
|
||||
{
|
||||
/* Always fails locking the cache */
|
||||
TCGv t0 = tcg_temp_new();
|
||||
gen_load_spr(t0, SPR_Exxx_L1CSR0);
|
||||
tcg_gen_ori_tl(t0, t0, L1CSR0_CUL);
|
||||
gen_store_spr(SPR_Exxx_L1CSR0, t0);
|
||||
tcg_temp_free(t0);
|
||||
}
|
||||
|
||||
/* dcbz */
|
||||
static void gen_dcbz(DisasContext *ctx)
|
||||
{
|
||||
@ -10215,6 +10226,7 @@ GEN_HANDLER(dcbi, 0x1F, 0x16, 0x0E, 0x03E00001, PPC_CACHE),
|
||||
GEN_HANDLER(dcbst, 0x1F, 0x16, 0x01, 0x03E00001, PPC_CACHE),
|
||||
GEN_HANDLER(dcbt, 0x1F, 0x16, 0x08, 0x00000001, PPC_CACHE),
|
||||
GEN_HANDLER(dcbtst, 0x1F, 0x16, 0x07, 0x00000001, PPC_CACHE),
|
||||
GEN_HANDLER_E(dcbtls, 0x1F, 0x06, 0x05, 0x02000001, PPC_BOOKE, PPC2_BOOKE206),
|
||||
GEN_HANDLER(dcbz, 0x1F, 0x16, 0x1F, 0x03C00001, PPC_CACHE_DCBZ),
|
||||
GEN_HANDLER(dst, 0x1F, 0x16, 0x0A, 0x01800001, PPC_ALTIVEC),
|
||||
GEN_HANDLER(dstst, 0x1F, 0x16, 0x0B, 0x02000001, PPC_ALTIVEC),
|
||||
|
Loading…
Reference in New Issue
Block a user