楔子:
國內龍芯據說是用的自己的指令集,在研究ILC的時候,發現了龍芯在微軟那邊確實是一等公民的存在。同X64,ARM,X86一同并列交叉編譯和二進制提取。
龍芯官網
龍芯平臺.NET,是龍芯公司基于開源社區.NET獨立研發適配的龍芯版本,我們會長期進行安全更新和錯誤修復,并持續進行性能優化。社區.NET7版本開始已經原生支持LoongArch64架構源碼。
代碼
在進行目標文件寫入的時候
.Obj
在目標文件里面,龍芯LoongArch64會同樣存在于二進制文件里面,以適配不同的平臺編譯特性。
case TargetArchitecture.LoongArch64:LoongArch64.LoongArch64Emitter loongarch64Emitter = new LoongArch64.LoongArch64Emitter(factory, relocsOnly);EmitCode(factory, ref loongarch64Emitter, relocsOnly);loongarch64Emitter.Builder.RequireInitialAlignment(alignment);loongarch64Emitter.Builder.AddSymbol(this);return loongarch64Emitter.Builder.ToObjectData();
棄用
coredistools
https://github.com/dotnet/llilc
項目。
其中blob/main/lib/CoreDisTools/coredistools.cpp生成的coredistools.dll主要是用于ILC里面的C#函數的生成兼容性的匯編代碼。
而這個項目的本身LLILC是一個從LLVM構建.NET兼容JIT的實驗項目,已經被微軟停止。
估測這個coredistools.dll里面的DumpInstruction函數后面也會被替換。
ObjWriter
https://github.com/dotnet/corert
項目。
其中
/blob/master/src/Native/ObjWriter/objwriter.cpp生成的objwriter.dll主要用于目標文件,比如.Obj,.O等。
這個項目主要是之前的NativeAOT的一部分,也被停止了,其余部分被合并到了Runtime里面去了。但是這個objwriter.dll卻被合并之后單獨生成
結果
可以看到LoongArch64與X64,X86,ARM,ARM64一同被納入了LLVM的編譯過程。