--- /dev/null
+#include <c_asm.h>
+
+#include <libgen.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "m5op.h"
+
+char *progname;
+
+void
+usage()
+{
+ char *name = basename(progname);
+ printf("usage: %s ivlb <interval>\n"
+ " %s ivle <interval>\n"
+ " %s initparam\n"
+ " %s sw99param\n"
+ " %s resetstats\n"
+ " %s exit\n", name, name, name, name, name, name);
+ exit(1);
+}
+
+int
+main(int argc, char *argv[])
+{
+ int start;
+ int interval;
+ unsigned long long param;
+
+ progname = argv[0];
+ if (argc < 2)
+ usage();
+
+ if (strncmp(argv[1], "ivlb", 5) == 0) {
+ if (argc != 3) usage();
+ ivlb((unsigned long)atoi(argv[2]));
+ } else if (strncmp(argv[1], "ivle", 5) == 0) {
+ if (argc != 3) usage();
+ ivle((unsigned long)atoi(argv[2]));
+ } else if (strncmp(argv[1], "exit", 5) == 0) {
+ if (argc != 2) usage();
+ m5exit();
+ } else if (strncmp(argv[1], "initparam", 10) == 0) {
+ if (argc != 2) usage();
+ printf("%d", initparam());
+ } else if (strncmp(argv[1], "sw99param", 10) == 0) {
+ if (argc != 2) usage();
+
+ param = initparam();
+ // run-time, rampup-time, rampdown-time, warmup-time, connections
+ printf("%d %d %d %d %d", (param >> 48) & 0xfff,
+ (param >> 36) & 0xfff, (param >> 24) & 0xfff,
+ (param >> 12) & 0xfff, (param >> 0) & 0xfff);
+ } else if (strncmp(argv[1], "resetstats", 11) == 0) {
+ if (argc != 2) usage();
+ resetstats();
+ }
+
+ return 0;
+}
--- /dev/null
+#include <machine/asm.h>
+#include <regdef.h>
+
+#define m5_op 0x01
+#define arm_func 0x00
+#define quiesce_func 0x01
+#define ivlb_func 0x10
+#define ivle_func 0x11
+#define m5exit_func 0x20
+#define initparam_func 0x30
+#define resetstats_func 0x40
+
+#define INST(op, ra, rb, func) \
+ .long (((op) << 26) | ((ra) << 21) | ((rb) << 16) | (func))
+
+#define ARM(reg) INST(m5_op, reg, 0, arm_func)
+#define QUIESCE() INST(m5_op, 0, 0, quiesce_func)
+#define IVLB(reg) INST(m5_op, reg, 0, ivlb_func)
+#define IVLE(reg) INST(m5_op, reg, 0, ivle_func)
+#define M5_EXIT() INST(m5_op, 0, 0, m5exit_func)
+#define INITPARAM(reg) INST(m5_op, reg, 0, initparam_func)
+#define RESETSTATS() INST(m5_op, 0, 0, resetstats_func)
+
+ .set noreorder
+
+ .align 4
+LEAF(arm)
+ ARM(16)
+ RET
+END(arm)
+
+ .align 4
+LEAF(quiesce)
+ QUIESCE()
+ RET
+END(quiesce)
+
+ .align 4
+LEAF(ivlb)
+ IVLB(16)
+ RET
+END(ivlb)
+
+ .align 4
+LEAF(ivle)
+ IVLE(16)
+ RET
+END(ivle)
+
+ .align 4
+LEAF(m5exit)
+ M5_EXIT()
+ RET
+END(m5exit)
+
+ .align 4
+LEAF(initparam)
+ INITPARAM(0)
+ RET
+END(initparam)
+
+ .align 4
+LEAF(resetstats)
+ RESETSTATS()
+ RET
+END(resetstats)
\ No newline at end of file