aboutsummaryrefslogtreecommitdiff
path: root/riscv/decode.h
diff options
context:
space:
mode:
authorYueh-Ting (eop) Chen <eop.chen@sifive.com>2021-12-28 11:58:38 +0800
committerGitHub <noreply@github.com>2021-12-27 19:58:38 -0800
commitcfcf083a8f7cba552cfdd1b9c2618d2302c0889d (patch)
treedf12c5c6629d16f39a7f47bcaf45edc593e25370 /riscv/decode.h
parentf858b9054f66cecf931676a1933a722ec65a7da9 (diff)
downloadspike-cfcf083a8f7cba552cfdd1b9c2618d2302c0889d.zip
spike-cfcf083a8f7cba552cfdd1b9c2618d2302c0889d.tar.gz
spike-cfcf083a8f7cba552cfdd1b9c2618d2302c0889d.tar.bz2
Fix check for fcvt (#897)
Diffstat (limited to 'riscv/decode.h')
-rw-r--r--riscv/decode.h27
1 files changed, 18 insertions, 9 deletions
diff --git a/riscv/decode.h b/riscv/decode.h
index 051e221..3b3cf54 100644
--- a/riscv/decode.h
+++ b/riscv/decode.h
@@ -2371,9 +2371,6 @@ reg_t index[P.VU.vlmax]; \
#define VI_VFP_LOOP_SCALE_BASE \
require_fp; \
require_vector(true);\
- require((P.VU.vsew == e8 && p->extension_enabled(EXT_ZFH)) || \
- (P.VU.vsew == e16 && p->extension_enabled('F')) || \
- (P.VU.vsew == e32 && p->extension_enabled('D'))); \
require(STATE.frm->read() < 0x5);\
reg_t vl = P.VU.vl->read(); \
reg_t rd_num = insn.rd(); \
@@ -2395,13 +2392,19 @@ reg_t index[P.VU.vlmax]; \
VI_CHECK_SSS(false); \
switch(P.VU.vsew) { \
case e16: \
- { VI_VFP_CVT_LOOP(CVT_INT_TO_FP_PARAMS(16, 16, sign), {}, BODY16); } \
+ { VI_VFP_CVT_LOOP(CVT_INT_TO_FP_PARAMS(16, 16, sign), \
+ { p->extension_enabled(EXT_ZFH); }, \
+ BODY16); } \
break; \
case e32: \
- { VI_VFP_CVT_LOOP(CVT_INT_TO_FP_PARAMS(32, 32, sign), {}, BODY32); } \
+ { VI_VFP_CVT_LOOP(CVT_INT_TO_FP_PARAMS(32, 32, sign), \
+ { p->extension_enabled('F'); }, \
+ BODY32); } \
break; \
case e64: \
- { VI_VFP_CVT_LOOP(CVT_INT_TO_FP_PARAMS(64, 64, sign), {}, BODY64); } \
+ { VI_VFP_CVT_LOOP(CVT_INT_TO_FP_PARAMS(64, 64, sign), \
+ { p->extension_enabled('D'); }, \
+ BODY64); } \
break; \
default: \
require(0); \
@@ -2412,13 +2415,19 @@ reg_t index[P.VU.vlmax]; \
VI_CHECK_SSS(false); \
switch(P.VU.vsew) { \
case e16: \
- { VI_VFP_CVT_LOOP(CVT_FP_TO_INT_PARAMS(16, 16, sign), {}, BODY16); } \
+ { VI_VFP_CVT_LOOP(CVT_FP_TO_INT_PARAMS(16, 16, sign), \
+ { p->extension_enabled(EXT_ZFH); }, \
+ BODY16); } \
break; \
case e32: \
- { VI_VFP_CVT_LOOP(CVT_FP_TO_INT_PARAMS(32, 32, sign), {}, BODY32); } \
+ { VI_VFP_CVT_LOOP(CVT_FP_TO_INT_PARAMS(32, 32, sign), \
+ { p->extension_enabled('F'); }, \
+ BODY32); } \
break; \
case e64: \
- { VI_VFP_CVT_LOOP(CVT_FP_TO_INT_PARAMS(64, 64, sign), {}, BODY64); } \
+ { VI_VFP_CVT_LOOP(CVT_FP_TO_INT_PARAMS(64, 64, sign), \
+ { p->extension_enabled('D'); }, \
+ BODY64); } \
break; \
default: \
require(0); \