Fix Arm big-endian regressions.
authorTamar Christina <tamar.christina@arm.com>
Wed, 16 Jan 2019 11:25:10 +0000 (11:25 +0000)
committerTamar Christina <tnfchris@gcc.gnu.org>
Wed, 16 Jan 2019 11:25:10 +0000 (11:25 +0000)
gcc/ChangeLog:

* config/arm/arm-protos.h (neon_vcmla_lane_prepare_operands): Remove patternmode.
* config/arm/arm.c (neon_vcmla_lane_prepare_operands): Likewise.
* config/arm/neon.md (neon_vcmla_lane<rot><mode>, neon_vcmla_laneq<rot><mode>,
neon_vcmlaq_lane<rot><mode>): Remove endianness conversion.

From-SVN: r267969

gcc/ChangeLog
gcc/config/arm/arm-protos.h
gcc/config/arm/arm.c
gcc/config/arm/neon.md

index 17f2195eff334475eec6f9aa9f2fb7224fc7f1ac..bfe5b628958994ba8e240207e415b6e22a4a8f6a 100644 (file)
@@ -1,3 +1,10 @@
+2019-01-16  Tamar Christina  <tamar.christina@arm.com>
+
+       * config/arm/arm-protos.h (neon_vcmla_lane_prepare_operands): Remove patternmode.
+       * config/arm/arm.c (neon_vcmla_lane_prepare_operands): Likewise.
+       * config/arm/neon.md (neon_vcmla_lane<rot><mode>, neon_vcmla_laneq<rot><mode>,
+       neon_vcmlaq_lane<rot><mode>): Remove endianness conversion.
+
 2019-01-16  Martin Liska  <mliska@suse.cz>
 
        * Makefile.in: Set TOOL_INCLUDE_DIR and NATIVE_SYSTEM_HEADER_DIR
index 2bc43019864ef70ed1bf1e725bad7437cf9b11d8..79ede0db174fcce87abe8b4d18893550d4c7e2f6 100644 (file)
@@ -109,7 +109,7 @@ extern int arm_coproc_mem_operand (rtx, bool);
 extern int neon_vector_mem_operand (rtx, int, bool);
 extern int neon_struct_mem_operand (rtx);
 
-extern rtx *neon_vcmla_lane_prepare_operands (machine_mode, rtx *);
+extern rtx *neon_vcmla_lane_prepare_operands (rtx *);
 
 extern int tls_mentioned_p (rtx);
 extern int symbol_mentioned_p (rtx);
index d71ab4075a75f675d5a8267bc569f6b4fc78228e..73cb8df9af1ec9d680091bb8691bcd925a1be1d3 100644 (file)
@@ -12725,8 +12725,7 @@ neon_struct_mem_operand (rtx op)
 /* Prepares the operands for the VCMLA by lane instruction such that the right
    register number is selected.  This instruction is special in that it always
    requires a D register, however there is a choice to be made between Dn[0],
-   Dn[1], D(n+1)[0], and D(n+1)[1] depending on the mode of the registers and
-   the PATTERNMODE of the insn.
+   Dn[1], D(n+1)[0], and D(n+1)[1] depending on the mode of the registers.
 
    The VCMLA by lane function always selects two values. For instance given D0
    and a V2SF, the only valid index is 0 as the values in S0 and S1 will be
@@ -12738,9 +12737,9 @@ neon_struct_mem_operand (rtx op)
    updated to contain the right index.  */
 
 rtx *
-neon_vcmla_lane_prepare_operands (machine_mode patternmode, rtx *operands)
+neon_vcmla_lane_prepare_operands (rtx *operands)
 {
-  int lane = NEON_ENDIAN_LANE_N (patternmode, INTVAL (operands[4]));
+  int lane = INTVAL (operands[4]);
   machine_mode constmode = SImode;
   machine_mode mode = GET_MODE (operands[3]);
   int regno = REGNO (operands[3]);
index 6f8e7c1cffd2751c1ee7e03ded0410ad3c09c13f..f9d7ba35b137fed383f84eecbe81dd942943d216 100644 (file)
                             VCMLA)))]
   "TARGET_COMPLEX"
   {
-    operands = neon_vcmla_lane_prepare_operands (<MODE>mode, operands);
+    operands = neon_vcmla_lane_prepare_operands (operands);
     return "vcmla.<V_s_elem>\t%<V_reg>0, %<V_reg>2, d%c3[%c4], #<rot>";
   }
   [(set_attr "type" "neon_fcmla")]
                              VCMLA)))]
   "TARGET_COMPLEX"
   {
-    operands = neon_vcmla_lane_prepare_operands (<MODE>mode, operands);
+    operands = neon_vcmla_lane_prepare_operands (operands);
     return "vcmla.<V_s_elem>\t%<V_reg>0, %<V_reg>2, d%c3[%c4], #<rot>";
   }
   [(set_attr "type" "neon_fcmla")]
                                 VCMLA)))]
   "TARGET_COMPLEX"
   {
-    operands = neon_vcmla_lane_prepare_operands (<MODE>mode, operands);
+    operands = neon_vcmla_lane_prepare_operands (operands);
     return "vcmla.<V_s_elem>\t%<V_reg>0, %<V_reg>2, d%c3[%c4], #<rot>";
   }
   [(set_attr "type" "neon_fcmla")]