3A5000基于龙芯自主定义的LoongArch,自3A5000之后,龙芯就与MIPS彻底分道扬镳,没有任何关系了。这里着重介绍一下LoongArch。
过去这些年,国内CPU公司引进过X86、ARM、Power、SPARC等指令集,但始终没能建立起自己的Wintel,原因就在于始终保持着一种跟生态的心态,而且在软件上的投入严重不足。如今,国际大环境的变化使购买国外指令集授权充满了不确定因素,在这种情况下,开发自主指令集是规避风险的良策。
当然,自主定义指令集存在一个问题,那就是软件生态压力巨大,而龙芯的LoongArch则采用二进制翻译的方式实现兼容。LoongArch的指令系统在设计时,以先进性、扩展性、兼容性为目标,融合了X86、ARM、MIPS、RISC-V指令系统的主要功能,定义专门产生EFLAG结果的运算类指令加速X86、ARM架构下独有的EFLAG值模拟,设计浮点寄存器的栈访问模式加速X87浮点协处理器指令的模拟,实现RISC-V中丰富的同步指令。
LoongArch 是全新的指令集,包含基础指令 337 条、虚拟机扩展 10 条、二进制翻译扩展 176 条、128 位向量扩展 1024 条、256 位向量扩展 1018 条,共计 2565 条原生指令。
LoongArch 的"指令格式"是 MIPS 的超集,仍为RISC且兼容MIPS指令格式,但二进制不同。相对于MIPS,摒弃了部分不适合现代CPU的指令,又做了大量改进和扩展。重新设计的指令格式可以包含更多的指令槽,有利于以后的长远发展。
MIPS只有3种指令格式,LoongArch重新设计了指令格式 ,使可用的格式多达10种 ,其包含3种无立即数格式和7种有立即数格式。例如单条指令支持的立即数从MIPS的最大16位扩展到最大24位,分支跳转偏移也从64K扩展到1M字节,以及寻址空间从固定分段改变为单一平面等,都有效减少了编译结果的目标指令条数和访存次数,提高了效能。
LoongArch 仍为RISC指令集,32位定长指令、32个通用寄存器、32个浮点/向量寄存器。取消转移指令延迟槽,直接跳转指令的目标地址相对PC计算,增加相对转移偏移量。新增将PC作为源操作数的运算指令。
龙芯还提供基于 LoongArch 的 Linux 操作系统,在此操作系统中除了运行原生的 LoongArch 程序,还能通过翻译的方式兼容 MIPS、x86、ARM、RISC-V 这几种指令集的 Linux 程序。
使用LoongArch翻译任何指令时大致流程都相同,只是随着指令系统的差异而在效率上也会有所差异。其中MIPS尽管二进制编码与LoongArch不同,但大部分LoongArch基础指令仍与MIPS相似,因此翻译开销极小。对ARM和RISC-V的翻译效率也比x86更高。龙芯还会提供以LoongArch为目标架构的编译器,已知编译器已经实现把 MIPS 汇编代码编译为 LoongArch 二进制,内嵌MIPS汇编的C/C++源代码甚至不用修改就能编译。
另外,官方PPT里还有几个亮点:
一是已完成龙芯 GS132、GS264、GS464 三大系列 IP 核指令系统修改。
二是基础软件 OS 方面,已经完成 BIOS、编译器的内核改造,可以在 FPGA 平台上运行 SPEC CPU 等复杂应用;正在开展完整操作系统编译工作、开展 Java、JavaScript、.NET 虚拟机迁移工作。
三是二进制翻译系统 LAT 已基本完成开发,开始调试优化。MIPS 和 X86 用户态二进制翻译持续改进中;X86 系统二进制翻译已经基本跑通,最难的地址翻译已经调通。
四是权威第三方机构对 LoongArch指令系统进行知识产权分析,2020年底完成国内部分,2021年完成国际部分。
五是龙芯希望组建自主指令系统联盟。龙芯将把 LoongArch 免费开放,并开放相当于Cortex-A53 以下性能处理器 IP 核,条件是联盟内企业彼此间不能发生指令系统诉讼,期望最终能够形成对第三方的 CPU 防御联盟。同时,还将尝试在高校推广百条指令左右的 Loongarch 小系统。
很显然,龙芯是希望短期兼容MIPS遗留生态过度,建设自己的软件生态,建立中国版的Wintel。龙芯的目标宏伟,实现难度很大,但如果做成了,对产业安全和国家安全的积极作用是异常巨大。