@@ -30,9 +30,9 @@ RVOP(jal, {
30
30
rv -> X [ir -> rd ] = pc + 4 ;
31
31
/* check instruction misaligned */
32
32
RV_EXC_MISALIGN_HANDLER (pc , insn , false, 0 );
33
- if ( ir -> branch_taken )
34
- MUST_TAIL return ir -> branch_taken -> impl ( rv , ir -> branch_taken , cycle ,
35
- PC );
33
+ struct rv_insn * taken = ir -> branch_taken ;
34
+ if ( taken )
35
+ MUST_TAIL return taken -> impl ( rv , taken , cycle , PC );
36
36
rv -> csr_cycle = cycle ;
37
37
rv -> PC = PC ;
38
38
return true;
@@ -63,28 +63,28 @@ RVOP(jalr, {
63
63
})
64
64
65
65
/* clang-format off */
66
- #define BRANCH_FUNC (type , cond ) \
67
- const uint32_t pc = PC; \
68
- if ((type) rv->X[ir->rs1] cond (type)rv->X[ir->rs2]) { \
69
- branch_taken = false; \
70
- if (! ir->branch_untaken) \
71
- goto nextop; \
72
- PC += 4; \
73
- last_pc = PC; \
74
- MUST_TAIL return ir->branch_untaken->impl(rv, ir->branch_untaken, \
75
- cycle, PC); \
76
- } \
77
- branch_taken = true; \
78
- PC += ir->imm; \
79
- /* check instruction misaligned */ \
80
- RV_EXC_MISALIGN_HANDLER (pc , insn , false, 0 ); \
81
- if ( ir -> branch_taken ) { \
82
- last_pc = PC ; \
83
- MUST_TAIL return ir -> branch_taken -> impl ( rv , ir -> branch_taken , \
84
- cycle , PC ); \
85
- } \
86
- rv -> csr_cycle = cycle ; \
87
- rv -> PC = PC ; \
66
+ #define BRANCH_FUNC (type , cond ) \
67
+ const uint32_t pc = PC; \
68
+ if ((type) rv->X[ir->rs1] cond (type) rv->X[ir->rs2]) { \
69
+ is_branch_taken = false; \
70
+ struct rv_insn *untaken = ir->branch_untaken; \
71
+ if (!untaken) \
72
+ goto nextop; \
73
+ PC += 4; \
74
+ last_pc = PC; \
75
+ MUST_TAIL return untaken->impl(rv, untaken, cycle, PC); \
76
+ } \
77
+ is_branch_taken = true; \
78
+ PC += ir->imm; \
79
+ /* check instruction misaligned */ \
80
+ RV_EXC_MISALIGN_HANDLER (pc , insn , false, 0 ); \
81
+ struct rv_insn * taken = ir -> branch_taken ; \
82
+ if ( taken ) { \
83
+ last_pc = PC ; \
84
+ MUST_TAIL return taken -> impl ( rv , taken , cycle , PC ); \
85
+ } \
86
+ rv -> csr_cycle = cycle ; \
87
+ rv -> PC = PC ; \
88
88
return true;
89
89
/* clang-format on */
90
90
@@ -826,9 +826,9 @@ RVOP(cjal, {
826
826
rv -> X [rv_reg_ra ] = PC + 2 ;
827
827
PC += ir -> imm ;
828
828
RV_EXC_MISALIGN_HANDLER (PC , insn , true, 0 );
829
- if ( ir -> branch_taken )
830
- MUST_TAIL return ir -> branch_taken -> impl ( rv , ir -> branch_taken , cycle ,
831
- PC );
829
+ struct rv_insn * taken = ir -> branch_taken ;
830
+ if ( taken )
831
+ MUST_TAIL return taken -> impl ( rv , taken , cycle , PC );
832
832
rv -> csr_cycle = cycle ;
833
833
rv -> PC = PC ;
834
834
return true;
@@ -897,9 +897,9 @@ RVOP(cand, { rv->X[ir->rd] = rv->X[ir->rs1] & rv->X[ir->rs2]; })
897
897
RVOP (cj , {
898
898
PC += ir -> imm ;
899
899
RV_EXC_MISALIGN_HANDLER (PC , insn , true, 0 );
900
- if ( ir -> branch_taken )
901
- MUST_TAIL return ir -> branch_taken -> impl ( rv , ir -> branch_taken , cycle ,
902
- PC );
900
+ struct rv_insn * taken = ir -> branch_taken ;
901
+ if ( taken )
902
+ MUST_TAIL return taken -> impl ( rv , taken , cycle , PC );
903
903
rv -> csr_cycle = cycle ;
904
904
rv -> PC = PC ;
905
905
return true;
@@ -912,20 +912,20 @@ RVOP(cj, {
912
912
*/
913
913
RVOP (cbeqz , {
914
914
if (rv -> X [ir -> rs1 ]) {
915
- branch_taken = false;
916
- if (!ir -> branch_untaken )
915
+ is_branch_taken = false;
916
+ struct rv_insn * untaken = ir -> branch_untaken ;
917
+ if (!untaken )
917
918
goto nextop ;
918
919
PC += 2 ;
919
920
last_pc = PC ;
920
- MUST_TAIL return ir -> branch_untaken -> impl (rv , ir -> branch_untaken , cycle ,
921
- PC );
921
+ MUST_TAIL return untaken -> impl (rv , untaken , cycle , PC );
922
922
}
923
- branch_taken = true;
923
+ is_branch_taken = true;
924
924
PC += (uint32_t ) ir -> imm ;
925
- if (ir -> branch_taken ) {
925
+ struct rv_insn * taken = ir -> branch_taken ;
926
+ if (taken ) {
926
927
last_pc = PC ;
927
- MUST_TAIL return ir -> branch_taken -> impl (rv , ir -> branch_taken , cycle ,
928
- PC );
928
+ MUST_TAIL return taken -> impl (rv , taken , cycle , PC );
929
929
}
930
930
rv -> csr_cycle = cycle ;
931
931
rv -> PC = PC ;
@@ -935,20 +935,20 @@ RVOP(cbeqz, {
935
935
/* C.BEQZ */
936
936
RVOP (cbnez , {
937
937
if (!rv -> X [ir -> rs1 ]) {
938
- branch_taken = false;
939
- if (!ir -> branch_untaken )
938
+ is_branch_taken = false;
939
+ struct rv_insn * untaken = ir -> branch_untaken ;
940
+ if (!untaken )
940
941
goto nextop ;
941
942
PC += 2 ;
942
943
last_pc = PC ;
943
- MUST_TAIL return ir -> branch_untaken -> impl (rv , ir -> branch_untaken , cycle ,
944
- PC );
944
+ MUST_TAIL return untaken -> impl (rv , untaken , cycle , PC );
945
945
}
946
- branch_taken = true;
946
+ is_branch_taken = true;
947
947
PC += (uint32_t ) ir -> imm ;
948
- if (ir -> branch_taken ) {
948
+ struct rv_insn * taken = ir -> branch_taken ;
949
+ if (taken ) {
949
950
last_pc = PC ;
950
- MUST_TAIL return ir -> branch_taken -> impl (rv , ir -> branch_taken , cycle ,
951
- PC );
951
+ MUST_TAIL return taken -> impl (rv , taken , cycle , PC );
952
952
}
953
953
rv -> csr_cycle = cycle ;
954
954
rv -> PC = PC ;
0 commit comments