#pragma once
#include "risc0/zkp/core/fp.h"
#include "risc0/zkp/core/fp4.h"
namespace risc0 {
inline constexpr uint32_t bitReverse(uint32_t x) {
x = (((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1));
x = (((x & 0xcccccccc) >> 2) | ((x & 0x33333333) << 2));
x = (((x & 0xf0f0f0f0) >> 4) | ((x & 0x0f0f0f0f) << 4));
x = (((x & 0xff00ff00) >> 8) | ((x & 0x00ff00ff) << 8));
return ((x >> 16) | (x << 16));
}
void interpolateNTT(Fp* io, size_t size);
void interpolateNTT(Fp4* io, size_t size);
void evaluateNTT(Fp* io, size_t size, size_t expandBits = 0);
void evaluateNTT(Fp4* io, size_t size, size_t expandBits = 0);
void bitReverse(Fp* io, size_t size);
void bitReverse(Fp4* io, size_t size);
void expand(Fp* out, const Fp* in, size_t sizeIn, size_t expandBits);
void expand(Fp4* out, const Fp4* in, size_t sizeIn, size_t expandBits);
}