-te500v2 and packed attribute
S. Couture & K. Musgrove
muscou at sympatico.ca
Wed May 7 03:50:48 UTC 2008
This seem to be a bug, the code generated is byte access only.
# cat test.c
# cat test.c
struct a_packed{
int data;
} __attribute__((packed));
struct a_unpacked{
int data;
};
void test_packed(int in)
{
struct a_packed * ptr;
ptr->data = in;
}
void test_unpacked(int in)
{
struct a_unpacked * ptr;
ptr->data = in;
}
# powerpc-linux-gnu-gcc -O2 -te500v2 test.c -c -o test
# powerpc-linux-gnu-objdump -d test
test: file format elf32-powerpc
Disassembly of section .text:
00000000 <test_packed>:
0: 54 69 86 3e rlwinm r9,r3,16,24,31
4: 54 60 46 3e rlwinm r0,r3,8,24,31
8: 54 6b c6 3e rlwinm r11,r3,24,24,31
c: 98 69 00 03 stb r3,3(r9)
10: 98 09 00 00 stb r0,0(r9)
14: 99 29 00 01 stb r9,1(r9)
18: 99 69 00 02 stb r11,2(r9)
1c: 4e 80 00 20 blr
00000020 <test_unpacked>:
20: 90 69 00 00 stw r3,0(r9)
24: 4e 80 00 20 blr
# powerpc-linux-gnu-gcc -O2 test.c -c -o test
# powerpc-linux-gnu-objdump -d test
test: file format elf32-powerpc
Disassembly of section .text:
00000000 <test_packed>:
0: 90 69 00 00 stw r3,0(r9)
4: 4e 80 00 20 blr
00000008 <test_unpacked>:
8: 90 69 00 00 stw r3,0(r9)
c: 4e 80 00 20 blr
I had to align the structure to make it work :
struct a_packed{
int data;
} __attribute__((packed,aligned(4)));
I would consider this a bug. Is there a better way to fix this then us
having to go trough all the packed structure definitions in our code?
Thanks/
More information about the power-gnu-discuss
mailing list