拡張アセンブラの「=qm」とはの続きです。
を使用するRDRANDと、キャリー フラグ ( CF) が設定 (または設定解除) されます。
char rc;
unsigned int val;
__asm__ volatile(
"rdrand %0 ; setc %1"
: "=r" (val), "=qm" (rc)
);
// 1 = success, 0 = underflow
if(rc) {
// use val
...
}
FLAGSおよびEFLAGSレジスターは、適切な情報をコンパイラーに伝えるための条件制御の一部と見なされますか? 上記は次のように記述します。
__asm__ volatile(
"rdrand %0 ; setc %1"
: "=r" (val), "=qm" (rc)
:
: "cc"
);
それとも、"cc"スプリアスの使用ですか?
必要がなければ使用しても無害であることはわかっています。拡張 ASMから:
アセンブラー命令が条件コード・レジスターを変更できる場合は、破壊されたレジスターのリストに「cc」を追加してください。一部のマシンの GCC は、条件コードを特定のハードウェア レジスタとして表します。'cc' は、このレジスタに名前を付ける役割を果たします。他のマシンでは、条件コードの処理が異なり、'cc' を指定しても効果はありません。しかし、それはどんなマシンでも有効です。
偽の場合、どのアーキテクチャに適用されますか? (ARMとCPSRレジスタを推測しますが、間違っている可能性があります)。