diff options
author | Roland McGrath <roland@redhat.com> | 2006-07-21 12:17:27 +0000 |
---|---|---|
committer | Roland McGrath <roland@redhat.com> | 2006-07-21 12:17:27 +0000 |
commit | 42a177cb418af47f974856ca9b28c9b884d00fb7 (patch) | |
tree | cf141d05cda6d419d4f64da2e2ec69a854c752d9 | |
parent | 22d02c2021e91f9b03cf5f897a64ae34477da0f4 (diff) | |
download | elfutils-42a177cb418af47f974856ca9b28c9b884d00fb7.tar.gz |
Clean up ia64 reg names.
-rw-r--r-- | backends/ia64_regs.c | 143 |
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: |