Skip to content

Commit c72eca8

Browse files
committed
Refactor insn_template to be more DRY
1 parent a8c9d9c commit c72eca8

File tree

1 file changed

+23
-24
lines changed

1 file changed

+23
-24
lines changed

riscv/insn_template.cc

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,29 @@
55

66
#define DECODE_MACRO_USAGE_LOGGED 0
77

8+
#define PROLOGUE \
9+
reg_t npc = sext_xlen(pc + insn_length(OPCODE))
10+
11+
#define EPILOGUE \
12+
trace_opcode(p, OPCODE, insn); \
13+
return npc
14+
815
reg_t fast_rv32i_NAME(processor_t* p, insn_t insn, reg_t pc)
916
{
1017
#define xlen 32
11-
reg_t npc = sext_xlen(pc + insn_length(OPCODE));
18+
PROLOGUE;
1219
#include "insns/NAME.h"
13-
trace_opcode(p, OPCODE, insn);
20+
EPILOGUE;
1421
#undef xlen
15-
return npc;
1622
}
1723

1824
reg_t fast_rv64i_NAME(processor_t* p, insn_t insn, reg_t pc)
1925
{
2026
#define xlen 64
21-
reg_t npc = sext_xlen(pc + insn_length(OPCODE));
27+
PROLOGUE;
2228
#include "insns/NAME.h"
23-
trace_opcode(p, OPCODE, insn);
29+
EPILOGUE;
2430
#undef xlen
25-
return npc;
2631
}
2732

2833
#undef DECODE_MACRO_USAGE_LOGGED
@@ -31,21 +36,19 @@ reg_t fast_rv64i_NAME(processor_t* p, insn_t insn, reg_t pc)
3136
reg_t logged_rv32i_NAME(processor_t* p, insn_t insn, reg_t pc)
3237
{
3338
#define xlen 32
34-
reg_t npc = sext_xlen(pc + insn_length(OPCODE));
39+
PROLOGUE;
3540
#include "insns/NAME.h"
36-
trace_opcode(p, OPCODE, insn);
41+
EPILOGUE;
3742
#undef xlen
38-
return npc;
3943
}
4044

4145
reg_t logged_rv64i_NAME(processor_t* p, insn_t insn, reg_t pc)
4246
{
4347
#define xlen 64
44-
reg_t npc = sext_xlen(pc + insn_length(OPCODE));
48+
PROLOGUE;
4549
#include "insns/NAME.h"
46-
trace_opcode(p, OPCODE, insn);
50+
EPILOGUE;
4751
#undef xlen
48-
return npc;
4952
}
5053

5154
#undef CHECK_REG
@@ -57,21 +60,19 @@ reg_t logged_rv64i_NAME(processor_t* p, insn_t insn, reg_t pc)
5760
reg_t fast_rv32e_NAME(processor_t* p, insn_t insn, reg_t pc)
5861
{
5962
#define xlen 32
60-
reg_t npc = sext_xlen(pc + insn_length(OPCODE));
63+
PROLOGUE;
6164
#include "insns/NAME.h"
62-
trace_opcode(p, OPCODE, insn);
65+
EPILOGUE;
6366
#undef xlen
64-
return npc;
6567
}
6668

6769
reg_t fast_rv64e_NAME(processor_t* p, insn_t insn, reg_t pc)
6870
{
6971
#define xlen 64
70-
reg_t npc = sext_xlen(pc + insn_length(OPCODE));
72+
PROLOGUE;
7173
#include "insns/NAME.h"
72-
trace_opcode(p, OPCODE, insn);
74+
EPILOGUE;
7375
#undef xlen
74-
return npc;
7576
}
7677

7778
#undef DECODE_MACRO_USAGE_LOGGED
@@ -80,19 +81,17 @@ reg_t fast_rv64e_NAME(processor_t* p, insn_t insn, reg_t pc)
8081
reg_t logged_rv32e_NAME(processor_t* p, insn_t insn, reg_t pc)
8182
{
8283
#define xlen 32
83-
reg_t npc = sext_xlen(pc + insn_length(OPCODE));
84+
PROLOGUE;
8485
#include "insns/NAME.h"
85-
trace_opcode(p, OPCODE, insn);
86+
EPILOGUE;
8687
#undef xlen
87-
return npc;
8888
}
8989

9090
reg_t logged_rv64e_NAME(processor_t* p, insn_t insn, reg_t pc)
9191
{
9292
#define xlen 64
93-
reg_t npc = sext_xlen(pc + insn_length(OPCODE));
93+
PROLOGUE;
9494
#include "insns/NAME.h"
95-
trace_opcode(p, OPCODE, insn);
95+
EPILOGUE;
9696
#undef xlen
97-
return npc;
9897
}

0 commit comments

Comments
 (0)