Mercurial > hg > CbC > CbC_gcc
diff gcc/genconfig.c @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | f6334be47118 |
children | 84e7813d76e9 |
line wrap: on
line diff
--- a/gcc/genconfig.c Sun Aug 21 07:07:55 2011 +0900 +++ b/gcc/genconfig.c Fri Oct 27 22:46:09 2017 +0900 @@ -1,7 +1,6 @@ /* Generate from machine description: - some #define configuration flags. - Copyright (C) 1987, 1991, 1997, 1998, 1999, 2000, 2003, 2004, 2007, 2010 - Free Software Foundation, Inc. + Copyright (C) 1987-2017 Free Software Foundation, Inc. This file is part of GCC. @@ -37,6 +36,8 @@ static int have_cmove_flag; static int have_cond_exec_flag; static int have_lo_sum_flag; +static int have_rotate_flag; +static int have_rotatert_flag; static int have_peephole_flag; static int have_peephole2_flag; @@ -50,11 +51,6 @@ static int dup_operands_seen_this_insn; static void walk_insn_part (rtx, int, int); -static void gen_insn (rtx); -static void gen_expand (rtx); -static void gen_split (rtx); -static void gen_peephole (rtx); -static void gen_peephole2 (rtx); /* RECOG_P will be nonzero if this pattern was seen in a context where it will be used to recognize, rather than just generate an insn. @@ -87,6 +83,7 @@ case MATCH_OP_DUP: case MATCH_PAR_DUP: ++dup_operands_seen_this_insn; + /* FALLTHRU */ case MATCH_SCRATCH: case MATCH_PARALLEL: case MATCH_OPERATOR: @@ -118,6 +115,16 @@ have_lo_sum_flag = 1; return; + case ROTATE: + if (recog_p) + have_rotate_flag = 1; + return; + + case ROTATERT: + if (recog_p) + have_rotatert_flag = 1; + return; + case SET: walk_insn_part (SET_DEST (part), 0, recog_p); walk_insn_part (SET_SRC (part), recog_p, @@ -168,11 +175,12 @@ } static void -gen_insn (rtx insn) +gen_insn (md_rtx_info *info) { int i; /* Walk the insn pattern to gather the #define's status. */ + rtx insn = info->def; clobbers_seen_this_insn = 0; dup_operands_seen_this_insn = 0; if (XVEC (insn, 1) != 0) @@ -188,7 +196,7 @@ /* Similar but scan a define_expand. */ static void -gen_expand (rtx insn) +gen_expand (md_rtx_info *info) { int i; @@ -196,6 +204,7 @@ /* Note that we don't bother recording the number of MATCH_DUPs that occur in a gen_expand, because only reload cares about that. */ + rtx insn = info->def; if (XVEC (insn, 1) != 0) for (i = 0; i < XVECLEN (insn, 1); i++) { @@ -214,12 +223,13 @@ /* Similar but scan a define_split. */ static void -gen_split (rtx split) +gen_split (md_rtx_info *info) { int i; /* Look through the patterns that are matched to compute the maximum operand number. */ + rtx split = info->def; for (i = 0; i < XVECLEN (split, 0); i++) walk_insn_part (XVECEXP (split, 0, i), 1, 0); /* Look at the number of insns this insn could split into. */ @@ -228,23 +238,25 @@ } static void -gen_peephole (rtx peep) +gen_peephole (md_rtx_info *info) { int i; /* Look through the patterns that are matched to compute the maximum operand number. */ + rtx peep = info->def; for (i = 0; i < XVECLEN (peep, 0); i++) walk_insn_part (XVECEXP (peep, 0, i), 1, 0); } static void -gen_peephole2 (rtx peep) +gen_peephole2 (md_rtx_info *info) { int i, n; /* Look through the patterns that are matched to compute the maximum operand number. */ + rtx peep = info->def; for (i = XVECLEN (peep, 0) - 1; i >= 0; --i) walk_insn_part (XVECEXP (peep, 0, i), 1, 0); @@ -258,10 +270,8 @@ } int -main (int argc, char **argv) +main (int argc, const char **argv) { - rtx desc; - progname = "genconfig"; if (!init_rtx_reader_args (argc, argv)) @@ -280,42 +290,35 @@ /* Read the machine description. */ - while (1) - { - int line_no, insn_code_number = 0; + md_rtx_info info; + while (read_md_rtx (&info)) + switch (GET_CODE (info.def)) + { + case DEFINE_INSN: + gen_insn (&info); + break; - desc = read_md_rtx (&line_no, &insn_code_number); - if (desc == NULL) + case DEFINE_EXPAND: + gen_expand (&info); break; - switch (GET_CODE (desc)) - { - case DEFINE_INSN: - gen_insn (desc); - break; + case DEFINE_SPLIT: + gen_split (&info); + break; - case DEFINE_EXPAND: - gen_expand (desc); - break; - - case DEFINE_SPLIT: - gen_split (desc); - break; + case DEFINE_PEEPHOLE2: + have_peephole2_flag = 1; + gen_peephole2 (&info); + break; - case DEFINE_PEEPHOLE2: - have_peephole2_flag = 1; - gen_peephole2 (desc); - break; + case DEFINE_PEEPHOLE: + have_peephole_flag = 1; + gen_peephole (&info); + break; - case DEFINE_PEEPHOLE: - have_peephole_flag = 1; - gen_peephole (desc); - break; - - default: - break; - } - } + default: + break; + } printf ("#define MAX_RECOG_OPERANDS %d\n", max_recog_operands + 1); printf ("#define MAX_DUP_OPERANDS %d\n", max_dup_operands); @@ -335,28 +338,48 @@ { /* We output CC0_P this way to make sure that X is declared somewhere. */ + printf ("#define HAVE_cc0 0\n"); printf ("#define CC0_P(X) ((X) ? 0 : 0)\n"); } if (have_cmove_flag) printf ("#define HAVE_conditional_move 1\n"); + else + printf ("#define HAVE_conditional_move 0\n"); if (have_cond_exec_flag) printf ("#define HAVE_conditional_execution 1\n"); + else + printf ("#define HAVE_conditional_execution 0\n"); if (have_lo_sum_flag) printf ("#define HAVE_lo_sum 1\n"); + else + printf ("#define HAVE_lo_sum 0\n"); + + if (have_rotate_flag) + printf ("#define HAVE_rotate 1\n"); + + if (have_rotatert_flag) + printf ("#define HAVE_rotatert 1\n"); if (have_peephole_flag) printf ("#define HAVE_peephole 1\n"); + else + printf ("#define HAVE_peephole 0\n"); if (have_peephole2_flag) { printf ("#define HAVE_peephole2 1\n"); printf ("#define MAX_INSNS_PER_PEEP2 %d\n", max_insns_per_peep2); } + else + { + printf ("#define HAVE_peephole2 0\n"); + printf ("#define MAX_INSNS_PER_PEEP2 0\n"); + } - puts("\n#endif /* GCC_INSN_CONFIG_H */"); + puts ("\n#endif /* GCC_INSN_CONFIG_H */"); if (ferror (stdout) || fflush (stdout) || fclose (stdout)) return FATAL_EXIT_CODE;