7.11 C および C++ コードのインラインアセンブラのベクタ浮動小数点(VFP)の制限

インラインアセンブラは、VFPv2 命令を直接サポートします。

以下に例を示します。
float foo(float f, float g)
{
  float h;
  __asm
  {
      VADD h, f, 0.5*g; // h = f + 0.5*g
  }
  return h;
}
インラインアセンブリコードでは、VFP 命令の VMOV を使用して、ARM レジスタと半分のダブルワード型拡張レジスタ(NEON スカラ)との間で転送することはできません。代わりに、VMOV 命令を使用して、ARM レジスタと単精度浮動小数点 VFP レジスタとの間で内容を転送します。
インラインアセンブリコードを使用して FPSCR レジスタを変更する場合、インライン VFP コードと、コンパイラによって生成された後続の VFP コードに実行時の影響が生じます。

  • インラインアセンブリコードを使用して VFP ベクタモードを変更しないで下さい。インラインアセンブリコードはこの目的で使用できないため、VFP ベクタモードは廃止される予定です。
  • ARM では、VFP とのデータのやりとりにインラインアセンブリコプロセッサ命令を使用しないよう強くお勧めします。
関連する概念
7.7 C および C++ コードのインラインアセンブリ演算の制限
7.8 C および C++ コードのインラインアセンブラのレジスタの制限
7.9 C および C++ コードのインラインアセンブラのプロセッサモードの制限
7.10 C および C++ コードのインラインアセンブラの Thumb 命令セットの制限
7.12 C および C++ コードのインラインアセンブラの命令の制限
7.13 C および C++ コードのその他のインラインアセンブラの制限
5.41 浮動小数点演算に対するコンパイラサポート
関連情報
VMOV(ARM レジスタと NEON スカラの間)
VMOV(1 本の ARM レジスタと単精度 VFP の間)
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.