m5op_x86.S revision 12160
15790Sgblack@eecs.umich.edu/*
25790Sgblack@eecs.umich.edu * Copyright (c) 2003-2006 The Regents of The University of Michigan
35790Sgblack@eecs.umich.edu * All rights reserved.
45790Sgblack@eecs.umich.edu *
55790Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without
65790Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are
75790Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright
85790Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer;
95790Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright
105790Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the
115790Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution;
125790Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its
135790Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from
145790Sgblack@eecs.umich.edu * this software without specific prior written permission.
155790Sgblack@eecs.umich.edu *
165790Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
175790Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
185790Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
195790Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
205790Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
215790Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
225790Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
235790Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
245790Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
255790Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
265790Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
275790Sgblack@eecs.umich.edu *
285790Sgblack@eecs.umich.edu * Authors: Gabe Black
295790Sgblack@eecs.umich.edu *          Nathan Binkert
305790Sgblack@eecs.umich.edu *          Ali Saidi
315790Sgblack@eecs.umich.edu */
325790Sgblack@eecs.umich.edu
3312157Sandreas.sandberg@arm.com#include <gem5/asm/generic/m5ops.h>
345790Sgblack@eecs.umich.edu
359898Sandreas@sandberg.pp.se#ifdef M5OP_ADDR
369898Sandreas@sandberg.pp.se/* Use the memory mapped m5op interface */
379898Sandreas@sandberg.pp.se#define TWO_BYTE_OP(name, number)         \
389898Sandreas@sandberg.pp.se        .globl name;                      \
399898Sandreas@sandberg.pp.se        .func name;                       \
409898Sandreas@sandberg.pp.sename:                                     \
419898Sandreas@sandberg.pp.se        mov m5_mem, %r11;                 \
429898Sandreas@sandberg.pp.se        mov $number, %rax;                \
439898Sandreas@sandberg.pp.se        shl $8, %rax;                     \
449898Sandreas@sandberg.pp.se        mov 0(%r11, %rax, 1), %rax;       \
459898Sandreas@sandberg.pp.se        ret;                              \
469898Sandreas@sandberg.pp.se        .endfunc;
479898Sandreas@sandberg.pp.se
489898Sandreas@sandberg.pp.se#else
499898Sandreas@sandberg.pp.se/* Use the magic instruction based m5op interface. This does not work
509898Sandreas@sandberg.pp.se * in virtualized environments.
519898Sandreas@sandberg.pp.se */
529898Sandreas@sandberg.pp.se
535790Sgblack@eecs.umich.edu#define TWO_BYTE_OP(name, number)         \
545790Sgblack@eecs.umich.edu        .globl name;                      \
555790Sgblack@eecs.umich.edu        .func name;                       \
565790Sgblack@eecs.umich.eduname:                                     \
575790Sgblack@eecs.umich.edu        .byte 0x0F, 0x04;                 \
585790Sgblack@eecs.umich.edu        .word number;                     \
595790Sgblack@eecs.umich.edu        ret;                              \
605790Sgblack@eecs.umich.edu        .endfunc;
615790Sgblack@eecs.umich.edu
629898Sandreas@sandberg.pp.se#endif
639898Sandreas@sandberg.pp.se
6412160Sandreas.sandberg@arm.comTWO_BYTE_OP(m5_arm, M5OP_ARM)
6512160Sandreas.sandberg@arm.comTWO_BYTE_OP(m5_quiesce, M5OP_QUIESCE)
6612160Sandreas.sandberg@arm.comTWO_BYTE_OP(m5_quiesce_ns, M5OP_QUIESCE_NS)
6712160Sandreas.sandberg@arm.comTWO_BYTE_OP(m5_quiesce_cycle, M5OP_QUIESCE_CYCLE)
6812160Sandreas.sandberg@arm.comTWO_BYTE_OP(m5_quiesce_time, M5OP_QUIESCE_TIME)
6912160Sandreas.sandberg@arm.comTWO_BYTE_OP(m5_rpns, M5OP_RPNS)
7012157Sandreas.sandberg@arm.comTWO_BYTE_OP(m5_exit, M5OP_EXIT)
7112157Sandreas.sandberg@arm.comTWO_BYTE_OP(m5_fail, M5OP_FAIL)
7212160Sandreas.sandberg@arm.comTWO_BYTE_OP(m5_init_param, M5OP_INIT_PARAM)
7312160Sandreas.sandberg@arm.comTWO_BYTE_OP(m5_load_symbol, M5OP_LOAD_SYMBOL)
7412157Sandreas.sandberg@arm.comTWO_BYTE_OP(m5_reset_stats, M5OP_RESET_STATS)
7512157Sandreas.sandberg@arm.comTWO_BYTE_OP(m5_dump_stats, M5OP_DUMP_STATS)
7612160Sandreas.sandberg@arm.comTWO_BYTE_OP(m5_dump_reset_stats, M5OP_DUMP_RESET_STATS)
7712157Sandreas.sandberg@arm.comTWO_BYTE_OP(m5_checkpoint, M5OP_CHECKPOINT)
7812160Sandreas.sandberg@arm.comTWO_BYTE_OP(m5_read_file, M5OP_READ_FILE)
7912160Sandreas.sandberg@arm.comTWO_BYTE_OP(m5_write_file, M5OP_WRITE_FILE)
8012160Sandreas.sandberg@arm.comTWO_BYTE_OP(m5_debug_break, M5OP_DEBUG_BREAK)
8112160Sandreas.sandberg@arm.comTWO_BYTE_OP(m5_switch_cpu, M5OP_SWITCH_CPU)
8212160Sandreas.sandberg@arm.comTWO_BYTE_OP(m5_add_symbol, M5OP_ADD_SYMBOL)
8312157Sandreas.sandberg@arm.comTWO_BYTE_OP(m5_panic, M5OP_PANIC)
8412157Sandreas.sandberg@arm.comTWO_BYTE_OP(m5_work_begin, M5OP_WORK_BEGIN)
8512157Sandreas.sandberg@arm.comTWO_BYTE_OP(m5_work_end, M5OP_WORK_END)
8612160Sandreas.sandberg@arm.comTWO_BYTE_OP(m5_dist_toggle_sync, M5OP_DIST_TOGGLE_SYNC)
87