[llvm-dev] Non-native endianness support in Clang
Guy Benyei via llvm-dev
llvm-dev at lists.llvm.org
Wed Aug 28 07:15:49 PDT 2019
AFAIK, the padding of non-packed structs shouldn't be affected, but bitfield offsets must be adjusted.
I'll test the solution thoroughly to make sure different structs with this attribute are interpreted the same on BE and LE targets.
From: Finkel, Hal J. <hfinkel at anl.gov>
Sent: Monday, August 26, 2019 9:59 PM
To: Guy Benyei <guybe at mellanox.com>; cfe-dev at lists.llvm.org; llvm-dev at lists.llvm.org
Subject: Re: [llvm-dev] Non-native endianness support in Clang
On 8/26/19 9:18 AM, Guy Benyei via llvm-dev wrote:
> I'd like to implement the gnu attribute "scalar_storage_order" to mark structs with non-native endianness. My rational is working on network protocols over little endian architecture (for instance: RiscV).
> An old bug is open on this issue here:
> I'd like to discuss the possible ways to implement this.
> The GCC implementation is pretty complicated, touching almost everything, modifying optimizations, etc...:
> I think, it would be better, to implement this attribute in the frontend only, adding the required byte-swaps early.
I agree. Adding the swaps in the frontend seems relatively straightforward. As I understand it, for non-packed structs, you also need to adjust the relative position of the padding?
> Any thoughts, ideas, objections?
> Guy Benyei
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
Lead, Compiler Technology and Programming Languages Leadership Computing Facility Argonne National Laboratory
More information about the llvm-dev