From a414c8a716e8e9c7ac676e3ffaf6e072c1b9cc2e Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Tue, 11 Mar 2014 19:05:40 -0700 Subject: New FP encoding --- parse-opcodes | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) (limited to 'parse-opcodes') diff --git a/parse-opcodes b/parse-opcodes index 8523a0a..91801c2 100755 --- a/parse-opcodes +++ b/parse-opcodes @@ -25,6 +25,7 @@ arglut['imm12hi'] = (31,25) arglut['bimm12hi'] = (31,25) arglut['imm12lo'] = (11,7) arglut['bimm12lo'] = (11,7) +arglut['zimm'] = (19,15) arglut['shamt'] = (25,20) arglut['shamtw'] = (24,20) arglut['vseglen'] = (31,29) @@ -151,7 +152,7 @@ def str_arg(arg0,name,match,arguments): return binary(yank(match,start,len),len) def str_inst(name,arguments): - ret = name.upper() + ' ' + ret = name.upper().replace('-RV32','') + ' ' if 'imm12hi' in arguments and 'imm12lo' in arguments: arguments.remove('imm12hi') arguments.remove('imm12lo') @@ -169,6 +170,9 @@ def str_inst(name,arguments): if 'jimm20' in arguments: arguments.remove('jimm20') arguments.append('imm') + if 'zimm' in arguments: + arguments.remove('zimm') + arguments.append('imm') if 'shamtw' in arguments: arguments.remove('shamtw') arguments.append('shamt') @@ -344,7 +348,7 @@ def print_r_type(name,match,arguments): ( \ binary(yank(match,25,7),7), \ str_arg('rs2','',match,arguments), \ - str_arg('rs1','',match,arguments), \ + 'zimm' in arguments and str_arg('zimm','imm[4:0]',match,arguments) or str_arg('rs1','',match,arguments), \ str_arg('rm','',match,arguments), \ str_arg('rd','',match,arguments), \ binary(yank(match,opcode_base,opcode_size),opcode_size), \ @@ -567,7 +571,7 @@ def make_latex_table(): print_insts('lui', 'auipc') print_insts('jal', 'jalr', 'beq', 'bne', 'blt', 'bge', 'bltu', 'bgeu') print_insts('lb', 'lh', 'lw', 'lbu', 'lhu', 'sb', 'sh', 'sw') - print_insts('addi', 'slti', 'sltiu', 'xori', 'ori', 'andi', 'slli', 'srli', 'srai') + print_insts('addi', 'slti', 'sltiu', 'xori', 'ori', 'andi', 'slli-rv32', 'srli-rv32', 'srai-rv32') print_insts('add', 'sub', 'sll', 'slt', 'sltu', 'xor', 'srl', 'sra', 'or', 'and') print_insts('fence', 'fence.i') print_insts('scall', 'sbreak', 'rdcycle', 'rdtime', 'rdinstret') @@ -576,6 +580,7 @@ def make_latex_table(): print_header('r','a','i','s') print_subtitle('RV64I Base Instruction Set (in addition to RV32I)') print_insts('lwu', 'ld', 'sd') + print_insts('slli', 'srli', 'srai') print_insts('addiw', 'slliw', 'srliw', 'sraiw') print_insts('addw', 'subw', 'sllw', 'srlw', 'sraw') print_subtitle('RV32M Standard Extension') @@ -598,32 +603,32 @@ def make_latex_table(): print_insts('amomin.d', 'amomax.d', 'amominu.d', 'amomaxu.d') print_subtitle('RV32F Standard Extension') print_insts('flw', 'fsw') - print_insts('fadd.s', 'fsub.s', 'fmul.s', 'fdiv.s', 'fsqrt.s', 'fmin.s', 'fmax.s') print_insts('fmadd.s', 'fmsub.s', 'fnmsub.s', 'fnmadd.s') - print_insts('fsgnj.s', 'fsgnjn.s', 'fsgnjx.s') - print_insts('fcvt.s.w', 'fcvt.s.wu', 'fmv.s.x') + print_insts('fadd.s', 'fsub.s', 'fmul.s', 'fdiv.s', 'fsqrt.s') + print_insts('fsgnj.s', 'fsgnjn.s', 'fsgnjx.s', 'fmin.s', 'fmax.s') print_insts('fcvt.w.s', 'fcvt.wu.s', 'fmv.x.s') - print_insts('fclass.s', 'feq.s', 'flt.s', 'fle.s') + print_insts('feq.s', 'flt.s', 'fle.s', 'fclass.s') + print_insts('fcvt.s.w', 'fcvt.s.wu', 'fmv.s.x') print_insts('frcsr', 'frrm', 'frflags') - print_insts('fscsr', 'fsrm', 'fsflags') + print_insts('fscsr', 'fsrm', 'fsflags', 'fsrmi', 'fsflagsi') print_footer(0) print_header('r','r4','i','s') print_subtitle('RV64F Standard Extension (in addition to RV32F)') - print_insts('fcvt.s.l', 'fcvt.s.lu') print_insts('fcvt.l.s', 'fcvt.lu.s') + print_insts('fcvt.s.l', 'fcvt.s.lu') print_subtitle('RV32D Standard Extension') print_insts('fld', 'fsd') - print_insts('fadd.d', 'fsub.d', 'fmul.d', 'fdiv.d', 'fsqrt.d', 'fmin.d', 'fmax.d') print_insts('fmadd.d', 'fmsub.d', 'fnmsub.d', 'fnmadd.d') - print_insts('fsgnj.d', 'fsgnjn.d', 'fsgnjx.d') - print_insts('fcvt.d.w', 'fcvt.d.wu') + print_insts('fadd.d', 'fsub.d', 'fmul.d', 'fdiv.d', 'fsqrt.d') + print_insts('fsgnj.d', 'fsgnjn.d', 'fsgnjx.d', 'fmin.d', 'fmax.d') + print_insts('fcvt.s.d', 'fcvt.d.s') + print_insts('feq.d', 'flt.d', 'fle.d', 'fclass.d') print_insts('fcvt.w.d', 'fcvt.wu.d') - print_insts('fclass.d', 'feq.d', 'flt.d', 'fle.d') + print_insts('fcvt.d.w', 'fcvt.d.wu') print_subtitle('RV64D Standard Extension (in addition to RV32D)') - print_insts('fcvt.d.l', 'fcvt.d.lu', 'fmv.d.x') print_insts('fcvt.l.d', 'fcvt.lu.d', 'fmv.x.d') - print_insts('fcvt.s.d', 'fcvt.d.s') + print_insts('fcvt.d.l', 'fcvt.d.lu', 'fmv.d.x') print_footer(1) def print_chisel_insn(name): -- cgit v1.2.3