1/* BFD library support routines for the Renesas / SuperH SH architecture.
2   Copyright 1993, 1994, 1997, 1998, 2000, 2001, 2002, 2003
3   Free Software Foundation, Inc.
4   Hacked by Steve Chamberlain of Cygnus Support.
5
6   This file is part of BFD, the Binary File Descriptor library.
7
8   This program is free software; you can redistribute it and/or modify
9   it under the terms of the GNU General Public License as published by
10   the Free Software Foundation; either version 2 of the License, or
11   (at your option) any later version.
12
13   This program is distributed in the hope that it will be useful,
14   but WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   GNU General Public License for more details.
17
18   You should have received a copy of the GNU General Public License
19   along with this program; if not, write to the Free Software
20   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
21
22#include "bfd.h"
23#include "sysdep.h"
24#include "libbfd.h"
25
26#define SH_NEXT      &arch_info_struct[0]
27#define SH2_NEXT     &arch_info_struct[1]
28#define SH2E_NEXT    &arch_info_struct[2]
29#define SH_DSP_NEXT  &arch_info_struct[3]
30#define SH3_NEXT     &arch_info_struct[4]
31#define SH3_DSP_NEXT &arch_info_struct[5]
32#define SH3E_NEXT    &arch_info_struct[6]
33#define SH4_NEXT     &arch_info_struct[7]
34#define SH4A_NEXT    &arch_info_struct[8]
35#define SH4AL_DSP_NEXT &arch_info_struct[9]
36#define SH4_NOFPU_NEXT &arch_info_struct[10]
37#define SH4A_NOFPU_NEXT &arch_info_struct[11]
38#define SH64_NEXT    NULL
39
40static const bfd_arch_info_type arch_info_struct[] =
41{
42  {
43    32,				/* 32 bits in a word */
44    32,				/* 32 bits in an address */
45    8,				/* 8 bits in a byte */
46    bfd_arch_sh,
47    bfd_mach_sh2,
48    "sh",			/* arch_name  */
49    "sh2",			/* printable name */
50    1,
51    FALSE,			/* not the default */
52    bfd_default_compatible,
53    bfd_default_scan,
54    SH2_NEXT
55  },
56  {
57    32,				/* 32 bits in a word */
58    32,				/* 32 bits in an address */
59    8,				/* 8 bits in a byte */
60    bfd_arch_sh,
61    bfd_mach_sh2e,
62    "sh",			/* arch_name  */
63    "sh2e",			/* printable name */
64    1,
65    FALSE,			/* not the default */
66    bfd_default_compatible,
67    bfd_default_scan,
68    SH2E_NEXT
69  },
70  {
71    32,				/* 32 bits in a word */
72    32,				/* 32 bits in an address */
73    8,				/* 8 bits in a byte */
74    bfd_arch_sh,
75    bfd_mach_sh_dsp,
76    "sh",			/* arch_name  */
77    "sh-dsp",			/* printable name */
78    1,
79    FALSE,			/* not the default */
80    bfd_default_compatible,
81    bfd_default_scan,
82    SH_DSP_NEXT
83  },
84  {
85    32,				/* 32 bits in a word */
86    32,				/* 32 bits in an address */
87    8,				/* 8 bits in a byte */
88    bfd_arch_sh,
89    bfd_mach_sh3,
90    "sh",			/* arch_name  */
91    "sh3",			/* printable name */
92    1,
93    FALSE,			/* not the default */
94    bfd_default_compatible,
95    bfd_default_scan,
96    SH3_NEXT
97  },
98  {
99    32,				/* 32 bits in a word */
100    32,				/* 32 bits in an address */
101    8,				/* 8 bits in a byte */
102    bfd_arch_sh,
103    bfd_mach_sh3_dsp,
104    "sh",			/* arch_name  */
105    "sh3-dsp",			/* printable name */
106    1,
107    FALSE,			/* not the default */
108    bfd_default_compatible,
109    bfd_default_scan,
110    SH3_DSP_NEXT
111  },
112  {
113    32,				/* 32 bits in a word */
114    32,				/* 32 bits in an address */
115    8,				/* 8 bits in a byte */
116    bfd_arch_sh,
117    bfd_mach_sh3e,
118    "sh",			/* arch_name  */
119    "sh3e",			/* printable name */
120    1,
121    FALSE,			/* not the default */
122    bfd_default_compatible,
123    bfd_default_scan,
124    SH3E_NEXT
125  },
126  {
127    32,				/* 32 bits in a word */
128    32,				/* 32 bits in an address */
129    8,				/* 8 bits in a byte */
130    bfd_arch_sh,
131    bfd_mach_sh4,
132    "sh",			/* arch_name  */
133    "sh4",			/* printable name */
134    1,
135    FALSE,			/* not the default */
136    bfd_default_compatible,
137    bfd_default_scan,
138    SH4_NEXT
139  },
140  {
141    32,				/* 32 bits in a word */
142    32,				/* 32 bits in an address */
143    8,				/* 8 bits in a byte */
144    bfd_arch_sh,
145    bfd_mach_sh4a,
146    "sh",			/* arch_name  */
147    "sh4a",			/* printable name */
148    1,
149    FALSE,			/* not the default */
150    bfd_default_compatible,
151    bfd_default_scan,
152    SH4A_NEXT
153  },
154  {
155    32,				/* 32 bits in a word */
156    32,				/* 32 bits in an address */
157    8,				/* 8 bits in a byte */
158    bfd_arch_sh,
159    bfd_mach_sh4al_dsp,
160    "sh",			/* arch_name  */
161    "sh4al-dsp",		/* printable name */
162    1,
163    FALSE,			/* not the default */
164    bfd_default_compatible,
165    bfd_default_scan,
166    SH4AL_DSP_NEXT
167  },
168  {
169    32,				/* 32 bits in a word */
170    32,				/* 32 bits in an address */
171    8,				/* 8 bits in a byte */
172    bfd_arch_sh,
173    bfd_mach_sh4_nofpu,
174    "sh",			/* arch_name  */
175    "sh4-nofpu",		/* printable name */
176    1,
177    FALSE,			/* not the default */
178    bfd_default_compatible,
179    bfd_default_scan,
180    SH4_NOFPU_NEXT
181  },
182  {
183    32,				/* 32 bits in a word */
184    32,				/* 32 bits in an address */
185    8,				/* 8 bits in a byte */
186    bfd_arch_sh,
187    bfd_mach_sh4a_nofpu,
188    "sh",			/* arch_name  */
189    "sh4a-nofpu",		/* printable name */
190    1,
191    FALSE,			/* not the default */
192    bfd_default_compatible,
193    bfd_default_scan,
194    SH4A_NOFPU_NEXT
195  },
196  {
197    64,				/* 64 bits in a word */
198    64,				/* 64 bits in an address */
199    8,				/* 8 bits in a byte */
200    bfd_arch_sh,
201    bfd_mach_sh5,
202    "sh",			/* arch_name  */
203    "sh5",			/* printable name */
204    1,
205    FALSE,			/* not the default */
206    bfd_default_compatible,
207    bfd_default_scan,
208    SH64_NEXT
209  },
210};
211
212const bfd_arch_info_type bfd_sh_arch =
213{
214  32,				/* 32 bits in a word */
215  32,				/* 32 bits in an address */
216  8,				/* 8 bits in a byte */
217  bfd_arch_sh,
218  bfd_mach_sh,
219  "sh",				/* arch_name  */
220  "sh",				/* printable name */
221  1,
222  TRUE,				/* the default machine */
223  bfd_default_compatible,
224  bfd_default_scan,
225  SH_NEXT
226};
227