aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@linaro.org>2017-08-30 11:09:34 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2017-08-30 11:09:34 +0000
commitfc0461ae3f649ce1862e907c4b4d401fd10cea76 (patch)
tree56abf1fb936c04bf622ce3b3dd28fb1f63fc5c1e
parentb5f2d801b10c25ef32a80c03d6df8668920a593c (diff)
downloadgcc-fc0461ae3f649ce1862e907c4b4d401fd10cea76.zip
gcc-fc0461ae3f649ce1862e907c4b4d401fd10cea76.tar.gz
gcc-fc0461ae3f649ce1862e907c4b4d401fd10cea76.tar.bz2
[10/77] Make assemble_real take a scalar_float_mode
As per subject. 2017-08-30 Richard Sandiford <richard.sandiford@linaro.org> Alan Hayward <alan.hayward@arm.com> David Sherwood <david.sherwood@arm.com> gcc/ * output.h (assemble_real): Take a scalar_float_mode. * config/arm/arm.c (arm_assemble_integer): Update accordingly. * config/arm/arm.md (consttable_4): Likewise. (consttable_8): Likewise. (consttable_16): Likewise. * config/mips/mips.md (consttable_float): Likewise. * config/s390/s390.c (s390_output_pool_entry): Likewise. * varasm.c (assemble_real): Take a scalar_float_mode. (output_constant_pool_2): Update accordingly. (output_constant): Likewise. Co-Authored-By: Alan Hayward <alan.hayward@arm.com> Co-Authored-By: David Sherwood <david.sherwood@arm.com> From-SVN: r251461
-rw-r--r--gcc/ChangeLog15
-rw-r--r--gcc/config/arm/arm.c5
-rw-r--r--gcc/config/arm/arm.md43
-rw-r--r--gcc/config/mips/mips.md2
-rw-r--r--gcc/config/s390/s390.c3
-rw-r--r--gcc/output.h2
-rw-r--r--gcc/varasm.c8
7 files changed, 43 insertions, 35 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5ca560e..5241db9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -2,6 +2,21 @@
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
+ * output.h (assemble_real): Take a scalar_float_mode.
+ * config/arm/arm.c (arm_assemble_integer): Update accordingly.
+ * config/arm/arm.md (consttable_4): Likewise.
+ (consttable_8): Likewise.
+ (consttable_16): Likewise.
+ * config/mips/mips.md (consttable_float): Likewise.
+ * config/s390/s390.c (s390_output_pool_entry): Likewise.
+ * varasm.c (assemble_real): Take a scalar_float_mode.
+ (output_constant_pool_2): Update accordingly.
+ (output_constant): Likewise.
+
+2017-08-30 Richard Sandiford <richard.sandiford@linaro.org>
+ Alan Hayward <alan.hayward@arm.com>
+ David Sherwood <david.sherwood@arm.com>
+
* tree.h (SCALAR_FLOAT_TYPE_MODE): New macro.
* builtins.c (expand_builtin_signbit): Use it instead of TYPE_MODE.
* fold-const.c (fold_convert_const_real_from_fixed): Likewise.
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index b1e9ed2..3b16c7a 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -22667,8 +22667,9 @@ arm_assemble_integer (rtx x, unsigned int size, int aligned_p)
for (i = 0; i < units; i++)
{
rtx elt = CONST_VECTOR_ELT (x, i);
- assemble_real
- (*CONST_DOUBLE_REAL_VALUE (elt), GET_MODE_INNER (mode),
+ assemble_real
+ (*CONST_DOUBLE_REAL_VALUE (elt),
+ as_a <scalar_float_mode> (GET_MODE_INNER (mode)),
i == 0 ? BIGGEST_ALIGNMENT : size * BITS_PER_UNIT);
}
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index 049a78e..242b65b 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -11232,13 +11232,11 @@
{
rtx x = operands[0];
making_const_table = TRUE;
- switch (GET_MODE_CLASS (GET_MODE (x)))
+ scalar_float_mode float_mode;
+ if (is_a <scalar_float_mode> (GET_MODE (x), &float_mode))
+ assemble_real (*CONST_DOUBLE_REAL_VALUE (x), float_mode, BITS_PER_WORD);
+ else
{
- case MODE_FLOAT:
- assemble_real (*CONST_DOUBLE_REAL_VALUE (x), GET_MODE (x),
- BITS_PER_WORD);
- break;
- default:
/* XXX: Sometimes gcc does something really dumb and ends up with
a HIGH in a constant pool entry, usually because it's trying to
load into a VFP register. We know this will always be used in
@@ -11248,7 +11246,6 @@
x = XEXP (x, 0);
assemble_integer (x, 4, BITS_PER_WORD, 1);
mark_symbol_refs_as_used (x);
- break;
}
return \"\";
}"
@@ -11262,16 +11259,12 @@
"*
{
making_const_table = TRUE;
- switch (GET_MODE_CLASS (GET_MODE (operands[0])))
- {
- case MODE_FLOAT:
- assemble_real (*CONST_DOUBLE_REAL_VALUE (operands[0]),
- GET_MODE (operands[0]), BITS_PER_WORD);
- break;
- default:
- assemble_integer (operands[0], 8, BITS_PER_WORD, 1);
- break;
- }
+ scalar_float_mode float_mode;
+ if (is_a <scalar_float_mode> (GET_MODE (operands[0]), &float_mode))
+ assemble_real (*CONST_DOUBLE_REAL_VALUE (operands[0]),
+ float_mode, BITS_PER_WORD);
+ else
+ assemble_integer (operands[0], 8, BITS_PER_WORD, 1);
return \"\";
}"
[(set_attr "length" "8")
@@ -11284,16 +11277,12 @@
"*
{
making_const_table = TRUE;
- switch (GET_MODE_CLASS (GET_MODE (operands[0])))
- {
- case MODE_FLOAT:
- assemble_real (*CONST_DOUBLE_REAL_VALUE (operands[0]),
- GET_MODE (operands[0]), BITS_PER_WORD);
- break;
- default:
- assemble_integer (operands[0], 16, BITS_PER_WORD, 1);
- break;
- }
+ scalar_float_mode float_mode;
+ if (is_a <scalar_float_mode> (GET_MODE (operands[0]), &float_mode))
+ assemble_real (*CONST_DOUBLE_REAL_VALUE (operands[0]),
+ float_mode, BITS_PER_WORD);
+ else
+ assemble_integer (operands[0], 16, BITS_PER_WORD, 1);
return \"\";
}"
[(set_attr "length" "16")
diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md
index 52326c9..aae78fa 100644
--- a/gcc/config/mips/mips.md
+++ b/gcc/config/mips/mips.md
@@ -7363,7 +7363,7 @@
{
gcc_assert (GET_CODE (operands[0]) == CONST_DOUBLE);
assemble_real (*CONST_DOUBLE_REAL_VALUE (operands[0]),
- GET_MODE (operands[0]),
+ as_a <scalar_float_mode> (GET_MODE (operands[0])),
GET_MODE_BITSIZE (GET_MODE (operands[0])));
return "";
}
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index 1f19298..cb0ffb8 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -9498,7 +9498,8 @@ s390_output_pool_entry (rtx exp, machine_mode mode, unsigned int align)
case MODE_DECIMAL_FLOAT:
gcc_assert (GET_CODE (exp) == CONST_DOUBLE);
- assemble_real (*CONST_DOUBLE_REAL_VALUE (exp), mode, align);
+ assemble_real (*CONST_DOUBLE_REAL_VALUE (exp),
+ as_a <scalar_float_mode> (mode), align);
break;
case MODE_INT:
diff --git a/gcc/output.h b/gcc/output.h
index 2ea4366..e2d5503 100644
--- a/gcc/output.h
+++ b/gcc/output.h
@@ -281,7 +281,7 @@ extern section *get_named_text_section (tree, const char *, const char *);
/* Assemble the floating-point constant D into an object of size MODE. ALIGN
is the alignment of the constant in bits. If REVERSE is true, D is output
in reverse storage order. */
-extern void assemble_real (REAL_VALUE_TYPE, machine_mode, unsigned,
+extern void assemble_real (REAL_VALUE_TYPE, scalar_float_mode, unsigned,
bool = false);
/* Write the address of the entity given by SYMBOL to SEC. */
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 91680d6..21fee7f 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -2807,7 +2807,7 @@ assemble_integer (rtx x, unsigned int size, unsigned int align, int force)
in reverse storage order. */
void
-assemble_real (REAL_VALUE_TYPE d, machine_mode mode, unsigned int align,
+assemble_real (REAL_VALUE_TYPE d, scalar_float_mode mode, unsigned int align,
bool reverse)
{
long data[4] = {0, 0, 0, 0};
@@ -3877,7 +3877,8 @@ output_constant_pool_2 (machine_mode mode, rtx x, unsigned int align)
case MODE_DECIMAL_FLOAT:
{
gcc_assert (CONST_DOUBLE_AS_FLOAT_P (x));
- assemble_real (*CONST_DOUBLE_REAL_VALUE (x), mode, align, false);
+ assemble_real (*CONST_DOUBLE_REAL_VALUE (x),
+ as_a <scalar_float_mode> (mode), align, false);
break;
}
@@ -4859,7 +4860,8 @@ output_constant (tree exp, unsigned HOST_WIDE_INT size, unsigned int align,
if (TREE_CODE (exp) != REAL_CST)
error ("initializer for floating value is not a floating constant");
else
- assemble_real (TREE_REAL_CST (exp), TYPE_MODE (TREE_TYPE (exp)),
+ assemble_real (TREE_REAL_CST (exp),
+ SCALAR_FLOAT_TYPE_MODE (TREE_TYPE (exp)),
align, reverse);
break;