在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_开头。为什么gnu汇编器无法识别那些ICC_ *寄存器?
答案 0 :(得分:3)
显然,您应该使用带有寄存器定义的头文件作为宏,将它们映射到通用系统寄存器名称,可能是这样的:
#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中。