target-ppc: convert software TLB instructions to TCG

Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5819 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
aurel32 2008-11-30 16:22:56 +00:00
parent 4bf5801db4
commit 0f3955e2d2
5 changed files with 36 additions and 42 deletions

View File

@ -139,4 +139,11 @@ DEF_HELPER_2(efdcmplt, i32, i64, i64)
DEF_HELPER_2(efdcmpgt, i32, i64, i64) DEF_HELPER_2(efdcmpgt, i32, i64, i64)
DEF_HELPER_2(efdcmpeq, i32, i64, i64) DEF_HELPER_2(efdcmpeq, i32, i64, i64)
#if !defined(CONFIG_USER_ONLY)
DEF_HELPER_1(load_6xx_tlbd, void, tl)
DEF_HELPER_1(load_6xx_tlbi, void, tl)
DEF_HELPER_1(load_74xx_tlbd, void, tl)
DEF_HELPER_1(load_74xx_tlbi, void, tl)
#endif
#include "def-helper.h" #include "def-helper.h"

View File

@ -378,34 +378,6 @@ void OPPROTO op_slbie_64 (void)
#endif #endif
#endif #endif
#if !defined(CONFIG_USER_ONLY)
/* PowerPC 602/603/755 software TLB load instructions */
void OPPROTO op_6xx_tlbld (void)
{
do_load_6xx_tlb(0);
RETURN();
}
void OPPROTO op_6xx_tlbli (void)
{
do_load_6xx_tlb(1);
RETURN();
}
/* PowerPC 74xx software TLB load instructions */
void OPPROTO op_74xx_tlbld (void)
{
do_load_74xx_tlb(0);
RETURN();
}
void OPPROTO op_74xx_tlbli (void)
{
do_load_74xx_tlb(1);
RETURN();
}
#endif
/* 601 specific */ /* 601 specific */
void OPPROTO op_load_601_rtcl (void) void OPPROTO op_load_601_rtcl (void)
{ {

View File

@ -2460,7 +2460,7 @@ void tlb_fill (target_ulong addr, int is_write, int mmu_idx, void *retaddr)
/* Software driven TLBs management */ /* Software driven TLBs management */
/* PowerPC 602/603 software TLB load instructions helpers */ /* PowerPC 602/603 software TLB load instructions helpers */
void do_load_6xx_tlb (int is_code) static void helper_load_6xx_tlb (target_ulong new_EPN, int is_code)
{ {
target_ulong RPN, CMP, EPN; target_ulong RPN, CMP, EPN;
int way; int way;
@ -2482,11 +2482,22 @@ void do_load_6xx_tlb (int is_code)
} }
#endif #endif
/* Store this TLB */ /* Store this TLB */
ppc6xx_tlb_store(env, (uint32_t)(T0 & TARGET_PAGE_MASK), ppc6xx_tlb_store(env, (uint32_t)(new_EPN & TARGET_PAGE_MASK),
way, is_code, CMP, RPN); way, is_code, CMP, RPN);
} }
void do_load_74xx_tlb (int is_code) void helper_load_6xx_tlbd (target_ulong EPN)
{
helper_load_6xx_tlb(EPN, 0);
}
void helper_load_6xx_tlbi (target_ulong EPN)
{
helper_load_6xx_tlb(EPN, 1);
}
/* PowerPC 74xx software TLB load instructions helpers */
static void helper_load_74xx_tlb (target_ulong new_EPN, int is_code)
{ {
target_ulong RPN, CMP, EPN; target_ulong RPN, CMP, EPN;
int way; int way;
@ -2503,10 +2514,20 @@ void do_load_74xx_tlb (int is_code)
} }
#endif #endif
/* Store this TLB */ /* Store this TLB */
ppc6xx_tlb_store(env, (uint32_t)(T0 & TARGET_PAGE_MASK), ppc6xx_tlb_store(env, (uint32_t)(new_EPN & TARGET_PAGE_MASK),
way, is_code, CMP, RPN); way, is_code, CMP, RPN);
} }
void helper_load_74xx_tlbd (target_ulong EPN)
{
helper_load_74xx_tlb(EPN, 0);
}
void helper_load_74xx_tlbi (target_ulong EPN)
{
helper_load_74xx_tlb(EPN, 1);
}
static always_inline target_ulong booke_tlb_to_page_size (int size) static always_inline target_ulong booke_tlb_to_page_size (int size)
{ {
return 1024 << (2 * size); return 1024 << (2 * size);

View File

@ -67,8 +67,6 @@ void do_rfi (void);
void do_rfid (void); void do_rfid (void);
void do_hrfid (void); void do_hrfid (void);
#endif #endif
void do_load_6xx_tlb (int is_code);
void do_load_74xx_tlb (int is_code);
#endif #endif
/* POWER / PowerPC 601 specific helpers */ /* POWER / PowerPC 601 specific helpers */

View File

@ -4965,8 +4965,7 @@ GEN_HANDLER2(tlbld_6xx, "tlbld", 0x1F, 0x12, 0x1E, 0x03FF0001, PPC_6xx_TLB)
GEN_EXCP_PRIVOPC(ctx); GEN_EXCP_PRIVOPC(ctx);
return; return;
} }
tcg_gen_mov_tl(cpu_T[0], cpu_gpr[rB(ctx->opcode)]); gen_helper_load_6xx_tlbd(cpu_gpr[rB(ctx->opcode)]);
gen_op_6xx_tlbld();
#endif #endif
} }
@ -4980,8 +4979,7 @@ GEN_HANDLER2(tlbli_6xx, "tlbli", 0x1F, 0x12, 0x1F, 0x03FF0001, PPC_6xx_TLB)
GEN_EXCP_PRIVOPC(ctx); GEN_EXCP_PRIVOPC(ctx);
return; return;
} }
tcg_gen_mov_tl(cpu_T[0], cpu_gpr[rB(ctx->opcode)]); gen_helper_load_6xx_tlbi(cpu_gpr[rB(ctx->opcode)]);
gen_op_6xx_tlbli();
#endif #endif
} }
@ -4996,8 +4994,7 @@ GEN_HANDLER2(tlbld_74xx, "tlbld", 0x1F, 0x12, 0x1E, 0x03FF0001, PPC_74xx_TLB)
GEN_EXCP_PRIVOPC(ctx); GEN_EXCP_PRIVOPC(ctx);
return; return;
} }
tcg_gen_mov_tl(cpu_T[0], cpu_gpr[rB(ctx->opcode)]); gen_helper_load_74xx_tlbd(cpu_gpr[rB(ctx->opcode)]);
gen_op_74xx_tlbld();
#endif #endif
} }
@ -5011,8 +5008,7 @@ GEN_HANDLER2(tlbli_74xx, "tlbli", 0x1F, 0x12, 0x1F, 0x03FF0001, PPC_74xx_TLB)
GEN_EXCP_PRIVOPC(ctx); GEN_EXCP_PRIVOPC(ctx);
return; return;
} }
tcg_gen_mov_tl(cpu_T[0], cpu_gpr[rB(ctx->opcode)]); gen_helper_load_74xx_tlbi(cpu_gpr[rB(ctx->opcode)]);
gen_op_74xx_tlbli();
#endif #endif
} }