1

ベアメタル Cortex A-15 で NEON cp を初期化したいと考えています。ARM の指示に従った後、プラットフォームの初期化シーケンスの最後に次のシーケンスを書きました。

MOV r0, #0x00F00000
MRC p15, 0, r0, c1, c1, 2
ORR r0, r0, #0x0C00 
BIC r0, r0, #0xC000 
MCR p15, 0, r0, c1, c1, 2
ISB
MRC p15, 4, r0, c1, c1, 2
BIC r0, r0,  #0x0C00
BIC r0, r0, #(3<<14)
MCR p15, 4, r0, c1, c1, 2
ISB
MOV r3, #0x40000000
VMSR FPEXC, r3

次のエラーが表示されます。

Error: operand 0 must be FPSCR -- `vmsr FPEXC,r3'

私は使用してい arm-eabi-as --versionます:

GNU assembler (GNU Binutils) 2.21
Copyright 2010 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or later.
This program has absolutely no warranty.
This assembler was configured for a target of `arm-eabi'.

プログラムのコンパイルに変更FPEXCFPSCR、実行中に unhandler 例外が発生した場合:

MRC p15, 4, r0, c1, c1, 2
4

2 に答える 2

3

VFPU を初期化するためのシーケンスは、u-bootソースにあります。

.macro init_vfpu
  ldr r0, =(0xF << 20)
  mcr p15, 0, r0, c1, c0, 2
  mov r3, #0x40000000
  .long 0xeee83a10
  /* vmsr FPEXC, r3 */
.endm /* init_vfpu */

binutilsメーリング リストに記載されているように、vmsr FPEXC バグbinutils 2.23 ブランチ、HEAD およびまもなくリリースされる 2.24 開発ブランチで修正されています。binutilsの 2.23.1 および 2.23.2 リリースには修正が含まれています。

サンプルセッションはこちら

$ cat t.S
init_vpu:
  ldr r0, =(0xF << 20)
  mcr p15, 0, r0, c1, c0, 2
  mov r3, #0x40000000
  vmsr FPEXC, r3
  bx  lr
  .ltorg
$ arm-none-linux-gnueabi-as -march=armv7-a -mcpu=cortex-a15 -mfpu=neon t.S -o t.o
$ arm-none-linux-gnueabi-as --version | grep assembler
GNU assembler (crosstool-NG hg+default-86a8d1d467c8) 2.23.1
This assembler was configured for a target of `arm-none-linux-gnueabi'.
$ objdump --version | grep Binutils
GNU objdump (GNU Binutils for Ubuntu) 2.23.2
$ objdump -S t.o 

t.o:     file format elf32-littlearm

Disassembly of section .text:

00000000 <init_vpu>:
   0:   e3a0060f        mov     r0, #15728640   ; 0xf00000
   4:   ee010f50        mcr     15, 0, r0, cr1, cr0, {2}
   8:   e3a03101        mov     r3, #1073741824 ; 0x40000000
   c:   eee83a10        vmsr    fpexc, r3
  10:   e12fff1e        bx      lr

上記のシーケンスは、すべてのCortex-Aシリーズで機能するはずです。このシーケンスは、仮想化またはTrustZoneがアクティブでないシステム用です。

于 2013-10-09T19:51:35.530 に答える