arm-cores.def: Add cortex-r5.
authorPaul Brook <paul@codesourcery.com>
Wed, 1 Jun 2011 14:18:29 +0000 (14:18 +0000)
committerPaul Brook <pbrook@gcc.gnu.org>
Wed, 1 Jun 2011 14:18:29 +0000 (14:18 +0000)
2011-06-01  Paul Brook  <paul@cpodesourcery.com>

gcc/
* config/arm/arm-cores.def: Add cortex-r5.  Add DIV flags to
Cortex-A15.
* config/arm/arm-tune.md: Regenerate.
* config/arm/arm-tables.opt: Regenerate.
* config/arm/arm.c (FL_DIV): Rename...
(FL_THUMB_DIV): ... to this.
(FL_ARM_DIV): Define.
(FL_FOR_ARCH7R, FL_FOR_ARCH7M): Use FL_THUMB_DIV.
(arm_arch_hwdiv): Remove.
(arm_arch_thumb_hwdiv, arm_arch_arm_hwdiv): New variables.
(arm_issue_rate): Add cortexr5.
* config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): Set
__ARM_ARCH_EXT_IDIV__.
(TARGET_IDIV): Define.
(arm_arch_hwdiv): Remove.
(arm_arch_arm_hwdiv, arm_arch_thumb_hwdiv): New prototypes.
* config/arm/arm.md (tune_cortexr4): Add cortexr5.
(divsi3, udivsi3): New patterns.
* config/arm/thumb2.md (divsi3, udivsi3): Remove.
* doc/invoke.texi: Document ARM -mcpu=cortex-r5

From-SVN: r174526

gcc/ChangeLog
gcc/config/arm/arm-cores.def
gcc/config/arm/arm-tables.opt
gcc/config/arm/arm-tune.md
gcc/config/arm/arm.c
gcc/config/arm/arm.h
gcc/config/arm/arm.md
gcc/config/arm/thumb2.md
gcc/doc/invoke.texi

index f563c5ffda066b4162c1998af9765ad5f443cd44..888c7e247f16a4355fdc71f198612f72cf7f52d2 100644 (file)
@@ -1,3 +1,26 @@
+2011-06-01  Paul Brook  <paul@cpodesourcery.com>
+
+       * config/arm/arm-cores.def: Add cortex-r5.  Add DIV flags to
+       Cortex-A15.
+       * config/arm/arm-tune.md: Regenerate.
+       * config/arm/arm-tables.opt: Regenerate.
+       * config/arm/arm.c (FL_DIV): Rename...
+       (FL_THUMB_DIV): ... to this.
+       (FL_ARM_DIV): Define.
+       (FL_FOR_ARCH7R, FL_FOR_ARCH7M): Use FL_THUMB_DIV.
+       (arm_arch_hwdiv): Remove.
+       (arm_arch_thumb_hwdiv, arm_arch_arm_hwdiv): New variables.
+       (arm_issue_rate): Add cortexr5.
+       * config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): Set
+       __ARM_ARCH_EXT_IDIV__.
+       (TARGET_IDIV): Define.
+       (arm_arch_hwdiv): Remove.
+       (arm_arch_arm_hwdiv, arm_arch_thumb_hwdiv): New prototypes.
+       * config/arm/arm.md (tune_cortexr4): Add cortexr5.
+       (divsi3, udivsi3): New patterns.
+       * config/arm/thumb2.md (divsi3, udivsi3): Remove.
+       * doc/invoke.texi: Document ARM -mcpu=cortex-r5
+
 2011-06-01  Martin Jambor  <mjambor@suse.cz>
 
        * ipa-utils.c (ipa_dfs_info): New field scc_no.
index 0bb9aa3ee24b0472ae823fe1b8571e4ab1d3975c..af0dbb49cc9244c2f9dcee4c4eeaa62d375f92d8 100644 (file)
@@ -127,9 +127,10 @@ ARM_CORE("arm1156t2f-s",  arm1156t2fs,  6T2,                                FL_LDSCHED | FL_VFPV2, 9e)
 ARM_CORE("cortex-a5",    cortexa5,     7A,                              FL_LDSCHED, 9e)
 ARM_CORE("cortex-a8",    cortexa8,     7A,                              FL_LDSCHED, 9e)
 ARM_CORE("cortex-a9",    cortexa9,     7A,                              FL_LDSCHED, cortex_a9)
