[llvm-dev] How to add Loongson ISA for Mips target?
Leslie Zhai via llvm-dev
llvm-dev at lists.llvm.org
Thu Sep 6 09:19:47 PDT 2018
Hi Daniel,
Thanks for your kind response!
Loongson 3A3000 is based on MIPS64r2
https://en.wikipedia.org/wiki/Loongson#Loongson_3
I will look at ASE_* class, thanks for your teaching!
And please point out my fault about my requirement
http://lists.llvm.org/pipermail/llvm-dev/2018-September/125895.html
在 2018年09月06日 23:18, Daniel Sanders 写道:
> - my old email address.
>
> The ISA_* classes might not be the best choice for this. There's an
> overall hierarchy and ordering to the ISA_* classes since they
> represent the generations of the MIPS ISA. If these extensions are
> available in Loongson chips based on MIPS32r1 and MIPS32r2 for
> example, it becomes difficult to describe with ISA_* classes without
> duplicating instruction definitions or setting up complicated subsets
> (like we had to for MIPS32r6 to deal with the instruction removals).
>
> I would recommend the ASE_* classes which are intended for application
> specific extensions. These are used for optional extensions to the
> MIPS ISA such as MSA or DSP, but are also used for vendor specific
> extensions to the MIPS ISA such as cnMIPS. The ASE_CNMIPS class and
> the Proc<"octeon", ...> record are good examples that show how
> Cavium's extensions to the MIPS ISA were included.
>
>> On 6 Sep 2018, at 04:01, Simon Atanasyan via llvm-dev
>> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>>
>> Hi,
>>
>> LLVM MIPS backend now supports different MIPS ISA like mips1, mips2,
>> mips3, mips32, mips32r6 etc. If Loongson ISA just add a few new
>> instructions I think you do not have to add a new subtarget. Take a
>> look at MipsInstrInfo.td file. In that file there are multiple
>> ISA_MIPSxxx classes. Take for example ISA_MIPS3 and search it through
>> *.td files. Here is an example of instruction definition specific to
>> mips3:
>> [[
>> def DMTC1 : MTC1_FT<"dmtc1", FGR64Opnd, GPR64Opnd, II_DMTC1,
>> bitconvert>, MFC1_FM<5>, ISA_MIPS3;
>> ]]
>>
>> More general and complete guide can be found here:
>> http://llvm.org/docs/WritingAnLLVMBackend.html
>>
>> On Thu, Sep 6, 2018 at 1:01 PM Leslie Zhai <zhaixiang at loongson.cn
>> <mailto:zhaixiang at loongson.cn>> wrote:
>>>
>>> Hi LLVM developers,
>>>
>>> GCC[1] is able to use Loongson ISA[2] for instruction selection:
>>>
>>> $ cat hello.c
>>> #include <stdio.h>
>>>
>>> int main(int argc, char *argv[]) {
>>> printf("Hello World\n");
>>> return 0;
>>> }
>>>
>>> $ gcc -O0 -S hello.c
>>>
>>> $ cat hello.s
>>> .file 1 "hello.c"
>>> .section .mdebug.abi64
>>> .previous
>>> .nan legacy
>>> .gnu_attribute 4, 1
>>> .abicalls
>>> .rdata
>>> .align 3
>>> .LC0:
>>> .ascii "Hello World\000"
>>> .text
>>> .align 2
>>> .globl main
>>> .set nomips16
>>> .set nomicromips
>>> .ent main
>>> .type main, @function
>>> main:
>>> .frame $fp,48,$31 # vars= 16, regs= 3/0, args= 0, gp= 0
>>> .mask 0xd0000000,-8
>>> .fmask 0x00000000,0
>>> .set noreorder
>>> .set nomacro
>>> daddiu $sp,$sp,-48
>>> gssq $31,$fp,32($sp)
>>> sd $28,24($sp)
>>> move $fp,$sp
>>> lui $28,%hi(%neg(%gp_rel(main)))
>>> daddu $28,$28,$25
>>> daddiu $28,$28,%lo(%neg(%gp_rel(main)))
>>> move $2,$4
>>> sd $5,8($fp)
>>> sll $2,$2,0
>>> sw $2,0($fp)
>>> ld $2,%got_page(.LC0)($28)
>>> daddiu $4,$2,%got_ofst(.LC0)
>>> ld $2,%call16(puts)($28)
>>> move $25,$2
>>> .reloc 1f,R_MIPS_JALR,puts
>>> 1: jalr $25
>>> nop
>>>
>>> move $2,$0
>>> move $sp,$fp
>>> gslq $31,$fp,32($sp)
>>> ld $28,24($sp)
>>> daddiu $sp,$sp,48
>>> j $31
>>> nop
>>>
>>> .set macro
>>> .set reorder
>>> .end main
>>> .size main, .-main
>>> .ident "GCC: (GNU) 4.9.3 20150626 (Red Hat 4.9.3-8)"
>>>
>>> gssq and gslq are some instructions of Loongson ISA. How to add
>>> Loongson ISA for Mips target?
>>>
>>> I just:
>>>
>>> * add loongson3a cpu in frontend
>>> https://github.com/xiangzhai/clang/commits?author=xiangzhai
>>>
>>> * initial Loongson3A subtarget skeleton.
>>>
>>> Are there some documents or papers? Please teach me, thanks a lot!
>>>
>>> 1. https://github.com/loongson-community/gcc
>>> 2. Chinese Simplified version
>>> http://www.loongson.cn/uploadfile/cpu/3A3000/Loongson3A3000_3B3000user2.pdf
>>
>> --
>> Simon Atanasyan
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
--
Regards,
Leslie Zhai
More information about the llvm-dev
mailing list