This commit was generated by cvs2svn to track changes on a CVS vendor
[external/binutils.git] / bfd / cpu-sh.c
1 /* BFD library support routines for the Hitachi-SH architecture.
2    Copyright (C) 1993, 97, 1998, 2000 Free Software Foundation, Inc.
3    Hacked by Steve Chamberlain of Cygnus Support.
4
5 This file is part of BFD, the Binary File Descriptor library.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
20
21 #include "bfd.h"
22 #include "sysdep.h"
23 #include "libbfd.h"
24
25
26 static boolean 
27 scan_mach (info, string)
28      const struct bfd_arch_info *info;
29      const char *string;
30 {
31   if (strcasecmp (info->printable_name, string) == 0)
32     return true;
33   return false;
34 }
35
36
37 #if 0
38 /* This routine is provided two arch_infos and returns whether
39    they'd be compatible */
40
41 static const bfd_arch_info_type *
42 compatible (a,b)
43      const bfd_arch_info_type *a;
44      const bfd_arch_info_type *b;
45 {
46   if (a->arch != b->arch || a->mach != b->mach)
47    return NULL;
48   return a;
49 }
50 #endif
51
52 #define SH_NEXT &arch_info_struct[0]
53 #define SH2_NEXT &arch_info_struct[1]
54 #define SH_DSP_NEXT &arch_info_struct[2]
55 #define SH3_NEXT &arch_info_struct[3]
56 #define SH3_DSP_NEXT &arch_info_struct[4]
57 #define SH3E_NEXT &arch_info_struct[5]
58 #define SH4_NEXT NULL
59
60 static const bfd_arch_info_type arch_info_struct[] = 
61 {
62   {
63     32,                         /* 32 bits in a word */
64     32,                         /* 32 bits in an address */
65     8,                          /* 8 bits in a byte */
66     bfd_arch_sh,
67     bfd_mach_sh2,
68     "sh",                       /* arch_name  */
69     "sh2",                      /* printable name */
70     1,
71     false,                      /* not the default */
72     bfd_default_compatible,
73     scan_mach,
74     SH2_NEXT
75   },
76   {
77     32,                         /* 32 bits in a word */
78     32,                         /* 32 bits in an address */
79     8,                          /* 8 bits in a byte */
80     bfd_arch_sh,
81     bfd_mach_sh_dsp,
82     "sh",                       /* arch_name  */
83     "sh-dsp",                   /* printable name */
84     1,
85     false,                      /* not the default */
86     bfd_default_compatible,
87     scan_mach,
88     SH_DSP_NEXT
89   },
90   {
91     32,                         /* 32 bits in a word */
92     32,                         /* 32 bits in an address */
93     8,                          /* 8 bits in a byte */
94     bfd_arch_sh,
95     bfd_mach_sh3,
96     "sh",                       /* arch_name  */
97     "sh3",                      /* printable name */
98     1,
99     false,                      /* not the default */
100     bfd_default_compatible,
101     scan_mach,
102     SH3_NEXT
103   },
104   {
105     32,                         /* 32 bits in a word */
106     32,                         /* 32 bits in an address */
107     8,                          /* 8 bits in a byte */
108     bfd_arch_sh,
109     bfd_mach_sh3_dsp,
110     "sh",                       /* arch_name  */
111     "sh3-dsp",                  /* printable name */
112     1,
113     false,                      /* not the default */
114     bfd_default_compatible,
115     scan_mach,
116     SH3_DSP_NEXT
117   },
118   {
119     32,                         /* 32 bits in a word */
120     32,                         /* 32 bits in an address */
121     8,                          /* 8 bits in a byte */
122     bfd_arch_sh,
123     bfd_mach_sh3e,
124     "sh",                       /* arch_name  */
125     "sh3e",                     /* printable name */
126     1,
127     false,                      /* not the default */
128     bfd_default_compatible,
129     scan_mach,
130     SH3E_NEXT
131   },
132   {
133     32,                         /* 32 bits in a word */
134     32,                         /* 32 bits in an address */
135     8,                          /* 8 bits in a byte */
136     bfd_arch_sh,
137     bfd_mach_sh4,
138     "sh",                       /* arch_name  */
139     "sh4",                      /* printable name */
140     1,
141     false,                      /* not the default */
142     bfd_default_compatible,
143     scan_mach,
144     SH4_NEXT
145   },
146 };
147
148 const bfd_arch_info_type bfd_sh_arch =
149 {
150   32,                           /* 32 bits in a word */
151   32,                           /* 32 bits in an address */
152   8,                            /* 8 bits in a byte */
153   bfd_arch_sh,
154   bfd_mach_sh,
155   "sh",                         /* arch_name  */
156   "sh",                         /* printable name */
157   1,
158   true,                         /* the default machine */
159   bfd_default_compatible,
160   scan_mach,
161   SH_NEXT
162 };