【发布时间】:2018-03-02 10:31:06
【问题描述】:
从关于 Extended ASM - Clobbers and Scratch Registers 的 GCC 文档中,我发现很难理解以下解释和示例:
这是一个虚构的平方和指令,它需要两个 指向内存中浮点值的指针并产生一个浮点数 点寄存器输出。请注意,x 和 y 在 asm 参数,一次指定访问的内存,一次指定一个 asm 使用的基址寄存器。
好的,第一部分明白了,现在继续:
您通常不会浪费 通过这样做注册,因为 GCC 可以为两者使用相同的寄存器 目的。但是,将 %1 和 %3 同时用于 x in 这个 asm 并期望它们是相同的。事实上,%3 很可能不是 登记。它可能是对对象的符号内存引用 由 x 指向。
失去了我。
例子:
asm ("sumsq %0, %1, %2"
: "+f" (result)
: "r" (x), "r" (y), "m" (*x), "m" (*y));
这个例子和句子的第二部分告诉我们什么?与其他代码相比,此代码的附加值是多少?这段代码是否会导致更有效的内存刷新(如本章前面所述)?
【问题讨论】:
-
这个例子我也看不懂。
标签: gcc assembly inline-assembly