Commit 0f3955e2d28d71bc18935913e0bc2c5d134b1568

Authored by aurel32
1 parent 4bf5801d

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
target-ppc/helper.h
... ... @@ -139,4 +139,11 @@ DEF_HELPER_2(efdcmplt, i32, i64, i64)
139 139 DEF_HELPER_2(efdcmpgt, i32, i64, i64)
140 140 DEF_HELPER_2(efdcmpeq, i32, i64, i64)
141 141  
  142 +#if !defined(CONFIG_USER_ONLY)
  143 +DEF_HELPER_1(load_6xx_tlbd, void, tl)
  144 +DEF_HELPER_1(load_6xx_tlbi, void, tl)
  145 +DEF_HELPER_1(load_74xx_tlbd, void, tl)
  146 +DEF_HELPER_1(load_74xx_tlbi, void, tl)
  147 +#endif
  148 +
142 149 #include "def-helper.h"
... ...
target-ppc/op.c
... ... @@ -378,34 +378,6 @@ void OPPROTO op_slbie_64 (void)
378 378 #endif
379 379 #endif
380 380  
381   -#if !defined(CONFIG_USER_ONLY)
382   -/* PowerPC 602/603/755 software TLB load instructions */
383   -void OPPROTO op_6xx_tlbld (void)
384   -{
385   - do_load_6xx_tlb(0);
386   - RETURN();
387   -}
388   -
389   -void OPPROTO op_6xx_tlbli (void)
390   -{
391   - do_load_6xx_tlb(1);
392   - RETURN();
393   -}
394   -
395   -/* PowerPC 74xx software TLB load instructions */
396   -void OPPROTO op_74xx_tlbld (void)
397   -{
398   - do_load_74xx_tlb(0);
399   - RETURN();
400   -}
401   -
402   -void OPPROTO op_74xx_tlbli (void)
403   -{
404   - do_load_74xx_tlb(1);
405   - RETURN();
406   -}
407   -#endif
408   -
409 381 /* 601 specific */
410 382 void OPPROTO op_load_601_rtcl (void)
411 383 {
... ...
target-ppc/op_helper.c
... ... @@ -2460,7 +2460,7 @@ void tlb_fill (target_ulong addr, int is_write, int mmu_idx, void *retaddr)
2460 2460  
2461 2461 /* Software driven TLBs management */
2462 2462 /* PowerPC 602/603 software TLB load instructions helpers */
2463   -void do_load_6xx_tlb (int is_code)
  2463 +static void helper_load_6xx_tlb (target_ulong new_EPN, int is_code)
2464 2464 {
2465 2465 target_ulong RPN, CMP, EPN;
2466 2466 int way;
... ... @@ -2482,11 +2482,22 @@ void do_load_6xx_tlb (int is_code)
2482 2482 }
2483 2483 #endif
2484 2484 /* Store this TLB */
2485   - ppc6xx_tlb_store(env, (uint32_t)(T0 & TARGET_PAGE_MASK),
  2485 + ppc6xx_tlb_store(env, (uint32_t)(new_EPN & TARGET_PAGE_MASK),
2486 2486 way, is_code, CMP, RPN);
2487 2487 }
2488 2488  
2489   -void do_load_74xx_tlb (int is_code)
  2489 +void helper_load_6xx_tlbd (target_ulong EPN)
  2490 +{
  2491 + helper_load_6xx_tlb(EPN, 0);
  2492 +}
  2493 +
  2494 +void helper_load_6xx_tlbi (target_ulong EPN)
  2495 +{
  2496 + helper_load_6xx_tlb(EPN, 1);
  2497 +}
  2498 +
  2499 +/* PowerPC 74xx software TLB load instructions helpers */
  2500 +static void helper_load_74xx_tlb (target_ulong new_EPN, int is_code)
2490 2501 {
2491 2502 target_ulong RPN, CMP, EPN;
2492 2503 int way;
... ... @@ -2503,10 +2514,20 @@ void do_load_74xx_tlb (int is_code)
2503 2514 }
2504 2515 #endif
2505 2516 /* Store this TLB */
2506   - ppc6xx_tlb_store(env, (uint32_t)(T0 & TARGET_PAGE_MASK),
  2517 + ppc6xx_tlb_store(env, (uint32_t)(new_EPN & TARGET_PAGE_MASK),
2507 2518 way, is_code, CMP, RPN);
2508 2519 }
2509 2520  
  2521 +void helper_load_74xx_tlbd (target_ulong EPN)
  2522 +{
  2523 + helper_load_74xx_tlb(EPN, 0);
  2524 +}
  2525 +
  2526 +void helper_load_74xx_tlbi (target_ulong EPN)
  2527 +{
  2528 + helper_load_74xx_tlb(EPN, 1);
  2529 +}
  2530 +
2510 2531 static always_inline target_ulong booke_tlb_to_page_size (int size)
2511 2532 {
2512 2533 return 1024 << (2 * size);
... ...
target-ppc/op_helper.h
... ... @@ -67,8 +67,6 @@ void do_rfi (void);
67 67 void do_rfid (void);
68 68 void do_hrfid (void);
69 69 #endif
70   -void do_load_6xx_tlb (int is_code);
71   -void do_load_74xx_tlb (int is_code);
72 70 #endif
73 71  
74 72 /* POWER / PowerPC 601 specific helpers */
... ...
target-ppc/translate.c
... ... @@ -4965,8 +4965,7 @@ GEN_HANDLER2(tlbld_6xx, &quot;tlbld&quot;, 0x1F, 0x12, 0x1E, 0x03FF0001, PPC_6xx_TLB)
4965 4965 GEN_EXCP_PRIVOPC(ctx);
4966 4966 return;
4967 4967 }
4968   - tcg_gen_mov_tl(cpu_T[0], cpu_gpr[rB(ctx->opcode)]);
4969   - gen_op_6xx_tlbld();
  4968 + gen_helper_load_6xx_tlbd(cpu_gpr[rB(ctx->opcode)]);
4970 4969 #endif
4971 4970 }
4972 4971  
... ... @@ -4980,8 +4979,7 @@ GEN_HANDLER2(tlbli_6xx, &quot;tlbli&quot;, 0x1F, 0x12, 0x1F, 0x03FF0001, PPC_6xx_TLB)
4980 4979 GEN_EXCP_PRIVOPC(ctx);
4981 4980 return;
4982 4981 }
4983   - tcg_gen_mov_tl(cpu_T[0], cpu_gpr[rB(ctx->opcode)]);
4984   - gen_op_6xx_tlbli();
  4982 + gen_helper_load_6xx_tlbi(cpu_gpr[rB(ctx->opcode)]);
