run asm in benchmark

This commit is contained in:
lyon 2022-02-21 16:16:18 +08:00
parent d865979199
commit 3832c509ee

View File

@ -3,9 +3,12 @@
extern "C" { extern "C" {
#include "PikaMain.h" #include "PikaMain.h"
#include "PikaParser.h"
#include "PikaStdLib_MemChecker.h" #include "PikaStdLib_MemChecker.h"
#include "PikaVM.h"
#include "dataArgs.h" #include "dataArgs.h"
#include "dataMemory.h" #include "dataMemory.h"
#include "dataStrs.h"
#include "pikaScript.h" #include "pikaScript.h"
} }
@ -39,10 +42,8 @@ BENCHMARK(while_loop_10000)->Unit(benchmark::kMillisecond);
static void prime_number_100(benchmark::State& state) { static void prime_number_100(benchmark::State& state) {
int num = 0; int num = 0;
for (auto _ : state) { Args* buffs = New_strBuff();
PikaObj* pikaMain = newRootObj((char*)"pikaMain", New_PikaMain); char* pikaAsm = Parser_multiLineToAsm(buffs, (char*)
/* run */
obj_run(pikaMain, (char *)
"num = 0\n" "num = 0\n"
"i = 2\n" "i = 2\n"
"for i in range(2,100):\n" "for i in range(2,100):\n"
@ -55,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");
for (auto _ : state) {
PikaObj* pikaMain = newRootObj((char*)"pikaMain", New_PikaMain);
/* run */
pikaVM_runAsm(pikaMain, pikaAsm);
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);
} }
args_deinit(buffs);
} }
BENCHMARK(prime_number_100)->Unit(benchmark::kMillisecond); BENCHMARK(prime_number_100)->Unit(benchmark::kMillisecond);
static void prime_number_100_c(benchmark::State& state) { static void prime_number_100_c(benchmark::State& state) {
int num = 0; int num = 0;
for (auto _ : state) { for (auto _ : state) {