25 |
* SUCH DAMAGE. |
* SUCH DAMAGE. |
26 |
* |
* |
27 |
* |
* |
28 |
* $Id: cpu_arm_coproc.c,v 1.10 2005/10/07 22:10:51 debug Exp $ |
* $Id: cpu_arm_coproc.c,v 1.13 2005/10/26 14:37:02 debug Exp $ |
29 |
* |
* |
30 |
* ARM coprocessor emulation. |
* ARM coprocessor emulation. |
31 |
*/ |
*/ |
83 |
old_control = cpu->cd.arm.control; |
old_control = cpu->cd.arm.control; |
84 |
cpu->cd.arm.control = cpu->cd.arm.r[rd]; |
cpu->cd.arm.control = cpu->cd.arm.r[rd]; |
85 |
if ((old_control & ARM_CONTROL_MMU) != |
if ((old_control & ARM_CONTROL_MMU) != |
86 |
(cpu->cd.arm.control & ARM_CONTROL_MMU)) |
(cpu->cd.arm.control & ARM_CONTROL_MMU)) { |
87 |
debug("[ %s the MMU ]\n", cpu->cd.arm.control & |
debug("[ %s the MMU ]\n", cpu->cd.arm.control & |
88 |
ARM_CONTROL_MMU? "enabling" : "disabling"); |
ARM_CONTROL_MMU? "enabling" : "disabling"); |
89 |
|
cpu->translate_address = |
90 |
|
cpu->cd.arm.control & ARM_CONTROL_MMU? |
91 |
|
arm_translate_address_mmu : arm_translate_address; |
92 |
|
} |
93 |
if ((old_control & ARM_CONTROL_ALIGN) != |
if ((old_control & ARM_CONTROL_ALIGN) != |
94 |
(cpu->cd.arm.control & ARM_CONTROL_ALIGN)) |
(cpu->cd.arm.control & ARM_CONTROL_ALIGN)) |
95 |
debug("[ %s alignment checks ]\n", cpu->cd.arm.control & |
debug("[ %s alignment checks ]\n", cpu->cd.arm.control & |
167 |
/* fatal("[ arm_coproc_15: TLB: op2=%i crm=%i rd=0x%08x ]\n", |
/* fatal("[ arm_coproc_15: TLB: op2=%i crm=%i rd=0x%08x ]\n", |
168 |
opcode2, crm, cpu->cd.arm.r[rd]); */ |
opcode2, crm, cpu->cd.arm.r[rd]); */ |
169 |
if (opcode2 == 0) |
if (opcode2 == 0) |
170 |
cpu->invalidate_translation_caches_paddr(cpu, 0, |
cpu->invalidate_translation_caches(cpu, 0, |
171 |
INVALIDATE_ALL); |
INVALIDATE_ALL); |
172 |
else |
else |
173 |
cpu->invalidate_translation_caches_paddr(cpu, |
cpu->invalidate_translation_caches(cpu, |
174 |
cpu->cd.arm.r[rd], INVALIDATE_VADDR); |
cpu->cd.arm.r[rd], INVALIDATE_VADDR); |
175 |
break; |
break; |
176 |
|
|
192 |
} |
} |
193 |
break; |
break; |
194 |
|
|
195 |
case 15:/* IMPLEMENTATION DEPENDANT! */ |
case 15:/* IMPLEMENTATION DEPENDENT! */ |
196 |
fatal("[ arm_coproc_15: TODO: IMPLEMENTATION DEPENDANT! ]\n"); |
fatal("[ arm_coproc_15: TODO: IMPLEMENTATION DEPENDENT! ]\n"); |
197 |
break; |
break; |
198 |
|
|
199 |
default:fatal("arm_coproc_15: unimplemented crn = %i\n", crn); |
default:fatal("arm_coproc_15: unimplemented crn = %i\n", crn); |