4985 4983 #endif
4986 4984 }
4987 4985  
... ... @@ -4996,8 +4994,7 @@ GEN_HANDLER2(tlbld_74xx, &quot;tlbld&quot;, 0x1F, 0x12, 0x1E, 0x03FF0001, PPC_74xx_TLB)
4996 4994 GEN_EXCP_PRIVOPC(ctx);
4997 4995 return;
4998 4996 }
4999   - tcg_gen_mov_tl(cpu_T[0], cpu_gpr[rB(ctx->opcode)]);
5000   - gen_op_74xx_tlbld();
  4997 + gen_helper_load_74xx_tlbd(cpu_gpr[rB(ctx->opcode)]);
5001 4998 #endif
5002 4999 }
5003 5000  
... ... @@ -5011,8 +5008,7 @@ GEN_HANDLER2(tlbli_74xx, &quot;tlbli&quot;, 0x1F, 0x12, 0x1F, 0x03FF0001, PPC_74xx_TLB)
5011 5008 GEN_EXCP_PRIVOPC(ctx);
5012 5009 return;
5013 5010 }
5014   - tcg_gen_mov_tl(cpu_T[0], cpu_gpr[rB(ctx->opcode)]);
5015   - gen_op_74xx_tlbli();
  5011 + gen_helper_load_74xx_tlbi(cpu_gpr[rB(ctx->opcode)]);
5016 5012 #endif
5017 5013 }
5018 5014  
... ...