Mohamed Shafi <shafitvm@xxxxxxxxx> writes: > 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 don't see this. When I compile the above test case (i.e., the struct is not packed) on x86, I see word accesses. > 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? No. The packed attribute tells the compiler that the struct may be misaligned. > 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. No. You could try putting a packed struct inside the unpacked struct, though; I don't know whether or not that would work. Ian