On Nov 10, 2010, at 4:00 AM, David Brown wrote:

> Would it be possible to use the named address space syntax to implement 
> reverse-endian data?  Conversion between little-endian and big-endian data 
> structures is something that turns up regularly in embedded systems, where 
> you might well be using two different architectures with different 
> endianness.  Some compilers offer direct support for endian swapping, but gcc 
> has no neat solution.  You can use the __builtin_bswap32 (but no 
> __builtin_bswap16?) function in recent versions of gcc, but you still need to 
> handle the swapping explicitly.
> 
> Named address spaces would give a very neat syntax for using such 
> byte-swapped areas.  Ideally you'd be able to write something like:
> 
> __swapendian stuct { int a; short b; } data;
> 
> and every access to data.a and data.b would be endian-swapped.  You could 
> also have __bigendian and __litteendian defined to __swapendian or blank 
> depending on the native ordering of the target.
> 
> 
> I've started reading a little about how named address spaces work, but I 
> don't know enough to see whether this is feasible or not.
> 
> 
> Another addition in a similar vein would be __nonaligned, for targets which 
> cannot directly access non-aligned data.  The loads and stores would be done 
> byte-wise for slower but correct functionality.

Why not just handle this in the frontend during gimplification?

-Chris

Reply via email to