use bytecode in benchmark

This commit is contained in:
lyon1998 2022-03-14 12:34:02 +08:00
parent 9be5ac4b88
commit 34078825f8

View File

@ -16,7 +16,7 @@ static void for_loop_10000(benchmark::State& state) {
for (auto _ : state) { for (auto _ : state) {
PikaObj* pikaMain = newRootObj((char*)"pikaMain", New_PikaMain); PikaObj* pikaMain = newRootObj((char*)"pikaMain", New_PikaMain);
/* run */ /* run */
obj_run(pikaMain, (char *) pikaVM_run_enableByteCode(pikaMain, (char *)
"a = 0\n" "a = 0\n"
"for i in range(0, 10000):\n" "for i in range(0, 10000):\n"
" a = a + 1\n" " a = a + 1\n"
@ -30,7 +30,7 @@ static void while_loop_10000(benchmark::State& state) {
for (auto _ : state) { for (auto _ : state) {
PikaObj* pikaMain = newRootObj((char*)"pikaMain", New_PikaMain); PikaObj* pikaMain = newRootObj((char*)"pikaMain", New_PikaMain);
/* run */ /* run */
obj_run(pikaMain, (char *) pikaVM_run_enableByteCode(pikaMain, (char *)
"i = 0\n" "i = 0\n"
"while i < 10000:\n" "while i < 10000:\n"
" i = i + 1\n" " i = i + 1\n"
@ -56,16 +56,20 @@ static void prime_number_100(benchmark::State& state) {
" if is_prime:\n" " if is_prime:\n"
" num = num + i\n" " num = num + i\n"
"\n"); "\n");
ByteCodeFrame bytecode_frame;
byteCodeFrame_init(&bytecode_frame);
byteCodeFrame_appendFromAsm(&bytecode_frame, pikaAsm);
for (auto _ : state) { for (auto _ : state) {
PikaObj* pikaMain = newRootObj((char*)"pikaMain", New_PikaMain); PikaObj* pikaMain = newRootObj((char*)"pikaMain", New_PikaMain);
/* run */ /* run */
pikaVM_runAsm(pikaMain, pikaAsm); pikaVM_runByteCodeFrame(pikaMain, &bytecode_frame);
num = obj_getInt(pikaMain, (char*)"num"); num = obj_getInt(pikaMain, (char*)"num");
if (1060 != num) { if (1060 != num) {
printf("[error]: prime_number_100\r\n"); printf("[error]: prime_number_100\r\n");
} }
obj_deinit(pikaMain); obj_deinit(pikaMain);
} }
byteCodeFrame_deinit(&bytecode_frame);
args_deinit(buffs); args_deinit(buffs);
} }
BENCHMARK(prime_number_100)->Unit(benchmark::kMillisecond); BENCHMARK(prime_number_100)->Unit(benchmark::kMillisecond);