Home | History | Annotate | Line # | Download | only in gcn
      1  1.1.1.3  mrg /* Copyright (C) 2016-2022 Free Software Foundation, Inc.
      2      1.1  mrg 
      3      1.1  mrg    This file is free software; you can redistribute it and/or modify it under
      4      1.1  mrg    the terms of the GNU General Public License as published by the Free
      5      1.1  mrg    Software Foundation; either version 3 of the License, or (at your option)
      6      1.1  mrg    any later version.
      7      1.1  mrg 
      8      1.1  mrg    This file is distributed in the hope that it will be useful, but WITHOUT
      9      1.1  mrg    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
     10      1.1  mrg    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     11      1.1  mrg    for more details.
     12      1.1  mrg 
     13      1.1  mrg    You should have received a copy of the GNU General Public License
     14      1.1  mrg    along with GCC; see the file COPYING3.  If not see
     15      1.1  mrg    <http://www.gnu.org/licenses/>.  */
     16      1.1  mrg 
     17      1.1  mrg #include "config/gcn/gcn-opts.h"
     18      1.1  mrg 
     19      1.1  mrg #define TARGET_CPU_CPP_BUILTINS()	\
     20      1.1  mrg   do					\
     21      1.1  mrg     {					\
     22      1.1  mrg       builtin_define ("__AMDGCN__");	\
     23      1.1  mrg       if (TARGET_GCN3)			\
     24      1.1  mrg 	builtin_define ("__GCN3__");	\
     25      1.1  mrg       else if (TARGET_GCN5)		\
     26      1.1  mrg 	builtin_define ("__GCN5__");	\
     27      1.1  mrg     }					\
     28      1.1  mrg   while(0)
     29      1.1  mrg 
     30      1.1  mrg /* Support for a compile-time default architecture and tuning.
     31      1.1  mrg    The rules are:
     32      1.1  mrg    --with-arch is ignored if -march is specified.
     33      1.1  mrg    --with-tune is ignored if -mtune is specified.  */
     34      1.1  mrg #define OPTION_DEFAULT_SPECS		    \
     35      1.1  mrg   {"arch", "%{!march=*:-march=%(VALUE)}" }, \
     36      1.1  mrg   {"tune", "%{!mtune=*:-mtune=%(VALUE)}" }
     37      1.1  mrg 
     38      1.1  mrg /* Default target_flags if no switches specified.  */
     39      1.1  mrg #ifndef TARGET_DEFAULT
     40      1.1  mrg #define TARGET_DEFAULT 0
     41      1.1  mrg #endif
     42      1.1  mrg 
     43      1.1  mrg 
     44      1.1  mrg /* Storage Layout */
     46      1.1  mrg #define BITS_BIG_ENDIAN  0
     47      1.1  mrg #define BYTES_BIG_ENDIAN 0
     48      1.1  mrg #define WORDS_BIG_ENDIAN 0
     49  1.1.1.3  mrg 
     50  1.1.1.3  mrg #ifdef IN_LIBGCC2
     51  1.1.1.3  mrg /* We want DImode and TImode helpers.  */
     52  1.1.1.3  mrg #define UNITS_PER_WORD 8
     53  1.1.1.3  mrg #else
     54  1.1.1.3  mrg #define UNITS_PER_WORD 4
     55      1.1  mrg #endif
     56      1.1  mrg 
     57      1.1  mrg #define POINTER_SIZE	     64
     58      1.1  mrg #define PARM_BOUNDARY	     64
     59      1.1  mrg #define STACK_BOUNDARY	     64
     60      1.1  mrg #define FUNCTION_BOUNDARY    32
     61      1.1  mrg #define BIGGEST_ALIGNMENT    64
     62  1.1.1.3  mrg #define EMPTY_FIELD_BOUNDARY 32
     63      1.1  mrg #define MAX_FIXED_MODE_SIZE  128
     64      1.1  mrg #define MAX_REGS_PER_ADDRESS 2
     65      1.1  mrg #define STACK_SIZE_MODE      DImode
     66      1.1  mrg #define Pmode		     DImode
     67      1.1  mrg #define CASE_VECTOR_MODE     DImode
     68      1.1  mrg #define FUNCTION_MODE	     QImode
     69      1.1  mrg 
     70      1.1  mrg #define DATA_ALIGNMENT(TYPE,ALIGN) ((ALIGN) > 128 ? (ALIGN) : 128)
     71      1.1  mrg #define LOCAL_ALIGNMENT(TYPE,ALIGN) ((ALIGN) > 64 ? (ALIGN) : 64)
     72      1.1  mrg #define STACK_SLOT_ALIGNMENT(TYPE,MODE,ALIGN) ((ALIGN) > 64 ? (ALIGN) : 64)
     73      1.1  mrg #define STRICT_ALIGNMENT 1
     74      1.1  mrg 
     75      1.1  mrg /* Type Layout: match what x86_64 does.  */
     76      1.1  mrg #define INT_TYPE_SIZE		  32
     77      1.1  mrg #define LONG_TYPE_SIZE		  64
     78      1.1  mrg #define LONG_LONG_TYPE_SIZE	  64
     79      1.1  mrg #define FLOAT_TYPE_SIZE		  32
     80      1.1  mrg #define DOUBLE_TYPE_SIZE	  64
     81      1.1  mrg #define LONG_DOUBLE_TYPE_SIZE	  64
     82      1.1  mrg #define DEFAULT_SIGNED_CHAR	  1
     83      1.1  mrg #define PCC_BITFIELD_TYPE_MATTERS 1
     84      1.1  mrg 
     85      1.1  mrg /* Frame Layout */
     86      1.1  mrg #define FRAME_GROWS_DOWNWARD	     0
     87      1.1  mrg #define ARGS_GROW_DOWNWARD	     1
     88      1.1  mrg #define STACK_POINTER_OFFSET	     0
     89      1.1  mrg #define FIRST_PARM_OFFSET(FNDECL)    0
     90      1.1  mrg #define DYNAMIC_CHAIN_ADDRESS(FP)    plus_constant (Pmode, (FP), -16)
     91  1.1.1.3  mrg #define INCOMING_RETURN_ADDR_RTX     gen_rtx_REG (Pmode, LINK_REGNUM)
     92      1.1  mrg #define DWARF_FRAME_RETURN_COLUMN    16
     93      1.1  mrg #define STACK_DYNAMIC_OFFSET(FNDECL) (-crtl->outgoing_args_size)
     94      1.1  mrg #define ACCUMULATE_OUTGOING_ARGS     1
     95      1.1  mrg #define RETURN_ADDR_RTX(COUNT,FRAMEADDR) \
     96      1.1  mrg   ((COUNT) == 0 ? get_hard_reg_initial_val (Pmode, LINK_REGNUM) : NULL_RTX)
     97      1.1  mrg 
     98      1.1  mrg /* Register Basics */
    100      1.1  mrg #define FIRST_SGPR_REG	    0
    101      1.1  mrg #define SGPR_REGNO(N)	    ((N)+FIRST_SGPR_REG)
    102      1.1  mrg #define LAST_SGPR_REG	    101
    103      1.1  mrg 
    104      1.1  mrg #define FLAT_SCRATCH_REG    102
    105      1.1  mrg #define FLAT_SCRATCH_LO_REG 102
    106      1.1  mrg #define FLAT_SCRATCH_HI_REG 103
    107      1.1  mrg #define XNACK_MASK_REG	    104
    108      1.1  mrg #define XNACK_MASK_LO_REG   104
    109      1.1  mrg #define XNACK_MASK_HI_REG   105
    110      1.1  mrg #define VCC_LO_REG	    106
    111      1.1  mrg #define VCC_HI_REG	    107
    112      1.1  mrg #define VCCZ_REG	    108
    113      1.1  mrg #define TBA_REG		    109
    114      1.1  mrg #define TBA_LO_REG	    109
    115      1.1  mrg #define TBA_HI_REG	    110
    116      1.1  mrg #define TMA_REG		    111
    117      1.1  mrg #define TMA_LO_REG	    111
    118      1.1  mrg #define TMA_HI_REG	    112
    119      1.1  mrg #define TTMP0_REG	    113
    120      1.1  mrg #define TTMP11_REG	    124
    121      1.1  mrg #define M0_REG		    125
    122      1.1  mrg #define EXEC_REG	    126
    123      1.1  mrg #define EXEC_LO_REG	    126
    124      1.1  mrg #define EXEC_HI_REG	    127
    125      1.1  mrg #define EXECZ_REG	    128
    126      1.1  mrg #define SCC_REG		    129
    127      1.1  mrg /* 132-159 are reserved to simplify masks.  */
    128      1.1  mrg #define FIRST_VGPR_REG	    160
    129      1.1  mrg #define VGPR_REGNO(N)	    ((N)+FIRST_VGPR_REG)
    130      1.1  mrg #define LAST_VGPR_REG	    415
    131      1.1  mrg 
    132      1.1  mrg /* Frame Registers, and other registers */
    133      1.1  mrg 
    134      1.1  mrg #define HARD_FRAME_POINTER_REGNUM 14
    135      1.1  mrg #define STACK_POINTER_REGNUM	  16
    136      1.1  mrg #define LINK_REGNUM		  18
    137      1.1  mrg #define EXEC_SAVE_REG		  20
    138      1.1  mrg #define CC_SAVE_REG		  22
    139      1.1  mrg #define RETURN_VALUE_REG	  24	/* Must be divisible by 4.  */
    140      1.1  mrg #define STATIC_CHAIN_REGNUM	  30
    141      1.1  mrg #define WORK_ITEM_ID_Z_REG	  162
    142  1.1.1.3  mrg #define SOFT_ARG_REG		  416
    143  1.1.1.3  mrg #define FRAME_POINTER_REGNUM	  418
    144      1.1  mrg #define DWARF_LINK_REGISTER	  420
    145      1.1  mrg #define FIRST_PSEUDO_REGISTER	  421
    146      1.1  mrg 
    147      1.1  mrg #define FIRST_PARM_REG 24
    148      1.1  mrg #define NUM_PARM_REGS  6
    149      1.1  mrg 
    150      1.1  mrg /* There is no arg pointer.  Just choose random fixed register that does
    151      1.1  mrg    not intefere with anything.  */
    152      1.1  mrg #define ARG_POINTER_REGNUM SOFT_ARG_REG
    153      1.1  mrg 
    154      1.1  mrg #define HARD_FRAME_POINTER_IS_ARG_POINTER   0
    155      1.1  mrg #define HARD_FRAME_POINTER_IS_FRAME_POINTER 0
    156      1.1  mrg 
    157      1.1  mrg #define SGPR_OR_VGPR_REGNO_P(N) ((N)>=FIRST_VGPR_REG && (N) <= LAST_SGPR_REG)
    158      1.1  mrg #define SGPR_REGNO_P(N)		((N) <= LAST_SGPR_REG)
    159      1.1  mrg #define VGPR_REGNO_P(N)		((N)>=FIRST_VGPR_REG && (N) <= LAST_VGPR_REG)
    160      1.1  mrg #define SSRC_REGNO_P(N)		((N) <= SCC_REG && (N) != VCCZ_REG)
    161      1.1  mrg #define SDST_REGNO_P(N)		((N) <= EXEC_HI_REG && (N) != VCCZ_REG)
    162      1.1  mrg #define CC_REG_P(X)		(REG_P (X) && CC_REGNO_P (REGNO (X)))
    163      1.1  mrg #define CC_REGNO_P(X)		((X) == SCC_REG || (X) == VCC_REG)
    164      1.1  mrg #define FUNCTION_ARG_REGNO_P(N) \
    165      1.1  mrg   ((N) >= FIRST_PARM_REG && (N) < (FIRST_PARM_REG + NUM_PARM_REGS))
    166      1.1  mrg 
    167      1.1  mrg 
    168  1.1.1.2  mrg #define FIXED_REGISTERS {			    \
    170  1.1.1.2  mrg     /* Scalars.  */				    \
    171      1.1  mrg     1, 1, 0, 0, 1, 1, 1, 1, 1, 1,		    \
    172      1.1  mrg /*		fp    sp    lr.  */		    \
    173      1.1  mrg     1, 1, 0, 0, 0, 0, 1, 1, 0, 0,		    \
    174      1.1  mrg /*  exec_save, cc_save */			    \
    175      1.1  mrg     1, 1, 1, 1, 0, 0, 0, 0, 0, 0,		    \
    176      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,		    \
    177      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,		    \
    178      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,		    \
    179      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,		    \
    180      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,		    \
    181      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,		    \
    182      1.1  mrg     0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,		    \
    183      1.1  mrg     /* Special regs and padding.  */		    \
    184      1.1  mrg /*  flat  xnack vcc	 tba   tma   ttmp */	    \
    185      1.1  mrg     1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
    186      1.1  mrg /*			 m0 exec     scc */	    \
    187      1.1  mrg     1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, \
    188  1.1.1.2  mrg     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
    189      1.1  mrg     1, 1, 1, 1, 1, 1, 1, 1, 1, 1,		    \
    190      1.1  mrg     /* VGRPs */					    \
    191      1.1  mrg     0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    192      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    193      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    194      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    195      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    196      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    197      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    198      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    199      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    200      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    201      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    202      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    203      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    204      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    205  1.1.1.3  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    206      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    207      1.1  mrg     /* Other registers.  */			    \
    208      1.1  mrg     1, 1, 1, 1, 1				    \
    209      1.1  mrg }
    210      1.1  mrg 
    211  1.1.1.2  mrg #define CALL_USED_REGISTERS {			    \
    212      1.1  mrg     /* Scalars.  */				    \
    213      1.1  mrg     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 		    \
    214      1.1  mrg     1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 		    \
    215      1.1  mrg     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 		    \
    216      1.1  mrg     1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 		    \
    217      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 		    \
    218      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 		    \
    219      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 		    \
    220      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 		    \
    221      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 		    \
    222      1.1  mrg     0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,		    \
    223      1.1  mrg     /* Special regs and padding.  */		    \
    224      1.1  mrg     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
    225      1.1  mrg     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
    226      1.1  mrg     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
    227      1.1  mrg     1, 1, 1, 1, 1, 1, 1, 1, 1, 1,		    \
    228      1.1  mrg     /* VGRPs */					    \
    229      1.1  mrg     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
    230      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    231      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    232      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    233      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    234      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    235      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    236      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    237      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    238      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    239      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    240      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    241      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    242      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    243  1.1.1.3  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    244      1.1  mrg     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
    245      1.1  mrg     /* Other registers.  */			    \
    246      1.1  mrg     1, 1, 1, 1, 1				    \
    247      1.1  mrg }
    248      1.1  mrg 
    249      1.1  mrg 
    250      1.1  mrg #define HARD_REGNO_RENAME_OK(FROM, TO) \
    252      1.1  mrg   gcn_hard_regno_rename_ok (FROM, TO)
    253      1.1  mrg 
    254      1.1  mrg #define HARD_REGNO_CALLER_SAVE_MODE(HARDREG, NREGS, MODE) \
    255      1.1  mrg   gcn_hard_regno_caller_save_mode ((HARDREG), (NREGS), (MODE))
    256      1.1  mrg 
    257      1.1  mrg /* Register Classes */
    258      1.1  mrg 
    259      1.1  mrg enum reg_class
    260      1.1  mrg {
    261      1.1  mrg   NO_REGS,
    262      1.1  mrg 
    263      1.1  mrg   /* SCC */
    264      1.1  mrg   SCC_CONDITIONAL_REG,
    265      1.1  mrg 
    266      1.1  mrg   /* VCCZ */
    267      1.1  mrg   VCCZ_CONDITIONAL_REG,
    268      1.1  mrg 
    269      1.1  mrg   /* VCC */
    270      1.1  mrg   VCC_CONDITIONAL_REG,
    271      1.1  mrg 
    272      1.1  mrg   /* EXECZ */
    273      1.1  mrg   EXECZ_CONDITIONAL_REG,
    274      1.1  mrg 
    275      1.1  mrg   /* SCC VCCZ EXECZ */
    276      1.1  mrg   ALL_CONDITIONAL_REGS,
    277      1.1  mrg 
    278      1.1  mrg   /* EXEC */
    279      1.1  mrg   EXEC_MASK_REG,
    280      1.1  mrg 
    281      1.1  mrg   /* SGPR0-101 */
    282      1.1  mrg   SGPR_REGS,
    283      1.1  mrg 
    284      1.1  mrg   /* SGPR0-101 EXEC_LO/EXEC_HI */
    285      1.1  mrg   SGPR_EXEC_REGS,
    286      1.1  mrg 
    287      1.1  mrg   /* SGPR0-101, FLAT_SCRATCH_LO/HI, VCC LO/HI, TBA LO/HI, TMA LO/HI, TTMP0-11,
    288      1.1  mrg      M0, VCCZ, SCC
    289      1.1  mrg      (EXEC_LO/HI, EXECZ excluded to prevent compiler misuse.)  */
    290      1.1  mrg   SGPR_VOP_SRC_REGS,
    291      1.1  mrg 
    292      1.1  mrg   /* SGPR0-101, FLAT_SCRATCH_LO/HI, XNACK_MASK_LO/HI, VCC LO/HI, TBA LO/HI
    293      1.1  mrg      TMA LO/HI, TTMP0-11 */
    294      1.1  mrg   SGPR_MEM_SRC_REGS,
    295      1.1  mrg 
    296      1.1  mrg   /* SGPR0-101, FLAT_SCRATCH_LO/HI, XNACK_MASK_LO/HI, VCC LO/HI, TBA LO/HI
    297      1.1  mrg      TMA LO/HI, TTMP0-11, M0, EXEC LO/HI */
    298      1.1  mrg   SGPR_DST_REGS,
    299      1.1  mrg 
    300      1.1  mrg   /* SGPR0-101, FLAT_SCRATCH_LO/HI, XNACK_MASK_LO/HI, VCC LO/HI, TBA LO/HI
    301      1.1  mrg      TMA LO/HI, TTMP0-11 */
    302      1.1  mrg   SGPR_SRC_REGS,
    303      1.1  mrg   GENERAL_REGS,
    304      1.1  mrg   VGPR_REGS,
    305      1.1  mrg   ALL_GPR_REGS,
    306      1.1  mrg   SRCDST_REGS,
    307      1.1  mrg   AFP_REGS,
    308      1.1  mrg   ALL_REGS,
    309      1.1  mrg   LIM_REG_CLASSES
    310      1.1  mrg };
    311      1.1  mrg 
    312      1.1  mrg #define N_REG_CLASSES (int) LIM_REG_CLASSES
    313      1.1  mrg 
    314      1.1  mrg #define REG_CLASS_NAMES     \
    315      1.1  mrg {  "NO_REGS",		    \
    316      1.1  mrg    "SCC_CONDITIONAL_REG",   \
    317      1.1  mrg    "VCCZ_CONDITIONAL_REG",  \
    318      1.1  mrg    "VCC_CONDITIONAL_REG",   \
    319      1.1  mrg    "EXECZ_CONDITIONAL_REG", \
    320      1.1  mrg    "ALL_CONDITIONAL_REGS",  \
    321      1.1  mrg    "EXEC_MASK_REG",	    \
    322      1.1  mrg    "SGPR_REGS",		    \
    323      1.1  mrg    "SGPR_EXEC_REGS",	    \
    324      1.1  mrg    "SGPR_VOP3A_SRC_REGS",   \
    325      1.1  mrg    "SGPR_MEM_SRC_REGS",     \
    326      1.1  mrg    "SGPR_DST_REGS",	    \
    327      1.1  mrg    "SGPR_SRC_REGS",	    \
    328      1.1  mrg    "GENERAL_REGS",	    \
    329      1.1  mrg    "VGPR_REGS",		    \
    330      1.1  mrg    "ALL_GPR_REGS",	    \
    331      1.1  mrg    "SRCDST_REGS",	    \
    332      1.1  mrg    "AFP_REGS",		    \
    333      1.1  mrg    "ALL_REGS"		    \
    334      1.1  mrg }
    335      1.1  mrg 
    336      1.1  mrg #define NAMED_REG_MASK(N)  (1<<((N)-3*32))
    337      1.1  mrg #define NAMED_REG_MASK2(N) (1<<((N)-4*32))
    338      1.1  mrg 
    339      1.1  mrg #define REG_CLASS_CONTENTS {						   \
    340      1.1  mrg     /* NO_REGS.  */							   \
    341      1.1  mrg     {0, 0, 0, 0,							   \
    342      1.1  mrg      0, 0, 0, 0,							   \
    343      1.1  mrg      0, 0, 0, 0, 0, 0},							   \
    344      1.1  mrg     /* SCC_CONDITIONAL_REG.  */						   \
    345      1.1  mrg     {0, 0, 0, 0,							   \
    346      1.1  mrg      NAMED_REG_MASK2 (SCC_REG), 0, 0, 0,				   \
    347      1.1  mrg      0, 0, 0, 0, 0},							   \
    348      1.1  mrg     /* VCCZ_CONDITIONAL_REG.  */					   \
    349      1.1  mrg     {0, 0, 0, NAMED_REG_MASK (VCCZ_REG),				   \
    350      1.1  mrg      0, 0, 0, 0,							   \
    351      1.1  mrg      0, 0, 0, 0, 0, 0},							   \
    352      1.1  mrg     /* VCC_CONDITIONAL_REG.  */						   \
    353      1.1  mrg     {0, 0, 0, NAMED_REG_MASK (VCC_LO_REG)|NAMED_REG_MASK (VCC_HI_REG),	   \
    354      1.1  mrg      0, 0, 0, 0,							   \
    355      1.1  mrg      0, 0, 0, 0, 0, 0},							   \
    356      1.1  mrg     /* EXECZ_CONDITIONAL_REG.  */					   \
    357      1.1  mrg     {0, 0, 0, 0,							   \
    358      1.1  mrg      NAMED_REG_MASK2 (EXECZ_REG), 0, 0, 0,				   \
    359      1.1  mrg      0, 0, 0, 0, 0},							   \
    360      1.1  mrg     /* ALL_CONDITIONAL_REGS.  */					   \
    361      1.1  mrg     {0, 0, 0, NAMED_REG_MASK (VCCZ_REG),				   \
    362      1.1  mrg      NAMED_REG_MASK2 (EXECZ_REG) | NAMED_REG_MASK2 (SCC_REG), 0, 0, 0,	   \
    363      1.1  mrg      0, 0, 0, 0, 0, 0},							   \
    364      1.1  mrg     /* EXEC_MASK_REG.  */						   \
    365      1.1  mrg     {0, 0, 0, NAMED_REG_MASK (EXEC_LO_REG) | NAMED_REG_MASK (EXEC_HI_REG), \
    366      1.1  mrg      0, 0, 0, 0,							   \
    367      1.1  mrg      0, 0, 0, 0, 0, 0},							   \
    368      1.1  mrg     /* SGPR_REGS.  */							   \
    369      1.1  mrg     {0xffffffff, 0xffffffff, 0xffffffff, 0xf1,				   \
    370      1.1  mrg      0, 0, 0, 0,							   \
    371      1.1  mrg      0, 0, 0, 0, 0, 0},							   \
    372      1.1  mrg     /* SGPR_EXEC_REGS.	*/						   \
    373      1.1  mrg     {0xffffffff, 0xffffffff, 0xffffffff,				   \
    374      1.1  mrg       0xf1 | NAMED_REG_MASK (EXEC_LO_REG) | NAMED_REG_MASK (EXEC_HI_REG),  \
    375      1.1  mrg      0, 0, 0, 0,							   \
    376      1.1  mrg      0, 0, 0, 0, 0, 0},							   \
    377      1.1  mrg     /* SGPR_VOP_SRC_REGS.  */						   \
    378      1.1  mrg     {0xffffffff, 0xffffffff, 0xffffffff,				   \
    379      1.1  mrg       0xffffffff							   \
    380      1.1  mrg        -NAMED_REG_MASK (EXEC_LO_REG)					   \
    381      1.1  mrg        -NAMED_REG_MASK (EXEC_HI_REG),					   \
    382      1.1  mrg      NAMED_REG_MASK2 (SCC_REG), 0, 0, 0,				   \
    383      1.1  mrg      0, 0, 0, 0, 0, 0},							   \
    384      1.1  mrg     /* SGPR_MEM_SRC_REGS.  */						   \
    385      1.1  mrg     {0xffffffff, 0xffffffff, 0xffffffff,				   \
    386      1.1  mrg      0xffffffff-NAMED_REG_MASK (VCCZ_REG)-NAMED_REG_MASK (M0_REG)	   \
    387      1.1  mrg      -NAMED_REG_MASK (EXEC_LO_REG)-NAMED_REG_MASK (EXEC_HI_REG),	   \
    388      1.1  mrg      0, 0, 0, 0,							   \
    389      1.1  mrg      0, 0, 0, 0, 0, 0},							   \
    390      1.1  mrg     /* SGPR_DST_REGS.  */						   \
    391      1.1  mrg     {0xffffffff, 0xffffffff, 0xffffffff,				   \
    392      1.1  mrg      0xffffffff-NAMED_REG_MASK (VCCZ_REG),				   \
    393      1.1  mrg      0, 0, 0, 0,							   \
    394      1.1  mrg      0, 0, 0, 0, 0, 0},							   \
    395      1.1  mrg     /* SGPR_SRC_REGS.  */						   \
    396      1.1  mrg     {0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,			   \
    397      1.1  mrg      NAMED_REG_MASK2 (EXECZ_REG) | NAMED_REG_MASK2 (SCC_REG), 0, 0, 0,	   \
    398      1.1  mrg      0, 0, 0, 0, 0, 0},							   \
    399      1.1  mrg     /* GENERAL_REGS.  */						   \
    400      1.1  mrg     {0xffffffff, 0xffffffff, 0xffffffff, 0xf1,				   \
    401      1.1  mrg      0, 0, 0, 0,							   \
    402      1.1  mrg      0, 0, 0, 0, 0, 0},							   \
    403      1.1  mrg     /* VGPR_REGS.  */							   \
    404      1.1  mrg     {0, 0, 0, 0,							   \
    405      1.1  mrg      0,		 0xffffffff, 0xffffffff, 0xffffffff,			   \
    406      1.1  mrg      0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0},	   \
    407      1.1  mrg     /* ALL_GPR_REGS.  */						   \
    408      1.1  mrg     {0xffffffff, 0xffffffff, 0xffffffff, 0xf1,				   \
    409      1.1  mrg      0,		 0xffffffff, 0xffffffff, 0xffffffff,			   \
    410      1.1  mrg      0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0},	   \
    411      1.1  mrg     /* SRCDST_REGS.  */							   \
    412      1.1  mrg     {0xffffffff, 0xffffffff, 0xffffffff,				   \
    413      1.1  mrg      0xffffffff-NAMED_REG_MASK (VCCZ_REG),				   \
    414      1.1  mrg      0,		 0xffffffff, 0xffffffff, 0xffffffff,			   \
    415      1.1  mrg      0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0},	   \
    416      1.1  mrg     /* AFP_REGS.  */							   \
    417      1.1  mrg     {0, 0, 0, 0,							   \
    418      1.1  mrg      0, 0, 0, 0,							   \
    419      1.1  mrg      0, 0, 0, 0, 0, 0xf},						   \
    420      1.1  mrg     /* ALL_REGS.  */							   \
    421      1.1  mrg     {0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,			   \
    422      1.1  mrg      0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,			   \
    423      1.1  mrg      0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0 }}
    424      1.1  mrg 
    425      1.1  mrg #define REGNO_REG_CLASS(REGNO) gcn_regno_reg_class (REGNO)
    426      1.1  mrg #define MODE_CODE_BASE_REG_CLASS(MODE, AS, OUTER, INDEX) \
    427      1.1  mrg 	 gcn_mode_code_base_reg_class (MODE, AS, OUTER, INDEX)
    428      1.1  mrg #define REGNO_MODE_CODE_OK_FOR_BASE_P(NUM, MODE, AS, OUTER, INDEX) \
    429      1.1  mrg 	 gcn_regno_mode_code_ok_for_base_p (NUM, MODE, AS, OUTER, INDEX)
    430      1.1  mrg #define INDEX_REG_CLASS VGPR_REGS
    431      1.1  mrg #define REGNO_OK_FOR_INDEX_P(regno) regno_ok_for_index_p (regno)
    432      1.1  mrg 
    433      1.1  mrg 
    434      1.1  mrg /* Address spaces.  */
    436      1.1  mrg enum gcn_address_spaces
    437      1.1  mrg {
    438      1.1  mrg   ADDR_SPACE_DEFAULT = 0,
    439      1.1  mrg   ADDR_SPACE_FLAT,
    440      1.1  mrg   ADDR_SPACE_SCALAR_FLAT,
    441      1.1  mrg   ADDR_SPACE_FLAT_SCRATCH,
    442      1.1  mrg   ADDR_SPACE_LDS,
    443      1.1  mrg   ADDR_SPACE_GDS,
    444      1.1  mrg   ADDR_SPACE_SCRATCH,
    445      1.1  mrg   ADDR_SPACE_GLOBAL
    446      1.1  mrg };
    447      1.1  mrg #define REGISTER_TARGET_PRAGMAS() do {                               \
    448      1.1  mrg   c_register_addr_space ("__flat", ADDR_SPACE_FLAT);                 \
    449      1.1  mrg   c_register_addr_space ("__flat_scratch", ADDR_SPACE_FLAT_SCRATCH); \
    450      1.1  mrg   c_register_addr_space ("__scalar_flat", ADDR_SPACE_SCALAR_FLAT);   \
    451      1.1  mrg   c_register_addr_space ("__lds", ADDR_SPACE_LDS);                   \
    452      1.1  mrg   c_register_addr_space ("__gds", ADDR_SPACE_GDS);                   \
    453      1.1  mrg   c_register_addr_space ("__global", ADDR_SPACE_GLOBAL);             \
    454      1.1  mrg } while (0);
    455      1.1  mrg 
    456      1.1  mrg #define STACK_ADDR_SPACE \
    457      1.1  mrg   (TARGET_GCN5_PLUS ? ADDR_SPACE_GLOBAL : ADDR_SPACE_FLAT)
    458      1.1  mrg #define DEFAULT_ADDR_SPACE \
    459      1.1  mrg   ((cfun && cfun->machine && !cfun->machine->use_flat_addressing) \
    460      1.1  mrg    ? ADDR_SPACE_GLOBAL : ADDR_SPACE_FLAT)
    461      1.1  mrg #define AS_SCALAR_FLAT_P(AS)   ((AS) == ADDR_SPACE_SCALAR_FLAT)
    462      1.1  mrg #define AS_FLAT_SCRATCH_P(AS)  ((AS) == ADDR_SPACE_FLAT_SCRATCH)
    463      1.1  mrg #define AS_FLAT_P(AS)	       ((AS) == ADDR_SPACE_FLAT \
    464      1.1  mrg 				|| ((AS) == ADDR_SPACE_DEFAULT \
    465      1.1  mrg 				    && DEFAULT_ADDR_SPACE == ADDR_SPACE_FLAT))
    466      1.1  mrg #define AS_LDS_P(AS)	       ((AS) == ADDR_SPACE_LDS)
    467      1.1  mrg #define AS_GDS_P(AS)	       ((AS) == ADDR_SPACE_GDS)
    468      1.1  mrg #define AS_SCRATCH_P(AS)       ((AS) == ADDR_SPACE_SCRATCH)
    469      1.1  mrg #define AS_GLOBAL_P(AS)        ((AS) == ADDR_SPACE_GLOBAL \
    470      1.1  mrg 				|| ((AS) == ADDR_SPACE_DEFAULT \
    471      1.1  mrg 				    && DEFAULT_ADDR_SPACE == ADDR_SPACE_GLOBAL))
    472      1.1  mrg #define AS_ANY_FLAT_P(AS)      (AS_FLAT_SCRATCH_P (AS) || AS_FLAT_P (AS))
    473      1.1  mrg #define AS_ANY_DS_P(AS)	       (AS_LDS_P (AS) || AS_GDS_P (AS))
    474      1.1  mrg 
    475      1.1  mrg 
    476      1.1  mrg /* Instruction Output */
    478      1.1  mrg #define REGISTER_NAMES							    \
    479      1.1  mrg    {"s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", "s8", "s9", "s10",	    \
    480      1.1  mrg     "s11", "s12", "s13", "s14", "s15", "s16", "s17", "s18", "s19", "s20",   \
    481      1.1  mrg     "s21", "s22", "s23", "s24", "s25", "s26", "s27", "s28", "s29", "s30",   \
    482      1.1  mrg     "s31", "s32", "s33", "s34", "s35", "s36", "s37", "s38", "s39", "s40",   \
    483      1.1  mrg     "s41", "s42", "s43", "s44", "s45", "s46", "s47", "s48", "s49", "s50",   \
    484      1.1  mrg     "s51", "s52", "s53", "s54", "s55", "s56", "s57", "s58", "s59", "s60",   \
    485      1.1  mrg     "s61", "s62", "s63", "s64", "s65", "s66", "s67", "s68", "s69", "s70",   \
    486      1.1  mrg     "s71", "s72", "s73", "s74", "s75", "s76", "s77", "s78", "s79", "s80",   \
    487      1.1  mrg     "s81", "s82", "s83", "s84", "s85", "s86", "s87", "s88", "s89", "s90",   \
    488      1.1  mrg     "s91", "s92", "s93", "s94", "s95", "s96", "s97", "s98", "s99",	    \
    489      1.1  mrg     "s100", "s101",							    \
    490      1.1  mrg     "flat_scratch_lo", "flat_scratch_hi", "xnack_mask_lo", "xnack_mask_hi", \
    491      1.1  mrg     "vcc_lo", "vcc_hi", "vccz", "tba_lo", "tba_hi", "tma_lo", "tma_hi",     \
    492      1.1  mrg     "ttmp0", "ttmp1", "ttmp2", "ttmp3", "ttmp4", "ttmp5", "ttmp6", "ttmp7", \
    493      1.1  mrg     "ttmp8", "ttmp9", "ttmp10", "ttmp11", "m0", "exec_lo", "exec_hi",	    \
    494      1.1  mrg     "execz", "scc",							    \
    495      1.1  mrg     "res130", "res131", "res132", "res133", "res134", "res135", "res136",   \
    496      1.1  mrg     "res137", "res138", "res139", "res140", "res141", "res142", "res143",   \
    497      1.1  mrg     "res144", "res145", "res146", "res147", "res148", "res149", "res150",   \
    498      1.1  mrg     "res151", "res152", "res153", "res154", "res155", "res156", "res157",   \
    499      1.1  mrg     "res158", "res159",							    \
    500      1.1  mrg     "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9", "v10",	    \
    501      1.1  mrg     "v11", "v12", "v13", "v14", "v15", "v16", "v17", "v18", "v19", "v20",   \
    502      1.1  mrg     "v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",   \
    503      1.1  mrg     "v31", "v32", "v33", "v34", "v35", "v36", "v37", "v38", "v39", "v40",   \
    504      1.1  mrg     "v41", "v42", "v43", "v44", "v45", "v46", "v47", "v48", "v49", "v50",   \
    505      1.1  mrg     "v51", "v52", "v53", "v54", "v55", "v56", "v57", "v58", "v59", "v60",   \
    506      1.1  mrg     "v61", "v62", "v63", "v64", "v65", "v66", "v67", "v68", "v69", "v70",   \
    507      1.1  mrg     "v71", "v72", "v73", "v74", "v75", "v76", "v77", "v78", "v79", "v80",   \
    508      1.1  mrg     "v81", "v82", "v83", "v84", "v85", "v86", "v87", "v88", "v89", "v90",   \
    509      1.1  mrg     "v91", "v92", "v93", "v94", "v95", "v96", "v97", "v98", "v99", "v100",  \
    510      1.1  mrg     "v101", "v102", "v103", "v104", "v105", "v106", "v107", "v108", "v109", \
    511      1.1  mrg     "v110", "v111", "v112", "v113", "v114", "v115", "v116", "v117", "v118", \
    512      1.1  mrg     "v119", "v120", "v121", "v122", "v123", "v124", "v125", "v126", "v127", \
    513      1.1  mrg     "v128", "v129", "v130", "v131", "v132", "v133", "v134", "v135", "v136", \
    514      1.1  mrg     "v137", "v138", "v139", "v140", "v141", "v142", "v143", "v144", "v145", \
    515      1.1  mrg     "v146", "v147", "v148", "v149", "v150", "v151", "v152", "v153", "v154", \
    516      1.1  mrg     "v155", "v156", "v157", "v158", "v159", "v160", "v161", "v162", "v163", \
    517      1.1  mrg     "v164", "v165", "v166", "v167", "v168", "v169", "v170", "v171", "v172", \
    518      1.1  mrg     "v173", "v174", "v175", "v176", "v177", "v178", "v179", "v180", "v181", \
    519      1.1  mrg     "v182", "v183", "v184", "v185", "v186", "v187", "v188", "v189", "v190", \
    520      1.1  mrg     "v191", "v192", "v193", "v194", "v195", "v196", "v197", "v198", "v199", \
    521      1.1  mrg     "v200", "v201", "v202", "v203", "v204", "v205", "v206", "v207", "v208", \
    522  1.1.1.3  mrg     "v209", "v210", "v211", "v212", "v213", "v214", "v215", "v216", "v217", \
    523      1.1  mrg     "v218", "v219", "v220", "v221", "v222", "v223", "v224", "v225", "v226", \
    524      1.1  mrg     "v227", "v228", "v229", "v230", "v231", "v232", "v233", "v234", "v235", \
    525      1.1  mrg     "v236", "v237", "v238", "v239", "v240", "v241", "v242", "v243", "v244", \
    526      1.1  mrg     "v245", "v246", "v247", "v248", "v249", "v250", "v251", "v252", "v253", \
    527      1.1  mrg     "v254", "v255",							    \
    528      1.1  mrg     "?ap0", "?ap1", "?fp0", "?fp1", "?dwlr" }
    529      1.1  mrg 
    530      1.1  mrg #define PRINT_OPERAND(FILE, X, CODE)  print_operand(FILE, X, CODE)
    531      1.1  mrg #define PRINT_OPERAND_ADDRESS(FILE, ADDR)  print_operand_address (FILE, ADDR)
    532      1.1  mrg #define PRINT_OPERAND_PUNCT_VALID_P(CODE) (CODE == '^')
    533  1.1.1.3  mrg 
    534      1.1  mrg 
    535      1.1  mrg /* Register Arguments */
    537      1.1  mrg 
    538      1.1  mrg #ifndef USED_FOR_TARGET
    539      1.1  mrg 
    540      1.1  mrg #define GCN_KERNEL_ARG_TYPES 16
    541      1.1  mrg struct GTY(()) gcn_kernel_args
    542      1.1  mrg {
    543      1.1  mrg   long requested;
    544      1.1  mrg   int reg[GCN_KERNEL_ARG_TYPES];
    545      1.1  mrg   int order[GCN_KERNEL_ARG_TYPES];
    546      1.1  mrg   int nargs, nsgprs;
    547      1.1  mrg };
    548      1.1  mrg 
    549      1.1  mrg typedef struct gcn_args
    550      1.1  mrg {
    551      1.1  mrg   /* True if this isn't a kernel (HSA runtime entrypoint).  */
    552      1.1  mrg   bool normal_function;
    553      1.1  mrg   tree fntype;
    554      1.1  mrg   struct gcn_kernel_args args;
    555      1.1  mrg   int num;
    556      1.1  mrg   int offset;
    557      1.1  mrg   int alignment;
    558      1.1  mrg } CUMULATIVE_ARGS;
    559      1.1  mrg #endif
    560      1.1  mrg 
    561      1.1  mrg #define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,FNDECL,N_NAMED_ARGS) \
    562      1.1  mrg   gcn_init_cumulative_args (&(CUM), (FNTYPE), (LIBNAME), (FNDECL),   \
    563      1.1  mrg 			    (N_NAMED_ARGS) != -1)
    564      1.1  mrg 
    565      1.1  mrg 
    566      1.1  mrg #ifndef USED_FOR_TARGET
    568      1.1  mrg 
    569      1.1  mrg #include "hash-table.h"
    570      1.1  mrg #include "hash-map.h"
    571      1.1  mrg #include "vec.h"
    572      1.1  mrg 
    573      1.1  mrg struct GTY(()) machine_function
    574      1.1  mrg {
    575      1.1  mrg   struct gcn_kernel_args args;
    576      1.1  mrg   int kernarg_segment_alignment;
    577      1.1  mrg   int kernarg_segment_byte_size;
    578      1.1  mrg   /* Frame layout info for normal functions.  */
    579  1.1.1.3  mrg   bool normal_function;
    580  1.1.1.3  mrg   bool need_frame_pointer;
    581      1.1  mrg   bool lr_needs_saving;
    582      1.1  mrg   HOST_WIDE_INT outgoing_args_size;
    583      1.1  mrg   HOST_WIDE_INT pretend_size;
    584      1.1  mrg   HOST_WIDE_INT local_vars;
    585      1.1  mrg   HOST_WIDE_INT callee_saves;
    586      1.1  mrg 
    587      1.1  mrg   unsigned HOST_WIDE_INT reduction_base;
    588      1.1  mrg   unsigned HOST_WIDE_INT reduction_limit;
    589      1.1  mrg 
    590      1.1  mrg   bool use_flat_addressing;
    591      1.1  mrg };
    592      1.1  mrg #endif
    593      1.1  mrg 
    594      1.1  mrg 
    595      1.1  mrg /* Codes for all the GCN builtins.  */
    597      1.1  mrg 
    598      1.1  mrg enum gcn_builtin_codes
    599      1.1  mrg {
    600      1.1  mrg #define DEF_BUILTIN(fcode, icode, name, type, params, expander) \
    601      1.1  mrg   GCN_BUILTIN_ ## fcode,
    602      1.1  mrg #define DEF_BUILTIN_BINOP_INT_FP(fcode, ic, name)	\
    603      1.1  mrg   GCN_BUILTIN_ ## fcode ## _V64SI,			\
    604      1.1  mrg   GCN_BUILTIN_ ## fcode ## _V64SI_unspec,
    605      1.1  mrg #include "gcn-builtins.def"
    606      1.1  mrg #undef DEF_BUILTIN
    607      1.1  mrg #undef DEF_BUILTIN_BINOP_INT_FP
    608      1.1  mrg   GCN_BUILTIN_MAX
    609      1.1  mrg };
    610      1.1  mrg 
    611      1.1  mrg 
    612      1.1  mrg /* Misc */
    614  1.1.1.2  mrg 
    615  1.1.1.2  mrg /* We can load/store 128-bit quantities, but having this larger than
    616  1.1.1.2  mrg    MAX_FIXED_MODE_SIZE (which we want to be 64 bits) causes problems.  */
    617      1.1  mrg #define MOVE_MAX 8
    618      1.1  mrg 
    619      1.1  mrg #define AVOID_CCMODE_COPIES 1
    620      1.1  mrg #define SLOW_BYTE_ACCESS 0
    621      1.1  mrg #define WORD_REGISTER_OPERATIONS 1
    622      1.1  mrg 
    623      1.1  mrg /* Flag values are either BImode or DImode, but either way the compiler
    624      1.1  mrg    should assume that all the bits are live.  */
    625      1.1  mrg #define STORE_FLAG_VALUE -1
    626      1.1  mrg 
    627      1.1  mrg /* Definitions for register eliminations.
    628      1.1  mrg 
    629      1.1  mrg    This is an array of structures.  Each structure initializes one pair
    630      1.1  mrg    of eliminable registers.  The "from" register number is given first,
    631      1.1  mrg    followed by "to".  Eliminations of the same "from" register are listed
    632      1.1  mrg    in order of preference.  */
    633      1.1  mrg 
    634      1.1  mrg #define ELIMINABLE_REGS					\
    635      1.1  mrg {{ ARG_POINTER_REGNUM, STACK_POINTER_REGNUM },		\
    636      1.1  mrg  { ARG_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM },	\
    637      1.1  mrg  { FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM },	\
    638      1.1  mrg  { FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM }}
    639      1.1  mrg 
    640      1.1  mrg /* Define the offset between two registers, one to be eliminated, and the
    641      1.1  mrg    other its replacement, at the start of a routine.  */
    642      1.1  mrg 
    643      1.1  mrg #define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET)	\
    644      1.1  mrg   ((OFFSET) = gcn_initial_elimination_offset ((FROM), (TO)))
    645      1.1  mrg 
    646      1.1  mrg 
    647      1.1  mrg /* Define this macro if it is advisable to hold scalars in registers
    648      1.1  mrg    in a wider mode than that declared by the program.  In such cases,
    649      1.1  mrg    the value is constrained to be within the bounds of the declared
    650      1.1  mrg    type, but kept valid in the wider mode.  The signedness of the
    651      1.1  mrg    extension may differ from that of the type.  */
    652      1.1  mrg 
    653      1.1  mrg #define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE)			\
    654  1.1.1.2  mrg   if (GET_MODE_CLASS (MODE) == MODE_INT				\
    655  1.1.1.2  mrg       && (TYPE == NULL || TREE_CODE (TYPE) != VECTOR_TYPE)	\
    656  1.1.1.2  mrg       && GET_MODE_SIZE (MODE) < UNITS_PER_WORD)			\
    657  1.1.1.2  mrg     {								\
    658      1.1  mrg       (MODE) = SImode;						\
    659      1.1  mrg     }
    660      1.1  mrg 
    661      1.1  mrg /* This needs to match gcn_function_value.  */
    662      1.1  mrg #define LIBCALL_VALUE(MODE) gen_rtx_REG (MODE, SGPR_REGNO (RETURN_VALUE_REG))
    663      1.1  mrg 
    664      1.1  mrg /* The s_ff0 and s_flbit instructions return -1 if no input bits are set.  */
    665      1.1  mrg #define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = -1, 2)
    666      1.1  mrg #define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = -1, 2)
    667      1.1  mrg 
    668      1.1  mrg 
    669      1.1  mrg /* Costs.  */
    671      1.1  mrg 
    672      1.1  mrg /* Branches are to be dicouraged when theres an alternative.
    673      1.1  mrg    FIXME: This number is plucked from the air.  */
    674               #define BRANCH_COST(SPEED_P, PREDICABLE_P) 10
    675               
    676               
    677               /* Profiling */
    679               #define FUNCTION_PROFILER(FILE, LABELNO)
    680               #define NO_PROFILE_COUNTERS 1
    681               #define PROFILE_BEFORE_PROLOGUE 0
    682               
    683               /* Trampolines */
    684               #define TRAMPOLINE_SIZE 36
    685               #define TRAMPOLINE_ALIGNMENT 64
    686