diff --git a/src/builtins/md1.c b/src/builtins/md1.c index a7497e9a..a3513062 100644 --- a/src/builtins/md1.c +++ b/src/builtins/md1.c @@ -129,6 +129,10 @@ B scan_ne(u64 p, B x, u64 ia) { #pragma GCC diagnostic pop #endif +#if !USE_VALGRIND +static u64 vg_rand(u64 x) { return x; } +#endif + B scan_c1(Md1D* d, B x) { B f = d->f; if (isAtm(x) || rnk(x)==0) thrM("`: Argument cannot have rank 0"); ur xr = rnk(x); @@ -163,7 +167,7 @@ B scan_c1(Md1D* d, B x) { B f = d->f; if (xe==el_i32) { i32* xp=i32any_ptr(x); u64* rp; B r=m_bitarrv(&rp,ia); bool c=x0; rp[0]=c; for (usz i=1; i= 0; i--) printBitDef(xv>>i, d>>i); printf("\n"); } + u64 vg_rand(u64 x) { // randomize undefined bits in x, and return a value with all bits defined + u64 d = vg_getDefined_u64(x); + if (~d == 0) return x; + return (x & d) | (vgRand64() & ~d); + } #endif // for gdb diff --git a/src/utils/valgrind.h b/src/utils/valgrind.h index dec351f4..956c377d 100644 --- a/src/utils/valgrind.h +++ b/src/utils/valgrind.h @@ -23,6 +23,11 @@ static u64 vg_def_u64(u64 x) { static u64 vg_withBit_u64(u64 r, i32 i, bool val) { return (r & ~(1ULL<