broken out into multiple loops for better simdization