楔子:
國內龍芯據說是用的自己的指令集,在研究ILC的時候,發現了龍芯在微軟那邊確實是一等公民的存在。
龍芯官網
龍芯平臺.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的寫入的編譯過程。
作者:江湖評談(公眾號同名)
版權:本作品採用「署名-非商業性使用-相同方式共享 4.0 國際」許可協議進行許可。