gcc/assembler 无法识别 aarch64 gicv3 寄存器

gcc/assembler does not recognize aarch64 gicv3 register(s)

在Ubuntu 17.04,安装了aarch64-linux-gnu-as,编译如下汇编代码:

# code.s
_start:
   mrs x0,icc_igrpen0_el1

aarch64-linux-gnu-as code.s

给出以下错误:

as.s: Assembler messages:
as.s:3: Error: unknown or missing system register name at operand 2 -- `mrs x0,icc_igrpen0_el1'

但是,icc_igrpen0_el1 在 ARMv8 配置文件、cortext-a53 TRM 和 GICv3 规范的文档中有所描述。

同样的错误适用于以 ICC_.Why 开头的寄存器 gnu 汇编器不识别那些 ICC_* 寄存器?

显然,您应该使用带有寄存器定义的头文件作为宏,将它们映射到通用系统寄存器名称,可能像这样:

#define ICC_IGRPEN0_EL1     S3_0_C12_C12_6
#define ICC_IGRPEN1_EL1     S3_0_C12_C12_7
#define ICC_IGRPEN1_EL3     S3_6_C12_C12_7

我认为没有任何期望将非通用名称添加到 GAS 中。