代码网址:
https://github.com/specialpointcentral/linux/commit/18e69b611a47a5632c5ebaa74a036264ec5d5ae4
对龙芯的LBT扩展,一直感兴趣,可惜信息很少,也很零散,基本停留在字面上的认知
借龙芯力推上游的东风,通过如上代码,总算对这个扩展,多了一些理解。
LBT扩展的基本组件:
专设了四个临时寄存器,scr0-scr3 给 x86/arm 临时交换数据用
一个标志寄存器,eflags ,想来配合指令集中所提供的“x86/arm定点扩展指令”,相当于在处理器里加入了一个x86/arm的解码器和运算器。
一个浮点堆栈指针寄存器,用来支持浮点数的寻址,内部机制暂时不详
指令集扩展,这个可以从loongnix的binutils/opcode代码里找到
运作的基本原理:
# 二机制翻译LBT,需要内核支持,有个使能操作,重点代码在 src/arch/loongarch/kernel/lbt.s & lbt.h
# 二进制翻译扩展,需要有上下文切换的支持,一些struct里要加入上述的基础组件支持
# 持续添加