gcc - 配置 GCC 目标 CPU
问题描述
我有一个 Zynq 7000 目标硬件。I 由带有 NEON 和 VFP 协处理器的双核 ARM Cortex A-9 组成。必须通过对 FPEXC 寄存器的写访问来启用协处理器。
裸机的启用 NEON 和 FPU显示了相应的代码。问题是 GCC(GNU 汇编器)不接受代码。错误是:
错误:选择的处理器不支持请求的特殊用途寄存器 -- `msr fpexc,r0'
完整的最小源代码示例在这里:
.text
.global enableNeon
enableNeon:
mrc p15,0,r0,c1,c0,2 // Read CP Access register
orr r0,#0x00f00000 // Enable full access to NEON/VFP (Coprocessors 10 and 11)
mcr p15,0,r0,c1,c0,2 // Write CP Access register
isb
mov r0,#0x40000000 // Switch on the VFP and NEON hardware
msr fpexc,r0 // Set EN bit in FPEXC
bx lr
.end
Xilinx-SDK 的 GCC 编译器使用以下选项启动:
arm-none-eabi-gcc -c -o "monitor.o" -mcpu=cortex-a9 -mfpu=neon-vfpv4 monitor.s
看起来 GCC 没有识别出 CPU 有 FPEXC 寄存器。如何配置 GCC 以启用该 CPU、协处理器和专用寄存器 FPXEC 的代码生成?
解决方案
GNU 汇编器想要查看此寄存器的 VMSR 指令:
vmsr fpexc,r0 // Set EN bit in FPEXC
推荐阅读
- java - 通知对象后返回同步块后java的行为是什么
- python - 使用 pygsheets 使用 service_file 授权方法创建一个全新的工作表
- macos - com.microsoft.VSCode 不存在默认值
- android - 无法使用 ML Kit Firebase 从文本识别中获取文本
- c - 我必须创建两个调度程序线程,我的代码中出现分段错误,但我不明白为什么会这样。有人能帮忙吗?
- javascript - 即使我使用 catch 向用户呈现消息,页面也会出错
- tkinter - Tkinter 文本不适合页面
- sql - SQL - 使用带有可变表值的 SET
- angular - Angular 6.x 独立组件样式包
- javascript - 删除 jQuery UI 中动态创建的选项卡