.NET7 for LoongArch64(國產龍芯)

目前龍芯通過自己的指令集LA64支持了.Net7.0.1版本,一同被支持的有Ruby,Nodejs,Java,Electron,Python等。原文:在此處

龍芯.Net7 sdk下載地址:
http://ftp.loongnix.cn/tmp/dotnet/7.0.5/7.0.5-ea1/dotnet-sdk-7.0.105-ea1-loongarch64.tar.xz

在.Net8裏面也可見支持LA64的代碼,下面列舉下
1.返回函數頭地址

#if !defined(TARGET_X86) && !defined(TARGET_ARM64) && !defined(TARGET_LOONGARCH64) && !defined(TARGET_RISCV64)
    if (hasRetBuffArg)
    {
        return GetEEFuncEntryPoint(VarargPInvokeStub_RetBuffArg);
    }

2.結構參數使用浮點寄存器

uint32_t CEEInfo::getLoongArch64PassStructInRegisterFlags(CORINFO_CLASS_HANDLE cls)
{
#if defined(TARGET_LOONGARCH64)
    size = (uint32_t)MethodTable::GetLoongArch64PassStructInRegisterFlags(cls);
#endif
    return size;
}

3.JIT傳入四字節的展開數據塊

#elif defined(TARGET_LOONGARCH64)
    _ASSERTE(IS_ALIGNED(unwindSize, sizeof(ULONG)));
ace for personality routine, it must be 4-byte aligned.
    unwindSize += sizeof(ULONG);

4.JIT64位的一個兼容性,這裏除了LA64還有Risc-v

#if defined(TARGET_AMD64) || defined(TARGET_ARM64) || defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)

5.
龍芯的SDK需要在支持龍芯指令集的機器上執行,但是也可以虛擬一個龍芯指令集的機子,然後在上面模擬執行。參照之前的文章:龍芯(Loongarch64),在Linux虛擬一個龍芯OS體驗下

龍芯.NET團隊爲了更好的支持LoongArch64架構特點,對整個後端指令構建系統進行了創新重構設計,同時,也從字節碼加載、JIT語法樹、ABI規範、函數棧幀設計、GC、異常處理等重要模塊,都做了適應LoongArch架構特點的優化,也爲後續龍芯後續深度參與社區打好基礎。


作者:江湖評談

歡迎關注我的公衆號:jianghupt。頂級技術分享,文章首發。
image

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章