* compile.c (sim_resume): Handle "ldm.l" and "stm.l".
authorJeff Law <law@redhat.com>
Tue, 2 Jul 1996 07:37:50 +0000 (07:37 +0000)
committerJeff Law <law@redhat.com>
Tue, 2 Jul 1996 07:37:50 +0000 (07:37 +0000)
HMSE H8/S.

sim/h8300/ChangeLog
sim/h8300/compile.c

index c28ae44001c34f3d693643ff86f74ae983ac20f4..0b76bf6509f54d8c9d8fa83cf27bada787b1e807 100644 (file)
@@ -1,3 +1,13 @@
+start-sanitize-h8s 
+Tue Jul  2 01:37:27 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * compile.c (sim_resume): Handle "ldm.l" and "stm.l".
+
+Wed Jun 26 08:58:53 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * compile.c (h8300smode): Declare.
+
+end-sanitize-h8s
 Wed Jun 26 12:20:56 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)
 
         * Makefile.in (bindir, libdir, datadir, mandir, infodir, includedir,
index 2e02aa07fdc4cfd9934b96fd28c4dc8679084178..21b9d6587bb16494652d3f48314ac1479edf5be4 100644 (file)
@@ -74,7 +74,7 @@ int debug;
 #endif
 
 #ifndef SEXTCHAR
-#define SEXTCHAR(x) ((x & 0x80) ? (x | ~0xff):x)
+#define SEXTCHAR(x) ((x & 0x80) ? (x | ~0xff): x & 0xff)
 #endif
 
 #define UEXTCHAR(x) ((x) & 0xff)
@@ -84,6 +84,9 @@ int debug;
 static cpu_state_type cpu;
 
 int h8300hmode = 0;
+/* start-sanitize-h8s */
+int h8300smode = 0;
+/* end-sanitize-h8s */
 
 static int memory_size;
 
@@ -1424,6 +1427,42 @@ sim_resume (step, siggnal)
        case O (O_NOP, SB):
          goto next;
 
+/* start-sanitize-h8s */
+       case O (O_STM, SL):
+         {
+           int nregs, firstreg, i;
+
+           nregs = GET_MEMORY_B (pc + 1);
+           nregs >>= 4;
+           nregs &= 0xf;
+           firstreg = GET_MEMORY_B (pc + 3);
+           firstreg &= 0xf;
+           for (i = firstreg; i <= firstreg + nregs; i++)
+             {
+               cpu.regs[7] -= 4;
+               SET_MEMORY_L (cpu.regs[7], cpu.regs[i]);
+             }
+         }
+         goto next;
+
+       case O (O_LDM, SL):
+         {
+           int nregs, firstreg, i;
+
+           nregs = GET_MEMORY_B (pc + 1);
+           nregs >>= 4;
+           nregs &= 0xf;
+           firstreg = GET_MEMORY_B (pc + 3);
+           firstreg &= 0xf;
+           for (i = firstreg; i >= firstreg - nregs; i--)
+             {
+               cpu.regs[i] = GET_MEMORY_L (cpu.regs[7]);
+               cpu.regs[7] += 4;
+             }
+         }
+         goto next;
+
+/* end-sanitize-h8s */
        default:
          cpu.exception = SIGILL;
          goto end;
@@ -1892,7 +1931,13 @@ sim_load (prog, from_tty)
   if ((abfd = bfd_openr (prog, "coff-h8300")) != 0)
     {
       if (bfd_check_format (abfd, bfd_object)) 
-       set_h8300h (abfd->arch_info->mach == bfd_mach_h8300h);
+       {
+         set_h8300h (abfd->arch_info->mach == bfd_mach_h8300h
+/* start-sanitize-h8s */
+                     || abfd->arch_info->mach == bfd_mach_h8300s
+/* end-sanitize-h8s */
+                     );
+       }
       bfd_close (abfd);
     }