diff options
author | Christian Bruel <christian.bruel@st.com> | 2009-04-02 15:21:56 +0200 |
---|---|---|
committer | Christian Bruel <chrbr@gcc.gnu.org> | 2009-04-02 15:21:56 +0200 |
commit | 63a9de54d8563bef63ea02d32f1d16a59e266e9a (patch) | |
tree | a5e07ae4d2722bdefe956efd4c4239a659ab163d /gcc/config | |
parent | 2f0fa28e1f7c64c4e0f352dfd97b02de06c6e94b (diff) | |
download | gcc-63a9de54d8563bef63ea02d32f1d16a59e266e9a.zip gcc-63a9de54d8563bef63ea02d32f1d16a59e266e9a.tar.gz gcc-63a9de54d8563bef63ea02d32f1d16a59e266e9a.tar.bz2 |
[SH] double precision floating point dwarf fix
2009-04-02 Christian Bruel <christian.bruel@st.com>
* config/sh/sh.c (sh_dwarf_register_span): New function.
(TARGET_DWARF_REGISTER_SPAN): Define.
* config/sh/sh-protos.h (sh_dwarf_register_span): Declare.
From-SVN: r145448
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/sh/sh-protos.h | 1 | ||||
-rw-r--r-- | gcc/config/sh/sh.c | 23 |
2 files changed, 24 insertions, 0 deletions
diff --git a/gcc/config/sh/sh-protos.h b/gcc/config/sh/sh-protos.h index 5b97196..afc4c94 100644 --- a/gcc/config/sh/sh-protos.h +++ b/gcc/config/sh/sh-protos.h @@ -160,6 +160,7 @@ extern void sh_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode, tree, extern int sh_pass_in_reg_p (CUMULATIVE_ARGS *, enum machine_mode, tree); extern void sh_init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree, signed int, enum machine_mode); extern bool sh_promote_prototypes (const_tree); +extern rtx sh_dwarf_register_span (rtx); extern rtx replace_n_hard_rtx (rtx, rtx *, int , int); extern int shmedia_cleanup_truncate (rtx *, void *); diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index c8f4c85..603ddec 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -405,6 +405,9 @@ static int sh2a_function_vector_p (tree); #undef TARGET_MACHINE_DEPENDENT_REORG #define TARGET_MACHINE_DEPENDENT_REORG sh_reorg +#undef TARGET_DWARF_REGISTER_SPAN +#define TARGET_DWARF_REGISTER_SPAN sh_dwarf_register_span + #ifdef HAVE_AS_TLS #undef TARGET_HAVE_TLS #define TARGET_HAVE_TLS true @@ -7426,6 +7429,26 @@ sh_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p, return result; } +/* 64 bit floating points memory transfers are paired single precision loads + or store. So DWARF information needs fixing in little endian (unless + PR=SZ=1 in FPSCR). */ +rtx +sh_dwarf_register_span (rtx reg) +{ + unsigned regno = REGNO (reg); + + if (WORDS_BIG_ENDIAN || GET_MODE (reg) != DFmode) + return NULL_RTX; + + return + gen_rtx_PARALLEL (VOIDmode, + gen_rtvec (2, + gen_rtx_REG (SFmode, + DBX_REGISTER_NUMBER (regno+1)), + gen_rtx_REG (SFmode, + DBX_REGISTER_NUMBER (regno)))); +} + bool sh_promote_prototypes (const_tree type) { |