Skip to content

Commit 5c380bd

Browse files
committed
Import metadata into riscv-meta repository
0 parents  commit 5c380bd

23 files changed

+2727
-0
lines changed

LICENSE

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
Copyright (c) 2013, The Regents of the University of California (Regents).
2+
All Rights Reserved.
3+
4+
Redistribution and use in source and binary forms, with or without
5+
modification, are permitted provided that the following conditions are met:
6+
1. Redistributions of source code must retain the above copyright
7+
notice, this list of conditions and the following disclaimer.
8+
2. Redistributions in binary form must reproduce the above copyright
9+
notice, this list of conditions and the following disclaimer in the
10+
documentation and/or other materials provided with the distribution.
11+
3. Neither the name of the Regents nor the
12+
names of its contributors may be used to endorse or promote products
13+
derived from this software without specific prior written permission.
14+
15+
IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
16+
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
17+
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
18+
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
19+
20+
REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21+
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22+
PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
23+
HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
24+
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.

README.md

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# RISC-V Metadata
2+
3+
This directory contains metadata for the RISC-V Instruction Set
4+
5+
|File|Description|
6+
|:---|:----------|
7+
|`codecs` |Instruction encodings|
8+
|`compression` |Compressed instruction|
9+
|`constraints` |Constraint definitions|
10+
|`csrs` |Control and status registers|
11+
|`csr-fields` |Control and status register fields|
12+
|`enums` |Enumerated types|
13+
|`extensions` |Instruction set extensions|
14+
|`formats` |Disassembly formats|
15+
|`opcodes` |Opcode encoding information|
16+
|`opcode-classes` |Instruction classes|
17+
|`opcode-descriptions` |Instruction descriptions|
18+
|`opcode-fullnames` |Instruction full names|
19+
|`opcode-majors` |Major opcodes|
20+
|`opcode-pseudocode-c` |Instruction pseudo code (C)|
21+
|`opcode-pseudocode-alt`|Instruction pseudo code (Alternative)|
22+
|`operands` |Operand bit encodings|
23+
|`pseudos` |Pseudo instructions|
24+
|`registers` |Registers ABI definitions|
25+
|`types` |Instruction types|

