3

我正在为每个 cpu 架构 A[i](x86-32、x86-64、ARM、Itanium 等)寻找一个文件 F[i]。每个文件 F[i] 将提供关于架构 A[i] 的足够信息(寄存器、指令集、语义等),因此对于任何语言 L 来说,编写一个程序 P 接受任何 F[ i] 并为语言 L 生成编译器优化器 C[i] 到原生 A[i]。当然,P 关于 A[i] 的知识完全来自 F[i]。

每个 F[i] 都应该包含足够多的信息,以便对于语言 L 到本地 A[i] 的任何给定编译器 C',我们可以编写一个 P 来生成 C[i] 的性能与 C' 一样好。理想情况下,F[i] 文件将使用能够描述未来 cpu 架构的相同语言 DescL 编写。

此类文件 F[i] 是否存在(至少对于最常见的 cpu 架构而言)?那么我在哪里可以下载它们呢?这样的 DescL 是否已经存在?

4

4 回答 4

4

Joao Dias 证明,至少对于代码生成来说,这个问题是不可判定的。也就是说,对于一般的机器架构,这样的程序 P 是不可能存在的。他还开发了对典型机器架构完全有效的启发式方法。我建议你阅读他的论文,其中还回顾了在这个问题上已经完成的一些大型工作。

您将找到一些与新泽西机器代码工具包Lambda-RTL规范语言相关的工具和描述。规范本身可能处于混乱状态,而迪亚斯博士更有可能拥有准确且最新的规范。

Zephyr 网页非常陈旧,绝对过时,不应链接到。但是你可以阅读我们的论文:-)

于 2012-09-26T21:41:21.237 回答
2

我想你会对 Zephyr“国家编译器基础设施”项目感兴趣;请参阅 128.143.136.29/zephyr/ [我会输入一个真实的链接,但 StackOverflow 不允许我为此主机执行此操作。尽管 SO 有意见,但该链接仍然有效。不,我不明白为什么它没有一个好的象征性名称,但是嘿,它不是我的网站。]。

他们认真尝试定义机器描述形式,我相信他们编码了许多“通用”机器指令集。在做出任何选择之前,您应该阅读他们的论文。

于 2012-08-24T16:53:24.807 回答
0

我不知道这样的事情,我认为这对于可行的 P 来说太抽象和复杂了。

我相信任何有用的 F 都将有效地描述通用中间语言和单个 CPU 指令集之间的翻译(即使该语言是声明性的而不是传统的编译器)。看看LLVM 的 TableGen,它用于声明很多关于后端的信息。AFAIK 仍然不足以完整地描述架构,而且使用起来显然相当复杂。

我看不出 P 怎么会知道关于 L 的任何事情,但它需要这些知识来创建编译器 C[i]。当然,除非您专门创建 P 来了解 L,此时 P 变得特定于单个 L,并且实际上是传统的编译器前端,这并不是什么新鲜事。唯一的区别是您正在编写一个用于发出编译器的程序,但我看不出这如何为您节省任何东西,而不是C''像某人写的那样编写C'预先。(解析是一个更简单和更小的问题,因此在解析器生成方面取得了成功。尽管如此,解析器生成器在实现工作和质量方面最多可以与专家手写的解析器竞争。)或者,使 P 成为 AI并教它编译器构造,但这在 AI 的当前状态下是不可能的,然后你必须找到一种方法来教 P 语言(阅读:仍然没有免费的编译器适合你)。

除此之外,编译器必须知道不仅仅是 CPU 指令。操作系统服务、ABI 和可执行格式只是他们面临的许多重要问题中的三个。对于对这些问题应用类似的解决方案,我也有类似的疑问。旧的“分离前端和后端”技巧在工作量方面几乎同样有效,显然更有可能,对我来说更有意义。

于 2012-08-24T18:54:15.477 回答
0
  • 我知道没有这样的数据库

  • 我所知道的最近的公共此类数据库将是 GCC 使用的处理器描述。他们将处理器描述与一些代码混合在一起,以非数据驱动的方式处理代码生成的某些方面。

于 2012-08-24T15:29:09.220 回答