Make brute-force Mark Firsts store result in a register (always <64 elements)
This commit is contained in:
parent
8560ce0f4d
commit
62867f4533
@ -161,13 +161,14 @@ B memberOf_c1(B t, B x) {
|
|||||||
}
|
}
|
||||||
#define BRUTE(T) \
|
#define BRUTE(T) \
|
||||||
i##T* xp = xv; \
|
i##T* xp = xv; \
|
||||||
u64* rp; B r = m_bitarrv(&rp, n); bitp_set(rp, 0, 1); \
|
u64 rv = 1; \
|
||||||
for (usz i=1; i<n; i++) { \
|
for (usz i=1; i<n; i++) { \
|
||||||
bool c=1; i##T xi=xp[i]; \
|
bool c=1; i##T xi=xp[i]; \
|
||||||
for (usz j=0; j<i; j++) c &= xi!=xp[j]; \
|
PLAINLOOP for (usz j=0; j<i; j++) c &= xi!=xp[j]; \
|
||||||
bitp_set(rp, i, c); \
|
rv |= c<<i; \
|
||||||
} \
|
} \
|
||||||
decG(x); return r;
|
decG(x); u64* rp; B r = m_bitarrv(&rp, n); rp[0] = rv; \
|
||||||
|
return r;
|
||||||
#define LOOKUP(T) \
|
#define LOOKUP(T) \
|
||||||
usz tn = 1<<T; \
|
usz tn = 1<<T; \
|
||||||
u##T* xp = (u##T*)xv; \
|
u##T* xp = (u##T*)xv; \
|
||||||
@ -243,7 +244,7 @@ B count_c1(B t, B x) {
|
|||||||
i8* rp; B r = m_i8arrv(&rp, n); rp[0]=0; \
|
i8* rp; B r = m_i8arrv(&rp, n); rp[0]=0; \
|
||||||
for (usz i=1; i<n; i++) { \
|
for (usz i=1; i<n; i++) { \
|
||||||
usz c=0; i##T xi=xp[i]; \
|
usz c=0; i##T xi=xp[i]; \
|
||||||
for (usz j=0; j<i; j++) c += xi==xp[j]; \
|
PLAINLOOP for (usz j=0; j<i; j++) c += xi==xp[j]; \
|
||||||
rp[i] = c; \
|
rp[i] = c; \
|
||||||
} \
|
} \
|
||||||
decG(x); return r;
|
decG(x); return r;
|
||||||
@ -354,7 +355,7 @@ B indexOf_c1(B t, B x) {
|
|||||||
val -= dif; memset32(val, 0, dif); , \
|
val -= dif; memset32(val, 0, dif); , \
|
||||||
/*AUXCLEAR*/val[j] = 0;, /*AUXMOVE*/val[k] = val[j];)
|
/*AUXCLEAR*/val[j] = 0;, /*AUXMOVE*/val[k] = val[j];)
|
||||||
if (lw==5) {
|
if (lw==5) {
|
||||||
if (n<12) { BRUTE(32); }
|
if (n<16) { BRUTE(32); }
|
||||||
B r;
|
B r;
|
||||||
i32* rp; r = m_i32arrv(&rp, n);
|
i32* rp; r = m_i32arrv(&rp, n);
|
||||||
i32* xp = tyany_ptr(x);
|
i32* xp = tyany_ptr(x);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user