diff options
author | Nick Clifton <nickc@redhat.com> | 2002-11-21 16:36:52 +0000 |
---|---|---|
committer | Nick Clifton <nickc@gcc.gnu.org> | 2002-11-21 16:36:52 +0000 |
commit | 3d5ee65b2e605ae4073028e38a87fe438398fb91 (patch) | |
tree | d58b8289fb91b5e9fbcc7546c9c826a178c7d117 /gcc/config/fr30 | |
parent | 4d938a09129480cd0e107e8afa74ef95b5a3fae9 (diff) | |
download | gcc-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/fr30')
-rw-r--r-- | gcc/config/fr30/fr30-protos.h | 3 | ||||
-rw-r--r-- | gcc/config/fr30/fr30.c | 14 | ||||
-rw-r--r-- | gcc/config/fr30/fr30.md | 11 |
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]; |