Arm处理器协处理器、自定义指令及调试跟踪功能详解
1. 协处理器及自定义指令相关基础
1.1 指令编码与常量要求
在使用协处理器相关指令时,由于操作码(opc1 和 opc2)以及“value”参数都被编码在指令中,因此协处理器编号、寄存器标识符和操作码值必须为常量。若在内在函数调用中尝试将变量传递到寄存器或操作码字段,编译时会出错。例如:
test.c:234:12: error: argument to '__builtin_arm_mrc' must be a constant integer
data = __arm_mrc(1, 0, i, 1, 0); // Read result
^
这里的“i”是变量,导致编译器报错。
1.2 访问Arm自定义指令的内在函数
2020年年中发布的Cortex - M33处理器修订版1支持Arm自定义指令。为让软件开发人员能访问这些指令,已为其定义了内在函数。不过,相关规范目前处于测试版,未来可能会有变动。
要使用Arm自定义指令的内在函数,需包含Arm ACLE头文件:
#include <arm_cde.h>
该头文件在定义了“__ARM_FEATURE_CDE”特性宏时可用。
对于返回32位整数或64位整数值的Arm自定义指令,可使用以下内在函数(表1):
| 指令 | ACLE定义的内在函数 |
| ----
超级会员免费看
订阅专栏 解锁全文
2079

被折叠的 条评论
为什么被折叠?



