[LLVMdev] llvm-mc and endianess.

Richard Sandiford rsandifo at linux.vnet.ibm.com
Thu Mar 6 07:31:14 PST 2014


Dominique Torette <Dominique.Torette at spacebel.be> writes:
> Hi,
>
> As a first step to port the LLVM chain on an in-house big-endian
> processor, I'm integrating the native assembler as a new '-assemble
> -arch=' in llvm-mc.
> All work quite well, I have a correct output ELF format except that
> generated code is little-endian.
> I've understood that the endianess of the LLVM chain is controlled by
> the DataLayout class, but it appear to me that llvm-mc does not make use
> of such class.
> I've seen a backend (CPU0,
> http://jonathan2251.github.io/lbd/genobj.html) that defines two
> different targets and performs the byte swapping as part of the
> EmitInstruction'. Is it the right way?
> Could somebody confirm my understanding and give me some tips about
> endianess in llvm-mc?

At the MC level you need to make your *AsmInfo constructor set:

  IsLittleEndian = false;

Also make sure you pass false to the third argument to createELFObjectWriter().

FWIW there are several in-tree targets that support big-endian,
such as ARM, MIPS and PowerPC.  SystemZ is big-endian only.
It might help to compare with one of those.

Thanks,
Richard




More information about the llvm-dev mailing list