armcc到armclang的移植错误:未知的寄存器名“cp15:0:c9:c12:0”

armcc到armclang的移植错误:未知的寄存器名“cp15:0:c9:c12:0”,arm,clang,armclang,Arm,Clang,Armclang,我正在尝试将源代码编译从armcc编译器v5.06迁移到armclang v6。我看到armclang错误指出它无法识别cp15寄存器。在如何声明寄存器方面,看起来armcc与clang可能会有所不同。但是,我在迁移文档或编译器文档中找不到任何内容 下面是代码片段- 和错误代码段- 对于类似声明的寄存器,我在其他地方看到了相同的错误。任何关于可能出现问题的指针都会有所帮助 编辑:实际答案如下 register uint32_t val; __asm volatile ("mrc p15

我正在尝试将源代码编译从armcc编译器v5.06迁移到armclang v6。我看到armclang错误指出它无法识别cp15寄存器。在如何声明寄存器方面,看起来armcc与clang可能会有所不同。但是,我在迁移文档或编译器文档中找不到任何内容

下面是代码片段-

和错误代码段-

对于类似声明的寄存器,我在其他地方看到了相同的错误。任何关于可能出现问题的指针都会有所帮助

编辑:实际答案如下

register uint32_t val;
__asm volatile ("mrc p15, 0, %0, c9, c13, 0": "=r"(val));
val |= RESET_CYCLE_COUNTER;
__asm volatile ("mcr p15, 0, %0, c9, c13, 0":: "r"(val));

请先阅读手册,评论中也提到了这一点

To access the PMCR, read or write the CP15 registers with: 
MRC p15, 0, <Rt>, c9, c12, 0; Read Performance Monitor Control Register 
MCR p15, 0, <Rt>, c9, c12, 0; Write Performance Monitor Control Register
使用gnu汇编程序:

Disassembly of section .text:

00000000 <.text>:
   0:   ee190f1c    mrc 15, 0, r0, cr9, cr12, {0}

当然,在启动任何程序集之前,您必须先获得相关文档。

冒号不是该语法的一部分,您尝试过逗号吗?如果您从arm文档中剪切并粘贴寄存器访问,gnu非常擅长支持最后几个版本,您可以使用.inst或.word和指令的机器代码,然后反汇编并剪切并粘贴该语法,gnu可能并不总是如此,但这经常是叮当声,但它使用gnu作为是吗?无论哪种方式,答案都是相同的,即对于这些访问,语法根本不正常。你还需要mrc或mcr在它前面。授权的汇编语言是特定于工具而不是目标的,所以也许你对目标有正确的语法,但只是需要mrc/mcrHi,首先我不知道是谁把这个问题标记为不相关的。其次,armcc的调用方式并不奇怪。请阅读文件-我也不希望它是可移植的直截了当。我想要一个建议,因为我找不到任何例子。任何汇编都是从处理器文档开始的,它清楚地显示了指令的例子,非常容易找到。一个人首先要做的事就是尝试去做。链接页面也显示了类似的线索。所以很容易找到例子。stackoverflow不是来为您阅读文档或搜索网络的。keil的解决方案对于该指令来说非常奇怪,对于内联asm来说以这种方式使用是不典型的。我已经添加了实际的答案。谢谢你所有的暗示
To access the PMCR, read or write the CP15 registers with: 
MRC p15, 0, <Rt>, c9, c12, 0; Read Performance Monitor Control Register 
MCR p15, 0, <Rt>, c9, c12, 0; Write Performance Monitor Control Register
MRC p15, 0, r0, c9, c12, 0
Disassembly of section .text:

00000000 <.text>:
   0:   ee190f1c    mrc 15, 0, r0, cr9, cr12, {0}
Disassembly of section .text:

00000000 <.text>:
   0:   ee190f1c    mrc 15, 0, r0, cr9, cr12, {0}
.globl read_pmcr
read_pmcr:
    MRC p15, 0, r0, c9, c12, 0
    bx lr
    
.globl write_pmcr   
write_pmcr:
    MCR p15, 0, r0, c9, c12, 0
    bx lr