目前龍芯通過自己的指令集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。頂級技術分享,文章首發。