-ARM_CORE("cortex-a15",   cortexa15,    7A,                              FL_LDSCHED, 9e)
+ARM_CORE("cortex-a15",   cortexa15,    7A,                              FL_LDSCHED | FL_THUMB_DIV | FL_ARM_DIV, 9e)
 ARM_CORE("cortex-r4",    cortexr4,     7R,                              FL_LDSCHED, 9e)
 ARM_CORE("cortex-r4f",   cortexr4f,    7R,                              FL_LDSCHED, 9e)
+ARM_CORE("cortex-r5",    cortexr5,     7R,                              FL_LDSCHED | FL_ARM_DIV, 9e)
 ARM_CORE("cortex-m4",    cortexm4,     7EM,                             FL_LDSCHED, 9e)
 ARM_CORE("cortex-m3",    cortexm3,     7M,                              FL_LDSCHED, 9e)
 ARM_CORE("cortex-m1",    cortexm1,     6M,                              FL_LDSCHED, 9e)
index f984480a01e34d3ad58f016e768b16449ff5affd..9b3ced651b5f31ba8a4d7937923cc3aaf84357c2 100644 (file)
@@ -249,6 +249,9 @@ Enum(processor_type) String(cortex-r4) Value(cortexr4)
 EnumValue
 Enum(processor_type) String(cortex-r4f) Value(cortexr4f)
 
+EnumValue
+Enum(processor_type) String(cortex-r5) Value(cortexr5)
+
 EnumValue
 Enum(processor_type) String(cortex-m4) Value(cortexm4)
 
index 9b664e7e66ba712920fa6a48ba31f0172b44be05..bd1083315ca4af93216d8850b528fcd60b81318f 100644 (file)
@@ -1,5 +1,5 @@
 ;; -*- buffer-read-only: t -*-
 ;; Generated automatically by gentune.sh from arm-cores.def
 (define_attr "tune"
-       "arm2,arm250,arm3,arm6,arm60,arm600,arm610,arm620,arm7,arm7d,arm7di,arm70,arm700,arm700i,arm710,arm720,arm710c,arm7100,arm7500,arm7500fe,arm7m,arm7dm,arm7dmi,arm8,arm810,strongarm,strongarm110,strongarm1100,strongarm1110,fa526,fa626,arm7tdmi,arm7tdmis,arm710t,arm720t,arm740t,arm9,arm9tdmi,arm920,arm920t,arm922t,arm940t,ep9312,arm10tdmi,arm1020t,arm9e,arm946es,arm966es,arm968es,arm10e,arm1020e,arm1022e,xscale,iwmmxt,iwmmxt2,fa606te,fa626te,fmp626,fa726te,arm926ejs,arm1026ejs,arm1136js,arm1136jfs,arm1176jzs,arm1176jzfs,mpcorenovfp,mpcore,arm1156t2s,arm1156t2fs,cortexa5,cortexa8,cortexa9,cortexa15,cortexr4,cortexr4f,cortexm4,cortexm3,cortexm1,cortexm0"
+       "arm2,arm250,arm3,arm6,arm60,arm600,arm610,arm620,arm7,arm7d,arm7di,arm70,arm700,arm700i,arm710,arm720,arm710c,arm7100,arm7500,arm7500fe,arm7m,arm7dm,arm7dmi,arm8,arm810,strongarm,strongarm110,strongarm1100,strongarm1110,fa526,fa626,arm7tdmi,arm7tdmis,arm710t,arm720t,arm740t,arm9,arm9tdmi,arm920,arm920t,arm922t,arm940t,ep9312,arm10tdmi,arm1020t,arm9e,arm946es,arm966es,arm968es,arm10e,arm1020e,arm1022e,xscale,iwmmxt,iwmmxt2,fa606te,fa626te,fmp626,fa726te,arm926ejs,arm1026ejs,arm1136js,arm1136jfs,arm1176jzs,arm1176jzfs,mpcorenovfp,mpcore,arm1156t2s,arm1156t2fs,cortexa5,cortexa8,cortexa9,cortexa15,cortexr4,cortexr4f,cortexr5,cortexm4,cortexm3,cortexm1,cortexm0"
        (const (symbol_ref "((enum attr_tune) arm_tune)")))
index 22ddcd217cef586772ae4064ff06966e1821ae36..7b8fe4254cd62a0cb80419e451b0d84be26bf197 100644 (file)
@@ -662,12 +662,13 @@ static int thumb_call_reg_needed;
 #define FL_THUMB2     (1 << 16)              /* Thumb-2.  */
 #define FL_NOTM              (1 << 17)       /* Instructions not present in the 'M'
                                         profile.  */
