GCC学习(9)

添加一条指令:

(1) riscv.md中增加define_insn,make 会在insn-codes.h中自动生成CODE_FOR_ins=?的枚举类型的变量;

(2) riscv-gcc/gcc/config/riscv/riscv-builtins.c中的struct riscv_builtin_description中的元素:

struct riscv_builtin_description{

enum insn_code icode;

const char *name;

enum riscv_builtin_type builtin_type;

enum riscv_function_type prototype;

unsigned int (*avail) (void);//函数是否可用

}

static const struct riscv_builtin_description riscv_builtins[]=

{

DIRECT_BUILTIN(*ins,RISCV_DI_FTYPE_DI_DI,*ins)//增加的指令设置参数的格式

}

riscv-builtins.c中需要增加

①#define RISCV_FTYPE_NAME2(A,B,C) RISCV_##A##_FTYPE_##B##_##C##A##_FTYPE_##B##_##C

②#define RISCV_FTYPE_ATYPEA2(A,B,C)  RISCV_ATYPE_##A,RISCV_ATYPE_##B,RISCV_ATYPE_##C

riscv-ftypes.def 中在最后一行增加 DEF_RISCV_FTYPE(2,(DI,DI,DI)) 会被expand to RISCV_DI_FTYPE_DI_DI  where DI=RISCV_ATYPE_DI=intDI_type_node (type node in tree.h)

用到的数据结构:

tree_core.h       tree global_trees{TI_MAX]  //是一个标准树的vector

                        enum  tree_index// standard named or nameless data types of the c compiler比如TI_INTDI_TYPE….

(3) 需要在riscv-builtins.c中/* Argument types */后增加 #define RISCV_ATYPE_DI  intDi_type_node

intDi_type_node为tree.h中定义的global_trees[TI_INTDI_TYPE]

(4) 在riscv-builtins.c中 static_const_struct riscv_builtin_description riscv_builtins[]={

DIRECT_BUILTIN(*,RISCV_DI_FTYPE_DI_DI,*),

}

(5)(6)为最后端

(5) 设置新指令的opcode,将添加的指令的掩码和代码加入文件riscv-binutiles/include/opcode/riscv-opc.h这

#define MATCH_*  0x****                                           

#define MASK_*   0x*****

(6)将指令类型加入文件riscv-binutiles/ opcode/riscv-opc.c中

完成指令的添加,重新make

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值