From ba8498f052fda83eda73fd3563f3a160a2ec10d7 Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Mon, 30 Mar 2015 18:20:46 -0700 Subject: RVC draft --- Makefile | 2 +- opcodes-rvc | 58 +++++++++++++++++++++------------------------------------- parse-opcodes | 15 ++------------- 3 files changed, 24 insertions(+), 51 deletions(-) diff --git a/Makefile b/Makefile index b26a5d9..f10f353 100644 --- a/Makefile +++ b/Makefile @@ -14,7 +14,7 @@ install: $(ISASIM_H) $(PK_H) $(FESVR_H) $(ENV_H) $(GAS_H) $(XCC_H) inst.chisel i $(ISASIM_H) $(PK_H) $(FESVR_H) $(ENV_H): $(ALL_OPCODES) parse-opcodes cp encoding.h $@ - cat opcodes | ./parse-opcodes -c >> $@ + cat opcodes opcodes-rvc | ./parse-opcodes -c >> $@ $(GAS_H) $(XCC_H): $(ALL_OPCODES) parse-opcodes cat $(ALL_OPCODES) | ./parse-opcodes -c > $@ diff --git a/opcodes-rvc b/opcodes-rvc index 98f5b99..720d1ba 100644 --- a/opcodes-rvc +++ b/opcodes-rvc @@ -1,40 +1,24 @@ # compressed instructions -c.li cimm6 crd 4..0=0 -c.addi cimm6 crd 4..0=1 -c.addiw cimm6 crd 4..0=29 -c.ldsp cimm6 crd 4..0=4 -c.lwsp cimm6 crd 4..0=5 -c.sdsp cimm6 crd 4..0=6 -c.swsp cimm6 crd 4..0=8 +c.li 1..0=0 15..13=0 12=ignore 11..2=ignore +c.lui 1..0=0 15..13=1 12=ignore 11..2=ignore +c.addi 1..0=0 15..13=4 12=ignore 11..2=ignore +c.addiw 1..0=0 15..13=7 12=ignore 11..2=ignore +c.slli 1..0=0 15..13=6 12=ignore 11..2=ignore +c.addi4 1..0=0 15..13=5 12=ignore 11..2=ignore +c.mv 1..0=0 15..13=2 12=0 11..2=ignore +c.jalr 1..0=0 15..13=2 12=1 11..2=ignore +c.add 1..0=0 15..13=3 12=0 11..2=ignore +c.addw 1..0=0 15..13=3 12=1 11..2=ignore -c.lw0 15=0 crs1 crd 4..0=18 -c.ld0 15=1 crs1 crd 4..0=18 -c.add 15=0 crs1 crd 4..0=26 -c.sub 15=1 crs1 crd 4..0=26 -c.move 15=0 crs1 crd 4..0=2 +c.lw 1..0=1 15..13=0 12=ignore 11..2=ignore +c.sw 1..0=1 15..13=2 12=ignore 11..2=ignore +c.ld 1..0=1 15..13=1 12=ignore 11..2=ignore +c.sd 1..0=1 15..13=3 12=ignore 11..2=ignore +c.lwsp 1..0=1 15..13=4 12=ignore 11..2=ignore +c.ldsp 1..0=1 15..13=6 12=ignore 11..2=ignore +c.swsp 1..0=1 15..13=5 12=ignore 11..2=ignore +c.sdsp 1..0=1 15..13=7 12=ignore 11..2=ignore -c.j 15=1 cimm10 4..0=2 - -c.ld crds crs1s cimm5 4..0=9 -c.lw crds crs1s cimm5 4..0=10 -c.sd crs2s crs1s cimm5 4..0=12 -c.sw crs2s crs1s cimm5 4..0=13 -c.beq crs2s crs1s cimm5 4..0=16 -c.bne crs2s crs1s cimm5 4..0=17 -c.flw crds crs1s cimm5 4..0=20 -c.fld crds crs1s cimm5 4..0=21 -c.fsw crs2s crs1s cimm5 4..0=22 -c.fsd crs2s crs1s cimm5 4..0=24 - -c.slli crds 12..10=0 cimm5 4..0=25 -c.slli32 crds 12..10=1 cimm5 4..0=25 -c.srli crds 12..10=2 cimm5 4..0=25 -c.srli32 crds 12..10=3 cimm5 4..0=25 -c.srai crds 12..10=4 cimm5 4..0=25 -c.srai32 crds 12..10=5 cimm5 4..0=25 -c.slliw crds 12..10=6 cimm5 4..0=25 - -c.add3 crds crs1s 9..8=0 crs2bs 4..0=28 -c.sub3 crds crs1s 9..8=1 crs2bs 4..0=28 -c.or3 crds crs1s 9..8=2 crs2bs 4..0=28 -c.and3 crds crs1s 9..8=3 crs2bs 4..0=28 +c.beqz 1..0=2 15..13=1 12=ignore 11..2=ignore +c.bnez 1..0=2 15..13=3 12=ignore 11..2=ignore +c.j 1..0=2 15..13=5 12=ignore 11..2=ignore diff --git a/parse-opcodes b/parse-opcodes index d7d2602..174602b 100755 --- a/parse-opcodes +++ b/parse-opcodes @@ -30,17 +30,6 @@ arglut['shamt'] = (25,20) arglut['shamtw'] = (24,20) arglut['vseglen'] = (31,29) -arglut['crd'] = (9,5) -arglut['crs2'] = (9,5) -arglut['crs1'] = (14,10) -arglut['crds'] = (15,13) -arglut['crs2s'] = (15,13) -arglut['crs2bs'] = (7,5) -arglut['crs1s'] = (12,10) -arglut['cimm6'] = (15,10) -arglut['cimm10'] = (14,5) -arglut['cimm5'] = (9,5) - causes = [ (0x00, 'misaligned fetch'), (0x01, 'fault fetch'), @@ -145,7 +134,7 @@ def make_c(match,mask): print '/* Automatically generated by parse-opcodes */' print '#ifndef RISCV_ENCODING_H' print '#define RISCV_ENCODING_H' - for name in match.iterkeys(): + for name in sorted(match.iterkeys()): name2 = name.upper().replace('.','_') print '#define MATCH_%s %s' % (name2, hex(match[name])) print '#define MASK_%s %s' % (name2, hex(mask[name])) @@ -156,7 +145,7 @@ def make_c(match,mask): print '#endif' print '#ifdef DECLARE_INSN' - for name in match.iterkeys(): + for name in sorted(match.iterkeys()): name2 = name.replace('.','_') print 'DECLARE_INSN(%s, MATCH_%s, MASK_%s)' % (name2, name2.upper(), name2.upper()) print '#endif' -- cgit v1.2.3