summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland McGrath <roland@redhat.com>2006-07-21 12:17:27 +0000
committerRoland McGrath <roland@redhat.com>2006-07-21 12:17:27 +0000
commit42a177cb418af47f974856ca9b28c9b884d00fb7 (patch)
treecf141d05cda6d419d4f64da2e2ec69a854c752d9
parent22d02c2021e91f9b03cf5f897a64ae34477da0f4 (diff)
downloadelfutils-42a177cb418af47f974856ca9b28c9b884d00fb7.tar.gz
Clean up ia64 reg names.
-rw-r--r--backends/ia64_regs.c143
1 files changed, 85 insertions, 58 deletions
diff --git a/backends/ia64_regs.c b/backends/ia64_regs.c
index bcb456e9..076609db 100644
--- a/backends/ia64_regs.c
+++ b/backends/ia64_regs.c
@@ -43,8 +43,7 @@ ia64_register_name (Ebl *ebl __attribute__ ((unused)),
if (regno < 0 || regno > 687 + 63 || namelen < 12)
return -1;
- *prefix = "";
-
+ *prefix = "ar.";
*setname = "application";
switch (regno)
{
@@ -53,6 +52,7 @@ ia64_register_name (Ebl *ebl __attribute__ ((unused)),
name[1] = (regno - 0) + '0';
namelen = 2;
*setname = "integer";
+ *prefix = "";
break;
case 10 ... 99:
@@ -61,6 +61,7 @@ ia64_register_name (Ebl *ebl __attribute__ ((unused)),
name[2] = (regno - 0) % 10 + '0';
namelen = 3;
*setname = "integer";
+ *prefix = "";
break;
case 100 ... 127:
@@ -70,6 +71,7 @@ ia64_register_name (Ebl *ebl __attribute__ ((unused)),
name[3] = (regno - 0) % 10 + '0';
namelen = 4;
*setname = "integer";
+ *prefix = "";
break;
case 128 + 0 ... 128 + 9:
@@ -77,6 +79,7 @@ ia64_register_name (Ebl *ebl __attribute__ ((unused)),
name[1] = (regno - 128) + '0';
namelen = 2;
*setname = "FPU";
+ *prefix = "";
break;
case 128 + 10 ... 128 + 99:
@@ -85,6 +88,7 @@ ia64_register_name (Ebl *ebl __attribute__ ((unused)),
name[2] = (regno - 128) % 10 + '0';
namelen = 3;
*setname = "FPU";
+ *prefix = "";
break;
case 128 + 100 ... 128 + 127:
@@ -94,6 +98,7 @@ ia64_register_name (Ebl *ebl __attribute__ ((unused)),
name[3] = (regno - 128) % 10 + '0';
namelen = 4;
*setname = "FPU";
+ *prefix = "";
break;
case 320 + 0 ... 320 + 7:
@@ -101,66 +106,85 @@ ia64_register_name (Ebl *ebl __attribute__ ((unused)),
name[1] = (regno - 320) + '0';
namelen = 2;
*setname = "branch";
+ *prefix = "";
break;
- case 328:
- return stpcpy (name, "vfp") + 1 - name;
- case 329:
- return stpcpy (name, "vrap") + 1 - name;
- case 330:
- return stpcpy (name, "pr") + 1 - name;
- case 331:
- return stpcpy (name, "ip") + 1 - name;
- case 332:
- return stpcpy (name, "psr") + 1 - name;
- case 333:
- return stpcpy (name, "cfm") + 1 - name;
+ case 328 ... 333:
+ {
+ static const char named_special[][5] =
+ {
+ "vfp", "vrap", "pr", "ip", "psr", "cfm"
+ };
+ *setname = "special";
+ *prefix = "";
+ return stpcpy (name, named_special[regno - 328]) + 1 - name;
+ }
+
+ case 590:
+ *setname = "special";
+ *prefix = "";
+ return stpcpy (name, "bof") + 1 - name;
case 334 + 0 ... 334 + 7:
name[0] = 'k';
name[1] = 'r';
name[2] = (regno - 334) + '0';
namelen = 3;
+ *prefix = "";
break;
- case 350:
- return stpcpy (name, "rsc") + 1 - name;
- case 351:
- return stpcpy (name, "bsp") + 1 - name;
- case 352:
- return stpcpy (name, "bspstore") + 1 - name;
- case 353:
- return stpcpy (name, "rnat") + 1 - name;
- case 355:
- return stpcpy (name, "fcr") + 1 - name;
- case 358:
- return stpcpy (name, "eflag") + 1 - name;
- case 359:
- return stpcpy (name, "csd") + 1 - name;
- case 360:
- return stpcpy (name, "ssd") + 1 - name;
- case 361:
- return stpcpy (name, "cflg") + 1 - name;
- case 362:
- return stpcpy (name, "fsr") + 1 - name;
- case 363:
- return stpcpy (name, "fir") + 1 - name;
- case 364:
- return stpcpy (name, "fdr") + 1 - name;
- case 366:
- return stpcpy (name, "ccv") + 1 - name;
- case 370:
- return stpcpy (name, "unat") + 1 - name;
- case 374:
- return stpcpy (name, "fpsr") + 1 - name;
- case 378:
- return stpcpy (name, "itc") + 1 - name;
- case 398:
- return stpcpy (name, "pfs") + 1 - name;
- case 399:
- return stpcpy (name, "lc") + 1 - name;
- case 400:
- return stpcpy (name, "ec") + 1 - name;
+ case 334 + 8 ... 334 + 127:
+ {
+ static const char named_ar[][9] =
+ {
+ [16 - 8] = "rsc",
+ [17 - 8] = "bsp",
+ [18 - 8] = "bspstore",
+ [19 - 8] = "rnat",
+ [21 - 8] = "fcr",
+ [24 - 8] = "eflag",
+ [25 - 8] = "csd",
+ [26 - 8] = "ssd",
+ [27 - 8] = "cflg",
+ [28 - 8] = "fsr",
+ [29 - 8] = "fir",
+ [30 - 8] = "fdr",
+ [32 - 8] = "ccv",
+ [36 - 8] = "unat",
+ [40 - 8] = "fpsr",
+ [44 - 8] = "itc",
+ [64 - 8] = "pfs",
+ [65 - 8] = "lc",
+ [66 - 8] = "ec",
+ };
+ const size_t idx = regno - (334 + 8);
+ if (idx < sizeof named_ar / sizeof named_ar[0]
+ && named_ar[idx][0] != '\0')
+ return stpcpy (name, named_ar[idx]) + 1 - name;
+
+ name[0] = 'a';
+ name[1] = 'r';
+ switch (regno - 334)
+ {
+ case 0 ... 9:
+ name[2] = (regno - 334) + '0';
+ namelen = 3;
+ break;
+ case 10 ... 99:
+ name[2] = (regno - 334) / 10 + '0';
+ name[3] = (regno - 334) % 10 + '0';
+ namelen = 4;
+ break;
+ case 100 ... 127:
+ name[2] = '1';
+ name[3] = (regno - 334 - 100) / 10 + '0';
+ name[4] = (regno - 334) % 10 + '0';
+ namelen = 5;
+ break;
+ }
+ *prefix = "";
+ break;
+ }
case 462 + 0 ... 462 + 9:
name[0] = 'n';
@@ -169,6 +193,7 @@ ia64_register_name (Ebl *ebl __attribute__ ((unused)),
name[3] = (regno - 462) + '0';
namelen = 4;
*setname = "NAT";
+ *prefix = "";
break;
case 462 + 10 ... 462 + 99:
@@ -179,26 +204,27 @@ ia64_register_name (Ebl *ebl __attribute__ ((unused)),
name[4] = (regno - 462) % 10 + '0';
namelen = 5;
*setname = "NAT";
+ *prefix = "";
break;
case 462 + 100 ... 462 + 127:
name[0] = 'n';
name[1] = 'a';
name[2] = 't';
- name[3] = (regno - 462 - 100) / 10 + '0';
- name[4] = (regno - 462) % 10 + '0';
- namelen = 5;
+ name[3] = '1';
+ name[4] = (regno - 462 - 100) / 10 + '0';
+ name[5] = (regno - 462) % 10 + '0';
+ namelen = 6;
*setname = "NAT";
+ *prefix = "";
break;
- case 590:
- return stpcpy (name, "bof") + 1 - name;
-
case 687 + 0 ... 687 + 9:
name[0] = 'p';
name[1] = (regno - 687) + '0';
namelen = 2;
*setname = "predicate";
+ *prefix = "";
break;
case 687 + 10 ... 687 + 63:
@@ -207,6 +233,7 @@ ia64_register_name (Ebl *ebl __attribute__ ((unused)),
name[2] = (regno - 687) % 10 + '0';
namelen = 3;
*setname = "predicate";
+ *prefix = "";
break;
default: