【问题标题】:Files that describe cpu architectures exhaustively to write retargetable compilers详尽描述 cpu 架构以编写可重定向编译器的文件
【发布时间】:2012-08-23 20:14:09
【问题描述】:

我正在为每个 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' 一样执行的 C[i]。 理想情况下,F[i] 文件应使用能够描述未来 cpu 架构的相同语言 DescL 编写。

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

【问题讨论】:

    标签: language-agnostic compiler-construction compilation cpu cpu-architecture


    【解决方案1】:

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

    您会发现一些与New Jersey Machine-Code ToolkitLambda-RTL 规范语言相关的工具和描述。规范本身可能处于混乱状态,而迪亚斯博士更有可能拥有准确且最新的规范。

    Zephyr 网页非常陈旧,绝对过时,不应链接到。 但你可以阅读our papers :-)

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 非常感谢,这就是我正在寻找的答案。所以已经有了 CSDL,一个描述语言家族。 CSDL 由 SLED、PLUNGE、调用约定语言和最复杂的部分组成:lambda-RTL。 (我仍在阅读所有链接...)
      • 您的链接非常有趣。不幸的是,Zephyr 项目似乎不再活跃,无论是您的链接还是zephyr-software.com
      • 很抱歉听到这个消息。尝试联系用户 Norman Ramsey 用户:41661 stackoverflow.com/users/41661/norman-ramsey,他是主要贡献者。
      【解决方案3】:
      • 我知道没有这样的数据库

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

      【讨论】:

      • 我也不知道,但这并不意味着它们不存在。这个星球上有很多无知;告诉不认识的人是没有帮助的。如果您解释为什么您认为它们可能不存在,我认为您的答案会更好。
      【解决方案4】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-12-08
        • 1970-01-01
        • 1970-01-01
        • 2010-09-14
        • 1970-01-01
        • 2011-03-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多