根据龙架构目前的编码方案,能确定的是,龙架构的压缩指令扩展很可能要涉及新的机器模式:特权架构变更(开关该机器模式的 CSR)、内核变更(学会处理新的机器模式)、ELF psABI 变更(新的 flag 位)
这是因为龙架构是小端架构,而主操作码(没有更多信息时能确定必然是操作码的仅有的位)处在每个 32 位指令字的最高位,所以你必须至少取满这 4 个字节才能知道操作码是啥。只取 2 个字节的话,完全可能出现「一条完整指令的操作数部分也是一条合法的压缩指令」的情况,这就会跑飞了。
不允许上述情况出现的唯一方法就是取满 4 个字节,然后规定一些主操作码代表「这其实是两条压缩指令」。但是:
1. 这样的话,压缩指令就只能成对出现,并且不能跨越 32 位边界,对编译器、汇编器、程序员的心智负担都很重;
2. 仍然需要内核、调试器等底层组件配合,也就是需要升级系统才能用上压缩指令;
2. 龙芯在 2023.11.28 的发布会上承诺把高 1/2 的编码空间给到第三方用,所以留给龙芯自用的主操作码已经不多了,可能影响后续编码空间设计。
所以很可能仍然是 ARM Thumb 或者 microMIPS 的搞法,并且很可能需要允许在两种机器模式间互相跳转。
这是因为龙架构是小端架构,而主操作码(没有更多信息时能确定必然是操作码的仅有的位)处在每个 32 位指令字的最高位,所以你必须至少取满这 4 个字节才能知道操作码是啥。只取 2 个字节的话,完全可能出现「一条完整指令的操作数部分也是一条合法的压缩指令」的情况,这就会跑飞了。
不允许上述情况出现的唯一方法就是取满 4 个字节,然后规定一些主操作码代表「这其实是两条压缩指令」。但是:
1. 这样的话,压缩指令就只能成对出现,并且不能跨越 32 位边界,对编译器、汇编器、程序员的心智负担都很重;
2. 仍然需要内核、调试器等底层组件配合,也就是需要升级系统才能用上压缩指令;
2. 龙芯在 2023.11.28 的发布会上承诺把高 1/2 的编码空间给到第三方用,所以留给龙芯自用的主操作码已经不多了,可能影响后续编码空间设计。
所以很可能仍然是 ARM Thumb 或者 microMIPS 的搞法,并且很可能需要允许在两种机器模式间互相跳转。