每周一龙:第 30 期
每周一都为大家报道 LoongArch 社区最前线的第一手新鲜资讯! 上周的进展主要有 LoongArch ABI v2.30、工具链,以及 AOSC 研发的新旧世界兼容方案。 详情点进来看!
如无特别说明,文中提及的日期、时间都为北京时间(UTC+8)。
本期周报的实际发稿时间是周二凌晨,因为这个点才写完——白天都在忙别的。 网页上显示的发稿时间仍然是 12 月 25 日: 这是 Docusaurus 早期为了修复一个时区 bug 而导致的又一个时区 bug。
先「马」再看
本栏目的内容具有一定延续性,将持续追踪报道 LoongArch 领域的重要或长期项目(坑)。
Linux
Huacai Chen 发出了 Linux v6.8 开发周期的龙架构 KVM 变更 PR。 其中,Bibo Mao 修复了定时器的模拟;Tianrui Zhao 让虚拟机内部可以使用 LSX、LASX 指令。
Huacai Chen 修复了单节点的逻辑处理器数量大于 64 时,系统引导过程会写坏一些内存内容的问题。
龙芯 QEMU 开发者 Song Gao 为方便用户以 FDT(flattened device tree,拍平设备树)协议启动主线内核, 预备为主线内核的默认配置开启通用 PCIe 宿主支持。
Xi Ruoyao 尝试微调了 LoongArch 上下文切换代码中保存、恢复 8 个浮点条件码的片段, 因为先前的简单写法在 LA464 上性能很差。 然而 Huacai Chen 还是喜欢简单的代码, 因此估计在谁掏出这么改可以提升上下文切换性能的客观证据,例如跑分对比之前,这个补丁是不会被收了 😕。
根据 Xi Ruoyao 的实验结果,LA464 上每次 movcf2gr
花的时间是 movcf2fr + movfr2gr
的 7 倍,
而 movgr2cf
更是 movgr2fr + movfr2cf
的 15 倍!
想在浮点条件码和整数寄存器之间搬运多达 1 比特的数据,多经过浮点寄存器倒一手,居然能快几倍甚至十几倍,简直离谱。
还好 LA664 把这坑填掉了。
工具链
ABI
今(25)日下班前,龙芯工具链团队合并了 LoongArch ABI 规范文档的 v2.30 更新(整体版本号;文档版本号为 v20231219)。 本次更新的主要内容有:
- 明确了基础 ABI 下,函数的向量参数的传递方式。基础 ABI 不保证 SIMD 扩展一定存在,因此只能将向量参数视作基本类型量的数组处理。
- 修复了一些重定位操作的算术描述。
- 增加了代码模型(code model)章节。主要是明确定义了
normal
、medium
与extreme
三种代码模型,以及要求extreme
代码模型的四条拼接地址指令必须相邻。 后者是先前针对该问题的社区讨论所提到的简 单方案。 周报第 26 期的猜测出了些偏差: 可能出于工作量和兼容性考虑,本次并未「一步到位」,直接实现那个通过提供完整关联信息而解决问题的复杂方案。 本站的基线参考文档也已同步更新了。 - 正式加入了周报第 27 期提及的 TLS 描述符(TLSDESC)相关定义。
binutils
mengqinggang 修复了先前会给不是函数类型的符号也生成 PLT(procedure linkage table,过程链接表)记录的问题。
mengqinggang 还按照本次的 ELF psABI 更新,实现了
R_LARCH_ALIGN
对汇编器 .align
第三位置的表达式参数的支持。