(root)/
gcc-13.2.0/
gcc/
config/
arm/
aarch-cost-tables.h
       1  /* RTX cost tables shared between arm and aarch64.
       2  
       3     Copyright (C) 2013-2023 Free Software Foundation, Inc.
       4     Contributed by ARM Ltd.
       5  
       6     This file is part of GCC.
       7  
       8     GCC is free software; you can redistribute it and/or modify it
       9     under the terms of the GNU General Public License as published
      10     by the Free Software Foundation; either version 3, or (at your
      11     option) any later version.
      12  
      13     GCC is distributed in the hope that it will be useful, but WITHOUT
      14     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
      15     or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
      16     License for more details.
      17  
      18     You should have received a copy of the GNU General Public License
      19     along with GCC; see the file COPYING3.  If not see
      20     <http://www.gnu.org/licenses/>.  */
      21  
      22  #ifndef GCC_AARCH_COST_TABLES_H
      23  #define GCC_AARCH_COST_TABLES_H
      24  
      25  const struct cpu_cost_table generic_extra_costs =
      26  {
      27    /* ALU */
      28    {
      29      0,			/* arith.  */
      30      0,			/* logical.  */
      31      0,			/* shift.  */
      32      COSTS_N_INSNS (1),	/* shift_reg.  */
      33      0,			/* arith_shift.  */
      34      COSTS_N_INSNS (1),	/* arith_shift_reg.  */
      35      0,			/* log_shift.  */
      36      COSTS_N_INSNS (1),	/* log_shift_reg.  */
      37      0,			/* extend.  */
      38      COSTS_N_INSNS (1),	/* extend_arith.  */
      39      0,			/* bfi.  */
      40      0,			/* bfx.  */
      41      0,			/* clz.  */
      42      0,			/* rev.  */
      43      COSTS_N_INSNS (1),	/* non_exec.  */
      44      false		/* non_exec_costs_exec.  */
      45    },
      46    {
      47      /* MULT SImode */
      48      {
      49        COSTS_N_INSNS (2),	/* simple.  */
      50        COSTS_N_INSNS (1),	/* flag_setting.  */
      51        COSTS_N_INSNS (2),	/* extend.  */
      52        COSTS_N_INSNS (3),	/* add.  */
      53        COSTS_N_INSNS (3),	/* extend_add.  */
      54        COSTS_N_INSNS (8)		/* idiv.  */
      55      },
      56      /* MULT DImode */
      57      {
      58        0,			/* simple (N/A).  */
      59        0,			/* flag_setting (N/A).  */
      60        COSTS_N_INSNS (2),	/* extend.  */
      61        0,			/* add (N/A).  */
      62        COSTS_N_INSNS (3),	/* extend_add.  */
      63        0				/* idiv (N/A).  */
      64      }
      65    },
      66    /* LD/ST */
      67    {
      68      COSTS_N_INSNS (2),	/* load.  */
      69      COSTS_N_INSNS (2),	/* load_sign_extend.  */
      70      COSTS_N_INSNS (3),	/* ldrd.  */
      71      COSTS_N_INSNS (2),	/* ldm_1st.  */
      72      1,			/* ldm_regs_per_insn_1st.  */
      73      1,			/* ldm_regs_per_insn_subsequent.  */
      74      COSTS_N_INSNS (2),	/* loadf.  */
      75      COSTS_N_INSNS (3),	/* loadd.  */
      76      COSTS_N_INSNS (1),  /* load_unaligned.  */
      77      COSTS_N_INSNS (2),	/* store.  */
      78      COSTS_N_INSNS (3),	/* strd.  */
      79      COSTS_N_INSNS (2),	/* stm_1st.  */
      80      1,			/* stm_regs_per_insn_1st.  */
      81      1,			/* stm_regs_per_insn_subsequent.  */
      82      COSTS_N_INSNS (2),	/* storef.  */
      83      COSTS_N_INSNS (3),	/* stored.  */
      84      COSTS_N_INSNS (1),	/* store_unaligned.  */
      85      COSTS_N_INSNS (1),	/* loadv.  */
      86      COSTS_N_INSNS (1)	/* storev.  */
      87    },
      88    {
      89      /* FP SFmode */
      90      {
      91        COSTS_N_INSNS (7),	/* div.  */
      92        COSTS_N_INSNS (2),	/* mult.  */
      93        COSTS_N_INSNS (3),	/* mult_addsub.  */
      94        COSTS_N_INSNS (3),	/* fma.  */
      95        COSTS_N_INSNS (1),	/* addsub.  */
      96        0,			/* fpconst.  */
      97        0,			/* neg.  */
      98        0,			/* compare.  */
      99        0,			/* widen.  */
     100        0,			/* narrow.  */
     101        0,			/* toint.  */
     102        0,			/* fromint.  */
     103        0				/* roundint.  */
     104      },
     105      /* FP DFmode */
     106      {
     107        COSTS_N_INSNS (15),	/* div.  */
     108        COSTS_N_INSNS (5),	/* mult.  */
     109        COSTS_N_INSNS (7),	/* mult_addsub.  */
     110        COSTS_N_INSNS (7),	/* fma.  */
     111        COSTS_N_INSNS (3),	/* addsub.  */
     112        0,			/* fpconst.  */
     113        0,			/* neg.  */
     114        0,			/* compare.  */
     115        0,			/* widen.  */
     116        0,			/* narrow.  */
     117        0,			/* toint.  */
     118        0,			/* fromint.  */
     119        0				/* roundint.  */
     120      }
     121    },
     122    /* Vector */
     123    {
     124      COSTS_N_INSNS (1),	/* alu.  */
     125      COSTS_N_INSNS (4),  /* mult.  */
     126      COSTS_N_INSNS (1),  /* movi.  */
     127      COSTS_N_INSNS (2),  /* dup.  */
     128      COSTS_N_INSNS (2)   /* extract.  */
     129    }
     130  };
     131  
     132  const struct cpu_cost_table cortexa53_extra_costs =
     133  {
     134    /* ALU */
     135    {
     136      0,			/* arith.  */
     137      0,			/* logical.  */
     138      COSTS_N_INSNS (1),	/* shift.  */
     139      0,			/* shift_reg.  */
     140      COSTS_N_INSNS (1),	/* arith_shift.  */
     141      COSTS_N_INSNS (1),	/* arith_shift_reg.  */
     142      COSTS_N_INSNS (1),	/* log_shift.  */
     143      COSTS_N_INSNS (1),	/* log_shift_reg.  */
     144      COSTS_N_INSNS (1),	/* extend.  */
     145      COSTS_N_INSNS (1),	/* extend_arith.  */
     146      COSTS_N_INSNS (1),	/* bfi.  */
     147      COSTS_N_INSNS (1),	/* bfx.  */
     148      0,			/* clz.  */
     149      0,			/* rev.  */
     150      0,			/* non_exec.  */
     151      true		/* non_exec_costs_exec.  */
     152    },
     153    {
     154      /* MULT SImode */
     155      {
     156        COSTS_N_INSNS (1),	/* simple.  */
     157        COSTS_N_INSNS (2),	/* flag_setting.  */
     158        COSTS_N_INSNS (1),	/* extend.  */
     159        COSTS_N_INSNS (1),	/* add.  */
     160        COSTS_N_INSNS (1),	/* extend_add.  */
     161        COSTS_N_INSNS (9)		/* idiv.  */
     162      },
     163      /* MULT DImode */
     164      {
     165        COSTS_N_INSNS (2),	/* simple.  */
     166        0,			/* flag_setting (N/A).  */
     167        COSTS_N_INSNS (2),	/* extend.  */
     168        COSTS_N_INSNS (2),	/* add.  */
     169        COSTS_N_INSNS (2),	/* extend_add.  */
     170        COSTS_N_INSNS (15)	/* idiv.  */
     171      }
     172    },
     173    /* LD/ST */
     174    {
     175      COSTS_N_INSNS (1),		/* load.  */
     176      COSTS_N_INSNS (1),		/* load_sign_extend.  */
     177      COSTS_N_INSNS (1),		/* ldrd.  */
     178      COSTS_N_INSNS (1),		/* ldm_1st.  */
     179      1,				/* ldm_regs_per_insn_1st.  */
     180      2,				/* ldm_regs_per_insn_subsequent.  */
     181      COSTS_N_INSNS (1),		/* loadf.  */
     182      COSTS_N_INSNS (1),		/* loadd.  */
     183      COSTS_N_INSNS (1),		/* load_unaligned.  */
     184      0,				/* store.  */
     185      0,				/* strd.  */
     186      0,				/* stm_1st.  */
     187      1,				/* stm_regs_per_insn_1st.  */
     188      2,				/* stm_regs_per_insn_subsequent.  */
     189      0,				/* storef.  */
     190      0,				/* stored.  */
     191      COSTS_N_INSNS (1),		/* store_unaligned.  */
     192      COSTS_N_INSNS (1),		/* loadv.  */
     193      COSTS_N_INSNS (1)		/* storev.  */
     194    },
     195    {
     196      /* FP SFmode */
     197      {
     198        COSTS_N_INSNS (5),	/* div.  */
     199        COSTS_N_INSNS (1),	/* mult.  */
     200        COSTS_N_INSNS (2),	/* mult_addsub.  */
     201        COSTS_N_INSNS (2),	/* fma.  */
     202        COSTS_N_INSNS (1),	/* addsub.  */
     203        0,			/* fpconst.  */
     204        COSTS_N_INSNS (1),	/* neg.  */
     205        0,			/* compare.  */
     206        COSTS_N_INSNS (1),	/* widen.  */
     207        COSTS_N_INSNS (1),	/* narrow.  */
     208        COSTS_N_INSNS (1),	/* toint.  */
     209        COSTS_N_INSNS (1),	/* fromint.  */
     210        COSTS_N_INSNS (1)		/* roundint.  */
     211      },
     212      /* FP DFmode */
     213      {
     214        COSTS_N_INSNS (10),	/* div.  */
     215        COSTS_N_INSNS (1),	/* mult.  */
     216        COSTS_N_INSNS (2),	/* mult_addsub.  */
     217        COSTS_N_INSNS (2),	/* fma.  */
     218        COSTS_N_INSNS (1),	/* addsub.  */
     219        0,			/* fpconst.  */
     220        COSTS_N_INSNS (1),	/* neg.  */
     221        0,			/* compare.  */
     222        COSTS_N_INSNS (1),	/* widen.  */
     223        COSTS_N_INSNS (1),	/* narrow.  */
     224        COSTS_N_INSNS (1),	/* toint.  */
     225        COSTS_N_INSNS (1),	/* fromint.  */
     226        COSTS_N_INSNS (1)		/* roundint.  */
     227      }
     228    },
     229    /* Vector */
     230    {
     231      COSTS_N_INSNS (1),	/* alu.  */
     232      COSTS_N_INSNS (4),  /* mult.  */
     233      COSTS_N_INSNS (1),  /* movi.  */
     234      COSTS_N_INSNS (2),  /* dup.  */
     235      COSTS_N_INSNS (2)   /* extract.  */
     236    }
     237  };
     238  
     239  const struct cpu_cost_table cortexa57_extra_costs =
     240  {
     241    /* ALU */
     242    {
     243      0,                 /* arith.  */
     244      0,                 /* logical.  */
     245      0,                 /* shift.  */
     246      0,			/* shift_reg.  */
     247      COSTS_N_INSNS (1), /* arith_shift.  */
     248      COSTS_N_INSNS (1), /* arith_shift_reg.  */
     249      COSTS_N_INSNS (1), /* log_shift.  */
     250      COSTS_N_INSNS (1), /* log_shift_reg.  */
     251      0,                 /* extend.  */
     252      COSTS_N_INSNS (1), /* extend_arith.  */
     253      COSTS_N_INSNS (1), /* bfi.  */
     254      0,                 /* bfx.  */
     255      0,                 /* clz.  */
     256      0,			/* rev.  */
     257      0,                 /* non_exec.  */
     258      true               /* non_exec_costs_exec.  */
     259    },
     260    {
     261      /* MULT SImode */
     262      {
     263        COSTS_N_INSNS (2),       /* simple.  */
     264        COSTS_N_INSNS (3),       /* flag_setting.  */
     265        COSTS_N_INSNS (2),       /* extend.  */
     266        COSTS_N_INSNS (2),       /* add.  */
     267        COSTS_N_INSNS (2),       /* extend_add.  */
     268        COSTS_N_INSNS (18)       /* idiv.  */
     269      },
     270      /* MULT DImode */
     271      {
     272        COSTS_N_INSNS (4),       /* simple.  */
     273        0,                       /* flag_setting (N/A).  */
     274        COSTS_N_INSNS (2),       /* extend.  */
     275        COSTS_N_INSNS (4),       /* add.  */
     276        COSTS_N_INSNS (2),       /* extend_add.  */
     277        COSTS_N_INSNS (34)       /* idiv.  */
     278      }
     279    },
     280    /* LD/ST */
     281    {
     282      COSTS_N_INSNS (3),         /* load.  */
     283      COSTS_N_INSNS (3),         /* load_sign_extend.  */
     284      COSTS_N_INSNS (3),         /* ldrd.  */
     285      COSTS_N_INSNS (2),         /* ldm_1st.  */
     286      1,                         /* ldm_regs_per_insn_1st.  */
     287      2,                         /* ldm_regs_per_insn_subsequent.  */
     288      COSTS_N_INSNS (4),         /* loadf.  */
     289      COSTS_N_INSNS (4),         /* loadd.  */
     290      COSTS_N_INSNS (5),         /* load_unaligned.  */
     291      0,                         /* store.  */
     292      0,                         /* strd.  */
     293      0,                         /* stm_1st.  */
     294      1,                         /* stm_regs_per_insn_1st.  */
     295      2,                         /* stm_regs_per_insn_subsequent.  */
     296      0,                         /* storef.  */
     297      0,                         /* stored.  */
     298      COSTS_N_INSNS (1),         /* store_unaligned.  */
     299      COSTS_N_INSNS (1),         /* loadv.  */
     300      COSTS_N_INSNS (1)          /* storev.  */
     301    },
     302    {
     303      /* FP SFmode */
     304      {
     305        COSTS_N_INSNS (6),      /* div.  */
     306        COSTS_N_INSNS (1),       /* mult.  */
     307        COSTS_N_INSNS (2),       /* mult_addsub.  */
     308        COSTS_N_INSNS (2),       /* fma.  */
     309        COSTS_N_INSNS (1),       /* addsub.  */
     310        0,		       /* fpconst.  */
     311        0,		       /* neg.  */
     312        0,		       /* compare.  */
     313        COSTS_N_INSNS (1),       /* widen.  */
     314        COSTS_N_INSNS (1),       /* narrow.  */
     315        COSTS_N_INSNS (1),       /* toint.  */
     316        COSTS_N_INSNS (1),       /* fromint.  */
     317        COSTS_N_INSNS (1)        /* roundint.  */
     318      },
     319      /* FP DFmode */
     320      {
     321        COSTS_N_INSNS (11),      /* div.  */
     322        COSTS_N_INSNS (1),       /* mult.  */
     323        COSTS_N_INSNS (2),       /* mult_addsub.  */
     324        COSTS_N_INSNS (2),       /* fma.  */
     325        COSTS_N_INSNS (1),       /* addsub.  */
     326        0,		       /* fpconst.  */
     327        0,		       /* neg.  */
     328        0,		       /* compare.  */
     329        COSTS_N_INSNS (1),       /* widen.  */
     330        COSTS_N_INSNS (1),       /* narrow.  */
     331        COSTS_N_INSNS (1),       /* toint.  */
     332        COSTS_N_INSNS (1),       /* fromint.  */
     333        COSTS_N_INSNS (1)        /* roundint.  */
     334      }
     335    },
     336    /* Vector */
     337    {
     338      COSTS_N_INSNS (1),  /* alu.  */
     339      COSTS_N_INSNS (4),  /* mult.  */
     340      COSTS_N_INSNS (1),  /* movi.  */
     341      COSTS_N_INSNS (2),  /* dup.  */
     342      COSTS_N_INSNS (2)   /* extract.  */
     343    }
     344  };
     345  
     346  const struct cpu_cost_table cortexa76_extra_costs =
     347  {
     348    /* ALU */
     349    {
     350      0,                 /* arith.  */
     351      0,                 /* logical.  */
     352      0,                 /* shift.  */
     353      0,                  /* shift_reg.  */
     354      COSTS_N_INSNS (1), /* arith_shift.  */
     355      COSTS_N_INSNS (1), /* arith_shift_reg.  */
     356      0,		       /* log_shift.  */
     357      COSTS_N_INSNS (1), /* log_shift_reg.  */
     358      0,                 /* extend.  */
     359      COSTS_N_INSNS (1), /* extend_arith.  */
     360      COSTS_N_INSNS (1), /* bfi.  */
     361      0,                 /* bfx.  */
     362      0,                 /* clz.  */
     363      0,                  /* rev.  */
     364      0,                 /* non_exec.  */
     365      true               /* non_exec_costs_exec.  */
     366    },
     367    {
     368      /* MULT SImode */
     369      {
     370        COSTS_N_INSNS (1),       /* simple.  */
     371        COSTS_N_INSNS (2),       /* flag_setting.  */
     372        COSTS_N_INSNS (1),       /* extend.  */
     373        COSTS_N_INSNS (1),       /* add.  */
     374        COSTS_N_INSNS (1),       /* extend_add.  */
     375        COSTS_N_INSNS (6)	       /* idiv.  */
     376      },
     377      /* MULT DImode */
     378      {
     379        COSTS_N_INSNS (3),       /* simple.  */
     380        0,                       /* flag_setting (N/A).  */
     381        COSTS_N_INSNS (1),       /* extend.  */
     382        COSTS_N_INSNS (3),       /* add.  */
     383        COSTS_N_INSNS (1),       /* extend_add.  */
     384        COSTS_N_INSNS (10)       /* idiv.  */
     385      }
     386    },
     387    /* LD/ST */
     388    {
     389      COSTS_N_INSNS (3),         /* load.  */
     390      COSTS_N_INSNS (3),         /* load_sign_extend.  */
     391      COSTS_N_INSNS (3),         /* ldrd.  */
     392      COSTS_N_INSNS (2),         /* ldm_1st.  */
     393      1,                         /* ldm_regs_per_insn_1st.  */
     394      2,                         /* ldm_regs_per_insn_subsequent.  */
     395      COSTS_N_INSNS (4),         /* loadf.  */
     396      COSTS_N_INSNS (4),         /* loadd.  */
     397      COSTS_N_INSNS (5),         /* load_unaligned.  */
     398      0,                         /* store.  */
     399      0,                         /* strd.  */
     400      0,                         /* stm_1st.  */
     401      1,                         /* stm_regs_per_insn_1st.  */
     402      2,                         /* stm_regs_per_insn_subsequent.  */
     403      0,                         /* storef.  */
     404      0,                         /* stored.  */
     405      COSTS_N_INSNS (1),         /* store_unaligned.  */
     406      COSTS_N_INSNS (1),         /* loadv.  */
     407      COSTS_N_INSNS (1)          /* storev.  */
     408    },
     409    {
     410      /* FP SFmode */
     411      {
     412        COSTS_N_INSNS (10),      /* div.  */
     413        COSTS_N_INSNS (2),       /* mult.  */
     414        COSTS_N_INSNS (3),       /* mult_addsub.  */
     415        COSTS_N_INSNS (3),       /* fma.  */
     416        COSTS_N_INSNS (1),       /* addsub.  */
     417        0,                       /* fpconst.  */
     418        0,                       /* neg.  */
     419        0,                       /* compare.  */
     420        COSTS_N_INSNS (1),       /* widen.  */
     421        COSTS_N_INSNS (1),       /* narrow.  */
     422        COSTS_N_INSNS (1),       /* toint.  */
     423        COSTS_N_INSNS (1),       /* fromint.  */
     424        COSTS_N_INSNS (1)        /* roundint.  */
     425      },
     426      /* FP DFmode */
     427      {
     428        COSTS_N_INSNS (15),      /* div.  */
     429        COSTS_N_INSNS (2),       /* mult.  */
     430        COSTS_N_INSNS (3),       /* mult_addsub.  */
     431        COSTS_N_INSNS (3),       /* fma.  */
     432        COSTS_N_INSNS (1),       /* addsub.  */
     433        0,                       /* fpconst.  */
     434        0,                       /* neg.  */
     435        0,                       /* compare.  */
     436        COSTS_N_INSNS (1),       /* widen.  */
     437        COSTS_N_INSNS (1),       /* narrow.  */
     438        COSTS_N_INSNS (1),       /* toint.  */
     439        COSTS_N_INSNS (1),       /* fromint.  */
     440        COSTS_N_INSNS (1)        /* roundint.  */
     441      }
     442    },
     443    /* Vector */
     444    {
     445      COSTS_N_INSNS (1),  /* alu.  */
     446      COSTS_N_INSNS (4),  /* mult.  */
     447      COSTS_N_INSNS (1),  /* movi.  */
     448      COSTS_N_INSNS (2),  /* dup.  */
     449      COSTS_N_INSNS (2)   /* extract.  */
     450    }
     451  };
     452  
     453  const struct cpu_cost_table exynosm1_extra_costs =
     454  {
     455    /* ALU */
     456    {
     457      0,                 /* arith.  */
     458      0,                 /* logical.  */
     459      0,                 /* shift.  */
     460      COSTS_N_INSNS (0), /* shift_reg.  */
     461      0,                 /* arith_shift.  */
     462      COSTS_N_INSNS (1), /* arith_shift_reg.  */
     463      0,                 /* log_shift.  */
     464      COSTS_N_INSNS (1), /* log_shift_reg.  */
     465      0,                 /* extend.  */
     466      COSTS_N_INSNS (1), /* extend_arith.  */
     467      0,                 /* bfi.  */
     468      0,                 /* bfx.  */
     469      0,                 /* clz.  */
     470      0,                 /* rev.  */
     471      0,                 /* non_exec.  */
     472      true               /* non_exec_costs_exec.  */
     473    },
     474    {
     475      /* MULT SImode */
     476      {
     477        COSTS_N_INSNS (2),       /* simple.  */
     478        COSTS_N_INSNS (3),       /* flag_setting.  */
     479        COSTS_N_INSNS (4),       /* extend.  */
     480        COSTS_N_INSNS (2),       /* add.  */
     481        COSTS_N_INSNS (4),       /* extend_add.  */
     482        COSTS_N_INSNS (19)       /* idiv.  */
     483      },
     484      /* MULT DImode */
     485      {
     486        COSTS_N_INSNS (3),       /* simple.  */
     487        0,                       /* flag_setting (N/A).  */
     488        COSTS_N_INSNS (4),       /* extend.  */
     489        COSTS_N_INSNS (3),       /* add.  */
     490        COSTS_N_INSNS (4),       /* extend_add.  */
     491        COSTS_N_INSNS (35)       /* idiv.  */
     492      }
     493    },
     494    /* LD/ST */
     495    {
     496      COSTS_N_INSNS (3),         /* load.  */
     497      COSTS_N_INSNS (4),         /* load_sign_extend.  */
     498      COSTS_N_INSNS (3),         /* ldrd.  */
     499      COSTS_N_INSNS (2),         /* ldm_1st.  */
     500      1,                         /* ldm_regs_per_insn_1st.  */
     501      2,                         /* ldm_regs_per_insn_subsequent.  */
     502      COSTS_N_INSNS (4),         /* loadf.  */
     503      COSTS_N_INSNS (4),         /* loadd.  */
     504      COSTS_N_INSNS (4),         /* load_unaligned.  */
     505      0,                         /* store.  */
     506      0,                         /* strd.  */
     507      0,                         /* stm_1st.  */
     508      1,                         /* stm_regs_per_insn_1st.  */
     509      2,                         /* stm_regs_per_insn_subsequent.  */
     510      0,                         /* storef.  */
     511      0,                         /* stored.  */
     512      0,                         /* store_unaligned.  */
     513      COSTS_N_INSNS (1),         /* loadv.  */
     514      COSTS_N_INSNS (1)          /* storev.  */
     515    },
     516    {
     517      /* FP SFmode */
     518      {
     519        COSTS_N_INSNS (21),      /* div.  */
     520        COSTS_N_INSNS (3),       /* mult.  */
     521        COSTS_N_INSNS (4),       /* mult_addsub.  */
     522        COSTS_N_INSNS (4),       /* fma.  */
     523        COSTS_N_INSNS (2),       /* addsub.  */
     524        COSTS_N_INSNS (0),       /* fpconst.  */
     525        COSTS_N_INSNS (0),       /* neg.  */
     526        COSTS_N_INSNS (3),       /* compare.  */
     527        COSTS_N_INSNS (2),       /* widen.  */
     528        COSTS_N_INSNS (2),       /* narrow.  */
     529        COSTS_N_INSNS (12),      /* toint.  */
     530        COSTS_N_INSNS (7),       /* fromint.  */
     531        COSTS_N_INSNS (2)        /* roundint.  */
     532      },
     533      /* FP DFmode */
     534      {
     535        COSTS_N_INSNS (34),      /* div.  */
     536        COSTS_N_INSNS (3),       /* mult.  */
     537        COSTS_N_INSNS (4),       /* mult_addsub.  */
     538        COSTS_N_INSNS (4),       /* fma.  */
     539        COSTS_N_INSNS (2),       /* addsub.  */
     540        COSTS_N_INSNS (0),       /* fpconst.  */
     541        COSTS_N_INSNS (0),       /* neg.  */
     542        COSTS_N_INSNS (3),       /* compare.  */
     543        COSTS_N_INSNS (2),       /* widen.  */
     544        COSTS_N_INSNS (2),       /* narrow.  */
     545        COSTS_N_INSNS (12),      /* toint.  */
     546        COSTS_N_INSNS (7),       /* fromint.  */
     547        COSTS_N_INSNS (2)        /* roundint.  */
     548      }
     549    },
     550    /* Vector */
     551    {
     552      COSTS_N_INSNS (0),  /* alu.  */
     553      COSTS_N_INSNS (4),  /* mult.  */
     554      COSTS_N_INSNS (1),  /* movi.  */
     555      COSTS_N_INSNS (2),  /* dup.  */
     556      COSTS_N_INSNS (2)   /* extract.  */
     557    }
     558  };
     559  
     560  const struct cpu_cost_table xgene1_extra_costs =
     561  {
     562    /* ALU */
     563    {
     564      0,                 /* arith.  */
     565      0,                 /* logical.  */
     566      COSTS_N_INSNS (1), /* shift.  */
     567      COSTS_N_INSNS (1), /* shift_reg.  */
     568      COSTS_N_INSNS (2), /* arith_shift.  */
     569      COSTS_N_INSNS (2), /* arith_shift_reg.  */
     570      COSTS_N_INSNS (2), /* log_shift.  */
     571      COSTS_N_INSNS (2), /* log_shift_reg.  */
     572      0,                 /* extend.  */
     573      COSTS_N_INSNS (1), /* extend_arithm.  */
     574      0,                 /* bfi.  */
     575      0,                 /* bfx.  */
     576      0,                 /* clz.  */
     577      0,                 /* rev.  */
     578      0,                 /* non_exec.  */
     579      true               /* non_exec_costs_exec.  */
     580    },
     581    {
     582      /* MULT SImode */
     583      {
     584        COSTS_N_INSNS (3),       /* simple.  */
     585        COSTS_N_INSNS (3),       /* flag_setting.  */
     586        COSTS_N_INSNS (4),       /* extend.  */
     587        COSTS_N_INSNS (4),       /* add.  */
     588        COSTS_N_INSNS (4),       /* extend_add.  */
     589        COSTS_N_INSNS (20)       /* idiv.  */
     590      },
     591      /* MULT DImode */
     592      {
     593        COSTS_N_INSNS (4),       /* simple.  */
     594        COSTS_N_INSNS (4),       /* flag_setting (N/A).  */
     595        COSTS_N_INSNS (5),       /* extend.  */
     596        COSTS_N_INSNS (5),       /* add.  */
     597        COSTS_N_INSNS (5),       /* extend_add.  */
     598        COSTS_N_INSNS (21)       /* idiv.  */
     599      }
     600    },
     601    /* LD/ST */
     602    {
     603      COSTS_N_INSNS (4),         /* load.  */
     604      COSTS_N_INSNS (5),         /* load_sign_extend.  */
     605      COSTS_N_INSNS (4),         /* ldrd.  */
     606      COSTS_N_INSNS (5),         /* ldm_1st.  */
     607      1,                         /* ldm_regs_per_insn_1st.  */
     608      1,                         /* ldm_regs_per_insn_subsequent.  */
     609      COSTS_N_INSNS (9),         /* loadf.  */
     610      COSTS_N_INSNS (9),         /* loadd.  */
     611      0,                         /* load_unaligned.  */
     612      0,                         /* store.  */
     613      0,                         /* strd.  */
     614      0,                         /* stm_1st.  */
     615      1,                         /* stm_regs_per_insn_1st.  */
     616      1,                         /* stm_regs_per_insn_subsequent.  */
     617      COSTS_N_INSNS (3),         /* storef.  */
     618      COSTS_N_INSNS (3),         /* stored.  */
     619      0,                         /* store_unaligned.  */
     620      COSTS_N_INSNS (9),         /* loadv.  */
     621      COSTS_N_INSNS (3)          /* storev.  */
     622    },
     623    {
     624      /* FP SFmode */
     625      {
     626        COSTS_N_INSNS (22),      /* div.  */
     627        COSTS_N_INSNS (4),       /* mult.  */
     628        COSTS_N_INSNS (4),       /* mult_addsub. */
     629        COSTS_N_INSNS (4),       /* fma.  */
     630        COSTS_N_INSNS (4),       /* addsub.  */
     631        COSTS_N_INSNS (1),       /* fpconst. */
     632        COSTS_N_INSNS (4),       /* neg.  */
     633        COSTS_N_INSNS (9),       /* compare.  */
     634        COSTS_N_INSNS (4),       /* widen.  */
     635        COSTS_N_INSNS (4),       /* narrow.  */
     636        COSTS_N_INSNS (4),       /* toint.  */
     637        COSTS_N_INSNS (4),       /* fromint.  */
     638        COSTS_N_INSNS (4)        /* roundint.  */
     639      },
     640      /* FP DFmode */
     641      {
     642        COSTS_N_INSNS (27),      /* div.  */
     643        COSTS_N_INSNS (4),       /* mult.  */
     644        COSTS_N_INSNS (4),       /* mult_addsub.  */
     645        COSTS_N_INSNS (4),       /* fma.  */
     646        COSTS_N_INSNS (4),       /* addsub.  */
     647        COSTS_N_INSNS (1),       /* fpconst.  */
     648        COSTS_N_INSNS (4),       /* neg.  */
     649        COSTS_N_INSNS (9),       /* compare.  */
     650        COSTS_N_INSNS (4),       /* widen.  */
     651        COSTS_N_INSNS (4),       /* narrow.  */
     652        COSTS_N_INSNS (4),       /* toint.  */
     653        COSTS_N_INSNS (4),       /* fromint.  */
     654        COSTS_N_INSNS (4)        /* roundint.  */
     655      }
     656    },
     657    /* Vector */
     658    {
     659      COSTS_N_INSNS (2),  /* alu.  */
     660      COSTS_N_INSNS (8),  /* mult.  */
     661      COSTS_N_INSNS (1),  /* movi.  */
     662      COSTS_N_INSNS (2),  /* dup.  */
     663      COSTS_N_INSNS (2)   /* extract.  */
     664    }
     665  };
     666  
     667  #endif /* GCC_AARCH_COST_TABLES_H */