This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Alpha -mtaso support, revised patch
- To: lucier at math dot purdue dot edu
- Subject: Re: Alpha -mtaso support, revised patch
- From: Geoff Keating <geoffk at cygnus dot com>
- Date: Wed, 29 Mar 2000 14:29:58 -0800
- CC: gcc-patches at gcc dot gnu dot org, lucier at math dot purdue dot edu, ink at jurassic dot park dot msu dot ru, feeley at iro dot umontreal dot ca, hosking at cs dot purdue dot edu
- References: <200003292209.RAA04716@polya.math.purdue.edu>
> Date: Wed, 29 Mar 2000 17:09:47 -0500 (EST)
> From: Brad Lucier <lucier@math.purdue.edu>
> Cc: lucier@math.purdue.edu, ink@jurassic.park.msu.ru, feeley@iro.umontreal.ca,
> hosking@cs.purdue.edu, binutils@sourceware.cygnus.com
> *** c-typeck.c 2000/03/22 17:01:19 1.1
> --- c-typeck.c 2000/03/29 18:05:25
> ***************
> *** 3706,3712 ****
> if (TREE_CODE (type) == INTEGER_TYPE
> && TREE_CODE (otype) == POINTER_TYPE
> && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
> ! && !TREE_CONSTANT (value))
> warning ("cast from pointer to integer of different size");
>
> if (warn_bad_function_cast
> --- 3706,3720 ----
> if (TREE_CODE (type) == INTEGER_TYPE
> && TREE_CODE (otype) == POINTER_TYPE
> && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
> ! && !TREE_CONSTANT (value)
> ! #ifdef TARGET_TASO
> ! /* Do not warn about conversions from 64-bit pointer to
> ! 32-bit int if TARGET_TASO. */
> ! && !(TARGET_TASO
> ! && TYPE_PRECISION (type) == 32
> ! && TYPE_PRECISION (otype) == 64)
> ! #endif
> ! )
> warning ("cast from pointer to integer of different size");
It would be better to have a macro, perhaps named
POINTER_SIGNIFICANT_BITS or similar, which specifies that pointers
only contain 32 significant bits and so it doesn't matter that this
conversion happens.
That way, there isn't Alpha-specific code in the generic files.
Also, don't you want to do the same thing for C++?
> ===================================================================
> RCS file: RCS/varasm.c,v
> retrieving revision 1.1
> diff -c -r1.1 varasm.c
> *** varasm.c 2000/03/21 15:56:27 1.1
> --- varasm.c 2000/03/29 18:03:41
> ***************
> *** 4088,4093 ****
> --- 4088,4106 ----
> == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0)))))
> return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
>
> + #ifdef TARGET_TASO
> + /* Allow conversions to 32 bit ints from 64 bit ints that come from
> + &foo. */
> + if (TARGET_TASO
> + && INTEGRAL_TYPE_P (TREE_TYPE (value))
> + && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (value, 0)))
> + && TYPE_PRECISION (TREE_TYPE (value)) == 32
> + && TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0))) == 64
> + && TREE_CODE (TREE_OPERAND (value, 0)) == CONVERT_EXPR
> + && POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (TREE_OPERAND (value, 0), 0))))
> + return initializer_constant_valid_p (TREE_OPERAND (TREE_OPERAND (value, 0), 0), endtype);
> + #endif
> +
Here similarly, except that you want to have a macro that says `the
backend can output mode X as mode Y in constructors at assemble or
link time', and have X be Pmode and Y be SImode.
--
- Geoffrey Keating <geoffk@cygnus.com>