[Bug c++/13511] Problem with compiler optimization -o2

osoentgen at lucent dot com gcc-bugzilla@gcc.gnu.org
Mon Jan 5 12:44:00 GMT 2004


------- Additional Comments From osoentgen at lucent dot com  2004-01-05 12:44 -------
Now with commented assembler code.
'*Frameptr >> 8' leads to missing pointer increment:

void test ()
{
        char *Frameptr = (char *) buffer;
        char *CEmsgArray = (char *)buffer2;
  100000:       3d 40 00 10     lis     r10,16                  Prepare 
CEmsgArray address
  100004:       39 4a 00 98     addi    r10,r10,152             CEmsgArray addr 
has been loaded into R10


        Frameptr++;
        {  CEmsgArray [12 ] = (char)(  *Frameptr  >> 8 );  CEmsgArray [13 ] = 
(char)(  *Frameptr ); } ;
  100008:       38 00 00 00     li      r0,0                    Shift by 8 is 
always zero
  10000c:       3d 60 00 10     lis     r11,16                  Prepare 
Frameptr address
  100010:       98 0a 00 0c     stb     r0,12(r10)              CEmsgArray[12] 
is being assigned (OK)
  100014:       39 6b 00 34     addi    r11,r11,52              Frameptr addr 
has been loaded into R11
  100018:       88 0b 00 00     lbz     r0,0(r11)               *Frameptr
  10001c:       98 0a 00 0d     stb     r0,13(r10)              CEmsgArray[13] 
is being assigned (WRONG!!!)
        CEmsgArray[10]=(char) (*Frameptr);
  100020:       89 2b 00 00     lbz     r9,0(r11)               *Frameptr
  100024:       99 2a 00 0a     stb     r9,10(r10)              CEmsgArray[10] 
is being assigned (WRONG!!!)
        CEmsgArray[11]=(char) (*Frameptr);
  100028:       88 0b 00 00     lbz     r0,0(r11)               *Frameptr
  10002c:       98 0a 00 0b     stb     r0,11(r10)              CEmsgArray[11] 
is being assigned (WRONG!!!)
  100030:       4e 80 00 20     blr

=================

Example of good case (shift of 7):

void test ()
{
        char *Frameptr = (char *) buffer;
  100000:       3d 40 00 10     lis     r10,16                  Prepare 
Frameptr address
  100004:       39 4a 00 38     addi    r10,r10,56              Frameptr addr 
has been loaded into R10
        char *CEmsgArray = (char *)buffer2;


        Frameptr++;
        {  CEmsgArray [12 ] = (char)(  *Frameptr  >> 7 );  CEmsgArray [13 ] = 
(char)(  *Frameptr ); } ;
  100008:       8c 0a 00 01     lbzu    r0,1(r10)               Frameptr++
  10000c:       3d 60 00 10     lis     r11,16                  Prepare 
CEmsgArray address
  100010:       39 6b 00 9c     addi    r11,r11,156             CEmsgArray addr 
has been loaded into R11
  100014:       54 00 c9 fe     rlwinm  r0,r0,25,7,31           >> 7
  100018:       98 0b 00 0c     stb     r0,12(r11)              CEmsgArray[12] 
is being assigned (OK)
  10001c:       89 2a 00 00     lbz     r9,0(r10)               *Frameptr
  100020:       99 2b 00 0d     stb     r9,13(r11)              CEmsgArray[13] 
is being assigned (OK)
        CEmsgArray[10]=(char) (*Frameptr);
  100024:       88 0a 00 00     lbz     r0,0(r10)               *Frameptr
  100028:       98 0b 00 0a     stb     r0,10(r11)              CEmsgArray[10] 
is being assigned (OK)
        CEmsgArray[11]=(char) (*Frameptr);
  10002c:       89 2a 00 00     lbz     r9,0(r10)               *Frameptr
  100030:       99 2b 00 0b     stb     r9,11(r11)              CEmsgArray[11] 
is being assigned (OK)
  100034:       4e 80 00 20     blr


-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |UNCONFIRMED
         Resolution|INVALID                     |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511



More information about the Gcc-bugs mailing list