2.1.2. アドバンストSIMDと浮動小数点のサポートの稼働

リセット時には、アドバンストSIMDおよびVFP拡張機能はいずれも非稼働です。NEONまたはVFP命令の実行を試みると、常に未定義命令例外が取得されます。ソフトウェアからアドバンストSIMDおよびVFP機能へのアクセスを可能にするには、次の条件が満たされている必要があります。

さらに、ほとんどのアドバンストSIMDおよびVFP動作は、ソフトウェアでFPEXC.ENビットを1にセットして稼働状態にする必要があります。浮動小数点例外レジスタを参照して下さい。

FPEXC.ENが0でアドバンストSIMDおよびVFP動作が非稼働のとき、アドバンストSIMDおよびVFP命令は、特権モードで次の命令を実行する場合を除いて、常に未定義命令として扱われます。

アドバンストSIMDとVFPを稼働する方法を、ARM統一アセンブリ言語(UAL)でExample 2.1に示します。このコードは、特権モードで実行する必要があります。

Example 2.1. アドバンストSIMDとVFPの稼働

MRC  p15,0,r0,c1,c0,2 ; Read CPACR into r0
ORR  r0,r0,#(3<<20)   ; OR in User and Privileged access for CP10
ORR  r0,r0,#(3<<22)   ; OR in User and Privileged access for CP11
BIC  r0, r0, #(3<<30) ; Clear ASEDIS/D32DIS if set
MCR  p15,0,r0,c1,c0,2 ; Store new access permissions into CPACR
ISB                   ; Ensure side-effect of CPACR is visible
MOV  r0,#(1<<30)      ; Create value with FPEXC (bit 30) set in r0
VMSR FPEXC,r0         ; Enable VFP and SIMD extensions

この時点で、Cortex-A9プロセッサはアドバンストSIMDおよびVFP命令を実行できます。

Note

コプロセッサアクセス制御レジスタ(CPACR)の構成で、CP10とCP11に同一のアクセス許可が与えられていない場合、動作は予測不能です。

Copyright © 2008-2010 ARM. All rights reserved.ARM DDI 0409FJ
Non-ConfidentialID013111