提交 c687cd30 编写于 作者: Z Zhou Yaoyang

gem5: clean up code style, forward declearation style to build it in

gem5
上级 66a3856f
......@@ -19,3 +19,6 @@ outputs*
/src/iostream3/SConscript
/src/iostream3/TODO
/src/iostream3/test.cc
*.o
*.d
.sconsign.dblite
......@@ -11,6 +11,7 @@ env = Environment(
CPPDEFINES = {
'__DIFF_REF_QEMU__': None,
'XIANGSHAN': 1,
# 'SHARE': 1,
},
CC = 'g++',
CXX = 'g++',
......@@ -25,8 +26,6 @@ env = Environment(
CFLAGS = shared_flags,
)
env.Append(CPPDEFINES = {
# '__DIFF_REF_QEMU__': None,
# 'XIANGSHAN': 1,
'__ENGINE_interpreter__': None,
'__SIMPOINT': None,
......
......@@ -51,6 +51,8 @@
#include <map>
#include <string>
namespace NEMUNS {
class OutputDirectory;
class OutputStream
......@@ -304,4 +306,7 @@ class OutputDirectory
extern OutputDirectory simout;
};
#endif // __BASE_OUTPUT_HH__
......@@ -36,7 +36,7 @@ class SiameseProfiler
uint64_t intervalDrift;
OutputStream *outStream;
typename NEMUNS::OutputStream *outStream;
unsigned footprintPeriodSize;
......
......@@ -73,6 +73,8 @@ struct hash<BasicBlockRange>
};
}
namespace SimPointNS {
class SimPoint
{
public:
......@@ -102,7 +104,7 @@ class SimPoint
/** Excess inst count from previous interval*/
uint64_t intervalDrift;
/** Pointer to SimPoint BBV output stream */
OutputStream *simpointStream;
NEMUNS::OutputStream *simpointStream;
/** Basic Block information */
struct BBInfo
......@@ -124,7 +126,8 @@ class SimPoint
};
};
extern SimPoint simPoint;
extern SimPointNS::SimPoint simPointObj;
#endif // __CPU_SIMPLE_PROBES_SIMPOINT_HH__
......@@ -17,9 +17,7 @@ extern "C" void isa_reg_display();
fprintf(stderr, "\33[1;31m"); \
fprintf(stderr, __VA_ARGS__); \
fprintf(stderr, "\33[0m\n"); \
extern void monitor_statistic(); \
isa_reg_display(); \
monitor_statistic(); \
assert(cond); \
} \
} while (0)
......
......@@ -3,16 +3,21 @@
#include <common.h>
namespace NEMUASDUT {
#ifdef DIFF_TEST
void difftest_skip_ref(void);
void difftest_skip_dut(int nr_ref, int nr_dut);
void difftest_step(vaddr_t ori_pc, vaddr_t next_pc);
extern void difftest_skip_ref(void);
extern void difftest_skip_dut(int nr_ref, int nr_dut);
extern void difftest_step(vaddr_t ori_pc, vaddr_t next_pc);
#else
#define difftest_skip_ref()
#define difftest_skip_dut(nr_ref, nr_dut)
#define difftest_step(ori_pc, next_pc)
#endif
extern void difftest_detach();
extern void difftest_attach();
extern void init_difftest(char *ref_so_file, long img_size, int port);
extern void (*ref_difftest_memcpy_from_dut)(paddr_t dest, void *src, size_t n);
extern void (*ref_difftest_getregs)(void *c);
extern void (*ref_difftest_setregs)(const void *c);
......@@ -20,6 +25,8 @@ extern void (*ref_difftest_get_mastatus)(void *c);
extern void (*ref_difftest_set_mastatus)(const void *c);
extern void (*ref_difftest_exec)(uint64_t n);
}
static inline nemu_bool difftest_check_reg(const char *name, vaddr_t pc, rtlreg_t ref, rtlreg_t dut) {
if (ref != dut) {
Log("%s is different after executing instruction at pc = " FMT_WORD ", right = " FMT_WORD ", wrong = " FMT_WORD,
......
......@@ -60,6 +60,8 @@
#include <debug.h>
#include <iostream>
namespace NEMUNS {
using namespace std;
OutputDirectory simout;
......@@ -342,3 +344,5 @@ OutputDirectory::remove(const string &name, bool recursive)
}
}
}
};
......@@ -7,6 +7,7 @@
#include <numeric>
#include <vector>
#include <base/output.h>
#include <base/sized_ranker.h>
#include <checkpoint/path_manager.h>
#include <checkpoint/profiler.h>
......@@ -125,6 +126,7 @@ void SiameseProfiler::init()
intervalSize = profiling_interval;
Log("Doing betapoint profiling with interval %lu", intervalSize);
auto path = pathManager.getWorkloadPath() + "/betapoint.csv.gz";
using NEMUNS::simout;
outStream = simout.create(path, false);
if (!outStream)
xpanic("unable to open Betapoint profile_file %s\n", path.c_str());
......
......@@ -44,10 +44,13 @@
#include <algorithm>
#include <iostream>
#include <base/output.h>
#include <checkpoint/simpoint.h>
#include <debug.h>
#include <monitor/monitor.h>
namespace SimPointNS {
SimPoint::SimPoint()
: intervalCount(0),
intervalDrift(0),
......@@ -66,6 +69,7 @@ SimPoint::init() {
intervalSize = profiling_interval;
Log("Doing simpoint profiling with interval %lu", intervalSize);
auto path = pathManager.getOutputPath() + "/simpoint_bbv.gz";
using NEMUNS::simout;
simpointStream = simout.create(path, false);
if (!simpointStream)
xpanic("unable to open SimPoint profile_file %s\n", path.c_str());
......@@ -140,9 +144,11 @@ SimPoint::profile(Addr pc, bool is_control, bool is_last_uop) {
}
}
SimPoint simPoint;
}
SimPointNS::SimPoint simPointObj;
void init_simpoint()
{
simPoint.init();
simPointObj.init();
}
......@@ -18,6 +18,8 @@ nemu_bool isa_difftest_checkregs(CPU_state *ref_r, vaddr_t pc) {
}
void isa_difftest_attach(void) {
using NEMUASDUT::ref_difftest_memcpy_from_dut;
using NEMUASDUT::ref_difftest_setregs;
ref_difftest_memcpy_from_dut(PMEM_BASE, guest_to_host(0), PMEM_SIZE);
ref_difftest_setregs(&cpu);
}
......@@ -287,7 +287,7 @@ vaddr_t isa_exec_once() {
extern uint64_t g_nr_guest_instr;
profiler.profile(s, g_nr_guest_instr);
} else if (profiling_state == SimpointProfiling && xpoint_profiling_started) {
simPoint.profile(s.seq_pc, s.is_control, true);
simPointObj.profile(s.seq_pc, s.is_control, true);
}
......
......@@ -265,16 +265,25 @@ static inline make_EHelper(fsgnj) {
switch (rm)
{
case 0: // sgnj
if(s->width == 4) print_asm_template3(fsgnj.s);
else print_asm_template3(fsgnj.d);
if(s->width == 4) {
print_asm_template3(fsgnj.s);
} else {
print_asm_template3(fsgnj.d);
}
break;
case 1: // sgnjn
if(s->width == 4) print_asm_template3(fsgnjn.s);
else print_asm_template3(fsgnjn.d);
if(s->width == 4) {
print_asm_template3(fsgnjn.s);
} else {
print_asm_template3(fsgnjn.d);
}
break;
case 2: // sgnjx
if(s->width == 4) print_asm_template3(fsgnjx.s);
else print_asm_template3(fsgnjx.d);
if(s->width == 4) {
print_asm_template3(fsgnjx.s);
} else {
print_asm_template3(fsgnjx.d);
}
break;
default:
assert(0);
......@@ -291,8 +300,11 @@ static inline make_EHelper(fmv_F_to_G) {
if(rm == 0){
// fmv fpr to gpr
rtl_sext(s, s0, dsrc1, s->width);
if(s->width == 4) print_asm_template2(fmv.x.w);
else print_asm_template2(fmv.x.d);
if(s->width == 4) {
print_asm_template2(fmv.x.w);
} else {
print_asm_template2(fmv.x.d);
}
} else {
// fclass
if(s->width == 4){
......
#include<limits>
static inline make_EHelper(mul) {
rtl_mul_lo(s, ddest, dsrc1, dsrc2);
print_asm_template3(mul);
......
......@@ -9,7 +9,7 @@ void init_simpoint();
void init_profiler();
void init_serializer();
int main(int argc, char *argv[]) {
int nemu_main(int argc, char *argv[]) {
/* Initialize the monitor. */
init_monitor(argc, argv);
......
......@@ -37,7 +37,7 @@ void monitor_statistic(void) {
}
nemu_bool log_enable(void) {
return (g_nr_guest_instr >= LOG_START) && (g_nr_guest_instr <= LOG_END);
return false;
}
void display_inv_msg(vaddr_t pc) {
......
......@@ -102,6 +102,7 @@ static nemu_bool make_token(char *e) {
case TK_NOTYPE: break;
case TK_NUM:
case TK_REG: sprintf(tokens[nr_token].str, "%.*s", substr_len, substr_start);
__attribute__ ((fallthrough));
default: tokens[nr_token].type = rules[i].token_type;
nr_token ++;
}
......
#include <checkpoint/serializer.h>
#include <monitor/difftest.h>
#include <isa.h>
#include <memory/paddr.h>
......@@ -147,15 +148,13 @@ static int cmd_q(char *args) {
static int cmd_help(char *args);
void difftest_detach();
void difftest_attach();
static int cmd_detach(char *args) {
difftest_detach();
NEMUASDUT::difftest_detach();
return 0;
}
static int cmd_attach(char *args) {
difftest_attach();
NEMUASDUT::difftest_attach();
return 0;
}
......
......@@ -4,6 +4,8 @@
#include <memory/paddr.h>
#include <monitor/monitor.h>
namespace NEMUASDUT {
void (*ref_difftest_memcpy_from_dut)(paddr_t dest, void *src, size_t n) = NULL;
void (*ref_difftest_getregs)(void *c) = NULL;
void (*ref_difftest_setregs)(const void *c) = NULL;
......@@ -134,3 +136,5 @@ void difftest_attach() {
isa_difftest_attach();
}
};
#include <checkpoint/serializer.h>
#include <monitor/difftest.h>
#include <isa.h>
#include <memory/paddr.h>
......@@ -13,7 +14,6 @@ void init_regex();
void init_wp_pool();
void init_device();
void init_engine();
void init_difftest(char *ref_so_file, long img_size, int port);
static char *log_file = NULL;
static char *diff_so_file = NULL;
......@@ -230,7 +230,7 @@ void init_monitor(int argc, char *argv[]) {
if (!checkpointRestoring) {
/* Initialize differential testing. */
init_difftest(diff_so_file, img_size, difftest_port);
NEMUASDUT::init_difftest(diff_so_file, img_size, difftest_port);
}
/* Display welcome message. */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册