util: Move source files into a src directory.
authorGabe Black <gabeblack@google.com>
Tue, 24 Mar 2020 07:36:09 +0000 (00:36 -0700)
committerGabe Black <gabeblack@google.com>
Wed, 1 Apr 2020 11:58:06 +0000 (11:58 +0000)
This also moves the Makefiles, which will still produce build output in
the src directory. This is to prepare for a scons based build system
which will create a separate build directory with build artifacts.

Change-Id: I7c6d325e1d0a428656b2e3070b5e942515543696
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/27209
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br>
Maintainer: Bobby R. Bruce <bbruce@ucdavis.edu>

32 files changed:
util/m5/Android.mk [deleted file]
util/m5/Makefile.aarch64 [deleted file]
util/m5/Makefile.arm [deleted file]
util/m5/Makefile.sparc [deleted file]
util/m5/Makefile.thumb [deleted file]
util/m5/Makefile.x86 [deleted file]
util/m5/jni/gem5Op.java [deleted file]
util/m5/jni_gem5Op.c [deleted file]
util/m5/lua_gem5Op.c [deleted file]
util/m5/m5.c [deleted file]
util/m5/m5_mmap.c [deleted file]
util/m5/m5_mmap.h [deleted file]
util/m5/m5op_arm.S [deleted file]
util/m5/m5op_arm_A64.S [deleted file]
util/m5/m5op_sparc.S [deleted file]
util/m5/m5op_x86.S [deleted file]
util/m5/src/Android.mk [new file with mode: 0644]
util/m5/src/Makefile.aarch64 [new file with mode: 0644]
util/m5/src/Makefile.arm [new file with mode: 0644]
util/m5/src/Makefile.sparc [new file with mode: 0644]
util/m5/src/Makefile.thumb [new file with mode: 0644]
util/m5/src/Makefile.x86 [new file with mode: 0644]
util/m5/src/jni/gem5Op.java [new file with mode: 0644]
util/m5/src/jni_gem5Op.c [new file with mode: 0644]
util/m5/src/lua_gem5Op.c [new file with mode: 0644]
util/m5/src/m5.c [new file with mode: 0644]
util/m5/src/m5_mmap.c [new file with mode: 0644]
util/m5/src/m5_mmap.h [new file with mode: 0644]
util/m5/src/m5op_arm.S [new file with mode: 0644]
util/m5/src/m5op_arm_A64.S [new file with mode: 0644]
util/m5/src/m5op_sparc.S [new file with mode: 0644]
util/m5/src/m5op_x86.S [new file with mode: 0644]

