diff options
Add demo for threaded interpretation
1 files changed, 83 insertions, 0 deletions
| -rw-r--r-- | demo/threaded/switch.cpp | 83 |
diff --git a/demo/threaded/switch.cpp b/demo/threaded/switch.cpp new file mode 100644 index 0000000..09b96e3 --- /dev/null +++ b/demo/threaded/switch.cpp @@ -0,0 +1,83 @@ +#include <cstdio>
+#include <cstdint>
+
+void run_switch(uint8_t* code, int limit)
+{
+ int counts[] = { 0, 0, 0, 0, 0, 0, 0 };
+
+ int ops = 0;
+ int pc = 0;
+
+ while (ops < limit)
+ {
+ switch (code[pc]) {
+ case 0:
+ {
+ ++counts[0];
+ ++ops;
+ ++pc;
+ break;
+ }
+ case 1:
+ {
+ ++counts[1];
+ ++ops;
+ ++pc;
+ break;
+ }
+ case 2:
+ {
+ ++counts[2];
+ ++ops;
+ ++pc;
+ break;
+ }
+ case 3:
+ {
+ ++counts[3];
+ ++ops;
+ ++pc;
+ break;
+ }
+ case 4:
+ {
+ ++counts[4];
+ ++ops;
+ ++pc;
+ break;
+ }
+ case 5:
+ {
+ ++counts[5];
+ ++ops;
+ break;
+ }
+ case 6:
+ {
+ ++counts[6];
+ ++ops;
+ pc = 0;
+ break;
+ }
+ }
+ }
+ std::printf("add: %d\n", counts[0]);
+ std::printf("sub: %d\n", counts[1]);
+ std::printf("mul: %d\n", counts[2]);
+ std::printf("div: %d\n", counts[3]);
+ std::printf("print: %d\n", counts[4]);
+ std::printf("halt: %d\n", counts[5]);
+ std::printf("restart: %d\n", counts[6]);
+}
+
+int main()
+{
+ uint8_t program[] = {
+ 0, 0, 0, 0,
+ 1, 2, 1, 2,
+ 4, 3, 4, 3,
+ 6,
+ };
+ run_switch(program, 32 * 1000 * 1000);
+ return 0;
+}
|
