register-allocation相关内容

如何处理多个溢出值作为单个指令的操作数?

我要实现 线性扫描寄存器分配Poletto和Sarkar提出的算法。这很简单,并为每个活动间隔分配一个寄存器或堆栈位置。 堆栈位置仅分配给一个当已分配的寄存器的活动间隔数等于寄存器数(即没有更多的空闲寄存器)时的时间间隔。 算法: 假设x86指令添加a,b 其中 a 和 b 是通过此算法都已分配了堆栈位置(已溢出)的变量。无法使用两个内存操作数对该指令进行编码,因此至少一个操作数 ..
发布时间:2020-10-06 21:52:28 其他开发

寄存器分配和溢出,简单的方法?

我正在寻找一种将局部变量分配给寄存器的方法.我知道有几种严肃的方法可以做到这一点(即在Wikipedia上提到的 ) ,但我对如何完成“起毛"感到困惑.而且,相关文献令人生畏.我希望有一些更简单的方法可以满足我的要求: 正确性-一种算法,无论有多少局部变量,该算法都会生成正确的代码. 简单性-无需阅读过多文献就可以理解的东西. 效率-它需要比当前方法更好,即: 将操作x = y # ..

寄存器变量地址

在C,我们不能用&功放;找出一个寄存器变量C,但在地址++中,我们可以这样做。为什么是合法的C ++,但不是在C?有人可以请解释深入这个概念。 解决方案 下面是从的 C99标准(PDF): 实现可以简单地将任何注册声明为汽车声明。然而,寻址存储是否实际使用,存储类说明寄存器声明的对象的任何部分的地址无法计算,明确地(通过使用一元&安培; 为6.5.3.2讨论)或隐式(通过如6.3.2 ..
发布时间:2016-08-17 22:07:33 C/C++开发

GCC不节能/函数调用的恢复保留寄存器

我在GCC造成我的问题的方案。我得到的行为是不是我期望的行为。总结的情况,我建议对X86-64这是在硬件仿真器实现了一些新的指令。为了测试这些说明我正在现有的C源$ C ​​$ c和使用十六进制handcoding新指令。因为这些指令与现有X86-64寄存器进行互动,我用的输入/输出/撞列表为GCC声明依赖。 这是怎么回事的是,如果我调用一个函数例如printf的,依赖寄存器不保存和恢复。 例 ..
发布时间:2016-07-18 20:02:27 .NET Framework

GCC:禁止使用某些寄存器

这是一个奇怪的要求,但我有一种感觉,这是可能的。我想是要插入一些编译指示或指令到我的code区域(用C写的),这样​​GCC的寄存器分配会的不的使用它们。 我知道我可以做这样的事情,其中​​的可能的预留该寄存器此变量 寄存器INT VAR1 ASM(“EBX”)= 1984; 注册INT VAR2 ASM(“R9”)= 101; 问题是,我插入新的指令(硬件仿真器)直接和GCC和GAS还没 ..
发布时间:2016-07-18 19:50:07 .NET Framework

算法寄存器分配

我想实现一个code代/赞成我的旧的,在这里我把一切都在堆栈寄存器分配算法树木。现在我想实现塞西 - 乌尔曼算法但仅从内容我在维基百科上发现,一些网页的算法的某些部分仍不清楚我的。 我正在寻找一个解释的部分我失去了一些伪code / C / C ++工作code。 1)我应该使用哪种方法来选择自由寄存器?即,寄存器堆beging使用。我使用的是什么,我认为一个非常贫穷之一:或者返回寄存器:如果 ..