如何在LLVM后端中定义多用途(i32 / f32)寄存器?

时间:2014-11-19 12:02:44

标签: llvm

我想在LLVM后端将寄存器定义为多用途浮点数和整数寄存器。有谁知道怎么做?

谢谢!

1 个答案:

答案 0 :(得分:1)

我相信你可以看到它是如何在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; }];
}