-#define FL_DIV       (1 << 18)       /* Hardware divide.  */
+#define FL_THUMB_DIV  (1 << 18)              /* Hardware divide (Thumb mode).  */
 #define FL_VFPV3      (1 << 19)       /* Vector Floating Point V3.  */
 #define FL_NEON       (1 << 20)       /* Neon instructions.  */
 #define FL_ARCH7EM    (1 << 21)              /* Instructions present in the ARMv7E-M
                                         architecture.  */
 #define FL_ARCH7      (1 << 22)       /* Architecture 7.  */
+#define FL_ARM_DIV    (1 << 23)              /* Hardware divide (ARM mode).  */
 
 #define FL_IWMMXT     (1 << 29)              /* XScale v2 or "Intel Wireless MMX technology".  */
 
@@ -694,8 +695,8 @@ static int thumb_call_reg_needed;
 #define FL_FOR_ARCH6M  (FL_FOR_ARCH6 & ~FL_NOTM)
 #define FL_FOR_ARCH7   ((FL_FOR_ARCH6T2 & ~FL_NOTM) | FL_ARCH7)
 #define FL_FOR_ARCH7A  (FL_FOR_ARCH7 | FL_NOTM | FL_ARCH6K)
-#define FL_FOR_ARCH7R  (FL_FOR_ARCH7A | FL_DIV)
-#define FL_FOR_ARCH7M  (FL_FOR_ARCH7 | FL_DIV)
+#define FL_FOR_ARCH7R  (FL_FOR_ARCH7A | FL_THUMB_DIV)
+#define FL_FOR_ARCH7M  (FL_FOR_ARCH7 | FL_THUMB_DIV)
 #define FL_FOR_ARCH7EM  (FL_FOR_ARCH7M | FL_ARCH7EM)
 
 /* The bits in this mask specify which
@@ -781,7 +782,8 @@ int arm_cpp_interwork = 0;
 int arm_arch_thumb2;
 
 /* Nonzero if chip supports integer division instruction.  */
-int arm_arch_hwdiv;
+int arm_arch_arm_hwdiv;
+int arm_arch_thumb_hwdiv;
 
 /* In case of a PRE_INC, POST_INC, PRE_DEC, POST_DEC memory reference,
    we must report the mode of the memory reference from
@@ -1449,7 +1451,8 @@ arm_option_override (void)
   arm_tune_wbuf = (tune_flags & FL_WBUF) != 0;
   arm_tune_xscale = (tune_flags & FL_XSCALE) != 0;
   arm_arch_iwmmxt = (insn_flags & FL_IWMMXT) != 0;
-  arm_arch_hwdiv = (insn_flags & FL_DIV) != 0;
+  arm_arch_thumb_hwdiv = (insn_flags & FL_THUMB_DIV) != 0;
+  arm_arch_arm_hwdiv = (insn_flags & FL_ARM_DIV) != 0;
   arm_tune_cortex_a9 = (arm_tune == cortexa9) != 0;
 
   /* If we are not using the default (ARM mode) section anchor offset
@@ -23019,6 +23022,7 @@ arm_issue_rate (void)
     {
     case cortexr4:
     case cortexr4f:
+    case cortexr5:
     case cortexa5:
     case cortexa8:
     case cortexa9:
index 86d842ddf4aa71f200e11776960fbc793a028953..3b90201ad232a07fbbcf002e7182bf00ef8d90c0 100644 (file)
@@ -101,6 +101,8 @@ extern char arm_arch_name[];
              builtin_define ("__ARM_PCS");             \
            builtin_define ("__ARM_EABI__");            \
          }                                             \
+       if (TARGET_IDIV)                                \
+         builtin_define ("__ARM_ARCH_EXT_IDIV__");     \
     } while (0)
 
 #include "config/arm/arm-opts.h"
@@ -290,6 +292,10 @@ extern void (*arm_lang_output_object_attributes_hook)(void);
 /* Nonzero if this chip supports ldrex{bhd} and strex{bhd}.  */
 #define TARGET_HAVE_LDREXBHD   ((arm_arch6k && TARGET_ARM) || arm_arch7)
 
+/* Nonzero if integer division instructions supported.  */
+#define TARGET_IDIV            ((TARGET_ARM && arm_arch_arm_hwdiv) \
+                                || (TARGET_THUMB2 && arm_arch_thumb_hwdiv))
+
 /* True iff the full BPABI is being used.  If TARGET_BPABI is true,
    then TARGET_AAPCS_BASED must be true -- but the converse does not
    hold.  TARGET_BPABI implies the use of the BPABI runtime library,
@@ -430,8 +436,11 @@ extern int arm_cpp_interwork;
 /* Nonzero if chip supports Thumb 2.  */
 extern int arm_arch_thumb2;
 
