OSDN Git Service

Daily bump.
[pf3gnuchains/gcc-fork.git] / gcc / genopinit.c
index 44c48c7..d28baab 100644 (file)
@@ -1,6 +1,7 @@
 /* Generate code to initialize optabs from machine description.
    Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-   2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+   Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -50,6 +51,7 @@ along with GCC; see the file COPYING3.  If not see
    only full integer modes should be considered for the next mode, and $F
    means that only float modes should be considered.
    $P means that both full and partial integer modes should be considered.
+   $Q means that only fixed-point modes should be considered.
 
    $V means to emit 'v' if the first mode is a MODE_FLOAT mode.
 
@@ -67,14 +69,28 @@ static const char * const optabs[] =
   "convert_optab_handler (sfloat_optab, $B, $A)->insn_code = CODE_FOR_$(float$I$a$F$b2$)",
   "convert_optab_handler (ufloat_optab, $B, $A)->insn_code = CODE_FOR_$(floatuns$I$a$F$b2$)",
   "convert_optab_handler (trunc_optab, $B, $A)->insn_code = CODE_FOR_$(trunc$a$b2$)",
+  "convert_optab_handler (fract_optab, $B, $A)->insn_code = CODE_FOR_$(fract$a$b2$)",
+  "convert_optab_handler (fractuns_optab, $B, $A)->insn_code = CODE_FOR_$(fractuns$I$a$Q$b2$)",
+  "convert_optab_handler (fractuns_optab, $B, $A)->insn_code = CODE_FOR_$(fractuns$Q$a$I$b2$)",
+  "convert_optab_handler (satfract_optab, $B, $A)->insn_code = CODE_FOR_$(satfract$a$Q$b2$)",
+  "convert_optab_handler (satfractuns_optab, $B, $A)->insn_code = CODE_FOR_$(satfractuns$I$a$Q$b2$)",
   "optab_handler (add_optab, $A)->insn_code = CODE_FOR_$(add$P$a3$)",
   "optab_handler (addv_optab, $A)->insn_code =\n\
     optab_handler (add_optab, $A)->insn_code = CODE_FOR_$(add$F$a3$)",
   "optab_handler (addv_optab, $A)->insn_code = CODE_FOR_$(addv$I$a3$)",
+  "optab_handler (add_optab, $A)->insn_code = CODE_FOR_$(add$Q$a3$)",
+  "optab_handler (ssadd_optab, $A)->insn_code = CODE_FOR_$(ssadd$Q$a3$)",
+  "optab_handler (usadd_optab, $A)->insn_code = CODE_FOR_$(usadd$Q$a3$)",
   "optab_handler (sub_optab, $A)->insn_code = CODE_FOR_$(sub$P$a3$)",
   "optab_handler (subv_optab, $A)->insn_code =\n\
     optab_handler (sub_optab, $A)->insn_code = CODE_FOR_$(sub$F$a3$)",
   "optab_handler (subv_optab, $A)->insn_code = CODE_FOR_$(subv$I$a3$)",
+  "optab_handler (sub_optab, $A)->insn_code = CODE_FOR_$(sub$Q$a3$)",
+  "optab_handler (sssub_optab, $A)->insn_code = CODE_FOR_$(sssub$Q$a3$)",
+  "optab_handler (ussub_optab, $A)->insn_code = CODE_FOR_$(ussub$Q$a3$)",
+  "optab_handler (smul_optab, $A)->insn_code = CODE_FOR_$(mul$Q$a3$)",
+  "optab_handler (ssmul_optab, $A)->insn_code = CODE_FOR_$(ssmul$Q$a3$)",
+  "optab_handler (usmul_optab, $A)->insn_code = CODE_FOR_$(usmul$Q$a3$)",
   "optab_handler (smul_optab, $A)->insn_code = CODE_FOR_$(mul$P$a3$)",
   "optab_handler (smulv_optab, $A)->insn_code =\n\
     optab_handler (smul_optab, $A)->insn_code = CODE_FOR_$(mul$F$a3$)",
@@ -86,11 +102,18 @@ static const char * const optabs[] =
   "optab_handler (usmul_widen_optab, $B)->insn_code = CODE_FOR_$(usmul$a$b3$)$N",
   "optab_handler (smadd_widen_optab, $B)->insn_code = CODE_FOR_$(madd$a$b4$)$N",
   "optab_handler (umadd_widen_optab, $B)->insn_code = CODE_FOR_$(umadd$a$b4$)$N",
+  "optab_handler (ssmadd_widen_optab, $B)->insn_code = CODE_FOR_$(ssmadd$a$b4$)$N",
+  "optab_handler (usmadd_widen_optab, $B)->insn_code = CODE_FOR_$(usmadd$a$b4$)$N",
   "optab_handler (smsub_widen_optab, $B)->insn_code = CODE_FOR_$(msub$a$b4$)$N",
   "optab_handler (umsub_widen_optab, $B)->insn_code = CODE_FOR_$(umsub$a$b4$)$N",
+  "optab_handler (ssmsub_widen_optab, $B)->insn_code = CODE_FOR_$(ssmsub$a$b4$)$N",
+  "optab_handler (usmsub_widen_optab, $B)->insn_code = CODE_FOR_$(usmsub$a$b4$)$N",
   "optab_handler (sdiv_optab, $A)->insn_code = CODE_FOR_$(div$a3$)",
+  "optab_handler (ssdiv_optab, $A)->insn_code = CODE_FOR_$(ssdiv$Q$a3$)",
   "optab_handler (sdivv_optab, $A)->insn_code = CODE_FOR_$(div$V$I$a3$)",
   "optab_handler (udiv_optab, $A)->insn_code = CODE_FOR_$(udiv$I$a3$)",
+  "optab_handler (udiv_optab, $A)->insn_code = CODE_FOR_$(udiv$Q$a3$)",
+  "optab_handler (usdiv_optab, $A)->insn_code = CODE_FOR_$(usdiv$Q$a3$)",
   "optab_handler (sdivmod_optab, $A)->insn_code = CODE_FOR_$(divmod$a4$)",
   "optab_handler (udivmod_optab, $A)->insn_code = CODE_FOR_$(udivmod$a4$)",
   "optab_handler (smod_optab, $A)->insn_code = CODE_FOR_$(mod$a3$)",
@@ -102,10 +125,17 @@ static const char * const optabs[] =
   "optab_handler (ior_optab, $A)->insn_code = CODE_FOR_$(ior$a3$)",
   "optab_handler (xor_optab, $A)->insn_code = CODE_FOR_$(xor$a3$)",
   "optab_handler (ashl_optab, $A)->insn_code = CODE_FOR_$(ashl$a3$)",
+  "optab_handler (ssashl_optab, $A)->insn_code = CODE_FOR_$(ssashl$Q$a3$)",
+  "optab_handler (usashl_optab, $A)->insn_code = CODE_FOR_$(usashl$Q$a3$)",
   "optab_handler (ashr_optab, $A)->insn_code = CODE_FOR_$(ashr$a3$)",
   "optab_handler (lshr_optab, $A)->insn_code = CODE_FOR_$(lshr$a3$)",
   "optab_handler (rotl_optab, $A)->insn_code = CODE_FOR_$(rotl$a3$)",
   "optab_handler (rotr_optab, $A)->insn_code = CODE_FOR_$(rotr$a3$)",
+  "optab_handler (vashr_optab, $A)->insn_code = CODE_FOR_$(vashr$a3$)",
+  "optab_handler (vlshr_optab, $A)->insn_code = CODE_FOR_$(vlshr$a3$)",
+  "optab_handler (vashl_optab, $A)->insn_code = CODE_FOR_$(vashl$a3$)",
+  "optab_handler (vrotl_optab, $A)->insn_code = CODE_FOR_$(vrotl$a3$)",
+  "optab_handler (vrotr_optab, $A)->insn_code = CODE_FOR_$(vrotr$a3$)",
   "optab_handler (smin_optab, $A)->insn_code = CODE_FOR_$(smin$a3$)",
   "optab_handler (smax_optab, $A)->insn_code = CODE_FOR_$(smax$a3$)",
   "optab_handler (umin_optab, $A)->insn_code = CODE_FOR_$(umin$I$a3$)",
@@ -116,6 +146,9 @@ static const char * const optabs[] =
   "optab_handler (negv_optab, $A)->insn_code =\n\
     optab_handler (neg_optab, $A)->insn_code = CODE_FOR_$(neg$F$a2$)",
   "optab_handler (negv_optab, $A)->insn_code = CODE_FOR_$(negv$I$a2$)",
+  "optab_handler (neg_optab, $A)->insn_code = CODE_FOR_$(neg$Q$a2$)",
+  "optab_handler (ssneg_optab, $A)->insn_code = CODE_FOR_$(ssneg$Q$a2$)",
+  "optab_handler (usneg_optab, $A)->insn_code = CODE_FOR_$(usneg$Q$a2$)",
   "optab_handler (abs_optab, $A)->insn_code = CODE_FOR_$(abs$P$a2$)",
   "optab_handler (absv_optab, $A)->insn_code =\n\
     optab_handler (abs_optab, $A)->insn_code = CODE_FOR_$(abs$F$a2$)",
@@ -145,12 +178,13 @@ static const char * const optabs[] =
   "optab_handler (expm1_optab, $A)->insn_code = CODE_FOR_$(expm1$a2$)",
   "optab_handler (ldexp_optab, $A)->insn_code = CODE_FOR_$(ldexp$a3$)",
   "optab_handler (scalb_optab, $A)->insn_code = CODE_FOR_$(scalb$a3$)",
+  "optab_handler (significand_optab, $A)->insn_code = CODE_FOR_$(significand$a2$)",
   "optab_handler (logb_optab, $A)->insn_code = CODE_FOR_$(logb$a2$)",
   "optab_handler (ilogb_optab, $A)->insn_code = CODE_FOR_$(ilogb$a2$)",
   "optab_handler (log_optab, $A)->insn_code = CODE_FOR_$(log$a2$)",
-  "optab_handler (log10_optab, $A)->insn_code = CODE_FOR_$(log10$a2$)",  
-  "optab_handler (log2_optab, $A)->insn_code = CODE_FOR_$(log2$a2$)",  
-  "optab_handler (log1p_optab, $A)->insn_code = CODE_FOR_$(log1p$a2$)",  
+  "optab_handler (log10_optab, $A)->insn_code = CODE_FOR_$(log10$a2$)",
+  "optab_handler (log2_optab, $A)->insn_code = CODE_FOR_$(log2$a2$)",
+  "optab_handler (log1p_optab, $A)->insn_code = CODE_FOR_$(log1p$a2$)",
   "optab_handler (tan_optab, $A)->insn_code = CODE_FOR_$(tan$a2$)",
   "optab_handler (atan_optab, $A)->insn_code = CODE_FOR_$(atan$a2$)",
   "optab_handler (strlen_optab, $A)->insn_code = CODE_FOR_$(strlen$a$)",
@@ -165,15 +199,12 @@ static const char * const optabs[] =
   "optab_handler (movstrict_optab, $A)->insn_code = CODE_FOR_$(movstrict$a$)",
   "optab_handler (movmisalign_optab, $A)->insn_code = CODE_FOR_$(movmisalign$a$)",
   "optab_handler (storent_optab, $A)->insn_code = CODE_FOR_$(storent$a$)",
-  "optab_handler (cmp_optab, $A)->insn_code = CODE_FOR_$(cmp$a$)",
-  "optab_handler (tst_optab, $A)->insn_code = CODE_FOR_$(tst$a$)",
   "optab_handler (addcc_optab, $A)->insn_code = CODE_FOR_$(add$acc$)",
-  "bcc_gen_fctn[$C] = gen_$(b$c$)",
-  "setcc_gen_code[$C] = CODE_FOR_$(s$c$)",
   "movcc_gen_code[$A] = CODE_FOR_$(mov$acc$)",
   "optab_handler (cbranch_optab, $A)->insn_code = CODE_FOR_$(cbranch$a4$)",
   "optab_handler (cmov_optab, $A)->insn_code = CODE_FOR_$(cmov$a6$)",
   "optab_handler (cstore_optab, $A)->insn_code = CODE_FOR_$(cstore$a4$)",
+  "optab_handler (ctrap_optab, $A)->insn_code = CODE_FOR_$(ctrap$a4$)",
   "optab_handler (push_optab, $A)->insn_code = CODE_FOR_$(push$a1$)",
   "reload_in_optab[$A] = CODE_FOR_$(reload_in$a$)",
   "reload_out_optab[$A] = CODE_FOR_$(reload_out$a$)",
@@ -201,7 +232,6 @@ static const char * const optabs[] =
   "sync_new_xor_optab[$A] = CODE_FOR_$(sync_new_xor$I$a$)",
   "sync_new_nand_optab[$A] = CODE_FOR_$(sync_new_nand$I$a$)",
   "sync_compare_and_swap[$A] = CODE_FOR_$(sync_compare_and_swap$I$a$)",
-  "sync_compare_and_swap_cc[$A] = CODE_FOR_$(sync_compare_and_swap_cc$I$a$)",
   "sync_lock_test_and_set[$A] = CODE_FOR_$(sync_lock_test_and_set$I$a$)",
   "sync_lock_release[$A] = CODE_FOR_$(sync_lock_release$I$a$)",
   "optab_handler (vec_set_optab, $A)->insn_code = CODE_FOR_$(vec_set$a$)",
@@ -267,6 +297,7 @@ gen_insn (rtx insn)
   for (pindex = 0; pindex < ARRAY_SIZE (optabs); pindex++)
     {
       int force_float = 0, force_int = 0, force_partial_int = 0;
+      int force_fixed = 0;
       int force_consec = 0;
       int matches = 1;
 
@@ -296,6 +327,9 @@ gen_insn (rtx insn)
              case 'F':
                force_float = 1;
                break;
+             case 'Q':
+               force_fixed = 1;
+               break;
              case 'V':
                 break;
              case 'c':
@@ -332,17 +366,26 @@ gen_insn (rtx insn)
                        break;
 
                    if (*p == 0
-                       && (! force_int || mode_class[i] == MODE_INT 
+                       && (! force_int || mode_class[i] == MODE_INT
                            || mode_class[i] == MODE_VECTOR_INT)
                        && (! force_partial_int
                             || mode_class[i] == MODE_INT
                             || mode_class[i] == MODE_PARTIAL_INT
                            || mode_class[i] == MODE_VECTOR_INT)
                        && (! force_float
-                           || mode_class[i] == MODE_FLOAT 
+                           || mode_class[i] == MODE_FLOAT
                            || mode_class[i] == MODE_DECIMAL_FLOAT
                            || mode_class[i] == MODE_COMPLEX_FLOAT
-                           || mode_class[i] == MODE_VECTOR_FLOAT))
+                           || mode_class[i] == MODE_VECTOR_FLOAT)
+                       && (! force_fixed
+                           || mode_class[i] == MODE_FRACT
+                           || mode_class[i] == MODE_UFRACT
+                           || mode_class[i] == MODE_ACCUM
+                           || mode_class[i] == MODE_UACCUM
+                           || mode_class[i] == MODE_VECTOR_FRACT
+                           || mode_class[i] == MODE_VECTOR_UFRACT
+                           || mode_class[i] == MODE_VECTOR_ACCUM
+                           || mode_class[i] == MODE_VECTOR_UACCUM))
                      break;
                  }
 
@@ -353,7 +396,7 @@ gen_insn (rtx insn)
                else
                  m2 = i, np += strlen (GET_MODE_NAME(i));
 
-               force_int = force_partial_int = force_float = 0;
+               force_int = force_partial_int = force_float = force_fixed = 0;
                break;
 
              default:
@@ -440,6 +483,7 @@ from the machine description file `md'.  */\n\n");
   printf ("#include \"coretypes.h\"\n");
   printf ("#include \"tm.h\"\n");
   printf ("#include \"rtl.h\"\n");
+  printf ("#include \"tm_p.h\"\n");
   printf ("#include \"flags.h\"\n");
   printf ("#include \"insn-config.h\"\n");
   printf ("#include \"recog.h\"\n");