From 0932b770a7152e59695ec62bb7e39d58a5e7bb44 Mon Sep 17 00:00:00 2001 From: Dimitar Trendafilov Date: Sun, 30 Oct 2022 11:33:02 +0200 Subject: Add demo for threaded interpretation --- demo/threaded/switch.cpp | 83 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 demo/threaded/switch.cpp (limited to 'demo/threaded/switch.cpp') 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 +#include + +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; +} -- cgit v1.3.1-23-gd82d