blob: bcb456e94847ae8dfa57a62847734a747b65128c [file] [log] [blame]
Roland McGrath95024622006-07-21 10:06:31 +00001/* Register names and numbers for IA64 DWARF.
2 Copyright (C) 2006 Red Hat, Inc.
3 This file is part of Red Hat elfutils.
4
5 Red Hat elfutils is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by the
7 Free Software Foundation; version 2 of the License.
8
9 Red Hat elfutils is distributed in the hope that it will be useful, but
10 WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 General Public License for more details.
13
14 You should have received a copy of the GNU General Public License along
15 with Red Hat elfutils; if not, write to the Free Software Foundation,
16 Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
17
18 Red Hat elfutils is an included package of the Open Invention Network.
19 An included package of the Open Invention Network is a package for which
20 Open Invention Network licensees cross-license their patents. No patent
21 license is granted, either expressly or impliedly, by designation as an
22 included package. Should you wish to participate in the Open Invention
23 Network licensing program, please visit www.openinventionnetwork.com
24 <http://www.openinventionnetwork.com>. */
25
26#ifdef HAVE_CONFIG_H
27# include <config.h>
28#endif
29
30#include <string.h>
31
32#define BACKEND i386_
33#include "libebl_CPU.h"
34
35ssize_t
36ia64_register_name (Ebl *ebl __attribute__ ((unused)),
37 int regno, char *name, size_t namelen,
38 const char **prefix, const char **setname)
39{
40 if (name == NULL)
41 return 687 + 64;
42
43 if (regno < 0 || regno > 687 + 63 || namelen < 12)
44 return -1;
45
46 *prefix = "";
47
48 *setname = "application";
49 switch (regno)
50 {
51 case 0 ... 9:
52 name[0] = 'r';
53 name[1] = (regno - 0) + '0';
54 namelen = 2;
55 *setname = "integer";
56 break;
57
58 case 10 ... 99:
59 name[0] = 'r';
60 name[1] = (regno - 0) / 10 + '0';
61 name[2] = (regno - 0) % 10 + '0';
62 namelen = 3;
63 *setname = "integer";
64 break;
65
66 case 100 ... 127:
67 name[0] = 'r';
68 name[1] = '1';
69 name[2] = (regno - 100) / 10 + '0';
70 name[3] = (regno - 0) % 10 + '0';
71 namelen = 4;
72 *setname = "integer";
73 break;
74
75 case 128 + 0 ... 128 + 9:
76 name[0] = 'f';
77 name[1] = (regno - 128) + '0';
78 namelen = 2;
79 *setname = "FPU";
80 break;
81
82 case 128 + 10 ... 128 + 99:
83 name[0] = 'f';
84 name[1] = (regno - 128) / 10 + '0';
85 name[2] = (regno - 128) % 10 + '0';
86 namelen = 3;
87 *setname = "FPU";
88 break;
89
90 case 128 + 100 ... 128 + 127:
91 name[0] = 'f';
92 name[1] = '1';
93 name[2] = (regno - 128 - 100) / 10 + '0';
94 name[3] = (regno - 128) % 10 + '0';
95 namelen = 4;
96 *setname = "FPU";
97 break;
98
99 case 320 + 0 ... 320 + 7:
100 name[0] = 'b';
101 name[1] = (regno - 320) + '0';
102 namelen = 2;
103 *setname = "branch";
104 break;
105
106 case 328:
107 return stpcpy (name, "vfp") + 1 - name;
108 case 329:
109 return stpcpy (name, "vrap") + 1 - name;
110 case 330:
111 return stpcpy (name, "pr") + 1 - name;
112 case 331:
113 return stpcpy (name, "ip") + 1 - name;
114 case 332:
115 return stpcpy (name, "psr") + 1 - name;
116 case 333:
117 return stpcpy (name, "cfm") + 1 - name;
118
119 case 334 + 0 ... 334 + 7:
120 name[0] = 'k';
121 name[1] = 'r';
122 name[2] = (regno - 334) + '0';
123 namelen = 3;
124 break;
125
126 case 350:
127 return stpcpy (name, "rsc") + 1 - name;
128 case 351:
129 return stpcpy (name, "bsp") + 1 - name;
130 case 352:
131 return stpcpy (name, "bspstore") + 1 - name;
132 case 353:
133 return stpcpy (name, "rnat") + 1 - name;
134 case 355:
135 return stpcpy (name, "fcr") + 1 - name;
136 case 358:
137 return stpcpy (name, "eflag") + 1 - name;
138 case 359:
139 return stpcpy (name, "csd") + 1 - name;
140 case 360:
141 return stpcpy (name, "ssd") + 1 - name;
142 case 361:
143 return stpcpy (name, "cflg") + 1 - name;
144 case 362:
145 return stpcpy (name, "fsr") + 1 - name;
146 case 363:
147 return stpcpy (name, "fir") + 1 - name;
148 case 364:
149 return stpcpy (name, "fdr") + 1 - name;
150 case 366:
151 return stpcpy (name, "ccv") + 1 - name;
152 case 370:
153 return stpcpy (name, "unat") + 1 - name;
154 case 374:
155 return stpcpy (name, "fpsr") + 1 - name;
156 case 378:
157 return stpcpy (name, "itc") + 1 - name;
158 case 398:
159 return stpcpy (name, "pfs") + 1 - name;
160 case 399:
161 return stpcpy (name, "lc") + 1 - name;
162 case 400:
163 return stpcpy (name, "ec") + 1 - name;
164
165 case 462 + 0 ... 462 + 9:
166 name[0] = 'n';
167 name[1] = 'a';
168 name[2] = 't';
169 name[3] = (regno - 462) + '0';
170 namelen = 4;
171 *setname = "NAT";
172 break;
173
174 case 462 + 10 ... 462 + 99:
175 name[0] = 'n';
176 name[1] = 'a';
177 name[2] = 't';
178 name[3] = (regno - 462) / 10 + '0';
179 name[4] = (regno - 462) % 10 + '0';
180 namelen = 5;
181 *setname = "NAT";
182 break;
183
184 case 462 + 100 ... 462 + 127:
185 name[0] = 'n';
186 name[1] = 'a';
187 name[2] = 't';
188 name[3] = (regno - 462 - 100) / 10 + '0';
189 name[4] = (regno - 462) % 10 + '0';
190 namelen = 5;
191 *setname = "NAT";
192 break;
193
194 case 590:
195 return stpcpy (name, "bof") + 1 - name;
196
197 case 687 + 0 ... 687 + 9:
198 name[0] = 'p';
199 name[1] = (regno - 687) + '0';
200 namelen = 2;
201 *setname = "predicate";
202 break;
203
204 case 687 + 10 ... 687 + 63:
205 name[0] = 'p';
206 name[1] = (regno - 687) / 10 + '0';
207 name[2] = (regno - 687) % 10 + '0';
208 namelen = 3;
209 *setname = "predicate";
210 break;
211
212 default:
213 *setname = NULL;
214 return 0;
215 }
216
217 name[namelen++] = '\0';
218 return namelen;
219}