如何在 Arm v8 架构(Cortex-A53)中使用 VFP 指令

How to use VFP instructions in Arm v8 architecture (Cortex-A53)

以我的知识不足,说“我想检查汇编代码因为我想知道处理器中的 FPU 是否启用了我的 C 代码”可能会很奇怪。

实际上,我有诸如浮点运算之类的东西可以用 Xilinx Zynq Ultrascale+ 开发板完成。 我发现它在 APU 中有 Cortex-A53 处理器,它也有 FPU。 所以,我想启用 FPU 以用于浮点运算。

首先,我必须检查 Cortex-A53 中的 FPU 是否启用,但我只是发现 aarch64 编译代码时使用 FPU,没有 gcc 编译选项,只是默认。

所以我只写了C代码(文件名为“test.c”)然后用命令行“gcc -S test.c”编译代码得到汇编代码(我不'确切知道汇编代码是什么意思)

因为我读到 Cortex-A53 中的 FPU 支持 VFP 指令,如 VADD、VDIV、VMLS..无论 'V~~'

但我找不到 VFP 说明 我只想知道什么样的代码在C中使用了VFP指令。 想要获得明确的示例,例如“您应该编写并编译 float a = 1.11; a+3.14 ~~ 这样的代码,然后,您可以在汇编代码中看到 VFP 指令”

我可以使用 C 中的哪些代码在汇编中查看 VFP 指令?

还有一件事.. 这是我检查 FPU 是否启用的正确方法吗? 如果错误,如何在 Cortex-A53 中启用 FPU 以及如何检查它是否已启用?我如何 运行 使用 FPU 的代码?

描述很长,但仍然缺少很多信息。

Xilinx Zynq Ultrascale+ 是 ARMv8 内核,可以 运行 在 32 位模式或 64 位模式下。所以每种模式都有两种类型的工具链,编译标志有一些不同。

对于32b模式-mfpu=neon应该可以,参考ARM options

对于 64b 模式 'advanced simd' 是必需的,因此不需要命令行选项。您仍然可能希望使用 -O3-O2 -ftree-vectorize 启用自动矢量化优化,否则编译器可能不会费心使用 simd。

Is it a right way I can check the FPU is enabled? If it is wrong, how can I enable FPU in Cortex-A53 and How can I check if it is enabled? How can I run the codes with FPU?

出乎意料,某些 fpu 状态寄存器中有一个位指示它是否已启用。您没有说明您是在裸机工作还是在 OS 下工作。当 OS 下的应用程序 运行 时,'user mode' 可能无法访问此类寄存器。简单的方法总是 运行 一些 fpu 命令,例如 asm volatile(...) 中的 vadd,例如,如果 fpu 不是 enabled/supported,则会出现异常。