gpt4 book ai didi

hardware - 为 LLVM/CLANG 选择 CPU 架构

转载 作者:行者123 更新时间:2023-12-03 20:21:26 27 4
gpt4 key购买 nike

我正在设计 TTL 串行计算机,我正在努力选择更适合 LLVM 编译器后端的架构(我希望能够在那里运行任何 C++ 软件)。将没有 MMU,没有乘法/除法,没有硬件堆栈,没有中断。

我有两个主要选择:

1) 8 位内存、8 位 ALU、8 位寄存器 (~12-16)。内存地址宽度 24 位。所以我需要使用 3 个寄存器作为 IP 和 3 个寄存器用于任何内存位置。

不用说,在编译器中实现任何地址计算都是非常痛苦的。

2) 24 位内存、24 位 ALU、24 位寄存器 (~6-8)。平淡的内存,不错。缺点是由于设计的串行性质,即使我们对某些 bool 值进行操作,每次操作也需要多花 3 倍的时钟。 24 位内存数据宽度很昂贵。而且一般来说在硬件中实现起来更难。

问题是:您认为在这个 8 位、基于无堆栈的硬件上实现所有 C++ 功能是可能的,还是我需要更复杂的硬件才能生成质量和速度合理的代码?

最佳答案

我支持使用 LCC 的建议。我在这个自制的 16 位 RISC 项目中使用了它:http://fpgacpu.org/xsoc/cc.html .

我认为无论是构建 8 位变体并使用 3 个带进位的加法来增加 IP,还是 24 位变体并在硬件中完成整个操作,这应该没有太大区别。您可以隐藏汇编程序中的差异。

如果你看我上面的文章,或者更简单的 CPU:http://fpgacpu.org/papers/soc-gr0040-paper.pdf你会发现你真的不需要那么多运算符/指令来覆盖整数 C 语言。事实上,有一个 lcc 实用程序 (ops) 可以打印给定机器的最小运算符集。

有关更多信息,请参阅我关于将 lcc 移植到新机器的文章:http://www.fpgacpu.org/usenet/lcc.html

一旦我移植了 lcc,我就编写了一个汇编程序,它从基本指令中合成了更大的指令集。例如,我的机器有 load-byte-unsigned 但没有 load-byte-signed,所以我发出了这个序列:

lbs rd,imm(rs) ->
lbu rd,imm(rs)
lea r1,0x80
xor rd,r1
sub rd,r1

所以我认为你可以通过这个最小的操作覆盖:
  registers
load register with constant
load rd = *rs
store *rs1 = rs2
+ - (w/ w/o carry) // actually can to + with - and ^
>> 1 // << 1 is just +
& ^ // (synthesize ~ from ^, | from & and ^)
jump-and-link rd,rs // rd = pc, pc = rs
skip-z/nz/n/nn rs // skip next insn on rs==0, !=0, <0, >=0

更简单的是没有寄存器(或等效地将寄存器与内存混淆——所有寄存器都有一个内存地址)。

为 SP 留出一个寄存器,并在编译器中编写函数 prolog/epilog 处理程序,您将不必担心堆栈指令。只有代码可以存储每个被调用者的保存寄存器,根据帧大小调整 SP,等等。

中断(和从中断返回)很简单。您需要做的就是将跳转和链接指令强制到指令寄存器中。如果您选择的位模式为 0,并将正确的地址放入源寄存器 rs(特别是如果它是 r0),则可以通过触发器复位输入或额外的强制- 0 和门。我在上面的第二篇论文中使用了类似的技巧。

有趣的项目。我看到一场 TTL/7400 竞赛正在进行中,我在想,一台机器你能逃脱多简单,向机器添加一个 32 KB 或 128 KB 的异步 SRAM 来保存代码和数据是否会作弊。

无论如何,快乐的黑客!

附言

1) 您需要决定每种积分类型的大小。如果您愿意,您当然可以使 char、short、int、long、long long 等大小相同,一个 24b 字,尽管它不符合最小表示范围。

2) 虽然我在这里关注的是 lcc,但你问的是 C++。我建议先说服 C。一旦你弄清楚了 C 的事情,包括软件中的 *、/、% 运算符等,无论是在 LLVM 还是 GCC 中,转向完全成熟的 C++ 都应该更容易处理。 C 和 C++ 之间的区别是“仅”处理虚函数调用、指向成员解引用的指针、动态强制转换、静态构造函数、异常所需的额外 vtables 和 RTTI 表和代码序列(完全建立在原始 C 整数运算符库中)处理等

关于hardware - 为 LLVM/CLANG 选择 CPU 架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7484466/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com