刚刚说了第一种情况,平台级模拟,迁移工作量最小(甚至根本用不着迁移),但很不幸,我判断龙芯不会走这条路。因为放出来的资料显示LoongArch的特权态经过了重新设计,跟他要模拟的哪个架构都不相似。这样的话用户态可能还好,Cache、TLB、页表、中断这些东西估计很难做到透明。兼容每个架构的实现细节也是一件很难想象的事情,毕竟魔鬼在细节。每个架构都有无数的bug和巧合需要模拟,不相信龙芯凭一两百人的研发团队(估计固件最多十几人)就能解决。
那再来讲讲第二种情况。我们目前都在使用的AMD64架构,其实主体是依附于x86当时既有的形态定义的。进入的方式大体上是打开一个“长模式”开关,然后做一个跳转。也就是通过一个开关,可以控制CPU硬件运行在哪种译码、执行模式上。如果改动内核使其感知这一点,即可实现无缝兼容老的用户态。
这显然需要硬件支持,但考虑以前3A3000时代就有一些神奇的寄存器配置位,似乎可以改变跳转指令的语义?3A4000的CPUCFG字段说明也有一些蛛丝马迹。虽然从LoongArch的公开内容中并没有体现,但我们可以做做梦
毕竟这是一个相对需要改动最小的方案了。