25 |
* SUCH DAMAGE. |
* SUCH DAMAGE. |
26 |
* |
* |
27 |
* |
* |
28 |
* $Id: cpu_arm.c,v 1.28 2005/10/07 10:26:03 debug Exp $ |
* $Id: cpu_arm.c,v 1.29 2005/10/08 01:09:51 debug Exp $ |
29 |
* |
* |
30 |
* ARM CPU emulation. |
* ARM CPU emulation. |
31 |
* |
* |
442 |
&cpu->cd.arm.r[8], sizeof(uint32_t) * 7); |
&cpu->cd.arm.r[8], sizeof(uint32_t) * 7); |
443 |
break; |
break; |
444 |
case ARM_MODE_IRQ32: |
case ARM_MODE_IRQ32: |
445 |
|
memcpy(cpu->cd.arm.default_r8_r14, |
446 |
|
&cpu->cd.arm.r[8], sizeof(uint32_t) * 5); |
447 |
cpu->cd.arm.irq_r13_r14[0] = cpu->cd.arm.r[13]; |
cpu->cd.arm.irq_r13_r14[0] = cpu->cd.arm.r[13]; |
448 |
cpu->cd.arm.irq_r13_r14[1] = cpu->cd.arm.r[14]; |
cpu->cd.arm.irq_r13_r14[1] = cpu->cd.arm.r[14]; |
449 |
break; |
break; |
450 |
case ARM_MODE_SVC32: |
case ARM_MODE_SVC32: |
451 |
if ((cpu->cd.arm.r[13] & 0xffff0000) == 0xffff0000) { |
memcpy(cpu->cd.arm.default_r8_r14, |
452 |
fatal("NEJ! pc=0x%08x\n", (int)cpu->pc); |
&cpu->cd.arm.r[8], sizeof(uint32_t) * 5); |
|
exit(1); |
|
|
} |
|
453 |
cpu->cd.arm.svc_r13_r14[0] = cpu->cd.arm.r[13]; |
cpu->cd.arm.svc_r13_r14[0] = cpu->cd.arm.r[13]; |
454 |
cpu->cd.arm.svc_r13_r14[1] = cpu->cd.arm.r[14]; |
cpu->cd.arm.svc_r13_r14[1] = cpu->cd.arm.r[14]; |
455 |
break; |
break; |
456 |
case ARM_MODE_ABT32: |
case ARM_MODE_ABT32: |
457 |
|
memcpy(cpu->cd.arm.default_r8_r14, |
458 |
|
&cpu->cd.arm.r[8], sizeof(uint32_t) * 5); |
459 |
cpu->cd.arm.abt_r13_r14[0] = cpu->cd.arm.r[13]; |
cpu->cd.arm.abt_r13_r14[0] = cpu->cd.arm.r[13]; |
460 |
cpu->cd.arm.abt_r13_r14[1] = cpu->cd.arm.r[14]; |
cpu->cd.arm.abt_r13_r14[1] = cpu->cd.arm.r[14]; |
461 |
break; |
break; |
462 |
case ARM_MODE_UND32: |
case ARM_MODE_UND32: |
463 |
|
memcpy(cpu->cd.arm.default_r8_r14, |
464 |
|
&cpu->cd.arm.r[8], sizeof(uint32_t) * 5); |
465 |
cpu->cd.arm.und_r13_r14[0] = cpu->cd.arm.r[13]; |
cpu->cd.arm.und_r13_r14[0] = cpu->cd.arm.r[13]; |
466 |
cpu->cd.arm.und_r13_r14[1] = cpu->cd.arm.r[14]; |
cpu->cd.arm.und_r13_r14[1] = cpu->cd.arm.r[14]; |
467 |
break; |
break; |
489 |
sizeof(uint32_t) * 7); |
sizeof(uint32_t) * 7); |
490 |
break; |
break; |
491 |
case ARM_MODE_IRQ32: |
case ARM_MODE_IRQ32: |
492 |
|
memcpy(&cpu->cd.arm.r[8], |
493 |
|
cpu->cd.arm.default_r8_r14, sizeof(uint32_t) * 5); |
494 |
cpu->cd.arm.r[13] = cpu->cd.arm.irq_r13_r14[0]; |
cpu->cd.arm.r[13] = cpu->cd.arm.irq_r13_r14[0]; |
495 |
cpu->cd.arm.r[14] = cpu->cd.arm.irq_r13_r14[1]; |
cpu->cd.arm.r[14] = cpu->cd.arm.irq_r13_r14[1]; |
496 |
break; |
break; |
497 |
case ARM_MODE_SVC32: |
case ARM_MODE_SVC32: |
498 |
|
memcpy(&cpu->cd.arm.r[8], |
499 |
|
cpu->cd.arm.default_r8_r14, sizeof(uint32_t) * 5); |
500 |
cpu->cd.arm.r[13] = cpu->cd.arm.svc_r13_r14[0]; |
cpu->cd.arm.r[13] = cpu->cd.arm.svc_r13_r14[0]; |
501 |
cpu->cd.arm.r[14] = cpu->cd.arm.svc_r13_r14[1]; |
cpu->cd.arm.r[14] = cpu->cd.arm.svc_r13_r14[1]; |
502 |
break; |
break; |
503 |
case ARM_MODE_ABT32: |
case ARM_MODE_ABT32: |
504 |
|
memcpy(&cpu->cd.arm.r[8], |
505 |
|
cpu->cd.arm.default_r8_r14, sizeof(uint32_t) * 5); |
506 |
cpu->cd.arm.r[13] = cpu->cd.arm.abt_r13_r14[0]; |
cpu->cd.arm.r[13] = cpu->cd.arm.abt_r13_r14[0]; |
507 |
cpu->cd.arm.r[14] = cpu->cd.arm.abt_r13_r14[1]; |
cpu->cd.arm.r[14] = cpu->cd.arm.abt_r13_r14[1]; |
508 |
break; |
break; |
509 |
case ARM_MODE_UND32: |
case ARM_MODE_UND32: |
510 |
|
memcpy(&cpu->cd.arm.r[8], |
511 |
|
cpu->cd.arm.default_r8_r14, sizeof(uint32_t) * 5); |
512 |
cpu->cd.arm.r[13] = cpu->cd.arm.und_r13_r14[0]; |
cpu->cd.arm.r[13] = cpu->cd.arm.und_r13_r14[0]; |
513 |
cpu->cd.arm.r[14] = cpu->cd.arm.und_r13_r14[1]; |
cpu->cd.arm.r[14] = cpu->cd.arm.und_r13_r14[1]; |
514 |
break; |
break; |