[LLVMdev] LLVM and little-endian 32-bit MIPS code generation

Gang-Ryung Uh
Fri, 15 Jul 2011 17:13:58 -0000

Hi,

    We have tried and generate assembly code for very simple test C code.
But, binutils-2.5.2 (simplesim-3.0) cannot handle the produced assembly code
with the following complaints. Could you advise which version of bitutils
that we need to use for mips code with LLVM with Clang? Thanks,

$ GCC addr01.s
addr01.s: Assembler messages:
addr01.s:1: Error: Unknown pseudo-op:  `.section'
addr01.s:2: Error: Unknown pseudo-op:  `.previous'
addr01.s:3: Error: Bad expression
addr01.s:3: Warning: Missing string
addr01.s:3: Error: Rest of line ignored. First ignored character is `a'.
addr01.s:3: Error: Rest of line ignored. First ignored character valued 0x9.
addr01.s:6: Warning: .type pseudo-op used outside of .def/.endef; ignored
addr01.s:6: Error: Rest of line ignored. First ignored character is `f'.
addr01.s:9: Warning: Unrecognized register name
addr01.s:17: Error: ERROR: Illegal operands `sw $ra,28($sp)'
addr01.s:19: Warning: Instruction addiu requires absolute expression
addr01.s:19: Error: ERROR: Illegal operands `addiu $5,$zero,1'
addr01.s:21: Error: Bad expression
addr01.s:21: Error: Bad expression
....

On Sun, Jul 10, 2011 at 10:22 PM, Akira Hatanaka <ahatanak at gmail.com>
wrote:

> It will produce little-endian code if you replace "mips" with
"mipsel".
>
> 1. clang -ccc-host-triple mipsel-unknown-linux -ccc-clang-archs mipsel -O3
> -S -emit-llvm foo.c -o foo.ll
> 2. llc -march=mipsel -mcpu=4ke foo.ll -o foo.s (the -march option is
> redundant)
>
> If you do not specify the target cpu with -mcpu, by default it will
> generate code for Mips1, which has not been tested as thoroughly as
Mips32r2
> (-mcpu=4ke) or Mips2 (-mcpu=mips2).
>
> The default ABI is o32.
>
> On Sat, Jul 9, 2011 at 8:32 AM, Gang-Ryung Uh <guh at boisestate.edu>
wrote:
>
>> We are trying to use LLVM (Clang as the C frontend) to generate code
for
>> 32-bit MIPS (little-endian)l, which can run on simplescalar 3.0
>> sslittle-na-sstrix platform. Can you advise what would be the right way
to
>> use the LLVM compiler infrastructure?
>>
>> The following is the one I used, but it appears that it produce the
code
>> in big-endian (and I wonder whether the calling convention is right.)
To
>> check the correctness of code generation in a quick and dirty way, I
don't
>> invoke LLVM "opt"
>>
>> (1) clang -emit-llvm hello.c -S -o hello.ll
>> (2) llvm-as hello.ll
>> (2) llc -march=mips hello.bc
>>
>> Thanks in advance.
>>
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>>
>


--
Gang-Ryung Uh, Associate Professor
Department of Computer Science
College of Engineering, Boise State Univerisity
tel: 1 208 426-5691  e-mail:guh at boisestate.edu
http://cs.boisestate.edu/~uh
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20110715/ea2222ea/attachment.html>