aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2002-11-21 16:36:52 +0000
committerNick Clifton <nickc@gcc.gnu.org>2002-11-21 16:36:52 +0000
commit3d5ee65b2e605ae4073028e38a87fe438398fb91 (patch)
treed58b8289fb91b5e9fbcc7546c9c826a178c7d117 /gcc/config
parent4d938a09129480cd0e107e8afa74ef95b5a3fae9 (diff)
downloadgcc-3d5ee65b2e605ae4073028e38a87fe438398fb91.zip
gcc-3d5ee65b2e605ae4073028e38a87fe438398fb91.tar.gz
gcc-3d5ee65b2e605ae4073028e38a87fe438398fb91.tar.bz2
fr30.md (movsf_constant_store): Move code to detect 0.0 into fr30.c.
* config/fr30/fr30.md (movsf_constant_store): Move code to detect 0.0 into fr30.c. * config/fr30/fr30-protos.h (fr30_const_double_is_zero): Prototype. * config/fr30/fr30.c (fr30_const_double_is_zero): New function. Return true if the rtx is 0.0. From-SVN: r59349
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/fr30/fr30-protos.h3
-rw-r--r--gcc/config/fr30/fr30.c14
-rw-r--r--gcc/config/fr30/fr30.md11
3 files changed, 19 insertions, 9 deletions
diff --git a/gcc/config/fr30/fr30-protos.h b/gcc/config/fr30/fr30-protos.h
index e6d3138..4aab88c 100644
--- a/gcc/config/fr30/fr30-protos.h
+++ b/gcc/config/fr30/fr30-protos.h
@@ -1,5 +1,5 @@
/* Prototypes for fr30.c functions used in the md file & elsewhere.
- Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -39,6 +39,7 @@ extern int low_register_operand PARAMS ((rtx, Mmode));
extern int call_operand PARAMS ((rtx, Mmode));
extern int di_operand PARAMS ((rtx, Mmode));
extern int nonimmediate_di_operand PARAMS ((rtx, Mmode));
+extern int fr30_const_double_is_zero PARAMS ((rtx));
#undef Mmode
#endif /* HAVE_MACHINE_MODES */
#endif /* RTX_CODE */
diff --git a/gcc/config/fr30/fr30.c b/gcc/config/fr30/fr30.c
index e163f92..d01d6bd 100644
--- a/gcc/config/fr30/fr30.c
+++ b/gcc/config/fr30/fr30.c
@@ -951,6 +951,20 @@ fr30_check_multiple_regs (operands, num_operands, descending)
return 1;
}
+int
+fr30_const_double_is_zero (operand)
+ rtx operand;
+{
+ REAL_VALUE_TYPE d;
+
+ if (operand == NULL || GET_CODE (operand) != CONST_DOUBLE)
+ return 0;
+
+ REAL_VALUE_FROM_CONST_DOUBLE (d, operand);
+
+ return REAL_VALUES_EQUAL (d, dconst0);
+}
+
/*}}}*/
/*{{{ Instruction Output Routines */
diff --git a/gcc/config/fr30/fr30.md b/gcc/config/fr30/fr30.md
index b78e99d..b19f655 100644
--- a/gcc/config/fr30/fr30.md
+++ b/gcc/config/fr30/fr30.md
@@ -1,5 +1,5 @@
;; FR30 machine description.
-;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
;; Contributed by Cygnus Solutions.
;; This file is part of GNU CC.
@@ -571,14 +571,9 @@
const char * ldi_instr;
const char * tmp_reg;
static char buffer[100];
- REAL_VALUE_TYPE d;
- REAL_VALUE_FROM_CONST_DOUBLE (d, operands[1]);
-
- if (REAL_VALUES_EQUAL (d, dconst0))
- ldi_instr = \"ldi:8\";
- else
- ldi_instr = \"ldi:32\";
+ ldi_instr = fr30_const_double_is_zero (operands[1])
+ ? ldi_instr = \"ldi:8\" : \"ldi:32\";
tmp_reg = reg_names [COMPILER_SCRATCH_REGISTER];