原标题:【博文精选】如何向riscv-gcc中增加编译器内置宏
riscv-gcc工具,有内置的一些宏参数。我们可以根据这些内置的宏参数,判断编译器的行为。
一、查看gcc内置宏参数
这里以芯来科技发布的riscv-nuclei-elf-gcc工具链为例。
使用以下命令,可以得到该工具的内置宏参数:
riscv-nuclei-elf-gcc -E -dM a.h | grep riscv
可以得到如下的一些宏参数
#define __riscv 1
#define __riscv_atomic 1
#define __riscv_cmodel_medlow 1
#define __riscv_fdiv 1
#define __riscv_float_abi_double 1
#define __riscv_flen 64
#define __riscv_compressed 1
#define __riscv_mul 1
#define __riscv_muldiv 1
#define __riscv_xlen 32
#define __riscv_fsqrt 1
#define __riscv_div 1
从内置宏参数,可以看出编译器,默认支持RV64IMAFDC指令集架构。
如果使用以下命令:
riscv-nuclei-elf-gcc -march=rv32gc -mabi=ilp32 -E -dM a.h | grep riscv
得到如下结果:
#define __riscv 1
#define __riscv_atomic 1
#define __riscv_cmodel_medlow 1
#define __riscv_float_abi_soft 1
#define __riscv_fdiv 1
#define __riscv_flen 64
#define __riscv_compressed 1
#define __riscv_mul 1
#define __riscv_muldiv 1
#define __riscv_xlen 32
#define __riscv_fsqrt 1
#define __riscv_div 1
从内置宏参数,可以看出编译器,支持RV32IMAFDC指令集架构。
二、增加内置宏参数
对于riscv,支持p扩展,该扩展,是针对于dsp应用。
如果我们想,当gcc的-march选项中,有指定p扩展指令集,那么编译器就内置__riscv_dsp宏。如果没有指定p扩展指令集,就不内置该__riscv_dsp宏。
这样的话,编写的dsp程序,就可以使用该宏判断,是否支持p扩展指令。
下面简述一下,如何实现该功能,也就是如何根据所传参指令集架构参数,增加内置宏参数。
这里,主要是参考riscv-gcc的如下commit:
https://github.com/riscv/riscv-gcc/commit/06ab742f982d23488ec2d8c0266cb720fe775f7c
该commit,是往riscv-gcc中增加RV32E的支持。
三、修改riscv.opt
首先是修改 gcc/config/riscv/riscv.opt文件,在其中,增加DSP宏。