我正在为SIMD架构开发LLVM编译器。该体系结构分为两部分,即仅处理标量数据的CP(控制处理器)和处理矢量数据的PE(处理元素)数组。标量数据存储器和矢量数据存储器是分开的。只有CP可以访问标量数据存储器,而PE阵列只能访问矢量数据存储器。
通常,在程序执行期间,所有本地数据都存储在堆栈中,堆栈位于标量数据存储器中。但是,如果定义了一个矢量,它也将存储在标量数据存储器中,而不是矢量数据存储器,而矢量数据存储器应该存储矢量。考虑到负责向量计算的处理器不能直接访问标量数据存储器,最简单的方法是让CP访问向量的元素并将它们逐个广播到PE数组,这将是非常的烦人并且需要很多周期。
我想知道是否可以同时分配两个堆栈帧,一个用于标量数据,另一个用于矢量数据。在这种情况下,我们还需要两个堆栈指针和帧指针。如果可能,如何在LLVM中实现它?
我知道这是一个棘手的问题。在LLVM中,我只能定义一个堆栈指针寄存器和帧指针寄存器。此外,计算堆栈大小的过程由llvm自动执行。
如果你们有些人有任何想法,请告诉我。
非常感谢你。