X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=gcc%2Fgenpreds.c;h=976eb113a6bf180dee06eca467ee6ee27592ef69;hb=fe5ad9266cba2cbb611a831aaac450d3f6decd0c;hp=c27ae88f1a040e29608f9c8a7caf585370283b3b;hpb=8c53c46cebf42cb4f4ac125ca6428c5e9b519f66;p=thirdparty%2Fgcc.git diff --git a/gcc/genpreds.c b/gcc/genpreds.c index c27ae88f1a04..976eb113a6bf 100644 --- a/gcc/genpreds.c +++ b/gcc/genpreds.c @@ -612,7 +612,7 @@ write_one_predicate_function (struct pred_data *p) add_mode_tests (p); /* A normal predicate can legitimately not look at enum machine_mode - if it accepts only CONST_INTs and/or CONST_DOUBLEs. */ + if it accepts only CONST_INTs and/or CONST_WIDE_INT and/or CONST_DOUBLEs. */ printf ("int\n%s (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)\n{\n", p->name); write_predicate_stmts (p->exp); @@ -810,7 +810,6 @@ add_constraint (const char *name, const char *regclass, { enum rtx_code appropriate_code = is_const_int ? CONST_INT : CONST_DOUBLE; - /* Consider relaxing this requirement in the future. */ if (regclass || GET_CODE (exp) != AND @@ -1075,12 +1074,17 @@ write_tm_constrs_h (void) if (needs_ival) puts (" if (CONST_INT_P (op))\n" " ival = INTVAL (op);"); +#if TARGET_SUPPORTS_WIDE_INT + if (needs_lval || needs_hval) + error ("you can't use lval or hval"); +#else if (needs_hval) puts (" if (GET_CODE (op) == CONST_DOUBLE && mode == VOIDmode)" " hval = CONST_DOUBLE_HIGH (op);"); if (needs_lval) puts (" if (GET_CODE (op) == CONST_DOUBLE && mode == VOIDmode)" " lval = CONST_DOUBLE_LOW (op);"); +#endif if (needs_rval) puts (" if (GET_CODE (op) == CONST_DOUBLE && mode != VOIDmode)" " rval = CONST_DOUBLE_REAL_VALUE (op);");