.Net 7 團隊把國內的龍芯確實當做一等公民和棄用的專案

江湖評談發表於2023-01-01

楔子:

國內龍芯據說是用的自己的指令集,在研究ILC的時候,發現了龍芯在微軟那邊確實是一等公民的存在。



龍芯官網

龍芯平臺.NET,是龍芯公司基於開源社群.NET獨立研發適配的龍芯版本,我們會長期進行安全更新和錯誤修復,並持續進行效能最佳化。社群.NET7版本開始已經原生支援LoongArch64架構原始碼。



程式碼

在進行目標檔案寫入的時候
image



.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的寫入的編譯過程。

作者:江湖評談(公眾號同名)
版權:本作品採用「署名-非商業性使用-相同方式共享 4.0 國際」許可協議進行許可。

image

相關文章