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 中。
在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 中。