[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