AARCH64 上不存在 MCR 和 MRC?

Ami*_*mar 5 assembly linux-kernel arm64

我正在尝试基于 Board 在 AARCH64 上编译“mrc”和“mcr”指令,但我看到以下错误消息

   tmp/ccqOHmrK.s: Assembler messages:
  /tmp/ccqOHmrK.s:43: Error: unknown mnemonic `mrc' -- `mrc p15,0,x0,c14,c3,1'
  /tmp/ccqOHmrK.s:53: Error: unknown mnemonic `mrc' -- `mrc p15,0,x2,c14,c3,0'
Run Code Online (Sandbox Code Playgroud)

我尝试查看内核源代码 /arch/arm64,但没有模拟就没有使用过 mcr&&mrc。

这是一些语法问题吗?

Jes*_*ter 9

您应该用适当的msr说明替换它们。例如,arch/arm/include/asm/arch_timer.h有:

case ARCH_TIMER_REG_CTRL:
    asm volatile("mcr p15, 0, %0, c14, c3, 1" : : "r" (val));
Run Code Online (Sandbox Code Playgroud)

在对方弓/ arm64 /包括/ ASM / arch_timer.h有:

case ARCH_TIMER_REG_CTRL:
    asm volatile("msr cntv_ctl_el0,  %0" : : "r" (val));
Run Code Online (Sandbox Code Playgroud)

  • 它们当然没有列在指令集文档中,汇编器也不知道它们,所以我会说它们不存在。 (3认同)
  • 幸运的是我将代码复制到答案中。这些链接仅供参考。不管怎样,更新了它们,但不知道它们保持稳定多久。谢谢。 (2认同)