接着上一篇继续来说明APCS的调用规范。
上一篇介绍了ARM的AArch64的架构,当然,架构的介绍我没有说的很详细,一来,太占用篇幅,感兴趣的同学可以自行去ARM的网站下载文档进行阅读。二来,因为要介绍APCS,需要对架构有一个基本的了解,所以,我们对架构的介绍,只相当于做一个概念性的普及。现在,我们来回归到正题,即:APCS标准本身。
数据类型
首先,我们介绍一下数据类型。在AArch64 APCS标准中,数据类型是一个很重要的分类,根据数据类型,我们可以确认我们代码中所使用的寄存器是哪些,以及这些寄存器是怎么使用的。
比如,在日常代码中,我们对变量的定义一般来说会有如下几个类型,分别是:
1: char型, 1个字节
2: short型, 2个字节
3: int型, 4个字节
4: float型 4个字节
5: double型 8个字节
6: 指针型 8个字节(AArch64架构上) 4个字节 (AArch32架构上)
但是,在AArch64 APCS的层面,由于还存在SIMD这种单指令多数据的指令操作方式,所以,它对数据类型的分类,又做了更细化的标准,依据的是数据类型的字节长度,这就是机器类型
类型 | 机器类型 | 字节长度 | 自然对齐字节数 | 备注 |
整型 |
Unsigned byte
|
1 | 1 | 对应 unsignd char |
Signed byte
|