上記のような方法も取れるが、マクロが定義されている。
#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) \