diff options
author | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-06-10 20:24:17 +0000 |
---|---|---|
committer | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-06-10 20:24:17 +0000 |
commit | d37b1ac9e99e9bd33b0d2be2fe22eef2374465d1 (patch) | |
tree | 7c7c84950cd4b41af7efd6b64db9e7e3cfb1f188 /gcc/genattr.c | |
parent | 5d54fceb3ef5f9f1e2fa793d0fcf16b6c4c49ee5 (diff) | |
download | gcc-d37b1ac9e99e9bd33b0d2be2fe22eef2374465d1.tar.gz |
gcc/
* doc/md.texi (define_enum_attr): Document.
* rtl.def (DEFINE_ENUM_ATTR): New rtx.
* read-md.h (lookup_enum_type): Declare.
* read-md.c (lookup_enum_type): New function.
* genattr.c (gen_attr, main): Handle DEFINE_ENUM_ATTR.
* genattrtab.c (attr_desc): Add an enum_name field.
(evaluate_eq_attr): Take the associated attribute as argument.
Get the enum prefix from the enum_name field, if defined.
Use ACONCAT rather than a fixed-length buffer. Update recursive calls.
(simplify_test_exp): Pass attr to evaluate_eq_attr.
(add_attr_value): New function, split out from...
(gen_attr): ...here. Handle DEFINE_ENUM_ATTR.
(write_test_expr): Pass attr to evaluate_eq_attr.
(write_attr_get): Use the enum_name as the enum tag, if defined.
(write_attr_valueq): Use the enum_name as a prefix, if defined.
(find_attr): Initialize enum_name.
(main): Handle DEFINE_ENUM_ATTR.
* gensupport.c (process_rtx): Likewise.
* config/mips/mips.h (mips_tune_attr): Delete.
* config/mips/mips.md (cpu): Use define_attr_enum.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@160581 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/genattr.c')
-rw-r--r-- | gcc/genattr.c | 43 |
1 files changed, 25 insertions, 18 deletions
diff --git a/gcc/genattr.c b/gcc/genattr.c index 84399b8a677..e4609ca4174 100644 --- a/gcc/genattr.c +++ b/gcc/genattr.c @@ -49,27 +49,33 @@ gen_attr (rtx attr) printf ("#define HAVE_ATTR_%s\n", XSTR (attr, 0)); /* If numeric attribute, don't need to write an enum. */ - p = XSTR (attr, 1); - if (*p == '\0') - printf ("extern int get_attr_%s (%s);\n", XSTR (attr, 0), - (is_const ? "void" : "rtx")); + if (GET_CODE (attr) == DEFINE_ENUM_ATTR) + printf ("extern enum %s get_attr_%s (%s);\n\n", + XSTR (attr, 1), XSTR (attr, 0), (is_const ? "void" : "rtx")); else { - printf ("enum attr_%s {", XSTR (attr, 0)); - - while ((tag = scan_comma_elt (&p)) != 0) + p = XSTR (attr, 1); + if (*p == '\0') + printf ("extern int get_attr_%s (%s);\n", XSTR (attr, 0), + (is_const ? "void" : "rtx")); + else { - write_upcase (XSTR (attr, 0)); - putchar ('_'); - while (tag != p) - putchar (TOUPPER (*tag++)); - if (*p == ',') - fputs (", ", stdout); - } + printf ("enum attr_%s {", XSTR (attr, 0)); + + while ((tag = scan_comma_elt (&p)) != 0) + { + write_upcase (XSTR (attr, 0)); + putchar ('_'); + while (tag != p) + putchar (TOUPPER (*tag++)); + if (*p == ',') + fputs (", ", stdout); + } + fputs ("};\n", stdout); - fputs ("};\n", stdout); - printf ("extern enum attr_%s get_attr_%s (%s);\n\n", - XSTR (attr, 0), XSTR (attr, 0), (is_const ? "void" : "rtx")); + printf ("extern enum attr_%s get_attr_%s (%s);\n\n", + XSTR (attr, 0), XSTR (attr, 0), (is_const ? "void" : "rtx")); + } } /* If `length' attribute, write additional function definitions and define @@ -122,7 +128,8 @@ main (int argc, char **argv) if (desc == NULL) break; - if (GET_CODE (desc) == DEFINE_ATTR) + if (GET_CODE (desc) == DEFINE_ATTR + || GET_CODE (desc) == DEFINE_ENUM_ATTR) gen_attr (desc); else if (GET_CODE (desc) == DEFINE_DELAY) |