楔子:
國內龍芯據說是用的自己的指令集,在研究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 國際」許可協議進行許可。