主页

ARM 指令集切换与 Veneer / Thunk

众所周知,ARM 架构到目前共有三种获得广泛应用的指令集:AArch32(简称 A32,原本称为 ARM 指令集)、AArch64(简称 A64,原本称为 ARM64 指令集)和 Thumb(简称 T32)。这三种指令集各自也有很多版本演进,基于不同微架构的 CPU 支持的指令集(以及版本)也不同,如:

阅读更多

为大端嵌入式处理器编译 Arm GNU 工具链

最近正在试图把 CanoKey 的闭源版本从 Arm Keil 工具链切换到开源的 GNU 工具链。这过程中有许多波折,或许之后会有独立的博客讲述这个故事。在迁移初期就遇到的一大问题是,Canokey 的安全芯片使用的处理器是大端的 SC000,本质上是基于 Armv6-M 架构的 Cortex-M0,使用 Thumb 指令集。而 Arm 官方提供的 Arm GNU Toolchain 对于这一架构仅有小端支持(即 host triple 为 arm-none-eabi,而非 armeb-none-eabi)。

阅读更多

我与超算的 2021——一位退役队员的回忆

倏忽间,距离我本科毕业已经过去了三个学期。这一年半里,虽然我作为研究生无法再上场参与超算比赛,但依旧和超算队有着密切的联系,参与了 SC20、ASC20-21、ISC20 和 SC21 这四场比赛的准备。在转换身份后经历的这些比赛,对我来说与上场参赛是完全不同的体验。之前的每场比赛后,我都会花上半天的时间回顾一下整个过程,写一篇总结,包括 ASC19 上 + 下、ISC19、SC19、ISC20(写了标题就是写了!)。而到现在,我已经很久没写过这样的总结了。恰逢 2021 年年末(每个月总有几十天不想科研的日子),又有好几个人在催促我补上总结(在写了在写了.jpg),于是就有了这篇文章。

阅读更多