-/* Nonzero if chip supports integer division instruction.  */
-extern int arm_arch_hwdiv;
+/* Nonzero if chip supports integer division instruction in ARM mode.  */
+extern int arm_arch_arm_hwdiv;
+
+/* Nonzero if chip supports integer division instruction in Thumb mode.  */
+extern int arm_arch_thumb_hwdiv;
 
 #ifndef TARGET_DEFAULT
 #define TARGET_DEFAULT  (MASK_APCS_FRAME)
index fad82f01f52ee95f28bdbef147cac67805b07698..f5b97f65c23d7c24e2101b86c2eb6c74f97fe2fa 100644 (file)
 
 (define_attr "tune_cortexr4" "yes,no"
   (const (if_then_else
-         (eq_attr "tune" "cortexr4,cortexr4f")
+         (eq_attr "tune" "cortexr4,cortexr4f,cortexr5")
          (const_string "yes")
          (const_string "no"))))
 
    (set_attr "predicable" "yes")]
 )
 
+
+;; Division instructions
+(define_insn "divsi3"
+  [(set (match_operand:SI        0 "s_register_operand" "=r")
+       (div:SI (match_operand:SI 1 "s_register_operand"  "r")
+               (match_operand:SI 2 "s_register_operand"  "r")))]
+  "TARGET_IDIV"
+  "sdiv%?\t%0, %1, %2"
+  [(set_attr "predicable" "yes")
+   (set_attr "insn" "sdiv")]
+)
+
+(define_insn "udivsi3"
+  [(set (match_operand:SI         0 "s_register_operand" "=r")
+       (udiv:SI (match_operand:SI 1 "s_register_operand"  "r")
+                (match_operand:SI 2 "s_register_operand"  "r")))]
+  "TARGET_IDIV"
+  "udiv%?\t%0, %1, %2"
+  [(set_attr "predicable" "yes")
+   (set_attr "insn" "udiv")]
+)
+
 \f
 ;; Unary arithmetic insns
 
index 897d80513b26ffb2b861baba7a370b9b3bfc2764..26dcbdde83e3d689caeb2912191e3f4b33edfe43 100644 (file)
    (set_attr "length" "2")]
 )
 
-(define_insn "divsi3"
-  [(set (match_operand:SI        0 "s_register_operand" "=r")
-       (div:SI (match_operand:SI 1 "s_register_operand"  "r")
-               (match_operand:SI 2 "s_register_operand"  "r")))]
-  "TARGET_THUMB2 && arm_arch_hwdiv"
-  "sdiv%?\t%0, %1, %2"
-  [(set_attr "predicable" "yes")
-   (set_attr "insn" "sdiv")]
-)
-
-(define_insn "udivsi3"
-  [(set (match_operand:SI         0 "s_register_operand" "=r")
-       (udiv:SI (match_operand:SI 1 "s_register_operand"  "r")
-                (match_operand:SI 2 "s_register_operand"  "r")))]
-  "TARGET_THUMB2 && arm_arch_hwdiv"
-  "udiv%?\t%0, %1, %2"
-  [(set_attr "predicable" "yes")
-   (set_attr "insn" "udiv")]
-)
-
 (define_insn "*thumb2_subsi_short"
   [(set (match_operand:SI 0 "low_register_operand" "=l")
        (minus:SI (match_operand:SI 1 "low_register_operand" "l")
index 20ee33bb16a72e0cca24e992c648db83db6b2f91..585901e29dac98ceee235c92321f41878fabe544 100644 (file)
@@ -10241,7 +10241,8 @@ assembly code.  Permissible names are: @samp{arm2}, @samp{arm250},
 @samp{arm1136j-s}, @samp{arm1136jf-s}, @samp{mpcore}, @samp{mpcorenovfp},
 @samp{arm1156t2-s}, @samp{arm1156t2f-s}, @samp{arm1176jz-s}, @samp{arm1176jzf-s},
 @samp{cortex-a5}, @samp{cortex-a8}, @samp{cortex-a9}, @samp{cortex-a15},
-@samp{cortex-r4}, @samp{cortex-r4f}, @samp{cortex-m4}, @samp{cortex-m3},
+@samp{cortex-r4}, @samp{cortex-r4f}, @samp{cortex-r5},
+@samp{cortex-m4}, @samp{cortex-m3},
 @samp{cortex-m1},
 @samp{cortex-m0},
 @samp{xscale}, @samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}.