xref: /openbsd-src/gnu/usr.bin/binutils/bfd/cpu-sh.c (revision b2ea75c1b17e1a9a339660e7ed45cd24946b230e)
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 };
163