This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
structure packing
- From: Mohamed Shafi <shafitvm at gmail dot com>
- To: gcc-help at gcc dot gnu dot org
- Cc: Rohit Arul Raj <rohitarulraj at gmail dot com>
- Date: Thu, 21 May 2009 20:08:55 +0530
- Subject: structure packing
- References: <ba0bd44d0905210723n5e6e85f5rea8b2b52c381d5d9@mail.gmail.com>
Hello all,
The below code is compiled using a private port based on GCC 4.1.1.
struct data {
???? int wdata;
???? int rdata;
?};// __attribute__((__packed__));
typedef struct data data;
#define data_p (*(volatile data *)(0))
int main(void)
{
? data_p.wdata = data_p.rdata;
}
For the above source code without the 'packed' attribute the assembly
code is generated with word-aligned access. But with packed attribute
enabled the assembly code is generated with byte access. When i looked
into x86 compiler i find that the assembly code generated is same
irrespective of whether the attribute is provided or not.
I am assuming that this happens because when 'packed' attribute is
provided the compiler assumes that there is no alignment to natural
boundary and so produces code for byte access.? Am i right?
In case,
1) if the packing is enabled and all the data elements inside the
struct are by default word-aligned (all the 32bit integers) is it
possible to generate word-aligned assembly code?
2) Packing is enabled for a structure with different data elements.
i.e.
struct data {
???? int wdata;
??? char t;
???? int rdata;
?} __attribute__((__packed__));
Is it possible to generate code like:
wdata -> word aligned access.
rdata -> byte aligned access.
Regards,
Shafi