如何在LLVM后端中定义多用途(i32/f32)寄存器?
我想将寄存器定义为LLVM后端上的多用途浮点和整数寄存器。有人知道怎么做吗如何在LLVM后端中定义多用途(i32/f32)寄存器?,llvm,Llvm,我想将寄存器定义为LLVM后端上的多用途浮点和整数寄存器。有人知道怎么做吗 谢谢 我相信您可以看到它是如何在LLVM后端实现的 您熟悉的体系结构。例如,ARM有32个 D寄存器(D0..D31),可保存双浮点或矢量 价值观在这种情况下,RegisterClass定义非常简单 直截了当: // Scalar double precision floating point / generic 64-bit vector register class. def DPR : RegisterClass&
谢谢 我相信您可以看到它是如何在LLVM后端实现的 您熟悉的体系结构。例如,ARM有32个 D寄存器(D0..D31),可保存双浮点或矢量 价值观在这种情况下,
RegisterClass
定义非常简单
直截了当:
// Scalar double precision floating point / generic 64-bit vector register class.
def DPR : RegisterClass<"ARM", [f64, v8i8, v4i16, v2i32, v1i64, v2f32], 64,
(sequence "D%u", 0, 31)> {
// Allocate non-VFP2 registers D16-D31 first.
let AltOrders = [(rotl DPR, 16)];
let AltOrderSelect = [{ return 1; }];
}
//标量双精度浮点/通用64位向量寄存器类。
def DPR:注册表类{
//首先分配非VFP2寄存器D16-D31。
让AltOrders=[(rotl DPR,16)];
让AltOrderSelect=[{return 1;}];
}