aarch64.c (aarch64_reinterpret_float_as_int): Correct endianness.
authorTamar Christina <tamar.christina@arm.com>
Wed, 2 Aug 2017 08:55:59 +0000 (08:55 +0000)
committerTamar Christina <tnfchris@gcc.gnu.org>
Wed, 2 Aug 2017 08:55:59 +0000 (08:55 +0000)
2017-08-02  Tamar Christina  <tamar.christina@arm.com>

* config/aarch64/aarch64.c (aarch64_reinterpret_float_as_int):
Correct endianness.

From-SVN: r250818

gcc/ChangeLog
gcc/config/aarch64/aarch64.c

index d9f8e3e7e8ccbff86c08085e125edd511d8f15ba..6cd5ca7001b916dc46f43bcdc84ba84d952fd2e5 100644 (file)
@@ -1,3 +1,8 @@
+2017-08-02  Tamar Christina  <tamar.christina@arm.com>
+
+       * config/aarch64/aarch64.c (aarch64_reinterpret_float_as_int):
+       Correct endianness.
+
 2017-08-02  Jakub Jelinek  <jakub@redhat.com>
 
        PR middle-end/79499
index 5a2ad7e9156a6f0389c09470cf1414bff45d8099..fac5063686fc08ba9640ab38647de18b144a15d7 100644 (file)
@@ -4733,9 +4733,14 @@ aarch64_reinterpret_float_as_int (rtx value, unsigned HOST_WIDE_INT *intval)
                  CONST_DOUBLE_REAL_VALUE (value),
                  REAL_MODE_FORMAT (mode));
 
-  ival = zext_hwi (res[0], 32);
-  if (GET_MODE_BITSIZE (mode) == GET_MODE_BITSIZE (DFmode))
-    ival |= (zext_hwi (res[1], 32) << 32);
+  if (mode == DFmode)
+    {
+      int order = BYTES_BIG_ENDIAN ? 1 : 0;
+      ival = zext_hwi (res[order], 32);
+      ival |= (zext_hwi (res[1 - order], 32) << 32);
+    }
+  else
+      ival = zext_hwi (res[0], 32);
 
   *intval = ival;
   return true;