Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
4471ec0a
X
XiangShan
项目概览
OpenXiangShan
/
XiangShan
大约 1 年 前同步成功
通知
1183
Star
3914
Fork
526
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
X
XiangShan
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
4471ec0a
编写于
12月 20, 2022
作者:
H
huxuan0307
提交者:
GitHub
12月 20, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1850 from xiwenx/rf-after-issue-decoder
add decoder of OPFVV/OPFVF
上级
b978a0ac
f2844384
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
181 addition
and
7 deletion
+181
-7
src/main/scala/xiangshan/backend/decode/VecDecoder.scala
src/main/scala/xiangshan/backend/decode/VecDecoder.scala
+181
-7
未找到文件。
src/main/scala/xiangshan/backend/decode/VecDecoder.scala
浏览文件 @
4471ec0a
...
...
@@ -49,13 +49,15 @@ case class OPMVX(vdRen: Boolean, fu: BitPat, fuOp: BitPat, xWen: Boolean, vWen:
}
}
case
class
OPFVV
()
extends
VecType
{
def
generate
()
:
List
[
BitPat
]
=
{
null
}
case
class
OPFVV
(
src1
:
BitPat
,
src3
:
BitPat
,
fu
:
BitPat
,
fuOp
:
BitPat
,
fWen
:
Boolean
,
vWen
:
Boolean
,
mWen
:
Boolean
)
extends
VecType
{
def
generate
()
:
List
[
BitPat
]
=
{
List
(
src1
,
SrcType
.
vp
,
src3
,
fu
,
fuOp
,
N
,
fWen
.
B
,
vWen
.
B
,
mWen
.
B
,
N
,
N
,
N
,
N
,
SelImm
.
X
)
}
}
case
class
OPFVF
(
fu
:
BitPat
,
fuOp
:
BitPat
,
fWen
:
Boolean
,
vWen
:
Boolean
,
mWen
:
Boolean
)
extends
VecType
{
case
class
OPFVF
(
src1
:
BitPat
,
src3
:
BitPat
,
fu
:
BitPat
,
fuOp
:
BitPat
,
fWen
:
Boolean
,
vWen
:
Boolean
,
mWen
:
Boolean
)
extends
VecType
{
def
generate
()
:
List
[
BitPat
]
=
{
List
(
SrcType
.
vp
,
SrcType
.
fp
,
SrcType
.
X
,
fu
,
fuOp
,
N
,
fWen
.
B
,
vWen
.
B
,
mWen
.
B
,
N
,
N
,
N
,
N
,
SelImm
.
X
)
List
(
src1
,
SrcType
.
vp
,
src3
,
fu
,
fuOp
,
N
,
fWen
.
B
,
vWen
.
B
,
mWen
.
B
,
N
,
N
,
N
,
N
,
SelImm
.
X
)
}
}
...
...
@@ -182,11 +184,183 @@ object VecDecoder extends DecodeConstants {
val
opmvvTable
:
Array
[(
BitPat
,
List
[
BitPat
])]
=
opmvv
.
map
(
x
=>
(
x
.
_1
,
x
.
_2
.
generate
()))
val
opmvxTable
:
Array
[(
BitPat
,
List
[
BitPat
])]
=
opmvx
.
map
(
x
=>
(
x
.
_1
,
x
.
_2
.
generate
()))
val
opfvvTable
:
Array
[(
BitPat
,
List
[
BitPat
])]
=
Array
()
val
opfvvTable
:
Array
[(
BitPat
,
List
[
BitPat
])]
=
Array
(
// OPFVV(fu: BitPat, fuOp: BitPat, fWen: Boolean, vWen: Boolean, mWen: Boolean, others: Any)
// 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions
VFADD_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFSUB_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.3. Vector Widening Floating-Point Add/Subtract Instructions
VFWADD_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFWSUB_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFWADD_WV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFWSUB_WV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions
VFMUL_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFDIV_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.5. Vector Widening Floating-Point Multiply
VFWMUL_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.6. Vector Single-Width Floating-Point Fused Multiply-Add Instructions
VFMACC_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFNMACC_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFMSAC_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFNMSAC_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFMADD_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFNMADD_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFMSUB_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFNMSUB_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.7. Vector Widening Floating-Point Fused Multiply-Add Instructions
VFWMACC_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFWNMACC_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFWMSAC_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFWNMSAC_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.8. Vector Floating-Point Square-Root Instruction
VFSQRT_V
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.9. Vector Floating-Point Reciprocal Square-Root Estimate Instruction
VFRSQRT7_V
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.10. Vector Floating-Point Reciprocal Estimate Instruction
VFREC7_V
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.11. Vector Floating-Point MIN/MAX Instructions
VFMIN_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFMAX_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.12. Vector Floating-Point Sign-Injection Instructions
VFSGNJ_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFSGNJN_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFSGNJX_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.13. Vector Floating-Point Compare Instructions
VMFEQ_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VMFNE_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VMFLT_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VMFLE_VV
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.14. Vector Floating-Point Classify Instruction
VFCLASS_V
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.17. Single-Width Floating-Point/Integer Type-Convert Instructions
VFCVT_XU_F_V
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFCVT_X_F_V
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFCVT_RTZ_XU_F_V
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFCVT_RTZ_X_F_V
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFCVT_F_XU_V
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFCVT_F_X_V
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.18. Widening Floating-Point/Integer Type-Convert Instructions
VFWCVT_XU_F_V
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFWCVT_X_F_V
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFWCVT_RTZ_XU_F_V
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFWCVT_RTZ_X_F_V
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFWCVT_F_XU_V
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFWCVT_F_X_V
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFWCVT_F_F_V
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.19. Narrowing Floating-Point/Integer Type-Convert Instructions
VFNCVT_XU_F_W
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFNCVT_X_F_W
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFNCVT_RTZ_XU_F_W
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFNCVT_RTZ_X_F_W
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFNCVT_F_XU_W
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFNCVT_F_X_W
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFNCVT_F_F_W
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFNCVT_ROD_F_F_W
->
OPFVV
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 14.3. Vector Single-Width Floating-Point Reduction Instructions
VFREDOSUM_VS
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFREDUSUM_VS
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFREDMAX_VS
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFREDMIN_VS
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 14.4. Vector Widening Floating-Point Reduction Instructions
VFWREDOSUM_VS
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFWREDUSUM_VS
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 16.2. Floating-Point Scalar Move Instructions
VFMV_F_S
->
OPFVV
(
SrcType
.
vp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// f[rd] = vs2[0] (rs1=0)
)
val
opfvfTable
:
Array
[(
BitPat
,
List
[
BitPat
])]
=
Array
(
VFADD_VF
->
OPFVF
(
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VMFEQ_VF
->
OPFVF
(
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
F
,
T
).
generate
(),
// 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions
VFADD_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFSUB_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFRSUB_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.3. Vector Widening Floating-Point Add/Subtract Instructions
VFWADD_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFWSUB_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFWADD_WF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFWSUB_WF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions
VFMUL_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFDIV_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFRDIV_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.5. Vector Widening Floating-Point Multiply
VFWMUL_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.6. Vector Single-Width Floating-Point Fused Multiply-Add Instructions
VFMACC_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFNMACC_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFMSAC_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFNMSAC_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFMADD_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFNMADD_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFMSUB_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFNMSUB_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.7. Vector Widening Floating-Point Fused Multiply-Add Instructions
VFWMACC_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFWNMACC_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFWMSAC_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFWNMSAC_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
vp
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.11. Vector Floating-Point MIN/MAX Instructions
VFMIN_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFMAX_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.12. Vector Floating-Point Sign-Injection Instructions
VFSGNJ_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFSGNJN_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
VFSGNJX_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.13. Vector Floating-Point Compare Instructions
VMFEQ_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
F
,
T
).
generate
(),
VMFNE_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
F
,
T
).
generate
(),
VMFLT_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
F
,
T
).
generate
(),
VMFLE_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
F
,
T
).
generate
(),
VMFGT_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
F
,
T
).
generate
(),
VMFGE_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
F
,
T
).
generate
(),
// 13.15. Vector Floating-Point Merge Instruction
VFMERGE_VFM
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// 13.16. Vector Floating-Point Move Instruction
VFMV_V_F
->
OPFVF
(
SrcType
.
X
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// src2=SrcType.X
// 16.2. Floating-Point Scalar Move Instructions
VFMV_S_F
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// vs2=0
// 16.3.3. Vector Slide1up
// vslide1up.vx vd, vs2, rs1, vm # vd[0]=x[rs1], vd[i+1] = vs2[i]
VFSLIDE1UP_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// vd[0]=f[rs1], vd[i+1] = vs2[i]
// 16.3.4. Vector Slide1down Instruction
// vslide1down.vx vd, vs2, rs1, vm # vd[i] = vs2[i+1], vd[vl-1]=x[rs1]
VFSLIDE1DOWN_VF
->
OPFVF
(
SrcType
.
fp
,
SrcType
.
X
,
FuType
.
vfpu
,
VfpuType
.
dummy
,
F
,
T
,
F
).
generate
(),
// vd[i] = vs2[i+1], vd[vl-1]=f[rs1]
)
val
vsetTable
:
Array
[(
BitPat
,
List
[
BitPat
])]
=
Array
()
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录