codecs

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# format of a line in this file:
2+
# <codec> <format> [<arg> ... ]
3+
#
4+
# <codec> denotes a distinct instruction type, subtype and format
5+
#
6+
# [<arg> ... ] lists operands declared in opcodes as a cross-check
7+
#
8+
# Codecs with a · sign denote a subtype of the higher level type
9+
# Codecs with a + sign denote a format variant for the same type
10+
# i.e. <type(·subtype+format)?> where codec is the distinct codec
11+
12+
none none
13+
u rd,imm rd imm20
14+
u+o rd,offset rd oimm20
15+
uj rd,offset rd jimm20
16+
i+o rd,rs1,offset rd rs1 imm12
17+
i rd,rs1,imm rd rs1 imm12
18+
i·sh5 rd,rs1,imm rd rs1 shamt5
19+
i·sh6 rd,rs1,imm rd rs1 shamt6
20+
i·sh7 rd,rs1,imm rd rs1 shamt7
21+
i·csr rd,csr,rs1 rd rs1 csr12
22+
i·csr+i rd,csr,zimm rd zimm csr12
23+
i+l rd,offset(rs1) rd rs1 oimm12
24+
i+lf frd,offset(rs1) frd rs1 oimm12
25+
s rs2,offset(rs1) rs1 rs2 simm12
26+
sb rs1,rs2,offset rs1 rs2 sbimm12
27+
s+f frs2,offset(rs1) rs1 frs2 simm12
28+
r rd,rs1,rs2 rd rs1 rs2
29+
r+fr frd,rs1 frd rs1
30+
r+rf rd,frs1 rd frs1
31+
r+rff rd,frs1,frs2 rd frs1 frs2
32+
r+3f frd,frs1,frs2 frd frs1 frs2
33+
r·m+ff rm,frd,frs1 frd frs1 rm
34+
r·m+fr rm,frd,rs1 frd rs1 rm
35+
r·m+rf rm,rd,frs1 rd frs1 rm
36+
r·m+3f rm,frd,frs1,frs2 frd frs1 frs2 rm
37+
r4·m rm,frd,frs1,frs2,frs3 frd frs1 frs2 frs3 rm
38+
r·a aqrl,rd,rs2,(rs1) rd rs1 rs2 aq rl
39+
r·l aqrl,rd,(rs1) rd rs1 aq rl
40+
r·f pred,succ pred succ
41+
r+sf rs1 rs1
42+
cb rs1,rs2,offset crs1q cimmb
43+
cb·imm rd,rs1,imm crs1rdq cnzimmi
44+
cb·sh5 rd,rs1,imm crs1rdq cimmsh5
45+
cb·sh6 rd,rs1,imm crs1rdq cimmsh6
46+
ci rd,rs1,imm crs1rd cnzimmi
47+
ci·sh5 rd,rs1,imm crs1rd cimmsh5
48+
ci·sh6 rd,rs1,imm crs1rd cimmsh6
49+
ci·16sp rd,rs1,imm crs1rd cimm16sp
50+
ci·lwsp rd,offset(rs1) crd cimmlwsp
51+
ci·ldsp rd,offset(rs1) crd cimmldsp
52+
ci·lqsp rd,offset(rs1) crd cimmlqsp
53+
ci·lwsp+f frd,offset(rs1) cfrd cimmlwsp
54+
ci·ldsp+f frd,offset(rs1) cfrd cimmldsp
55+
ci·li rd,rs1,imm crs1rd cimmi
56+
ci·lui rd,imm crd cimmui
57+
ci·none none
58+
ciw·4spn rd,rs1,imm crdq cimm4spn
59+
cj rd,offset cimmj
60+
cj·jal rd,offset cimmj
61+
cl·lw rd,offset(rs1) crdq crs1q cimmw
62+
cl·ld rd,offset(rs1) crdq crs1q cimmd
63+
cl·lq rd,offset(rs1) crdq crs1q cimmq
64+
cl·lw+f frd,offset(rs1) cfrdq crs1q cimmw
65+
cl·ld+f frd,offset(rs1) cfrdq crs1q cimmd
66+
cr rd,rs1,rs2 crs1rd crs2
67+
cr·mv rd,rs1,rs2 crd crs2
68+
cr·jalr rd,rs1,offset crd0 crs1
69+
cr·jr rd,rs1,offset crd0 crs1
70+
cs rd,rs1,rs2 crs1rdq crs2q
71+
cs·sw+f frs2,offset(rs1) crs1q cfrs2q cimmw
72+
cs·sd+f frs2,offset(rs1) crs1q cfrs2q cimmd
73+
cs·sw rs2,offset(rs1) crs1q crs2q cimmw
74+
cs·sd rs2,offset(rs1) crs1q crs2q cimmd
75+
cs·sq rs2,offset(rs1) crs1q crs2q cimmq
76+
css·swsp rs2,offset(rs1) crs2 cimmswsp
77+
css·sdsp rs2,offset(rs1) crs2 cimmsdsp
78+
css·sqsp rs2,offset(rs1) crs2 cimmsqsp
79+
css·swsp+f frs2,offset(rs1) cfrs2 cimmswsp
80+
css·sdsp+f frs2,offset(rs1) cfrs2 cimmsdsp

