Home | History | Annotate | Line # | Download | only in s390
      1  1.1  mrg /* Common data structures used for builtin handling on S/390.
      2  1.7  mrg    Copyright (C) 2015-2022 Free Software Foundation, Inc.
      3  1.1  mrg 
      4  1.1  mrg    Contributed by Andreas Krebbel (Andreas.Krebbel (at) de.ibm.com).
      5  1.1  mrg 
      6  1.1  mrg    This file is part of GCC.
      7  1.1  mrg 
      8  1.1  mrg    GCC is free software; you can redistribute it and/or modify it
      9  1.1  mrg    under the terms of the GNU General Public License as published by
     10  1.1  mrg    the Free Software Foundation; either version 3, or (at your option)
     11  1.1  mrg    any later version.
     12  1.1  mrg 
     13  1.1  mrg    GCC is distributed in the hope that it will be useful, but WITHOUT
     14  1.1  mrg    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     15  1.1  mrg    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
     16  1.1  mrg    License for more details.
     17  1.1  mrg 
     18  1.1  mrg    You should have received a copy of the GNU General Public License
     19  1.1  mrg    along with GCC; see the file COPYING3.  If not see
     20  1.1  mrg    <http://www.gnu.org/licenses/>.  */
     21  1.1  mrg 
     22  1.1  mrg /* This files contains data structure definitions which can be used by
     23  1.7  mrg    s390-builtins.cc as well as s390-c.cc.  Since the latter is
     24  1.1  mrg    considered to be part of the front-end we have to be careful not
     25  1.1  mrg    to use any of tree and rtx like data structures.  */
     26  1.1  mrg 
     27  1.1  mrg /* Builtin types, data and prototypes. */
     28  1.1  mrg 
     29  1.1  mrg enum s390_builtin_type_index
     30  1.1  mrg {
     31  1.1  mrg #undef DEF_TYPE
     32  1.1  mrg #undef DEF_POINTER_TYPE
     33  1.1  mrg #undef DEF_DISTINCT_TYPE
     34  1.1  mrg #undef DEF_VECTOR_TYPE
     35  1.1  mrg #undef DEF_OPAQUE_VECTOR_TYPE
     36  1.1  mrg #undef DEF_FN_TYPE
     37  1.1  mrg #undef DEF_OV_TYPE
     38  1.1  mrg #define DEF_TYPE(INDEX, ...) INDEX,
     39  1.1  mrg #define DEF_POINTER_TYPE(INDEX, ...) INDEX,
     40  1.1  mrg #define DEF_DISTINCT_TYPE(INDEX, ...) INDEX,
     41  1.1  mrg #define DEF_VECTOR_TYPE(INDEX, ...) INDEX,
     42  1.1  mrg #define DEF_OPAQUE_VECTOR_TYPE(INDEX, ...) INDEX,
     43  1.1  mrg #define DEF_FN_TYPE(...)
     44  1.1  mrg #define DEF_OV_TYPE(...)
     45  1.1  mrg #include "s390-builtin-types.def"
     46  1.1  mrg   BT_MAX
     47  1.1  mrg };
     48  1.1  mrg 
     49  1.1  mrg enum s390_builtin_fn_type_index
     50  1.1  mrg {
     51  1.1  mrg #undef DEF_TYPE
     52  1.1  mrg #undef DEF_POINTER_TYPE
     53  1.1  mrg #undef DEF_DISTINCT_TYPE
     54  1.1  mrg #undef DEF_VECTOR_TYPE
     55  1.1  mrg #undef DEF_OPAQUE_VECTOR_TYPE
     56  1.1  mrg #undef DEF_FN_TYPE
     57  1.1  mrg #undef DEF_OV_TYPE
     58  1.1  mrg #define DEF_TYPE(...)
     59  1.1  mrg #define DEF_POINTER_TYPE(...)
     60  1.1  mrg #define DEF_DISTINCT_TYPE(...)
     61  1.1  mrg #define DEF_VECTOR_TYPE(...)
     62  1.1  mrg #define DEF_OPAQUE_VECTOR_TYPE(...)
     63  1.1  mrg #define DEF_FN_TYPE(INDEX, ...) INDEX,
     64  1.1  mrg #define DEF_OV_TYPE(...)
     65  1.1  mrg #include "s390-builtin-types.def"
     66  1.1  mrg   BT_FN_MAX
     67  1.1  mrg };
     68  1.1  mrg 
     69  1.1  mrg enum s390_builtin_ov_type_index
     70  1.1  mrg {
     71  1.1  mrg #undef DEF_TYPE
     72  1.1  mrg #undef DEF_POINTER_TYPE
     73  1.1  mrg #undef DEF_DISTINCT_TYPE
     74  1.1  mrg #undef DEF_VECTOR_TYPE
     75  1.1  mrg #undef DEF_OPAQUE_VECTOR_TYPE
     76  1.1  mrg #undef DEF_FN_TYPE
     77  1.1  mrg #undef DEF_OV_TYPE
     78  1.1  mrg #define DEF_TYPE(...)
     79  1.1  mrg #define DEF_POINTER_TYPE(...)
     80  1.1  mrg #define DEF_DISTINCT_TYPE(...)
     81  1.1  mrg #define DEF_VECTOR_TYPE(...)
     82  1.1  mrg #define DEF_OPAQUE_VECTOR_TYPE(...)
     83  1.1  mrg #define DEF_FN_TYPE(...)
     84  1.1  mrg #define DEF_OV_TYPE(INDEX, ...) INDEX,
     85  1.1  mrg #include "s390-builtin-types.def"
     86  1.1  mrg   BT_OV_MAX
     87  1.1  mrg };
     88  1.1  mrg 
     89  1.1  mrg #define MAX_OV_OPERANDS 6
     90  1.1  mrg 
     91  1.1  mrg extern tree s390_builtin_types[BT_MAX];
     92  1.1  mrg extern tree s390_builtin_fn_types[BT_FN_MAX];
     93  1.1  mrg 
     94  1.1  mrg   /* Builtins.  */
     95  1.1  mrg 
     96  1.1  mrg enum s390_builtins {
     97  1.1  mrg #undef B_DEF
     98  1.1  mrg #undef OB_DEF
     99  1.1  mrg #undef OB_DEF_VAR
    100  1.1  mrg #define B_DEF(NAME, ...) S390_BUILTIN_##NAME,
    101  1.1  mrg #define OB_DEF(...)
    102  1.1  mrg #define OB_DEF_VAR(...)
    103  1.1  mrg 
    104  1.1  mrg #include "s390-builtins.def"
    105  1.1  mrg   S390_BUILTIN_MAX
    106  1.1  mrg };
    107  1.1  mrg 
    108  1.1  mrg 
    109  1.1  mrg /* Generate an enumeration of all overloaded builtins defined with
    110  1.1  mrg    OB_DEF in s390-builtins.def.  */
    111  1.1  mrg enum s390_overloaded_builtins {
    112  1.1  mrg #undef B_DEF
    113  1.1  mrg #undef OB_DEF
    114  1.1  mrg #undef OB_DEF_VAR
    115  1.1  mrg #define B_DEF(...)
    116  1.1  mrg #define OB_DEF(NAME, ...) S390_OVERLOADED_BUILTIN_##NAME,
    117  1.1  mrg #define OB_DEF_VAR(...)
    118  1.1  mrg #include "s390-builtins.def"
    119  1.1  mrg S390_OVERLOADED_BUILTIN_MAX
    120  1.1  mrg };
    121  1.1  mrg 
    122  1.1  mrg /* Generate an enumeration of all variants of overloaded builtins
    123  1.1  mrg    defined with OB_DEF_VAR in s390-builtins.def.  */
    124  1.1  mrg enum s390_overloaded_builtin_vars {
    125  1.1  mrg #undef B_DEF
    126  1.1  mrg #undef OB_DEF
    127  1.1  mrg #undef OB_DEF_VAR
    128  1.1  mrg #define B_DEF(...)
    129  1.1  mrg #define OB_DEF(...)
    130  1.1  mrg #define OB_DEF_VAR(NAME, ...) S390_OVERLOADED_BUILTIN_VAR_##NAME,
    131  1.1  mrg #include "s390-builtins.def"
    132  1.1  mrg S390_OVERLOADED_BUILTIN_VAR_MAX
    133  1.1  mrg };
    134  1.1  mrg 
    135  1.1  mrg #define S390_OVERLOADED_BUILTIN_OFFSET S390_BUILTIN_MAX
    136  1.1  mrg #define S390_OVERLOADED_BUILTIN_VAR_OFFSET \
    137  1.1  mrg   (S390_BUILTIN_MAX + S390_OVERLOADED_BUILTIN_MAX)
    138  1.1  mrg #define S390_ALL_BUILTIN_MAX				\
    139  1.1  mrg   (S390_BUILTIN_MAX + S390_OVERLOADED_BUILTIN_MAX +	\
    140  1.1  mrg    S390_OVERLOADED_BUILTIN_VAR_MAX)
    141  1.1  mrg 
    142  1.1  mrg extern const unsigned int bflags_builtin[S390_BUILTIN_MAX + 1];
    143  1.1  mrg extern const unsigned int opflags_builtin[S390_BUILTIN_MAX + 1];
    144  1.1  mrg 
    145  1.1  mrg extern const unsigned int
    146  1.1  mrg   bflags_overloaded_builtin[S390_OVERLOADED_BUILTIN_MAX + 1];
    147  1.1  mrg extern const unsigned int
    148  1.3  mrg   bflags_overloaded_builtin_var[S390_OVERLOADED_BUILTIN_VAR_MAX + 1];
    149  1.3  mrg extern const unsigned int
    150  1.1  mrg   opflags_overloaded_builtin_var[S390_OVERLOADED_BUILTIN_VAR_MAX + 1];
    151  1.1  mrg 
    152  1.1  mrg static inline unsigned int
    153  1.1  mrg bflags_for_builtin (int fcode)
    154  1.1  mrg {
    155  1.1  mrg   if (fcode >= S390_OVERLOADED_BUILTIN_VAR_OFFSET)
    156  1.1  mrg     gcc_unreachable ();
    157  1.1  mrg   else if (fcode >= S390_OVERLOADED_BUILTIN_OFFSET)
    158  1.1  mrg     return bflags_overloaded_builtin[fcode - S390_BUILTIN_MAX];
    159  1.1  mrg   else
    160  1.1  mrg     return bflags_builtin[fcode];
    161  1.1  mrg }
    162  1.1  mrg 
    163  1.1  mrg static inline unsigned int
    164  1.1  mrg opflags_for_builtin (int fcode)
    165  1.1  mrg {
    166  1.1  mrg   if (fcode >= S390_OVERLOADED_BUILTIN_VAR_OFFSET)
    167  1.1  mrg     return opflags_overloaded_builtin_var[fcode -
    168  1.1  mrg 					  S390_OVERLOADED_BUILTIN_VAR_OFFSET];
    169  1.1  mrg   else if (fcode >= S390_OVERLOADED_BUILTIN_OFFSET)
    170  1.1  mrg     gcc_unreachable ();
    171  1.1  mrg   else
    172  1.1  mrg     return opflags_builtin[fcode];
    173  1.1  mrg }
    174  1.1  mrg 
    175  1.1  mrg extern tree s390_builtin_decls[S390_BUILTIN_MAX +
    176  1.1  mrg 			       S390_OVERLOADED_BUILTIN_MAX +
    177  1.1  mrg 			       S390_OVERLOADED_BUILTIN_VAR_MAX];
    178