そのようにあなたは、C++の機能の中にアセンブラを埋め込むには限界(およびC++の関数を使用しては、通常呼び出す)されているものを敏感非常に待ち時間のあるアプリケーションを書いている場合:C++での組み込みアセンブラは受け入れられますか?
inline __int64 GetCpuClocks()
{
// Counter
struct { int32 low, high; } counter;
// Use RDTSC instruction to get clocks count
__asm push EAX
__asm push EDX
__asm __emit 0fh __asm __emit 031h // RDTSC
__asm mov counter.low, EAX
__asm mov counter.high, EDX
__asm pop EDX
__asm pop EAX
// Return result
return *(__int64 *)(&counter);
}
(上記の関数がどこから来ました
ブラックボックスのようなアセンブラインライン関数を扱うことができますか?アセンブラで実行された計算結果を簡単に取得できますか?あなたは変数が現在どのようなレジスタにあるのかわからないという危険性はありますか?それは解決するよりも多くの問題を引き起こすか、特定の小さなタスクでは受け入れられるのでしょうか?これは、より多くの方に向けられ
http://www.codeproject.com/Articles/15971/Using-Inline-Assembly-in-C-C
EDIT2:
は、私はちょうどこれを見つけた
EDITを(あなたのアーキテクチャが固定されようとしていると仮定し、知られている)、これは私がほのめかしていますものですLinuxとx86-ちょうど一般的なC++ /アセンブラの質問(あるいは私は思った)。
特にVisual C++について質問していますか?他のコンパイラには他の制約があるかもしれないと思います。 –
@Robᵩいいえ、もしあれば、私はLinux、ICC、G ++を目指していました。私が見た最初のアセンブラ関数を手に入れました。 – user997112
これはややこしいかもしれませんが、もしジャンプとリターンがあまりにも重いペナルティを負わなければ、純粋なアセンブラで(別のコンパイル単位で)アセンブラを書くことを考えてください。インライン化を避けることで、より効率的なキャッシュ利用によって遅延を改善することができます。 これは組み込みプラットフォームでより重要です。 – psyill