• 软件指令预取论文调研

    由于工作需要,最近这段时间调研了一大批指令预取的论文。 其中这篇论文 A Survey of Recent Prefetching Techniques for Processor Caches 介绍了关于预取技术的所有常见概念,从软件预取到硬件预取...
  • 不可spill reload的异步用寄存器分配方案

    工作的时候遇到了这样的一个场景,我们的异步器件通知程序结束的方式是将回答字写到一个内存地址,或者是一个特殊用途的寄存器中。写到内存的速度肯定是远远低于寄存器的,并且会一定程度抢占内存读写带宽,因此如何分配以及利用这个寄存器便是一个难题。以下为了和普通...
  • 静态变量模板实例化膨胀问题

    问题来源工作中遇到这么一个问题,把部分类型的变量安排在特定地址空间内,暂且称为该类型为handle。这个地址空间不算小,但是也有一定的限制。handle类型的变量之前的实现为静态生命周期,当初没有实现为运行时是因为实现比较复杂,而对于常规C++的语法...
  • 2024年终总结

    与其说是年终总结,更像是自己想到哪里说到哪里的无病呻吟,几乎没有提及什么积极向上的内容,也不会再按照往年一样罗列自己的所有成果(更何况今年也没做什么),但在我眼里的这一年就是如此。 不知不觉2024已经过去,这一年的生活相比前一年差异巨大,做了许多去...
  • LLVM异常实现五 总结回顾

    整个异常处理的过程中,涉及到各种层级之间相互调用,同时还有一些函数还会负责处理不同的功能(比如说personality会同时处理search以及clean),这都导致了整个过程相对复杂,因此在这里选择将异常抛出的整个过程再次用文字整理一遍,省略去庞大...
  • LLVM异常实现四 personality

    前面libunwind的过程中多次和personality进行交互,这部分是由语言提供和语言相关的内容。libunwind的两个阶段对应到这一个函数之中,personality部分根据libunwind扫描到的平台相关的信息,在ehframe中扫描到...
  • LLVM异常实现三 libunwind

    上期提到的__cxa_xxx相关函数的实现离不开libunwind的相关接口,libunwind专门用于平台无关的堆栈展开和错误处理,内部做了很多平台相关的兼容工作,这期我们主要来介绍一下libunwind相关接口的具体实现。 _Unwind_Rai...
  • LLVM异常实现二 libcxxabi

    在之前的博客提到带有异常相关的C++代码编译成llvm ir后,会插入libcxxabi的__cxa_xxx函数,这期则是来了解这些函数的实现。 接口libcxxabi中的部分包含了exception,array的分配与释放,virtual相关,de...
  • LLVM异常实现一 LLVM IR

    这一期我们通过编译C++到LLVM代码来查看这部分的实现。在此之前我们需要了解一些简单的基础知识,之后我们将从一个最小抛出异常的代码开始,逐渐复杂化这个例子,查看生成不同的LLVM IR来理解整个过程。 函数调用首先一个编译一个函数调用的过程中,LL...
  • LLVM异常实现零 异常的多层结构与实现方式

    本系列的博客的内容是LLVM异常实现的整个过程,从C++生成LLVM IR开始,到运行时实际调用的库函数,会从抛出异常的过程开始结合llvm相关的代码进行讲解。这一期主要内容是讲解异常相关的结构、底层实现方式等基础信息,之后从顶向下逐层分解其中的实现...