]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR target/86197 (POWERPC: float128 parameter passing)
authorSegher Boessenkool <segher@kernel.crashing.org>
Fri, 10 Aug 2018 20:14:11 +0000 (22:14 +0200)
committerSegher Boessenkool <segher@gcc.gnu.org>
Fri, 10 Aug 2018 20:14:11 +0000 (22:14 +0200)
Backport from mainline
2018-06-19  Segher Boessenkool  <segher@kernel.crashing.org>

PR target/86197
* config/rs6000/rs6000.md (rs6000_discover_homogeneous_aggregate): An
ieee128 argument takes up only one (vector) register, not two (floating
point) registers.

From-SVN: r263477

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index 670dc4d7bc915d1d3de04ef14165c7fafc4f1e17..7f09f181a76d7357cab48b0a281bcf631089bd7a 100644 (file)
@@ -1,3 +1,13 @@
+2018-08-10  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       Backport from mainline
+       2018-06-19  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       PR target/86197
+       * config/rs6000/rs6000.md (rs6000_discover_homogeneous_aggregate): An
+       ieee128 argument takes up only one (vector) register, not two (floating
+       point) registers.
+
 2018-08-02  Jozef Lawrynowicz  <jozef.l@mittosystems.com>
 
        Backport from mainline
index 0797c16b120e00a7063f06cc51909dac0f2b5bcb..61b3f51f2fae8ceeda332c22ce4d7473f33ee582 100644 (file)
@@ -11592,12 +11592,12 @@ rs6000_discover_homogeneous_aggregate (machine_mode mode, const_tree type,
 
       if (field_count > 0)
        {
-         int n_regs = (SCALAR_FLOAT_MODE_P (field_mode) ?
-                       (GET_MODE_SIZE (field_mode) + 7) >> 3 : 1);
+         int reg_size = ALTIVEC_OR_VSX_VECTOR_MODE (field_mode) ? 16 : 8;
+         int field_size = ROUND_UP (GET_MODE_SIZE (field_mode), reg_size);
 
          /* The ELFv2 ABI allows homogeneous aggregates to occupy
             up to AGGR_ARG_NUM_REG registers.  */
-         if (field_count * n_regs <= AGGR_ARG_NUM_REG)
+         if (field_count * field_size <= AGGR_ARG_NUM_REG * reg_size)
            {
              if (elt_mode)
                *elt_mode = field_mode;