|
|
|
|
 问一个gcc嵌入汇编的问题 - benu [ 2005-06-05 19:26 | 611 byte(s)]
 Re: 问一个gcc嵌入汇编的问题 - yjx_super [ 2005-06-06 08:55 | 180 byte(s)]
 Re: 问一个gcc嵌入汇编的问题 - benu [ 2005-06-12 19:25 | 80 byte(s)]
|
|
|
|
[Original]
[Print]
[Top]
|
void bar2(int *x, int y)
{
__asm__ __volatile__ (
" leal (%0,%1,4),%0
"
:"+a" (*x) //
:"d" (y)
);
}
void bar3(int *x, int y)
{
__asm__ __volatile__ (
" leal (%0,%1,4),%0
"
:"=a" (*x)
:"d" (y), "0" (*x)
);
}
问一下,这两段代码约束条件的两种描述方式有什么不同吗?-O2优化下的功能倒是一样的。
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
|
GCC中,'输出部的约束条件'+表示编译器为此输出操作数分配的寄存器不能与输入操作数所分配的相同。但是在你的代码中,你已经明确表示要使用 eax 寄存器了( a 约束),所以 '+' 与 '=' 效果相同!
|
|
|
----
Out of your Window!
|
|
[Original]
[Print]
[Top]
|
|
|