FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Gem5でのROI (Region of Interests) の設定方法 (2. マクロとしての定義)

msyksphinz.hatenablog.com

上記のような方法も取れるが、マクロが定義されている。

#ifdef ENABLE_GEM5
        m5_reset_stats(0,0);

        m5_dump_stats(0,0);
#endif // ENABLE_GEM5

定義はこうだ。

 .macro  m5op_func, name, func
         .globl \name
         \name:
         .long 0x0000007b | (\func << 25)
         ret
 .endm

 .text
 #define M5OP(name, func) m5op_func name, func;
         M5OP_FOREACH
 #undef M5OP
  • include/gem5/asm/generic/m5ops.h
#define M5OP_FOREACH                                            \
    M5OP(m5_arm, M5OP_ARM)                                      \
    M5OP(m5_quiesce, M5OP_QUIESCE)                              \
    M5OP(m5_quiesce_ns, M5OP_QUIESCE_NS)                        \
    M5OP(m5_quiesce_cycle, M5OP_QUIESCE_CYCLE)                  \
    M5OP(m5_quiesce_time, M5OP_QUIESCE_TIME)                    \
    M5OP(m5_rpns, M5OP_RPNS)                                    \
    M5OP(m5_wake_cpu, M5OP_WAKE_CPU)                            \
    M5OP(m5_exit, M5OP_EXIT)                                    \
    M5OP(m5_fail, M5OP_FAIL)                                    \
    M5OP(m5_sum, M5OP_SUM)                                      \
    M5OP(m5_init_param, M5OP_INIT_PARAM)                        \
    M5OP(m5_load_symbol, M5OP_LOAD_SYMBOL)                      \
    M5OP(m5_reset_stats, M5OP_RESET_STATS)                      \
    M5OP(m5_dump_stats, M5OP_DUMP_STATS)                        \
    M5OP(m5_dump_reset_stats, M5OP_DUMP_RESET_STATS)            \
    M5OP(m5_checkpoint, M5OP_CHECKPOINT)                        \
    M5OP(m5_write_file, M5OP_WRITE_FILE)                        \
    M5OP(m5_read_file, M5OP_READ_FILE)                          \
    M5OP(m5_debug_break, M5OP_DEBUG_BREAK)                      \
    M5OP(m5_switch_cpu, M5OP_SWITCH_CPU)                        \
    M5OP(m5_add_symbol, M5OP_ADD_SYMBOL)                        \
    M5OP(m5_panic, M5OP_PANIC)                                  \
    M5OP(m5_work_begin, M5OP_WORK_BEGIN)                        \
    M5OP(m5_work_end, M5OP_WORK_END)                            \
    M5OP(m5_dist_toggle_sync, M5OP_DIST_TOGGLE_SYNC)            \
    M5OP(m5_workload, M5OP_WORKLOAD)                            \