Skip to content

Commit f14847a

Browse files
committed
Changes register alias name handling for RVE based cores
1 parent 51514f3 commit f14847a

2 files changed

Lines changed: 8 additions & 6 deletions

File tree

gen_input/templates/interp/CORENAME.cpp.gtl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ protected:
180180
using compile_ret_t = virt_addr_t;
181181
using compile_func = compile_ret_t (this_class::*)(virt_addr_t &pc, code_word_t instr);
182182

183-
inline const char *name(size_t index){return traits::reg_aliases.at(index);}
183+
inline const char *name(size_t index){return index<traits::reg_aliases.size()?traits::reg_aliases[index] : "illegal";}
184184
<%
185185
if(floating_point) {%>
186186
inline const char *fname(size_t index){return index < 32?name(index+traits::F0):"illegal";}

src/vm/interp/vm_tgc5c.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ template <typename ARCH> class vm_impl : public iss::interp::vm_base<ARCH> {
9999
using compile_ret_t = virt_addr_t;
100100
using compile_func = compile_ret_t (this_class::*)(virt_addr_t &pc, code_word_t instr);
101101

102-
inline const char *name(size_t index){return traits::reg_aliases.at(index);}
102+
inline const char *name(size_t index){return index<traits::reg_aliases.size()?traits::reg_aliases[index] : "illegal";}
103103

104104

105105
virt_addr_t execute_inst(finish_cond_e cond, virt_addr_t start, uint64_t icount_limit) override;
@@ -2236,8 +2236,10 @@ typename vm_base<ARCH>::virt_addr_t vm_impl<ARCH>::execute_inst(finish_cond_e co
22362236
if(imm == 0 || rd >= traits::RFS) {
22372237
raise(0, traits::RV_CAUSE_ILLEGAL_INSTRUCTION);
22382238
}
2239-
if(rd != 0) {
2240-
*(X+rd) = (uint32_t)((int32_t)sext<18>(imm));
2239+
else {
2240+
if(rd != 0) {
2241+
*(X+rd) = (uint32_t)((int32_t)sext<18>(imm));
2242+
}
22412243
}
22422244
}
22432245
break;
@@ -2568,7 +2570,7 @@ typename vm_base<ARCH>::virt_addr_t vm_impl<ARCH>::execute_inst(finish_cond_e co
25682570
*NEXT_PC = *PC + 2;
25692571
// execute instruction
25702572
{
2571-
if(rd >= traits::RFS) {
2573+
if(rd >= traits::RFS || rs2 >= traits::RFS) {
25722574
raise(0, traits::RV_CAUSE_ILLEGAL_INSTRUCTION);
25732575
}
25742576
else {
@@ -2637,7 +2639,7 @@ typename vm_base<ARCH>::virt_addr_t vm_impl<ARCH>::execute_inst(finish_cond_e co
26372639
*NEXT_PC = *PC + 2;
26382640
// execute instruction
26392641
{
2640-
if(rd >= traits::RFS) {
2642+
if(rd >= traits::RFS || rs2 >= traits::RFS) {
26412643
raise(0, traits::RV_CAUSE_ILLEGAL_INSTRUCTION);
26422644
}
26432645
else {

0 commit comments

Comments
 (0)