如果"+ m"用作输出约束,gcc会正常工作吗?

Dav*_*erd 6 c++ gcc inline-assembly

根据扩展汇编程序的gcc文档:

当操作数的约束允许寄存器时,您应该只使用读写操作数.

这似乎是非常明确的:你不能使用+ m作为输出.

但是,我已经看过很多次了.事实上,Linus Torvalds有记录说

gcc文档是次要的.他们没有更新,他们不正确,他们没有反映现实,他们并不重要.对于像这样的事情,唯一正确的用法是"+ m"

如果编译器最终搞砸了我的代码,我不想使用+ m.甚至检查输出asm以确定它是否正常工作并不意味着明天当我改变一些看似无关的东西时它仍然会起作用.或者当我获得gcc的下一次更新时它仍然可以工作.

如果文档是正确的,我不能依赖于这种正常工作,我想知道,所以我可以寻求其他选择(其中大多数是令人不快的痛苦).如果文档错误,请告诉我如何纠正它们.

Dav*_*erd 3

事实证明,问题出在文档上(请参阅电子邮件)。如果链接失效:

文档的这一部分已经错误了一段时间了。该文档针对 4.8 进行了更正,但对于早期版本也是错误的。

由于我使用的是 rubenvb 的 x64 编译器,该编译器报告版本为 4.7.2,因此这就是我正在阅读的文档的版本。然而,实际的代码签入是在 2004 年,所以我非常有信心我正在运行的代码中包含了更改。