/[gxemul]/trunk/src/cpus/cpu_arm.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/src/cpus/cpu_arm.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 15 by dpavlin, Mon Oct 8 16:18:51 2007 UTC revision 16 by dpavlin, Mon Oct 8 16:19:01 2007 UTC
# Line 25  Line 25 
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   *   *
# Line 442  void arm_save_register_bank(struct cpu * Line 442  void arm_save_register_bank(struct cpu *
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;
# Line 485  void arm_load_register_bank(struct cpu * Line 489  void arm_load_register_bank(struct cpu *
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;

Legend:
Removed from v.15  
changed lines
  Added in v.16

  ViewVC Help
Powered by ViewVC 1.1.26