compression

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# format of a line in this file:
2+
# <compressed opcode> <decompressed opcode> [<constraint name> ...]
3+
#
4+
# <constraint> is one of imm_6, imm_7, imm_8, imm_9, imm_10, imm_12,
5+
# imm_18, imm_nz, imm_x2, imm_x4, imm_x8, rd_b3, rs1_b3, rs2_b3,
6+
# rs1_eq_sp, rd_eq_x0, rs1_eq_x0, rs2_eq_x0, rd_ne_x0, rs1_ne_x0,
7+
# rs2_ne_x0, rd_eq_rs1, rd_eq_ra, rd_ne_x0_x2, rd_eq_sp
8+
9+
c.addi4spn addi imm_10 imm_x4 imm_nz rd_b3 rs1_eq_sp
10+
c.fld fld imm_8 imm_x8 rd_b3 rs1_b3
11+
c.lw lw imm_7 imm_x4 rd_b3 rs1_b3
12+
c.flw flw imm_7 imm_x4 rd_b3 rs1_b3
13+
c.fsd fsd imm_8 imm_x8 rs1_b3 rs2_b3
14+
c.sw sw imm_7 imm_x4 rs1_b3 rs2_b3
15+
c.fsw fsw imm_7 imm_x4 rs1_b3 rs2_b3
16+
c.nop addi rd_eq_x0 rs1_eq_x0 rs2_eq_x0
17+
c.addi addi simm_6 rd_ne_x0 rd_eq_rs1
18+
c.jal jal imm_12 imm_x2 rd_eq_ra
19+
c.li addi imm_6 rd_ne_x0 rs1_eq_x0
20+
c.lui lui imm_18 imm_nz rd_ne_x0_x2
21+
c.addi16sp addi imm_10 imm_x4 imm_nz rd_eq_sp rs1_eq_sp
22+
c.srli srli imm_nz rd_eq_rs1 rd_b3 rs1_b3
23+
c.srai srai imm_nz rd_eq_rs1 rd_b3 rs1_b3
24+
c.andi andi imm_nz rd_eq_rs1 rd_b3 rs1_b3
25+
c.sub sub rd_eq_rs1 rd_b3 rs1_b3 rs2_b3
26+
c.xor xor rd_eq_rs1 rd_b3 rs1_b3 rs2_b3
27+
c.or or rd_eq_rs1 rd_b3 rs1_b3 rs2_b3
28+
c.and and rd_eq_rs1 rd_b3 rs1_b3 rs2_b3
29+
c.subw subw rd_eq_rs1 rd_b3 rs1_b3 rs2_b3
30+
c.addw addw rd_eq_rs1 rd_b3 rs1_b3 rs2_b3
31+
c.j jal imm_12 imm_x2 rd_eq_x0
32+
c.beqz beq imm_9 imm_x2 rs1_b3 rs2_eq_x0
33+
c.bnez bne imm_9 imm_x2 rs1_b3 rs2_eq_x0
34+
c.slli slli imm_nz rd_ne_x0 rd_eq_rs1
35+
c.fldsp fld imm_9 imm_x8 rs1_eq_sp
36+
c.lwsp lw imm_8 imm_x4 rd_ne_x0 rs1_eq_sp
37+
c.flwsp flw imm_8 imm_x4 rs1_eq_sp
38+
c.jr jalr rd_eq_x0 rs1_ne_x0
39+
c.mv addi imm_eq_zero rd_ne_x0
40+
c.ebreak ebreak
41+
c.jalr jalr rd_eq_ra rs1_ne_x0
42+
c.add add rd_eq_rs1 rd_ne_x0 rs2_ne_x0
43+
c.fsdsp fsd imm_9 imm_x8 rs1_eq_sp
44+
c.swsp sw imm_8 imm_x4 rs1_eq_sp
45+
c.fswsp fsw imm_8 imm_x4 rs1_eq_sp
46+
c.ld ld imm_8 imm_x8 rd_b3 rs1_b3
47+
c.sd sd imm_8 imm_x8 rs1_b3 rs2_b3
48+
c.lq lq imm_9 imm_x16
49+
c.sq sq imm_9 imm_x16
50+
c.addiw addiw imm_6 rd_ne_x0 rd_eq_rs1
51+
c.ldsp ld imm_9 imm_x8 rd_ne_x0 rs1_eq_sp
52+
c.sdsp sd imm_9 imm_x8 rs1_eq_sp
53+
c.lqsp lq imm_10 imm_x16 rs1_eq_sp
54+
c.sqsp sq imm_10 imm_x16 rs1_eq_sp

