私のCプログラムでアセンブリコードを書く方法を学びたいと思っています。私はアセンブリで整数を理解していますが、浮動小数点数は引き続き私を引き上げます。Cインラインアセンブリー - 'fst'のオペランドタイプの不一致
double asmSqrt(double x) {
double o;
__asm__ ("fld %1;"
"fsqrt;"
"fst %0;"
: "=g" (o)
: "g" (x)
);
return o;
}
私はxの平方根を見つけようとしています。しかし、コンパイルしようとするたびに、オペランドの型の不一致エラーが発生します。
私はここで使用したのと同じ構文に続く:http://www.codeproject.com/KB/cpp/edujini_inline_asm.aspx?display=Print
PS:イムWindows XP上のMinGW GCCを使用して
ダブル結果= sqrt1((ダブル)10)が通話をいWindowsの規則では、レジスタST0またはFP0に浮動小数点数が返されますか? – rsaxvc
コンパイラフラグは何ですか? – rsaxvc
私は、不必要にスタックに戻ってきて、リターンも実装する必要がないようにします。スタックにフラッシュすると、精度が80ビットx87の代わりに64ビットの倍精度にトリミングされます。 (スピードのためにこれをしているのなら、もっと必要です;学習のためには、Carlの答えが私のために解決しました)。 – rsaxvc