../CORE\core_cmFunc.h(616): error: unknown register name 'vfpcc' in asm __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc");
时间: 2023-07-03 08:29:12 浏览: 298
这个错误是由于使用了不存在的寄存器名称 "vfpcc"。在ARM架构中,"vfpcc"是一个条件码寄存器,只能在VFP指令中使用。但是在这个错误中,"vfpcc"被用作内联汇编中的限定符,它应该被替换为适当的限定符,例如"cc"或"memory"。请检查您的代码,找出使用了"vfpcc"的地方并进行修改。
相关问题
__ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc");在v6编译器
在v6编译器中,该语句与v5编译器中的语句有所不同,因为v6编译器使用了新的指令集架构,即ARMv8-M架构。在ARMv8-M架构中,VFP指令已被废弃,取而代之的是Advanced SIMD指令集和浮点指令扩展(Floating-Point Extension,FPE)。因此,VMSR指令已经不再使用,而是使用了新的指令VMRS。
因此,在v6编译器中,将原来的VMSR指令更改为VMRS指令,修改后的语句如下所示:
```c
__ASM volatile ("VMRS fpscr, %0" : : "r" (fpscr) : "vfpcc");
```
该语句的作用是将传入的fpscr值写入FPSCR寄存器中,以配置和控制FPU的运算精度和舍入方式等。具体的操作是通过汇编指令 `VMRS fpscr, %0` 实现的,其中 `%0` 表示使用第一个输入参数(即fpscr值)替换指令中的占位符,将fpscr值写入FPSCR寄存器中。
需要注意的是,该语句中仍然使用了 `"vfpcc"` 修饰符,表示该指令依赖于VFPcc控制位的设置。这是因为在ARMv8-M架构中,VFPcc控制位已经被替换为了FPEcc控制位,但仍然可以使用VFPcc修饰符来指定FPEcc控制位的设置。
把__ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc");改成gnu风格
将__ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc");改成GNU风格的汇编语言可以使用如下代码:
```
__asm__ volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc");
```
其中,__asm__ 是GNU C语言中表示汇编代码的关键字,volatile表示汇编代码是具有副作用的,"VMSR fpscr, %0"是汇编代码,:表示分隔符,"r" (fpscr)表示将C语言变量fpscr传递给汇编代码,"vfpcc"表示使用vfpcc寄存器。
阅读全文