constraints

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# format of a line in this file:
2+
# <constraint name> <constraint expression> <hint>
3+
4+
simm_6 "imm >= -32 && imm < 32"
5+
imm_6 "imm <= 0b111111"
6+
imm_7 "imm <= 0b1111111"
7+
imm_8 "imm <= 0b11111111"
8+
imm_9 "imm <= 0b111111111"
9+
imm_10 "imm <= 0b1111111111"
10+
imm_12 "imm <= 0b111111111111"
11+
imm_18 "imm <= 0b111111111111111111"
12+
imm_nz "imm != 0"
13+
imm_x2 "(imm & 0b1) == 0"
14+
imm_x4 "(imm & 0b11) == 0"
15+
imm_x8 "(imm & 0b111) == 0"
16+
imm_x16 "(imm & 0b1111) == 0"
17+
rd_b3 "rd >= 8 && rd <= 15"
18+
rs1_b3 "rs1 >= 8 && rs1 <= 15"
19+
rs2_b3 "rs2 >= 8 && rs2 <= 15"
20+
rd_eq_rs1 "rd == rs1"
21+
rd_eq_ra "rd == 1" "rd=1"
22+
rd_eq_sp "rd == 2" "rd=2"
23+
rd_eq_x0 "rd == 0" "rd=0"
24+
rs1_eq_sp "rs1 == 2"
25+
rs1_eq_x0 "rs1 == 0"
26+
rs2_eq_x0 "rs2 == 0" "rs2=0"
27+
rd_ne_x0_x2 "rd != 0 && rd != 2" "rd≠{0,2}"
28+
rd_ne_x0 "rd != 0" "rd≠0"
29+
rs1_ne_x0 "rs1 != 0"
30+
rs2_ne_x0 "rs2 != 0" "rs2≠0"
31+
rs2_eq_rs1 "rs2 == rs1"
32+
rs1_eq_ra "rs1 == 1"
33+
imm_eq_zero "imm == 0"
34+
imm_eq_n1 "imm == -1"
35+
imm_eq_p1 "imm == 1"
36+
csr_eq_0x001 "imm == 0x001"
37+
csr_eq_0x002 "imm == 0x002"
38+
csr_eq_0x003 "imm == 0x003"
39+
csr_eq_0xc00 "imm == 0xc00"
40+
csr_eq_0xc01 "imm == 0xc01"
41+
csr_eq_0xc02 "imm == 0xc02"
42+
csr_eq_0xc80 "imm == 0xc80"
43+
csr_eq_0xc81 "imm == 0xc81"
44+
csr_eq_0xc82 "imm == 0xc82"

