X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=FFT.mc;h=5969315c8a174d1cadc4b8e49e60bee63f813f1c;hb=7a5f3f2a9974d0fa0f3c888944d9120b22f254eb;hp=626b0dc51508f41d2eff5804bed7b8ac8f2537a7;hpb=a980bbf75167001020f0d2ddb4a4563bd71a2e3d;p=matthijs%2Fprojects%2Fmontium-fft.git diff --git a/FFT.mc b/FFT.mc index 626b0dc..5969315 100644 --- a/FFT.mc +++ b/FFT.mc @@ -52,7 +52,7 @@ INLINE void write_output_regular(struct mems m, struct bf_out res, bool second_h add_offset(m.output_b_re, 2); add_offset(m.output_b_im, 2); - if (second_half) { + if (!second_half) { write_mem(m.output_a_re, res.a_re); write_mem(m.output_a_im, res.a_im); write_mem(m.output_b_re, res.b_re); @@ -187,8 +187,8 @@ INLINE void do_half_regular_stage(struct mems m, bool stage_odd, bool second_hal /* Now, do half a single stage. That means N_t / 4 cycles. Since we do 2 * cycles on every iteration, plus one before and after the loop, - * we will loop N_t / 8 - 1 times. */ - init_loop(LC2, (PARAM_N_t / 8) - 1); + * we will loop N_t / 8 - 1 times. We add an extra - 1 because this is a do while loop... */ + init_loop(LC2, (PARAM_N_t / 8) - 1 - 1); do { /* Write outputs of previous cycle */ write_output_regular(m, out, second_half); @@ -254,8 +254,8 @@ void run() { struct mems m; /* We need to do n_t regular stages. Since we do two stages each - * iteration, we'll do n_t / 2 iterations. */ - init_loop(LC1, (PARAM_n_t / 2)); + * iteration, we'll do n_t / 2 iterations (and a -1 because we check after looping) */ + init_loop(LC1, (PARAM_n_t / 2) - 1); do { m = init_mem_mapping(EVEN_STAGE); init_input_addresses_regular(m, EVEN_STAGE);