•_timed

This commit is contained in:
dzaima 2021-05-10 23:22:00 +03:00
parent dd3c420bf3
commit 54abc94cad
4 changed files with 23 additions and 5 deletions

View File

@ -275,7 +275,7 @@ B withFill(B x, B fill) { // consumes both
dec(x);
return r;
}
base:
base:;
B r = m_arr(fsizeof(FillArr,a,B,ia), t_fillarr);
arr_shCopy(r, x);
c(FillArr,r)->fill = fill;

View File

@ -126,12 +126,12 @@ char* format_pf(u8 u) {
}
enum PrimMd1 {
pm1_none,
pm1_tbl, pm1_each, pm1_fold, pm1_scan, pm1_const, pm1_swap, // md1.c
pm1_tbl, pm1_each, pm1_fold, pm1_scan, pm1_const, pm1_swap, pm1_timed, // md1.c
};
char* format_pm1(u8 u) {
switch(u) {
default: case pf_none: return"(unknown 1-modifier)";
case pm1_tbl:return""; case pm1_each:return"¨"; case pm1_fold:return"´"; case pm1_scan:return"`"; case pm1_const:return"˙"; case pm1_swap:return"˜";
case pm1_tbl:return""; case pm1_each:return"¨"; case pm1_fold:return"´"; case pm1_scan:return"`"; case pm1_const:return"˙"; case pm1_swap:return"˜"; case pm1_timed:return"•_timed";
}
}
enum PrimMd2 {

View File

@ -188,14 +188,30 @@ B swap_c1(B d , B x) { return c2(c(Md1D,d)->f, inc(x), x); }
B swap_c2(B d, B w, B x) { return c2(c(Md1D,d)->f, x , w); }
B timed_c2(B d, B w, B x) { B f = c(Md1D,d)->f;
i64 am = o2i64(w);
for (i64 i = 0; i < am; i++) inc(x);
dec(x);
u64 sns = nsTime();
for (i64 i = 0; i < am; i++) dec(c1(f, x));
u64 ens = nsTime();
return m_f64((ens-sns)/(1e9*am));
}
B timed_c1(B d, B x) { B f = c(Md1D,d)->f;
u64 sns = nsTime();
dec(c1(f, x));
u64 ens = nsTime();
return m_f64((ens-sns)/1e9);
}
#define ba(NAME) bi_##NAME = mm_alloc(sizeof(Md1), t_md1BI, ftag(MD1_TAG)); c(Md1,bi_##NAME)->c2 = NAME##_c2; c(Md1,bi_##NAME)->c1 = NAME##_c1 ; c(Md1,bi_##NAME)->extra=pm1_##NAME; gc_add(bi_##NAME);
#define bd(NAME) bi_##NAME = mm_alloc(sizeof(Md1), t_md1BI, ftag(MD1_TAG)); c(Md1,bi_##NAME)->c2 = NAME##_c2; c(Md1,bi_##NAME)->c1 = c1_invalid; c(Md1,bi_##NAME)->extra=pm1_##NAME; gc_add(bi_##NAME);
#define bm(NAME) bi_##NAME = mm_alloc(sizeof(Md1), t_md1BI, ftag(MD1_TAG)); c(Md1,bi_##NAME)->c2 = c2_invalid;c(Md1,bi_##NAME)->c1 = NAME##_c1 ; c(Md1,bi_##NAME)->extra=pm1_##NAME; gc_add(bi_##NAME);
void print_md1BI(B x) { printf("%s", format_pm1(c(Md1,x)->extra)); }
B bi_tbl, bi_each, bi_fold, bi_scan, bi_const, bi_swap;
static inline void md1_init() { ba(tbl) ba(each) ba(fold) ba(scan) ba(const) ba(swap)
B bi_tbl, bi_each, bi_fold, bi_scan, bi_const, bi_swap, bi_timed;
static inline void md1_init() { ba(tbl) ba(each) ba(fold) ba(scan) ba(const) ba(swap) ba(timed)
ti[t_md1BI].print = print_md1BI;
}

View File

@ -168,6 +168,7 @@ BI_FNS0(F);
static inline void sysfn_init() { BI_FNS1(F) }
#undef F
B bi_timed;
B sys_c1(B t, B x) {
assert(isArr(x));
usz i = 0;
@ -183,6 +184,7 @@ B sys_c1(B t, B x) {
else if (eqStr(c, U"primind")) r.a[i] = inc(bi_primInd);
else if (eqStr(c, U"bqn")) r.a[i] = inc(bi_bqn);
else if (eqStr(c, U"cmp")) r.a[i] = inc(bi_cmp);
else if (eqStr(c, U"timed")) r.a[i] = inc(bi_timed);
else { dec(x); thrM("Unknown system function"); }
}
return harr_fcd(r, x);