csr-fields

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# format of a line in this file:
2+
# <csr> <field> <bitspec> <modes> "<field description>" <version>
3+
#
4+
5+
# machine status
6+
status ie 0 m "Interrupt Enable Stack 0" 1.7
7+
status prv 2:1 m "Privilege Mode Stack 0" 1.7
8+
status ie1 3 m "Interrupt Enable Stack 1" 1.7
9+
status prv1 5:4 m "Privilege Mode Stack 1" 1.7
10+
status ie2 6 m "Interrupt Enable Stack 2" 1.7
11+
status prv2 8:7 m "Privilege Mode Stack 2" 1.7
12+
status ie3 9 m "Interrupt Enable Stack 3" 1.7
13+
status prv3 11:10 m "Privilege Mode Stack 3" 1.7
14+
status fs 13:12 mhs "FPU register status" 1.7
15+
status xs 15:14 mhs "Extension status" 1.7
16+
status mprv 16 m "Data access at prv1 privilege level" 1.7
17+
status vm 21:17 m "Virtual Memory Mode" 1.7
18+
status uie 0 mhsu "User mode Interrupt Enable" 1.9-
19+
status sie 1 mhs "Supervisor mode Interrupt Enable" 1.9-
20+
status hie 2 mh "Hypervisor mode Interrupt Enable" 1.9-
21+
status mie 3 m "Machine mode Interrupt Enable" 1.9-
22+
status upie 4 mhsu "Prior User mode Interrupt Enable" 1.9-
23+
status spie 5 mhs "Prior Supervisor mode Interrupt Enable" 1.9-
24+
status hpie 6 mh "Prior Hypervisor mode Interrupt Enable" 1.9-
25+
status mpie 7 m "Prior Machine mode Interrupt Enable" 1.9-
26+
status spp 8 mhs "SRET pop privilege" 1.9-
27+
status hpp 10:9 mh "HRET pop privilege" 1.9-
28+
status mpp 12:11 m "MRET pop privilege" 1.9-
29+
status fs 14:13 mhs "FPU register status" 1.9-
30+
status xs 16:15 mhs "Extension status" 1.9-
31+
status mprv 17 m "Data access at mpp privilege level" 1.9-
32+
status pum 18 mhs "Protect User Memory" 1.9-1.9.1
33+
status sum 18 mhs "Supervisor User Memory" 1.10-
34+
status mxr 19 m "Make eXecute Readable" 1.9-
35+
status tvm 20 mhs "Trap Virtual Memory" 1.10-
36+
status tw 21 mhs "Timeout Wait" 1.10-
37+
status tsr 22 mhs "Trap SRET" 1.10-
38+
status vm 28:24 m "Virtual Memory Mode" 1.9-1.9.1
39+
40+
# address translation
41+
ptbr base 31:12 s "Page Table Base Register" 1.7,rv32
42+
ptbr base 63:12 s "Page Table Base Register" 1.7,rv64
43+
ptbr ppn 21:0 s "Page Table Base Register (PPN)" 1.9-1.9.1,rv32
44+
ptbr asid 31:22 s "Page Table Base Register (ASID)" 1.9-1.9.1,rv32
45+
ptbr ppn 37:0 s "Page Table Base Register (PPN)" 1.9-1.9.1,rv64
46+
ptbr asid 63:38 s "Page Table Base Register (ASID)" 1.9-1.9.1,rv64
47+
atp ppn 21:0 s "Address Translation Register (PPN)" 1.10,rv32
48+
atp asid 30:22 s "Address Translation Register (ASID)" 1.10,rv32
49+
atp mode 31 s "Address Translation Register (Mode)" 1.10,rv32
50+
atp ppn 43:0 s "Address Translation Register (PPN)" 1.10,rv64
51+
atp asid 59:44 s "Address Translation Register (ASID)" 1.10,rv64
52+
atp mode 63:60 s "Address Translation Register (Mode)" 1.10,rv64
53+
54+
# machine interrupt pending
55+
ip usip 0 mhsu "User Software Interrupt Pending" 1.9-
56+
ip ssip 1 mhs "Supervisor Software Interrupt Pending" 1.9-
57+
ip hsip 2 mh "Hypervisor Software Interrupt Pending" 1.9-
58+
ip msip 3 m "Machine Software Interrupt Pending" 1.9-
59+
ip utip 4 mhsu "User Timer Interrupt Pending" 1.9-
60+
ip stip 5 mhs "Supervisor Timer Interrupt Pending" 1.9-
61+
ip htip 6 mh "Hypervisor Timer Interrupt Pending" 1.9-
62+
ip mtip 7 m "Machine Timer Interrupt Pending" 1.9-
63+
ip ueip 8 mhsu "User External Interrupt Pending" 1.9-
64+
ip seip 9 mhs "Supervisor External Interrupt Pending" 1.9-
65+
ip heip 10 mh "Hypervisor External Interrupt Pending" 1.9-
66+
ip meip 11 m "Machine External Interrupt Pending" 1.9-
67+
68+
# machine interrupt enable
69+
ie usie 0 mhsu "User Software Interrupt Enable" 1.9-
70+
ie ssie 1 mhs "Supervisor Software Interrupt Enable" 1.9-
71+
ie hsie 2 mh "Hypervisor Software Interrupt Enable" 1.9-
72+
ie msie 3 m "Machine Software Interrupt Enable" 1.9-
73+
ie utie 4 mhsu "User Timer Interrupt Enable" 1.9-
74+
ie stie 5 mhs "Supervisor Timer Interrupt Enable" 1.9-
75+
ie htie 6 mh "Hypervisor Timer Interrupt Enable" 1.9-
76+
ie mtie 7 m "Machine Timer Interrupt Enable" 1.9-
77+
ie ueie 8 mhsu "User External Interrupt Enable" 1.9-
78+
ie seie 9 mhs "Supervisor External Interrupt Enable" 1.9-
79+
ie heie 10 mh "Hypervisor External Interrupt Enable" 1.9-
80+
ie meie 11 m "Machine External Interrupt Enable" 1.9-

0 commit comments

Comments
 (0)