Automatic date update in version.in
[deliverable/binutils-gdb.git] / bfd / cpu-z80.c
index 3fd6fd481767d8c7721eefdc0663797174eed556..6bab53af01dc3f515b6c339da35d7b3888e13b60 100644 (file)
@@ -1,12 +1,12 @@
 /* BFD library support routines for the Z80 architecture.
 /* BFD library support routines for the Z80 architecture.
-   Copyright 2005 Free Software Foundation, Inc.
+   Copyright (C) 2005-2020 Free Software Foundation, Inc.
    Contributed by Arnold Metselaar <arnold_m@operamail.com>
 
    This file is part of BFD, the Binary File Descriptor library.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    Contributed by Arnold Metselaar <arnold_m@operamail.com>
 
    This file is part of BFD, the Binary File Descriptor library.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -19,8 +19,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include "bfd.h"
 #include "sysdep.h"
 #include "sysdep.h"
+#include "bfd.h"
 #include "libbfd.h"
 
 const bfd_arch_info_type bfd_z80_arch;
 #include "libbfd.h"
 
 const bfd_arch_info_type bfd_z80_arch;
@@ -31,27 +31,91 @@ const bfd_arch_info_type bfd_z80_arch;
 static const bfd_arch_info_type *
 compatible (const bfd_arch_info_type *a, const bfd_arch_info_type *b)
 {
 static const bfd_arch_info_type *
 compatible (const bfd_arch_info_type *a, const bfd_arch_info_type *b)
 {
-  if (a->arch != b->arch)
+  if (a->arch != b->arch || a->arch != bfd_arch_z80)
     return NULL;
 
   if (a->mach == b->mach)
     return a;
     return NULL;
 
   if (a->mach == b->mach)
     return a;
+  switch (a->mach)
+    {
+    case bfd_mach_z80:
+    case bfd_mach_z80full:
+    case bfd_mach_z80strict:
+      switch (b->mach)
+       {
+       case bfd_mach_z80:
+       case bfd_mach_z80full:
+       case bfd_mach_z80strict:
+         return & bfd_z80_arch;
+       case bfd_mach_z180:
+       case bfd_mach_ez80_z80:
+       case bfd_mach_ez80_adl:
+       case bfd_mach_z80n:
+       case bfd_mach_r800:
+         return b;
+       }
+      break;
+    case bfd_mach_z80n:
+    case bfd_mach_r800:
+      switch (b->mach)
+       {
+       case bfd_mach_z80:
+       case bfd_mach_z80full:
+       case bfd_mach_z80strict:
+         return a;
+       }
+      break;
+    case bfd_mach_z180:
+      switch (b->mach)
+       {
+       case bfd_mach_z80:
+       case bfd_mach_z80full:
+       case bfd_mach_z80strict:
+         return a;
+       case bfd_mach_ez80_z80:
+       case bfd_mach_ez80_adl:
+         return b;
+       }
+      break;
+    case bfd_mach_ez80_z80:
+    case bfd_mach_ez80_adl:
+      switch (b->mach)
+       {
+       case bfd_mach_z80:
+       case bfd_mach_z80full:
+       case bfd_mach_z80strict:
+       case bfd_mach_z180:
+       case bfd_mach_ez80_z80:
+         return a;
+       case bfd_mach_ez80_adl:
+         return b;
+       }
+      break;
+    case bfd_mach_gbz80:
+       return NULL;
+    }
 
 
-  return (a->arch == bfd_arch_z80) ? & bfd_z80_arch : NULL;
+  return NULL;
 }
 
 }
 
-#define N(name,print,default,next)  \
-{ 16, 16, 8, bfd_arch_z80, name, "z80", print, 0, default, \
-    compatible, bfd_default_scan, next }
+#define N(name,print,bits,default,next)  \
+ { 16, bits, 8, bfd_arch_z80, name, "z80", print, 0, default, \
+   compatible, bfd_default_scan, bfd_arch_default_fill, next, 0 }
 
 #define M(n) &arch_info_struct[n]
 
 static const bfd_arch_info_type arch_info_struct[] =
 {
 
 #define M(n) &arch_info_struct[n]
 
 static const bfd_arch_info_type arch_info_struct[] =
 {
-  N (bfd_mach_z80strict, "z80-strict", FALSE, M(1)),
-  N (bfd_mach_z80,       "z80",        FALSE, M(2)),
-  N (bfd_mach_z80full,   "z80-full",   FALSE, M(3)),
-  N (bfd_mach_r800,      "r800",       FALSE, NULL)
+  N (bfd_mach_z80,      "z80",        16, TRUE,  M(1)),
+  N (bfd_mach_z80strict, "z80-strict", 16, FALSE, M(2)),
+  N (bfd_mach_z80full,  "z80-full",   16, FALSE, M(3)),
+  N (bfd_mach_r800,     "r800",       16, FALSE, M(4)),
+  N (bfd_mach_gbz80,    "gbz80",      16, FALSE, M(5)),
+  N (bfd_mach_z180,     "z180",       16, FALSE, M(6)),
+  N (bfd_mach_z80n,     "z80n",       16, FALSE, M(7)),
+  N (bfd_mach_ez80_z80,         "ez80-z80",   16, FALSE, M(8)),
+  N (bfd_mach_ez80_adl,         "ez80-adl",   24, FALSE, NULL)
 };
 
 };
 
-const bfd_arch_info_type bfd_z80_arch = N (0, "z80-any", TRUE, M(0));
+const bfd_arch_info_type bfd_z80_arch =
+  N (bfd_mach_z80,   "z80",   16, TRUE,  M(1));
This page took 0.027248 seconds and 4 git commands to generate.