在/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。