-
Notifications
You must be signed in to change notification settings - Fork 304
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add pseudo-instructions for Zimop/Zcmop (#194)
* add mop.r.N and mop.rr.N pseudo-inst * add c.mop.N pseudo-inst * add arg_lut entries and emitted pseudoops for Zimop/Zcmop * add pseudoinsts for Zimop * add pseudoinsts for Zcmop * update zcmop mnemonics * update zcmop mnemonics
- Loading branch information
Showing
3 changed files
with
114 additions
and
51 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,15 @@ | ||
# Eight code points in the 16-bit encoding space | ||
# are provided for MOPs; encoded in the reserved | ||
# encoding space where c.lui N, 0 is encoded i.e | ||
# Where N is determined for c.mop.M as M*2+1 | ||
# are provided for MOPs; c.mop.N is encoded in | ||
# the reserved encoding space where c.lui N, 0 is | ||
# encoded. N ={1, 3, 5, 7, 9, 11, 13, and 15} | ||
# Add a pseudo-inst c.mop.N that matches c.mop.* | ||
|
||
c.mop.0 1..0=1 6..2=0 11..7=1 12=0 15..13=3 | ||
c.mop.1 1..0=1 6..2=0 11..7=3 12=0 15..13=3 | ||
c.mop.2 1..0=1 6..2=0 11..7=5 12=0 15..13=3 | ||
c.mop.3 1..0=1 6..2=0 11..7=7 12=0 15..13=3 | ||
c.mop.4 1..0=1 6..2=0 11..7=9 12=0 15..13=3 | ||
c.mop.5 1..0=1 6..2=0 11..7=11 12=0 15..13=3 | ||
c.mop.6 1..0=1 6..2=0 11..7=13 12=0 15..13=3 | ||
c.mop.7 1..0=1 6..2=0 11..7=15 12=0 15..13=3 | ||
c.mop.N c_mop_t 1..0=1 6..2=0 11=0 7=1 12=0 15..13=3 | ||
$pseudo_op rv_zcmop::c.mop.N c.mop.1 1..0=1 6..2=0 11..7=1 12=0 15..13=3 | ||
$pseudo_op rv_zcmop::c.mop.N c.mop.3 1..0=1 6..2=0 11..7=3 12=0 15..13=3 | ||
$pseudo_op rv_zcmop::c.mop.N c.mop.5 1..0=1 6..2=0 11..7=5 12=0 15..13=3 | ||
$pseudo_op rv_zcmop::c.mop.N c.mop.7 1..0=1 6..2=0 11..7=7 12=0 15..13=3 | ||
$pseudo_op rv_zcmop::c.mop.N c.mop.9 1..0=1 6..2=0 11..7=9 12=0 15..13=3 | ||
$pseudo_op rv_zcmop::c.mop.N c.mop.11 1..0=1 6..2=0 11..7=11 12=0 15..13=3 | ||
$pseudo_op rv_zcmop::c.mop.N c.mop.13 1..0=1 6..2=0 11..7=13 12=0 15..13=3 | ||
$pseudo_op rv_zcmop::c.mop.N c.mop.15 1..0=1 6..2=0 11..7=15 12=0 15..13=3 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,49 +1,53 @@ | ||
# The Zimop extension defines 32 MOP instructions named mop.r.0 -- mop.r.31. | ||
# They are encoded as 1-00--0111--sssss100ddddd1110011, where - denotes an | ||
# available opcode bit, s denotes the rs1 field, and d denotes the rd field. | ||
# add a pseudo-inst mop.r.N that matches mop.r.* | ||
|
||
mop.r.0 rd rs1 30=0 27=0 26=0 21=0 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.1 rd rs1 30=0 27=0 26=0 21=0 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.2 rd rs1 30=0 27=0 26=0 21=1 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.3 rd rs1 30=0 27=0 26=0 21=1 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.4 rd rs1 30=0 27=0 26=1 21=0 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.5 rd rs1 30=0 27=0 26=1 21=0 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.6 rd rs1 30=0 27=0 26=1 21=1 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.7 rd rs1 30=0 27=0 26=1 21=1 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.8 rd rs1 30=0 27=1 26=0 21=0 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.9 rd rs1 30=0 27=1 26=0 21=0 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.10 rd rs1 30=0 27=1 26=0 21=1 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.11 rd rs1 30=0 27=1 26=0 21=1 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.12 rd rs1 30=0 27=1 26=1 21=0 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.13 rd rs1 30=0 27=1 26=1 21=0 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.14 rd rs1 30=0 27=1 26=1 21=1 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.15 rd rs1 30=0 27=1 26=1 21=1 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.16 rd rs1 30=1 27=0 26=0 21=0 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.17 rd rs1 30=1 27=0 26=0 21=0 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.18 rd rs1 30=1 27=0 26=0 21=1 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.19 rd rs1 30=1 27=0 26=0 21=1 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.20 rd rs1 30=1 27=0 26=1 21=0 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.21 rd rs1 30=1 27=0 26=1 21=0 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.22 rd rs1 30=1 27=0 26=1 21=1 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.23 rd rs1 30=1 27=0 26=1 21=1 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.24 rd rs1 30=1 27=1 26=0 21=0 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.25 rd rs1 30=1 27=1 26=0 21=0 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.26 rd rs1 30=1 27=1 26=0 21=1 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.27 rd rs1 30=1 27=1 26=0 21=1 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.28 rd rs1 30=1 27=1 26=1 21=0 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.29 rd rs1 30=1 27=1 26=1 21=0 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.30 rd rs1 30=1 27=1 26=1 21=1 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.31 rd rs1 30=1 27=1 26=1 21=1 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
mop.r.N mop_r_t_30 mop_r_t_27_26 mop_r_t_21_20 rd rs1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.0 rd rs1 30=0 27=0 26=0 21=0 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.1 rd rs1 30=0 27=0 26=0 21=0 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.2 rd rs1 30=0 27=0 26=0 21=1 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.3 rd rs1 30=0 27=0 26=0 21=1 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.4 rd rs1 30=0 27=0 26=1 21=0 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.5 rd rs1 30=0 27=0 26=1 21=0 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.6 rd rs1 30=0 27=0 26=1 21=1 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.7 rd rs1 30=0 27=0 26=1 21=1 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.8 rd rs1 30=0 27=1 26=0 21=0 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.9 rd rs1 30=0 27=1 26=0 21=0 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.10 rd rs1 30=0 27=1 26=0 21=1 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.11 rd rs1 30=0 27=1 26=0 21=1 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.12 rd rs1 30=0 27=1 26=1 21=0 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.13 rd rs1 30=0 27=1 26=1 21=0 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.14 rd rs1 30=0 27=1 26=1 21=1 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.15 rd rs1 30=0 27=1 26=1 21=1 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.16 rd rs1 30=1 27=0 26=0 21=0 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.17 rd rs1 30=1 27=0 26=0 21=0 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.18 rd rs1 30=1 27=0 26=0 21=1 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.19 rd rs1 30=1 27=0 26=0 21=1 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.20 rd rs1 30=1 27=0 26=1 21=0 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.21 rd rs1 30=1 27=0 26=1 21=0 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.22 rd rs1 30=1 27=0 26=1 21=1 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.23 rd rs1 30=1 27=0 26=1 21=1 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.24 rd rs1 30=1 27=1 26=0 21=0 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.25 rd rs1 30=1 27=1 26=0 21=0 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.26 rd rs1 30=1 27=1 26=0 21=1 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.27 rd rs1 30=1 27=1 26=0 21=1 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.28 rd rs1 30=1 27=1 26=1 21=0 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.29 rd rs1 30=1 27=1 26=1 21=0 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.30 rd rs1 30=1 27=1 26=1 21=1 20=0 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.r.N mop.r.31 rd rs1 30=1 27=1 26=1 21=1 20=1 31=1 29..28=0 25..22=7 14..12=4 6..2=0x1C 1..0=3 | ||
|
||
# The Zimop extension additionally defines 8 MOP instructions named mop.rr.0 | ||
# -- mop.rr.7. They are encoded as 1-00--1tttttsssss100ddddd1110011, where t | ||
# denotes the rs2 field. | ||
# add a pseudo-inst mop.rr.N taht matches mop.rr.* | ||
|
||
mop.rr.0 rd rs1 rs2 30=0 27=0 26=0 31=1 29..28=0 25=1 14..12=4 6..2=0x1C 1..0=3 | ||
mop.rr.1 rd rs1 rs2 30=0 27=0 26=1 31=1 29..28=0 25=1 14..12=4 6..2=0x1C 1..0=3 | ||
mop.rr.2 rd rs1 rs2 30=0 27=1 26=0 31=1 29..28=0 25=1 14..12=4 6..2=0x1C 1..0=3 | ||
mop.rr.3 rd rs1 rs2 30=0 27=1 26=1 31=1 29..28=0 25=1 14..12=4 6..2=0x1C 1..0=3 | ||
mop.rr.4 rd rs1 rs2 30=1 27=0 26=0 31=1 29..28=0 25=1 14..12=4 6..2=0x1C 1..0=3 | ||
mop.rr.5 rd rs1 rs2 30=1 27=0 26=1 31=1 29..28=0 25=1 14..12=4 6..2=0x1C 1..0=3 | ||
mop.rr.6 rd rs1 rs2 30=1 27=1 26=0 31=1 29..28=0 25=1 14..12=4 6..2=0x1C 1..0=3 | ||
mop.rr.7 rd rs1 rs2 30=1 27=1 26=1 31=1 29..28=0 25=1 14..12=4 6..2=0x1C 1..0=3 | ||
mop.rr.N mop_rr_t_30 mop_rr_t_27_26 rd rs1 rs2 31=1 29..28=0 25=1 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.rr.N mop.rr.0 rd rs1 rs2 30=0 27=0 26=0 31=1 29..28=0 25=1 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.rr.N mop.rr.1 rd rs1 rs2 30=0 27=0 26=1 31=1 29..28=0 25=1 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.rr.N mop.rr.2 rd rs1 rs2 30=0 27=1 26=0 31=1 29..28=0 25=1 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.rr.N mop.rr.3 rd rs1 rs2 30=0 27=1 26=1 31=1 29..28=0 25=1 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.rr.N mop.rr.4 rd rs1 rs2 30=1 27=0 26=0 31=1 29..28=0 25=1 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.rr.N mop.rr.5 rd rs1 rs2 30=1 27=0 26=1 31=1 29..28=0 25=1 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.rr.N mop.rr.6 rd rs1 rs2 30=1 27=1 26=0 31=1 29..28=0 25=1 14..12=4 6..2=0x1C 1..0=3 | ||
$pseudo_op rv_zimop::mop.rr.N mop.rr.7 rd rs1 rs2 30=1 27=1 26=1 31=1 29..28=0 25=1 14..12=4 6..2=0x1C 1..0=3 |