与龙芯架构相关的编译器选项含义包括以下三方面:
- 配置目标架构:允许使用的指令集和寄存器范围;
- 配置目标 ABI:标准数据类型的表示方法,函数调用传参、返回的实现方式;
- 配置优化参数:用于指导编译器优化的微架构特性。
为此,编译器应实现以下两类命令行选项:
- 基础选项:选择编译目标的基本配置,包括 -march -mabi -mtune;
- 扩展选项:对基础选项或基础选项默认值的配置进行增量调整。
Table 1. 基础选项
选项 | 可用值 | 描述 |
---|---|---|
-march= | native loongarch64 la464 | 选择目标架构:设定默认可用的指令集和寄存器范围 (即默认使用的指令集模块集合) |
-mabi= | lp64d lp64f lp64s ilp32d ilp32f ilp32s | 选择基础 ABI 类型 |
-mtune= | native loongarch64 la464 | 选择目标微架构:设定微架构相关的性能调优参数; 取值范围是 -march选项的超集,默认值与 -march 值相同 |
Table 2. 扩展选项
选项 | 可用值 | 描述 |
---|---|---|
-mfpu= | 64 32 none (等同于0) | 选择可用的基础浮点数指令和寄存器范围 |
-msoft -float |
-mfpu=none 的别名 | |
-msingle-float | -mfpu=32 的别名 | |
-mdouble-float | -mfpu=64 的别名 |
对于龙芯架构编译器,完整的 ABI 配置应包含两个部分: 基础 ABI 和 ABI 扩展特性 。前者描述了 ABI 中整 型和浮点数据的表示、 传参和返回方式,后者则代表对基础 ABI 进行的总体调整,可能需要特定 ISA 扩展支 持。
需要注意的是,不同 ABI 扩展特性之间是 互斥 的,不能相互叠加; 具有不同扩展特性的 ABI 配置之间也 互 不兼容 。
原则上本文档不会增加新的 ABI 扩展特性,除非它能提供 其他编译器优化技术不能单独实现的功能或性能优 势。
基础 ABI 共有六种,编译器可根据实现的目标架构范围,选择实现其中的一种或多种, 其标准名称和对应的 -mabi 选项值一致。
Table 3. 基础ABI类型
标准名称 | 数据模型 | 可用于传参、返回的通用/浮点寄存器宽度 |
---|---|---|
lp64d | LP64 | 64 / 64 |
lp64f | LP64 | 64 / 32 |
lp64s | LP64 | 64 / (无) |
ilp32d | ILP32 | 32 / 64 |
ilp32f | ILP32 | 32 / 32 |
ilp32s | ILP32 | 32 / (无) |