Skip to content

Commit 925b587

Browse files
committed
Simplify branch_{taken,untaken} and BRANCH_ macro
This commit does not introduce any functional changes; it is intended solely as a cosmetic modification.
1 parent 13e9b61 commit 925b587

File tree

2 files changed

+51
-53
lines changed

2 files changed

+51
-53
lines changed

src/emulate.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ enum {
369369
#endif
370370

371371
/* record whether the branch is taken or not during emulation */
372-
static bool branch_taken = false;
372+
static bool is_branch_taken = false;
373373

374374
/* record the program counter of the previous block */
375375
static uint32_t last_pc = 0;
@@ -914,16 +914,14 @@ typedef struct {
914914
}
915915

916916
#include "rv32_constopt.c"
917-
/* clang-format off */
918917
static const void *constopt_table[] = {
919-
/* RV32 instructions */
920-
#define _(inst, can_branch, insn_len, reg_mask) [rv_insn_##inst] = constopt_##inst,
918+
#define _(inst, can_branch, insn_len, reg_mask) \
919+
[rv_insn_##inst] = constopt_##inst,
921920
RV_INSN_LIST
922921
#undef _
923922
};
924923
#undef CONSTOPT
925924

926-
/* clang-format on */
927925
typedef void (*constopt_func_t)(rv_insn_t *, constopt_info_t *);
928926
static void optimize_constant(riscv_t *rv UNUSED, block_t *block)
929927
{
@@ -1012,7 +1010,7 @@ void rv_step(riscv_t *rv, int32_t cycles)
10121010
rv_insn_t *last_ir = prev->ir_tail;
10131011
/* chain block */
10141012
if (!insn_is_unconditional_branch(last_ir->opcode)) {
1015-
if (branch_taken && !last_ir->branch_taken)
1013+
if (is_branch_taken && !last_ir->branch_taken)
10161014
last_ir->branch_taken = block->ir_head;
10171015
else if (!last_ir->branch_untaken)
10181016
last_ir->branch_untaken = block->ir_head;

src/rv32_template.c

Lines changed: 47 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ RVOP(jal, {
3030
rv->X[ir->rd] = pc + 4;
3131
/* check instruction misaligned */
3232
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);
3636
rv->csr_cycle = cycle;
3737
rv->PC = PC;
3838
return true;
@@ -63,28 +63,28 @@ RVOP(jalr, {
6363
})
6464

6565
/* 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; \
8888
return true;
8989
/* clang-format on */
9090

@@ -826,9 +826,9 @@ RVOP(cjal, {
826826
rv->X[rv_reg_ra] = PC + 2;
827827
PC += ir->imm;
828828
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);
832832
rv->csr_cycle = cycle;
833833
rv->PC = PC;
834834
return true;
@@ -897,9 +897,9 @@ RVOP(cand, { rv->X[ir->rd] = rv->X[ir->rs1] & rv->X[ir->rs2]; })
897897
RVOP(cj, {
898898
PC += ir->imm;
899899
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);
903903
rv->csr_cycle = cycle;
904904
rv->PC = PC;
905905
return true;
@@ -912,20 +912,20 @@ RVOP(cj, {
912912
*/
913913
RVOP(cbeqz, {
914914
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)
917918
goto nextop;
918919
PC += 2;
919920
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);
922922
}
923-
branch_taken = true;
923+
is_branch_taken = true;
924924
PC += (uint32_t) ir->imm;
925-
if (ir->branch_taken) {
925+
struct rv_insn *taken = ir->branch_taken;
926+
if (taken) {
926927
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);
929929
}
930930
rv->csr_cycle = cycle;
931931
rv->PC = PC;
@@ -935,20 +935,20 @@ RVOP(cbeqz, {
935935
/* C.BEQZ */
936936
RVOP(cbnez, {
937937
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)
940941
goto nextop;
941942
PC += 2;
942943
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);
945945
}
946-
branch_taken = true;
946+
is_branch_taken = true;
947947
PC += (uint32_t) ir->imm;
948-
if (ir->branch_taken) {
948+
struct rv_insn *taken = ir->branch_taken;
949+
if (taken) {
949950
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);
952952
}
953953
rv->csr_cycle = cycle;
954954
rv->PC = PC;

0 commit comments

Comments
 (0)