From: Rainer Orth Date: Thu, 7 Jun 2001 16:56:31 +0000 (+0000) Subject: alpha.c (alpha_va_arg): Handle TFmode, TCmode args, passed by reference. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=09e983244e5589b9777ed719e615c5704f163282;p=gcc.git alpha.c (alpha_va_arg): Handle TFmode, TCmode args, passed by reference. * config/alpha/alpha.c (alpha_va_arg): Handle TFmode, TCmode args, passed by reference. From-SVN: r42969 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d625972de59..7b78f124862 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-06-07 Rainer Orth + + * config/alpha/alpha.c (alpha_va_arg): Handle TFmode, TCmode args, + passed by reference. + 2001-06-07 Joseph S. Myers * doc/tm.texi (TARGET_SWITCHES, TARGET_OPTIONS): Adjust markup. diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index c6aa2eec7fa..0bf04cd1052 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -1,6 +1,6 @@ /* Subroutines used for code generation on the DEC Alpha. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - 2000 Free Software Foundation, Inc. + 2000, 2001 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) This file is part of GNU CC. @@ -4316,6 +4316,7 @@ alpha_va_arg (valist, type) tree t; tree offset_field, base_field, addr_tree, addend; tree wide_type, wide_ofs; + int indirect = 0; if (TARGET_OPEN_VMS) return std_expand_builtin_va_arg (valist, type); @@ -4334,7 +4335,13 @@ alpha_va_arg (valist, type) wide_ofs = save_expr (build1 (CONVERT_EXPR, wide_type, offset_field)); addend = wide_ofs; - if (FLOAT_TYPE_P (type)) + + if (TYPE_MODE (type) == TFmode || TYPE_MODE (type) == TCmode) + { + indirect = 1; + tsize = UNITS_PER_WORD; + } + else if (FLOAT_TYPE_P (type)) { tree fpaddend, cond; @@ -4360,6 +4367,12 @@ alpha_va_arg (valist, type) TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); + if (indirect) + { + addr = force_reg (Pmode, addr); + addr = gen_rtx_MEM (Pmode, addr); + } + return addr; }