From fc0461ae3f649ce1862e907c4b4d401fd10cea76 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Wed, 30 Aug 2017 11:09:34 +0000 Subject: [PATCH] [10/77] Make assemble_real take a scalar_float_mode As per subject. 2017-08-30 Richard Sandiford Alan Hayward David Sherwood 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 Co-Authored-By: David Sherwood From-SVN: r251461 --- gcc/ChangeLog | 15 ++++++++++++++ gcc/config/arm/arm.c | 5 +++-- gcc/config/arm/arm.md | 43 +++++++++++++++-------------------------- gcc/config/mips/mips.md | 2 +- gcc/config/s390/s390.c | 3 ++- gcc/output.h | 2 +- gcc/varasm.c | 8 +++++--- 7 files changed, 43 insertions(+), 35 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5ca560ee2b1..5241db9ffba 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,18 @@ +2017-08-30 Richard Sandiford + Alan Hayward + David Sherwood + + * 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 Alan Hayward David Sherwood diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index b1e9ed259ed..3b16c7a2da7 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 (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 049a78edefe..242b65b6fda 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 (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 (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 (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 52326c9cd7f..aae78fa5a0e 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 (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 1f19298ba6e..cb0ffb8210b 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 (mode), align); break; case MODE_INT: diff --git a/gcc/output.h b/gcc/output.h index 2ea43667192..e2d55031a15 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 91680d692b4..21fee7fd15f 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 (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; -- 2.30.2