This is the mail archive of the crossgcc@sources.redhat.com mailing list for the crossgcc project.

See the CrossGCC FAQ for lots more infromation.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

unaligned structure members (known at compile time)


Can gcc generate the loads and masks necessary to load unaligned structure
members? my target is arm-elf (little-endian)

example...

typedef struct __attribute__((packed)) {
  char c0;
  int i0;
} s;

int
main()
{
  s mys;
  int i;
  mys.i0 = 0x12345678;
  i = mys.i0;
  return 0;
}

The generated assembler would be something like.... (pseudo-asm)
load $r0, &t+(0 bytes)
load $r1, &t+(4 bytes)
load $r2, ($r0 & 0x00ffffff) | ($r2 & 0xff000000)

Failing this...
can gcc generate a warning on accesses to compile-time known unaligned accesses?

Otherwise, my next best thought is to create a function
int load_unaligned_int( int const * p);
that generates the loads from (p&~3) and ((p&~3)+1) and the necessary masks.
Only problem there is, a run time function wouldn't be as efficient as compile
time, and I'd have to break a lot of legacy code.

Thanks,
Shaun



------
Want more information?  See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/
Want to unsubscribe? Send a note to crossgcc-unsubscribe@sourceware.cygnus.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]