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



             Bug #: 55882

           Summary: unaligned load/store : incorrect struct offset

    Classification: Unclassified

           Product: gcc

           Version: 4.8.0

            Status: UNCONFIRMED

          Severity: normal

          Priority: P3

         Component: c

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: jan.sm...@alcatel-lucent.com





void testfunction(somestruct * chip)

{

    unsigned i;

    for (i = 0; i < 4; i++)

    {

       {

tUint64 mask = ((((((((((chip->pp_mask) & (0x00200000)) ? (0x08) :

(((chip->pp_mask) & (0x00000200)) ? (0x0C) : 0xDEADBEEF))))-1) - (0) +

1)==64)?0ull:((1ull)<<((((((((((chip->pp_mask) & (0x00200000)) ? (0x08) :

(((chip->pp_mask) & (0x00000200)) ? (0x0C) : 0xDEADBEEF))))-1) - (0) + 1) <

(63)) ? (((((((chip->pp_mask) & (0x00200000)) ? (0x08) : (((chip->pp_mask) &

(0x00000200)) ? (0x0C) : 0xDEADBEEF))))-1) - (0) + 1) : (63))))) - 1) << ((1) ?

(0) : ((((((chip->pp_mask) & (0x00200000)) ? (0x08) : (((chip->pp_mask) &

(0x00000200)) ? (0x0C) : 0xDEADBEEF)))) - 1 - ((((((chip->pp_mask) &

(0x00200000)) ? (0x08) : (((chip->pp_mask) & (0x00000200)) ? (0x0C) :

0xDEADBEEF))))-1)));

    chip->config->smth[i].xyz = chip->config->smth[i].xyz & ~mask;

};

    }



The structure 'somestruct' is hard to reduce and for various reasons I can not

disclose it. 



GCC 4.6 :

=========

00000000 <testfunction>:

   0:   27bdffe8    addiu   sp,sp,-24

   4:   afbe0014    sw  s8,20(sp)

   8:   03a0f02d    move    s8,sp

   c:   afc40018    sw  a0,24(s8)

  10:   afc00000    sw  zero,0(s8)

  14:   08000059    j   164 <testfunction+0x164>

  18:   00000000    nop

  1c:   8fc20018    lw  v0,24(s8)

  20:   8c431ab8    lw  v1,6840(v0)

  24:   3c020020    lui v0,0x20

  28:   00621024    and v0,v1,v0

  2c:   14400006    bnez    v0,48 <testfunction+0x48>

  30:   00000000    nop

  34:   8fc20018    lw  v0,24(s8)

  38:   8c421ab8    lw  v0,6840(v0)

  3c:   30420200    andi    v0,v0,0x200

  40:   10400018    beqz    v0,a4 <testfunction+0xa4>

  44:   00000000    nop

  48:   8fc20018    lw  v0,24(s8)

  4c:   8c431ab8    lw  v1,6840(v0)

  50:   3c020020    lui v0,0x20

  54:   00621024    and v0,v1,v0

  58:   1440000e    bnez    v0,94 <testfunction+0x94>

  5c:   00000000    nop

  60:   8fc20018    lw  v0,24(s8)

  64:   8c421ab8    lw  v0,6840(v0)

  68:   30420200    andi    v0,v0,0x200

  6c:   10400005    beqz    v0,84 <testfunction+0x84>

  70:   00000000    nop

  74:   24030fff    li  v1,4095

  78:   0000102d    move    v0,zero

  7c:   08000023    j   8c <testfunction+0x8c>

  80:   00000000    nop

  84:   2403ffff    li  v1,-1

  88:   2402ffff    li  v0,-1

  8c:   08000027    j   9c <testfunction+0x9c>

  90:   00000000    nop

  94:   240300ff    li  v1,255

  98:   0000102d    move    v0,zero

  9c:   0800002c    j   b0 <testfunction+0xb0>

  a0:   00000000    nop

  a4:   2403ffff    li  v1,-1

  a8:   3c027fff    lui v0,0x7fff

  ac:   3442ffff    ori v0,v0,0xffff

  b0:   afc3000c    sw  v1,12(s8)

  b4:   afc20008    sw  v0,8(s8)

  b8:   8fc20018    lw  v0,24(s8)

  bc:   8c461ac0    lw  a2,6848(v0)

  c0:   8fc20018    lw  v0,24(s8)

  c4:   8c451ac0    lw  a1,6848(v0)

  c8:   8fc40000    lw  a0,0(s8)

  cc:   0080182d    move    v1,a0

  d0:   00031080    sll v0,v1,0x2

  d4:   0040182d    move    v1,v0

  d8:   00031080    sll v0,v1,0x2

  dc:   00431023    subu    v0,v0,v1

  e0:   00441023    subu    v0,v0,a0

  e4:   000211c0    sll v0,v0,0x7

  e8:   00a21021    addu    v0,a1,v0

  ec:   8c4212d0    lw  v0,4816(v0)

  f0:   00021502    srl v0,v0,0x14

  f4:   3042ffff    andi    v0,v0,0xffff

  f8:   0040182d    move    v1,v0

  fc:   97c2000e    lhu v0,14(s8)

 100:   00021027    nor v0,zero,v0

 104:   3042ffff    andi    v0,v0,0xffff

 108:   00621024    and v0,v1,v0

 10c:   3042ffff    andi    v0,v0,0xffff

 110:   30420fff    andi    v0,v0,0xfff

 114:   3045ffff    andi    a1,v0,0xffff

 118:   8fc40000    lw  a0,0(s8)

 11c:   0080182d    move    v1,a0

 120:   00031080    sll v0,v1,0x2

 124:   0040182d    move    v1,v0

 128:   00031080    sll v0,v1,0x2

 12c:   00431023    subu    v0,v0,v1

 130:   00441023    subu    v0,v0,a0

 134:   000211c0    sll v0,v0,0x7

 138:   00c21021    addu    v0,a2,v0

 13c:   00051d00    sll v1,a1,0x14

 140:   8c4512d0    lw  a1,4816(v0)                 <<<<< !

 144:   3c04000f    lui a0,0xf

 148:   3484ffff    ori a0,a0,0xffff

 14c:   00a42024    and a0,a1,a0

 150:   00831825    or  v1,a0,v1

 154:   ac4312d0    sw  v1,4816(v0)                 <<<<< !

 158:   8fc20000    lw  v0,0(s8)

 15c:   24420001    addiu   v0,v0,1

 160:   afc20000    sw  v0,0(s8)

 164:   8fc20000    lw  v0,0(s8)

 168:   2c420004    sltiu   v0,v0,4

 16c:   1440ffab    bnez    v0,1c <testfunction+0x1c>

 170:   00000000    nop

 174:   03c0e82d    move    sp,s8

 178:   8fbe0014    lw  s8,20(sp)

 17c:   27bd0018    addiu   sp,sp,24

 180:   03e00008    jr  ra

 184:   00000000    nop





GCC 4.8

=======

00000000 <testfunction>:

   0:   27bdffe8    addiu   sp,sp,-24

   4:   afbe0014    sw  s8,20(sp)

   8:   03a0f02d    move    s8,sp

   c:   afc40018    sw  a0,24(s8)

  10:   afc00000    sw  zero,0(s8)

  14:   0800005a    j   168 <testfunction+0x168>

  18:   00000000    nop

  1c:   8fc20018    lw  v0,24(s8)

  20:   8c431ab8    lw  v1,6840(v0)

  24:   3c020020    lui v0,0x20

  28:   00621024    and v0,v1,v0

  2c:   14400006    bnez    v0,48 <testfunction+0x48>

  30:   00000000    nop

  34:   8fc20018    lw  v0,24(s8)

  38:   8c421ab8    lw  v0,6840(v0)

  3c:   30420200    andi    v0,v0,0x200

  40:   10400018    beqz    v0,a4 <testfunction+0xa4>

  44:   00000000    nop

  48:   8fc20018    lw  v0,24(s8)

  4c:   8c431ab8    lw  v1,6840(v0)

  50:   3c020020    lui v0,0x20

  54:   00621024    and v0,v1,v0

  58:   1440000e    bnez    v0,94 <testfunction+0x94>

  5c:   00000000    nop

  60:   8fc20018    lw  v0,24(s8)

  64:   8c421ab8    lw  v0,6840(v0)

  68:   30420200    andi    v0,v0,0x200

  6c:   10400005    beqz    v0,84 <testfunction+0x84>

  70:   00000000    nop

  74:   24030fff    li  v1,4095

  78:   0000102d    move    v0,zero

  7c:   08000027    j   9c <testfunction+0x9c>

  80:   00000000    nop

  84:   2403ffff    li  v1,-1

  88:   2402ffff    li  v0,-1

  8c:   0800002c    j   b0 <testfunction+0xb0>

  90:   00000000    nop

  94:   240300ff    li  v1,255

  98:   0000102d    move    v0,zero

  9c:   0800002c    j   b0 <testfunction+0xb0>

  a0:   00000000    nop

  a4:   2403ffff    li  v1,-1

  a8:   3c027fff    lui v0,0x7fff

  ac:   3442ffff    ori v0,v0,0xffff

  b0:   afc3000c    sw  v1,12(s8)

  b4:   afc20008    sw  v0,8(s8)

  b8:   8fc20018    lw  v0,24(s8)

  bc:   8c461ac0    lw  a2,6848(v0)

  c0:   8fc20018    lw  v0,24(s8)

  c4:   8c451ac0    lw  a1,6848(v0)

  c8:   8fc40000    lw  a0,0(s8)

  cc:   0080182d    move    v1,a0

  d0:   00031080    sll v0,v1,0x2

  d4:   0040182d    move    v1,v0

  d8:   00031080    sll v0,v1,0x2

 dc:   00431023    subu    v0,v0,v1

  e0:   00441023    subu    v0,v0,a0

  e4:   000211c0    sll v0,v0,0x7

  e8:   00a21021    addu    v0,a1,v0

  ec:   8c4212d0    lw  v0,4816(v0)

  f0:   00021502    srl v0,v0,0x14

  f4:   3042ffff    andi    v0,v0,0xffff

  f8:   0040182d    move    v1,v0

  fc:   97c2000e    lhu v0,14(s8)

 100:   00021027    nor v0,zero,v0

 104:   3042ffff    andi    v0,v0,0xffff

 108:   00621024    and v0,v1,v0

 10c:   3042ffff    andi    v0,v0,0xffff

 110:   30420fff    andi    v0,v0,0xfff

 114:   3045ffff    andi    a1,v0,0xffff

 118:   8fc40000    lw  a0,0(s8)

 11c:   0080182d    move    v1,a0

 120:   00031080    sll v0,v1,0x2

 124:   0040182d    move    v1,v0

 128:   00031080    sll v0,v1,0x2

 12c:   00431023    subu    v0,v0,v1

 130:   00441023    subu    v0,v0,a0

 134:   000211c0    sll v0,v0,0x7

 138:   00c21021    addu    v0,a2,v0

 13c:   30a30fff    andi    v1,a1,0xfff

 140:   00031900    sll v1,v1,0x4

 144:   8c4512ce    lw  a1,4814(v0)              <<<<< ! 

 148:   3c04ffff    lui a0,0xffff

 14c:   3484000f    ori a0,a0,0xf
 150:   00a42024    and a0,a1,a0

 154:   00831825    or  v1,a0,v1

 158:   ac4312ce    sw  v1,4814(v0)              <<<<< !

 15c:   8fc20000    lw  v0,0(s8)

 160:   24420001    addiu   v0,v0,1

 164:   afc20000    sw  v0,0(s8)

 168:   8fc20000    lw  v0,0(s8)

 16c:   2c420004    sltiu   v0,v0,4

 170:   1440ffaa    bnez    v0,1c <testfunction+0x1c>

 174:   00000000    nop

 178:   03c0e82d    move    sp,s8

 17c:   8fbe0014    lw  s8,20(sp)

 180:   27bd0018    addiu   sp,sp,24

 184:   03e00008    jr  ra

 188:   00000000    nop





$ diff --side-by-side --suppress-common /tmp/46 /tmp/48 -W120 |less

  14:   08000059        j       164 <testfunction+0x164>   |      14:  

0800005a        j       168 <testfunction+0x168>

  7c:   08000023        j       8c <testfunction+0x8c>     |      7c:  

08000027        j       9c <testfunction+0x9c>

  8c:   08000027        j       9c <testfunction+0x9c>     |      8c:  

0800002c        j       b0 <testfunction+0xb0>

 13c:   00051d00        sll     v1,a1,0x14                 |     13c:  

30a30fff        andi    v1,a1,0xfff

 140:   8c4512d0        lw      a1,4816(v0)                |     140:  

00031900        sll     v1,v1,0x4

 144:   3c04000f        lui     a0,0xf                     |     144:  

8c4512ce        lw      a1,4814(v0)

 148:   3484ffff        ori     a0,a0,0xffff               |     148:  

3c04ffff        lui     a0,0xffff

 14c:   00a42024        and     a0,a1,a0                   |     14c:  

3484000f        ori     a0,a0,0xf

 150:   00831825        or      v1,a0,v1                   |     150:  

00a42024        and     a0,a1,a0

 154:   ac4312d0        sw      v1,4816(v0)                |     154:  

00831825        or      v1,a0,v1

 158:   8fc20000        lw      v0,0(s8)                   |     158:  

ac4312ce        sw      v1,4814(v0)

 15c:   24420001        addiu   v0,v0,1                    |     15c:  

8fc20000        lw      v0,0(s8)

 160:   afc20000        sw      v0,0(s8)                   |     160:  

24420001        addiu   v0,v0,1

 164:   8fc20000        lw      v0,0(s8)                   |     164:  

afc20000        sw      v0,0(s8)

 168:   2c420004        sltiu   v0,v0,4                    |     168:  

8fc20000        lw      v0,0(s8)

 16c:   1440ffab        bnez    v0,1c <testfunction+0x1c   |     16c:  

2c420004        sltiu   v0,v0,4

 170:   00000000        nop                                |     170:  

1440ffaa        bnez    v0,1c <testfunction+0x1c

 174:   03c0e82d        move    sp,s8                      |     174:  

00000000        nop

 178:   8fbe0014        lw      s8,20(sp)                  |     178:  

03c0e82d        move    sp,s8

 17c:   27bd0018        addiu   sp,sp,24                   |     17c:  

8fbe0014        lw      s8,20(sp)

 180:   03e00008        jr      ra                         |     180:  

27bd0018        addiu   sp,sp,24

 184:   00000000        nop                                |     184:  

03e00008        jr      ra

                                                           >     188:  

00000000        nop

Reply via email to