楔子:

国内龙芯据说是用的自己的指令集,在研究ILC的时候,发现了龙芯在微软那边确实是一等公民的存在。



龙芯官网

龙芯平台.NET,是龙芯公司基于开源社区.NET独立研发适配的龙芯版本,我们会长期进行安全更新和错误修复,并持续进行性能优化。社区.NET7版本开始已经原生支持LoongArch64架构源码。



代码

在进行目标文件写入的时候
.Net 7 团队把国内的龙芯确实当做一等公民和弃用的项目-LMLPHP



.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 国际」许可协议进行许可。

.Net 7 团队把国内的龙芯确实当做一等公民和弃用的项目-LMLPHP

01-01 13:42