This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PATCH: real.c cross 64bit -> 32bit portability


Loren James Rittle <rittle@latour.rsch.comm.mot.com> writes:

> I am passing this patch on for real.c expert opinion.  The trick is
> that a bit-field r->sign undergoes promotion from 'unsigned int :1' to
> 'signed int' since 31 is signed with greater range.  On the 3.3
> branch, "GCC cross-compiler running on AMD64 64bit host [to i386
> target; forced with -mcpu switch] will output the following incorrect
> assembly instruction which causes as(1) to choke:
>
> movl    $0xffffffffbfc90fdb, %eax
>
> while native compiler outputs
>
> movl    $0xbfc90fdb, %eax" (from Alexander Kabaev)

Do you have a testcase for this one?  That would help ...

Andreas

> May this be installed on mainline and 3.3 branch?  As an alternate, it
> is a one-line cast (appears to be used in the local file).
>
> 	* real.c (encode_ieee_single): Ensure proper promotion.
>
> Index: real.c
> ===================================================================
> RCS file: /home/ncvs/src/contrib/gcc/real.c,v
> retrieving revision 1.1.1.6
> diff -u -r1.1.1.6 real.c
> --- real.c	11 Jul 2003 03:40:49 -0000	1.1.1.6
> +++ real.c	21 Oct 2003 21:05:31 -0000
> @@ -2612,9 +2612,10 @@
>       const REAL_VALUE_TYPE *r;
>  {
>    unsigned long image, sig, exp;
> +  unsigned long sign = r->sign;
>    bool denormal = (r->sig[SIGSZ-1] & SIG_MSB) == 0;
>  
> -  image = r->sign << 31;
> +  image = sign << 31;
>    sig = (r->sig[SIGSZ-1] >> (HOST_BITS_PER_LONG - 24)) & 0x7fffff;
>  
>    switch (r->class)
>
>

Andreas
-- 
 Andreas Jaeger, aj@suse.de, http://www.suse.de/~aj
  SuSE Linux AG, Deutschherrnstr. 15-19, 90429 Nürnberg, Germany
   GPG fingerprint = 93A3 365E CE47 B889 DF7F  FED1 389A 563C C272 A126

Attachment: pgp00000.pgp
Description: PGP signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]