@@ -31,7 +31,8 @@ RVOP(jal, {
31
31
/* check instruction misaligned */
32
32
RV_EXC_MISALIGN_HANDLER (pc , insn , false, 0 );
33
33
if (ir -> branch_taken )
34
- return ir -> branch_taken -> impl (rv , ir -> branch_taken , cycle , PC );
34
+ MUST_TAIL return ir -> branch_taken -> impl (rv , ir -> branch_taken , cycle ,
35
+ PC );
35
36
rv -> csr_cycle = cycle ;
36
37
rv -> PC = PC ;
37
38
return true;
@@ -55,7 +56,7 @@ RVOP(jalr, {
55
56
RV_EXC_MISALIGN_HANDLER (pc , insn , false, 0 );
56
57
block_t * block = block_find (& rv -> block_map , PC );
57
58
if (block )
58
- return block -> ir_head -> impl (rv , block -> ir_head , cycle , PC );
59
+ MUST_TAIL return block -> ir_head -> impl (rv , block -> ir_head , cycle , PC );
59
60
rv -> csr_cycle = cycle ;
60
61
rv -> PC = PC ;
61
62
return true;
@@ -70,15 +71,17 @@ RVOP(jalr, {
70
71
goto nextop; \
71
72
PC += 4; \
72
73
last_pc = PC; \
73
- return ir->branch_untaken->impl(rv, ir->branch_untaken, cycle, PC); \
74
+ MUST_TAIL return ir->branch_untaken->impl(rv, ir->branch_untaken, \
75
+ cycle, PC); \
74
76
} \
75
77
branch_taken = true; \
76
78
PC += ir->imm; \
77
79
/* check instruction misaligned */ \
78
80
RV_EXC_MISALIGN_HANDLER (pc , insn , false, 0 ); \
79
81
if (ir -> branch_taken ) { \
80
82
last_pc = PC ; \
81
- return ir -> branch_taken -> impl (rv , ir -> branch_taken , cycle , PC ); \
83
+ MUST_TAIL return ir -> branch_taken -> impl (rv , ir -> branch_taken , \
84
+ cycle , PC ); \
82
85
} \
83
86
rv -> csr_cycle = cycle ; \
84
87
rv -> PC = PC ; \
@@ -824,7 +827,8 @@ RVOP(cjal, {
824
827
PC += ir -> imm ;
825
828
RV_EXC_MISALIGN_HANDLER (PC , insn , true, 0 );
826
829
if (ir -> branch_taken )
827
- return ir -> branch_taken -> impl (rv , ir -> branch_taken , cycle , PC );
830
+ MUST_TAIL return ir -> branch_taken -> impl (rv , ir -> branch_taken , cycle ,
831
+ PC );
828
832
rv -> csr_cycle = cycle ;
829
833
rv -> PC = PC ;
830
834
return true;
@@ -894,7 +898,8 @@ RVOP(cj, {
894
898
PC += ir -> imm ;
895
899
RV_EXC_MISALIGN_HANDLER (PC , insn , true, 0 );
896
900
if (ir -> branch_taken )
897
- return ir -> branch_taken -> impl (rv , ir -> branch_taken , cycle , PC );
901
+ MUST_TAIL return ir -> branch_taken -> impl (rv , ir -> branch_taken , cycle ,
902
+ PC );
898
903
rv -> csr_cycle = cycle ;
899
904
rv -> PC = PC ;
900
905
return true;
@@ -912,13 +917,15 @@ RVOP(cbeqz, {
912
917
goto nextop ;
913
918
PC += 2 ;
914
919
last_pc = PC ;
915
- return ir -> branch_untaken -> impl (rv , ir -> branch_untaken , cycle , PC );
920
+ MUST_TAIL return ir -> branch_untaken -> impl (rv , ir -> branch_untaken , cycle ,
921
+ PC );
916
922
}
917
923
branch_taken = true;
918
924
PC += (uint32_t ) ir -> imm ;
919
925
if (ir -> branch_taken ) {
920
926
last_pc = PC ;
921
- return ir -> branch_taken -> impl (rv , ir -> branch_taken , cycle , PC );
927
+ MUST_TAIL return ir -> branch_taken -> impl (rv , ir -> branch_taken , cycle ,
928
+ PC );
922
929
}
923
930
rv -> csr_cycle = cycle ;
924
931
rv -> PC = PC ;
@@ -933,13 +940,15 @@ RVOP(cbnez, {
933
940
goto nextop ;
934
941
PC += 2 ;
935
942
last_pc = PC ;
936
- return ir -> branch_untaken -> impl (rv , ir -> branch_untaken , cycle , PC );
943
+ MUST_TAIL return ir -> branch_untaken -> impl (rv , ir -> branch_untaken , cycle ,
944
+ PC );
937
945
}
938
946
branch_taken = true;
939
947
PC += (uint32_t ) ir -> imm ;
940
948
if (ir -> branch_taken ) {
941
949
last_pc = PC ;
942
- return ir -> branch_taken -> impl (rv , ir -> branch_taken , cycle , PC );
950
+ MUST_TAIL return ir -> branch_taken -> impl (rv , ir -> branch_taken , cycle ,
951
+ PC );
943
952
}
944
953
rv -> csr_cycle = cycle ;
945
954
rv -> PC = PC ;
@@ -964,7 +973,7 @@ RVOP(cjr, {
964
973
PC = rv -> X [ir -> rs1 ];
965
974
block_t * block = block_find (& rv -> block_map , PC );
966
975
if (block )
967
- return block -> ir_head -> impl (rv , block -> ir_head , cycle , PC );
976
+ MUST_TAIL return block -> ir_head -> impl (rv , block -> ir_head , cycle , PC );
968
977
rv -> csr_cycle = cycle ;
969
978
rv -> PC = PC ;
970
979
return true;
@@ -991,7 +1000,7 @@ RVOP(cjalr, {
991
1000
RV_EXC_MISALIGN_HANDLER (PC , insn , true, 0 );
992
1001
block_t * block = block_find (& rv -> block_map , PC );
993
1002
if (block )
994
- return block -> ir_head -> impl (rv , block -> ir_head , cycle , PC );
1003
+ MUST_TAIL return block -> ir_head -> impl (rv , block -> ir_head , cycle , PC );
995
1004
rv -> csr_cycle = cycle ;
996
1005
rv -> PC = PC ;
997
1006
return true;
0 commit comments