112157Sandreas.sandberg@arm.com/*
212157Sandreas.sandberg@arm.com * Copyright (c) 2016 ARM Limited
312157Sandreas.sandberg@arm.com * All rights reserved
412157Sandreas.sandberg@arm.com *
512157Sandreas.sandberg@arm.com * The license below extends only to copyright in the software and shall
612157Sandreas.sandberg@arm.com * not be construed as granting a license to any other intellectual
712157Sandreas.sandberg@arm.com * property including but not limited to intellectual property relating
812157Sandreas.sandberg@arm.com * to a hardware implementation of the functionality of the software
912157Sandreas.sandberg@arm.com * licensed hereunder.  You may use the software subject to the license
1012157Sandreas.sandberg@arm.com * terms below provided that you ensure that this notice is replicated
1112157Sandreas.sandberg@arm.com * unmodified and in its entirety in all distributions of the software,
1212157Sandreas.sandberg@arm.com * modified or unmodified, in source code or in binary form.
1312157Sandreas.sandberg@arm.com *
1412157Sandreas.sandberg@arm.com * Copyright (c) 2003-2006 The Regents of The University of Michigan
1512157Sandreas.sandberg@arm.com * All rights reserved.
1612157Sandreas.sandberg@arm.com *
1712157Sandreas.sandberg@arm.com * Redistribution and use in source and binary forms, with or without
1812157Sandreas.sandberg@arm.com * modification, are permitted provided that the following conditions are
1912157Sandreas.sandberg@arm.com * met: redistributions of source code must retain the above copyright
2012157Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer;
2112157Sandreas.sandberg@arm.com * redistributions in binary form must reproduce the above copyright
2212157Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer in the
2312157Sandreas.sandberg@arm.com * documentation and/or other materials provided with the distribution;
2412157Sandreas.sandberg@arm.com * neither the name of the copyright holders nor the names of its
2512157Sandreas.sandberg@arm.com * contributors may be used to endorse or promote products derived from
2612157Sandreas.sandberg@arm.com * this software without specific prior written permission.
2712157Sandreas.sandberg@arm.com *
2812157Sandreas.sandberg@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2912157Sandreas.sandberg@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
3012157Sandreas.sandberg@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
3112157Sandreas.sandberg@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
3212157Sandreas.sandberg@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
3312157Sandreas.sandberg@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
3412157Sandreas.sandberg@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
3512157Sandreas.sandberg@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
3612157Sandreas.sandberg@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
3712157Sandreas.sandberg@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
3812157Sandreas.sandberg@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3912157Sandreas.sandberg@arm.com *
4012157Sandreas.sandberg@arm.com * Authors: Nathan Binkert
4112157Sandreas.sandberg@arm.com *          Ali Saidi
4212157Sandreas.sandberg@arm.com *          Andreas Sandberg
4312157Sandreas.sandberg@arm.com */
4412157Sandreas.sandberg@arm.com
4512157Sandreas.sandberg@arm.com#ifndef __GEM5_ASM_GENERIC_M5OPS_H__
4612157Sandreas.sandberg@arm.com#define __GEM5_ASM_GENERIC_M5OPS_H__
4712157Sandreas.sandberg@arm.com
4812161Sandreas.sandberg@arm.com#include <gem5/asm/generic/m5op_flags.h>
4912161Sandreas.sandberg@arm.com
5012157Sandreas.sandberg@arm.com#define M5OP_ARM                0x00
5112157Sandreas.sandberg@arm.com#define M5OP_QUIESCE            0x01
5212157Sandreas.sandberg@arm.com#define M5OP_QUIESCE_NS         0x02
5312157Sandreas.sandberg@arm.com#define M5OP_QUIESCE_CYCLE      0x03
5412157Sandreas.sandberg@arm.com#define M5OP_QUIESCE_TIME       0x04
5512157Sandreas.sandberg@arm.com#define M5OP_RPNS               0x07
5612157Sandreas.sandberg@arm.com#define M5OP_WAKE_CPU           0x09
5712157Sandreas.sandberg@arm.com#define M5OP_DEPRECATED1        0x10 // obsolete ivlb
5812157Sandreas.sandberg@arm.com#define M5OP_DEPRECATED2        0x11 // obsolete ivle
5912157Sandreas.sandberg@arm.com#define M5OP_DEPRECATED3        0x20 // deprecated exit function
6012157Sandreas.sandberg@arm.com#define M5OP_EXIT               0x21
6112157Sandreas.sandberg@arm.com#define M5OP_FAIL               0x22
6212157Sandreas.sandberg@arm.com#define M5OP_INIT_PARAM         0x30
6312157Sandreas.sandberg@arm.com#define M5OP_LOAD_SYMBOL        0x31
6412157Sandreas.sandberg@arm.com#define M5OP_RESET_STATS        0x40
6512157Sandreas.sandberg@arm.com#define M5OP_DUMP_STATS         0x41
6612157Sandreas.sandberg@arm.com#define M5OP_DUMP_RESET_STATS   0x42
6712157Sandreas.sandberg@arm.com#define M5OP_CHECKPOINT         0x43
6812157Sandreas.sandberg@arm.com#define M5OP_WRITE_FILE         0x4F
6912157Sandreas.sandberg@arm.com#define M5OP_READ_FILE          0x50
7012157Sandreas.sandberg@arm.com#define M5OP_DEBUG_BREAK        0x51
7112157Sandreas.sandberg@arm.com#define M5OP_SWITCH_CPU         0x52
7212157Sandreas.sandberg@arm.com#define M5OP_ADD_SYMBOL         0x53
7312157Sandreas.sandberg@arm.com#define M5OP_PANIC              0x54
7412157Sandreas.sandberg@arm.com
7512157Sandreas.sandberg@arm.com#define M5OP_RESERVED2          0x56 // Reserved for user
7612157Sandreas.sandberg@arm.com#define M5OP_RESERVED3          0x57 // Reserved for user
7712157Sandreas.sandberg@arm.com#define M5OP_RESERVED4          0x58 // Reserved for user
7812157Sandreas.sandberg@arm.com#define M5OP_RESERVED5          0x59 // Reserved for user
7912157Sandreas.sandberg@arm.com
8012157Sandreas.sandberg@arm.com#define M5OP_WORK_BEGIN         0x5a
8112157Sandreas.sandberg@arm.com#define M5OP_WORK_END           0x5b
8212157Sandreas.sandberg@arm.com
8312157Sandreas.sandberg@arm.com#define M5OP_SE_SYSCALL         0x60
8412157Sandreas.sandberg@arm.com#define M5OP_SE_PAGE_FAULT      0x61
8512157Sandreas.sandberg@arm.com#define M5OP_DIST_TOGGLE_SYNC   0x62
8612157Sandreas.sandberg@arm.com
8712157Sandreas.sandberg@arm.com// These operations are for critical path annotation
8812157Sandreas.sandberg@arm.com#define M5OP_ANNOTATE           0x55
8912157Sandreas.sandberg@arm.com#define M5OP_AN_BSM             0x1
9012157Sandreas.sandberg@arm.com#define M5OP_AN_ESM             0x2
9112157Sandreas.sandberg@arm.com#define M5OP_AN_BEGIN           0x3
9212157Sandreas.sandberg@arm.com#define M5OP_AN_END             0x4
9312157Sandreas.sandberg@arm.com#define M5OP_AN_Q               0x6
9412157Sandreas.sandberg@arm.com#define M5OP_AN_DQ              0x7
9512157Sandreas.sandberg@arm.com#define M5OP_AN_WF              0x8
9612157Sandreas.sandberg@arm.com#define M5OP_AN_WE              0x9
9712157Sandreas.sandberg@arm.com#define M5OP_AN_RQ              0xA
9812157Sandreas.sandberg@arm.com#define M5OP_AN_WS              0xB
9912157Sandreas.sandberg@arm.com#define M5OP_AN_SQ              0xC
10012157Sandreas.sandberg@arm.com#define M5OP_AN_AQ              0xD
10112157Sandreas.sandberg@arm.com#define M5OP_AN_PQ              0xE
10212157Sandreas.sandberg@arm.com#define M5OP_AN_L               0xF
10312157Sandreas.sandberg@arm.com#define M5OP_AN_IDENTIFY        0x10
10412157Sandreas.sandberg@arm.com#define M5OP_AN_GETID           0x11
10512157Sandreas.sandberg@arm.com
10612157Sandreas.sandberg@arm.com
10712160Sandreas.sandberg@arm.com#define M5OP_FOREACH                                            \
10812160Sandreas.sandberg@arm.com    M5OP(m5_arm, M5OP_ARM, 0);                                  \
10912160Sandreas.sandberg@arm.com    M5OP(m5_quiesce, M5OP_QUIESCE, 0);                          \
11012160Sandreas.sandberg@arm.com    M5OP(m5_quiesce_ns, M5OP_QUIESCE_NS, 0);                    \
11112160Sandreas.sandberg@arm.com    M5OP(m5_quiesce_cycle, M5OP_QUIESCE_CYCLE, 0);              \
11212160Sandreas.sandberg@arm.com    M5OP(m5_quiesce_time, M5OP_QUIESCE_TIME, 0);                \
11312160Sandreas.sandberg@arm.com    M5OP(m5_rpns, M5OP_RPNS, 0);                                \
11412160Sandreas.sandberg@arm.com    M5OP(m5_wake_cpu, M5OP_WAKE_CPU, 0);                        \
11512160Sandreas.sandberg@arm.com    M5OP(m5_exit, M5OP_EXIT, 0);                                \
11612160Sandreas.sandberg@arm.com    M5OP(m5_fail, M5OP_FAIL, 0);                                \
11712160Sandreas.sandberg@arm.com    M5OP(m5_init_param, M5OP_INIT_PARAM, 0);                    \
11812160Sandreas.sandberg@arm.com    M5OP(m5_load_symbol, M5OP_LOAD_SYMBOL, 0);                  \
11912160Sandreas.sandberg@arm.com    M5OP(m5_reset_stats, M5OP_RESET_STATS, 0);                  \
12012160Sandreas.sandberg@arm.com    M5OP(m5_dump_stats, M5OP_DUMP_STATS, 0);                    \
12112160Sandreas.sandberg@arm.com    M5OP(m5_dump_reset_stats, M5OP_DUMP_RESET_STATS, 0);        \
12212160Sandreas.sandberg@arm.com    M5OP(m5_checkpoint, M5OP_CHECKPOINT, 0);                    \
12312160Sandreas.sandberg@arm.com    M5OP(m5_read_file, M5OP_READ_FILE, 0);                      \
12412160Sandreas.sandberg@arm.com    M5OP(m5_write_file, M5OP_WRITE_FILE, 0);                    \
12512160Sandreas.sandberg@arm.com    M5OP(m5_debug_break, M5OP_DEBUG_BREAK, 0);                  \
12612160Sandreas.sandberg@arm.com    M5OP(m5_switch_cpu, M5OP_SWITCH_CPU, 0);                    \
12712160Sandreas.sandberg@arm.com    M5OP(m5_add_symbol, M5OP_ADD_SYMBOL, 0);                    \
12812160Sandreas.sandberg@arm.com    M5OP(m5_panic, M5OP_PANIC, 0);                              \
12912160Sandreas.sandberg@arm.com    M5OP(m5_work_begin, M5OP_WORK_BEGIN, 0);                    \
13012160Sandreas.sandberg@arm.com    M5OP(m5_work_end, M5OP_WORK_END, 0);                        \
13112423Sjang.hanhwi@gmail.com    M5OP(m5_dist_toggle_sync, M5OP_DIST_TOGGLE_SYNC, 0);
13212157Sandreas.sandberg@arm.com
13312157Sandreas.sandberg@arm.com#define M5OP_FOREACH_ANNOTATION                      \
13412157Sandreas.sandberg@arm.com    M5_ANNOTATION(m5a_bsm, M5OP_AN_BSM);             \
13512157Sandreas.sandberg@arm.com    M5_ANNOTATION(m5a_esm, M5OP_AN_ESM);             \
13612157Sandreas.sandberg@arm.com    M5_ANNOTATION(m5a_begin, M5OP_AN_BEGIN);         \
13712157Sandreas.sandberg@arm.com    M5_ANNOTATION(m5a_end, M5OP_AN_END);             \
13812157Sandreas.sandberg@arm.com    M5_ANNOTATION(m5a_q, M5OP_AN_Q);                 \
13912157Sandreas.sandberg@arm.com    M5_ANNOTATION(m5a_dq, M5OP_AN_DQ);               \
14012157Sandreas.sandberg@arm.com    M5_ANNOTATION(m5a_wf, M5OP_AN_WF);               \
14112157Sandreas.sandberg@arm.com    M5_ANNOTATION(m5a_we, M5OP_AN_WE);               \
14212157Sandreas.sandberg@arm.com    M5_ANNOTATION(m5a_rq, M5OP_AN_RQ);               \
14312157Sandreas.sandberg@arm.com    M5_ANNOTATION(m5a_ws, M5OP_AN_WS);               \
14412157Sandreas.sandberg@arm.com    M5_ANNOTATION(m5a_sq, M5OP_AN_SQ);               \
14512157Sandreas.sandberg@arm.com    M5_ANNOTATION(m5a_aq, M5OP_AN_AQ);               \
14612157Sandreas.sandberg@arm.com    M5_ANNOTATION(m5a_pq, M5OP_AN_PQ);               \
14712157Sandreas.sandberg@arm.com    M5_ANNOTATION(m5a_l, M5OP_AN_L);                 \
14812157Sandreas.sandberg@arm.com    M5_ANNOTATION(m5a_identify, M5OP_AN_IDENTIFY);   \
14912157Sandreas.sandberg@arm.com    M5_ANNOTATION(m5a_getid, M5OP_AN_GETID);
15012157Sandreas.sandberg@arm.com
15112157Sandreas.sandberg@arm.com#endif //  __GEM5_ASM_GENERIC_M5OPS_H__
152