void test_01() { assert(lower_bits(6) == 0x3F); assert(lower_bits(17) == 0x1FFFF); assert(lower_bits(32) == 0xFFFFFFFF); assert(lower_bits(1) == 0x1); printf("Success!\n"); }
static void isaac64_update(isaac64_ctx *_ctx){ uint64_t *m; uint64_t *r; uint64_t a; uint64_t b; uint64_t x; uint64_t y; int i; m=_ctx->m; r=_ctx->r; a=_ctx->a; b=_ctx->b+(++_ctx->c); for(i=0;i<ISAAC64_SZ/2;i++){ x=m[i]; a=~(a^a<<21)+m[i+ISAAC64_SZ/2]; m[i]=y=m[lower_bits(x)]+a+b; r[i]=b=m[upper_bits(y)]+x; x=m[++i]; a=(a^a>>5)+m[i+ISAAC64_SZ/2]; m[i]=y=m[lower_bits(x)]+a+b; r[i]=b=m[upper_bits(y)]+x; x=m[++i]; a=(a^a<<12)+m[i+ISAAC64_SZ/2]; m[i]=y=m[lower_bits(x)]+a+b; r[i]=b=m[upper_bits(y)]+x; x=m[++i]; a=(a^a>>33)+m[i+ISAAC64_SZ/2]; m[i]=y=m[lower_bits(x)]+a+b; r[i]=b=m[upper_bits(y)]+x; } for(i=ISAAC64_SZ/2;i<ISAAC64_SZ;i++){ x=m[i]; a=~(a^a<<21)+m[i-ISAAC64_SZ/2]; m[i]=y=m[lower_bits(x)]+a+b; r[i]=b=m[upper_bits(y)]+x; x=m[++i]; a=(a^a>>5)+m[i-ISAAC64_SZ/2]; m[i]=y=m[lower_bits(x)]+a+b; r[i]=b=m[upper_bits(y)]+x; x=m[++i]; a=(a^a<<12)+m[i-ISAAC64_SZ/2]; m[i]=y=m[lower_bits(x)]+a+b; r[i]=b=m[upper_bits(y)]+x; x=m[++i]; a=(a^a>>33)+m[i-ISAAC64_SZ/2]; m[i]=y=m[lower_bits(x)]+a+b; r[i]=b=m[upper_bits(y)]+x; } _ctx->b=b; _ctx->a=a; _ctx->n=ISAAC64_SZ; }