【发布时间】:2014-04-04 12:13:54
【问题描述】:
我在 gcc 酷刑测试套件中找到了这个小块 C 宝石,或多或少我理解它,除了标有我的 cmets 的行...
void __attribute__((noinline,noclone))
foo(int *p, float *q) { __asm__ volatile ("" : : : "memory"); } /// ??? 1
int main()
{
if (sizeof (int) == sizeof (float))
{
int i;
float f;
int *p;
/* Prevent i and f from being rewritten into SSA form. */
foo (&i, &f);
i = 0;
f = 1.0;
p = (int *)&f;
__builtin_memcpy (&i, p, 4); /// ??? 2
if (*(float *)&i != 1.0)
__builtin_abort ();
}
return 0;
}
所以,问题 1:
这是什么__asm__ volatile ("" : : : "memory");?直到现在才看到这种语法......
问题2:
既然__builtin_memcpy 在我看来是一个函数,那么它在哪里定义?完整的源代码按原样编译和运行(没有任何额外的包含和库)所以我很茫然......是否有一组 __builtin*** 函数可以通过 gcc 获得,而不使用任何库?
【问题讨论】: