target/7250: __ashrdi3 returns wrong value on 32 bit hppa

Jeff Law law@porcupine.slc.redhat.com
Tue Jul 9 15:56:00 GMT 2002


The following reply was made to PR target/7250; it has been noted by GNATS.

From: Jeff Law <law@porcupine.slc.redhat.com>
To: sje@cup.hp.com
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: target/7250: __ashrdi3 returns wrong value on 32 bit hppa 
Date: Tue, 09 Jul 2002 16:48:46 -0600

 In message <20020709203142.10159.qmail@sources.redhat.com>, sje@cup.hp.com writ
 es:
  >
  >>Number:         7250
  >>Category:       target
  >>Synopsis:       __ashrdi3 returns wrong value on 32 bit hppa
  >>Confidential:   no
  >>Severity:       serious
  >>Priority:       medium
  >>Responsible:    unassigned
  >>State:          open
  >>Class:          sw-bug
  >>Submitter-Id:   net
  >>Arrival-Date:   Tue Jul 09 13:36:01 PDT 2002
  >>Closed-Date:
  >>Last-Modified:
  >>Originator:     sje@cup.hp.com
  >>Release:        3.0.2
  >>Organization:
  >>Environment:
  >hppa1.1-hp-hpux11.00
  >>Description:
  >Arithmatic right shift of long long (64 bit) value returns wrong value.  See 
  >attached file (x.c) for a program that
  >fails with -O0 (with call to __ashrdi3) but works with optimization because t
  >he call is optimized away.
  >
  >>How-To-Repeat:
  >Compile x.c and run it *without* optimization on a 32 bit PA machine.  With o
  >ptimization it works.
 Can you look a little deeper into this?  It seems quite odd that
 ashrdi3 would return the wrong value for a shift count of zero as
 it special cases zero count in libgcc2.c:
 
 DWtype
 __ashrdi3 (DWtype u, word_type b)
 {
   DWunion w;
   word_type bm;
   DWunion uu;
 
   if (b == 0)
     return u;
 
 
 [ ... ]
 
 Jeff
 



More information about the Gcc-prs mailing list