diff --git a/util/m5/Android.mk b/util/m5/Android.mk
deleted file mode 100644 (file)
index 34fb10e..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := m5
-LOCAL_SRC_FILES := \
-    m5.c
-
-ifeq ($(TARGET_ARCH),x86)
-    LOCAL_SRC_FILES += \
-        m5op_x86.S
-else ifeq ($(TARGET_ARCH),arm)
-    LOCAL_SRC_FILES += \
-        m5op_arm.S
-else ifeq ($(TARGET_ARCH),arm64)
-    LOCAL_SRC_FILES += \
-        m5op_arm_A64.S
-else
-    $(error "Unsupported TARGET_ARCH $(TARGET_ARCH)")
-endif
-
-include $(BUILD_EXECUTABLE)
diff --git a/util/m5/Makefile.aarch64 b/util/m5/Makefile.aarch64
deleted file mode 100644 (file)
index f0b6494..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-# Copyright (c) 2010 ARM Limited
-# All rights reserved.
-#
-# The license below extends only to copyright in the software and shall
-# not be construed as granting a license to any other intellectual
-# property including but not limited to intellectual property relating
-# to a hardware implementation of the functionality of the software
-# licensed hereunder.  You may use the software subject to the license
-# terms below provided that you ensure that this notice is replicated
-# unmodified and in its entirety in all distributions of the software,
-# modified or unmodified, in source code or in binary form.
-#
-# Copyright (c) 2005-2006 The Regents of The University of Michigan
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met: redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer;
-# redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution;
-# neither the name of the copyright holders nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-### If we are not compiling on an arm v8, we must use cross tools ###
-ifneq ($(shell uname -m), aarch64)
-CROSS_COMPILE?=aarch64-linux-gnu-
-endif
-CC=$(CROSS_COMPILE)gcc
-AS=$(CROSS_COMPILE)as
-LD=$(CROSS_COMPILE)ld
-AR=$(CROSS_COMPILE)ar
-
-JC=javac
-JH=javah
-JR=jar
-### JDK_PATH must be set to build gem5OpJni
-#JDK_PATH=/path/to/jdk/version_number
-
-CFLAGS=-O2 -I $(JDK_PATH)/include/ -I $(JDK_PATH)/include/linux \
-       -I../../include -march=armv8-a
-LDFLAGS=-static -L. -lm5
-
-LIB_OBJS=m5op_arm_A64.o m5_mmap.o
-OBJS=m5.o
-JNI_OBJS=m5op_arm_A64.o jni_gem5Op.o
-LUA_OBJS=lua_gem5Op.o m5op_arm_A64.o m5_mmap.o
-
-### Need to install lua5.1 library to compile gem5OpLua.so
-LUA_HEADER_INCLUDE=$(shell pkg-config --cflags lua51) -I/usr/include/x86_64-linux-gnu
-
-all: libm5.a m5
-
-%.o: %.S
-       $(CC) $(CFLAGS) -o $@ -c $<
-
-%.o: %.c
-       $(CC)  $(CFLAGS) -o $@ -c $<
-
-m5: $(OBJS) libm5.a
-       $(CC) -o $@ $^ $(LDFLAGS)
-
-libm5.a: $(LIB_OBJS)
-       $(AR) rcs $@ $^
-
-gem5OpJni: gem5OpJni.jar $(JNI_OBJS)
-       $(CC) --shared -o lib$@.so $(JNI_OBJS)
-
-gem5OpJni.jar:
-       $(JC) jni/gem5Op.java; \
-       $(JH) jni.gem5Op; \
-       $(JR) cvf $@ jni/*.class
-
-lua_gem5Op.o: lua_gem5Op.c
-       $(CC) $(CFLAGS) $(LUA_HEADER_INCLUDE) -o $@ -c $<
-
-gem5OpLua.so: $(LUA_OBJS)
-       $(CC) $(CFLAGS) $^ -o $@ -shared
-
-clean:
-       rm -f *.o m5 libgem5OpJni.so gem5OpJni.jar jni/*.class libm5.a gem5OpLua.so
diff --git a/util/m5/Makefile.arm b/util/m5/Makefile.arm
deleted file mode 100644 (file)
index 1fd1840..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-# Copyright (c) 2010 ARM Limited
-# All rights reserved.
-#
-# The license below extends only to copyright in the software and shall
-# not be construed as granting a license to any other intellectual
-# property including but not limited to intellectual property relating
-# to a hardware implementation of the functionality of the software
-# licensed hereunder.  You may use the software subject to the license
-# terms below provided that you ensure that this notice is replicated
-# unmodified and in its entirety in all distributions of the software,
-# modified or unmodified, in source code or in binary form.
-#
-# Copyright (c) 2005-2006 The Regents of The University of Michigan
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met: redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer;
-# redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution;
-# neither the name of the copyright holders nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-### If we are not compiling on an arm, we must use cross tools ###
-ifneq ($(shell uname -m), armv7l)
-CROSS_COMPILE?=arm-linux-gnueabi-
-endif
-CC=$(CROSS_COMPILE)gcc
-AS=$(CROSS_COMPILE)as
-LD=$(CROSS_COMPILE)ld
-AR=$(CROSS_COMPILE)ar
-
-JC=javac
-JH=javah
-JR=jar
-### JDK_PATH must be set to build gem5OpJni
-#JDK_PATH=/path/to/jdk/version_number
-
-CFLAGS=-O2 -I $(JDK_PATH)/include/ -I $(JDK_PATH)/include/linux \
-       -I../../include -march=armv7-a
-LDFLAGS=-L. -lm5 -static
-
-LIB_OBJS=m5op_arm.o m5_mmap.o
-OBJS=m5.o
-JNI_OBJS=m5op_arm.o jni_gem5Op.o
-LUA_OBJS=lua_gem5Op.o m5op_arm.o m5_mmap.o
-
-### Need to install lua5.1 library to compile gem5OpLua.so
-LUA_HEADER_INCLUDE=$(shell pkg-config --cflags lua51) \
-       -I/usr/include/x86_64-linux-gnu
-
-all: libm5.a m5
-
-%.o: %.S
-       $(CC) $(CFLAGS) -o $@ -c $<
-
-%.o: %.c
-       $(CC)  $(CFLAGS) -o $@ -c $<
-
-m5: $(OBJS) libm5.a
-       $(CC) -o $@ $^ $(LDFLAGS)
-
-libm5.a: $(LIB_OBJS)
-       $(AR) rcs $@ $^
-
-gem5OpJni: gem5OpJni.jar $(JNI_OBJS)
-       $(CC) --shared -o lib$@.so $(JNI_OBJS)
-
-gem5OpJni.jar:
-       $(JC) jni/gem5Op.java; \
-       $(JH) jni.gem5Op; \
-       $(JR) cvf $@ jni/*.class
-
-lua_gem5Op.o: lua_gem5Op.c
-       $(CC) $(CFLAGS) $(LUA_HEADER_INCLUDE) -o $@ -c $< -fPIC
-
-gem5OpLua.so: $(LUA_OBJS)
-       $(CC) $(CFLAGS) $^ -o $@ -shared
-
-clean:
-       rm -f *.o m5 libgem5OpJni.so gem5OpJni.jar jni/*.class libm5.a \
-       jni_gem5Op.h gem5OpLua.so
diff --git a/util/m5/Makefile.sparc b/util/m5/Makefile.sparc
deleted file mode 100644 (file)
index 9f19db9..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright (c) 2005-2006 The Regents of The University of Michigan
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met: redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer;
-# redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution;
-# neither the name of the copyright holders nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-### If we are not compiling on an alpha, we must use cross tools ###    
-ifneq ($(shell uname -m), sun4v)
-CROSS_COMPILE?=sparc64-sun-solaris2.10-
-endif
-CC=$(CROSS_COMPILE)gcc
-AS=$(CROSS_COMPILE)as
-LD=$(CROSS_COMPILE)ld
-
-CFLAGS=-O2 -m64 -I../../include
-OBJS=m5.o m5op_sparc.o m5_mmap.o
-
-all: m5
-
-%.o: %.S
-       $(CC) $(CFLAGS) -o $@ -c $<
-
-%.o: %.c
-       $(CC)  $(CFLAGS) -o $@ -c $<
-
-m5: $(OBJS)
-       $(CC) -m64 -o $@ $(OBJS)
-
-clean:
-       rm -f *.o m5
diff --git a/util/m5/Makefile.thumb b/util/m5/Makefile.thumb
deleted file mode 100644 (file)
index 1d7ad51..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-# Copyright (c) 2010 ARM Limited
-# All rights reserved.
-#
-# The license below extends only to copyright in the software and shall
-# not be construed as granting a license to any other intellectual
-# property including but not limited to intellectual property relating
-# to a hardware implementation of the functionality of the software
-# licensed hereunder.  You may use the software subject to the license
-# terms below provided that you ensure that this notice is replicated
-# unmodified and in its entirety in all distributions of the software,
-# modified or unmodified, in source code or in binary form.
-#
-# Copyright (c) 2005-2006 The Regents of The University of Michigan
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met: redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer;
-# redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution;
-# neither the name of the copyright holders nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-### If we are not compiling on an arm, we must use cross tools ###    
-ifneq ($(shell uname -m), arm)
-CROSS_COMPILE?=arm-none-linux-gnueabi-
-endif
-CC=$(CROSS_COMPILE)gcc
-AS=$(CROSS_COMPILE)as
-LD=$(CROSS_COMPILE)ld
-AR=$(CROSS_COMPILE)ar
-
-#CFLAGS=-O2 -march=armv7 -mthumb -I../../include
-CFLAGS=-O2 -mthumb -I../../include
-LDFLAGS=-L. -lm5
-
-OBJS=m5.o
-LIB_OBJS=m5op_arm.o m5_mmap.o
-
-all: libm5.a m5
-
-%.o: %.S
-       $(CC) $(CFLAGS) -o $@ -c $<
-
-%.o: %.c
-       $(CC)  $(CFLAGS) -o $@ -c $<
-
-m5: $(OBJS) libm5.a
-       $(CC) -o $@ -march=armv7 -mthumb $(OBJS) $(LDFLAGS)
-
-libm5.a: $(LIB_OBJS)
-       $(AR) rcs $@ $^
-
-
-clean:
-       rm -f *.o m5 libm5.a
diff --git a/util/m5/Makefile.x86 b/util/m5/Makefile.x86
deleted file mode 100644 (file)
index fae81bb..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-# Copyright (c) 2005-2006 The Regents of The University of Michigan
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met: redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer;
-# redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution;
-# neither the name of the copyright holders nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-CC=gcc
-AS=as
-LD=ld
-
-CFLAGS?=-O2 -DM5OP_ADDR=0xFFFF0000 -I../../include
-OBJS=m5.o m5op_x86.o m5_mmap.o
-LUA_HEADER_INCLUDE=$(shell pkg-config --cflags-only-I lua51)
-LUA_OBJS=lua_gem5Op.opic m5op_x86.opic m5_mmap.opic
-
-all: m5
-
-%.o: %.S
-       $(CC) $(CFLAGS) -o $@ -c $<
-
-%.o: %.c
-       $(CC) $(CFLAGS) -o $@ -c $<
-
-%.opic : %.S
-       $(CC) $(CFLAGS) -fPIC -o $@ -c $<
-
-%.opic : %.c
-       $(CC) $(CFLAGS) -fPIC -o $@ -c $<
-
-m5: $(OBJS)
-       $(CC) -o $@ $(OBJS) -no-pie
-
-m5op_x86.opic: m5op_x86.S
-       $(CC) $(CFLAGS) -DM5OP_PIC -fPIC -o $@ -c $<
-
-lua_gem5Op.opic: lua_gem5Op.c
-       $(CC) $(CFLAGS) $(LUA_HEADER_INCLUDE) -fPIC -o $@ -c $<
-
-gem5OpLua.so: $(LUA_OBJS)
-       $(CC) $(CFLAGS) -fPIC $^ -o $@ -shared
-
-clean:
-       rm -f *.o *.opic m5 gem5OpLua.so
diff --git a/util/m5/jni/gem5Op.java b/util/m5/jni/gem5Op.java
deleted file mode 100644 (file)
index 579ff34..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2010 ARM Limited
- * All rights reserved
- *
- * The license below extends only to copyright in the software and shall
- * not be construed as granting a license to any other intellectual
- * property including but not limited to intellectual property relating
- * to a hardware implementation of the functionality of the software
- * licensed hereunder.  You may use the software subject to the license
- * terms below provided that you ensure that this notice is replicated
- * unmodified and in its entirety in all distributions of the software,
- * modified or unmodified, in source code or in binary form.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-package jni;
-
-/**
- * Java class to implement JNI for m5Ops
- */
-
-public class gem5Op {
-    public native void arm(long address);
-    public native void quiesce();
-    public native void quiesceNs(long ns);
-    public native void quiesceCycle(long cycles);
-    public native long quiesceTime();
-    public native long rpns();
-    public native void wakeCPU(long cpuid);
-
-    public native void exit(long ns_delay);
-    public native void fail(long ns_delay, long code);
-    public native long initparam(long key_str1, long key_str2);
-    public native void checkpoint(long ns_delay, long ns_period);
-    public native void reset_stats(long ns_delay, long ns_period);
-    public native void dump_stats(long ns_delay, long ns_period);
-    public native void dumpreset_stats(long ns_delay, long ns_period);
-    public native void debugbreak();
-    public native void switchcpu();
-    public native void panic();
-    public native void work_begin(long workid, long threadid);
-    public native void work_end(long workid, long threadid);
-
-}
diff --git a/util/m5/jni_gem5Op.c b/util/m5/jni_gem5Op.c
deleted file mode 100644 (file)
index 4d10750..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright (c) 2010 ARM Limited
- * All rights reserved
- *
- * The license below extends only to copyright in the software and shall
- * not be construed as granting a license to any other intellectual
- * property including but not limited to intellectual property relating
- * to a hardware implementation of the functionality of the software
- * licensed hereunder.  You may use the software subject to the license
- * terms below provided that you ensure that this notice is replicated
- * unmodified and in its entirety in all distributions of the software,
- * modified or unmodified, in source code or in binary form.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdint.h>
-
-#include "jni_gem5Op.h"
-#include "m5op.h"
-
-/**
-   C library interface for gem5Op JNI
-
-*/
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_arm(JNIEnv *env, jobject obj, jlong j_address)
-{
-    arm(j_address);
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_quiesce(JNIEnv *env, jobject obj)
-{
-    quiesce();
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_quiesceNs(JNIEnv *env, jobject obj, jlong j_ns)
-{
-    quiesceNs(j_ns);
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_quiesceCycle(JNIEnv *env, jobject obj, jlong j_cycles)
-{
-    quiesceCycle(j_cycles);
-}
-
-JNIEXPORT jlong JNICALL
-Java_jni_gem5Op_quiesceTime(JNIEnv *env, jobject obj)
-{
-    uint64_t time = quiesceTime();
-    if (time & 0x8000000000000000ULL)
-        printf("Truncated return value from quiesceTime() to 63 bits\n");
-    return (time & 0x7FFFFFFFFFFFFFFFULL);
-}
-
-JNIEXPORT jlong JNICALL
-Java_jni_gem5Op_rpns(JNIEnv *env, jobject obj)
-{
-    uint64_t time = rpns();
-    if (time & 0x8000000000000000ULL)
-        printf("Truncated return value from rpns() to 63 bits\n");
-    return (time & 0x7FFFFFFFFFFFFFFFULL);
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_wakeCPU(JNIEnv *env, jobject obj, jlong j_cpuid)
-{
-    wakeCPU(j_cpuid);
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_exit(JNIEnv *env, jobject obj, jlong j_ns_delay)
-{
-    m5_exit(j_ns_delay);
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_fail(JNIEnv *env, jobject obj, jlong j_ns_delay, jlong j_code)
-{
-    m5_fail(j_ns_delay, j_code);
-}
-
-JNIEXPORT jlong JNICALL
-Java_jni_gem5Op_initparam(JNIEnv *env, jobject obj, jlong j_key_str1,
-                          jlong j_key_str2)
-{
-    uint64_t param = m5_initparam(j_key_str1, j_key_str2);
-    if (param & 0x8000000000000000ULL)
-        printf("Truncated return value from m_initparam() to 63 bits\n");
-    return (param & 0x7FFFFFFFFFFFFFFFULL);
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_checkpoint(JNIEnv *env, jobject obj,
-                           jlong j_ns_delay, jlong j_ns_period)
-{
-    m5_checkpoint(j_ns_delay, j_ns_period);
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_reset_1stats(JNIEnv *env, jobject obj,
-                             jlong j_ns_delay, jlong j_ns_period)
-{
-    m5_reset_stats(j_ns_delay, j_ns_period);
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_dump_1stats(JNIEnv *env, jobject obj,
-                            jlong j_ns_delay, jlong j_ns_period)
-{
-    m5_dump_stats(j_ns_delay, j_ns_period);
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_dumpreset_1stats(JNIEnv *env, jobject obj,
-                                 jlong j_ns_delay, jlong j_ns_period)
-{
-    m5_dumpreset_stats(j_ns_delay, j_ns_period);
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_debugbreak(JNIEnv *env, jobject obj)
-{
-    m5_debugbreak();
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_switchcpu (JNIEnv *env, jobject obj)
-{
-    m5_switchcpu();
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_panic(JNIEnv *env, jobject obj)
-{
-    m5_panic();
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_work_1begin(JNIEnv *env, jobject obj,
-                            jlong j_workid, jlong j_threadid)
-{
-    m5_work_begin(j_workid, j_threadid);
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_work_1end(JNIEnv *env, jobject obj,
-                          jlong j_workid, jlong j_threadid)
-{
-    m5_work_end(j_workid, j_threadid);
-}
-
diff --git a/util/m5/lua_gem5Op.c b/util/m5/lua_gem5Op.c
deleted file mode 100644 (file)
index 89aec14..0000000
+++ /dev/null
@@ -1,278 +0,0 @@
-/* Copyright (c) 2017 Hanhwi Jang
- * All rights reserved.
-
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
-
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-
-#include <assert.h>
-#include <lauxlib.h>
-#include <lua.h>
-#include <lualib.h>
-#include <stdlib.h>
-
-#include <gem5/m5ops.h>
-
-#include "m5_mmap.h"
-
-static int
-do_arm(lua_State *L)
-{
-    uint64_t address = lua_tointeger(L, 1);
-    m5_arm(address);
-    return 0;
-}
-
-static int
-do_quiesce(lua_State *L)
-{
-    m5_quiesce();
-    return 0;
-}
-
-static int
-do_quiesce_ns(lua_State *L)
-{
-    uint64_t ns = lua_tointeger(L, 1);
-    m5_quiesce_ns(ns);
-    return 0;
-}
-
-static int
-do_quiesce_cycle(lua_State *L)
-{
-    uint64_t cycles = lua_tointeger(L, 1);
-    m5_quiesce_cycle(cycles);
-    return 0;
-}
-
-static int
-do_quiesce_time(lua_State *L)
-{
-    uint64_t ns = m5_quiesce_time();
-    lua_pushinteger(L, ns);
-    return 1;
-}
-
-static int
-do_rpns(lua_State *L)
-{
-    uint64_t ns = m5_rpns();
-    lua_pushinteger(L, ns);
-    return 1;
-}
-
-static int
-do_wake_cpu(lua_State *L)
-{
-    uint64_t cpuid = lua_tointeger(L, 1);
-    m5_wake_cpu(cpuid);
-    return 0;
-}
-
-static int
-do_exit(lua_State *L)
-{
-    uint64_t ns_delay = lua_tointeger(L, 1);
-    m5_exit(ns_delay);
-    return 0;
-}
-
-static int
-do_fail(lua_State *L)
-{
-    uint64_t ns_delay = lua_tointeger(L, 1);
-    uint64_t code = lua_tointeger(L, 2);
-    m5_fail(ns_delay, code);
-    return 0;
-}
-
-static int
-do_init_param(lua_State *L)
-{
-    uint64_t key_str1 = lua_tointeger(L, 1);
-    uint64_t key_str2 = lua_tointeger(L, 2);
-    lua_pushinteger(L, m5_init_param(key_str1, key_str2));
-    return 1;
-}
-
-static int
-do_checkpoint(lua_State *L)
-{
-    uint64_t delay = lua_tointeger(L, 1);
-    uint64_t period = lua_tointeger(L, 2);
-    m5_checkpoint(delay, period);
-    return 0;
-}
-
-static int
-do_reset_stats(lua_State *L)
-{
-    uint64_t ns_delay = lua_tointeger(L, 1);
-    uint64_t ns_period = lua_tointeger(L, 2);
-    m5_reset_stats(ns_delay, ns_period);
-    return 0;
-}
-
-static int
-do_dump_stats(lua_State *L)
-{
-    uint64_t delay = lua_tointeger(L, 1);
-    uint64_t period = lua_tointeger(L, 2);
-    m5_dump_stats(delay, period);
-    return 0;
-}
-
-static int
-do_dump_reset_stats(lua_State *L)
-{
-    uint64_t delay = lua_tointeger(L, 1);
-    uint64_t period = lua_tointeger(L, 2);
-    m5_dump_reset_stats(delay, period);
-    return 0;
-}
-
-static int
-do_read_file(lua_State *L)
-{
-    uint64_t len = lua_tointeger(L, 1);
-    uint64_t offset = lua_tointeger(L, 2);
-    char *buf = malloc(len);
-    uint64_t readlen = m5_read_file(buf, len, offset);
-    lua_pushlstring(L, buf, readlen);
-    return 1;
-}
-
-static int
-do_write_file(lua_State *L)
-{
-    const char* buf = lua_tostring(L, 1);
-    uint64_t len = lua_tointeger(L, 2);
-    assert(len <= lua_strlen(L, 1));
-    uint64_t offset = lua_tointeger(L, 3);
-    const char *filename = lua_tostring(L, 4);
-    uint64_t w_len = m5_write_file((void *)buf, len, offset, filename);
-    lua_pushinteger(L, w_len);
-    return 1;
-}
-
-static int
-do_debug_break(lua_State *L)
-{
-    m5_debug_break();
-    return 0;
-}
-
-static int
-do_switch_cpu(lua_State *L)
-{
-    m5_switch_cpu();
-    return 0;
-}
-
-static int
-do_dist_toggle_sync(lua_State *L)
-{
-    m5_dist_toggle_sync();
-    return 0;
-}
-
-static int
-do_add_symbol(lua_State *L)
-{
-    uint64_t addr = lua_tointeger(L, 1);
-    char *string = (char*) lua_tostring(L, 2);
-    m5_add_symbol(addr, string);
-    return 0;
-}
-
-static int
-do_loadsymbol(lua_State *L)
-{
-    m5_load_symbol();
-    return 0;
-}
-
-static int
-do_panic(lua_State *L)
-{
-    m5_panic();
-    return 0;
-}
-
-static int
-do_work_begin(lua_State *L)
-{
-    uint64_t workid = lua_tointeger(L, 1);
-    uint64_t threadid = lua_tointeger(L, 2);
-    m5_work_begin(workid, threadid);
-    return 0;
-}
-
-static int
-do_work_end(lua_State *L)
-{
-    uint64_t workid = lua_tointeger(L, 1);
-    uint64_t threadid = lua_tointeger(L, 2);
-    m5_work_end(workid, threadid);
-    return 0;
-}
-
-int
-luaopen_gem5OpLua(lua_State *L)
-{
-    map_m5_mem();
-#define ADD_FUNC(fname) do{                         \
-        lua_pushcfunction(L, fname);                \
-        lua_setfield(L, -2, #fname);                \
-    }while (0)
-
-    lua_newtable(L);
-    ADD_FUNC(do_arm);
-    ADD_FUNC(do_quiesce);
-    ADD_FUNC(do_quiesce_ns);
-    ADD_FUNC(do_quiesce_cycle);
-    ADD_FUNC(do_quiesce_time);
-    ADD_FUNC(do_rpns);
-    ADD_FUNC(do_wake_cpu);
-    ADD_FUNC(do_exit);
-    ADD_FUNC(do_fail);
-    ADD_FUNC(do_init_param);
-    ADD_FUNC(do_checkpoint);
-    ADD_FUNC(do_reset_stats);
-    ADD_FUNC(do_dump_stats);
-    ADD_FUNC(do_dump_reset_stats);
-    ADD_FUNC(do_read_file);
-    ADD_FUNC(do_write_file);
-    ADD_FUNC(do_debug_break);
-    ADD_FUNC(do_switch_cpu);
-    ADD_FUNC(do_dist_toggle_sync);
-    ADD_FUNC(do_add_symbol);
-    ADD_FUNC(do_loadsymbol);
-    ADD_FUNC(do_panic);
-    ADD_FUNC(do_work_begin);
-    ADD_FUNC(do_work_end);
-#undef ADD_FUNC
-    return 1;
-}
diff --git a/util/m5/m5.c b/util/m5/m5.c
deleted file mode 100644 (file)
index 4d14ed9..0000000
+++ /dev/null
@@ -1,399 +0,0 @@
-/*
- * Copyright (c) 2011, 2017 ARM Limited
- * All rights reserved
- *
- * The license below extends only to copyright in the software and shall
- * not be construed as granting a license to any other intellectual
- * property including but not limited to intellectual property relating
- * to a hardware implementation of the functionality of the software
- * licensed hereunder.  You may use the software subject to the license
- * terms below provided that you ensure that this notice is replicated
- * unmodified and in its entirety in all distributions of the software,
- * modified or unmodified, in source code or in binary form.
- *
- * Copyright (c) 2003-2005 The Regents of The University of Michigan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef linux
-#define _GNU_SOURCE
-#include <sched.h>
-
-#endif
-
-#include <err.h>
-#include <fcntl.h>
-#include <inttypes.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#include <gem5/m5ops.h>
-#include "m5_mmap.h"
-
-char *progname;
-char *command = "unspecified";
-void usage();
-
-void
-parse_int_args(int argc, char *argv[], uint64_t ints[], int len)
-{
-    if (argc > len)
-        usage();
-
-// On 32 bit platforms we need to use strtoull to do the conversion
-#ifdef __LP64__
-#define strto64 strtoul
-#else
-#define strto64 strtoull
-#endif
-    int i;
-    for (i = 0; i < len; ++i)
-        ints[i] = (i < argc) ? strto64(argv[i], NULL, 0) : 0;
-
-#undef strto64
-}
-
-void
-parse_str_args_to_regs(int argc, char *argv[], uint64_t regs[], int len)
-{
-    if (argc > 1 || (argc > 0 && strlen(argv[0]) > len * sizeof(uint64_t)))
-        usage();
-
-    int i;
-    for (i = 0; i < len; i++)
-        regs[i] = 0;
-
-    if (argc == 0)
-        return;
-
-    int n;
-    for (n = 0, i = 0; i < len && n < strlen(argv[0]); n++) {
-        *((char *)(&regs[i]) + (n % 8)) = argv[0][n];
-        if ((n % 8) == 7)
-            i++;
-    }
-}
-
-int
-read_file(int dest_fid)
-{
-    uint8_t buf[256*1024];
-    int offset = 0;
-    int len, ret;
-
-    // Touch all buffer pages to ensure they are mapped in the
-    // page table. This is required in the case of X86_FS, where
-    // Linux does demand paging.
-    memset(buf, 0, sizeof(buf));
-
-    while ((len = m5_read_file(buf, sizeof(buf), offset)) > 0) {
-        uint8_t *base = buf;
-        offset += len;
-        do {
-            ret = write(dest_fid, base, len);
-            if (ret < 0) {
-                perror("Failed to write file");
-                exit(2);
-            } else if (ret == 0) {
-                fprintf(stderr, "Failed to write file: "
-                        "Unhandled short write\n");
-                exit(2);
-            }
-
-            base += ret;
-            len -= ret;
-        } while (len);
-    }
-
-    return offset;
-}
-
-void
-write_file(const char *filename, const char *host_filename)
-{
-    fprintf(stderr, "opening %s\n", filename);
-    int src_fid = open(filename, O_RDONLY);
-
-    if (src_fid < 0) {
-        fprintf(stderr, "error opening %s\n", filename);
-        return;
-    }
-
-    char buf[256*1024];
-    int offset = 0;
-    int len;
-    int bytes = 0;
-
-    memset(buf, 0, sizeof(buf));
-
-    while ((len = read(src_fid, buf, sizeof(buf))) > 0) {
-        bytes += m5_write_file(buf, len, offset, host_filename);
-        offset += len;
-    }
-    fprintf(stderr, "written %d bytes\n", bytes);
-
-    close(src_fid);
-}
-
-void
-do_exit(int argc, char *argv[])
-{
-    if (argc > 1)
-        usage();
-
-    uint64_t ints[1];
-    parse_int_args(argc, argv, ints, 1);
-    m5_exit(ints[0]);
-}
-
-void
-do_fail(int argc, char *argv[])
-{
-    if (argc < 1 || argc > 2)
-        usage();
-
-    uint64_t ints[2] = {0,0};
-    parse_int_args(argc, argv, ints, argc);
-    m5_fail(ints[1], ints[0]);
-}
-
-void
-do_reset_stats(int argc, char *argv[])
-{
-    uint64_t ints[2];
-    parse_int_args(argc, argv, ints, 2);
-    m5_reset_stats(ints[0], ints[1]);
-}
-
-void
-do_dump_stats(int argc, char *argv[])
-{
-    uint64_t ints[2];
-    parse_int_args(argc, argv, ints, 2);
-    m5_dump_stats(ints[0], ints[1]);
-}
-
-void
-do_dump_reset_stats(int argc, char *argv[])
-{
-    uint64_t ints[2];
-    parse_int_args(argc, argv, ints, 2);
-    m5_dump_reset_stats(ints[0], ints[1]);
-}
-
-void
-do_read_file(int argc, char *argv[])
-{
-    if (argc > 0)
-        usage();
-
-    read_file(STDOUT_FILENO);
-}
-
-void
-do_write_file(int argc, char *argv[])
-{
-    if (argc != 1 && argc != 2)
-        usage();
-
-    const char *filename = argv[0];
-    const char *host_filename = (argc == 2) ? argv[1] : argv[0];
-
-    write_file(filename, host_filename);
-}
-
-void
-do_exec_file(int argc, char *argv[])
-{
-    if (argc > 0)
-        usage();
-
-    const char *destname = "/tmp/execfile";
-
-    int fid = open(destname, O_WRONLY, 0777);
-    int len = read_file(fid);
-    close(fid);
-    if (len > 0) {
-        execl(destname, "execfile", NULL);
-        err(1, "execl failed!");
-    }
-}
-
-void
-do_checkpoint(int argc, char *argv[])
-{
-    uint64_t ints[2];
-    parse_int_args(argc, argv, ints, 2);
-    m5_checkpoint(ints[0], ints[1]);
-}
-
-void
-do_addsymbol(int argc, char *argv[])
-{
-    if (argc != 2)
-        usage();
-
-    uint64_t addr = strtoul(argv[0], NULL, 0);
-    char *symbol = argv[1];
-    m5_add_symbol(addr, symbol);
-}
-
-
-void
-do_loadsymbol(int argc, char *argv[])
-{
-    if (argc > 0)
-        usage();
-
-    m5_load_symbol();
-}
-
-void
-do_initparam(int argc, char *argv[])
-{
-    if (argc > 1)
-        usage();
-
-    uint64_t key_str[2];
-    parse_str_args_to_regs(argc, argv, key_str, 2);
-    uint64_t val = m5_init_param(key_str[0], key_str[1]);
-    printf("%"PRIu64, val);
-}
-
-void
-do_sw99param(int argc, char *argv[])
-{
-    if (argc != 0)
-        usage();
-
-    uint64_t param = m5_init_param(0, 0);
-
-    // run-time, rampup-time, rampdown-time, warmup-time, connections
-    printf("%"PRId64" %"PRId64" %"PRId64" %"PRId64" %"PRId64,
-           (param >> 48) & 0xfff,
-           (param >> 36) & 0xfff, (param >> 24) & 0xfff,
-           (param >> 12) & 0xfff, (param >> 0) & 0xfff);
-}
-
-#ifdef linux
-void
-do_pin(int argc, char *argv[])
-{
-    if (argc < 2)
-        usage();
-
-    cpu_set_t mask;
-    CPU_ZERO(&mask);
-
-    const char *sep = ",";
-    char *target = strtok(argv[0], sep);
-    while (target) {
-        CPU_SET(atoi(target), &mask);
-        target = strtok(NULL, sep);
-    }
-
-    if (sched_setaffinity(0, sizeof(cpu_set_t), &mask) < 0)
-        err(1, "setaffinity");
-
-    execvp(argv[1], &argv[1]);
-    err(1, "execvp failed!");
-}
-#endif
-
-struct MainFunc
-{
-    char *name;
-    void (*func)(int argc, char *argv[]);
-    char *usage;
-};
-
-struct MainFunc mainfuncs[] = {
-    { "exit",           do_exit,             "[delay]" },
-    { "fail",           do_fail,             "<code> [delay]" },
-    { "resetstats",     do_reset_stats,      "[delay [period]]" },
-    { "dumpstats",      do_dump_stats,       "[delay [period]]" },
-    { "dumpresetstats", do_dump_reset_stats, "[delay [period]]" },
-    { "readfile",       do_read_file,        "" },
-    { "writefile",      do_write_file,       "<filename> [host filename]" },
-    { "execfile",       do_exec_file,        "" },
-    { "checkpoint",     do_checkpoint,       "[delay [period]]" },
-    { "addsymbol",      do_addsymbol,        "<address> <symbol>" },
-    { "loadsymbol",     do_loadsymbol,       "" },
-    { "initparam",      do_initparam,        "[key] // key must be shorter"
-                                             " than 16 chars" },
-    { "sw99param",      do_sw99param,        "" },
-#ifdef linux
-    { "pin",            do_pin,              "<cpu> <program> [args ...]" }
-#endif
-};
-int numfuncs = sizeof(mainfuncs) / sizeof(mainfuncs[0]);
-
-void
-usage()
-{
-    int i;
-
-    for (i = 0; i < numfuncs; ++i) {
-        char *header = i ? "" : "usage:";
-        fprintf(stderr, "%-6s %s %s %s\n",
-                header, progname, mainfuncs[i].name, mainfuncs[i].usage);
-    }
-    fprintf(stderr, "\n");
-    fprintf(stderr, "All times in nanoseconds!\n");
-
-    exit(1);
-}
-
-int
-main(int argc, char *argv[])
-{
-    progname = argv[0];
-    if (argc < 2)
-        usage(1);
-
-    map_m5_mem();
-
-    command = argv[1];
-
-    argv += 2;
-    argc -= 2;
-
-    int i;
-    for (i = 0; i < numfuncs; ++i) {
-        if (strcmp(command, mainfuncs[i].name) != 0)
-            continue;
-
-        mainfuncs[i].func(argc, argv);
-        exit(0);
-    }
-
-    usage(1);
-}
diff --git a/util/m5/m5_mmap.c b/util/m5/m5_mmap.c
deleted file mode 100644 (file)
index 79de59b..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 2011, 2017 ARM Limited
- * All rights reserved
- *
- * The license below extends only to copyright in the software and shall
- * not be construed as granting a license to any other intellectual
- * property including but not limited to intellectual property relating
- * to a hardware implementation of the functionality of the software
- * licensed hereunder.  You may use the software subject to the license
- * terms below provided that you ensure that this notice is replicated
- * unmodified and in its entirety in all distributions of the software,
- * modified or unmodified, in source code or in binary form.
- *
- * Copyright (c) 2003-2005 The Regents of The University of Michigan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include "m5_mmap.h"
-
-void *m5_mem = NULL;
-
-void
-map_m5_mem()
-{
-#ifdef M5OP_ADDR
-    int fd;
-
-    fd = open("/dev/mem", O_RDWR | O_SYNC);
-    if (fd == -1) {
-        perror("Can't open /dev/mem");
-        exit(1);
-    }
-
-    m5_mem = mmap(NULL, 0x10000, PROT_READ | PROT_WRITE, MAP_SHARED, fd,
-                  M5OP_ADDR);
-    if (!m5_mem) {
-        perror("Can't mmap /dev/mem");
-        exit(1);
-    }
-#endif
-}
diff --git a/util/m5/m5_mmap.h b/util/m5/m5_mmap.h
deleted file mode 100644 (file)
index d32857f..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2011, 2017 ARM Limited
- * All rights reserved
- *
- * The license below extends only to copyright in the software and shall
- * not be construed as granting a license to any other intellectual
- * property including but not limited to intellectual property relating
- * to a hardware implementation of the functionality of the software
- * licensed hereunder.  You may use the software subject to the license
- * terms below provided that you ensure that this notice is replicated
- * unmodified and in its entirety in all distributions of the software,
- * modified or unmodified, in source code or in binary form.
- *
- * Copyright (c) 2003-2005 The Regents of The University of Michigan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __UTIL_M5_MMAP_H__
-#define __UTIL_M5_MMAP_H__
-
-#include <fcntl.h>
-#include <sys/mman.h>
-
-extern void *m5_mem;
-
-void map_m5_mem();
-
-#endif
diff --git a/util/m5/m5op_arm.S b/util/m5/m5op_arm.S
deleted file mode 100644 (file)
index bd3bb4d..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2010, 2016 ARM Limited
- * All rights reserved
- *
- * The license below extends only to copyright in the software and shall
- * not be construed as granting a license to any other intellectual
- * property including but not limited to intellectual property relating
- * to a hardware implementation of the functionality of the software
- * licensed hereunder.  You may use the software subject to the license
- * terms below provided that you ensure that this notice is replicated
- * unmodified and in its entirety in all distributions of the software,
- * modified or unmodified, in source code or in binary form.
- *
- * Copyright (c) 2003-2006 The Regents of The University of Michigan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-.syntax unified
-#ifdef __thumb__
-.thumb
-#endif
-
-#include <gem5/asm/generic/m5ops.h>
-
-.text
-
-.macro m5op_func name, func
-        .align 2
-        .globl \name
-\name:
-#ifdef __thumb__
-        .short 0xEE00 | \func
-        .short 0x0110
-#else
-        .long 0xEE000110 | (\func << 16)
-#endif
-        mov pc,lr
-.endm
-
-.text
-#define M5OP(name, func) m5op_func name, func
-        M5OP_FOREACH
-#undef M5OP
diff --git a/util/m5/m5op_arm_A64.S b/util/m5/m5op_arm_A64.S
deleted file mode 100644 (file)
index c0224e2..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2010-2013, 2016-2017 ARM Limited
- * All rights reserved
- *
- * The license below extends only to copyright in the software and shall
- * not be construed as granting a license to any other intellectual
- * property including but not limited to intellectual property relating
- * to a hardware implementation of the functionality of the software
- * licensed hereunder.  You may use the software subject to the license
- * terms below provided that you ensure that this notice is replicated
- * unmodified and in its entirety in all distributions of the software,
- * modified or unmodified, in source code or in binary form.
- *
- * Copyright (c) 2003-2006 The Regents of The University of Michigan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <gem5/asm/generic/m5ops.h>
-
-#ifdef M5OP_ADDR
-.macro m5op_func, name, func
-        .globl \name
-        \name:
-        ldr x9, m5_mem
-        movz x10, #(\func << 8)
-        ldr x0, [ x9, x10 ]
-        ret
-.endm
-#else
-.macro m5op_func, name, func
-        .globl \name
-        \name:
-        .long 0xff000110 | (\func << 16)
-        ret
-.endm
-#endif
-
-.text
-#define M5OP(name, func) m5op_func name, func
-        M5OP_FOREACH
-#undef M5OP
diff --git a/util/m5/m5op_sparc.S b/util/m5/m5op_sparc.S
deleted file mode 100644 (file)
index 9ed9a99..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2003-2006 The Regents of The University of Michigan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#define m5_op 0x2
-#define m5_op3 0x37
-
-#include <gem5/asm/generic/m5ops.h>
-
-.macro m5op_func name, func
-        .section ".text";
-        .align  4;
-        .global \name;
-        .type   \name, #function;
-\name:
-        retl
-        .long   (m5_op) << 30 | (m5_op3) << 19 | (\func) << 7;
-        .size   \name, (.-\name)
-.endm
-
-#define M5OP(name, func) m5op_func name, func
-        M5OP_FOREACH
-#undef M5OP
diff --git a/util/m5/m5op_x86.S b/util/m5/m5op_x86.S
deleted file mode 100644 (file)
index cd83a94..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 2003-2006 The Regents of The University of Michigan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <gem5/asm/generic/m5ops.h>
-
-/*
-  Note: The ABI for pseudo ops using the M5OP_ADDR is defined in
-  src/arch/x86/pseudo_inst_abi.hh. If the ABI is changed below, it's likely
-  that the ABI in the arch directory will also need to be updated.
-
-  The ABI for the magic instruction-based pseudo ops is not affected by this.
-*/
-
-#if defined(M5OP_ADDR) && defined(M5OP_PIC)
-/* Use the memory mapped m5op interface */
-#define TWO_BYTE_OP(name, number)         \
-        .globl name;                      \
-        .func name;                       \
-name:                                     \
-        mov m5_mem@gotpcrel(%rip), %r11;  \
-        mov (%r11), %r11;                 \
-        mov $number, %rax;                \
-        shl $8, %rax;                     \
-        mov 0(%r11, %rax, 1), %rax;       \
-        ret;                              \
-        .endfunc;
-
-#elif defined(M5OP_ADDR) && !defined(M5OP_PIC)
-/* Use the memory mapped m5op interface */
-#define TWO_BYTE_OP(name, number)         \
-        .globl name;                      \
-        .func name;                       \
-name:                                     \
-        mov m5_mem, %r11;                 \
-        mov $number, %rax;                \
-        shl $8, %rax;                     \
-        mov 0(%r11, %rax, 1), %rax;       \
-        ret;                              \
-        .endfunc;
-
-#else
-/* Use the magic instruction based m5op interface. This does not work
- * in virtualized environments.
- */
-
-#define TWO_BYTE_OP(name, number)         \
-        .globl name;                      \
-        .func name;                       \
-name:                                     \
-        .byte 0x0F, 0x04;                 \
-        .word number;                     \
-        ret;                              \
-        .endfunc;
-
-#endif
-
-#define M5OP(name, number) TWO_BYTE_OP(name, number)
-        M5OP_FOREACH
-#undef M5OP
diff --git a/util/m5/src/Android.mk b/util/m5/src/Android.mk
new file mode 100644 (file)
index 0000000..34fb10e
--- /dev/null
@@ -0,0 +1,21 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := m5
+LOCAL_SRC_FILES := \
+    m5.c
+
+ifeq ($(TARGET_ARCH),x86)
+    LOCAL_SRC_FILES += \
+        m5op_x86.S
+else ifeq ($(TARGET_ARCH),arm)
+    LOCAL_SRC_FILES += \
+        m5op_arm.S
+else ifeq ($(TARGET_ARCH),arm64)
+    LOCAL_SRC_FILES += \
+        m5op_arm_A64.S
+else
+    $(error "Unsupported TARGET_ARCH $(TARGET_ARCH)")
+endif
+
+include $(BUILD_EXECUTABLE)
diff --git a/util/m5/src/Makefile.aarch64 b/util/m5/src/Makefile.aarch64
new file mode 100644 (file)
index 0000000..c1c084d
--- /dev/null
@@ -0,0 +1,95 @@
+# Copyright (c) 2010 ARM Limited
+# All rights reserved.
+#
+# The license below extends only to copyright in the software and shall
+# not be construed as granting a license to any other intellectual
+# property including but not limited to intellectual property relating
+# to a hardware implementation of the functionality of the software
+# licensed hereunder.  You may use the software subject to the license
+# terms below provided that you ensure that this notice is replicated
+# unmodified and in its entirety in all distributions of the software,
+# modified or unmodified, in source code or in binary form.
+#
+# Copyright (c) 2005-2006 The Regents of The University of Michigan
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+### If we are not compiling on an arm v8, we must use cross tools ###
+ifneq ($(shell uname -m), aarch64)
+CROSS_COMPILE?=aarch64-linux-gnu-
+endif
+CC=$(CROSS_COMPILE)gcc
+AS=$(CROSS_COMPILE)as
+LD=$(CROSS_COMPILE)ld
+AR=$(CROSS_COMPILE)ar
+
+JC=javac
+JH=javah
+JR=jar
+### JDK_PATH must be set to build gem5OpJni
+#JDK_PATH=/path/to/jdk/version_number
+
+CFLAGS=-O2 -I $(JDK_PATH)/include/ -I $(JDK_PATH)/include/linux \
+       -I../../../include -march=armv8-a
+LDFLAGS=-static -L. -lm5
+
+LIB_OBJS=m5op_arm_A64.o m5_mmap.o
+OBJS=m5.o
+JNI_OBJS=m5op_arm_A64.o jni_gem5Op.o
+LUA_OBJS=lua_gem5Op.o m5op_arm_A64.o m5_mmap.o
+
+### Need to install lua5.1 library to compile gem5OpLua.so
+LUA_HEADER_INCLUDE=$(shell pkg-config --cflags lua51) -I/usr/include/x86_64-linux-gnu
+
+all: libm5.a m5
+
+%.o: %.S
+       $(CC) $(CFLAGS) -o $@ -c $<
+
+%.o: %.c
+       $(CC)  $(CFLAGS) -o $@ -c $<
+
+m5: $(OBJS) libm5.a
+       $(CC) -o $@ $^ $(LDFLAGS)
+
+libm5.a: $(LIB_OBJS)
+       $(AR) rcs $@ $^
+
+gem5OpJni: gem5OpJni.jar $(JNI_OBJS)
+       $(CC) --shared -o lib$@.so $(JNI_OBJS)
+
+gem5OpJni.jar:
+       $(JC) jni/gem5Op.java; \
+       $(JH) jni.gem5Op; \
+       $(JR) cvf $@ jni/*.class
+
+lua_gem5Op.o: lua_gem5Op.c
+       $(CC) $(CFLAGS) $(LUA_HEADER_INCLUDE) -o $@ -c $<
+
+gem5OpLua.so: $(LUA_OBJS)
+       $(CC) $(CFLAGS) $^ -o $@ -shared
+
+clean:
+       rm -f *.o m5 libgem5OpJni.so gem5OpJni.jar jni/*.class libm5.a gem5OpLua.so
diff --git a/util/m5/src/Makefile.arm b/util/m5/src/Makefile.arm
new file mode 100644 (file)
index 0000000..042cf00
--- /dev/null
@@ -0,0 +1,97 @@
+# Copyright (c) 2010 ARM Limited
+# All rights reserved.
+#
+# The license below extends only to copyright in the software and shall
+# not be construed as granting a license to any other intellectual
+# property including but not limited to intellectual property relating
+# to a hardware implementation of the functionality of the software
+# licensed hereunder.  You may use the software subject to the license
+# terms below provided that you ensure that this notice is replicated
+# unmodified and in its entirety in all distributions of the software,
+# modified or unmodified, in source code or in binary form.
+#
+# Copyright (c) 2005-2006 The Regents of The University of Michigan
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+### If we are not compiling on an arm, we must use cross tools ###
+ifneq ($(shell uname -m), armv7l)
+CROSS_COMPILE?=arm-linux-gnueabi-
+endif
+CC=$(CROSS_COMPILE)gcc
+AS=$(CROSS_COMPILE)as
+LD=$(CROSS_COMPILE)ld
+AR=$(CROSS_COMPILE)ar
+
+JC=javac
+JH=javah
+JR=jar
+### JDK_PATH must be set to build gem5OpJni
+#JDK_PATH=/path/to/jdk/version_number
+
+CFLAGS=-O2 -I $(JDK_PATH)/include/ -I $(JDK_PATH)/include/linux \
+       -I../../../include -march=armv7-a
+LDFLAGS=-L. -lm5 -static
+
+LIB_OBJS=m5op_arm.o m5_mmap.o
+OBJS=m5.o
+JNI_OBJS=m5op_arm.o jni_gem5Op.o
+LUA_OBJS=lua_gem5Op.o m5op_arm.o m5_mmap.o
+
+### Need to install lua5.1 library to compile gem5OpLua.so
+LUA_HEADER_INCLUDE=$(shell pkg-config --cflags lua51) \
+       -I/usr/include/x86_64-linux-gnu
+
+all: libm5.a m5
+
+%.o: %.S
+       $(CC) $(CFLAGS) -o $@ -c $<
+
+%.o: %.c
+       $(CC)  $(CFLAGS) -o $@ -c $<
+
+m5: $(OBJS) libm5.a
+       $(CC) -o $@ $^ $(LDFLAGS)
+
+libm5.a: $(LIB_OBJS)
+       $(AR) rcs $@ $^
+
+gem5OpJni: gem5OpJni.jar $(JNI_OBJS)
+       $(CC) --shared -o lib$@.so $(JNI_OBJS)
+
+gem5OpJni.jar:
+       $(JC) jni/gem5Op.java; \
+       $(JH) jni.gem5Op; \
+       $(JR) cvf $@ jni/*.class
+
+lua_gem5Op.o: lua_gem5Op.c
+       $(CC) $(CFLAGS) $(LUA_HEADER_INCLUDE) -o $@ -c $< -fPIC
+
+gem5OpLua.so: $(LUA_OBJS)
+       $(CC) $(CFLAGS) $^ -o $@ -shared
+
+clean:
+       rm -f *.o m5 libgem5OpJni.so gem5OpJni.jar jni/*.class libm5.a \
+       jni_gem5Op.h gem5OpLua.so
diff --git a/util/m5/src/Makefile.sparc b/util/m5/src/Makefile.sparc
new file mode 100644 (file)
index 0000000..2424784
--- /dev/null
@@ -0,0 +1,50 @@
+# Copyright (c) 2005-2006 The Regents of The University of Michigan
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+### If we are not compiling on an alpha, we must use cross tools ###    
+ifneq ($(shell uname -m), sun4v)
+CROSS_COMPILE?=sparc64-sun-solaris2.10-
+endif
+CC=$(CROSS_COMPILE)gcc
+AS=$(CROSS_COMPILE)as
+LD=$(CROSS_COMPILE)ld
+
+CFLAGS=-O2 -m64 -I../../../include
+OBJS=m5.o m5op_sparc.o m5_mmap.o
+
+all: m5
+
+%.o: %.S
+       $(CC) $(CFLAGS) -o $@ -c $<
+
+%.o: %.c
+       $(CC)  $(CFLAGS) -o $@ -c $<
+
+m5: $(OBJS)
+       $(CC) -m64 -o $@ $(OBJS)
+
+clean:
+       rm -f *.o m5
diff --git a/util/m5/src/Makefile.thumb b/util/m5/src/Makefile.thumb
new file mode 100644 (file)
index 0000000..1eb5b3d
--- /dev/null
@@ -0,0 +1,71 @@
+# Copyright (c) 2010 ARM Limited
+# All rights reserved.
+#
+# The license below extends only to copyright in the software and shall
+# not be construed as granting a license to any other intellectual
+# property including but not limited to intellectual property relating
+# to a hardware implementation of the functionality of the software
+# licensed hereunder.  You may use the software subject to the license
+# terms below provided that you ensure that this notice is replicated
+# unmodified and in its entirety in all distributions of the software,
+# modified or unmodified, in source code or in binary form.
+#
+# Copyright (c) 2005-2006 The Regents of The University of Michigan
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+### If we are not compiling on an arm, we must use cross tools ###    
+ifneq ($(shell uname -m), arm)
+CROSS_COMPILE?=arm-none-linux-gnueabi-
+endif
+CC=$(CROSS_COMPILE)gcc
+AS=$(CROSS_COMPILE)as
+LD=$(CROSS_COMPILE)ld
+AR=$(CROSS_COMPILE)ar
+
+#CFLAGS=-O2 -march=armv7 -mthumb -I../../include
+CFLAGS=-O2 -mthumb -I../../../include
+LDFLAGS=-L. -lm5
+
+OBJS=m5.o
+LIB_OBJS=m5op_arm.o m5_mmap.o
+
+all: libm5.a m5
+
+%.o: %.S
+       $(CC) $(CFLAGS) -o $@ -c $<
+
+%.o: %.c
+       $(CC)  $(CFLAGS) -o $@ -c $<
+
+m5: $(OBJS) libm5.a
+       $(CC) -o $@ -march=armv7 -mthumb $(OBJS) $(LDFLAGS)
+
+libm5.a: $(LIB_OBJS)
+       $(AR) rcs $@ $^
+
+
+clean:
+       rm -f *.o m5 libm5.a
diff --git a/util/m5/src/Makefile.x86 b/util/m5/src/Makefile.x86
new file mode 100644 (file)
index 0000000..59493ce
--- /dev/null
@@ -0,0 +1,63 @@
+# Copyright (c) 2005-2006 The Regents of The University of Michigan
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+CC=gcc
+AS=as
+LD=ld
+
+CFLAGS?=-O2 -DM5OP_ADDR=0xFFFF0000 -I../../../include
+OBJS=m5.o m5op_x86.o m5_mmap.o
+LUA_HEADER_INCLUDE=$(shell pkg-config --cflags-only-I lua51)
+LUA_OBJS=lua_gem5Op.opic m5op_x86.opic m5_mmap.opic
+
+all: m5
+
+%.o: %.S
+       $(CC) $(CFLAGS) -o $@ -c $<
+
+%.o: %.c
+       $(CC) $(CFLAGS) -o $@ -c $<
+
+%.opic : %.S
+       $(CC) $(CFLAGS) -fPIC -o $@ -c $<
+
+%.opic : %.c
+       $(CC) $(CFLAGS) -fPIC -o $@ -c $<
+
+m5: $(OBJS)
+       $(CC) -o $@ $(OBJS) -no-pie
+
+m5op_x86.opic: m5op_x86.S
+       $(CC) $(CFLAGS) -DM5OP_PIC -fPIC -o $@ -c $<
+
+lua_gem5Op.opic: lua_gem5Op.c
+       $(CC) $(CFLAGS) $(LUA_HEADER_INCLUDE) -fPIC -o $@ -c $<
+
+gem5OpLua.so: $(LUA_OBJS)
+       $(CC) $(CFLAGS) -fPIC $^ -o $@ -shared
+
+clean:
+       rm -f *.o *.opic m5 gem5OpLua.so
diff --git a/util/m5/src/jni/gem5Op.java b/util/m5/src/jni/gem5Op.java
new file mode 100644 (file)
index 0000000..579ff34
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2010 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package jni;
+
+/**
+ * Java class to implement JNI for m5Ops
+ */
+
+public class gem5Op {
+    public native void arm(long address);
+    public native void quiesce();
+    public native void quiesceNs(long ns);
+    public native void quiesceCycle(long cycles);
+    public native long quiesceTime();
+    public native long rpns();
+    public native void wakeCPU(long cpuid);
+
+    public native void exit(long ns_delay);
+    public native void fail(long ns_delay, long code);
+    public native long initparam(long key_str1, long key_str2);
+    public native void checkpoint(long ns_delay, long ns_period);
+    public native void reset_stats(long ns_delay, long ns_period);
+    public native void dump_stats(long ns_delay, long ns_period);
+    public native void dumpreset_stats(long ns_delay, long ns_period);
+    public native void debugbreak();
+    public native void switchcpu();
+    public native void panic();
+    public native void work_begin(long workid, long threadid);
+    public native void work_end(long workid, long threadid);
+
+}
diff --git a/util/m5/src/jni_gem5Op.c b/util/m5/src/jni_gem5Op.c
new file mode 100644 (file)
index 0000000..4d10750
--- /dev/null
@@ -0,0 +1,177 @@
+/*
+ * Copyright (c) 2010 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdint.h>
+
+#include "jni_gem5Op.h"
+#include "m5op.h"
+
+/**
+   C library interface for gem5Op JNI
+
+*/
+
+JNIEXPORT void JNICALL
+Java_jni_gem5Op_arm(JNIEnv *env, jobject obj, jlong j_address)
+{
+    arm(j_address);
+}
+
+JNIEXPORT void JNICALL
+Java_jni_gem5Op_quiesce(JNIEnv *env, jobject obj)
+{
+    quiesce();
+}
+
+JNIEXPORT void JNICALL
+Java_jni_gem5Op_quiesceNs(JNIEnv *env, jobject obj, jlong j_ns)
+{
+    quiesceNs(j_ns);
+}
+
+JNIEXPORT void JNICALL
+Java_jni_gem5Op_quiesceCycle(JNIEnv *env, jobject obj, jlong j_cycles)
+{
+    quiesceCycle(j_cycles);
+}
+
+JNIEXPORT jlong JNICALL
+Java_jni_gem5Op_quiesceTime(JNIEnv *env, jobject obj)
+{
+    uint64_t time = quiesceTime();
+    if (time & 0x8000000000000000ULL)
+        printf("Truncated return value from quiesceTime() to 63 bits\n");
+    return (time & 0x7FFFFFFFFFFFFFFFULL);
+}
+
+JNIEXPORT jlong JNICALL
+Java_jni_gem5Op_rpns(JNIEnv *env, jobject obj)
+{
+    uint64_t time = rpns();
+    if (time & 0x8000000000000000ULL)
+        printf("Truncated return value from rpns() to 63 bits\n");
+    return (time & 0x7FFFFFFFFFFFFFFFULL);
+}
+
+JNIEXPORT void JNICALL
+Java_jni_gem5Op_wakeCPU(JNIEnv *env, jobject obj, jlong j_cpuid)
+{
+    wakeCPU(j_cpuid);
+}
+
+JNIEXPORT void JNICALL
+Java_jni_gem5Op_exit(JNIEnv *env, jobject obj, jlong j_ns_delay)
+{
+    m5_exit(j_ns_delay);
+}
+
+JNIEXPORT void JNICALL
+Java_jni_gem5Op_fail(JNIEnv *env, jobject obj, jlong j_ns_delay, jlong j_code)
+{
+    m5_fail(j_ns_delay, j_code);
+}
+
+JNIEXPORT jlong JNICALL
+Java_jni_gem5Op_initparam(JNIEnv *env, jobject obj, jlong j_key_str1,
+                          jlong j_key_str2)
+{
+    uint64_t param = m5_initparam(j_key_str1, j_key_str2);
+    if (param & 0x8000000000000000ULL)
+        printf("Truncated return value from m_initparam() to 63 bits\n");
+    return (param & 0x7FFFFFFFFFFFFFFFULL);
+}
+
+JNIEXPORT void JNICALL
+Java_jni_gem5Op_checkpoint(JNIEnv *env, jobject obj,
+                           jlong j_ns_delay, jlong j_ns_period)
+{
+    m5_checkpoint(j_ns_delay, j_ns_period);
+}
+
+JNIEXPORT void JNICALL
+Java_jni_gem5Op_reset_1stats(JNIEnv *env, jobject obj,
+                             jlong j_ns_delay, jlong j_ns_period)
+{
+    m5_reset_stats(j_ns_delay, j_ns_period);
+}
+
+JNIEXPORT void JNICALL
+Java_jni_gem5Op_dump_1stats(JNIEnv *env, jobject obj,
+                            jlong j_ns_delay, jlong j_ns_period)
+{
+    m5_dump_stats(j_ns_delay, j_ns_period);
+}
+
+JNIEXPORT void JNICALL
+Java_jni_gem5Op_dumpreset_1stats(JNIEnv *env, jobject obj,
+                                 jlong j_ns_delay, jlong j_ns_period)
+{
+    m5_dumpreset_stats(j_ns_delay, j_ns_period);
+}
+
+JNIEXPORT void JNICALL
+Java_jni_gem5Op_debugbreak(JNIEnv *env, jobject obj)
+{
+    m5_debugbreak();
+}
+
+JNIEXPORT void JNICALL
+Java_jni_gem5Op_switchcpu (JNIEnv *env, jobject obj)
+{
+    m5_switchcpu();
+}
+
+JNIEXPORT void JNICALL
+Java_jni_gem5Op_panic(JNIEnv *env, jobject obj)
+{
+    m5_panic();
+}
+
+JNIEXPORT void JNICALL
+Java_jni_gem5Op_work_1begin(JNIEnv *env, jobject obj,
+                            jlong j_workid, jlong j_threadid)
+{
+    m5_work_begin(j_workid, j_threadid);
+}
+
+JNIEXPORT void JNICALL
+Java_jni_gem5Op_work_1end(JNIEnv *env, jobject obj,
+                          jlong j_workid, jlong j_threadid)
+{
+    m5_work_end(j_workid, j_threadid);
+}
+
diff --git a/util/m5/src/lua_gem5Op.c b/util/m5/src/lua_gem5Op.c
new file mode 100644 (file)
index 0000000..89aec14
--- /dev/null
@@ -0,0 +1,278 @@
+/* Copyright (c) 2017 Hanhwi Jang
+ * All rights reserved.
+
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#include <assert.h>
+#include <lauxlib.h>
+#include <lua.h>
+#include <lualib.h>
+#include <stdlib.h>
+
+#include <gem5/m5ops.h>
+
+#include "m5_mmap.h"
+
+static int
+do_arm(lua_State *L)
+{
+    uint64_t address = lua_tointeger(L, 1);
+    m5_arm(address);
+    return 0;
+}
+
+static int
+do_quiesce(lua_State *L)
+{
+    m5_quiesce();
+    return 0;
+}
+
+static int
+do_quiesce_ns(lua_State *L)
+{
+    uint64_t ns = lua_tointeger(L, 1);
+    m5_quiesce_ns(ns);
+    return 0;
+}
+
+static int
+do_quiesce_cycle(lua_State *L)
+{
+    uint64_t cycles = lua_tointeger(L, 1);
+    m5_quiesce_cycle(cycles);
+    return 0;
+}
+
+static int
+do_quiesce_time(lua_State *L)
+{
+    uint64_t ns = m5_quiesce_time();
+    lua_pushinteger(L, ns);
+    return 1;
+}
+
+static int
+do_rpns(lua_State *L)
+{
+    uint64_t ns = m5_rpns();
+    lua_pushinteger(L, ns);
+    return 1;
+}
+
+static int
+do_wake_cpu(lua_State *L)
+{
+    uint64_t cpuid = lua_tointeger(L, 1);
+    m5_wake_cpu(cpuid);
+    return 0;
+}
+
+static int
+do_exit(lua_State *L)
+{
+    uint64_t ns_delay = lua_tointeger(L, 1);
+    m5_exit(ns_delay);
+    return 0;
+}
+
+static int
+do_fail(lua_State *L)
+{
+    uint64_t ns_delay = lua_tointeger(L, 1);
+    uint64_t code = lua_tointeger(L, 2);
+    m5_fail(ns_delay, code);
+    return 0;
+}
+
+static int
+do_init_param(lua_State *L)
+{
+    uint64_t key_str1 = lua_tointeger(L, 1);
+    uint64_t key_str2 = lua_tointeger(L, 2);
+    lua_pushinteger(L, m5_init_param(key_str1, key_str2));
+    return 1;
+}
+
+static int
+do_checkpoint(lua_State *L)
+{
+    uint64_t delay = lua_tointeger(L, 1);
+    uint64_t period = lua_tointeger(L, 2);
+    m5_checkpoint(delay, period);
+    return 0;
+}
+
+static int
+do_reset_stats(lua_State *L)
+{
+    uint64_t ns_delay = lua_tointeger(L, 1);
+    uint64_t ns_period = lua_tointeger(L, 2);
+    m5_reset_stats(ns_delay, ns_period);
+    return 0;
+}
+
+static int
+do_dump_stats(lua_State *L)
+{
+    uint64_t delay = lua_tointeger(L, 1);
+    uint64_t period = lua_tointeger(L, 2);
+    m5_dump_stats(delay, period);
+    return 0;
+}
+
+static int
+do_dump_reset_stats(lua_State *L)
+{
+    uint64_t delay = lua_tointeger(L, 1);
+    uint64_t period = lua_tointeger(L, 2);
+    m5_dump_reset_stats(delay, period);
+    return 0;
+}
+
+static int
+do_read_file(lua_State *L)
+{
+    uint64_t len = lua_tointeger(L, 1);
+    uint64_t offset = lua_tointeger(L, 2);
+    char *buf = malloc(len);
+    uint64_t readlen = m5_read_file(buf, len, offset);
+    lua_pushlstring(L, buf, readlen);
+    return 1;
+}
+
+static int
+do_write_file(lua_State *L)
+{
+    const char* buf = lua_tostring(L, 1);
+    uint64_t len = lua_tointeger(L, 2);
+    assert(len <= lua_strlen(L, 1));
+    uint64_t offset = lua_tointeger(L, 3);
+    const char *filename = lua_tostring(L, 4);
+    uint64_t w_len = m5_write_file((void *)buf, len, offset, filename);
+    lua_pushinteger(L, w_len);
+    return 1;
+}
+
+static int
+do_debug_break(lua_State *L)
+{
+    m5_debug_break();
+    return 0;
+}
+
+static int
+do_switch_cpu(lua_State *L)
+{
+    m5_switch_cpu();
+    return 0;
+}
+
+static int
+do_dist_toggle_sync(lua_State *L)
+{
+    m5_dist_toggle_sync();
+    return 0;
+}
+
+static int
+do_add_symbol(lua_State *L)
+{
+    uint64_t addr = lua_tointeger(L, 1);
+    char *string = (char*) lua_tostring(L, 2);
+    m5_add_symbol(addr, string);
+    return 0;
+}
+
+static int
+do_loadsymbol(lua_State *L)
+{
+    m5_load_symbol();
+    return 0;
+}
+
+static int
+do_panic(lua_State *L)
+{
+    m5_panic();
+    return 0;
+}
+
+static int
+do_work_begin(lua_State *L)
+{
+    uint64_t workid = lua_tointeger(L, 1);
+    uint64_t threadid = lua_tointeger(L, 2);
+    m5_work_begin(workid, threadid);
+    return 0;
+}
+
+static int
+do_work_end(lua_State *L)
+{
+    uint64_t workid = lua_tointeger(L, 1);
+    uint64_t threadid = lua_tointeger(L, 2);
+    m5_work_end(workid, threadid);
+    return 0;
+}
+
+int
+luaopen_gem5OpLua(lua_State *L)
+{
+    map_m5_mem();
+#define ADD_FUNC(fname) do{                         \
+        lua_pushcfunction(L, fname);                \
+        lua_setfield(L, -2, #fname);                \
+    }while (0)
+
+    lua_newtable(L);
+    ADD_FUNC(do_arm);
+    ADD_FUNC(do_quiesce);
+    ADD_FUNC(do_quiesce_ns);
+    ADD_FUNC(do_quiesce_cycle);
+    ADD_FUNC(do_quiesce_time);
+    ADD_FUNC(do_rpns);
+    ADD_FUNC(do_wake_cpu);
+    ADD_FUNC(do_exit);
+    ADD_FUNC(do_fail);
+    ADD_FUNC(do_init_param);
+    ADD_FUNC(do_checkpoint);
+    ADD_FUNC(do_reset_stats);
+    ADD_FUNC(do_dump_stats);
+    ADD_FUNC(do_dump_reset_stats);
+    ADD_FUNC(do_read_file);
+    ADD_FUNC(do_write_file);
+    ADD_FUNC(do_debug_break);
+    ADD_FUNC(do_switch_cpu);
+    ADD_FUNC(do_dist_toggle_sync);
+    ADD_FUNC(do_add_symbol);
+    ADD_FUNC(do_loadsymbol);
+    ADD_FUNC(do_panic);
+    ADD_FUNC(do_work_begin);
+    ADD_FUNC(do_work_end);
+#undef ADD_FUNC
+    return 1;
+}
diff --git a/util/m5/src/m5.c b/util/m5/src/m5.c
new file mode 100644 (file)
index 0000000..4d14ed9
--- /dev/null
@@ -0,0 +1,399 @@
+/*
+ * Copyright (c) 2011, 2017 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef linux
+#define _GNU_SOURCE
+#include <sched.h>
+
+#endif
+
+#include <err.h>
+#include <fcntl.h>
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <gem5/m5ops.h>
+#include "m5_mmap.h"
+
+char *progname;
+char *command = "unspecified";
+void usage();
+
+void
+parse_int_args(int argc, char *argv[], uint64_t ints[], int len)
+{
+    if (argc > len)
+        usage();
+
+// On 32 bit platforms we need to use strtoull to do the conversion
+#ifdef __LP64__
+#define strto64 strtoul
+#else
+#define strto64 strtoull
+#endif
+    int i;
+    for (i = 0; i < len; ++i)
+        ints[i] = (i < argc) ? strto64(argv[i], NULL, 0) : 0;
+
+#undef strto64
+}
+
+void
+parse_str_args_to_regs(int argc, char *argv[], uint64_t regs[], int len)
+{
+    if (argc > 1 || (argc > 0 && strlen(argv[0]) > len * sizeof(uint64_t)))
+        usage();
+
+    int i;
+    for (i = 0; i < len; i++)
+        regs[i] = 0;
+
+    if (argc == 0)
+        return;
+
+    int n;
+    for (n = 0, i = 0; i < len && n < strlen(argv[0]); n++) {
+        *((char *)(&regs[i]) + (n % 8)) = argv[0][n];
+        if ((n % 8) == 7)
+            i++;
+    }
+}
+
+int
+read_file(int dest_fid)
+{
+    uint8_t buf[256*1024];
+    int offset = 0;
+    int len, ret;
+
+    // Touch all buffer pages to ensure they are mapped in the
+    // page table. This is required in the case of X86_FS, where
+    // Linux does demand paging.
+    memset(buf, 0, sizeof(buf));
+
+    while ((len = m5_read_file(buf, sizeof(buf), offset)) > 0) {
+        uint8_t *base = buf;
+        offset += len;
+        do {
+            ret = write(dest_fid, base, len);
+            if (ret < 0) {
+                perror("Failed to write file");
+                exit(2);
+            } else if (ret == 0) {
+                fprintf(stderr, "Failed to write file: "
+                        "Unhandled short write\n");
+                exit(2);
+            }
+
+            base += ret;
+            len -= ret;
+        } while (len);
+    }
+
+    return offset;
+}
+
+void
+write_file(const char *filename, const char *host_filename)
+{
+    fprintf(stderr, "opening %s\n", filename);
+    int src_fid = open(filename, O_RDONLY);
+
+    if (src_fid < 0) {
+        fprintf(stderr, "error opening %s\n", filename);
+        return;
+    }
+
+    char buf[256*1024];
+    int offset = 0;
+    int len;
+    int bytes = 0;
+
+    memset(buf, 0, sizeof(buf));
+
+    while ((len = read(src_fid, buf, sizeof(buf))) > 0) {
+        bytes += m5_write_file(buf, len, offset, host_filename);
+        offset += len;
+    }
+    fprintf(stderr, "written %d bytes\n", bytes);
+
+    close(src_fid);
+}
+
+void
+do_exit(int argc, char *argv[])
+{
+    if (argc > 1)
+        usage();
+
+    uint64_t ints[1];
+    parse_int_args(argc, argv, ints, 1);
+    m5_exit(ints[0]);
+}
+
+void
+do_fail(int argc, char *argv[])
+{
+    if (argc < 1 || argc > 2)
+        usage();
+
+    uint64_t ints[2] = {0,0};
+    parse_int_args(argc, argv, ints, argc);
+    m5_fail(ints[1], ints[0]);
+}
+
+void
+do_reset_stats(int argc, char *argv[])
+{
+    uint64_t ints[2];
+    parse_int_args(argc, argv, ints, 2);
+    m5_reset_stats(ints[0], ints[1]);
+}
+
+void
+do_dump_stats(int argc, char *argv[])
+{
+    uint64_t ints[2];
+    parse_int_args(argc, argv, ints, 2);
+    m5_dump_stats(ints[0], ints[1]);
+}
+
+void
+do_dump_reset_stats(int argc, char *argv[])
+{
+    uint64_t ints[2];
+    parse_int_args(argc, argv, ints, 2);
+    m5_dump_reset_stats(ints[0], ints[1]);
+}
+
+void
+do_read_file(int argc, char *argv[])
+{
+    if (argc > 0)
+        usage();
+
+    read_file(STDOUT_FILENO);
+}
+
+void
+do_write_file(int argc, char *argv[])
+{
+    if (argc != 1 && argc != 2)
+        usage();
+
+    const char *filename = argv[0];
+    const char *host_filename = (argc == 2) ? argv[1] : argv[0];
+
+    write_file(filename, host_filename);
+}
+
+void
+do_exec_file(int argc, char *argv[])
+{
+    if (argc > 0)
+        usage();
+
+    const char *destname = "/tmp/execfile";
+
+    int fid = open(destname, O_WRONLY, 0777);
+    int len = read_file(fid);
+    close(fid);
+    if (len > 0) {
+        execl(destname, "execfile", NULL);
+        err(1, "execl failed!");
+    }
+}
+
+void
+do_checkpoint(int argc, char *argv[])
+{
+    uint64_t ints[2];
+    parse_int_args(argc, argv, ints, 2);
+    m5_checkpoint(ints[0], ints[1]);
+}
+
+void
+do_addsymbol(int argc, char *argv[])
+{
+    if (argc != 2)
+        usage();
+
+    uint64_t addr = strtoul(argv[0], NULL, 0);
+    char *symbol = argv[1];
+    m5_add_symbol(addr, symbol);
+}
+
+
+void
+do_loadsymbol(int argc, char *argv[])
+{
+    if (argc > 0)
+        usage();
+
+    m5_load_symbol();
+}
+
+void
+do_initparam(int argc, char *argv[])
+{
+    if (argc > 1)
+        usage();
+
+    uint64_t key_str[2];
+    parse_str_args_to_regs(argc, argv, key_str, 2);
+    uint64_t val = m5_init_param(key_str[0], key_str[1]);
+    printf("%"PRIu64, val);
+}
+
+void
+do_sw99param(int argc, char *argv[])
+{
+    if (argc != 0)
+        usage();
+
+    uint64_t param = m5_init_param(0, 0);
+
+    // run-time, rampup-time, rampdown-time, warmup-time, connections
+    printf("%"PRId64" %"PRId64" %"PRId64" %"PRId64" %"PRId64,
+           (param >> 48) & 0xfff,
+           (param >> 36) & 0xfff, (param >> 24) & 0xfff,
+           (param >> 12) & 0xfff, (param >> 0) & 0xfff);
+}
+
+#ifdef linux
+void
+do_pin(int argc, char *argv[])
+{
+    if (argc < 2)
+        usage();
+
+    cpu_set_t mask;
+    CPU_ZERO(&mask);
+
+    const char *sep = ",";
+    char *target = strtok(argv[0], sep);
+    while (target) {
+        CPU_SET(atoi(target), &mask);
+        target = strtok(NULL, sep);
+    }
+
+    if (sched_setaffinity(0, sizeof(cpu_set_t), &mask) < 0)
+        err(1, "setaffinity");
+
+    execvp(argv[1], &argv[1]);
+    err(1, "execvp failed!");
+}
+#endif
+
+struct MainFunc
+{
+    char *name;
+    void (*func)(int argc, char *argv[]);
+    char *usage;
+};
+
+struct MainFunc mainfuncs[] = {
+    { "exit",           do_exit,             "[delay]" },
+    { "fail",           do_fail,             "<code> [delay]" },
+    { "resetstats",     do_reset_stats,      "[delay [period]]" },
+    { "dumpstats",      do_dump_stats,       "[delay [period]]" },
+    { "dumpresetstats", do_dump_reset_stats, "[delay [period]]" },
+    { "readfile",       do_read_file,        "" },
+    { "writefile",      do_write_file,       "<filename> [host filename]" },
+    { "execfile",       do_exec_file,        "" },
+    { "checkpoint",     do_checkpoint,       "[delay [period]]" },
+    { "addsymbol",      do_addsymbol,        "<address> <symbol>" },
+    { "loadsymbol",     do_loadsymbol,       "" },
+    { "initparam",      do_initparam,        "[key] // key must be shorter"
+                                             " than 16 chars" },
+    { "sw99param",      do_sw99param,        "" },
+#ifdef linux
+    { "pin",            do_pin,              "<cpu> <program> [args ...]" }
+#endif
+};
+int numfuncs = sizeof(mainfuncs) / sizeof(mainfuncs[0]);
+
+void
+usage()
+{
+    int i;
+
+    for (i = 0; i < numfuncs; ++i) {
+        char *header = i ? "" : "usage:";
+        fprintf(stderr, "%-6s %s %s %s\n",
+                header, progname, mainfuncs[i].name, mainfuncs[i].usage);
+    }
+    fprintf(stderr, "\n");
+    fprintf(stderr, "All times in nanoseconds!\n");
+
+    exit(1);
+}
+
+int
+main(int argc, char *argv[])
+{
+    progname = argv[0];
+    if (argc < 2)
+        usage(1);
+
+    map_m5_mem();
+
+    command = argv[1];
+
+    argv += 2;
+    argc -= 2;
+
+    int i;
+    for (i = 0; i < numfuncs; ++i) {
+        if (strcmp(command, mainfuncs[i].name) != 0)
+            continue;
+
+        mainfuncs[i].func(argc, argv);
+        exit(0);
+    }
+
+    usage(1);
+}
diff --git a/util/m5/src/m5_mmap.c b/util/m5/src/m5_mmap.c
new file mode 100644 (file)
index 0000000..79de59b
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2011, 2017 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include "m5_mmap.h"
+
+void *m5_mem = NULL;
+
+void
+map_m5_mem()
+{
+#ifdef M5OP_ADDR
+    int fd;
+
+    fd = open("/dev/mem", O_RDWR | O_SYNC);
+    if (fd == -1) {
+        perror("Can't open /dev/mem");
+        exit(1);
+    }
+
+    m5_mem = mmap(NULL, 0x10000, PROT_READ | PROT_WRITE, MAP_SHARED, fd,
+                  M5OP_ADDR);
+    if (!m5_mem) {
+        perror("Can't mmap /dev/mem");
+        exit(1);
+    }
+#endif
+}
diff --git a/util/m5/src/m5_mmap.h b/util/m5/src/m5_mmap.h
new file mode 100644 (file)
index 0000000..d32857f
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2011, 2017 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __UTIL_M5_MMAP_H__
+#define __UTIL_M5_MMAP_H__
+
+#include <fcntl.h>
+#include <sys/mman.h>
+
+extern void *m5_mem;
+
+void map_m5_mem();
+
+#endif
diff --git a/util/m5/src/m5op_arm.S b/util/m5/src/m5op_arm.S
new file mode 100644 (file)
index 0000000..bd3bb4d
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2010, 2016 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
+ * Copyright (c) 2003-2006 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+.syntax unified
+#ifdef __thumb__
+.thumb
+#endif
+
+#include <gem5/asm/generic/m5ops.h>
+
+.text
+
+.macro m5op_func name, func
+        .align 2
+        .globl \name
+\name:
+#ifdef __thumb__
+        .short 0xEE00 | \func
+        .short 0x0110
+#else
+        .long 0xEE000110 | (\func << 16)
+#endif
+        mov pc,lr
+.endm
+
+.text
+#define M5OP(name, func) m5op_func name, func
+        M5OP_FOREACH
+#undef M5OP
diff --git a/util/m5/src/m5op_arm_A64.S b/util/m5/src/m5op_arm_A64.S
new file mode 100644 (file)
index 0000000..c0224e2
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2010-2013, 2016-2017 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
+ * Copyright (c) 2003-2006 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <gem5/asm/generic/m5ops.h>
+
+#ifdef M5OP_ADDR
+.macro m5op_func, name, func
+        .globl \name
+        \name:
+        ldr x9, m5_mem
+        movz x10, #(\func << 8)
+        ldr x0, [ x9, x10 ]
+        ret
+.endm
+#else
+.macro m5op_func, name, func
+        .globl \name
+        \name:
+        .long 0xff000110 | (\func << 16)
+        ret
+.endm
+#endif
+
+.text
+#define M5OP(name, func) m5op_func name, func
+        M5OP_FOREACH
+#undef M5OP
diff --git a/util/m5/src/m5op_sparc.S b/util/m5/src/m5op_sparc.S
new file mode 100644 (file)
index 0000000..9ed9a99
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2003-2006 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#define m5_op 0x2
+#define m5_op3 0x37
+
+#include <gem5/asm/generic/m5ops.h>
+
+.macro m5op_func name, func
+        .section ".text";
+        .align  4;
+        .global \name;
+        .type   \name, #function;
+\name:
+        retl
+        .long   (m5_op) << 30 | (m5_op3) << 19 | (\func) << 7;
+        .size   \name, (.-\name)
+.endm
+
+#define M5OP(name, func) m5op_func name, func
+        M5OP_FOREACH
+#undef M5OP
diff --git a/util/m5/src/m5op_x86.S b/util/m5/src/m5op_x86.S
new file mode 100644 (file)
index 0000000..cd83a94
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2003-2006 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <gem5/asm/generic/m5ops.h>
+
+/*
+  Note: The ABI for pseudo ops using the M5OP_ADDR is defined in
+  src/arch/x86/pseudo_inst_abi.hh. If the ABI is changed below, it's likely
+  that the ABI in the arch directory will also need to be updated.
+
+  The ABI for the magic instruction-based pseudo ops is not affected by this.
+*/
+
+#if defined(M5OP_ADDR) && defined(M5OP_PIC)
+/* Use the memory mapped m5op interface */
+#define TWO_BYTE_OP(name, number)         \
+        .globl name;                      \
+        .func name;                       \
+name:                                     \
+        mov m5_mem@gotpcrel(%rip), %r11;  \
+        mov (%r11), %r11;                 \
+        mov $number, %rax;                \
+        shl $8, %rax;                     \
+        mov 0(%r11, %rax, 1), %rax;       \
+        ret;                              \
+        .endfunc;
+
+#elif defined(M5OP_ADDR) && !defined(M5OP_PIC)
+/* Use the memory mapped m5op interface */
+#define TWO_BYTE_OP(name, number)         \
+        .globl name;                      \
+        .func name;                       \
+name:                                     \
+        mov m5_mem, %r11;                 \
+        mov $number, %rax;                \
+        shl $8, %rax;                     \
+        mov 0(%r11, %rax, 1), %rax;       \
+        ret;                              \
+        .endfunc;
+
+#else
+/* Use the magic instruction based m5op interface. This does not work
+ * in virtualized environments.
+ */
+
+#define TWO_BYTE_OP(name, number)         \
+        .globl name;                      \
+        .func name;                       \
+name:                                     \
+        .byte 0x0F, 0x04;                 \
+        .word number;                     \
+        ret;                              \
+        .endfunc;
+
+#endif
+
+#define M5OP(name, number) TWO_BYTE_OP(name, number)
+        M5OP_FOREACH
+#undef M5OP