Exploiting parallelism opportunities in non-parallel architectures to improve NLFSR software implementations