riscv-gcc扩展指令修改

在/home/zhangqing
1.1 (1)指令增加
打开 riscv-tools/riscv-opcodes/opcodes文件,在这里,将能够看到分配给各种指令的各种操作码和指令位。 为mod指令分配了一条未使用的指令:
sra rd rs1 rs2 31…25=32 14…12=5 6…2=0x0C 1…0=3
or rd rs1 rs2 31…25=0 14…12=6 6…2=0x0C 1…0=3
and rd rs1 rs2 31…25=0 14…12=7 6…2=0x0C 1…0=3

mod rd rs1 rs2 31…25=1 14…12=0 6…2=0x1A 1…0=3
kkadd.p kprd kprs1 kprs2 31…25=1 14…12=2 6…2=0x07 1…0=3

addiw rd rs1 imm12 14…12=0 6…2=0x06 1…0=3
slliw rd rs1 31…25=0 shamtw 14…12=1 6…2=0x06 1…0=3
srliw rd rs1 31…25=0 shamtw 14…12=5 6…2=0x06 1…0=3
sraiw rd rs1 31…25=32 shamtw 14…12=5 6…2=0x06 1…0=3

1.2 获得掩码
运行下面的代码得到MOD的掩码和代码:
cat opcodes-pseudo opcodes opcodes-rvc opcodes-rvc-pseudo opcodes-custom | python2 parse-opcodes -c > ~/temp.h
打开 temp.h将看到:
mod rd rs1 rs2 31…25=1 14…12=0 6…2=0x1A 1…0=3

#define MATCH_MOD 0x200006b ‭ ‬‬‬
#define MASK_MOD 0xfe00707f
MATCH_为通过将使用的寄存器位置0得到;
MASK_*通过将使用位置1,寄存器置0得到
1.3 将获取的
加入文件riscv-binutiles/include/opcode/riscv-opc.h这
#define MATCH_MOD 0x200006b ‭ ‬‬‬
#define MASK_MOD 0xfe00707f
1.4将指令类型、寄存器加入文件riscv-binutiles/ opcode/riscv-opc.c中,riscv_kvec_names_numeric(kp0kp31),riscv_kvcc_names_abi(kc0kc31)
1.5增加寄存器需要修改riscv-binutiles/gas/config/tc-riscv.c中如下两个函数
(1)validate_riscv_insn
(2)riscv-ip。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值