Revision 90e189ec target-ppc/op_helper.c
b/target-ppc/op_helper.c | ||
---|---|---|
56 | 56 |
/* SPR accesses */ |
57 | 57 |
void helper_load_dump_spr (uint32_t sprn) |
58 | 58 |
{ |
59 |
qemu_log("Read SPR %d %03x => " ADDRX "\n",
|
|
60 |
sprn, sprn, env->spr[sprn]);
|
|
59 |
qemu_log("Read SPR %d %03x => " TARGET_FMT_lx "\n", sprn, sprn,
|
|
60 |
env->spr[sprn]); |
|
61 | 61 |
} |
62 | 62 |
|
63 | 63 |
void helper_store_dump_spr (uint32_t sprn) |
64 | 64 |
{ |
65 |
qemu_log("Write SPR %d %03x <= " ADDRX "\n",
|
|
66 |
sprn, sprn, env->spr[sprn]);
|
|
65 |
qemu_log("Write SPR %d %03x <= " TARGET_FMT_lx "\n", sprn, sprn,
|
|
66 |
env->spr[sprn]); |
|
67 | 67 |
} |
68 | 68 |
|
69 | 69 |
target_ulong helper_load_tbl (void) |
... | ... | |
160 | 160 |
env->hflags_nmsr &= ~(1 << MSR_LE); |
161 | 161 |
env->hflags_nmsr |= (1 << MSR_LE) & (((val >> 3) & 1) << MSR_LE); |
162 | 162 |
env->hflags |= env->hflags_nmsr; |
163 |
qemu_log("%s: set endianness to %c => " ADDRX "\n",
|
|
164 |
__func__, val & 0x8 ? 'l' : 'b', env->hflags);
|
|
163 |
qemu_log("%s: set endianness to %c => " TARGET_FMT_lx "\n", __func__,
|
|
164 |
val & 0x8 ? 'l' : 'b', env->hflags); |
|
165 | 165 |
} |
166 | 166 |
env->spr[SPR_HID0] = (uint32_t)val; |
167 | 167 |
} |
... | ... | |
3804 | 3804 |
EPN = env->spr[SPR_DMISS]; |
3805 | 3805 |
} |
3806 | 3806 |
way = (env->spr[SPR_SRR1] >> 17) & 1; |
3807 |
LOG_SWTLB("%s: EPN " ADDRX " " ADDRX " PTE0 " ADDRX
|
|
3808 |
" PTE1 " ADDRX " way %d\n",
|
|
3809 |
__func__, new_EPN, EPN, CMP, RPN, way);
|
|
3807 |
LOG_SWTLB("%s: EPN " TARGET_FMT_lx " " TARGET_FMT_lx " PTE0 " TARGET_FMT_lx
|
|
3808 |
" PTE1 " TARGET_FMT_lx " way %d\n", __func__, new_EPN, EPN, CMP,
|
|
3809 |
RPN, way); |
|
3810 | 3810 |
/* Store this TLB */ |
3811 | 3811 |
ppc6xx_tlb_store(env, (uint32_t)(new_EPN & TARGET_PAGE_MASK), |
3812 | 3812 |
way, is_code, CMP, RPN); |
... | ... | |
3832 | 3832 |
CMP = env->spr[SPR_PTEHI]; |
3833 | 3833 |
EPN = env->spr[SPR_TLBMISS] & ~0x3; |
3834 | 3834 |
way = env->spr[SPR_TLBMISS] & 0x3; |
3835 |
LOG_SWTLB("%s: EPN " ADDRX " " ADDRX " PTE0 " ADDRX
|
|
3836 |
" PTE1 " ADDRX " way %d\n",
|
|
3837 |
__func__, new_EPN, EPN, CMP, RPN, way);
|
|
3835 |
LOG_SWTLB("%s: EPN " TARGET_FMT_lx " " TARGET_FMT_lx " PTE0 " TARGET_FMT_lx
|
|
3836 |
" PTE1 " TARGET_FMT_lx " way %d\n", __func__, new_EPN, EPN, CMP,
|
|
3837 |
RPN, way); |
|
3838 | 3838 |
/* Store this TLB */ |
3839 | 3839 |
ppc6xx_tlb_store(env, (uint32_t)(new_EPN & TARGET_PAGE_MASK), |
3840 | 3840 |
way, is_code, CMP, RPN); |
... | ... | |
3958 | 3958 |
ppcemb_tlb_t *tlb; |
3959 | 3959 |
target_ulong page, end; |
3960 | 3960 |
|
3961 |
LOG_SWTLB("%s entry %d val " ADDRX "\n", __func__, (int)entry, val); |
|
3961 |
LOG_SWTLB("%s entry %d val " TARGET_FMT_lx "\n", __func__, (int)entry, |
|
3962 |
val); |
|
3962 | 3963 |
entry &= 0x3F; |
3963 | 3964 |
tlb = &env->tlb[entry].tlbe; |
3964 | 3965 |
/* Invalidate previous TLB (if it's valid) */ |
3965 | 3966 |
if (tlb->prot & PAGE_VALID) { |
3966 | 3967 |
end = tlb->EPN + tlb->size; |
3967 |
LOG_SWTLB("%s: invalidate old TLB %d start " ADDRX
|
|
3968 |
" end " ADDRX "\n", __func__, (int)entry, tlb->EPN, end);
|
|
3968 |
LOG_SWTLB("%s: invalidate old TLB %d start " TARGET_FMT_lx " end "
|
|
3969 |
TARGET_FMT_lx "\n", __func__, (int)entry, tlb->EPN, end);
|
|
3969 | 3970 |
for (page = tlb->EPN; page < end; page += TARGET_PAGE_SIZE) |
3970 | 3971 |
tlb_flush_page(env, page); |
3971 | 3972 |
} |
... | ... | |
3990 | 3991 |
} |
3991 | 3992 |
tlb->PID = env->spr[SPR_40x_PID]; /* PID */ |
3992 | 3993 |
tlb->attr = val & 0xFF; |
3993 |
LOG_SWTLB("%s: set up TLB %d RPN " PADDRX " EPN " ADDRX
|
|
3994 |
" size " ADDRX " prot %c%c%c%c PID %d\n", __func__,
|
|
3995 |
(int)entry, tlb->RPN, tlb->EPN, tlb->size,
|
|
3996 |
tlb->prot & PAGE_READ ? 'r' : '-',
|
|
3997 |
tlb->prot & PAGE_WRITE ? 'w' : '-',
|
|
3998 |
tlb->prot & PAGE_EXEC ? 'x' : '-',
|
|
3999 |
tlb->prot & PAGE_VALID ? 'v' : '-', (int)tlb->PID);
|
|
3994 |
LOG_SWTLB("%s: set up TLB %d RPN " TARGET_FMT_plx " EPN " TARGET_FMT_lx
|
|
3995 |
" size " TARGET_FMT_lx " prot %c%c%c%c PID %d\n", __func__,
|
|
3996 |
(int)entry, tlb->RPN, tlb->EPN, tlb->size, |
|
3997 |
tlb->prot & PAGE_READ ? 'r' : '-', |
|
3998 |
tlb->prot & PAGE_WRITE ? 'w' : '-', |
|
3999 |
tlb->prot & PAGE_EXEC ? 'x' : '-', |
|
4000 |
tlb->prot & PAGE_VALID ? 'v' : '-', (int)tlb->PID); |
|
4000 | 4001 |
/* Invalidate new TLB (if valid) */ |
4001 | 4002 |
if (tlb->prot & PAGE_VALID) { |
4002 | 4003 |
end = tlb->EPN + tlb->size; |
4003 |
LOG_SWTLB("%s: invalidate TLB %d start " ADDRX
|
|
4004 |
" end " ADDRX "\n", __func__, (int)entry, tlb->EPN, end);
|
|
4004 |
LOG_SWTLB("%s: invalidate TLB %d start " TARGET_FMT_lx " end "
|
|
4005 |
TARGET_FMT_lx "\n", __func__, (int)entry, tlb->EPN, end);
|
|
4005 | 4006 |
for (page = tlb->EPN; page < end; page += TARGET_PAGE_SIZE) |
4006 | 4007 |
tlb_flush_page(env, page); |
4007 | 4008 |
} |
... | ... | |
4011 | 4012 |
{ |
4012 | 4013 |
ppcemb_tlb_t *tlb; |
4013 | 4014 |
|
4014 |
LOG_SWTLB("%s entry %i val " ADDRX "\n", __func__, (int)entry, val); |
|
4015 |
LOG_SWTLB("%s entry %i val " TARGET_FMT_lx "\n", __func__, (int)entry, |
|
4016 |
val); |
|
4015 | 4017 |
entry &= 0x3F; |
4016 | 4018 |
tlb = &env->tlb[entry].tlbe; |
4017 | 4019 |
tlb->RPN = val & 0xFFFFFC00; |
... | ... | |
4020 | 4022 |
tlb->prot |= PAGE_EXEC; |
4021 | 4023 |
if (val & 0x100) |
4022 | 4024 |
tlb->prot |= PAGE_WRITE; |
4023 |
LOG_SWTLB("%s: set up TLB %d RPN " PADDRX " EPN " ADDRX
|
|
4024 |
" size " ADDRX " prot %c%c%c%c PID %d\n", __func__,
|
|
4025 |
(int)entry, tlb->RPN, tlb->EPN, tlb->size,
|
|
4026 |
tlb->prot & PAGE_READ ? 'r' : '-',
|
|
4027 |
tlb->prot & PAGE_WRITE ? 'w' : '-',
|
|
4028 |
tlb->prot & PAGE_EXEC ? 'x' : '-',
|
|
4029 |
tlb->prot & PAGE_VALID ? 'v' : '-', (int)tlb->PID);
|
|
4025 |
LOG_SWTLB("%s: set up TLB %d RPN " TARGET_FMT_plx " EPN " TARGET_FMT_lx
|
|
4026 |
" size " TARGET_FMT_lx " prot %c%c%c%c PID %d\n", __func__,
|
|
4027 |
(int)entry, tlb->RPN, tlb->EPN, tlb->size, |
|
4028 |
tlb->prot & PAGE_READ ? 'r' : '-', |
|
4029 |
tlb->prot & PAGE_WRITE ? 'w' : '-', |
|
4030 |
tlb->prot & PAGE_EXEC ? 'x' : '-', |
|
4031 |
tlb->prot & PAGE_VALID ? 'v' : '-', (int)tlb->PID); |
|
4030 | 4032 |
} |
4031 | 4033 |
|
4032 | 4034 |
target_ulong helper_4xx_tlbsx (target_ulong address) |
... | ... | |
4041 | 4043 |
target_ulong EPN, RPN, size; |
4042 | 4044 |
int do_flush_tlbs; |
4043 | 4045 |
|
4044 |
LOG_SWTLB("%s word %d entry %d value " ADDRX "\n",
|
|
4045 |
__func__, word, (int)entry, value);
|
|
4046 |
LOG_SWTLB("%s word %d entry %d value " TARGET_FMT_lx "\n",
|
|
4047 |
__func__, word, (int)entry, value); |
|
4046 | 4048 |
do_flush_tlbs = 0; |
4047 | 4049 |
entry &= 0x3F; |
4048 | 4050 |
tlb = &env->tlb[entry].tlbe; |
Also available in: Unified diff