diff options
Diffstat (limited to 'bfd/cpu-z80.c')
-rw-r--r-- | bfd/cpu-z80.c | 68 |
1 files changed, 63 insertions, 5 deletions
diff --git a/bfd/cpu-z80.c b/bfd/cpu-z80.c index 76f2ff6..6bab53a 100644 --- a/bfd/cpu-z80.c +++ b/bfd/cpu-z80.c @@ -31,13 +31,71 @@ 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) { - if (a->arch != b->arch) + if (a->arch != b->arch || a->arch != bfd_arch_z80) 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,bits,default,next) \ @@ -48,9 +106,9 @@ compatible (const bfd_arch_info_type *a, const bfd_arch_info_type *b) static const bfd_arch_info_type arch_info_struct[] = { - N (bfd_mach_z80full, "z80-full", 16, FALSE, M(1)), + N (bfd_mach_z80, "z80", 16, TRUE, M(1)), N (bfd_mach_z80strict, "z80-strict", 16, FALSE, M(2)), - N (bfd_mach_z80, "z80", 16, FALSE, M(3)), + 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)), @@ -60,4 +118,4 @@ static const bfd_arch_info_type arch_info_struct[] = }; const bfd_arch_info_type bfd_z80_arch = - N (bfd_mach_z80full, "z80-full", 16, TRUE, M(1)); + N (bfd_mach_z80, "z80", 16, TRUE, M(1)); |