summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Andrew Waterman <waterman@cs.berkeley.edu>2015-03-30 18:20:46 -0700
committerGravatar Andrew Waterman <waterman@cs.berkeley.edu>2015-03-30 18:20:46 -0700
commitba8498f052fda83eda73fd3563f3a160a2ec10d7 (patch)
tree5109fe712aa0e8f9db9817e8cc1f9c23fa1ba319
parent9983d491eb3275564f171e74f287f9270f1adcf3 (diff)
RVC draft
-rw-r--r--Makefile2
-rw-r--r--opcodes-rvc58
-rwxr-xr-xparse-opcodes15
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'