///|
/// The specialised butterflies of the prime factor transform.
///
/// This file is generated by `tools/gen_java_kernels.py`, do not edit
/// it by hand.

///|
/// The butterfly of the radix 2 stage of the prime factor
/// transform, for the twist 1.
///
/// This is the small transform of the original, `Pfacc.pfa2`,
/// with the twist 1.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r2_mu1(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 2
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 2)
  let mut p1 = m * (1 * kfac % 2)
  let mut i = 0
  while i < m {
    let t1r = re[p0] - re[p1]
    let t1i = im[p0] - im[p1]
    re[p0] = re[p0] + re[p1]
    im[p0] = im[p0] + im[p1]
    re[p1] = t1r
    im[p1] = t1i
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 3 stage of the prime factor
/// transform, for the twist 1.
///
/// This is the small transform of the original, `Pfacc.pfa3`,
/// with the twist 1.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r3_mu1(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 3
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 3)
  let mut p1 = m * (1 * kfac % 3)
  let mut p2 = m * (2 * kfac % 3)
  let c1 = 0.8660254037844385
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p2]
    let t1i = im[p1] + im[p2]
    let y1r = re[p0] - 0.5 * t1r
    let y1i = im[p0] - 0.5 * t1i
    let y2r = c1 * (re[p1] - re[p2])
    let y2i = c1 * (im[p1] - im[p2])
    re[p0] = re[p0] + t1r
    im[p0] = im[p0] + t1i
    re[p1] = y1r - y2i
    im[p1] = y1i + y2r
    re[p2] = y1r + y2i
    im[p2] = y1i - y2r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 3 stage of the prime factor
/// transform, for the twist 2.
///
/// This is the small transform of the original, `Pfacc.pfa3`,
/// with the twist 2.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r3_mu2(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 3
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 3)
  let mut p1 = m * (1 * kfac % 3)
  let mut p2 = m * (2 * kfac % 3)
  let c1 = -0.8660254037844385
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p2]
    let t1i = im[p1] + im[p2]
    let y1r = re[p0] - 0.5 * t1r
    let y1i = im[p0] - 0.5 * t1i
    let y2r = c1 * (re[p1] - re[p2])
    let y2i = c1 * (im[p1] - im[p2])
    re[p0] = re[p0] + t1r
    im[p0] = im[p0] + t1i
    re[p1] = y1r - y2i
    im[p1] = y1i + y2r
    re[p2] = y1r + y2i
    im[p2] = y1i - y2r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 4 stage of the prime factor
/// transform, for the twist 1.
///
/// This is the small transform of the original, `Pfacc.pfa4`,
/// with the twist 1.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r4_mu1(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 4
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 4)
  let mut p1 = m * (1 * kfac % 4)
  let mut p2 = m * (2 * kfac % 4)
  let mut p3 = m * (3 * kfac % 4)
  let c1 = 0.9999999999999998
  let mut i = 0
  while i < m {
    let t1r = re[p0] + re[p2]
    let t1i = im[p0] + im[p2]
    let t2r = re[p1] + re[p3]
    let t2i = im[p1] + im[p3]
    let y1r = re[p0] - re[p2]
    let y1i = im[p0] - im[p2]
    let y3r = c1 * (re[p1] - re[p3])
    let y3i = c1 * (im[p1] - im[p3])
    re[p0] = t1r + t2r
    im[p0] = t1i + t2i
    re[p1] = y1r - y3i
    im[p1] = y1i + y3r
    re[p2] = t1r - t2r
    im[p2] = t1i - t2i
    re[p3] = y1r + y3i
    im[p3] = y1i - y3r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 4 stage of the prime factor
/// transform, for the twist 3.
///
/// This is the small transform of the original, `Pfacc.pfa4`,
/// with the twist 3.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r4_mu3(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 4
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 4)
  let mut p1 = m * (1 * kfac % 4)
  let mut p2 = m * (2 * kfac % 4)
  let mut p3 = m * (3 * kfac % 4)
  let c1 = -0.9999999999999998
  let mut i = 0
  while i < m {
    let t1r = re[p0] + re[p2]
    let t1i = im[p0] + im[p2]
    let t2r = re[p1] + re[p3]
    let t2i = im[p1] + im[p3]
    let y1r = re[p0] - re[p2]
    let y1i = im[p0] - im[p2]
    let y3r = c1 * (re[p1] - re[p3])
    let y3i = c1 * (im[p1] - im[p3])
    re[p0] = t1r + t2r
    im[p0] = t1i + t2i
    re[p1] = y1r - y3i
    im[p1] = y1i + y3r
    re[p2] = t1r - t2r
    im[p2] = t1i - t2i
    re[p3] = y1r + y3i
    im[p3] = y1i - y3r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 5 stage of the prime factor
/// transform, for the twist 1.
///
/// This is the small transform of the original, `Pfacc.pfa5`,
/// with the twist 1.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r5_mu1(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 5
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 5)
  let mut p1 = m * (1 * kfac % 5)
  let mut p2 = m * (2 * kfac % 5)
  let mut p3 = m * (3 * kfac % 5)
  let mut p4 = m * (4 * kfac % 5)
  let c1 = 0.5590169943749473
  let c2 = 0.9510565162951535
  let c3 = 0.5877852522924731
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p4]
    let t1i = im[p1] + im[p4]
    let t2r = re[p2] + re[p3]
    let t2i = im[p2] + im[p3]
    let t3r = re[p1] - re[p4]
    let t3i = im[p1] - im[p4]
    let t4r = re[p2] - re[p3]
    let t4i = im[p2] - im[p3]
    let t5r = t1r + t2r
    let t5i = t1i + t2i
    let t6r = c1 * (t1r - t2r)
    let t6i = c1 * (t1i - t2i)
    let t7r = re[p0] - 0.25 * t5r
    let t7i = im[p0] - 0.25 * t5i
    let y1r = t7r + t6r
    let y1i = t7i + t6i
    let y2r = t7r - t6r
    let y2i = t7i - t6i
    let y3r = c3 * t3r - c2 * t4r
    let y3i = c3 * t3i - c2 * t4i
    let y4r = c2 * t3r + c3 * t4r
    let y4i = c2 * t3i + c3 * t4i
    re[p0] = re[p0] + t5r
    im[p0] = im[p0] + t5i
    re[p1] = y1r - y4i
    im[p1] = y1i + y4r
    re[p2] = y2r - y3i
    im[p2] = y2i + y3r
    re[p3] = y2r + y3i
    im[p3] = y2i - y3r
    re[p4] = y1r + y4i
    im[p4] = y1i - y4r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 5 stage of the prime factor
/// transform, for the twist 2.
///
/// This is the small transform of the original, `Pfacc.pfa5`,
/// with the twist 2.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r5_mu2(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 5
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 5)
  let mut p1 = m * (1 * kfac % 5)
  let mut p2 = m * (2 * kfac % 5)
  let mut p3 = m * (3 * kfac % 5)
  let mut p4 = m * (4 * kfac % 5)
  let c1 = -0.5590169943749472
  let c2 = 0.5877852522924732
  let c3 = -0.9510565162951535
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p4]
    let t1i = im[p1] + im[p4]
    let t2r = re[p2] + re[p3]
    let t2i = im[p2] + im[p3]
    let t3r = re[p1] - re[p4]
    let t3i = im[p1] - im[p4]
    let t4r = re[p2] - re[p3]
    let t4i = im[p2] - im[p3]
    let t5r = t1r + t2r
    let t5i = t1i + t2i
    let t6r = c1 * (t1r - t2r)
    let t6i = c1 * (t1i - t2i)
    let t7r = re[p0] - 0.25 * t5r
    let t7i = im[p0] - 0.25 * t5i
    let y1r = t7r + t6r
    let y1i = t7i + t6i
    let y2r = t7r - t6r
    let y2i = t7i - t6i
    let y3r = c3 * t3r - c2 * t4r
    let y3i = c3 * t3i - c2 * t4i
    let y4r = c2 * t3r + c3 * t4r
    let y4i = c2 * t3i + c3 * t4i
    re[p0] = re[p0] + t5r
    im[p0] = im[p0] + t5i
    re[p1] = y1r - y4i
    im[p1] = y1i + y4r
    re[p2] = y2r - y3i
    im[p2] = y2i + y3r
    re[p3] = y2r + y3i
    im[p3] = y2i - y3r
    re[p4] = y1r + y4i
    im[p4] = y1i - y4r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 5 stage of the prime factor
/// transform, for the twist 3.
///
/// This is the small transform of the original, `Pfacc.pfa5`,
/// with the twist 3.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r5_mu3(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 5
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 5)
  let mut p1 = m * (1 * kfac % 5)
  let mut p2 = m * (2 * kfac % 5)
  let mut p3 = m * (3 * kfac % 5)
  let mut p4 = m * (4 * kfac % 5)
  let c1 = -0.5590169943749473
  let c2 = -0.587785252292473
  let c3 = 0.9510565162951535
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p4]
    let t1i = im[p1] + im[p4]
    let t2r = re[p2] + re[p3]
    let t2i = im[p2] + im[p3]
    let t3r = re[p1] - re[p4]
    let t3i = im[p1] - im[p4]
    let t4r = re[p2] - re[p3]
    let t4i = im[p2] - im[p3]
    let t5r = t1r + t2r
    let t5i = t1i + t2i
    let t6r = c1 * (t1r - t2r)
    let t6i = c1 * (t1i - t2i)
    let t7r = re[p0] - 0.25 * t5r
    let t7i = im[p0] - 0.25 * t5i
    let y1r = t7r + t6r
    let y1i = t7i + t6i
    let y2r = t7r - t6r
    let y2i = t7i - t6i
    let y3r = c3 * t3r - c2 * t4r
    let y3i = c3 * t3i - c2 * t4i
    let y4r = c2 * t3r + c3 * t4r
    let y4i = c2 * t3i + c3 * t4i
    re[p0] = re[p0] + t5r
    im[p0] = im[p0] + t5i
    re[p1] = y1r - y4i
    im[p1] = y1i + y4r
    re[p2] = y2r - y3i
    im[p2] = y2i + y3r
    re[p3] = y2r + y3i
    im[p3] = y2i - y3r
    re[p4] = y1r + y4i
    im[p4] = y1i - y4r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 5 stage of the prime factor
/// transform, for the twist 4.
///
/// This is the small transform of the original, `Pfacc.pfa5`,
/// with the twist 4.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r5_mu4(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 5
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 5)
  let mut p1 = m * (1 * kfac % 5)
  let mut p2 = m * (2 * kfac % 5)
  let mut p3 = m * (3 * kfac % 5)
  let mut p4 = m * (4 * kfac % 5)
  let c1 = 0.5590169943749472
  let c2 = -0.9510565162951535
  let c3 = -0.5877852522924729
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p4]
    let t1i = im[p1] + im[p4]
    let t2r = re[p2] + re[p3]
    let t2i = im[p2] + im[p3]
    let t3r = re[p1] - re[p4]
    let t3i = im[p1] - im[p4]
    let t4r = re[p2] - re[p3]
    let t4i = im[p2] - im[p3]
    let t5r = t1r + t2r
    let t5i = t1i + t2i
    let t6r = c1 * (t1r - t2r)
    let t6i = c1 * (t1i - t2i)
    let t7r = re[p0] - 0.25 * t5r
    let t7i = im[p0] - 0.25 * t5i
    let y1r = t7r + t6r
    let y1i = t7i + t6i
    let y2r = t7r - t6r
    let y2i = t7i - t6i
    let y3r = c3 * t3r - c2 * t4r
    let y3i = c3 * t3i - c2 * t4i
    let y4r = c2 * t3r + c3 * t4r
    let y4i = c2 * t3i + c3 * t4i
    re[p0] = re[p0] + t5r
    im[p0] = im[p0] + t5i
    re[p1] = y1r - y4i
    im[p1] = y1i + y4r
    re[p2] = y2r - y3i
    im[p2] = y2i + y3r
    re[p3] = y2r + y3i
    im[p3] = y2i - y3r
    re[p4] = y1r + y4i
    im[p4] = y1i - y4r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 7 stage of the prime factor
/// transform, for the twist 1.
///
/// This is the small transform of the original, `Pfacc.pfa7`,
/// with the twist 1.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r7_mu1(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 7
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 7)
  let mut p1 = m * (1 * kfac % 7)
  let mut p2 = m * (2 * kfac % 7)
  let mut p3 = m * (3 * kfac % 7)
  let mut p4 = m * (4 * kfac % 7)
  let mut p5 = m * (5 * kfac % 7)
  let mut p6 = m * (6 * kfac % 7)
  let c1 = 0.623489801858733
  let c2 = -0.22252093395631367
  let c3 = -0.9009688679024188
  let c4 = 0.7818314824680297
  let c5 = 0.974927912181824
  let c6 = 0.4338837391175582
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p6]
    let t1i = im[p1] + im[p6]
    let t2r = re[p2] + re[p5]
    let t2i = im[p2] + im[p5]
    let t3r = re[p3] + re[p4]
    let t3i = im[p3] + im[p4]
    let t4r = re[p1] - re[p6]
    let t4i = im[p1] - im[p6]
    let t5r = re[p2] - re[p5]
    let t5i = im[p2] - im[p5]
    let t6r = re[p3] - re[p4]
    let t6i = im[p3] - im[p4]
    let t7r = re[p0] - 0.5 * t3r
    let t7i = im[p0] - 0.5 * t3i
    let t8r = t1r - t3r
    let t8i = t1i - t3i
    let t9r = t2r - t3r
    let t9i = t2i - t3i
    let y1r = t7r + c1 * t8r + c2 * t9r
    let y1i = t7i + c1 * t8i + c2 * t9i
    let y2r = t7r + c2 * t8r + c3 * t9r
    let y2i = t7i + c2 * t8i + c3 * t9i
    let y3r = t7r + c3 * t8r + c1 * t9r
    let y3i = t7i + c3 * t8i + c1 * t9i
    let y4r = c6 * t4r - c4 * t5r + c5 * t6r
    let y4i = c6 * t4i - c4 * t5i + c5 * t6i
    let y5r = c5 * t4r - c6 * t5r - c4 * t6r
    let y5i = c5 * t4i - c6 * t5i - c4 * t6i
    let y6r = c4 * t4r + c5 * t5r + c6 * t6r
    let y6i = c4 * t4i + c5 * t5i + c6 * t6i
    re[p0] = re[p0] + t1r + t2r + t3r
    im[p0] = im[p0] + t1i + t2i + t3i
    re[p1] = y1r - y6i
    im[p1] = y1i + y6r
    re[p2] = y2r - y5i
    im[p2] = y2i + y5r
    re[p3] = y3r - y4i
    im[p3] = y3i + y4r
    re[p4] = y3r + y4i
    im[p4] = y3i - y4r
    re[p5] = y2r + y5i
    im[p5] = y2i - y5r
    re[p6] = y1r + y6i
    im[p6] = y1i - y6r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 7 stage of the prime factor
/// transform, for the twist 2.
///
/// This is the small transform of the original, `Pfacc.pfa7`,
/// with the twist 2.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r7_mu2(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 7
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 7)
  let mut p1 = m * (1 * kfac % 7)
  let mut p2 = m * (2 * kfac % 7)
  let mut p3 = m * (3 * kfac % 7)
  let mut p4 = m * (4 * kfac % 7)
  let mut p5 = m * (5 * kfac % 7)
  let mut p6 = m * (6 * kfac % 7)
  let c1 = -0.2225209339563139
  let c2 = -0.9009688679024196
  let c3 = 0.6234898018587336
  let c4 = 0.974927912181824
  let c5 = -0.433883739117557
  let c6 = -0.7818314824680299
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p6]
    let t1i = im[p1] + im[p6]
    let t2r = re[p2] + re[p5]
    let t2i = im[p2] + im[p5]
    let t3r = re[p3] + re[p4]
    let t3i = im[p3] + im[p4]
    let t4r = re[p1] - re[p6]
    let t4i = im[p1] - im[p6]
    let t5r = re[p2] - re[p5]
    let t5i = im[p2] - im[p5]
    let t6r = re[p3] - re[p4]
    let t6i = im[p3] - im[p4]
    let t7r = re[p0] - 0.5 * t3r
    let t7i = im[p0] - 0.5 * t3i
    let t8r = t1r - t3r
    let t8i = t1i - t3i
    let t9r = t2r - t3r
    let t9i = t2i - t3i
    let y1r = t7r + c1 * t8r + c2 * t9r
    let y1i = t7i + c1 * t8i + c2 * t9i
    let y2r = t7r + c2 * t8r + c3 * t9r
    let y2i = t7i + c2 * t8i + c3 * t9i
    let y3r = t7r + c3 * t8r + c1 * t9r
    let y3i = t7i + c3 * t8i + c1 * t9i
    let y4r = c6 * t4r - c4 * t5r + c5 * t6r
    let y4i = c6 * t4i - c4 * t5i + c5 * t6i
    let y5r = c5 * t4r - c6 * t5r - c4 * t6r
    let y5i = c5 * t4i - c6 * t5i - c4 * t6i
    let y6r = c4 * t4r + c5 * t5r + c6 * t6r
    let y6i = c4 * t4i + c5 * t5i + c6 * t6i
    re[p0] = re[p0] + t1r + t2r + t3r
    im[p0] = im[p0] + t1i + t2i + t3i
    re[p1] = y1r - y6i
    im[p1] = y1i + y6r
    re[p2] = y2r - y5i
    im[p2] = y2i + y5r
    re[p3] = y3r - y4i
    im[p3] = y3i + y4r
    re[p4] = y3r + y4i
    im[p4] = y3i - y4r
    re[p5] = y2r + y5i
    im[p5] = y2i - y5r
    re[p6] = y1r + y6i
    im[p6] = y1i - y6r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 7 stage of the prime factor
/// transform, for the twist 3.
///
/// This is the small transform of the original, `Pfacc.pfa7`,
/// with the twist 3.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r7_mu3(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 7
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 7)
  let mut p1 = m * (1 * kfac % 7)
  let mut p2 = m * (2 * kfac % 7)
  let mut p3 = m * (3 * kfac % 7)
  let mut p4 = m * (4 * kfac % 7)
  let mut p5 = m * (5 * kfac % 7)
  let mut p6 = m * (6 * kfac % 7)
  let c1 = -0.9009688679024188
  let c2 = 0.6234898018587326
  let c3 = -0.22252093395631445
  let c4 = 0.4338837391175579
  let c5 = -0.7818314824680308
  let c6 = 0.9749279121818237
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p6]
    let t1i = im[p1] + im[p6]
    let t2r = re[p2] + re[p5]
    let t2i = im[p2] + im[p5]
    let t3r = re[p3] + re[p4]
    let t3i = im[p3] + im[p4]
    let t4r = re[p1] - re[p6]
    let t4i = im[p1] - im[p6]
    let t5r = re[p2] - re[p5]
    let t5i = im[p2] - im[p5]
    let t6r = re[p3] - re[p4]
    let t6i = im[p3] - im[p4]
    let t7r = re[p0] - 0.5 * t3r
    let t7i = im[p0] - 0.5 * t3i
    let t8r = t1r - t3r
    let t8i = t1i - t3i
    let t9r = t2r - t3r
    let t9i = t2i - t3i
    let y1r = t7r + c1 * t8r + c2 * t9r
    let y1i = t7i + c1 * t8i + c2 * t9i
    let y2r = t7r + c2 * t8r + c3 * t9r
    let y2i = t7i + c2 * t8i + c3 * t9i
    let y3r = t7r + c3 * t8r + c1 * t9r
    let y3i = t7i + c3 * t8i + c1 * t9i
    let y4r = c6 * t4r - c4 * t5r + c5 * t6r
    let y4i = c6 * t4i - c4 * t5i + c5 * t6i
    let y5r = c5 * t4r - c6 * t5r - c4 * t6r
    let y5i = c5 * t4i - c6 * t5i - c4 * t6i
    let y6r = c4 * t4r + c5 * t5r + c6 * t6r
    let y6i = c4 * t4i + c5 * t5i + c6 * t6i
    re[p0] = re[p0] + t1r + t2r + t3r
    im[p0] = im[p0] + t1i + t2i + t3i
    re[p1] = y1r - y6i
    im[p1] = y1i + y6r
    re[p2] = y2r - y5i
    im[p2] = y2i + y5r
    re[p3] = y3r - y4i
    im[p3] = y3i + y4r
    re[p4] = y3r + y4i
    im[p4] = y3i - y4r
    re[p5] = y2r + y5i
    im[p5] = y2i - y5r
    re[p6] = y1r + y6i
    im[p6] = y1i - y6r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 7 stage of the prime factor
/// transform, for the twist 4.
///
/// This is the small transform of the original, `Pfacc.pfa7`,
/// with the twist 4.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r7_mu4(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 7
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 7)
  let mut p1 = m * (1 * kfac % 7)
  let mut p2 = m * (2 * kfac % 7)
  let mut p3 = m * (3 * kfac % 7)
  let mut p4 = m * (4 * kfac % 7)
  let mut p5 = m * (5 * kfac % 7)
  let mut p6 = m * (6 * kfac % 7)
  let c1 = -0.9009688679024195
  let c2 = 0.6234898018587354
  let c3 = -0.22252093395631467
  let c4 = -0.433883739117557
  let c5 = 0.7818314824680284
  let c6 = -0.9749279121818236
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p6]
    let t1i = im[p1] + im[p6]
    let t2r = re[p2] + re[p5]
    let t2i = im[p2] + im[p5]
    let t3r = re[p3] + re[p4]
    let t3i = im[p3] + im[p4]
    let t4r = re[p1] - re[p6]
    let t4i = im[p1] - im[p6]
    let t5r = re[p2] - re[p5]
    let t5i = im[p2] - im[p5]
    let t6r = re[p3] - re[p4]
    let t6i = im[p3] - im[p4]
    let t7r = re[p0] - 0.5 * t3r
    let t7i = im[p0] - 0.5 * t3i
    let t8r = t1r - t3r
    let t8i = t1i - t3i
    let t9r = t2r - t3r
    let t9i = t2i - t3i
    let y1r = t7r + c1 * t8r + c2 * t9r
    let y1i = t7i + c1 * t8i + c2 * t9i
    let y2r = t7r + c2 * t8r + c3 * t9r
    let y2i = t7i + c2 * t8i + c3 * t9i
    let y3r = t7r + c3 * t8r + c1 * t9r
    let y3i = t7i + c3 * t8i + c1 * t9i
    let y4r = c6 * t4r - c4 * t5r + c5 * t6r
    let y4i = c6 * t4i - c4 * t5i + c5 * t6i
    let y5r = c5 * t4r - c6 * t5r - c4 * t6r
    let y5i = c5 * t4i - c6 * t5i - c4 * t6i
    let y6r = c4 * t4r + c5 * t5r + c6 * t6r
    let y6i = c4 * t4i + c5 * t5i + c6 * t6i
    re[p0] = re[p0] + t1r + t2r + t3r
    im[p0] = im[p0] + t1i + t2i + t3i
    re[p1] = y1r - y6i
    im[p1] = y1i + y6r
    re[p2] = y2r - y5i
    im[p2] = y2i + y5r
    re[p3] = y3r - y4i
    im[p3] = y3i + y4r
    re[p4] = y3r + y4i
    im[p4] = y3i - y4r
    re[p5] = y2r + y5i
    im[p5] = y2i - y5r
    re[p6] = y1r + y6i
    im[p6] = y1i - y6r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 7 stage of the prime factor
/// transform, for the twist 5.
///
/// This is the small transform of the original, `Pfacc.pfa7`,
/// with the twist 5.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r7_mu5(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 7
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 7)
  let mut p1 = m * (1 * kfac % 7)
  let mut p2 = m * (2 * kfac % 7)
  let mut p3 = m * (3 * kfac % 7)
  let mut p4 = m * (4 * kfac % 7)
  let mut p5 = m * (5 * kfac % 7)
  let mut p6 = m * (6 * kfac % 7)
  let c1 = -0.2225209339563166
  let c2 = -0.9009688679024178
  let c3 = 0.6234898018587349
  let c4 = -0.9749279121818233
  let c5 = 0.4338837391175592
  let c6 = 0.7818314824680295
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p6]
    let t1i = im[p1] + im[p6]
    let t2r = re[p2] + re[p5]
    let t2i = im[p2] + im[p5]
    let t3r = re[p3] + re[p4]
    let t3i = im[p3] + im[p4]
    let t4r = re[p1] - re[p6]
    let t4i = im[p1] - im[p6]
    let t5r = re[p2] - re[p5]
    let t5i = im[p2] - im[p5]
    let t6r = re[p3] - re[p4]
    let t6i = im[p3] - im[p4]
    let t7r = re[p0] - 0.5 * t3r
    let t7i = im[p0] - 0.5 * t3i
    let t8r = t1r - t3r
    let t8i = t1i - t3i
    let t9r = t2r - t3r
    let t9i = t2i - t3i
    let y1r = t7r + c1 * t8r + c2 * t9r
    let y1i = t7i + c1 * t8i + c2 * t9i
    let y2r = t7r + c2 * t8r + c3 * t9r
    let y2i = t7i + c2 * t8i + c3 * t9i
    let y3r = t7r + c3 * t8r + c1 * t9r
    let y3i = t7i + c3 * t8i + c1 * t9i
    let y4r = c6 * t4r - c4 * t5r + c5 * t6r
    let y4i = c6 * t4i - c4 * t5i + c5 * t6i
    let y5r = c5 * t4r - c6 * t5r - c4 * t6r
    let y5i = c5 * t4i - c6 * t5i - c4 * t6i
    let y6r = c4 * t4r + c5 * t5r + c6 * t6r
    let y6i = c4 * t4i + c5 * t5i + c6 * t6i
    re[p0] = re[p0] + t1r + t2r + t3r
    im[p0] = im[p0] + t1i + t2i + t3i
    re[p1] = y1r - y6i
    im[p1] = y1i + y6r
    re[p2] = y2r - y5i
    im[p2] = y2i + y5r
    re[p3] = y3r - y4i
    im[p3] = y3i + y4r
    re[p4] = y3r + y4i
    im[p4] = y3i - y4r
    re[p5] = y2r + y5i
    im[p5] = y2i - y5r
    re[p6] = y1r + y6i
    im[p6] = y1i - y6r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 7 stage of the prime factor
/// transform, for the twist 6.
///
/// This is the small transform of the original, `Pfacc.pfa7`,
/// with the twist 6.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r7_mu6(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 7
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 7)
  let mut p1 = m * (1 * kfac % 7)
  let mut p2 = m * (2 * kfac % 7)
  let mut p3 = m * (3 * kfac % 7)
  let mut p4 = m * (4 * kfac % 7)
  let mut p5 = m * (5 * kfac % 7)
  let mut p6 = m * (6 * kfac % 7)
  let c1 = 0.623489801858734
  let c2 = -0.222520933956316
  let c3 = -0.9009688679024184
  let c4 = -0.7818314824680295
  let c5 = -0.9749279121818233
  let c6 = -0.4338837391175583
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p6]
    let t1i = im[p1] + im[p6]
    let t2r = re[p2] + re[p5]
    let t2i = im[p2] + im[p5]
    let t3r = re[p3] + re[p4]
    let t3i = im[p3] + im[p4]
    let t4r = re[p1] - re[p6]
    let t4i = im[p1] - im[p6]
    let t5r = re[p2] - re[p5]
    let t5i = im[p2] - im[p5]
    let t6r = re[p3] - re[p4]
    let t6i = im[p3] - im[p4]
    let t7r = re[p0] - 0.5 * t3r
    let t7i = im[p0] - 0.5 * t3i
    let t8r = t1r - t3r
    let t8i = t1i - t3i
    let t9r = t2r - t3r
    let t9i = t2i - t3i
    let y1r = t7r + c1 * t8r + c2 * t9r
    let y1i = t7i + c1 * t8i + c2 * t9i
    let y2r = t7r + c2 * t8r + c3 * t9r
    let y2i = t7i + c2 * t8i + c3 * t9i
    let y3r = t7r + c3 * t8r + c1 * t9r
    let y3i = t7i + c3 * t8i + c1 * t9i
    let y4r = c6 * t4r - c4 * t5r + c5 * t6r
    let y4i = c6 * t4i - c4 * t5i + c5 * t6i
    let y5r = c5 * t4r - c6 * t5r - c4 * t6r
    let y5i = c5 * t4i - c6 * t5i - c4 * t6i
    let y6r = c4 * t4r + c5 * t5r + c6 * t6r
    let y6i = c4 * t4i + c5 * t5i + c6 * t6i
    re[p0] = re[p0] + t1r + t2r + t3r
    im[p0] = im[p0] + t1i + t2i + t3i
    re[p1] = y1r - y6i
    im[p1] = y1i + y6r
    re[p2] = y2r - y5i
    im[p2] = y2i + y5r
    re[p3] = y3r - y4i
    im[p3] = y3i + y4r
    re[p4] = y3r + y4i
    im[p4] = y3i - y4r
    re[p5] = y2r + y5i
    im[p5] = y2i - y5r
    re[p6] = y1r + y6i
    im[p6] = y1i - y6r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 8 stage of the prime factor
/// transform, for the twist 1.
///
/// This is the small transform of the original, `Pfacc.pfa8`,
/// with the twist 1.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r8_mu1(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 8
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 8)
  let mut p1 = m * (1 * kfac % 8)
  let mut p2 = m * (2 * kfac % 8)
  let mut p3 = m * (3 * kfac % 8)
  let mut p4 = m * (4 * kfac % 8)
  let mut p5 = m * (5 * kfac % 8)
  let mut p6 = m * (6 * kfac % 8)
  let mut p7 = m * (7 * kfac % 8)
  let c1 = 0.9999999999999998
  let c2 = 0.7071067811865474
  let c3 = 0.7071067811865472
  let mut i = 0
  while i < m {
    let t1r = re[p0] + re[p4]
    let t1i = im[p0] + im[p4]
    let t2r = re[p0] - re[p4]
    let t2i = im[p0] - im[p4]
    let t3r = re[p1] + re[p5]
    let t3i = im[p1] + im[p5]
    let t4r = re[p1] - re[p5]
    let t4i = im[p1] - im[p5]
    let t5r = re[p2] + re[p6]
    let t5i = im[p2] + im[p6]
    let t6r = c1 * (re[p2] - re[p6])
    let t6i = c1 * (im[p2] - im[p6])
    let t7r = re[p3] + re[p7]
    let t7i = im[p3] + im[p7]
    let t8r = re[p3] - re[p7]
    let t8i = im[p3] - im[p7]
    let t9r = t1r + t5r
    let t9i = t1i + t5i
    let t10r = t3r + t7r
    let t10i = t3i + t7i
    let t11r = c2 * (t4r - t8r)
    let t11i = c2 * (t4i - t8i)
    let t12r = c3 * (t4r + t8r)
    let t12i = c3 * (t4i + t8i)
    let y1r = t2r + t11r
    let y1i = t2i + t11i
    let y2r = t1r - t5r
    let y2i = t1i - t5i
    let y3r = t2r - t11r
    let y3i = t2i - t11i
    let y5r = t12r - t6r
    let y5i = t12i - t6i
    let y6r = c1 * (t3r - t7r)
    let y6i = c1 * (t3i - t7i)
    let y7r = t12r + t6r
    let y7i = t12i + t6i
    re[p0] = t9r + t10r
    im[p0] = t9i + t10i
    re[p1] = y1r - y7i
    im[p1] = y1i + y7r
    re[p2] = y2r - y6i
    im[p2] = y2i + y6r
    re[p3] = y3r - y5i
    im[p3] = y3i + y5r
    re[p4] = t9r - t10r
    im[p4] = t9i - t10i
    re[p5] = y3r + y5i
    im[p5] = y3i - y5r
    re[p6] = y2r + y6i
    im[p6] = y2i - y6r
    re[p7] = y1r + y7i
    im[p7] = y1i - y7r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 8 stage of the prime factor
/// transform, for the twist 3.
///
/// This is the small transform of the original, `Pfacc.pfa8`,
/// with the twist 3.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r8_mu3(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 8
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 8)
  let mut p1 = m * (1 * kfac % 8)
  let mut p2 = m * (2 * kfac % 8)
  let mut p3 = m * (3 * kfac % 8)
  let mut p4 = m * (4 * kfac % 8)
  let mut p5 = m * (5 * kfac % 8)
  let mut p6 = m * (6 * kfac % 8)
  let mut p7 = m * (7 * kfac % 8)
  let c1 = -0.9999999999999998
  let c2 = -0.7071067811865481
  let c3 = 0.707106781186548
  let mut i = 0
  while i < m {
    let t1r = re[p0] + re[p4]
    let t1i = im[p0] + im[p4]
    let t2r = re[p0] - re[p4]
    let t2i = im[p0] - im[p4]
    let t3r = re[p1] + re[p5]
    let t3i = im[p1] + im[p5]
    let t4r = re[p1] - re[p5]
    let t4i = im[p1] - im[p5]
    let t5r = re[p2] + re[p6]
    let t5i = im[p2] + im[p6]
    let t6r = c1 * (re[p2] - re[p6])
    let t6i = c1 * (im[p2] - im[p6])
    let t7r = re[p3] + re[p7]
    let t7i = im[p3] + im[p7]
    let t8r = re[p3] - re[p7]
    let t8i = im[p3] - im[p7]
    let t9r = t1r + t5r
    let t9i = t1i + t5i
    let t10r = t3r + t7r
    let t10i = t3i + t7i
    let t11r = c2 * (t4r - t8r)
    let t11i = c2 * (t4i - t8i)
    let t12r = c3 * (t4r + t8r)
    let t12i = c3 * (t4i + t8i)
    let y1r = t2r + t11r
    let y1i = t2i + t11i
    let y2r = t1r - t5r
    let y2i = t1i - t5i
    let y3r = t2r - t11r
    let y3i = t2i - t11i
    let y5r = t12r - t6r
    let y5i = t12i - t6i
    let y6r = c1 * (t3r - t7r)
    let y6i = c1 * (t3i - t7i)
    let y7r = t12r + t6r
    let y7i = t12i + t6i
    re[p0] = t9r + t10r
    im[p0] = t9i + t10i
    re[p1] = y1r - y7i
    im[p1] = y1i + y7r
    re[p2] = y2r - y6i
    im[p2] = y2i + y6r
    re[p3] = y3r - y5i
    im[p3] = y3i + y5r
    re[p4] = t9r - t10r
    im[p4] = t9i - t10i
    re[p5] = y3r + y5i
    im[p5] = y3i - y5r
    re[p6] = y2r + y6i
    im[p6] = y2i - y6r
    re[p7] = y1r + y7i
    im[p7] = y1i - y7r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 8 stage of the prime factor
/// transform, for the twist 5.
///
/// This is the small transform of the original, `Pfacc.pfa8`,
/// with the twist 5.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r8_mu5(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 8
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 8)
  let mut p1 = m * (1 * kfac % 8)
  let mut p2 = m * (2 * kfac % 8)
  let mut p3 = m * (3 * kfac % 8)
  let mut p4 = m * (4 * kfac % 8)
  let mut p5 = m * (5 * kfac % 8)
  let mut p6 = m * (6 * kfac % 8)
  let mut p7 = m * (7 * kfac % 8)
  let c1 = 0.9999999999999998
  let c2 = -0.7071067811865475
  let c3 = -0.7071067811865474
  let mut i = 0
  while i < m {
    let t1r = re[p0] + re[p4]
    let t1i = im[p0] + im[p4]
    let t2r = re[p0] - re[p4]
    let t2i = im[p0] - im[p4]
    let t3r = re[p1] + re[p5]
    let t3i = im[p1] + im[p5]
    let t4r = re[p1] - re[p5]
    let t4i = im[p1] - im[p5]
    let t5r = re[p2] + re[p6]
    let t5i = im[p2] + im[p6]
    let t6r = c1 * (re[p2] - re[p6])
    let t6i = c1 * (im[p2] - im[p6])
    let t7r = re[p3] + re[p7]
    let t7i = im[p3] + im[p7]
    let t8r = re[p3] - re[p7]
    let t8i = im[p3] - im[p7]
    let t9r = t1r + t5r
    let t9i = t1i + t5i
    let t10r = t3r + t7r
    let t10i = t3i + t7i
    let t11r = c2 * (t4r - t8r)
    let t11i = c2 * (t4i - t8i)
    let t12r = c3 * (t4r + t8r)
    let t12i = c3 * (t4i + t8i)
    let y1r = t2r + t11r
    let y1i = t2i + t11i
    let y2r = t1r - t5r
    let y2i = t1i - t5i
    let y3r = t2r - t11r
    let y3i = t2i - t11i
    let y5r = t12r - t6r
    let y5i = t12i - t6i
    let y6r = c1 * (t3r - t7r)
    let y6i = c1 * (t3i - t7i)
    let y7r = t12r + t6r
    let y7i = t12i + t6i
    re[p0] = t9r + t10r
    im[p0] = t9i + t10i
    re[p1] = y1r - y7i
    im[p1] = y1i + y7r
    re[p2] = y2r - y6i
    im[p2] = y2i + y6r
    re[p3] = y3r - y5i
    im[p3] = y3i + y5r
    re[p4] = t9r - t10r
    im[p4] = t9i - t10i
    re[p5] = y3r + y5i
    im[p5] = y3i - y5r
    re[p6] = y2r + y6i
    im[p6] = y2i - y6r
    re[p7] = y1r + y7i
    im[p7] = y1i - y7r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 8 stage of the prime factor
/// transform, for the twist 7.
///
/// This is the small transform of the original, `Pfacc.pfa8`,
/// with the twist 7.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r8_mu7(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 8
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 8)
  let mut p1 = m * (1 * kfac % 8)
  let mut p2 = m * (2 * kfac % 8)
  let mut p3 = m * (3 * kfac % 8)
  let mut p4 = m * (4 * kfac % 8)
  let mut p5 = m * (5 * kfac % 8)
  let mut p6 = m * (6 * kfac % 8)
  let mut p7 = m * (7 * kfac % 8)
  let c1 = -0.9999999999999998
  let c2 = 0.7071067811865449
  let c3 = -0.7071067811865448
  let mut i = 0
  while i < m {
    let t1r = re[p0] + re[p4]
    let t1i = im[p0] + im[p4]
    let t2r = re[p0] - re[p4]
    let t2i = im[p0] - im[p4]
    let t3r = re[p1] + re[p5]
    let t3i = im[p1] + im[p5]
    let t4r = re[p1] - re[p5]
    let t4i = im[p1] - im[p5]
    let t5r = re[p2] + re[p6]
    let t5i = im[p2] + im[p6]
    let t6r = c1 * (re[p2] - re[p6])
    let t6i = c1 * (im[p2] - im[p6])
    let t7r = re[p3] + re[p7]
    let t7i = im[p3] + im[p7]
    let t8r = re[p3] - re[p7]
    let t8i = im[p3] - im[p7]
    let t9r = t1r + t5r
    let t9i = t1i + t5i
    let t10r = t3r + t7r
    let t10i = t3i + t7i
    let t11r = c2 * (t4r - t8r)
    let t11i = c2 * (t4i - t8i)
    let t12r = c3 * (t4r + t8r)
    let t12i = c3 * (t4i + t8i)
    let y1r = t2r + t11r
    let y1i = t2i + t11i
    let y2r = t1r - t5r
    let y2i = t1i - t5i
    let y3r = t2r - t11r
    let y3i = t2i - t11i
    let y5r = t12r - t6r
    let y5i = t12i - t6i
    let y6r = c1 * (t3r - t7r)
    let y6i = c1 * (t3i - t7i)
    let y7r = t12r + t6r
    let y7i = t12i + t6i
    re[p0] = t9r + t10r
    im[p0] = t9i + t10i
    re[p1] = y1r - y7i
    im[p1] = y1i + y7r
    re[p2] = y2r - y6i
    im[p2] = y2i + y6r
    re[p3] = y3r - y5i
    im[p3] = y3i + y5r
    re[p4] = t9r - t10r
    im[p4] = t9i - t10i
    re[p5] = y3r + y5i
    im[p5] = y3i - y5r
    re[p6] = y2r + y6i
    im[p6] = y2i - y6r
    re[p7] = y1r + y7i
    im[p7] = y1i - y7r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 9 stage of the prime factor
/// transform, for the twist 1.
///
/// This is the small transform of the original, `Pfacc.pfa9`,
/// with the twist 1.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r9_mu1(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 9
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 9)
  let mut p1 = m * (1 * kfac % 9)
  let mut p2 = m * (2 * kfac % 9)
  let mut p3 = m * (3 * kfac % 9)
  let mut p4 = m * (4 * kfac % 9)
  let mut p5 = m * (5 * kfac % 9)
  let mut p6 = m * (6 * kfac % 9)
  let mut p7 = m * (7 * kfac % 9)
  let mut p8 = m * (8 * kfac % 9)
  let c1 = 0.866025403784439
  let c2 = 0.7660444431189781
  let c3 = 0.6427876096865394
  let c4 = 0.17364817766693047
  let c5 = 0.984807753012208
  let c6 = 0.6634139481689387
  let c7 = 0.5566703992264197
  let c8 = 0.15038373318043546
  let c9 = 0.8528685319524436
  let mut i = 0
  while i < m {
    let t1r = re[p3] + re[p6]
    let t1i = im[p3] + im[p6]
    let t2r = re[p0] - 0.5 * t1r
    let t2i = im[p0] - 0.5 * t1i
    let t3r = c1 * (re[p3] - re[p6])
    let t3i = c1 * (im[p3] - im[p6])
    let t4r = re[p0] + t1r
    let t4i = im[p0] + t1i
    let t5r = re[p4] + re[p7]
    let t5i = im[p4] + im[p7]
    let t6r = re[p1] - 0.5 * t5r
    let t6i = im[p1] - 0.5 * t5i
    let t7r = re[p4] - re[p7]
    let t7i = im[p4] - im[p7]
    let t8r = re[p1] + t5r
    let t8i = im[p1] + t5i
    let t9r = re[p2] + re[p5]
    let t9i = im[p2] + im[p5]
    let t10r = re[p8] - 0.5 * t9r
    let t10i = im[p8] - 0.5 * t9i
    let t11r = re[p2] - re[p5]
    let t11i = im[p2] - im[p5]
    let t12r = re[p8] + t9r
    let t12i = im[p8] + t9i
    let t13r = t8r + t12r
    let t13i = t8i + t12i
    let t14r = t6r + t10r
    let t14i = t6i + t10i
    let t15r = t6r - t10r
    let t15i = t6i - t10i
    let t16r = t7r + t11r
    let t16i = t7i + t11i
    let t17r = t7r - t11r
    let t17i = t7i - t11i
    let t18r = c2 * t14r - c7 * t17r
    let t18i = c2 * t14i - c7 * t17i
    let t19r = c4 * t14r + c9 * t17r
    let t19i = c4 * t14i + c9 * t17i
    let t20r = c3 * t15r + c6 * t16r
    let t20i = c3 * t15i + c6 * t16i
    let t21r = c5 * t15r - c8 * t16r
    let t21i = c5 * t15i - c8 * t16i
    let t22r = t18r + t19r
    let t22i = t18i + t19i
    let t23r = t20r - t21r
    let t23i = t20i - t21i
    let y1r = t2r + t18r
    let y1i = t2i + t18i
    let y2r = t2r + t19r
    let y2i = t2i + t19i
    let y3r = t4r - 0.5 * t13r
    let y3i = t4i - 0.5 * t13i
    let y4r = t2r - t22r
    let y4i = t2i - t22i
    let y5r = t3r - t23r
    let y5i = t3i - t23i
    let y6r = c1 * (t8r - t12r)
    let y6i = c1 * (t8i - t12i)
    let y7r = t21r - t3r
    let y7i = t21i - t3i
    let y8r = t3r + t20r
    let y8i = t3i + t20i
    re[p0] = t4r + t13r
    im[p0] = t4i + t13i
    re[p1] = y1r - y8i
    im[p1] = y1i + y8r
    re[p2] = y2r - y7i
    im[p2] = y2i + y7r
    re[p3] = y3r - y6i
    im[p3] = y3i + y6r
    re[p4] = y4r - y5i
    im[p4] = y4i + y5r
    re[p5] = y4r + y5i
    im[p5] = y4i - y5r
    re[p6] = y3r + y6i
    im[p6] = y3i - y6r
    re[p7] = y2r + y7i
    im[p7] = y2i - y7r
    re[p8] = y1r + y8i
    im[p8] = y1i - y8r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 9 stage of the prime factor
/// transform, for the twist 2.
///
/// This is the small transform of the original, `Pfacc.pfa9`,
/// with the twist 2.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r9_mu2(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 9
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 9)
  let mut p1 = m * (1 * kfac % 9)
  let mut p2 = m * (2 * kfac % 9)
  let mut p3 = m * (3 * kfac % 9)
  let mut p4 = m * (4 * kfac % 9)
  let mut p5 = m * (5 * kfac % 9)
  let mut p6 = m * (6 * kfac % 9)
  let mut p7 = m * (7 * kfac % 9)
  let mut p8 = m * (8 * kfac % 9)
  let c1 = -0.8660254037844385
  let c2 = 0.17364817766693086
  let c3 = 0.9848077530122084
  let c4 = -0.9396926207859083
  let c5 = 0.3420201433256691
  let c6 = -0.1503837331804357
  let c7 = -0.8528685319524433
  let c8 = 0.8137976813493735
  let c9 = -0.29619813272602413
  let mut i = 0
  while i < m {
    let t1r = re[p3] + re[p6]
    let t1i = im[p3] + im[p6]
    let t2r = re[p0] - 0.5 * t1r
    let t2i = im[p0] - 0.5 * t1i
    let t3r = c1 * (re[p3] - re[p6])
    let t3i = c1 * (im[p3] - im[p6])
    let t4r = re[p0] + t1r
    let t4i = im[p0] + t1i
    let t5r = re[p4] + re[p7]
    let t5i = im[p4] + im[p7]
    let t6r = re[p1] - 0.5 * t5r
    let t6i = im[p1] - 0.5 * t5i
    let t7r = re[p4] - re[p7]
    let t7i = im[p4] - im[p7]
    let t8r = re[p1] + t5r
    let t8i = im[p1] + t5i
    let t9r = re[p2] + re[p5]
    let t9i = im[p2] + im[p5]
    let t10r = re[p8] - 0.5 * t9r
    let t10i = im[p8] - 0.5 * t9i
    let t11r = re[p2] - re[p5]
    let t11i = im[p2] - im[p5]
    let t12r = re[p8] + t9r
    let t12i = im[p8] + t9i
    let t13r = t8r + t12r
    let t13i = t8i + t12i
    let t14r = t6r + t10r
    let t14i = t6i + t10i
    let t15r = t6r - t10r
    let t15i = t6i - t10i
    let t16r = t7r + t11r
    let t16i = t7i + t11i
    let t17r = t7r - t11r
    let t17i = t7i - t11i
    let t18r = c2 * t14r - c7 * t17r
    let t18i = c2 * t14i - c7 * t17i
    let t19r = c4 * t14r + c9 * t17r
    let t19i = c4 * t14i + c9 * t17i
    let t20r = c3 * t15r + c6 * t16r
    let t20i = c3 * t15i + c6 * t16i
    let t21r = c5 * t15r - c8 * t16r
    let t21i = c5 * t15i - c8 * t16i
    let t22r = t18r + t19r
    let t22i = t18i + t19i
    let t23r = t20r - t21r
    let t23i = t20i - t21i
    let y1r = t2r + t18r
    let y1i = t2i + t18i
    let y2r = t2r + t19r
    let y2i = t2i + t19i
    let y3r = t4r - 0.5 * t13r
    let y3i = t4i - 0.5 * t13i
    let y4r = t2r - t22r
    let y4i = t2i - t22i
    let y5r = t3r - t23r
    let y5i = t3i - t23i
    let y6r = c1 * (t8r - t12r)
    let y6i = c1 * (t8i - t12i)
    let y7r = t21r - t3r
    let y7i = t21i - t3i
    let y8r = t3r + t20r
    let y8i = t3i + t20i
    re[p0] = t4r + t13r
    im[p0] = t4i + t13i
    re[p1] = y1r - y8i
    im[p1] = y1i + y8r
    re[p2] = y2r - y7i
    im[p2] = y2i + y7r
    re[p3] = y3r - y6i
    im[p3] = y3i + y6r
    re[p4] = y4r - y5i
    im[p4] = y4i + y5r
    re[p5] = y4r + y5i
    im[p5] = y4i - y5r
    re[p6] = y3r + y6i
    im[p6] = y3i - y6r
    re[p7] = y2r + y7i
    im[p7] = y2i - y7r
    re[p8] = y1r + y8i
    im[p8] = y1i - y8r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 9 stage of the prime factor
/// transform, for the twist 4.
///
/// This is the small transform of the original, `Pfacc.pfa9`,
/// with the twist 4.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r9_mu4(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 9
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 9)
  let mut p1 = m * (1 * kfac % 9)
  let mut p2 = m * (2 * kfac % 9)
  let mut p3 = m * (3 * kfac % 9)
  let mut p4 = m * (4 * kfac % 9)
  let mut p5 = m * (5 * kfac % 9)
  let mut p6 = m * (6 * kfac % 9)
  let mut p7 = m * (7 * kfac % 9)
  let mut p8 = m * (8 * kfac % 9)
  let c1 = 0.8660254037844394
  let c2 = -0.9396926207859084
  let c3 = 0.34202014332566893
  let c4 = 0.7660444431189776
  let c5 = -0.6427876096865398
  let c6 = -0.8137976813493745
  let c7 = 0.29619813272602424
  let c8 = 0.6634139481689385
  let c9 = -0.5566703992264203
  let mut i = 0
  while i < m {
    let t1r = re[p3] + re[p6]
    let t1i = im[p3] + im[p6]
    let t2r = re[p0] - 0.5 * t1r
    let t2i = im[p0] - 0.5 * t1i
    let t3r = c1 * (re[p3] - re[p6])
    let t3i = c1 * (im[p3] - im[p6])
    let t4r = re[p0] + t1r
    let t4i = im[p0] + t1i
    let t5r = re[p4] + re[p7]
    let t5i = im[p4] + im[p7]
    let t6r = re[p1] - 0.5 * t5r
    let t6i = im[p1] - 0.5 * t5i
    let t7r = re[p4] - re[p7]
    let t7i = im[p4] - im[p7]
    let t8r = re[p1] + t5r
    let t8i = im[p1] + t5i
    let t9r = re[p2] + re[p5]
    let t9i = im[p2] + im[p5]
    let t10r = re[p8] - 0.5 * t9r
    let t10i = im[p8] - 0.5 * t9i
    let t11r = re[p2] - re[p5]
    let t11i = im[p2] - im[p5]
    let t12r = re[p8] + t9r
    let t12i = im[p8] + t9i
    let t13r = t8r + t12r
    let t13i = t8i + t12i
    let t14r = t6r + t10r
    let t14i = t6i + t10i
    let t15r = t6r - t10r
    let t15i = t6i - t10i
    let t16r = t7r + t11r
    let t16i = t7i + t11i
    let t17r = t7r - t11r
    let t17i = t7i - t11i
    let t18r = c2 * t14r - c7 * t17r
    let t18i = c2 * t14i - c7 * t17i
    let t19r = c4 * t14r + c9 * t17r
    let t19i = c4 * t14i + c9 * t17i
    let t20r = c3 * t15r + c6 * t16r
    let t20i = c3 * t15i + c6 * t16i
    let t21r = c5 * t15r - c8 * t16r
    let t21i = c5 * t15i - c8 * t16i
    let t22r = t18r + t19r
    let t22i = t18i + t19i
    let t23r = t20r - t21r
    let t23i = t20i - t21i
    let y1r = t2r + t18r
    let y1i = t2i + t18i
    let y2r = t2r + t19r
    let y2i = t2i + t19i
    let y3r = t4r - 0.5 * t13r
    let y3i = t4i - 0.5 * t13i
    let y4r = t2r - t22r
    let y4i = t2i - t22i
    let y5r = t3r - t23r
    let y5i = t3i - t23i
    let y6r = c1 * (t8r - t12r)
    let y6i = c1 * (t8i - t12i)
    let y7r = t21r - t3r
    let y7i = t21i - t3i
    let y8r = t3r + t20r
    let y8i = t3i + t20i
    re[p0] = t4r + t13r
    im[p0] = t4i + t13i
    re[p1] = y1r - y8i
    im[p1] = y1i + y8r
    re[p2] = y2r - y7i
    im[p2] = y2i + y7r
    re[p3] = y3r - y6i
    im[p3] = y3i + y6r
    re[p4] = y4r - y5i
    im[p4] = y4i + y5r
    re[p5] = y4r + y5i
    im[p5] = y4i - y5r
    re[p6] = y3r + y6i
    im[p6] = y3i - y6r
    re[p7] = y2r + y7i
    im[p7] = y2i - y7r
    re[p8] = y1r + y8i
    im[p8] = y1i - y8r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 9 stage of the prime factor
/// transform, for the twist 5.
///
/// This is the small transform of the original, `Pfacc.pfa9`,
/// with the twist 5.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r9_mu5(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 9
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 9)
  let mut p1 = m * (1 * kfac % 9)
  let mut p2 = m * (2 * kfac % 9)
  let mut p3 = m * (3 * kfac % 9)
  let mut p4 = m * (4 * kfac % 9)
  let mut p5 = m * (5 * kfac % 9)
  let mut p6 = m * (6 * kfac % 9)
  let mut p7 = m * (7 * kfac % 9)
  let mut p8 = m * (8 * kfac % 9)
  let c1 = -0.8660254037844388
  let c2 = -0.9396926207859077
  let c3 = -0.3420201433256689
  let c4 = 0.766044443118977
  let c5 = 0.6427876096865384
  let c6 = 0.8137976813493732
  let c7 = 0.296198132726024
  let c8 = -0.6634139481689376
  let c9 = -0.5566703992264186
  let mut i = 0
  while i < m {
    let t1r = re[p3] + re[p6]
    let t1i = im[p3] + im[p6]
    let t2r = re[p0] - 0.5 * t1r
    let t2i = im[p0] - 0.5 * t1i
    let t3r = c1 * (re[p3] - re[p6])
    let t3i = c1 * (im[p3] - im[p6])
    let t4r = re[p0] + t1r
    let t4i = im[p0] + t1i
    let t5r = re[p4] + re[p7]
    let t5i = im[p4] + im[p7]
    let t6r = re[p1] - 0.5 * t5r
    let t6i = im[p1] - 0.5 * t5i
    let t7r = re[p4] - re[p7]
    let t7i = im[p4] - im[p7]
    let t8r = re[p1] + t5r
    let t8i = im[p1] + t5i
    let t9r = re[p2] + re[p5]
    let t9i = im[p2] + im[p5]
    let t10r = re[p8] - 0.5 * t9r
    let t10i = im[p8] - 0.5 * t9i
    let t11r = re[p2] - re[p5]
    let t11i = im[p2] - im[p5]
    let t12r = re[p8] + t9r
    let t12i = im[p8] + t9i
    let t13r = t8r + t12r
    let t13i = t8i + t12i
    let t14r = t6r + t10r
    let t14i = t6i + t10i
    let t15r = t6r - t10r
    let t15i = t6i - t10i
    let t16r = t7r + t11r
    let t16i = t7i + t11i
    let t17r = t7r - t11r
    let t17i = t7i - t11i
    let t18r = c2 * t14r - c7 * t17r
    let t18i = c2 * t14i - c7 * t17i
    let t19r = c4 * t14r + c9 * t17r
    let t19i = c4 * t14i + c9 * t17i
    let t20r = c3 * t15r + c6 * t16r
    let t20i = c3 * t15i + c6 * t16i
    let t21r = c5 * t15r - c8 * t16r
    let t21i = c5 * t15i - c8 * t16i
    let t22r = t18r + t19r
    let t22i = t18i + t19i
    let t23r = t20r - t21r
    let t23i = t20i - t21i
    let y1r = t2r + t18r
    let y1i = t2i + t18i
    let y2r = t2r + t19r
    let y2i = t2i + t19i
    let y3r = t4r - 0.5 * t13r
    let y3i = t4i - 0.5 * t13i
    let y4r = t2r - t22r
    let y4i = t2i - t22i
    let y5r = t3r - t23r
    let y5i = t3i - t23i
    let y6r = c1 * (t8r - t12r)
    let y6i = c1 * (t8i - t12i)
    let y7r = t21r - t3r
    let y7i = t21i - t3i
    let y8r = t3r + t20r
    let y8i = t3i + t20i
    re[p0] = t4r + t13r
    im[p0] = t4i + t13i
    re[p1] = y1r - y8i
    im[p1] = y1i + y8r
    re[p2] = y2r - y7i
    im[p2] = y2i + y7r
    re[p3] = y3r - y6i
    im[p3] = y3i + y6r
    re[p4] = y4r - y5i
    im[p4] = y4i + y5r
    re[p5] = y4r + y5i
    im[p5] = y4i - y5r
    re[p6] = y3r + y6i
    im[p6] = y3i - y6r
    re[p7] = y2r + y7i
    im[p7] = y2i - y7r
    re[p8] = y1r + y8i
    im[p8] = y1i - y8r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 9 stage of the prime factor
/// transform, for the twist 7.
///
/// This is the small transform of the original, `Pfacc.pfa9`,
/// with the twist 7.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r9_mu7(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 9
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 9)
  let mut p1 = m * (1 * kfac % 9)
  let mut p2 = m * (2 * kfac % 9)
  let mut p3 = m * (3 * kfac % 9)
  let mut p4 = m * (4 * kfac % 9)
  let mut p5 = m * (5 * kfac % 9)
  let mut p6 = m * (6 * kfac % 9)
  let mut p7 = m * (7 * kfac % 9)
  let mut p8 = m * (8 * kfac % 9)
  let c1 = 0.8660254037844388
  let c2 = 0.17364817766693066
  let c3 = -0.9848077530122069
  let c4 = -0.9396926207859089
  let c5 = -0.3420201433256668
  let c6 = 0.1503837331804356
  let c7 = -0.8528685319524424
  let c8 = -0.8137976813493742
  let c9 = -0.29619813272602225
  let mut i = 0
  while i < m {
    let t1r = re[p3] + re[p6]
    let t1i = im[p3] + im[p6]
    let t2r = re[p0] - 0.5 * t1r
    let t2i = im[p0] - 0.5 * t1i
    let t3r = c1 * (re[p3] - re[p6])
    let t3i = c1 * (im[p3] - im[p6])
    let t4r = re[p0] + t1r
    let t4i = im[p0] + t1i
    let t5r = re[p4] + re[p7]
    let t5i = im[p4] + im[p7]
    let t6r = re[p1] - 0.5 * t5r
    let t6i = im[p1] - 0.5 * t5i
    let t7r = re[p4] - re[p7]
    let t7i = im[p4] - im[p7]
    let t8r = re[p1] + t5r
    let t8i = im[p1] + t5i
    let t9r = re[p2] + re[p5]
    let t9i = im[p2] + im[p5]
    let t10r = re[p8] - 0.5 * t9r
    let t10i = im[p8] - 0.5 * t9i
    let t11r = re[p2] - re[p5]
    let t11i = im[p2] - im[p5]
    let t12r = re[p8] + t9r
    let t12i = im[p8] + t9i
    let t13r = t8r + t12r
    let t13i = t8i + t12i
    let t14r = t6r + t10r
    let t14i = t6i + t10i
    let t15r = t6r - t10r
    let t15i = t6i - t10i
    let t16r = t7r + t11r
    let t16i = t7i + t11i
    let t17r = t7r - t11r
    let t17i = t7i - t11i
    let t18r = c2 * t14r - c7 * t17r
    let t18i = c2 * t14i - c7 * t17i
    let t19r = c4 * t14r + c9 * t17r
    let t19i = c4 * t14i + c9 * t17i
    let t20r = c3 * t15r + c6 * t16r
    let t20i = c3 * t15i + c6 * t16i
    let t21r = c5 * t15r - c8 * t16r
    let t21i = c5 * t15i - c8 * t16i
    let t22r = t18r + t19r
    let t22i = t18i + t19i
    let t23r = t20r - t21r
    let t23i = t20i - t21i
    let y1r = t2r + t18r
    let y1i = t2i + t18i
    let y2r = t2r + t19r
    let y2i = t2i + t19i
    let y3r = t4r - 0.5 * t13r
    let y3i = t4i - 0.5 * t13i
    let y4r = t2r - t22r
    let y4i = t2i - t22i
    let y5r = t3r - t23r
    let y5i = t3i - t23i
    let y6r = c1 * (t8r - t12r)
    let y6i = c1 * (t8i - t12i)
    let y7r = t21r - t3r
    let y7i = t21i - t3i
    let y8r = t3r + t20r
    let y8i = t3i + t20i
    re[p0] = t4r + t13r
    im[p0] = t4i + t13i
    re[p1] = y1r - y8i
    im[p1] = y1i + y8r
    re[p2] = y2r - y7i
    im[p2] = y2i + y7r
    re[p3] = y3r - y6i
    im[p3] = y3i + y6r
    re[p4] = y4r - y5i
    im[p4] = y4i + y5r
    re[p5] = y4r + y5i
    im[p5] = y4i - y5r
    re[p6] = y3r + y6i
    im[p6] = y3i - y6r
    re[p7] = y2r + y7i
    im[p7] = y2i - y7r
    re[p8] = y1r + y8i
    im[p8] = y1i - y8r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 9 stage of the prime factor
/// transform, for the twist 8.
///
/// This is the small transform of the original, `Pfacc.pfa9`,
/// with the twist 8.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r9_mu8(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 9
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 9)
  let mut p1 = m * (1 * kfac % 9)
  let mut p2 = m * (2 * kfac % 9)
  let mut p3 = m * (3 * kfac % 9)
  let mut p4 = m * (4 * kfac % 9)
  let mut p5 = m * (5 * kfac % 9)
  let mut p6 = m * (6 * kfac % 9)
  let mut p7 = m * (7 * kfac % 9)
  let mut p8 = m * (8 * kfac % 9)
  let c1 = -0.8660254037844377
  let c2 = 0.7660444431189781
  let c3 = -0.6427876096865405
  let c4 = 0.17364817766692886
  let c5 = -0.9848077530122081
  let c6 = -0.6634139481689377
  let c7 = 0.5566703992264198
  let c8 = -0.15038373318043385
  let c9 = 0.8528685319524424
  let mut i = 0
  while i < m {
    let t1r = re[p3] + re[p6]
    let t1i = im[p3] + im[p6]
    let t2r = re[p0] - 0.5 * t1r
    let t2i = im[p0] - 0.5 * t1i
    let t3r = c1 * (re[p3] - re[p6])
    let t3i = c1 * (im[p3] - im[p6])
    let t4r = re[p0] + t1r
    let t4i = im[p0] + t1i
    let t5r = re[p4] + re[p7]
    let t5i = im[p4] + im[p7]
    let t6r = re[p1] - 0.5 * t5r
    let t6i = im[p1] - 0.5 * t5i
    let t7r = re[p4] - re[p7]
    let t7i = im[p4] - im[p7]
    let t8r = re[p1] + t5r
    let t8i = im[p1] + t5i
    let t9r = re[p2] + re[p5]
    let t9i = im[p2] + im[p5]
    let t10r = re[p8] - 0.5 * t9r
    let t10i = im[p8] - 0.5 * t9i
    let t11r = re[p2] - re[p5]
    let t11i = im[p2] - im[p5]
    let t12r = re[p8] + t9r
    let t12i = im[p8] + t9i
    let t13r = t8r + t12r
    let t13i = t8i + t12i
    let t14r = t6r + t10r
    let t14i = t6i + t10i
    let t15r = t6r - t10r
    let t15i = t6i - t10i
    let t16r = t7r + t11r
    let t16i = t7i + t11i
    let t17r = t7r - t11r
    let t17i = t7i - t11i
    let t18r = c2 * t14r - c7 * t17r
    let t18i = c2 * t14i - c7 * t17i
    let t19r = c4 * t14r + c9 * t17r
    let t19i = c4 * t14i + c9 * t17i
    let t20r = c3 * t15r + c6 * t16r
    let t20i = c3 * t15i + c6 * t16i
    let t21r = c5 * t15r - c8 * t16r
    let t21i = c5 * t15i - c8 * t16i
    let t22r = t18r + t19r
    let t22i = t18i + t19i
    let t23r = t20r - t21r
    let t23i = t20i - t21i
    let y1r = t2r + t18r
    let y1i = t2i + t18i
    let y2r = t2r + t19r
    let y2i = t2i + t19i
    let y3r = t4r - 0.5 * t13r
    let y3i = t4i - 0.5 * t13i
    let y4r = t2r - t22r
    let y4i = t2i - t22i
    let y5r = t3r - t23r
    let y5i = t3i - t23i
    let y6r = c1 * (t8r - t12r)
    let y6i = c1 * (t8i - t12i)
    let y7r = t21r - t3r
    let y7i = t21i - t3i
    let y8r = t3r + t20r
    let y8i = t3i + t20i
    re[p0] = t4r + t13r
    im[p0] = t4i + t13i
    re[p1] = y1r - y8i
    im[p1] = y1i + y8r
    re[p2] = y2r - y7i
    im[p2] = y2i + y7r
    re[p3] = y3r - y6i
    im[p3] = y3i + y6r
    re[p4] = y4r - y5i
    im[p4] = y4i + y5r
    re[p5] = y4r + y5i
    im[p5] = y4i - y5r
    re[p6] = y3r + y6i
    im[p6] = y3i - y6r
    re[p7] = y2r + y7i
    im[p7] = y2i - y7r
    re[p8] = y1r + y8i
    im[p8] = y1i - y8r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 11 stage of the prime factor
/// transform, for the twist 1.
///
/// This is the small transform of the original, `Pfacc.pfa11`,
/// with the twist 1.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r11_mu1(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 11
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 11)
  let mut p1 = m * (1 * kfac % 11)
  let mut p2 = m * (2 * kfac % 11)
  let mut p3 = m * (3 * kfac % 11)
  let mut p4 = m * (4 * kfac % 11)
  let mut p5 = m * (5 * kfac % 11)
  let mut p6 = m * (6 * kfac % 11)
  let mut p7 = m * (7 * kfac % 11)
  let mut p8 = m * (8 * kfac % 11)
  let mut p9 = m * (9 * kfac % 11)
  let mut p10 = m * (10 * kfac % 11)
  let c1 = 0.8412535328311812
  let c2 = 0.41541501300188655
  let c3 = -0.14231483827328537
  let c4 = -0.6548607339452844
  let c5 = -0.9594929736144978
  let c6 = 0.5406408174555972
  let c7 = 0.909631995354518
  let c8 = 0.9898214418809327
  let c9 = 0.7557495743542586
  let c10 = 0.28173255684143006
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p10]
    let t1i = im[p1] + im[p10]
    let t2r = re[p2] + re[p9]
    let t2i = im[p2] + im[p9]
    let t3r = re[p3] + re[p8]
    let t3i = im[p3] + im[p8]
    let t4r = re[p4] + re[p7]
    let t4i = im[p4] + im[p7]
    let t5r = re[p5] + re[p6]
    let t5i = im[p5] + im[p6]
    let t6r = re[p1] - re[p10]
    let t6i = im[p1] - im[p10]
    let t7r = re[p2] - re[p9]
    let t7i = im[p2] - im[p9]
    let t8r = re[p3] - re[p8]
    let t8i = im[p3] - im[p8]
    let t9r = re[p4] - re[p7]
    let t9i = im[p4] - im[p7]
    let t10r = re[p5] - re[p6]
    let t10i = im[p5] - im[p6]
    let t11r = re[p0] - 0.5 * t5r
    let t11i = im[p0] - 0.5 * t5i
    let t12r = t1r - t5r
    let t12i = t1i - t5i
    let t13r = t2r - t5r
    let t13i = t2i - t5i
    let t14r = t3r - t5r
    let t14i = t3i - t5i
    let t15r = t4r - t5r
    let t15i = t4i - t5i
    let y1r = t11r + c1 * t12r + c2 * t13r + c3 * t14r + c4 * t15r
    let y1i = t11i + c1 * t12i + c2 * t13i + c3 * t14i + c4 * t15i
    let y2r = t11r + c2 * t12r + c4 * t13r + c5 * t14r + c3 * t15r
    let y2i = t11i + c2 * t12i + c4 * t13i + c5 * t14i + c3 * t15i
    let y3r = t11r + c3 * t12r + c5 * t13r + c2 * t14r + c1 * t15r
    let y3i = t11i + c3 * t12i + c5 * t13i + c2 * t14i + c1 * t15i
    let y4r = t11r + c4 * t12r + c3 * t13r + c1 * t14r + c5 * t15r
    let y4i = t11i + c4 * t12i + c3 * t13i + c1 * t14i + c5 * t15i
    let y5r = t11r + c5 * t12r + c1 * t13r + c4 * t14r + c2 * t15r
    let y5i = t11i + c5 * t12i + c1 * t13i + c4 * t14i + c2 * t15i
    let y6r = c10 * t6r - c6 * t7r + c9 * t8r - c7 * t9r + c8 * t10r
    let y6i = c10 * t6i - c6 * t7i + c9 * t8i - c7 * t9i + c8 * t10i
    let y7r = c9 * t6r - c8 * t7r + c6 * t8r + c10 * t9r - c7 * t10r
    let y7i = c9 * t6i - c8 * t7i + c6 * t8i + c10 * t9i - c7 * t10i
    let y8r = c8 * t6r - c10 * t7r - c7 * t8r + c6 * t9r + c9 * t10r
    let y8i = c8 * t6i - c10 * t7i - c7 * t8i + c6 * t9i + c9 * t10i
    let y9r = c7 * t6r + c9 * t7r - c10 * t8r - c8 * t9r - c6 * t10r
    let y9i = c7 * t6i + c9 * t7i - c10 * t8i - c8 * t9i - c6 * t10i
    let y10r = c6 * t6r + c7 * t7r + c8 * t8r + c9 * t9r + c10 * t10r
    let y10i = c6 * t6i + c7 * t7i + c8 * t8i + c9 * t9i + c10 * t10i
    re[p0] = re[p0] + t1r + t2r + t3r + t4r + t5r
    im[p0] = im[p0] + t1i + t2i + t3i + t4i + t5i
    re[p1] = y1r - y10i
    im[p1] = y1i + y10r
    re[p2] = y2r - y9i
    im[p2] = y2i + y9r
    re[p3] = y3r - y8i
    im[p3] = y3i + y8r
    re[p4] = y4r - y7i
    im[p4] = y4i + y7r
    re[p5] = y5r - y6i
    im[p5] = y5i + y6r
    re[p6] = y5r + y6i
    im[p6] = y5i - y6r
    re[p7] = y4r + y7i
    im[p7] = y4i - y7r
    re[p8] = y3r + y8i
    im[p8] = y3i - y8r
    re[p9] = y2r + y9i
    im[p9] = y2i - y9r
    re[p10] = y1r + y10i
    im[p10] = y1i - y10r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 11 stage of the prime factor
/// transform, for the twist 2.
///
/// This is the small transform of the original, `Pfacc.pfa11`,
/// with the twist 2.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r11_mu2(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 11
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 11)
  let mut p1 = m * (1 * kfac % 11)
  let mut p2 = m * (2 * kfac % 11)
  let mut p3 = m * (3 * kfac % 11)
  let mut p4 = m * (4 * kfac % 11)
  let mut p5 = m * (5 * kfac % 11)
  let mut p6 = m * (6 * kfac % 11)
  let mut p7 = m * (7 * kfac % 11)
  let mut p8 = m * (8 * kfac % 11)
  let mut p9 = m * (9 * kfac % 11)
  let mut p10 = m * (10 * kfac % 11)
  let c1 = 0.4154150130018871
  let c2 = -0.6548607339452843
  let c3 = -0.9594929736144975
  let c4 = -0.14231483827328606
  let c5 = 0.8412535328311814
  let c6 = 0.909631995354518
  let c7 = 0.7557495743542588
  let c8 = -0.2817325568414299
  let c9 = -0.9898214418809324
  let c10 = -0.5406408174555981
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p10]
    let t1i = im[p1] + im[p10]
    let t2r = re[p2] + re[p9]
    let t2i = im[p2] + im[p9]
    let t3r = re[p3] + re[p8]
    let t3i = im[p3] + im[p8]
    let t4r = re[p4] + re[p7]
    let t4i = im[p4] + im[p7]
    let t5r = re[p5] + re[p6]
    let t5i = im[p5] + im[p6]
    let t6r = re[p1] - re[p10]
    let t6i = im[p1] - im[p10]
    let t7r = re[p2] - re[p9]
    let t7i = im[p2] - im[p9]
    let t8r = re[p3] - re[p8]
    let t8i = im[p3] - im[p8]
    let t9r = re[p4] - re[p7]
    let t9i = im[p4] - im[p7]
    let t10r = re[p5] - re[p6]
    let t10i = im[p5] - im[p6]
    let t11r = re[p0] - 0.5 * t5r
    let t11i = im[p0] - 0.5 * t5i
    let t12r = t1r - t5r
    let t12i = t1i - t5i
    let t13r = t2r - t5r
    let t13i = t2i - t5i
    let t14r = t3r - t5r
    let t14i = t3i - t5i
    let t15r = t4r - t5r
    let t15i = t4i - t5i
    let y1r = t11r + c1 * t12r + c2 * t13r + c3 * t14r + c4 * t15r
    let y1i = t11i + c1 * t12i + c2 * t13i + c3 * t14i + c4 * t15i
    let y2r = t11r + c2 * t12r + c4 * t13r + c5 * t14r + c3 * t15r
    let y2i = t11i + c2 * t12i + c4 * t13i + c5 * t14i + c3 * t15i
    let y3r = t11r + c3 * t12r + c5 * t13r + c2 * t14r + c1 * t15r
    let y3i = t11i + c3 * t12i + c5 * t13i + c2 * t14i + c1 * t15i
    let y4r = t11r + c4 * t12r + c3 * t13r + c1 * t14r + c5 * t15r
    let y4i = t11i + c4 * t12i + c3 * t13i + c1 * t14i + c5 * t15i
    let y5r = t11r + c5 * t12r + c1 * t13r + c4 * t14r + c2 * t15r
    let y5i = t11i + c5 * t12i + c1 * t13i + c4 * t14i + c2 * t15i
    let y6r = c10 * t6r - c6 * t7r + c9 * t8r - c7 * t9r + c8 * t10r
    let y6i = c10 * t6i - c6 * t7i + c9 * t8i - c7 * t9i + c8 * t10i
    let y7r = c9 * t6r - c8 * t7r + c6 * t8r + c10 * t9r - c7 * t10r
    let y7i = c9 * t6i - c8 * t7i + c6 * t8i + c10 * t9i - c7 * t10i
    let y8r = c8 * t6r - c10 * t7r - c7 * t8r + c6 * t9r + c9 * t10r
    let y8i = c8 * t6i - c10 * t7i - c7 * t8i + c6 * t9i + c9 * t10i
    let y9r = c7 * t6r + c9 * t7r - c10 * t8r - c8 * t9r - c6 * t10r
    let y9i = c7 * t6i + c9 * t7i - c10 * t8i - c8 * t9i - c6 * t10i
    let y10r = c6 * t6r + c7 * t7r + c8 * t8r + c9 * t9r + c10 * t10r
    let y10i = c6 * t6i + c7 * t7i + c8 * t8i + c9 * t9i + c10 * t10i
    re[p0] = re[p0] + t1r + t2r + t3r + t4r + t5r
    im[p0] = im[p0] + t1i + t2i + t3i + t4i + t5i
    re[p1] = y1r - y10i
    im[p1] = y1i + y10r
    re[p2] = y2r - y9i
    im[p2] = y2i + y9r
    re[p3] = y3r - y8i
    im[p3] = y3i + y8r
    re[p4] = y4r - y7i
    im[p4] = y4i + y7r
    re[p5] = y5r - y6i
    im[p5] = y5i + y6r
    re[p6] = y5r + y6i
    im[p6] = y5i - y6r
    re[p7] = y4r + y7i
    im[p7] = y4i - y7r
    re[p8] = y3r + y8i
    im[p8] = y3i - y8r
    re[p9] = y2r + y9i
    im[p9] = y2i - y9r
    re[p10] = y1r + y10i
    im[p10] = y1i - y10r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 11 stage of the prime factor
/// transform, for the twist 3.
///
/// This is the small transform of the original, `Pfacc.pfa11`,
/// with the twist 3.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r11_mu3(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 11
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 11)
  let mut p1 = m * (1 * kfac % 11)
  let mut p2 = m * (2 * kfac % 11)
  let mut p3 = m * (3 * kfac % 11)
  let mut p4 = m * (4 * kfac % 11)
  let mut p5 = m * (5 * kfac % 11)
  let mut p6 = m * (6 * kfac % 11)
  let mut p7 = m * (7 * kfac % 11)
  let mut p8 = m * (8 * kfac % 11)
  let mut p9 = m * (9 * kfac % 11)
  let mut p10 = m * (10 * kfac % 11)
  let c1 = -0.14231483827328514
  let c2 = -0.9594929736144985
  let c3 = 0.4154150130018867
  let c4 = 0.8412535328311801
  let c5 = -0.6548607339452848
  let c6 = 0.9898214418809327
  let c7 = -0.2817325568414282
  let c8 = -0.9096319953545182
  let c9 = 0.5406408174555988
  let c10 = 0.7557495743542588
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p10]
    let t1i = im[p1] + im[p10]
    let t2r = re[p2] + re[p9]
    let t2i = im[p2] + im[p9]
    let t3r = re[p3] + re[p8]
    let t3i = im[p3] + im[p8]
    let t4r = re[p4] + re[p7]
    let t4i = im[p4] + im[p7]
    let t5r = re[p5] + re[p6]
    let t5i = im[p5] + im[p6]
    let t6r = re[p1] - re[p10]
    let t6i = im[p1] - im[p10]
    let t7r = re[p2] - re[p9]
    let t7i = im[p2] - im[p9]
    let t8r = re[p3] - re[p8]
    let t8i = im[p3] - im[p8]
    let t9r = re[p4] - re[p7]
    let t9i = im[p4] - im[p7]
    let t10r = re[p5] - re[p6]
    let t10i = im[p5] - im[p6]
    let t11r = re[p0] - 0.5 * t5r
    let t11i = im[p0] - 0.5 * t5i
    let t12r = t1r - t5r
    let t12i = t1i - t5i
    let t13r = t2r - t5r
    let t13i = t2i - t5i
    let t14r = t3r - t5r
    let t14i = t3i - t5i
    let t15r = t4r - t5r
    let t15i = t4i - t5i
    let y1r = t11r + c1 * t12r + c2 * t13r + c3 * t14r + c4 * t15r
    let y1i = t11i + c1 * t12i + c2 * t13i + c3 * t14i + c4 * t15i
    let y2r = t11r + c2 * t12r + c4 * t13r + c5 * t14r + c3 * t15r
    let y2i = t11i + c2 * t12i + c4 * t13i + c5 * t14i + c3 * t15i
    let y3r = t11r + c3 * t12r + c5 * t13r + c2 * t14r + c1 * t15r
    let y3i = t11i + c3 * t12i + c5 * t13i + c2 * t14i + c1 * t15i
    let y4r = t11r + c4 * t12r + c3 * t13r + c1 * t14r + c5 * t15r
    let y4i = t11i + c4 * t12i + c3 * t13i + c1 * t14i + c5 * t15i
    let y5r = t11r + c5 * t12r + c1 * t13r + c4 * t14r + c2 * t15r
    let y5i = t11i + c5 * t12i + c1 * t13i + c4 * t14i + c2 * t15i
    let y6r = c10 * t6r - c6 * t7r + c9 * t8r - c7 * t9r + c8 * t10r
    let y6i = c10 * t6i - c6 * t7i + c9 * t8i - c7 * t9i + c8 * t10i
    let y7r = c9 * t6r - c8 * t7r + c6 * t8r + c10 * t9r - c7 * t10r
    let y7i = c9 * t6i - c8 * t7i + c6 * t8i + c10 * t9i - c7 * t10i
    let y8r = c8 * t6r - c10 * t7r - c7 * t8r + c6 * t9r + c9 * t10r
    let y8i = c8 * t6i - c10 * t7i - c7 * t8i + c6 * t9i + c9 * t10i
    let y9r = c7 * t6r + c9 * t7r - c10 * t8r - c8 * t9r - c6 * t10r
    let y9i = c7 * t6i + c9 * t7i - c10 * t8i - c8 * t9i - c6 * t10i
    let y10r = c6 * t6r + c7 * t7r + c8 * t8r + c9 * t9r + c10 * t10r
    let y10i = c6 * t6i + c7 * t7i + c8 * t8i + c9 * t9i + c10 * t10i
    re[p0] = re[p0] + t1r + t2r + t3r + t4r + t5r
    im[p0] = im[p0] + t1i + t2i + t3i + t4i + t5i
    re[p1] = y1r - y10i
    im[p1] = y1i + y10r
    re[p2] = y2r - y9i
    im[p2] = y2i + y9r
    re[p3] = y3r - y8i
    im[p3] = y3i + y8r
    re[p4] = y4r - y7i
    im[p4] = y4i + y7r
    re[p5] = y5r - y6i
    im[p5] = y5i + y6r
    re[p6] = y5r + y6i
    im[p6] = y5i - y6r
    re[p7] = y4r + y7i
    im[p7] = y4i - y7r
    re[p8] = y3r + y8i
    im[p8] = y3i - y8r
    re[p9] = y2r + y9i
    im[p9] = y2i - y9r
    re[p10] = y1r + y10i
    im[p10] = y1i - y10r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 11 stage of the prime factor
/// transform, for the twist 4.
///
/// This is the small transform of the original, `Pfacc.pfa11`,
/// with the twist 4.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r11_mu4(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 11
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 11)
  let mut p1 = m * (1 * kfac % 11)
  let mut p2 = m * (2 * kfac % 11)
  let mut p3 = m * (3 * kfac % 11)
  let mut p4 = m * (4 * kfac % 11)
  let mut p5 = m * (5 * kfac % 11)
  let mut p6 = m * (6 * kfac % 11)
  let mut p7 = m * (7 * kfac % 11)
  let mut p8 = m * (8 * kfac % 11)
  let mut p9 = m * (9 * kfac % 11)
  let mut p10 = m * (10 * kfac % 11)
  let c1 = -0.6548607339452834
  let c2 = -0.14231483827328628
  let c3 = 0.841253532831181
  let c4 = -0.959492973614496
  let c5 = 0.4154150130018863
  let c6 = 0.7557495743542586
  let c7 = -0.9898214418809321
  let c8 = 0.540640817455598
  let c9 = 0.28173255684143245
  let c10 = -0.9096319953545189
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p10]
    let t1i = im[p1] + im[p10]
    let t2r = re[p2] + re[p9]
    let t2i = im[p2] + im[p9]
    let t3r = re[p3] + re[p8]
    let t3i = im[p3] + im[p8]
    let t4r = re[p4] + re[p7]
    let t4i = im[p4] + im[p7]
    let t5r = re[p5] + re[p6]
    let t5i = im[p5] + im[p6]
    let t6r = re[p1] - re[p10]
    let t6i = im[p1] - im[p10]
    let t7r = re[p2] - re[p9]
    let t7i = im[p2] - im[p9]
    let t8r = re[p3] - re[p8]
    let t8i = im[p3] - im[p8]
    let t9r = re[p4] - re[p7]
    let t9i = im[p4] - im[p7]
    let t10r = re[p5] - re[p6]
    let t10i = im[p5] - im[p6]
    let t11r = re[p0] - 0.5 * t5r
    let t11i = im[p0] - 0.5 * t5i
    let t12r = t1r - t5r
    let t12i = t1i - t5i
    let t13r = t2r - t5r
    let t13i = t2i - t5i
    let t14r = t3r - t5r
    let t14i = t3i - t5i
    let t15r = t4r - t5r
    let t15i = t4i - t5i
    let y1r = t11r + c1 * t12r + c2 * t13r + c3 * t14r + c4 * t15r
    let y1i = t11i + c1 * t12i + c2 * t13i + c3 * t14i + c4 * t15i
    let y2r = t11r + c2 * t12r + c4 * t13r + c5 * t14r + c3 * t15r
    let y2i = t11i + c2 * t12i + c4 * t13i + c5 * t14i + c3 * t15i
    let y3r = t11r + c3 * t12r + c5 * t13r + c2 * t14r + c1 * t15r
    let y3i = t11i + c3 * t12i + c5 * t13i + c2 * t14i + c1 * t15i
    let y4r = t11r + c4 * t12r + c3 * t13r + c1 * t14r + c5 * t15r
    let y4i = t11i + c4 * t12i + c3 * t13i + c1 * t14i + c5 * t15i
    let y5r = t11r + c5 * t12r + c1 * t13r + c4 * t14r + c2 * t15r
    let y5i = t11i + c5 * t12i + c1 * t13i + c4 * t14i + c2 * t15i
    let y6r = c10 * t6r - c6 * t7r + c9 * t8r - c7 * t9r + c8 * t10r
    let y6i = c10 * t6i - c6 * t7i + c9 * t8i - c7 * t9i + c8 * t10i
    let y7r = c9 * t6r - c8 * t7r + c6 * t8r + c10 * t9r - c7 * t10r
    let y7i = c9 * t6i - c8 * t7i + c6 * t8i + c10 * t9i - c7 * t10i
    let y8r = c8 * t6r - c10 * t7r - c7 * t8r + c6 * t9r + c9 * t10r
    let y8i = c8 * t6i - c10 * t7i - c7 * t8i + c6 * t9i + c9 * t10i
    let y9r = c7 * t6r + c9 * t7r - c10 * t8r - c8 * t9r - c6 * t10r
    let y9i = c7 * t6i + c9 * t7i - c10 * t8i - c8 * t9i - c6 * t10i
    let y10r = c6 * t6r + c7 * t7r + c8 * t8r + c9 * t9r + c10 * t10r
    let y10i = c6 * t6i + c7 * t7i + c8 * t8i + c9 * t9i + c10 * t10i
    re[p0] = re[p0] + t1r + t2r + t3r + t4r + t5r
    im[p0] = im[p0] + t1i + t2i + t3i + t4i + t5i
    re[p1] = y1r - y10i
    im[p1] = y1i + y10r
    re[p2] = y2r - y9i
    im[p2] = y2i + y9r
    re[p3] = y3r - y8i
    im[p3] = y3i + y8r
    re[p4] = y4r - y7i
    im[p4] = y4i + y7r
    re[p5] = y5r - y6i
    im[p5] = y5i + y6r
    re[p6] = y5r + y6i
    im[p6] = y5i - y6r
    re[p7] = y4r + y7i
    im[p7] = y4i - y7r
    re[p8] = y3r + y8i
    im[p8] = y3i - y8r
    re[p9] = y2r + y9i
    im[p9] = y2i - y9r
    re[p10] = y1r + y10i
    im[p10] = y1i - y10r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 11 stage of the prime factor
/// transform, for the twist 5.
///
/// This is the small transform of the original, `Pfacc.pfa11`,
/// with the twist 5.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r11_mu5(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 11
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 11)
  let mut p1 = m * (1 * kfac % 11)
  let mut p2 = m * (2 * kfac % 11)
  let mut p3 = m * (3 * kfac % 11)
  let mut p4 = m * (4 * kfac % 11)
  let mut p5 = m * (5 * kfac % 11)
  let mut p6 = m * (6 * kfac % 11)
  let mut p7 = m * (7 * kfac % 11)
  let mut p8 = m * (8 * kfac % 11)
  let mut p9 = m * (9 * kfac % 11)
  let mut p10 = m * (10 * kfac % 11)
  let c1 = -0.9594929736144961
  let c2 = 0.8412535328311785
  let c3 = -0.6548607339452834
  let c4 = 0.4154150130018866
  let c5 = -0.14231483827328623
  let c6 = 0.2817325568414329
  let c7 = -0.540640817455602
  let c8 = 0.755749574354259
  let c9 = -0.9096319953545184
  let c10 = 0.9898214418809324
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p10]
    let t1i = im[p1] + im[p10]
    let t2r = re[p2] + re[p9]
    let t2i = im[p2] + im[p9]
    let t3r = re[p3] + re[p8]
    let t3i = im[p3] + im[p8]
    let t4r = re[p4] + re[p7]
    let t4i = im[p4] + im[p7]
    let t5r = re[p5] + re[p6]
    let t5i = im[p5] + im[p6]
    let t6r = re[p1] - re[p10]
    let t6i = im[p1] - im[p10]
    let t7r = re[p2] - re[p9]
    let t7i = im[p2] - im[p9]
    let t8r = re[p3] - re[p8]
    let t8i = im[p3] - im[p8]
    let t9r = re[p4] - re[p7]
    let t9i = im[p4] - im[p7]
    let t10r = re[p5] - re[p6]
    let t10i = im[p5] - im[p6]
    let t11r = re[p0] - 0.5 * t5r
    let t11i = im[p0] - 0.5 * t5i
    let t12r = t1r - t5r
    let t12i = t1i - t5i
    let t13r = t2r - t5r
    let t13i = t2i - t5i
    let t14r = t3r - t5r
    let t14i = t3i - t5i
    let t15r = t4r - t5r
    let t15i = t4i - t5i
    let y1r = t11r + c1 * t12r + c2 * t13r + c3 * t14r + c4 * t15r
    let y1i = t11i + c1 * t12i + c2 * t13i + c3 * t14i + c4 * t15i
    let y2r = t11r + c2 * t12r + c4 * t13r + c5 * t14r + c3 * t15r
    let y2i = t11i + c2 * t12i + c4 * t13i + c5 * t14i + c3 * t15i
    let y3r = t11r + c3 * t12r + c5 * t13r + c2 * t14r + c1 * t15r
    let y3i = t11i + c3 * t12i + c5 * t13i + c2 * t14i + c1 * t15i
    let y4r = t11r + c4 * t12r + c3 * t13r + c1 * t14r + c5 * t15r
    let y4i = t11i + c4 * t12i + c3 * t13i + c1 * t14i + c5 * t15i
    let y5r = t11r + c5 * t12r + c1 * t13r + c4 * t14r + c2 * t15r
    let y5i = t11i + c5 * t12i + c1 * t13i + c4 * t14i + c2 * t15i
    let y6r = c10 * t6r - c6 * t7r + c9 * t8r - c7 * t9r + c8 * t10r
    let y6i = c10 * t6i - c6 * t7i + c9 * t8i - c7 * t9i + c8 * t10i
    let y7r = c9 * t6r - c8 * t7r + c6 * t8r + c10 * t9r - c7 * t10r
    let y7i = c9 * t6i - c8 * t7i + c6 * t8i + c10 * t9i - c7 * t10i
    let y8r = c8 * t6r - c10 * t7r - c7 * t8r + c6 * t9r + c9 * t10r
    let y8i = c8 * t6i - c10 * t7i - c7 * t8i + c6 * t9i + c9 * t10i
    let y9r = c7 * t6r + c9 * t7r - c10 * t8r - c8 * t9r - c6 * t10r
    let y9i = c7 * t6i + c9 * t7i - c10 * t8i - c8 * t9i - c6 * t10i
    let y10r = c6 * t6r + c7 * t7r + c8 * t8r + c9 * t9r + c10 * t10r
    let y10i = c6 * t6i + c7 * t7i + c8 * t8i + c9 * t9i + c10 * t10i
    re[p0] = re[p0] + t1r + t2r + t3r + t4r + t5r
    im[p0] = im[p0] + t1i + t2i + t3i + t4i + t5i
    re[p1] = y1r - y10i
    im[p1] = y1i + y10r
    re[p2] = y2r - y9i
    im[p2] = y2i + y9r
    re[p3] = y3r - y8i
    im[p3] = y3i + y8r
    re[p4] = y4r - y7i
    im[p4] = y4i + y7r
    re[p5] = y5r - y6i
    im[p5] = y5i + y6r
    re[p6] = y5r + y6i
    im[p6] = y5i - y6r
    re[p7] = y4r + y7i
    im[p7] = y4i - y7r
    re[p8] = y3r + y8i
    im[p8] = y3i - y8r
    re[p9] = y2r + y9i
    im[p9] = y2i - y9r
    re[p10] = y1r + y10i
    im[p10] = y1i - y10r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 11 stage of the prime factor
/// transform, for the twist 6.
///
/// This is the small transform of the original, `Pfacc.pfa11`,
/// with the twist 6.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r11_mu6(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 11
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 11)
  let mut p1 = m * (1 * kfac % 11)
  let mut p2 = m * (2 * kfac % 11)
  let mut p3 = m * (3 * kfac % 11)
  let mut p4 = m * (4 * kfac % 11)
  let mut p5 = m * (5 * kfac % 11)
  let mut p6 = m * (6 * kfac % 11)
  let mut p7 = m * (7 * kfac % 11)
  let mut p8 = m * (8 * kfac % 11)
  let mut p9 = m * (9 * kfac % 11)
  let mut p10 = m * (10 * kfac % 11)
  let c1 = -0.9594929736144963
  let c2 = 0.8412535328311838
  let c3 = -0.6548607339452845
  let c4 = 0.41541501300188516
  let c5 = -0.14231483827328717
  let c6 = -0.28173255684142967
  let c7 = 0.540640817455595
  let c8 = -0.7557495743542577
  let c9 = 0.9096319953545193
  let c10 = -0.9898214418809321
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p10]
    let t1i = im[p1] + im[p10]
    let t2r = re[p2] + re[p9]
    let t2i = im[p2] + im[p9]
    let t3r = re[p3] + re[p8]
    let t3i = im[p3] + im[p8]
    let t4r = re[p4] + re[p7]
    let t4i = im[p4] + im[p7]
    let t5r = re[p5] + re[p6]
    let t5i = im[p5] + im[p6]
    let t6r = re[p1] - re[p10]
    let t6i = im[p1] - im[p10]
    let t7r = re[p2] - re[p9]
    let t7i = im[p2] - im[p9]
    let t8r = re[p3] - re[p8]
    let t8i = im[p3] - im[p8]
    let t9r = re[p4] - re[p7]
    let t9i = im[p4] - im[p7]
    let t10r = re[p5] - re[p6]
    let t10i = im[p5] - im[p6]
    let t11r = re[p0] - 0.5 * t5r
    let t11i = im[p0] - 0.5 * t5i
    let t12r = t1r - t5r
    let t12i = t1i - t5i
    let t13r = t2r - t5r
    let t13i = t2i - t5i
    let t14r = t3r - t5r
    let t14i = t3i - t5i
    let t15r = t4r - t5r
    let t15i = t4i - t5i
    let y1r = t11r + c1 * t12r + c2 * t13r + c3 * t14r + c4 * t15r
    let y1i = t11i + c1 * t12i + c2 * t13i + c3 * t14i + c4 * t15i
    let y2r = t11r + c2 * t12r + c4 * t13r + c5 * t14r + c3 * t15r
    let y2i = t11i + c2 * t12i + c4 * t13i + c5 * t14i + c3 * t15i
    let y3r = t11r + c3 * t12r + c5 * t13r + c2 * t14r + c1 * t15r
    let y3i = t11i + c3 * t12i + c5 * t13i + c2 * t14i + c1 * t15i
    let y4r = t11r + c4 * t12r + c3 * t13r + c1 * t14r + c5 * t15r
    let y4i = t11i + c4 * t12i + c3 * t13i + c1 * t14i + c5 * t15i
    let y5r = t11r + c5 * t12r + c1 * t13r + c4 * t14r + c2 * t15r
    let y5i = t11i + c5 * t12i + c1 * t13i + c4 * t14i + c2 * t15i
    let y6r = c10 * t6r - c6 * t7r + c9 * t8r - c7 * t9r + c8 * t10r
    let y6i = c10 * t6i - c6 * t7i + c9 * t8i - c7 * t9i + c8 * t10i
    let y7r = c9 * t6r - c8 * t7r + c6 * t8r + c10 * t9r - c7 * t10r
    let y7i = c9 * t6i - c8 * t7i + c6 * t8i + c10 * t9i - c7 * t10i
    let y8r = c8 * t6r - c10 * t7r - c7 * t8r + c6 * t9r + c9 * t10r
    let y8i = c8 * t6i - c10 * t7i - c7 * t8i + c6 * t9i + c9 * t10i
    let y9r = c7 * t6r + c9 * t7r - c10 * t8r - c8 * t9r - c6 * t10r
    let y9i = c7 * t6i + c9 * t7i - c10 * t8i - c8 * t9i - c6 * t10i
    let y10r = c6 * t6r + c7 * t7r + c8 * t8r + c9 * t9r + c10 * t10r
    let y10i = c6 * t6i + c7 * t7i + c8 * t8i + c9 * t9i + c10 * t10i
    re[p0] = re[p0] + t1r + t2r + t3r + t4r + t5r
    im[p0] = im[p0] + t1i + t2i + t3i + t4i + t5i
    re[p1] = y1r - y10i
    im[p1] = y1i + y10r
    re[p2] = y2r - y9i
    im[p2] = y2i + y9r
    re[p3] = y3r - y8i
    im[p3] = y3i + y8r
    re[p4] = y4r - y7i
    im[p4] = y4i + y7r
    re[p5] = y5r - y6i
    im[p5] = y5i + y6r
    re[p6] = y5r + y6i
    im[p6] = y5i - y6r
    re[p7] = y4r + y7i
    im[p7] = y4i - y7r
    re[p8] = y3r + y8i
    im[p8] = y3i - y8r
    re[p9] = y2r + y9i
    im[p9] = y2i - y9r
    re[p10] = y1r + y10i
    im[p10] = y1i - y10r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 11 stage of the prime factor
/// transform, for the twist 7.
///
/// This is the small transform of the original, `Pfacc.pfa11`,
/// with the twist 7.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r11_mu7(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 11
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 11)
  let mut p1 = m * (1 * kfac % 11)
  let mut p2 = m * (2 * kfac % 11)
  let mut p3 = m * (3 * kfac % 11)
  let mut p4 = m * (4 * kfac % 11)
  let mut p5 = m * (5 * kfac % 11)
  let mut p6 = m * (6 * kfac % 11)
  let mut p7 = m * (7 * kfac % 11)
  let mut p8 = m * (8 * kfac % 11)
  let mut p9 = m * (9 * kfac % 11)
  let mut p10 = m * (10 * kfac % 11)
  let c1 = -0.6548607339452852
  let c2 = -0.1423148382732855
  let c3 = 0.8412535328311794
  let c4 = -0.9594929736144973
  let c5 = 0.4154150130018893
  let c6 = -0.7557495743542576
  let c7 = 0.9898214418809324
  let c8 = -0.5406408174555999
  let c9 = -0.2817325568414289
  let c10 = 0.9096319953545173
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p10]
    let t1i = im[p1] + im[p10]
    let t2r = re[p2] + re[p9]
    let t2i = im[p2] + im[p9]
    let t3r = re[p3] + re[p8]
    let t3i = im[p3] + im[p8]
    let t4r = re[p4] + re[p7]
    let t4i = im[p4] + im[p7]
    let t5r = re[p5] + re[p6]
    let t5i = im[p5] + im[p6]
    let t6r = re[p1] - re[p10]
    let t6i = im[p1] - im[p10]
    let t7r = re[p2] - re[p9]
    let t7i = im[p2] - im[p9]
    let t8r = re[p3] - re[p8]
    let t8i = im[p3] - im[p8]
    let t9r = re[p4] - re[p7]
    let t9i = im[p4] - im[p7]
    let t10r = re[p5] - re[p6]
    let t10i = im[p5] - im[p6]
    let t11r = re[p0] - 0.5 * t5r
    let t11i = im[p0] - 0.5 * t5i
    let t12r = t1r - t5r
    let t12i = t1i - t5i
    let t13r = t2r - t5r
    let t13i = t2i - t5i
    let t14r = t3r - t5r
    let t14i = t3i - t5i
    let t15r = t4r - t5r
    let t15i = t4i - t5i
    let y1r = t11r + c1 * t12r + c2 * t13r + c3 * t14r + c4 * t15r
    let y1i = t11i + c1 * t12i + c2 * t13i + c3 * t14i + c4 * t15i
    let y2r = t11r + c2 * t12r + c4 * t13r + c5 * t14r + c3 * t15r
    let y2i = t11i + c2 * t12i + c4 * t13i + c5 * t14i + c3 * t15i
    let y3r = t11r + c3 * t12r + c5 * t13r + c2 * t14r + c1 * t15r
    let y3i = t11i + c3 * t12i + c5 * t13i + c2 * t14i + c1 * t15i
    let y4r = t11r + c4 * t12r + c3 * t13r + c1 * t14r + c5 * t15r
    let y4i = t11i + c4 * t12i + c3 * t13i + c1 * t14i + c5 * t15i
    let y5r = t11r + c5 * t12r + c1 * t13r + c4 * t14r + c2 * t15r
    let y5i = t11i + c5 * t12i + c1 * t13i + c4 * t14i + c2 * t15i
    let y6r = c10 * t6r - c6 * t7r + c9 * t8r - c7 * t9r + c8 * t10r
    let y6i = c10 * t6i - c6 * t7i + c9 * t8i - c7 * t9i + c8 * t10i
    let y7r = c9 * t6r - c8 * t7r + c6 * t8r + c10 * t9r - c7 * t10r
    let y7i = c9 * t6i - c8 * t7i + c6 * t8i + c10 * t9i - c7 * t10i
    let y8r = c8 * t6r - c10 * t7r - c7 * t8r + c6 * t9r + c9 * t10r
    let y8i = c8 * t6i - c10 * t7i - c7 * t8i + c6 * t9i + c9 * t10i
    let y9r = c7 * t6r + c9 * t7r - c10 * t8r - c8 * t9r - c6 * t10r
    let y9i = c7 * t6i + c9 * t7i - c10 * t8i - c8 * t9i - c6 * t10i
    let y10r = c6 * t6r + c7 * t7r + c8 * t8r + c9 * t9r + c10 * t10r
    let y10i = c6 * t6i + c7 * t7i + c8 * t8i + c9 * t9i + c10 * t10i
    re[p0] = re[p0] + t1r + t2r + t3r + t4r + t5r
    im[p0] = im[p0] + t1i + t2i + t3i + t4i + t5i
    re[p1] = y1r - y10i
    im[p1] = y1i + y10r
    re[p2] = y2r - y9i
    im[p2] = y2i + y9r
    re[p3] = y3r - y8i
    im[p3] = y3i + y8r
    re[p4] = y4r - y7i
    im[p4] = y4i + y7r
    re[p5] = y5r - y6i
    im[p5] = y5i + y6r
    re[p6] = y5r + y6i
    im[p6] = y5i - y6r
    re[p7] = y4r + y7i
    im[p7] = y4i - y7r
    re[p8] = y3r + y8i
    im[p8] = y3i - y8r
    re[p9] = y2r + y9i
    im[p9] = y2i - y9r
    re[p10] = y1r + y10i
    im[p10] = y1i - y10r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 11 stage of the prime factor
/// transform, for the twist 8.
///
/// This is the small transform of the original, `Pfacc.pfa11`,
/// with the twist 8.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r11_mu8(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 11
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 11)
  let mut p1 = m * (1 * kfac % 11)
  let mut p2 = m * (2 * kfac % 11)
  let mut p3 = m * (3 * kfac % 11)
  let mut p4 = m * (4 * kfac % 11)
  let mut p5 = m * (5 * kfac % 11)
  let mut p6 = m * (6 * kfac % 11)
  let mut p7 = m * (7 * kfac % 11)
  let mut p8 = m * (8 * kfac % 11)
  let mut p9 = m * (9 * kfac % 11)
  let mut p10 = m * (10 * kfac % 11)
  let c1 = -0.14231483827328478
  let c2 = -0.9594929736144939
  let c3 = 0.415415013001888
  let c4 = 0.8412535328311798
  let c5 = -0.6548607339452852
  let c6 = -0.9898214418809324
  let c7 = 0.2817325568414339
  let c8 = 0.9096319953545188
  let c9 = -0.5406408174556023
  let c10 = -0.7557495743542559
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p10]
    let t1i = im[p1] + im[p10]
    let t2r = re[p2] + re[p9]
    let t2i = im[p2] + im[p9]
    let t3r = re[p3] + re[p8]
    let t3i = im[p3] + im[p8]
    let t4r = re[p4] + re[p7]
    let t4i = im[p4] + im[p7]
    let t5r = re[p5] + re[p6]
    let t5i = im[p5] + im[p6]
    let t6r = re[p1] - re[p10]
    let t6i = im[p1] - im[p10]
    let t7r = re[p2] - re[p9]
    let t7i = im[p2] - im[p9]
    let t8r = re[p3] - re[p8]
    let t8i = im[p3] - im[p8]
    let t9r = re[p4] - re[p7]
    let t9i = im[p4] - im[p7]
    let t10r = re[p5] - re[p6]
    let t10i = im[p5] - im[p6]
    let t11r = re[p0] - 0.5 * t5r
    let t11i = im[p0] - 0.5 * t5i
    let t12r = t1r - t5r
    let t12i = t1i - t5i
    let t13r = t2r - t5r
    let t13i = t2i - t5i
    let t14r = t3r - t5r
    let t14i = t3i - t5i
    let t15r = t4r - t5r
    let t15i = t4i - t5i
    let y1r = t11r + c1 * t12r + c2 * t13r + c3 * t14r + c4 * t15r
    let y1i = t11i + c1 * t12i + c2 * t13i + c3 * t14i + c4 * t15i
    let y2r = t11r + c2 * t12r + c4 * t13r + c5 * t14r + c3 * t15r
    let y2i = t11i + c2 * t12i + c4 * t13i + c5 * t14i + c3 * t15i
    let y3r = t11r + c3 * t12r + c5 * t13r + c2 * t14r + c1 * t15r
    let y3i = t11i + c3 * t12i + c5 * t13i + c2 * t14i + c1 * t15i
    let y4r = t11r + c4 * t12r + c3 * t13r + c1 * t14r + c5 * t15r
    let y4i = t11i + c4 * t12i + c3 * t13i + c1 * t14i + c5 * t15i
    let y5r = t11r + c5 * t12r + c1 * t13r + c4 * t14r + c2 * t15r
    let y5i = t11i + c5 * t12i + c1 * t13i + c4 * t14i + c2 * t15i
    let y6r = c10 * t6r - c6 * t7r + c9 * t8r - c7 * t9r + c8 * t10r
    let y6i = c10 * t6i - c6 * t7i + c9 * t8i - c7 * t9i + c8 * t10i
    let y7r = c9 * t6r - c8 * t7r + c6 * t8r + c10 * t9r - c7 * t10r
    let y7i = c9 * t6i - c8 * t7i + c6 * t8i + c10 * t9i - c7 * t10i
    let y8r = c8 * t6r - c10 * t7r - c7 * t8r + c6 * t9r + c9 * t10r
    let y8i = c8 * t6i - c10 * t7i - c7 * t8i + c6 * t9i + c9 * t10i
    let y9r = c7 * t6r + c9 * t7r - c10 * t8r - c8 * t9r - c6 * t10r
    let y9i = c7 * t6i + c9 * t7i - c10 * t8i - c8 * t9i - c6 * t10i
    let y10r = c6 * t6r + c7 * t7r + c8 * t8r + c9 * t9r + c10 * t10r
    let y10i = c6 * t6i + c7 * t7i + c8 * t8i + c9 * t9i + c10 * t10i
    re[p0] = re[p0] + t1r + t2r + t3r + t4r + t5r
    im[p0] = im[p0] + t1i + t2i + t3i + t4i + t5i
    re[p1] = y1r - y10i
    im[p1] = y1i + y10r
    re[p2] = y2r - y9i
    im[p2] = y2i + y9r
    re[p3] = y3r - y8i
    im[p3] = y3i + y8r
    re[p4] = y4r - y7i
    im[p4] = y4i + y7r
    re[p5] = y5r - y6i
    im[p5] = y5i + y6r
    re[p6] = y5r + y6i
    im[p6] = y5i - y6r
    re[p7] = y4r + y7i
    im[p7] = y4i - y7r
    re[p8] = y3r + y8i
    im[p8] = y3i - y8r
    re[p9] = y2r + y9i
    im[p9] = y2i - y9r
    re[p10] = y1r + y10i
    im[p10] = y1i - y10r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 11 stage of the prime factor
/// transform, for the twist 9.
///
/// This is the small transform of the original, `Pfacc.pfa11`,
/// with the twist 9.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r11_mu9(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 11
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 11)
  let mut p1 = m * (1 * kfac % 11)
  let mut p2 = m * (2 * kfac % 11)
  let mut p3 = m * (3 * kfac % 11)
  let mut p4 = m * (4 * kfac % 11)
  let mut p5 = m * (5 * kfac % 11)
  let mut p6 = m * (6 * kfac % 11)
  let mut p7 = m * (7 * kfac % 11)
  let mut p8 = m * (8 * kfac % 11)
  let mut p9 = m * (9 * kfac % 11)
  let mut p10 = m * (10 * kfac % 11)
  let c1 = 0.4154150130018862
  let c2 = -0.6548607339452807
  let c3 = -0.9594929736144953
  let c4 = -0.14231483827328623
  let c5 = 0.8412535328311797
  let c6 = -0.9096319953545189
  let c7 = -0.755749574354261
  let c8 = 0.2817325568414329
  let c9 = 0.9898214418809324
  let c10 = 0.5406408174556023
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p10]
    let t1i = im[p1] + im[p10]
    let t2r = re[p2] + re[p9]
    let t2i = im[p2] + im[p9]
    let t3r = re[p3] + re[p8]
    let t3i = im[p3] + im[p8]
    let t4r = re[p4] + re[p7]
    let t4i = im[p4] + im[p7]
    let t5r = re[p5] + re[p6]
    let t5i = im[p5] + im[p6]
    let t6r = re[p1] - re[p10]
    let t6i = im[p1] - im[p10]
    let t7r = re[p2] - re[p9]
    let t7i = im[p2] - im[p9]
    let t8r = re[p3] - re[p8]
    let t8i = im[p3] - im[p8]
    let t9r = re[p4] - re[p7]
    let t9i = im[p4] - im[p7]
    let t10r = re[p5] - re[p6]
    let t10i = im[p5] - im[p6]
    let t11r = re[p0] - 0.5 * t5r
    let t11i = im[p0] - 0.5 * t5i
    let t12r = t1r - t5r
    let t12i = t1i - t5i
    let t13r = t2r - t5r
    let t13i = t2i - t5i
    let t14r = t3r - t5r
    let t14i = t3i - t5i
    let t15r = t4r - t5r
    let t15i = t4i - t5i
    let y1r = t11r + c1 * t12r + c2 * t13r + c3 * t14r + c4 * t15r
    let y1i = t11i + c1 * t12i + c2 * t13i + c3 * t14i + c4 * t15i
    let y2r = t11r + c2 * t12r + c4 * t13r + c5 * t14r + c3 * t15r
    let y2i = t11i + c2 * t12i + c4 * t13i + c5 * t14i + c3 * t15i
    let y3r = t11r + c3 * t12r + c5 * t13r + c2 * t14r + c1 * t15r
    let y3i = t11i + c3 * t12i + c5 * t13i + c2 * t14i + c1 * t15i
    let y4r = t11r + c4 * t12r + c3 * t13r + c1 * t14r + c5 * t15r
    let y4i = t11i + c4 * t12i + c3 * t13i + c1 * t14i + c5 * t15i
    let y5r = t11r + c5 * t12r + c1 * t13r + c4 * t14r + c2 * t15r
    let y5i = t11i + c5 * t12i + c1 * t13i + c4 * t14i + c2 * t15i
    let y6r = c10 * t6r - c6 * t7r + c9 * t8r - c7 * t9r + c8 * t10r
    let y6i = c10 * t6i - c6 * t7i + c9 * t8i - c7 * t9i + c8 * t10i
    let y7r = c9 * t6r - c8 * t7r + c6 * t8r + c10 * t9r - c7 * t10r
    let y7i = c9 * t6i - c8 * t7i + c6 * t8i + c10 * t9i - c7 * t10i
    let y8r = c8 * t6r - c10 * t7r - c7 * t8r + c6 * t9r + c9 * t10r
    let y8i = c8 * t6i - c10 * t7i - c7 * t8i + c6 * t9i + c9 * t10i
    let y9r = c7 * t6r + c9 * t7r - c10 * t8r - c8 * t9r - c6 * t10r
    let y9i = c7 * t6i + c9 * t7i - c10 * t8i - c8 * t9i - c6 * t10i
    let y10r = c6 * t6r + c7 * t7r + c8 * t8r + c9 * t9r + c10 * t10r
    let y10i = c6 * t6i + c7 * t7i + c8 * t8i + c9 * t9i + c10 * t10i
    re[p0] = re[p0] + t1r + t2r + t3r + t4r + t5r
    im[p0] = im[p0] + t1i + t2i + t3i + t4i + t5i
    re[p1] = y1r - y10i
    im[p1] = y1i + y10r
    re[p2] = y2r - y9i
    im[p2] = y2i + y9r
    re[p3] = y3r - y8i
    im[p3] = y3i + y8r
    re[p4] = y4r - y7i
    im[p4] = y4i + y7r
    re[p5] = y5r - y6i
    im[p5] = y5i + y6r
    re[p6] = y5r + y6i
    im[p6] = y5i - y6r
    re[p7] = y4r + y7i
    im[p7] = y4i - y7r
    re[p8] = y3r + y8i
    im[p8] = y3i - y8r
    re[p9] = y2r + y9i
    im[p9] = y2i - y9r
    re[p10] = y1r + y10i
    im[p10] = y1i - y10r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 11 stage of the prime factor
/// transform, for the twist 10.
///
/// This is the small transform of the original, `Pfacc.pfa11`,
/// with the twist 10.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r11_mu10(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 11
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 11)
  let mut p1 = m * (1 * kfac % 11)
  let mut p2 = m * (2 * kfac % 11)
  let mut p3 = m * (3 * kfac % 11)
  let mut p4 = m * (4 * kfac % 11)
  let mut p5 = m * (5 * kfac % 11)
  let mut p6 = m * (6 * kfac % 11)
  let mut p7 = m * (7 * kfac % 11)
  let mut p8 = m * (8 * kfac % 11)
  let mut p9 = m * (9 * kfac % 11)
  let mut p10 = m * (10 * kfac % 11)
  let c1 = 0.8412535328311819
  let c2 = 0.41541501300188094
  let c3 = -0.1423148382732831
  let c4 = -0.6548607339452814
  let c5 = -0.9594929736144933
  let c6 = -0.5406408174556032
  let c7 = -0.9096319953545227
  let c8 = -0.9898214418809324
  let c9 = -0.7557495743542573
  let c10 = -0.28173255684143134
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p10]
    let t1i = im[p1] + im[p10]
    let t2r = re[p2] + re[p9]
    let t2i = im[p2] + im[p9]
    let t3r = re[p3] + re[p8]
    let t3i = im[p3] + im[p8]
    let t4r = re[p4] + re[p7]
    let t4i = im[p4] + im[p7]
    let t5r = re[p5] + re[p6]
    let t5i = im[p5] + im[p6]
    let t6r = re[p1] - re[p10]
    let t6i = im[p1] - im[p10]
    let t7r = re[p2] - re[p9]
    let t7i = im[p2] - im[p9]
    let t8r = re[p3] - re[p8]
    let t8i = im[p3] - im[p8]
    let t9r = re[p4] - re[p7]
    let t9i = im[p4] - im[p7]
    let t10r = re[p5] - re[p6]
    let t10i = im[p5] - im[p6]
    let t11r = re[p0] - 0.5 * t5r
    let t11i = im[p0] - 0.5 * t5i
    let t12r = t1r - t5r
    let t12i = t1i - t5i
    let t13r = t2r - t5r
    let t13i = t2i - t5i
    let t14r = t3r - t5r
    let t14i = t3i - t5i
    let t15r = t4r - t5r
    let t15i = t4i - t5i
    let y1r = t11r + c1 * t12r + c2 * t13r + c3 * t14r + c4 * t15r
    let y1i = t11i + c1 * t12i + c2 * t13i + c3 * t14i + c4 * t15i
    let y2r = t11r + c2 * t12r + c4 * t13r + c5 * t14r + c3 * t15r
    let y2i = t11i + c2 * t12i + c4 * t13i + c5 * t14i + c3 * t15i
    let y3r = t11r + c3 * t12r + c5 * t13r + c2 * t14r + c1 * t15r
    let y3i = t11i + c3 * t12i + c5 * t13i + c2 * t14i + c1 * t15i
    let y4r = t11r + c4 * t12r + c3 * t13r + c1 * t14r + c5 * t15r
    let y4i = t11i + c4 * t12i + c3 * t13i + c1 * t14i + c5 * t15i
    let y5r = t11r + c5 * t12r + c1 * t13r + c4 * t14r + c2 * t15r
    let y5i = t11i + c5 * t12i + c1 * t13i + c4 * t14i + c2 * t15i
    let y6r = c10 * t6r - c6 * t7r + c9 * t8r - c7 * t9r + c8 * t10r
    let y6i = c10 * t6i - c6 * t7i + c9 * t8i - c7 * t9i + c8 * t10i
    let y7r = c9 * t6r - c8 * t7r + c6 * t8r + c10 * t9r - c7 * t10r
    let y7i = c9 * t6i - c8 * t7i + c6 * t8i + c10 * t9i - c7 * t10i
    let y8r = c8 * t6r - c10 * t7r - c7 * t8r + c6 * t9r + c9 * t10r
    let y8i = c8 * t6i - c10 * t7i - c7 * t8i + c6 * t9i + c9 * t10i
    let y9r = c7 * t6r + c9 * t7r - c10 * t8r - c8 * t9r - c6 * t10r
    let y9i = c7 * t6i + c9 * t7i - c10 * t8i - c8 * t9i - c6 * t10i
    let y10r = c6 * t6r + c7 * t7r + c8 * t8r + c9 * t9r + c10 * t10r
    let y10i = c6 * t6i + c7 * t7i + c8 * t8i + c9 * t9i + c10 * t10i
    re[p0] = re[p0] + t1r + t2r + t3r + t4r + t5r
    im[p0] = im[p0] + t1i + t2i + t3i + t4i + t5i
    re[p1] = y1r - y10i
    im[p1] = y1i + y10r
    re[p2] = y2r - y9i
    im[p2] = y2i + y9r
    re[p3] = y3r - y8i
    im[p3] = y3i + y8r
    re[p4] = y4r - y7i
    im[p4] = y4i + y7r
    re[p5] = y5r - y6i
    im[p5] = y5i + y6r
    re[p6] = y5r + y6i
    im[p6] = y5i - y6r
    re[p7] = y4r + y7i
    im[p7] = y4i - y7r
    re[p8] = y3r + y8i
    im[p8] = y3i - y8r
    re[p9] = y2r + y9i
    im[p9] = y2i - y9r
    re[p10] = y1r + y10i
    im[p10] = y1i - y10r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 13 stage of the prime factor
/// transform, for the twist 1.
///
/// This is the small transform of the original, `Pfacc.pfa13`,
/// with the twist 1.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r13_mu1(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 13
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 13)
  let mut p1 = m * (1 * kfac % 13)
  let mut p2 = m * (2 * kfac % 13)
  let mut p3 = m * (3 * kfac % 13)
  let mut p4 = m * (4 * kfac % 13)
  let mut p5 = m * (5 * kfac % 13)
  let mut p6 = m * (6 * kfac % 13)
  let mut p7 = m * (7 * kfac % 13)
  let mut p8 = m * (8 * kfac % 13)
  let mut p9 = m * (9 * kfac % 13)
  let mut p10 = m * (10 * kfac % 13)
  let mut p11 = m * (11 * kfac % 13)
  let mut p12 = m * (12 * kfac % 13)
  let c1 = 0.8854560256532104
  let c2 = 0.568064746731156
  let c3 = 0.12053668025532296
  let c4 = -0.3546048870425344
  let c5 = -0.7485107481711017
  let c6 = -0.9709418174260536
  let c7 = 0.46472317204376856
  let c8 = 0.8229838658936562
  let c9 = 0.9927088740980543
  let c10 = 0.9350162426854152
  let c11 = 0.6631226582407953
  let c12 = 0.23931566428755782
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p12]
    let t1i = im[p1] + im[p12]
    let t2r = re[p2] + re[p11]
    let t2i = im[p2] + im[p11]
    let t3r = re[p3] + re[p10]
    let t3i = im[p3] + im[p10]
    let t4r = re[p4] + re[p9]
    let t4i = im[p4] + im[p9]
    let t5r = re[p5] + re[p8]
    let t5i = im[p5] + im[p8]
    let t6r = re[p6] + re[p7]
    let t6i = im[p6] + im[p7]
    let t7r = re[p1] - re[p12]
    let t7i = im[p1] - im[p12]
    let t8r = re[p2] - re[p11]
    let t8i = im[p2] - im[p11]
    let t9r = re[p3] - re[p10]
    let t9i = im[p3] - im[p10]
    let t10r = re[p4] - re[p9]
    let t10i = im[p4] - im[p9]
    let t11r = re[p5] - re[p8]
    let t11i = im[p5] - im[p8]
    let t12r = re[p6] - re[p7]
    let t12i = im[p6] - im[p7]
    let t13r = re[p0] - 0.5 * t6r
    let t13i = im[p0] - 0.5 * t6i
    let t14r = t1r - t6r
    let t14i = t1i - t6i
    let t15r = t2r - t6r
    let t15i = t2i - t6i
    let t16r = t3r - t6r
    let t16i = t3i - t6i
    let t17r = t4r - t6r
    let t17i = t4i - t6i
    let t18r = t5r - t6r
    let t18i = t5i - t6i
    let y1r = t13r + c1 * t14r + c2 * t15r + c3 * t16r + c4 * t17r + c5 * t18r
    let y1i = t13i + c1 * t14i + c2 * t15i + c3 * t16i + c4 * t17i + c5 * t18i
    let y2r = t13r + c2 * t14r + c4 * t15r + c6 * t16r + c5 * t17r + c3 * t18r
    let y2i = t13i + c2 * t14i + c4 * t15i + c6 * t16i + c5 * t17i + c3 * t18i
    let y3r = t13r + c3 * t14r + c6 * t15r + c4 * t16r + c1 * t17r + c2 * t18r
    let y3i = t13i + c3 * t14i + c6 * t15i + c4 * t16i + c1 * t17i + c2 * t18i
    let y4r = t13r + c4 * t14r + c5 * t15r + c1 * t16r + c3 * t17r + c6 * t18r
    let y4i = t13i + c4 * t14i + c5 * t15i + c1 * t16i + c3 * t17i + c6 * t18i
    let y5r = t13r + c5 * t14r + c3 * t15r + c2 * t16r + c6 * t17r + c1 * t18r
    let y5i = t13i + c5 * t14i + c3 * t15i + c2 * t16i + c6 * t17i + c1 * t18i
    let y6r = t13r + c6 * t14r + c1 * t15r + c5 * t16r + c2 * t17r + c4 * t18r
    let y6i = t13i + c6 * t14i + c1 * t15i + c5 * t16i + c2 * t17i + c4 * t18i
    let y7r = c12 * t7r -
      c7 * t8r +
      c11 * t9r -
      c8 * t10r +
      c10 * t11r -
      c9 * t12r
    let y7i = c12 * t7i -
      c7 * t8i +
      c11 * t9i -
      c8 * t10i +
      c10 * t11i -
      c9 * t12i
    let y8r = c11 * t7r -
      c9 * t8r +
      c8 * t9r -
      c12 * t10r -
      c7 * t11r +
      c10 * t12r
    let y8i = c11 * t7i -
      c9 * t8i +
      c8 * t9i -
      c12 * t10i -
      c7 * t11i +
      c10 * t12i
    let y9r = c10 * t7r -
      c11 * t8r -
      c7 * t9r +
      c9 * t10r -
      c12 * t11r -
      c8 * t12r
    let y9i = c10 * t7i -
      c11 * t8i -
      c7 * t9i +
      c9 * t10i -
      c12 * t11i -
      c8 * t12i
    let y10r = c9 * t7r +
      c12 * t8r -
      c10 * t9r -
      c7 * t10r +
      c8 * t11r +
      c11 * t12r
    let y10i = c9 * t7i +
      c12 * t8i -
      c10 * t9i -
      c7 * t10i +
      c8 * t11i +
      c11 * t12i
    let y11r = c8 * t7r +
      c10 * t8r +
      c12 * t9r -
      c11 * t10r -
      c9 * t11r -
      c7 * t12r
    let y11i = c8 * t7i +
      c10 * t8i +
      c12 * t9i -
      c11 * t10i -
      c9 * t11i -
      c7 * t12i
    let y12r = c7 * t7r +
      c8 * t8r +
      c9 * t9r +
      c10 * t10r +
      c11 * t11r +
      c12 * t12r
    let y12i = c7 * t7i +
      c8 * t8i +
      c9 * t9i +
      c10 * t10i +
      c11 * t11i +
      c12 * t12i
    re[p0] = re[p0] + t1r + t2r + t3r + t4r + t5r + t6r
    im[p0] = im[p0] + t1i + t2i + t3i + t4i + t5i + t6i
    re[p1] = y1r - y12i
    im[p1] = y1i + y12r
    re[p2] = y2r - y11i
    im[p2] = y2i + y11r
    re[p3] = y3r - y10i
    im[p3] = y3i + y10r
    re[p4] = y4r - y9i
    im[p4] = y4i + y9r
    re[p5] = y5r - y8i
    im[p5] = y5i + y8r
    re[p6] = y6r - y7i
    im[p6] = y6i + y7r
    re[p7] = y6r + y7i
    im[p7] = y6i - y7r
    re[p8] = y5r + y8i
    im[p8] = y5i - y8r
    re[p9] = y4r + y9i
    im[p9] = y4i - y9r
    re[p10] = y3r + y10i
    im[p10] = y3i - y10r
    re[p11] = y2r + y11i
    im[p11] = y2i - y11r
    re[p12] = y1r + y12i
    im[p12] = y1i - y12r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    if p11 < limit {
      p11 = p11 + mr
    }
    p11 = p11 + delta
    if p12 < limit {
      p12 = p12 + mr
    }
    p12 = p12 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 13 stage of the prime factor
/// transform, for the twist 2.
///
/// This is the small transform of the original, `Pfacc.pfa13`,
/// with the twist 2.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r13_mu2(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 13
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 13)
  let mut p1 = m * (1 * kfac % 13)
  let mut p2 = m * (2 * kfac % 13)
  let mut p3 = m * (3 * kfac % 13)
  let mut p4 = m * (4 * kfac % 13)
  let mut p5 = m * (5 * kfac % 13)
  let mut p6 = m * (6 * kfac % 13)
  let mut p7 = m * (7 * kfac % 13)
  let mut p8 = m * (8 * kfac % 13)
  let mut p9 = m * (9 * kfac % 13)
  let mut p10 = m * (10 * kfac % 13)
  let mut p11 = m * (11 * kfac % 13)
  let mut p12 = m * (12 * kfac % 13)
  let c1 = 0.5680647467311563
  let c2 = -0.3546048870425348
  let c3 = -0.9709418174260527
  let c4 = -0.7485107481711026
  let c5 = 0.1205366802553231
  let c6 = 0.8854560256532107
  let c7 = 0.8229838658936565
  let c8 = 0.9350162426854152
  let c9 = 0.2393156642875578
  let c10 = -0.6631226582407937
  let c11 = -0.9927088740980541
  let c12 = -0.4647231720437686
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p12]
    let t1i = im[p1] + im[p12]
    let t2r = re[p2] + re[p11]
    let t2i = im[p2] + im[p11]
    let t3r = re[p3] + re[p10]
    let t3i = im[p3] + im[p10]
    let t4r = re[p4] + re[p9]
    let t4i = im[p4] + im[p9]
    let t5r = re[p5] + re[p8]
    let t5i = im[p5] + im[p8]
    let t6r = re[p6] + re[p7]
    let t6i = im[p6] + im[p7]
    let t7r = re[p1] - re[p12]
    let t7i = im[p1] - im[p12]
    let t8r = re[p2] - re[p11]
    let t8i = im[p2] - im[p11]
    let t9r = re[p3] - re[p10]
    let t9i = im[p3] - im[p10]
    let t10r = re[p4] - re[p9]
    let t10i = im[p4] - im[p9]
    let t11r = re[p5] - re[p8]
    let t11i = im[p5] - im[p8]
    let t12r = re[p6] - re[p7]
    let t12i = im[p6] - im[p7]
    let t13r = re[p0] - 0.5 * t6r
    let t13i = im[p0] - 0.5 * t6i
    let t14r = t1r - t6r
    let t14i = t1i - t6i
    let t15r = t2r - t6r
    let t15i = t2i - t6i
    let t16r = t3r - t6r
    let t16i = t3i - t6i
    let t17r = t4r - t6r
    let t17i = t4i - t6i
    let t18r = t5r - t6r
    let t18i = t5i - t6i
    let y1r = t13r + c1 * t14r + c2 * t15r + c3 * t16r + c4 * t17r + c5 * t18r
    let y1i = t13i + c1 * t14i + c2 * t15i + c3 * t16i + c4 * t17i + c5 * t18i
    let y2r = t13r + c2 * t14r + c4 * t15r + c6 * t16r + c5 * t17r + c3 * t18r
    let y2i = t13i + c2 * t14i + c4 * t15i + c6 * t16i + c5 * t17i + c3 * t18i
    let y3r = t13r + c3 * t14r + c6 * t15r + c4 * t16r + c1 * t17r + c2 * t18r
    let y3i = t13i + c3 * t14i + c6 * t15i + c4 * t16i + c1 * t17i + c2 * t18i
    let y4r = t13r + c4 * t14r + c5 * t15r + c1 * t16r + c3 * t17r + c6 * t18r
    let y4i = t13i + c4 * t14i + c5 * t15i + c1 * t16i + c3 * t17i + c6 * t18i
    let y5r = t13r + c5 * t14r + c3 * t15r + c2 * t16r + c6 * t17r + c1 * t18r
    let y5i = t13i + c5 * t14i + c3 * t15i + c2 * t16i + c6 * t17i + c1 * t18i
    let y6r = t13r + c6 * t14r + c1 * t15r + c5 * t16r + c2 * t17r + c4 * t18r
    let y6i = t13i + c6 * t14i + c1 * t15i + c5 * t16i + c2 * t17i + c4 * t18i
    let y7r = c12 * t7r -
      c7 * t8r +
      c11 * t9r -
      c8 * t10r +
      c10 * t11r -
      c9 * t12r
    let y7i = c12 * t7i -
      c7 * t8i +
      c11 * t9i -
      c8 * t10i +
      c10 * t11i -
      c9 * t12i
    let y8r = c11 * t7r -
      c9 * t8r +
      c8 * t9r -
      c12 * t10r -
      c7 * t11r +
      c10 * t12r
    let y8i = c11 * t7i -
      c9 * t8i +
      c8 * t9i -
      c12 * t10i -
      c7 * t11i +
      c10 * t12i
    let y9r = c10 * t7r -
      c11 * t8r -
      c7 * t9r +
      c9 * t10r -
      c12 * t11r -
      c8 * t12r
    let y9i = c10 * t7i -
      c11 * t8i -
      c7 * t9i +
      c9 * t10i -
      c12 * t11i -
      c8 * t12i
    let y10r = c9 * t7r +
      c12 * t8r -
      c10 * t9r -
      c7 * t10r +
      c8 * t11r +
      c11 * t12r
    let y10i = c9 * t7i +
      c12 * t8i -
      c10 * t9i -
      c7 * t10i +
      c8 * t11i +
      c11 * t12i
    let y11r = c8 * t7r +
      c10 * t8r +
      c12 * t9r -
      c11 * t10r -
      c9 * t11r -
      c7 * t12r
    let y11i = c8 * t7i +
      c10 * t8i +
      c12 * t9i -
      c11 * t10i -
      c9 * t11i -
      c7 * t12i
    let y12r = c7 * t7r +
      c8 * t8r +
      c9 * t9r +
      c10 * t10r +
      c11 * t11r +
      c12 * t12r
    let y12i = c7 * t7i +
      c8 * t8i +
      c9 * t9i +
      c10 * t10i +
      c11 * t11i +
      c12 * t12i
    re[p0] = re[p0] + t1r + t2r + t3r + t4r + t5r + t6r
    im[p0] = im[p0] + t1i + t2i + t3i + t4i + t5i + t6i
    re[p1] = y1r - y12i
    im[p1] = y1i + y12r
    re[p2] = y2r - y11i
    im[p2] = y2i + y11r
    re[p3] = y3r - y10i
    im[p3] = y3i + y10r
    re[p4] = y4r - y9i
    im[p4] = y4i + y9r
    re[p5] = y5r - y8i
    im[p5] = y5i + y8r
    re[p6] = y6r - y7i
    im[p6] = y6i + y7r
    re[p7] = y6r + y7i
    im[p7] = y6i - y7r
    re[p8] = y5r + y8i
    im[p8] = y5i - y8r
    re[p9] = y4r + y9i
    im[p9] = y4i - y9r
    re[p10] = y3r + y10i
    im[p10] = y3i - y10r
    re[p11] = y2r + y11i
    im[p11] = y2i - y11r
    re[p12] = y1r + y12i
    im[p12] = y1i - y12r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    if p11 < limit {
      p11 = p11 + mr
    }
    p11 = p11 + delta
    if p12 < limit {
      p12 = p12 + mr
    }
    p12 = p12 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 13 stage of the prime factor
/// transform, for the twist 3.
///
/// This is the small transform of the original, `Pfacc.pfa13`,
/// with the twist 3.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r13_mu3(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 13
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 13)
  let mut p1 = m * (1 * kfac % 13)
  let mut p2 = m * (2 * kfac % 13)
  let mut p3 = m * (3 * kfac % 13)
  let mut p4 = m * (4 * kfac % 13)
  let mut p5 = m * (5 * kfac % 13)
  let mut p6 = m * (6 * kfac % 13)
  let mut p7 = m * (7 * kfac % 13)
  let mut p8 = m * (8 * kfac % 13)
  let mut p9 = m * (9 * kfac % 13)
  let mut p10 = m * (10 * kfac % 13)
  let mut p11 = m * (11 * kfac % 13)
  let mut p12 = m * (12 * kfac % 13)
  let c1 = 0.12053668025532313
  let c2 = -0.9709418174260512
  let c3 = -0.35460488704253595
  let c4 = 0.8854560256532102
  let c5 = 0.5680647467311561
  let c6 = -0.7485107481711026
  let c7 = 0.992708874098054
  let c8 = 0.2393156642875576
  let c9 = -0.9350162426854149
  let c10 = -0.46472317204376734
  let c11 = 0.8229838658936562
  let c12 = 0.6631226582407944
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p12]
    let t1i = im[p1] + im[p12]
    let t2r = re[p2] + re[p11]
    let t2i = im[p2] + im[p11]
    let t3r = re[p3] + re[p10]
    let t3i = im[p3] + im[p10]
    let t4r = re[p4] + re[p9]
    let t4i = im[p4] + im[p9]
    let t5r = re[p5] + re[p8]
    let t5i = im[p5] + im[p8]
    let t6r = re[p6] + re[p7]
    let t6i = im[p6] + im[p7]
    let t7r = re[p1] - re[p12]
    let t7i = im[p1] - im[p12]
    let t8r = re[p2] - re[p11]
    let t8i = im[p2] - im[p11]
    let t9r = re[p3] - re[p10]
    let t9i = im[p3] - im[p10]
    let t10r = re[p4] - re[p9]
    let t10i = im[p4] - im[p9]
    let t11r = re[p5] - re[p8]
    let t11i = im[p5] - im[p8]
    let t12r = re[p6] - re[p7]
    let t12i = im[p6] - im[p7]
    let t13r = re[p0] - 0.5 * t6r
    let t13i = im[p0] - 0.5 * t6i
    let t14r = t1r - t6r
    let t14i = t1i - t6i
    let t15r = t2r - t6r
    let t15i = t2i - t6i
    let t16r = t3r - t6r
    let t16i = t3i - t6i
    let t17r = t4r - t6r
    let t17i = t4i - t6i
    let t18r = t5r - t6r
    let t18i = t5i - t6i
    let y1r = t13r + c1 * t14r + c2 * t15r + c3 * t16r + c4 * t17r + c5 * t18r
    let y1i = t13i + c1 * t14i + c2 * t15i + c3 * t16i + c4 * t17i + c5 * t18i
    let y2r = t13r + c2 * t14r + c4 * t15r + c6 * t16r + c5 * t17r + c3 * t18r
    let y2i = t13i + c2 * t14i + c4 * t15i + c6 * t16i + c5 * t17i + c3 * t18i
    let y3r = t13r + c3 * t14r + c6 * t15r + c4 * t16r + c1 * t17r + c2 * t18r
    let y3i = t13i + c3 * t14i + c6 * t15i + c4 * t16i + c1 * t17i + c2 * t18i
    let y4r = t13r + c4 * t14r + c5 * t15r + c1 * t16r + c3 * t17r + c6 * t18r
    let y4i = t13i + c4 * t14i + c5 * t15i + c1 * t16i + c3 * t17i + c6 * t18i
    let y5r = t13r + c5 * t14r + c3 * t15r + c2 * t16r + c6 * t17r + c1 * t18r
    let y5i = t13i + c5 * t14i + c3 * t15i + c2 * t16i + c6 * t17i + c1 * t18i
    let y6r = t13r + c6 * t14r + c1 * t15r + c5 * t16r + c2 * t17r + c4 * t18r
    let y6i = t13i + c6 * t14i + c1 * t15i + c5 * t16i + c2 * t17i + c4 * t18i
    let y7r = c12 * t7r -
      c7 * t8r +
      c11 * t9r -
      c8 * t10r +
      c10 * t11r -
      c9 * t12r
    let y7i = c12 * t7i -
      c7 * t8i +
      c11 * t9i -
      c8 * t10i +
      c10 * t11i -
      c9 * t12i
    let y8r = c11 * t7r -
      c9 * t8r +
      c8 * t9r -
      c12 * t10r -
      c7 * t11r +
      c10 * t12r
    let y8i = c11 * t7i -
      c9 * t8i +
      c8 * t9i -
      c12 * t10i -
      c7 * t11i +
      c10 * t12i
    let y9r = c10 * t7r -
      c11 * t8r -
      c7 * t9r +
      c9 * t10r -
      c12 * t11r -
      c8 * t12r
    let y9i = c10 * t7i -
      c11 * t8i -
      c7 * t9i +
      c9 * t10i -
      c12 * t11i -
      c8 * t12i
    let y10r = c9 * t7r +
      c12 * t8r -
      c10 * t9r -
      c7 * t10r +
      c8 * t11r +
      c11 * t12r
    let y10i = c9 * t7i +
      c12 * t8i -
      c10 * t9i -
      c7 * t10i +
      c8 * t11i +
      c11 * t12i
    let y11r = c8 * t7r +
      c10 * t8r +
      c12 * t9r -
      c11 * t10r -
      c9 * t11r -
      c7 * t12r
    let y11i = c8 * t7i +
      c10 * t8i +
      c12 * t9i -
      c11 * t10i -
      c9 * t11i -
      c7 * t12i
    let y12r = c7 * t7r +
      c8 * t8r +
      c9 * t9r +
      c10 * t10r +
      c11 * t11r +
      c12 * t12r
    let y12i = c7 * t7i +
      c8 * t8i +
      c9 * t9i +
      c10 * t10i +
      c11 * t11i +
      c12 * t12i
    re[p0] = re[p0] + t1r + t2r + t3r + t4r + t5r + t6r
    im[p0] = im[p0] + t1i + t2i + t3i + t4i + t5i + t6i
    re[p1] = y1r - y12i
    im[p1] = y1i + y12r
    re[p2] = y2r - y11i
    im[p2] = y2i + y11r
    re[p3] = y3r - y10i
    im[p3] = y3i + y10r
    re[p4] = y4r - y9i
    im[p4] = y4i + y9r
    re[p5] = y5r - y8i
    im[p5] = y5i + y8r
    re[p6] = y6r - y7i
    im[p6] = y6i + y7r
    re[p7] = y6r + y7i
    im[p7] = y6i - y7r
    re[p8] = y5r + y8i
    im[p8] = y5i - y8r
    re[p9] = y4r + y9i
    im[p9] = y4i - y9r
    re[p10] = y3r + y10i
    im[p10] = y3i - y10r
    re[p11] = y2r + y11i
    im[p11] = y2i - y11r
    re[p12] = y1r + y12i
    im[p12] = y1i - y12r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    if p11 < limit {
      p11 = p11 + mr
    }
    p11 = p11 + delta
    if p12 < limit {
      p12 = p12 + mr
    }
    p12 = p12 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 13 stage of the prime factor
/// transform, for the twist 4.
///
/// This is the small transform of the original, `Pfacc.pfa13`,
/// with the twist 4.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r13_mu4(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 13
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 13)
  let mut p1 = m * (1 * kfac % 13)
  let mut p2 = m * (2 * kfac % 13)
  let mut p3 = m * (3 * kfac % 13)
  let mut p4 = m * (4 * kfac % 13)
  let mut p5 = m * (5 * kfac % 13)
  let mut p6 = m * (6 * kfac % 13)
  let mut p7 = m * (7 * kfac % 13)
  let mut p8 = m * (8 * kfac % 13)
  let mut p9 = m * (9 * kfac % 13)
  let mut p10 = m * (10 * kfac % 13)
  let mut p11 = m * (11 * kfac % 13)
  let mut p12 = m * (12 * kfac % 13)
  let c1 = -0.35460488704253584
  let c2 = -0.7485107481711042
  let c3 = 0.8854560256532105
  let c4 = 0.12053668025532638
  let c5 = -0.9709418174260527
  let c6 = 0.5680647467311561
  let c7 = 0.935016242685415
  let c8 = -0.6631226582407937
  let c9 = -0.4647231720437686
  let c10 = 0.9927088740980536
  let c11 = -0.23931566428755838
  let c12 = -0.8229838658936565
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p12]
    let t1i = im[p1] + im[p12]
    let t2r = re[p2] + re[p11]
    let t2i = im[p2] + im[p11]
    let t3r = re[p3] + re[p10]
    let t3i = im[p3] + im[p10]
    let t4r = re[p4] + re[p9]
    let t4i = im[p4] + im[p9]
    let t5r = re[p5] + re[p8]
    let t5i = im[p5] + im[p8]
    let t6r = re[p6] + re[p7]
    let t6i = im[p6] + im[p7]
    let t7r = re[p1] - re[p12]
    let t7i = im[p1] - im[p12]
    let t8r = re[p2] - re[p11]
    let t8i = im[p2] - im[p11]
    let t9r = re[p3] - re[p10]
    let t9i = im[p3] - im[p10]
    let t10r = re[p4] - re[p9]
    let t10i = im[p4] - im[p9]
    let t11r = re[p5] - re[p8]
    let t11i = im[p5] - im[p8]
    let t12r = re[p6] - re[p7]
    let t12i = im[p6] - im[p7]
    let t13r = re[p0] - 0.5 * t6r
    let t13i = im[p0] - 0.5 * t6i
    let t14r = t1r - t6r
    let t14i = t1i - t6i
    let t15r = t2r - t6r
    let t15i = t2i - t6i
    let t16r = t3r - t6r
    let t16i = t3i - t6i
    let t17r = t4r - t6r
    let t17i = t4i - t6i
    let t18r = t5r - t6r
    let t18i = t5i - t6i
    let y1r = t13r + c1 * t14r + c2 * t15r + c3 * t16r + c4 * t17r + c5 * t18r
    let y1i = t13i + c1 * t14i + c2 * t15i + c3 * t16i + c4 * t17i + c5 * t18i
    let y2r = t13r + c2 * t14r + c4 * t15r + c6 * t16r + c5 * t17r + c3 * t18r
    let y2i = t13i + c2 * t14i + c4 * t15i + c6 * t16i + c5 * t17i + c3 * t18i
    let y3r = t13r + c3 * t14r + c6 * t15r + c4 * t16r + c1 * t17r + c2 * t18r
    let y3i = t13i + c3 * t14i + c6 * t15i + c4 * t16i + c1 * t17i + c2 * t18i
    let y4r = t13r + c4 * t14r + c5 * t15r + c1 * t16r + c3 * t17r + c6 * t18r
    let y4i = t13i + c4 * t14i + c5 * t15i + c1 * t16i + c3 * t17i + c6 * t18i
    let y5r = t13r + c5 * t14r + c3 * t15r + c2 * t16r + c6 * t17r + c1 * t18r
    let y5i = t13i + c5 * t14i + c3 * t15i + c2 * t16i + c6 * t17i + c1 * t18i
    let y6r = t13r + c6 * t14r + c1 * t15r + c5 * t16r + c2 * t17r + c4 * t18r
    let y6i = t13i + c6 * t14i + c1 * t15i + c5 * t16i + c2 * t17i + c4 * t18i
    let y7r = c12 * t7r -
      c7 * t8r +
      c11 * t9r -
      c8 * t10r +
      c10 * t11r -
      c9 * t12r
    let y7i = c12 * t7i -
      c7 * t8i +
      c11 * t9i -
      c8 * t10i +
      c10 * t11i -
      c9 * t12i
    let y8r = c11 * t7r -
      c9 * t8r +
      c8 * t9r -
      c12 * t10r -
      c7 * t11r +
      c10 * t12r
    let y8i = c11 * t7i -
      c9 * t8i +
      c8 * t9i -
      c12 * t10i -
      c7 * t11i +
      c10 * t12i
    let y9r = c10 * t7r -
      c11 * t8r -
      c7 * t9r +
      c9 * t10r -
      c12 * t11r -
      c8 * t12r
    let y9i = c10 * t7i -
      c11 * t8i -
      c7 * t9i +
      c9 * t10i -
      c12 * t11i -
      c8 * t12i
    let y10r = c9 * t7r +
      c12 * t8r -
      c10 * t9r -
      c7 * t10r +
      c8 * t11r +
      c11 * t12r
    let y10i = c9 * t7i +
      c12 * t8i -
      c10 * t9i -
      c7 * t10i +
      c8 * t11i +
      c11 * t12i
    let y11r = c8 * t7r +
      c10 * t8r +
      c12 * t9r -
      c11 * t10r -
      c9 * t11r -
      c7 * t12r
    let y11i = c8 * t7i +
      c10 * t8i +
      c12 * t9i -
      c11 * t10i -
      c9 * t11i -
      c7 * t12i
    let y12r = c7 * t7r +
      c8 * t8r +
      c9 * t9r +
      c10 * t10r +
      c11 * t11r +
      c12 * t12r
    let y12i = c7 * t7i +
      c8 * t8i +
      c9 * t9i +
      c10 * t10i +
      c11 * t11i +
      c12 * t12i
    re[p0] = re[p0] + t1r + t2r + t3r + t4r + t5r + t6r
    im[p0] = im[p0] + t1i + t2i + t3i + t4i + t5i + t6i
    re[p1] = y1r - y12i
    im[p1] = y1i + y12r
    re[p2] = y2r - y11i
    im[p2] = y2i + y11r
    re[p3] = y3r - y10i
    im[p3] = y3i + y10r
    re[p4] = y4r - y9i
    im[p4] = y4i + y9r
    re[p5] = y5r - y8i
    im[p5] = y5i + y8r
    re[p6] = y6r - y7i
    im[p6] = y6i + y7r
    re[p7] = y6r + y7i
    im[p7] = y6i - y7r
    re[p8] = y5r + y8i
    im[p8] = y5i - y8r
    re[p9] = y4r + y9i
    im[p9] = y4i - y9r
    re[p10] = y3r + y10i
    im[p10] = y3i - y10r
    re[p11] = y2r + y11i
    im[p11] = y2i - y11r
    re[p12] = y1r + y12i
    im[p12] = y1i - y12r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    if p11 < limit {
      p11 = p11 + mr
    }
    p11 = p11 + delta
    if p12 < limit {
      p12 = p12 + mr
    }
    p12 = p12 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 13 stage of the prime factor
/// transform, for the twist 5.
///
/// This is the small transform of the original, `Pfacc.pfa13`,
/// with the twist 5.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r13_mu5(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 13
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 13)
  let mut p1 = m * (1 * kfac % 13)
  let mut p2 = m * (2 * kfac % 13)
  let mut p3 = m * (3 * kfac % 13)
  let mut p4 = m * (4 * kfac % 13)
  let mut p5 = m * (5 * kfac % 13)
  let mut p6 = m * (6 * kfac % 13)
  let mut p7 = m * (7 * kfac % 13)
  let mut p8 = m * (8 * kfac % 13)
  let mut p9 = m * (9 * kfac % 13)
  let mut p10 = m * (10 * kfac % 13)
  let mut p11 = m * (11 * kfac % 13)
  let mut p12 = m * (12 * kfac % 13)
  let c1 = -0.7485107481711001
  let c2 = 0.12053668025532419
  let c3 = 0.5680647467311548
  let c4 = -0.9709418174260511
  let c5 = 0.8854560256532086
  let c6 = -0.3546048870425378
  let c7 = 0.6631226582407959
  let c8 = -0.9927088740980539
  let c9 = 0.8229838658936577
  let c10 = -0.23931566428755793
  let c11 = -0.4647231720437715
  let c12 = 0.9350162426854141
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p12]
    let t1i = im[p1] + im[p12]
    let t2r = re[p2] + re[p11]
    let t2i = im[p2] + im[p11]
    let t3r = re[p3] + re[p10]
    let t3i = im[p3] + im[p10]
    let t4r = re[p4] + re[p9]
    let t4i = im[p4] + im[p9]
    let t5r = re[p5] + re[p8]
    let t5i = im[p5] + im[p8]
    let t6r = re[p6] + re[p7]
    let t6i = im[p6] + im[p7]
    let t7r = re[p1] - re[p12]
    let t7i = im[p1] - im[p12]
    let t8r = re[p2] - re[p11]
    let t8i = im[p2] - im[p11]
    let t9r = re[p3] - re[p10]
    let t9i = im[p3] - im[p10]
    let t10r = re[p4] - re[p9]
    let t10i = im[p4] - im[p9]
    let t11r = re[p5] - re[p8]
    let t11i = im[p5] - im[p8]
    let t12r = re[p6] - re[p7]
    let t12i = im[p6] - im[p7]
    let t13r = re[p0] - 0.5 * t6r
    let t13i = im[p0] - 0.5 * t6i
    let t14r = t1r - t6r
    let t14i = t1i - t6i
    let t15r = t2r - t6r
    let t15i = t2i - t6i
    let t16r = t3r - t6r
    let t16i = t3i - t6i
    let t17r = t4r - t6r
    let t17i = t4i - t6i
    let t18r = t5r - t6r
    let t18i = t5i - t6i
    let y1r = t13r + c1 * t14r + c2 * t15r + c3 * t16r + c4 * t17r + c5 * t18r
    let y1i = t13i + c1 * t14i + c2 * t15i + c3 * t16i + c4 * t17i + c5 * t18i
    let y2r = t13r + c2 * t14r + c4 * t15r + c6 * t16r + c5 * t17r + c3 * t18r
    let y2i = t13i + c2 * t14i + c4 * t15i + c6 * t16i + c5 * t17i + c3 * t18i
    let y3r = t13r + c3 * t14r + c6 * t15r + c4 * t16r + c1 * t17r + c2 * t18r
    let y3i = t13i + c3 * t14i + c6 * t15i + c4 * t16i + c1 * t17i + c2 * t18i
    let y4r = t13r + c4 * t14r + c5 * t15r + c1 * t16r + c3 * t17r + c6 * t18r
    let y4i = t13i + c4 * t14i + c5 * t15i + c1 * t16i + c3 * t17i + c6 * t18i
    let y5r = t13r + c5 * t14r + c3 * t15r + c2 * t16r + c6 * t17r + c1 * t18r
    let y5i = t13i + c5 * t14i + c3 * t15i + c2 * t16i + c6 * t17i + c1 * t18i
    let y6r = t13r + c6 * t14r + c1 * t15r + c5 * t16r + c2 * t17r + c4 * t18r
    let y6i = t13i + c6 * t14i + c1 * t15i + c5 * t16i + c2 * t17i + c4 * t18i
    let y7r = c12 * t7r -
      c7 * t8r +
      c11 * t9r -
      c8 * t10r +
      c10 * t11r -
      c9 * t12r
    let y7i = c12 * t7i -
      c7 * t8i +
      c11 * t9i -
      c8 * t10i +
      c10 * t11i -
      c9 * t12i
    let y8r = c11 * t7r -
      c9 * t8r +
      c8 * t9r -
      c12 * t10r -
      c7 * t11r +
      c10 * t12r
    let y8i = c11 * t7i -
      c9 * t8i +
      c8 * t9i -
      c12 * t10i -
      c7 * t11i +
      c10 * t12i
    let y9r = c10 * t7r -
      c11 * t8r -
      c7 * t9r +
      c9 * t10r -
      c12 * t11r -
      c8 * t12r
    let y9i = c10 * t7i -
      c11 * t8i -
      c7 * t9i +
      c9 * t10i -
      c12 * t11i -
      c8 * t12i
    let y10r = c9 * t7r +
      c12 * t8r -
      c10 * t9r -
      c7 * t10r +
      c8 * t11r +
      c11 * t12r
    let y10i = c9 * t7i +
      c12 * t8i -
      c10 * t9i -
      c7 * t10i +
      c8 * t11i +
      c11 * t12i
    let y11r = c8 * t7r +
      c10 * t8r +
      c12 * t9r -
      c11 * t10r -
      c9 * t11r -
      c7 * t12r
    let y11i = c8 * t7i +
      c10 * t8i +
      c12 * t9i -
      c11 * t10i -
      c9 * t11i -
      c7 * t12i
    let y12r = c7 * t7r +
      c8 * t8r +
      c9 * t9r +
      c10 * t10r +
      c11 * t11r +
      c12 * t12r
    let y12i = c7 * t7i +
      c8 * t8i +
      c9 * t9i +
      c10 * t10i +
      c11 * t11i +
      c12 * t12i
    re[p0] = re[p0] + t1r + t2r + t3r + t4r + t5r + t6r
    im[p0] = im[p0] + t1i + t2i + t3i + t4i + t5i + t6i
    re[p1] = y1r - y12i
    im[p1] = y1i + y12r
    re[p2] = y2r - y11i
    im[p2] = y2i + y11r
    re[p3] = y3r - y10i
    im[p3] = y3i + y10r
    re[p4] = y4r - y9i
    im[p4] = y4i + y9r
    re[p5] = y5r - y8i
    im[p5] = y5i + y8r
    re[p6] = y6r - y7i
    im[p6] = y6i + y7r
    re[p7] = y6r + y7i
    im[p7] = y6i - y7r
    re[p8] = y5r + y8i
    im[p8] = y5i - y8r
    re[p9] = y4r + y9i
    im[p9] = y4i - y9r
    re[p10] = y3r + y10i
    im[p10] = y3i - y10r
    re[p11] = y2r + y11i
    im[p11] = y2i - y11r
    re[p12] = y1r + y12i
    im[p12] = y1i - y12r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    if p11 < limit {
      p11 = p11 + mr
    }
    p11 = p11 + delta
    if p12 < limit {
      p12 = p12 + mr
    }
    p12 = p12 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 13 stage of the prime factor
/// transform, for the twist 6.
///
/// This is the small transform of the original, `Pfacc.pfa13`,
/// with the twist 6.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r13_mu6(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 13
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 13)
  let mut p1 = m * (1 * kfac % 13)
  let mut p2 = m * (2 * kfac % 13)
  let mut p3 = m * (3 * kfac % 13)
  let mut p4 = m * (4 * kfac % 13)
  let mut p5 = m * (5 * kfac % 13)
  let mut p6 = m * (6 * kfac % 13)
  let mut p7 = m * (7 * kfac % 13)
  let mut p8 = m * (8 * kfac % 13)
  let mut p9 = m * (9 * kfac % 13)
  let mut p10 = m * (10 * kfac % 13)
  let mut p11 = m * (11 * kfac % 13)
  let mut p12 = m * (12 * kfac % 13)
  let c1 = -0.9709418174260529
  let c2 = 0.8854560256532104
  let c3 = -0.7485107481711026
  let c4 = 0.5680647467311573
  let c5 = -0.35460488704253706
  let c6 = 0.1205366802553241
  let c7 = 0.23931566428755802
  let c8 = -0.46472317204376823
  let c9 = 0.6631226582407953
  let c10 = -0.8229838658936549
  let c11 = 0.9350162426854149
  let c12 = -0.9927088740980539
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p12]
    let t1i = im[p1] + im[p12]
    let t2r = re[p2] + re[p11]
    let t2i = im[p2] + im[p11]
    let t3r = re[p3] + re[p10]
    let t3i = im[p3] + im[p10]
    let t4r = re[p4] + re[p9]
    let t4i = im[p4] + im[p9]
    let t5r = re[p5] + re[p8]
    let t5i = im[p5] + im[p8]
    let t6r = re[p6] + re[p7]
    let t6i = im[p6] + im[p7]
    let t7r = re[p1] - re[p12]
    let t7i = im[p1] - im[p12]
    let t8r = re[p2] - re[p11]
    let t8i = im[p2] - im[p11]
    let t9r = re[p3] - re[p10]
    let t9i = im[p3] - im[p10]
    let t10r = re[p4] - re[p9]
    let t10i = im[p4] - im[p9]
    let t11r = re[p5] - re[p8]
    let t11i = im[p5] - im[p8]
    let t12r = re[p6] - re[p7]
    let t12i = im[p6] - im[p7]
    let t13r = re[p0] - 0.5 * t6r
    let t13i = im[p0] - 0.5 * t6i
    let t14r = t1r - t6r
    let t14i = t1i - t6i
    let t15r = t2r - t6r
    let t15i = t2i - t6i
    let t16r = t3r - t6r
    let t16i = t3i - t6i
    let t17r = t4r - t6r
    let t17i = t4i - t6i
    let t18r = t5r - t6r
    let t18i = t5i - t6i
    let y1r = t13r + c1 * t14r + c2 * t15r + c3 * t16r + c4 * t17r + c5 * t18r
    let y1i = t13i + c1 * t14i + c2 * t15i + c3 * t16i + c4 * t17i + c5 * t18i
    let y2r = t13r + c2 * t14r + c4 * t15r + c6 * t16r + c5 * t17r + c3 * t18r
    let y2i = t13i + c2 * t14i + c4 * t15i + c6 * t16i + c5 * t17i + c3 * t18i
    let y3r = t13r + c3 * t14r + c6 * t15r + c4 * t16r + c1 * t17r + c2 * t18r
    let y3i = t13i + c3 * t14i + c6 * t15i + c4 * t16i + c1 * t17i + c2 * t18i
    let y4r = t13r + c4 * t14r + c5 * t15r + c1 * t16r + c3 * t17r + c6 * t18r
    let y4i = t13i + c4 * t14i + c5 * t15i + c1 * t16i + c3 * t17i + c6 * t18i
    let y5r = t13r + c5 * t14r + c3 * t15r + c2 * t16r + c6 * t17r + c1 * t18r
    let y5i = t13i + c5 * t14i + c3 * t15i + c2 * t16i + c6 * t17i + c1 * t18i
    let y6r = t13r + c6 * t14r + c1 * t15r + c5 * t16r + c2 * t17r + c4 * t18r
    let y6i = t13i + c6 * t14i + c1 * t15i + c5 * t16i + c2 * t17i + c4 * t18i
    let y7r = c12 * t7r -
      c7 * t8r +
      c11 * t9r -
      c8 * t10r +
      c10 * t11r -
      c9 * t12r
    let y7i = c12 * t7i -
      c7 * t8i +
      c11 * t9i -
      c8 * t10i +
      c10 * t11i -
      c9 * t12i
    let y8r = c11 * t7r -
      c9 * t8r +
      c8 * t9r -
      c12 * t10r -
      c7 * t11r +
      c10 * t12r
    let y8i = c11 * t7i -
      c9 * t8i +
      c8 * t9i -
      c12 * t10i -
      c7 * t11i +
      c10 * t12i
    let y9r = c10 * t7r -
      c11 * t8r -
      c7 * t9r +
      c9 * t10r -
      c12 * t11r -
      c8 * t12r
    let y9i = c10 * t7i -
      c11 * t8i -
      c7 * t9i +
      c9 * t10i -
      c12 * t11i -
      c8 * t12i
    let y10r = c9 * t7r +
      c12 * t8r -
      c10 * t9r -
      c7 * t10r +
      c8 * t11r +
      c11 * t12r
    let y10i = c9 * t7i +
      c12 * t8i -
      c10 * t9i -
      c7 * t10i +
      c8 * t11i +
      c11 * t12i
    let y11r = c8 * t7r +
      c10 * t8r +
      c12 * t9r -
      c11 * t10r -
      c9 * t11r -
      c7 * t12r
    let y11i = c8 * t7i +
      c10 * t8i +
      c12 * t9i -
      c11 * t10i -
      c9 * t11i -
      c7 * t12i
    let y12r = c7 * t7r +
      c8 * t8r +
      c9 * t9r +
      c10 * t10r +
      c11 * t11r +
      c12 * t12r
    let y12i = c7 * t7i +
      c8 * t8i +
      c9 * t9i +
      c10 * t10i +
      c11 * t11i +
      c12 * t12i
    re[p0] = re[p0] + t1r + t2r + t3r + t4r + t5r + t6r
    im[p0] = im[p0] + t1i + t2i + t3i + t4i + t5i + t6i
    re[p1] = y1r - y12i
    im[p1] = y1i + y12r
    re[p2] = y2r - y11i
    im[p2] = y2i + y11r
    re[p3] = y3r - y10i
    im[p3] = y3i + y10r
    re[p4] = y4r - y9i
    im[p4] = y4i + y9r
    re[p5] = y5r - y8i
    im[p5] = y5i + y8r
    re[p6] = y6r - y7i
    im[p6] = y6i + y7r
    re[p7] = y6r + y7i
    im[p7] = y6i - y7r
    re[p8] = y5r + y8i
    im[p8] = y5i - y8r
    re[p9] = y4r + y9i
    im[p9] = y4i - y9r
    re[p10] = y3r + y10i
    im[p10] = y3i - y10r
    re[p11] = y2r + y11i
    im[p11] = y2i - y11r
    re[p12] = y1r + y12i
    im[p12] = y1i - y12r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    if p11 < limit {
      p11 = p11 + mr
    }
    p11 = p11 + delta
    if p12 < limit {
      p12 = p12 + mr
    }
    p12 = p12 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 13 stage of the prime factor
/// transform, for the twist 7.
///
/// This is the small transform of the original, `Pfacc.pfa13`,
/// with the twist 7.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r13_mu7(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 13
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 13)
  let mut p1 = m * (1 * kfac % 13)
  let mut p2 = m * (2 * kfac % 13)
  let mut p3 = m * (3 * kfac % 13)
  let mut p4 = m * (4 * kfac % 13)
  let mut p5 = m * (5 * kfac % 13)
  let mut p6 = m * (6 * kfac % 13)
  let mut p7 = m * (7 * kfac % 13)
  let mut p8 = m * (8 * kfac % 13)
  let mut p9 = m * (9 * kfac % 13)
  let mut p10 = m * (10 * kfac % 13)
  let mut p11 = m * (11 * kfac % 13)
  let mut p12 = m * (12 * kfac % 13)
  let c1 = -0.9709418174260516
  let c2 = 0.8854560256532134
  let c3 = -0.7485107481711009
  let c4 = 0.5680647467311528
  let c5 = -0.35460488704253945
  let c6 = 0.12053668025532438
  let c7 = -0.23931566428755804
  let c8 = 0.4647231720437657
  let c9 = -0.6631226582407956
  let c10 = 0.822983865893659
  let c11 = -0.9350162426854134
  let c12 = 0.992708874098054
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p12]
    let t1i = im[p1] + im[p12]
    let t2r = re[p2] + re[p11]
    let t2i = im[p2] + im[p11]
    let t3r = re[p3] + re[p10]
    let t3i = im[p3] + im[p10]
    let t4r = re[p4] + re[p9]
    let t4i = im[p4] + im[p9]
    let t5r = re[p5] + re[p8]
    let t5i = im[p5] + im[p8]
    let t6r = re[p6] + re[p7]
    let t6i = im[p6] + im[p7]
    let t7r = re[p1] - re[p12]
    let t7i = im[p1] - im[p12]
    let t8r = re[p2] - re[p11]
    let t8i = im[p2] - im[p11]
    let t9r = re[p3] - re[p10]
    let t9i = im[p3] - im[p10]
    let t10r = re[p4] - re[p9]
    let t10i = im[p4] - im[p9]
    let t11r = re[p5] - re[p8]
    let t11i = im[p5] - im[p8]
    let t12r = re[p6] - re[p7]
    let t12i = im[p6] - im[p7]
    let t13r = re[p0] - 0.5 * t6r
    let t13i = im[p0] - 0.5 * t6i
    let t14r = t1r - t6r
    let t14i = t1i - t6i
    let t15r = t2r - t6r
    let t15i = t2i - t6i
    let t16r = t3r - t6r
    let t16i = t3i - t6i
    let t17r = t4r - t6r
    let t17i = t4i - t6i
    let t18r = t5r - t6r
    let t18i = t5i - t6i
    let y1r = t13r + c1 * t14r + c2 * t15r + c3 * t16r + c4 * t17r + c5 * t18r
    let y1i = t13i + c1 * t14i + c2 * t15i + c3 * t16i + c4 * t17i + c5 * t18i
    let y2r = t13r + c2 * t14r + c4 * t15r + c6 * t16r + c5 * t17r + c3 * t18r
    let y2i = t13i + c2 * t14i + c4 * t15i + c6 * t16i + c5 * t17i + c3 * t18i
    let y3r = t13r + c3 * t14r + c6 * t15r + c4 * t16r + c1 * t17r + c2 * t18r
    let y3i = t13i + c3 * t14i + c6 * t15i + c4 * t16i + c1 * t17i + c2 * t18i
    let y4r = t13r + c4 * t14r + c5 * t15r + c1 * t16r + c3 * t17r + c6 * t18r
    let y4i = t13i + c4 * t14i + c5 * t15i + c1 * t16i + c3 * t17i + c6 * t18i
    let y5r = t13r + c5 * t14r + c3 * t15r + c2 * t16r + c6 * t17r + c1 * t18r
    let y5i = t13i + c5 * t14i + c3 * t15i + c2 * t16i + c6 * t17i + c1 * t18i
    let y6r = t13r + c6 * t14r + c1 * t15r + c5 * t16r + c2 * t17r + c4 * t18r
    let y6i = t13i + c6 * t14i + c1 * t15i + c5 * t16i + c2 * t17i + c4 * t18i
    let y7r = c12 * t7r -
      c7 * t8r +
      c11 * t9r -
      c8 * t10r +
      c10 * t11r -
      c9 * t12r
    let y7i = c12 * t7i -
      c7 * t8i +
      c11 * t9i -
      c8 * t10i +
      c10 * t11i -
      c9 * t12i
    let y8r = c11 * t7r -
      c9 * t8r +
      c8 * t9r -
      c12 * t10r -
      c7 * t11r +
      c10 * t12r
    let y8i = c11 * t7i -
      c9 * t8i +
      c8 * t9i -
      c12 * t10i -
      c7 * t11i +
      c10 * t12i
    let y9r = c10 * t7r -
      c11 * t8r -
      c7 * t9r +
      c9 * t10r -
      c12 * t11r -
      c8 * t12r
    let y9i = c10 * t7i -
      c11 * t8i -
      c7 * t9i +
      c9 * t10i -
      c12 * t11i -
      c8 * t12i
    let y10r = c9 * t7r +
      c12 * t8r -
      c10 * t9r -
      c7 * t10r +
      c8 * t11r +
      c11 * t12r
    let y10i = c9 * t7i +
      c12 * t8i -
      c10 * t9i -
      c7 * t10i +
      c8 * t11i +
      c11 * t12i
    let y11r = c8 * t7r +
      c10 * t8r +
      c12 * t9r -
      c11 * t10r -
      c9 * t11r -
      c7 * t12r
    let y11i = c8 * t7i +
      c10 * t8i +
      c12 * t9i -
      c11 * t10i -
      c9 * t11i -
      c7 * t12i
    let y12r = c7 * t7r +
      c8 * t8r +
      c9 * t9r +
      c10 * t10r +
      c11 * t11r +
      c12 * t12r
    let y12i = c7 * t7i +
      c8 * t8i +
      c9 * t9i +
      c10 * t10i +
      c11 * t11i +
      c12 * t12i
    re[p0] = re[p0] + t1r + t2r + t3r + t4r + t5r + t6r
    im[p0] = im[p0] + t1i + t2i + t3i + t4i + t5i + t6i
    re[p1] = y1r - y12i
    im[p1] = y1i + y12r
    re[p2] = y2r - y11i
    im[p2] = y2i + y11r
    re[p3] = y3r - y10i
    im[p3] = y3i + y10r
    re[p4] = y4r - y9i
    im[p4] = y4i + y9r
    re[p5] = y5r - y8i
    im[p5] = y5i + y8r
    re[p6] = y6r - y7i
    im[p6] = y6i + y7r
    re[p7] = y6r + y7i
    im[p7] = y6i - y7r
    re[p8] = y5r + y8i
    im[p8] = y5i - y8r
    re[p9] = y4r + y9i
    im[p9] = y4i - y9r
    re[p10] = y3r + y10i
    im[p10] = y3i - y10r
    re[p11] = y2r + y11i
    im[p11] = y2i - y11r
    re[p12] = y1r + y12i
    im[p12] = y1i - y12r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    if p11 < limit {
      p11 = p11 + mr
    }
    p11 = p11 + delta
    if p12 < limit {
      p12 = p12 + mr
    }
    p12 = p12 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 13 stage of the prime factor
/// transform, for the twist 8.
///
/// This is the small transform of the original, `Pfacc.pfa13`,
/// with the twist 8.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r13_mu8(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 13
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 13)
  let mut p1 = m * (1 * kfac % 13)
  let mut p2 = m * (2 * kfac % 13)
  let mut p3 = m * (3 * kfac % 13)
  let mut p4 = m * (4 * kfac % 13)
  let mut p5 = m * (5 * kfac % 13)
  let mut p6 = m * (6 * kfac % 13)
  let mut p7 = m * (7 * kfac % 13)
  let mut p8 = m * (8 * kfac % 13)
  let mut p9 = m * (9 * kfac % 13)
  let mut p10 = m * (10 * kfac % 13)
  let mut p11 = m * (11 * kfac % 13)
  let mut p12 = m * (12 * kfac % 13)
  let c1 = -0.7485107481711031
  let c2 = 0.12053668025532535
  let c3 = 0.568064746731155
  let c4 = -0.9709418174260506
  let c5 = 0.8854560256532079
  let c6 = -0.35460488704253773
  let c7 = -0.6631226582407944
  let c8 = 0.9927088740980536
  let c9 = -0.8229838658936565
  let c10 = 0.2393156642875659
  let c11 = 0.46472317204376956
  let c12 = -0.9350162426854149
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p12]
    let t1i = im[p1] + im[p12]
    let t2r = re[p2] + re[p11]
    let t2i = im[p2] + im[p11]
    let t3r = re[p3] + re[p10]
    let t3i = im[p3] + im[p10]
    let t4r = re[p4] + re[p9]
    let t4i = im[p4] + im[p9]
    let t5r = re[p5] + re[p8]
    let t5i = im[p5] + im[p8]
    let t6r = re[p6] + re[p7]
    let t6i = im[p6] + im[p7]
    let t7r = re[p1] - re[p12]
    let t7i = im[p1] - im[p12]
    let t8r = re[p2] - re[p11]
    let t8i = im[p2] - im[p11]
    let t9r = re[p3] - re[p10]
    let t9i = im[p3] - im[p10]
    let t10r = re[p4] - re[p9]
    let t10i = im[p4] - im[p9]
    let t11r = re[p5] - re[p8]
    let t11i = im[p5] - im[p8]
    let t12r = re[p6] - re[p7]
    let t12i = im[p6] - im[p7]
    let t13r = re[p0] - 0.5 * t6r
    let t13i = im[p0] - 0.5 * t6i
    let t14r = t1r - t6r
    let t14i = t1i - t6i
    let t15r = t2r - t6r
    let t15i = t2i - t6i
    let t16r = t3r - t6r
    let t16i = t3i - t6i
    let t17r = t4r - t6r
    let t17i = t4i - t6i
    let t18r = t5r - t6r
    let t18i = t5i - t6i
    let y1r = t13r + c1 * t14r + c2 * t15r + c3 * t16r + c4 * t17r + c5 * t18r
    let y1i = t13i + c1 * t14i + c2 * t15i + c3 * t16i + c4 * t17i + c5 * t18i
    let y2r = t13r + c2 * t14r + c4 * t15r + c6 * t16r + c5 * t17r + c3 * t18r
    let y2i = t13i + c2 * t14i + c4 * t15i + c6 * t16i + c5 * t17i + c3 * t18i
    let y3r = t13r + c3 * t14r + c6 * t15r + c4 * t16r + c1 * t17r + c2 * t18r
    let y3i = t13i + c3 * t14i + c6 * t15i + c4 * t16i + c1 * t17i + c2 * t18i
    let y4r = t13r + c4 * t14r + c5 * t15r + c1 * t16r + c3 * t17r + c6 * t18r
    let y4i = t13i + c4 * t14i + c5 * t15i + c1 * t16i + c3 * t17i + c6 * t18i
    let y5r = t13r + c5 * t14r + c3 * t15r + c2 * t16r + c6 * t17r + c1 * t18r
    let y5i = t13i + c5 * t14i + c3 * t15i + c2 * t16i + c6 * t17i + c1 * t18i
    let y6r = t13r + c6 * t14r + c1 * t15r + c5 * t16r + c2 * t17r + c4 * t18r
    let y6i = t13i + c6 * t14i + c1 * t15i + c5 * t16i + c2 * t17i + c4 * t18i
    let y7r = c12 * t7r -
      c7 * t8r +
      c11 * t9r -
      c8 * t10r +
      c10 * t11r -
      c9 * t12r
    let y7i = c12 * t7i -
      c7 * t8i +
      c11 * t9i -
      c8 * t10i +
      c10 * t11i -
      c9 * t12i
    let y8r = c11 * t7r -
      c9 * t8r +
      c8 * t9r -
      c12 * t10r -
      c7 * t11r +
      c10 * t12r
    let y8i = c11 * t7i -
      c9 * t8i +
      c8 * t9i -
      c12 * t10i -
      c7 * t11i +
      c10 * t12i
    let y9r = c10 * t7r -
      c11 * t8r -
      c7 * t9r +
      c9 * t10r -
      c12 * t11r -
      c8 * t12r
    let y9i = c10 * t7i -
      c11 * t8i -
      c7 * t9i +
      c9 * t10i -
      c12 * t11i -
      c8 * t12i
    let y10r = c9 * t7r +
      c12 * t8r -
      c10 * t9r -
      c7 * t10r +
      c8 * t11r +
      c11 * t12r
    let y10i = c9 * t7i +
      c12 * t8i -
      c10 * t9i -
      c7 * t10i +
      c8 * t11i +
      c11 * t12i
    let y11r = c8 * t7r +
      c10 * t8r +
      c12 * t9r -
      c11 * t10r -
      c9 * t11r -
      c7 * t12r
    let y11i = c8 * t7i +
      c10 * t8i +
      c12 * t9i -
      c11 * t10i -
      c9 * t11i -
      c7 * t12i
    let y12r = c7 * t7r +
      c8 * t8r +
      c9 * t9r +
      c10 * t10r +
      c11 * t11r +
      c12 * t12r
    let y12i = c7 * t7i +
      c8 * t8i +
      c9 * t9i +
      c10 * t10i +
      c11 * t11i +
      c12 * t12i
    re[p0] = re[p0] + t1r + t2r + t3r + t4r + t5r + t6r
    im[p0] = im[p0] + t1i + t2i + t3i + t4i + t5i + t6i
    re[p1] = y1r - y12i
    im[p1] = y1i + y12r
    re[p2] = y2r - y11i
    im[p2] = y2i + y11r
    re[p3] = y3r - y10i
    im[p3] = y3i + y10r
    re[p4] = y4r - y9i
    im[p4] = y4i + y9r
    re[p5] = y5r - y8i
    im[p5] = y5i + y8r
    re[p6] = y6r - y7i
    im[p6] = y6i + y7r
    re[p7] = y6r + y7i
    im[p7] = y6i - y7r
    re[p8] = y5r + y8i
    im[p8] = y5i - y8r
    re[p9] = y4r + y9i
    im[p9] = y4i - y9r
    re[p10] = y3r + y10i
    im[p10] = y3i - y10r
    re[p11] = y2r + y11i
    im[p11] = y2i - y11r
    re[p12] = y1r + y12i
    im[p12] = y1i - y12r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    if p11 < limit {
      p11 = p11 + mr
    }
    p11 = p11 + delta
    if p12 < limit {
      p12 = p12 + mr
    }
    p12 = p12 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 13 stage of the prime factor
/// transform, for the twist 9.
///
/// This is the small transform of the original, `Pfacc.pfa13`,
/// with the twist 9.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r13_mu9(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 13
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 13)
  let mut p1 = m * (1 * kfac % 13)
  let mut p2 = m * (2 * kfac % 13)
  let mut p3 = m * (3 * kfac % 13)
  let mut p4 = m * (4 * kfac % 13)
  let mut p5 = m * (5 * kfac % 13)
  let mut p6 = m * (6 * kfac % 13)
  let mut p7 = m * (7 * kfac % 13)
  let mut p8 = m * (8 * kfac % 13)
  let mut p9 = m * (9 * kfac % 13)
  let mut p10 = m * (10 * kfac % 13)
  let mut p11 = m * (11 * kfac % 13)
  let mut p12 = m * (12 * kfac % 13)
  let c1 = -0.3546048870425366
  let c2 = -0.7485107481711044
  let c3 = 0.8854560256532115
  let c4 = 0.12053668025532421
  let c5 = -0.9709418174260523
  let c6 = 0.5680647467311557
  let c7 = -0.9350162426854147
  let c8 = 0.6631226582407934
  let c9 = 0.46472317204376545
  let c10 = -0.9927088740980539
  let c11 = 0.23931566428755724
  let c12 = 0.8229838658936567
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p12]
    let t1i = im[p1] + im[p12]
    let t2r = re[p2] + re[p11]
    let t2i = im[p2] + im[p11]
    let t3r = re[p3] + re[p10]
    let t3i = im[p3] + im[p10]
    let t4r = re[p4] + re[p9]
    let t4i = im[p4] + im[p9]
    let t5r = re[p5] + re[p8]
    let t5i = im[p5] + im[p8]
    let t6r = re[p6] + re[p7]
    let t6i = im[p6] + im[p7]
    let t7r = re[p1] - re[p12]
    let t7i = im[p1] - im[p12]
    let t8r = re[p2] - re[p11]
    let t8i = im[p2] - im[p11]
    let t9r = re[p3] - re[p10]
    let t9i = im[p3] - im[p10]
    let t10r = re[p4] - re[p9]
    let t10i = im[p4] - im[p9]
    let t11r = re[p5] - re[p8]
    let t11i = im[p5] - im[p8]
    let t12r = re[p6] - re[p7]
    let t12i = im[p6] - im[p7]
    let t13r = re[p0] - 0.5 * t6r
    let t13i = im[p0] - 0.5 * t6i
    let t14r = t1r - t6r
    let t14i = t1i - t6i
    let t15r = t2r - t6r
    let t15i = t2i - t6i
    let t16r = t3r - t6r
    let t16i = t3i - t6i
    let t17r = t4r - t6r
    let t17i = t4i - t6i
    let t18r = t5r - t6r
    let t18i = t5i - t6i
    let y1r = t13r + c1 * t14r + c2 * t15r + c3 * t16r + c4 * t17r + c5 * t18r
    let y1i = t13i + c1 * t14i + c2 * t15i + c3 * t16i + c4 * t17i + c5 * t18i
    let y2r = t13r + c2 * t14r + c4 * t15r + c6 * t16r + c5 * t17r + c3 * t18r
    let y2i = t13i + c2 * t14i + c4 * t15i + c6 * t16i + c5 * t17i + c3 * t18i
    let y3r = t13r + c3 * t14r + c6 * t15r + c4 * t16r + c1 * t17r + c2 * t18r
    let y3i = t13i + c3 * t14i + c6 * t15i + c4 * t16i + c1 * t17i + c2 * t18i
    let y4r = t13r + c4 * t14r + c5 * t15r + c1 * t16r + c3 * t17r + c6 * t18r
    let y4i = t13i + c4 * t14i + c5 * t15i + c1 * t16i + c3 * t17i + c6 * t18i
    let y5r = t13r + c5 * t14r + c3 * t15r + c2 * t16r + c6 * t17r + c1 * t18r
    let y5i = t13i + c5 * t14i + c3 * t15i + c2 * t16i + c6 * t17i + c1 * t18i
    let y6r = t13r + c6 * t14r + c1 * t15r + c5 * t16r + c2 * t17r + c4 * t18r
    let y6i = t13i + c6 * t14i + c1 * t15i + c5 * t16i + c2 * t17i + c4 * t18i
    let y7r = c12 * t7r -
      c7 * t8r +
      c11 * t9r -
      c8 * t10r +
      c10 * t11r -
      c9 * t12r
    let y7i = c12 * t7i -
      c7 * t8i +
      c11 * t9i -
      c8 * t10i +
      c10 * t11i -
      c9 * t12i
    let y8r = c11 * t7r -
      c9 * t8r +
      c8 * t9r -
      c12 * t10r -
      c7 * t11r +
      c10 * t12r
    let y8i = c11 * t7i -
      c9 * t8i +
      c8 * t9i -
      c12 * t10i -
      c7 * t11i +
      c10 * t12i
    let y9r = c10 * t7r -
      c11 * t8r -
      c7 * t9r +
      c9 * t10r -
      c12 * t11r -
      c8 * t12r
    let y9i = c10 * t7i -
      c11 * t8i -
      c7 * t9i +
      c9 * t10i -
      c12 * t11i -
      c8 * t12i
    let y10r = c9 * t7r +
      c12 * t8r -
      c10 * t9r -
      c7 * t10r +
      c8 * t11r +
      c11 * t12r
    let y10i = c9 * t7i +
      c12 * t8i -
      c10 * t9i -
      c7 * t10i +
      c8 * t11i +
      c11 * t12i
    let y11r = c8 * t7r +
      c10 * t8r +
      c12 * t9r -
      c11 * t10r -
      c9 * t11r -
      c7 * t12r
    let y11i = c8 * t7i +
      c10 * t8i +
      c12 * t9i -
      c11 * t10i -
      c9 * t11i -
      c7 * t12i
    let y12r = c7 * t7r +
      c8 * t8r +
      c9 * t9r +
      c10 * t10r +
      c11 * t11r +
      c12 * t12r
    let y12i = c7 * t7i +
      c8 * t8i +
      c9 * t9i +
      c10 * t10i +
      c11 * t11i +
      c12 * t12i
    re[p0] = re[p0] + t1r + t2r + t3r + t4r + t5r + t6r
    im[p0] = im[p0] + t1i + t2i + t3i + t4i + t5i + t6i
    re[p1] = y1r - y12i
    im[p1] = y1i + y12r
    re[p2] = y2r - y11i
    im[p2] = y2i + y11r
    re[p3] = y3r - y10i
    im[p3] = y3i + y10r
    re[p4] = y4r - y9i
    im[p4] = y4i + y9r
    re[p5] = y5r - y8i
    im[p5] = y5i + y8r
    re[p6] = y6r - y7i
    im[p6] = y6i + y7r
    re[p7] = y6r + y7i
    im[p7] = y6i - y7r
    re[p8] = y5r + y8i
    im[p8] = y5i - y8r
    re[p9] = y4r + y9i
    im[p9] = y4i - y9r
    re[p10] = y3r + y10i
    im[p10] = y3i - y10r
    re[p11] = y2r + y11i
    im[p11] = y2i - y11r
    re[p12] = y1r + y12i
    im[p12] = y1i - y12r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    if p11 < limit {
      p11 = p11 + mr
    }
    p11 = p11 + delta
    if p12 < limit {
      p12 = p12 + mr
    }
    p12 = p12 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 13 stage of the prime factor
/// transform, for the twist 10.
///
/// This is the small transform of the original, `Pfacc.pfa13`,
/// with the twist 10.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r13_mu10(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 13
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 13)
  let mut p1 = m * (1 * kfac % 13)
  let mut p2 = m * (2 * kfac % 13)
  let mut p3 = m * (3 * kfac % 13)
  let mut p4 = m * (4 * kfac % 13)
  let mut p5 = m * (5 * kfac % 13)
  let mut p6 = m * (6 * kfac % 13)
  let mut p7 = m * (7 * kfac % 13)
  let mut p8 = m * (8 * kfac % 13)
  let mut p9 = m * (9 * kfac % 13)
  let mut p10 = m * (10 * kfac % 13)
  let mut p11 = m * (11 * kfac % 13)
  let mut p12 = m * (12 * kfac % 13)
  let c1 = 0.12053668025532228
  let c2 = -0.9709418174260511
  let c3 = -0.3546048870425389
  let c4 = 0.8854560256532104
  let c5 = 0.5680647467311516
  let c6 = -0.7485107481710985
  let c7 = -0.9927088740980544
  let c8 = -0.23931566428755974
  let c9 = 0.9350162426854134
  let c10 = 0.4647231720437689
  let c11 = -0.8229838658936602
  let c12 = -0.6631226582407989
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p12]
    let t1i = im[p1] + im[p12]
    let t2r = re[p2] + re[p11]
    let t2i = im[p2] + im[p11]
    let t3r = re[p3] + re[p10]
    let t3i = im[p3] + im[p10]
    let t4r = re[p4] + re[p9]
    let t4i = im[p4] + im[p9]
    let t5r = re[p5] + re[p8]
    let t5i = im[p5] + im[p8]
    let t6r = re[p6] + re[p7]
    let t6i = im[p6] + im[p7]
    let t7r = re[p1] - re[p12]
    let t7i = im[p1] - im[p12]
    let t8r = re[p2] - re[p11]
    let t8i = im[p2] - im[p11]
    let t9r = re[p3] - re[p10]
    let t9i = im[p3] - im[p10]
    let t10r = re[p4] - re[p9]
    let t10i = im[p4] - im[p9]
    let t11r = re[p5] - re[p8]
    let t11i = im[p5] - im[p8]
    let t12r = re[p6] - re[p7]
    let t12i = im[p6] - im[p7]
    let t13r = re[p0] - 0.5 * t6r
    let t13i = im[p0] - 0.5 * t6i
    let t14r = t1r - t6r
    let t14i = t1i - t6i
    let t15r = t2r - t6r
    let t15i = t2i - t6i
    let t16r = t3r - t6r
    let t16i = t3i - t6i
    let t17r = t4r - t6r
    let t17i = t4i - t6i
    let t18r = t5r - t6r
    let t18i = t5i - t6i
    let y1r = t13r + c1 * t14r + c2 * t15r + c3 * t16r + c4 * t17r + c5 * t18r
    let y1i = t13i + c1 * t14i + c2 * t15i + c3 * t16i + c4 * t17i + c5 * t18i
    let y2r = t13r + c2 * t14r + c4 * t15r + c6 * t16r + c5 * t17r + c3 * t18r
    let y2i = t13i + c2 * t14i + c4 * t15i + c6 * t16i + c5 * t17i + c3 * t18i
    let y3r = t13r + c3 * t14r + c6 * t15r + c4 * t16r + c1 * t17r + c2 * t18r
    let y3i = t13i + c3 * t14i + c6 * t15i + c4 * t16i + c1 * t17i + c2 * t18i
    let y4r = t13r + c4 * t14r + c5 * t15r + c1 * t16r + c3 * t17r + c6 * t18r
    let y4i = t13i + c4 * t14i + c5 * t15i + c1 * t16i + c3 * t17i + c6 * t18i
    let y5r = t13r + c5 * t14r + c3 * t15r + c2 * t16r + c6 * t17r + c1 * t18r
    let y5i = t13i + c5 * t14i + c3 * t15i + c2 * t16i + c6 * t17i + c1 * t18i
    let y6r = t13r + c6 * t14r + c1 * t15r + c5 * t16r + c2 * t17r + c4 * t18r
    let y6i = t13i + c6 * t14i + c1 * t15i + c5 * t16i + c2 * t17i + c4 * t18i
    let y7r = c12 * t7r -
      c7 * t8r +
      c11 * t9r -
      c8 * t10r +
      c10 * t11r -
      c9 * t12r
    let y7i = c12 * t7i -
      c7 * t8i +
      c11 * t9i -
      c8 * t10i +
      c10 * t11i -
      c9 * t12i
    let y8r = c11 * t7r -
      c9 * t8r +
      c8 * t9r -
      c12 * t10r -
      c7 * t11r +
      c10 * t12r
    let y8i = c11 * t7i -
      c9 * t8i +
      c8 * t9i -
      c12 * t10i -
      c7 * t11i +
      c10 * t12i
    let y9r = c10 * t7r -
      c11 * t8r -
      c7 * t9r +
      c9 * t10r -
      c12 * t11r -
      c8 * t12r
    let y9i = c10 * t7i -
      c11 * t8i -
      c7 * t9i +
      c9 * t10i -
      c12 * t11i -
      c8 * t12i
    let y10r = c9 * t7r +
      c12 * t8r -
      c10 * t9r -
      c7 * t10r +
      c8 * t11r +
      c11 * t12r
    let y10i = c9 * t7i +
      c12 * t8i -
      c10 * t9i -
      c7 * t10i +
      c8 * t11i +
      c11 * t12i
    let y11r = c8 * t7r +
      c10 * t8r +
      c12 * t9r -
      c11 * t10r -
      c9 * t11r -
      c7 * t12r
    let y11i = c8 * t7i +
      c10 * t8i +
      c12 * t9i -
      c11 * t10i -
      c9 * t11i -
      c7 * t12i
    let y12r = c7 * t7r +
      c8 * t8r +
      c9 * t9r +
      c10 * t10r +
      c11 * t11r +
      c12 * t12r
    let y12i = c7 * t7i +
      c8 * t8i +
      c9 * t9i +
      c10 * t10i +
      c11 * t11i +
      c12 * t12i
    re[p0] = re[p0] + t1r + t2r + t3r + t4r + t5r + t6r
    im[p0] = im[p0] + t1i + t2i + t3i + t4i + t5i + t6i
    re[p1] = y1r - y12i
    im[p1] = y1i + y12r
    re[p2] = y2r - y11i
    im[p2] = y2i + y11r
    re[p3] = y3r - y10i
    im[p3] = y3i + y10r
    re[p4] = y4r - y9i
    im[p4] = y4i + y9r
    re[p5] = y5r - y8i
    im[p5] = y5i + y8r
    re[p6] = y6r - y7i
    im[p6] = y6i + y7r
    re[p7] = y6r + y7i
    im[p7] = y6i - y7r
    re[p8] = y5r + y8i
    im[p8] = y5i - y8r
    re[p9] = y4r + y9i
    im[p9] = y4i - y9r
    re[p10] = y3r + y10i
    im[p10] = y3i - y10r
    re[p11] = y2r + y11i
    im[p11] = y2i - y11r
    re[p12] = y1r + y12i
    im[p12] = y1i - y12r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    if p11 < limit {
      p11 = p11 + mr
    }
    p11 = p11 + delta
    if p12 < limit {
      p12 = p12 + mr
    }
    p12 = p12 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 13 stage of the prime factor
/// transform, for the twist 11.
///
/// This is the small transform of the original, `Pfacc.pfa13`,
/// with the twist 11.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r13_mu11(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 13
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 13)
  let mut p1 = m * (1 * kfac % 13)
  let mut p2 = m * (2 * kfac % 13)
  let mut p3 = m * (3 * kfac % 13)
  let mut p4 = m * (4 * kfac % 13)
  let mut p5 = m * (5 * kfac % 13)
  let mut p6 = m * (6 * kfac % 13)
  let mut p7 = m * (7 * kfac % 13)
  let mut p8 = m * (8 * kfac % 13)
  let mut p9 = m * (9 * kfac % 13)
  let mut p10 = m * (10 * kfac % 13)
  let mut p11 = m * (11 * kfac % 13)
  let mut p12 = m * (12 * kfac % 13)
  let c1 = 0.568064746731161
  let c2 = -0.35460488704254167
  let c3 = -0.9709418174260546
  let c4 = -0.748510748171095
  let c5 = 0.12053668025531439
  let c6 = 0.8854560256532136
  let c7 = -0.8229838658936527
  let c8 = -0.9350162426854127
  let c9 = -0.23931566428755396
  let c10 = 0.6631226582408032
  let c11 = 0.992708874098055
  let c12 = 0.46472317204376307
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p12]
    let t1i = im[p1] + im[p12]
    let t2r = re[p2] + re[p11]
    let t2i = im[p2] + im[p11]
    let t3r = re[p3] + re[p10]
    let t3i = im[p3] + im[p10]
    let t4r = re[p4] + re[p9]
    let t4i = im[p4] + im[p9]
    let t5r = re[p5] + re[p8]
    let t5i = im[p5] + im[p8]
    let t6r = re[p6] + re[p7]
    let t6i = im[p6] + im[p7]
    let t7r = re[p1] - re[p12]
    let t7i = im[p1] - im[p12]
    let t8r = re[p2] - re[p11]
    let t8i = im[p2] - im[p11]
    let t9r = re[p3] - re[p10]
    let t9i = im[p3] - im[p10]
    let t10r = re[p4] - re[p9]
    let t10i = im[p4] - im[p9]
    let t11r = re[p5] - re[p8]
    let t11i = im[p5] - im[p8]
    let t12r = re[p6] - re[p7]
    let t12i = im[p6] - im[p7]
    let t13r = re[p0] - 0.5 * t6r
    let t13i = im[p0] - 0.5 * t6i
    let t14r = t1r - t6r
    let t14i = t1i - t6i
    let t15r = t2r - t6r
    let t15i = t2i - t6i
    let t16r = t3r - t6r
    let t16i = t3i - t6i
    let t17r = t4r - t6r
    let t17i = t4i - t6i
    let t18r = t5r - t6r
    let t18i = t5i - t6i
    let y1r = t13r + c1 * t14r + c2 * t15r + c3 * t16r + c4 * t17r + c5 * t18r
    let y1i = t13i + c1 * t14i + c2 * t15i + c3 * t16i + c4 * t17i + c5 * t18i
    let y2r = t13r + c2 * t14r + c4 * t15r + c6 * t16r + c5 * t17r + c3 * t18r
    let y2i = t13i + c2 * t14i + c4 * t15i + c6 * t16i + c5 * t17i + c3 * t18i
    let y3r = t13r + c3 * t14r + c6 * t15r + c4 * t16r + c1 * t17r + c2 * t18r
    let y3i = t13i + c3 * t14i + c6 * t15i + c4 * t16i + c1 * t17i + c2 * t18i
    let y4r = t13r + c4 * t14r + c5 * t15r + c1 * t16r + c3 * t17r + c6 * t18r
    let y4i = t13i + c4 * t14i + c5 * t15i + c1 * t16i + c3 * t17i + c6 * t18i
    let y5r = t13r + c5 * t14r + c3 * t15r + c2 * t16r + c6 * t17r + c1 * t18r
    let y5i = t13i + c5 * t14i + c3 * t15i + c2 * t16i + c6 * t17i + c1 * t18i
    let y6r = t13r + c6 * t14r + c1 * t15r + c5 * t16r + c2 * t17r + c4 * t18r
    let y6i = t13i + c6 * t14i + c1 * t15i + c5 * t16i + c2 * t17i + c4 * t18i
    let y7r = c12 * t7r -
      c7 * t8r +
      c11 * t9r -
      c8 * t10r +
      c10 * t11r -
      c9 * t12r
    let y7i = c12 * t7i -
      c7 * t8i +
      c11 * t9i -
      c8 * t10i +
      c10 * t11i -
      c9 * t12i
    let y8r = c11 * t7r -
      c9 * t8r +
      c8 * t9r -
      c12 * t10r -
      c7 * t11r +
      c10 * t12r
    let y8i = c11 * t7i -
      c9 * t8i +
      c8 * t9i -
      c12 * t10i -
      c7 * t11i +
      c10 * t12i
    let y9r = c10 * t7r -
      c11 * t8r -
      c7 * t9r +
      c9 * t10r -
      c12 * t11r -
      c8 * t12r
    let y9i = c10 * t7i -
      c11 * t8i -
      c7 * t9i +
      c9 * t10i -
      c12 * t11i -
      c8 * t12i
    let y10r = c9 * t7r +
      c12 * t8r -
      c10 * t9r -
      c7 * t10r +
      c8 * t11r +
      c11 * t12r
    let y10i = c9 * t7i +
      c12 * t8i -
      c10 * t9i -
      c7 * t10i +
      c8 * t11i +
      c11 * t12i
    let y11r = c8 * t7r +
      c10 * t8r +
      c12 * t9r -
      c11 * t10r -
      c9 * t11r -
      c7 * t12r
    let y11i = c8 * t7i +
      c10 * t8i +
      c12 * t9i -
      c11 * t10i -
      c9 * t11i -
      c7 * t12i
    let y12r = c7 * t7r +
      c8 * t8r +
      c9 * t9r +
      c10 * t10r +
      c11 * t11r +
      c12 * t12r
    let y12i = c7 * t7i +
      c8 * t8i +
      c9 * t9i +
      c10 * t10i +
      c11 * t11i +
      c12 * t12i
    re[p0] = re[p0] + t1r + t2r + t3r + t4r + t5r + t6r
    im[p0] = im[p0] + t1i + t2i + t3i + t4i + t5i + t6i
    re[p1] = y1r - y12i
    im[p1] = y1i + y12r
    re[p2] = y2r - y11i
    im[p2] = y2i + y11r
    re[p3] = y3r - y10i
    im[p3] = y3i + y10r
    re[p4] = y4r - y9i
    im[p4] = y4i + y9r
    re[p5] = y5r - y8i
    im[p5] = y5i + y8r
    re[p6] = y6r - y7i
    im[p6] = y6i + y7r
    re[p7] = y6r + y7i
    im[p7] = y6i - y7r
    re[p8] = y5r + y8i
    im[p8] = y5i - y8r
    re[p9] = y4r + y9i
    im[p9] = y4i - y9r
    re[p10] = y3r + y10i
    im[p10] = y3i - y10r
    re[p11] = y2r + y11i
    im[p11] = y2i - y11r
    re[p12] = y1r + y12i
    im[p12] = y1i - y12r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    if p11 < limit {
      p11 = p11 + mr
    }
    p11 = p11 + delta
    if p12 < limit {
      p12 = p12 + mr
    }
    p12 = p12 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 13 stage of the prime factor
/// transform, for the twist 12.
///
/// This is the small transform of the original, `Pfacc.pfa13`,
/// with the twist 12.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r13_mu12(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 13
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 13)
  let mut p1 = m * (1 * kfac % 13)
  let mut p2 = m * (2 * kfac % 13)
  let mut p3 = m * (3 * kfac % 13)
  let mut p4 = m * (4 * kfac % 13)
  let mut p5 = m * (5 * kfac % 13)
  let mut p6 = m * (6 * kfac % 13)
  let mut p7 = m * (7 * kfac % 13)
  let mut p8 = m * (8 * kfac % 13)
  let mut p9 = m * (9 * kfac % 13)
  let mut p10 = m * (10 * kfac % 13)
  let mut p11 = m * (11 * kfac % 13)
  let mut p12 = m * (12 * kfac % 13)
  let c1 = 0.8854560256532086
  let c2 = 0.5680647467311549
  let c3 = 0.1205366802553218
  let c4 = -0.3546048870425315
  let c5 = -0.7485107481711032
  let c6 = -0.9709418174260542
  let c7 = -0.464723172043769
  let c8 = -0.8229838658936559
  let c9 = -0.9927088740980541
  let c10 = -0.9350162426854167
  let c11 = -0.6631226582407946
  let c12 = -0.2393156642875614
  let mut i = 0
  while i < m {
    let t1r = re[p1] + re[p12]
    let t1i = im[p1] + im[p12]
    let t2r = re[p2] + re[p11]
    let t2i = im[p2] + im[p11]
    let t3r = re[p3] + re[p10]
    let t3i = im[p3] + im[p10]
    let t4r = re[p4] + re[p9]
    let t4i = im[p4] + im[p9]
    let t5r = re[p5] + re[p8]
    let t5i = im[p5] + im[p8]
    let t6r = re[p6] + re[p7]
    let t6i = im[p6] + im[p7]
    let t7r = re[p1] - re[p12]
    let t7i = im[p1] - im[p12]
    let t8r = re[p2] - re[p11]
    let t8i = im[p2] - im[p11]
    let t9r = re[p3] - re[p10]
    let t9i = im[p3] - im[p10]
    let t10r = re[p4] - re[p9]
    let t10i = im[p4] - im[p9]
    let t11r = re[p5] - re[p8]
    let t11i = im[p5] - im[p8]
    let t12r = re[p6] - re[p7]
    let t12i = im[p6] - im[p7]
    let t13r = re[p0] - 0.5 * t6r
    let t13i = im[p0] - 0.5 * t6i
    let t14r = t1r - t6r
    let t14i = t1i - t6i
    let t15r = t2r - t6r
    let t15i = t2i - t6i
    let t16r = t3r - t6r
    let t16i = t3i - t6i
    let t17r = t4r - t6r
    let t17i = t4i - t6i
    let t18r = t5r - t6r
    let t18i = t5i - t6i
    let y1r = t13r + c1 * t14r + c2 * t15r + c3 * t16r + c4 * t17r + c5 * t18r
    let y1i = t13i + c1 * t14i + c2 * t15i + c3 * t16i + c4 * t17i + c5 * t18i
    let y2r = t13r + c2 * t14r + c4 * t15r + c6 * t16r + c5 * t17r + c3 * t18r
    let y2i = t13i + c2 * t14i + c4 * t15i + c6 * t16i + c5 * t17i + c3 * t18i
    let y3r = t13r + c3 * t14r + c6 * t15r + c4 * t16r + c1 * t17r + c2 * t18r
    let y3i = t13i + c3 * t14i + c6 * t15i + c4 * t16i + c1 * t17i + c2 * t18i
    let y4r = t13r + c4 * t14r + c5 * t15r + c1 * t16r + c3 * t17r + c6 * t18r
    let y4i = t13i + c4 * t14i + c5 * t15i + c1 * t16i + c3 * t17i + c6 * t18i
    let y5r = t13r + c5 * t14r + c3 * t15r + c2 * t16r + c6 * t17r + c1 * t18r
    let y5i = t13i + c5 * t14i + c3 * t15i + c2 * t16i + c6 * t17i + c1 * t18i
    let y6r = t13r + c6 * t14r + c1 * t15r + c5 * t16r + c2 * t17r + c4 * t18r
    let y6i = t13i + c6 * t14i + c1 * t15i + c5 * t16i + c2 * t17i + c4 * t18i
    let y7r = c12 * t7r -
      c7 * t8r +
      c11 * t9r -
      c8 * t10r +
      c10 * t11r -
      c9 * t12r
    let y7i = c12 * t7i -
      c7 * t8i +
      c11 * t9i -
      c8 * t10i +
      c10 * t11i -
      c9 * t12i
    let y8r = c11 * t7r -
      c9 * t8r +
      c8 * t9r -
      c12 * t10r -
      c7 * t11r +
      c10 * t12r
    let y8i = c11 * t7i -
      c9 * t8i +
      c8 * t9i -
      c12 * t10i -
      c7 * t11i +
      c10 * t12i
    let y9r = c10 * t7r -
      c11 * t8r -
      c7 * t9r +
      c9 * t10r -
      c12 * t11r -
      c8 * t12r
    let y9i = c10 * t7i -
      c11 * t8i -
      c7 * t9i +
      c9 * t10i -
      c12 * t11i -
      c8 * t12i
    let y10r = c9 * t7r +
      c12 * t8r -
      c10 * t9r -
      c7 * t10r +
      c8 * t11r +
      c11 * t12r
    let y10i = c9 * t7i +
      c12 * t8i -
      c10 * t9i -
      c7 * t10i +
      c8 * t11i +
      c11 * t12i
    let y11r = c8 * t7r +
      c10 * t8r +
      c12 * t9r -
      c11 * t10r -
      c9 * t11r -
      c7 * t12r
    let y11i = c8 * t7i +
      c10 * t8i +
      c12 * t9i -
      c11 * t10i -
      c9 * t11i -
      c7 * t12i
    let y12r = c7 * t7r +
      c8 * t8r +
      c9 * t9r +
      c10 * t10r +
      c11 * t11r +
      c12 * t12r
    let y12i = c7 * t7i +
      c8 * t8i +
      c9 * t9i +
      c10 * t10i +
      c11 * t11i +
      c12 * t12i
    re[p0] = re[p0] + t1r + t2r + t3r + t4r + t5r + t6r
    im[p0] = im[p0] + t1i + t2i + t3i + t4i + t5i + t6i
    re[p1] = y1r - y12i
    im[p1] = y1i + y12r
    re[p2] = y2r - y11i
    im[p2] = y2i + y11r
    re[p3] = y3r - y10i
    im[p3] = y3i + y10r
    re[p4] = y4r - y9i
    im[p4] = y4i + y9r
    re[p5] = y5r - y8i
    im[p5] = y5i + y8r
    re[p6] = y6r - y7i
    im[p6] = y6i + y7r
    re[p7] = y6r + y7i
    im[p7] = y6i - y7r
    re[p8] = y5r + y8i
    im[p8] = y5i - y8r
    re[p9] = y4r + y9i
    im[p9] = y4i - y9r
    re[p10] = y3r + y10i
    im[p10] = y3i - y10r
    re[p11] = y2r + y11i
    im[p11] = y2i - y11r
    re[p12] = y1r + y12i
    im[p12] = y1i - y12r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    if p11 < limit {
      p11 = p11 + mr
    }
    p11 = p11 + delta
    if p12 < limit {
      p12 = p12 + mr
    }
    p12 = p12 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 16 stage of the prime factor
/// transform, for the twist 1.
///
/// This is the small transform of the original, `Pfacc.pfa16`,
/// with the twist 1.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r16_mu1(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 16
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 16)
  let mut p1 = m * (1 * kfac % 16)
  let mut p2 = m * (2 * kfac % 16)
  let mut p3 = m * (3 * kfac % 16)
  let mut p4 = m * (4 * kfac % 16)
  let mut p5 = m * (5 * kfac % 16)
  let mut p6 = m * (6 * kfac % 16)
  let mut p7 = m * (7 * kfac % 16)
  let mut p8 = m * (8 * kfac % 16)
  let mut p9 = m * (9 * kfac % 16)
  let mut p10 = m * (10 * kfac % 16)
  let mut p11 = m * (11 * kfac % 16)
  let mut p12 = m * (12 * kfac % 16)
  let mut p13 = m * (13 * kfac % 16)
  let mut p14 = m * (14 * kfac % 16)
  let mut p15 = m * (15 * kfac % 16)
  let c1 = 1.0
  let c2 = 0.9238795325112865
  let c3 = 0.3826834323650896
  let c4 = 0.7071067811865475
  let c5 = 0.7071067811865475
  let c6 = 0.3826834323650896
  let c7 = 0.9238795325112865
  let mut i = 0
  while i < m {
    let t1r = re[p0] + re[p8]
    let t1i = im[p0] + im[p8]
    let t2r = re[p4] + re[p12]
    let t2i = im[p4] + im[p12]
    let t3r = re[p0] - re[p8]
    let t3i = im[p0] - im[p8]
    let t4r = c1 * (re[p4] - re[p12])
    let t4i = c1 * (im[p4] - im[p12])
    let t5r = t1r + t2r
    let t5i = t1i + t2i
    let t6r = t1r - t2r
    let t6i = t1i - t2i
    let t7r = re[p1] + re[p9]
    let t7i = im[p1] + im[p9]
    let t8r = re[p5] + re[p13]
    let t8i = im[p5] + im[p13]
    let t9r = re[p1] - re[p9]
    let t9i = im[p1] - im[p9]
    let t10r = re[p5] - re[p13]
    let t10i = im[p5] - im[p13]
    let t11r = t7r + t8r
    let t11i = t7i + t8i
    let t12r = t7r - t8r
    let t12i = t7i - t8i
    let t13r = re[p2] + re[p10]
    let t13i = im[p2] + im[p10]
    let t14r = re[p6] + re[p14]
    let t14i = im[p6] + im[p14]
    let t15r = re[p2] - re[p10]
    let t15i = im[p2] - im[p10]
    let t16r = re[p6] - re[p14]
    let t16i = im[p6] - im[p14]
    let t17r = t13r + t14r
    let t17i = t13i + t14i
    let t18r = c4 * (t15r - t16r)
    let t18i = c4 * (t15i - t16i)
    let t19r = c5 * (t15r + t16r)
    let t19i = c5 * (t15i + t16i)
    let t20r = c1 * (t13r - t14r)
    let t20i = c1 * (t13i - t14i)
    let t21r = re[p3] + re[p11]
    let t21i = im[p3] + im[p11]
    let t22r = re[p7] + re[p15]
    let t22i = im[p7] + im[p15]
    let t23r = re[p3] - re[p11]
    let t23i = im[p3] - im[p11]
    let t24r = re[p7] - re[p15]
    let t24i = im[p7] - im[p15]
    let t25r = t21r + t22r
    let t25i = t21i + t22i
    let t26r = t21r - t22r
    let t26i = t21i - t22i
    let t27r = t9r + t24r
    let t27i = t9i + t24i
    let t28r = t10r + t23r
    let t28i = t10i + t23i
    let t29r = t9r - t24r
    let t29i = t9i - t24i
    let t30r = t10r - t23r
    let t30i = t10i - t23i
    let t31r = t5r + t17r
    let t31i = t5i + t17i
    let t32r = t11r + t25r
    let t32i = t11i + t25i
    let t33r = t3r + t18r
    let t33i = t3i + t18i
    let t34r = c2 * t29r - c6 * t30r
    let t34i = c2 * t29i - c6 * t30i
    let t35r = t3r - t18r
    let t35i = t3i - t18i
    let t36r = c7 * t27r - c3 * t28r
    let t36i = c7 * t27i - c3 * t28i
    let t37r = t4r + t19r
    let t37i = t4i + t19i
    let t38r = c3 * t27r + c7 * t28r
    let t38i = c3 * t27i + c7 * t28i
    let t39r = t4r - t19r
    let t39i = t4i - t19i
    let t40r = c6 * t29r + c2 * t30r
    let t40i = c6 * t29i + c2 * t30i
    let t41r = c4 * (t12r - t26r)
    let t41i = c4 * (t12i - t26i)
    let t42r = c5 * (t12r + t26r)
    let t42i = c5 * (t12i + t26i)
    let y1r = t33r + t34r
    let y1i = t33i + t34i
    let y2r = t6r + t41r
    let y2i = t6i + t41i
    let y3r = t35r + t40r
    let y3i = t35i + t40i
    let y4r = t5r - t17r
    let y4i = t5i - t17i
    let y5r = t35r - t40r
    let y5i = t35i - t40i
    let y6r = t6r - t41r
    let y6i = t6i - t41i
    let y7r = t33r - t34r
    let y7i = t33i - t34i
    let y9r = t38r - t37r
    let y9i = t38i - t37i
    let y10r = t42r - t20r
    let y10i = t42i - t20i
    let y11r = t36r + t39r
    let y11i = t36i + t39i
    let y12r = c1 * (t11r - t25r)
    let y12i = c1 * (t11i - t25i)
    let y13r = t36r - t39r
    let y13i = t36i - t39i
    let y14r = t42r + t20r
    let y14i = t42i + t20i
    let y15r = t38r + t37r
    let y15i = t38i + t37i
    re[p0] = t31r + t32r
    im[p0] = t31i + t32i
    re[p1] = y1r - y15i
    im[p1] = y1i + y15r
    re[p2] = y2r - y14i
    im[p2] = y2i + y14r
    re[p3] = y3r - y13i
    im[p3] = y3i + y13r
    re[p4] = y4r - y12i
    im[p4] = y4i + y12r
    re[p5] = y5r - y11i
    im[p5] = y5i + y11r
    re[p6] = y6r - y10i
    im[p6] = y6i + y10r
    re[p7] = y7r - y9i
    im[p7] = y7i + y9r
    re[p8] = t31r - t32r
    im[p8] = t31i - t32i
    re[p9] = y7r + y9i
    im[p9] = y7i - y9r
    re[p10] = y6r + y10i
    im[p10] = y6i - y10r
    re[p11] = y5r + y11i
    im[p11] = y5i - y11r
    re[p12] = y4r + y12i
    im[p12] = y4i - y12r
    re[p13] = y3r + y13i
    im[p13] = y3i - y13r
    re[p14] = y2r + y14i
    im[p14] = y2i - y14r
    re[p15] = y1r + y15i
    im[p15] = y1i - y15r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    if p11 < limit {
      p11 = p11 + mr
    }
    p11 = p11 + delta
    if p12 < limit {
      p12 = p12 + mr
    }
    p12 = p12 + delta
    if p13 < limit {
      p13 = p13 + mr
    }
    p13 = p13 + delta
    if p14 < limit {
      p14 = p14 + mr
    }
    p14 = p14 + delta
    if p15 < limit {
      p15 = p15 + mr
    }
    p15 = p15 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 16 stage of the prime factor
/// transform, for the twist 3.
///
/// This is the small transform of the original, `Pfacc.pfa16`,
/// with the twist 3.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r16_mu3(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 16
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 16)
  let mut p1 = m * (1 * kfac % 16)
  let mut p2 = m * (2 * kfac % 16)
  let mut p3 = m * (3 * kfac % 16)
  let mut p4 = m * (4 * kfac % 16)
  let mut p5 = m * (5 * kfac % 16)
  let mut p6 = m * (6 * kfac % 16)
  let mut p7 = m * (7 * kfac % 16)
  let mut p8 = m * (8 * kfac % 16)
  let mut p9 = m * (9 * kfac % 16)
  let mut p10 = m * (10 * kfac % 16)
  let mut p11 = m * (11 * kfac % 16)
  let mut p12 = m * (12 * kfac % 16)
  let mut p13 = m * (13 * kfac % 16)
  let mut p14 = m * (14 * kfac % 16)
  let mut p15 = m * (15 * kfac % 16)
  let c1 = -1.0
  let c2 = 0.3826834323650883
  let c3 = 0.9238795325112873
  let c4 = -0.7071067811865483
  let c5 = 0.7071067811865483
  let c6 = -0.9238795325112873
  let c7 = -0.3826834323650883
  let mut i = 0
  while i < m {
    let t1r = re[p0] + re[p8]
    let t1i = im[p0] + im[p8]
    let t2r = re[p4] + re[p12]
    let t2i = im[p4] + im[p12]
    let t3r = re[p0] - re[p8]
    let t3i = im[p0] - im[p8]
    let t4r = c1 * (re[p4] - re[p12])
    let t4i = c1 * (im[p4] - im[p12])
    let t5r = t1r + t2r
    let t5i = t1i + t2i
    let t6r = t1r - t2r
    let t6i = t1i - t2i
    let t7r = re[p1] + re[p9]
    let t7i = im[p1] + im[p9]
    let t8r = re[p5] + re[p13]
    let t8i = im[p5] + im[p13]
    let t9r = re[p1] - re[p9]
    let t9i = im[p1] - im[p9]
    let t10r = re[p5] - re[p13]
    let t10i = im[p5] - im[p13]
    let t11r = t7r + t8r
    let t11i = t7i + t8i
    let t12r = t7r - t8r
    let t12i = t7i - t8i
    let t13r = re[p2] + re[p10]
    let t13i = im[p2] + im[p10]
    let t14r = re[p6] + re[p14]
    let t14i = im[p6] + im[p14]
    let t15r = re[p2] - re[p10]
    let t15i = im[p2] - im[p10]
    let t16r = re[p6] - re[p14]
    let t16i = im[p6] - im[p14]
    let t17r = t13r + t14r
    let t17i = t13i + t14i
    let t18r = c4 * (t15r - t16r)
    let t18i = c4 * (t15i - t16i)
    let t19r = c5 * (t15r + t16r)
    let t19i = c5 * (t15i + t16i)
    let t20r = c1 * (t13r - t14r)
    let t20i = c1 * (t13i - t14i)
    let t21r = re[p3] + re[p11]
    let t21i = im[p3] + im[p11]
    let t22r = re[p7] + re[p15]
    let t22i = im[p7] + im[p15]
    let t23r = re[p3] - re[p11]
    let t23i = im[p3] - im[p11]
    let t24r = re[p7] - re[p15]
    let t24i = im[p7] - im[p15]
    let t25r = t21r + t22r
    let t25i = t21i + t22i
    let t26r = t21r - t22r
    let t26i = t21i - t22i
    let t27r = t9r + t24r
    let t27i = t9i + t24i
    let t28r = t10r + t23r
    let t28i = t10i + t23i
    let t29r = t9r - t24r
    let t29i = t9i - t24i
    let t30r = t10r - t23r
    let t30i = t10i - t23i
    let t31r = t5r + t17r
    let t31i = t5i + t17i
    let t32r = t11r + t25r
    let t32i = t11i + t25i
    let t33r = t3r + t18r
    let t33i = t3i + t18i
    let t34r = c2 * t29r - c6 * t30r
    let t34i = c2 * t29i - c6 * t30i
    let t35r = t3r - t18r
    let t35i = t3i - t18i
    let t36r = c7 * t27r - c3 * t28r
    let t36i = c7 * t27i - c3 * t28i
    let t37r = t4r + t19r
    let t37i = t4i + t19i
    let t38r = c3 * t27r + c7 * t28r
    let t38i = c3 * t27i + c7 * t28i
    let t39r = t4r - t19r
    let t39i = t4i - t19i
    let t40r = c6 * t29r + c2 * t30r
    let t40i = c6 * t29i + c2 * t30i
    let t41r = c4 * (t12r - t26r)
    let t41i = c4 * (t12i - t26i)
    let t42r = c5 * (t12r + t26r)
    let t42i = c5 * (t12i + t26i)
    let y1r = t33r + t34r
    let y1i = t33i + t34i
    let y2r = t6r + t41r
    let y2i = t6i + t41i
    let y3r = t35r + t40r
    let y3i = t35i + t40i
    let y4r = t5r - t17r
    let y4i = t5i - t17i
    let y5r = t35r - t40r
    let y5i = t35i - t40i
    let y6r = t6r - t41r
    let y6i = t6i - t41i
    let y7r = t33r - t34r
    let y7i = t33i - t34i
    let y9r = t38r - t37r
    let y9i = t38i - t37i
    let y10r = t42r - t20r
    let y10i = t42i - t20i
    let y11r = t36r + t39r
    let y11i = t36i + t39i
    let y12r = c1 * (t11r - t25r)
    let y12i = c1 * (t11i - t25i)
    let y13r = t36r - t39r
    let y13i = t36i - t39i
    let y14r = t42r + t20r
    let y14i = t42i + t20i
    let y15r = t38r + t37r
    let y15i = t38i + t37i
    re[p0] = t31r + t32r
    im[p0] = t31i + t32i
    re[p1] = y1r - y15i
    im[p1] = y1i + y15r
    re[p2] = y2r - y14i
    im[p2] = y2i + y14r
    re[p3] = y3r - y13i
    im[p3] = y3i + y13r
    re[p4] = y4r - y12i
    im[p4] = y4i + y12r
    re[p5] = y5r - y11i
    im[p5] = y5i + y11r
    re[p6] = y6r - y10i
    im[p6] = y6i + y10r
    re[p7] = y7r - y9i
    im[p7] = y7i + y9r
    re[p8] = t31r - t32r
    im[p8] = t31i - t32i
    re[p9] = y7r + y9i
    im[p9] = y7i - y9r
    re[p10] = y6r + y10i
    im[p10] = y6i - y10r
    re[p11] = y5r + y11i
    im[p11] = y5i - y11r
    re[p12] = y4r + y12i
    im[p12] = y4i - y12r
    re[p13] = y3r + y13i
    im[p13] = y3i - y13r
    re[p14] = y2r + y14i
    im[p14] = y2i - y14r
    re[p15] = y1r + y15i
    im[p15] = y1i - y15r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    if p11 < limit {
      p11 = p11 + mr
    }
    p11 = p11 + delta
    if p12 < limit {
      p12 = p12 + mr
    }
    p12 = p12 + delta
    if p13 < limit {
      p13 = p13 + mr
    }
    p13 = p13 + delta
    if p14 < limit {
      p14 = p14 + mr
    }
    p14 = p14 + delta
    if p15 < limit {
      p15 = p15 + mr
    }
    p15 = p15 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 16 stage of the prime factor
/// transform, for the twist 5.
///
/// This is the small transform of the original, `Pfacc.pfa16`,
/// with the twist 5.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r16_mu5(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 16
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 16)
  let mut p1 = m * (1 * kfac % 16)
  let mut p2 = m * (2 * kfac % 16)
  let mut p3 = m * (3 * kfac % 16)
  let mut p4 = m * (4 * kfac % 16)
  let mut p5 = m * (5 * kfac % 16)
  let mut p6 = m * (6 * kfac % 16)
  let mut p7 = m * (7 * kfac % 16)
  let mut p8 = m * (8 * kfac % 16)
  let mut p9 = m * (9 * kfac % 16)
  let mut p10 = m * (10 * kfac % 16)
  let mut p11 = m * (11 * kfac % 16)
  let mut p12 = m * (12 * kfac % 16)
  let mut p13 = m * (13 * kfac % 16)
  let mut p14 = m * (14 * kfac % 16)
  let mut p15 = m * (15 * kfac % 16)
  let c1 = 1.0
  let c2 = -0.3826834323650876
  let c3 = 0.9238795325112876
  let c4 = -0.7071067811865474
  let c5 = -0.7071067811865474
  let c6 = 0.9238795325112876
  let c7 = -0.3826834323650876
  let mut i = 0
  while i < m {
    let t1r = re[p0] + re[p8]
    let t1i = im[p0] + im[p8]
    let t2r = re[p4] + re[p12]
    let t2i = im[p4] + im[p12]
    let t3r = re[p0] - re[p8]
    let t3i = im[p0] - im[p8]
    let t4r = c1 * (re[p4] - re[p12])
    let t4i = c1 * (im[p4] - im[p12])
    let t5r = t1r + t2r
    let t5i = t1i + t2i
    let t6r = t1r - t2r
    let t6i = t1i - t2i
    let t7r = re[p1] + re[p9]
    let t7i = im[p1] + im[p9]
    let t8r = re[p5] + re[p13]
    let t8i = im[p5] + im[p13]
    let t9r = re[p1] - re[p9]
    let t9i = im[p1] - im[p9]
    let t10r = re[p5] - re[p13]
    let t10i = im[p5] - im[p13]
    let t11r = t7r + t8r
    let t11i = t7i + t8i
    let t12r = t7r - t8r
    let t12i = t7i - t8i
    let t13r = re[p2] + re[p10]
    let t13i = im[p2] + im[p10]
    let t14r = re[p6] + re[p14]
    let t14i = im[p6] + im[p14]
    let t15r = re[p2] - re[p10]
    let t15i = im[p2] - im[p10]
    let t16r = re[p6] - re[p14]
    let t16i = im[p6] - im[p14]
    let t17r = t13r + t14r
    let t17i = t13i + t14i
    let t18r = c4 * (t15r - t16r)
    let t18i = c4 * (t15i - t16i)
    let t19r = c5 * (t15r + t16r)
    let t19i = c5 * (t15i + t16i)
    let t20r = c1 * (t13r - t14r)
    let t20i = c1 * (t13i - t14i)
    let t21r = re[p3] + re[p11]
    let t21i = im[p3] + im[p11]
    let t22r = re[p7] + re[p15]
    let t22i = im[p7] + im[p15]
    let t23r = re[p3] - re[p11]
    let t23i = im[p3] - im[p11]
    let t24r = re[p7] - re[p15]
    let t24i = im[p7] - im[p15]
    let t25r = t21r + t22r
    let t25i = t21i + t22i
    let t26r = t21r - t22r
    let t26i = t21i - t22i
    let t27r = t9r + t24r
    let t27i = t9i + t24i
    let t28r = t10r + t23r
    let t28i = t10i + t23i
    let t29r = t9r - t24r
    let t29i = t9i - t24i
    let t30r = t10r - t23r
    let t30i = t10i - t23i
    let t31r = t5r + t17r
    let t31i = t5i + t17i
    let t32r = t11r + t25r
    let t32i = t11i + t25i
    let t33r = t3r + t18r
    let t33i = t3i + t18i
    let t34r = c2 * t29r - c6 * t30r
    let t34i = c2 * t29i - c6 * t30i
    let t35r = t3r - t18r
    let t35i = t3i - t18i
    let t36r = c7 * t27r - c3 * t28r
    let t36i = c7 * t27i - c3 * t28i
    let t37r = t4r + t19r
    let t37i = t4i + t19i
    let t38r = c3 * t27r + c7 * t28r
    let t38i = c3 * t27i + c7 * t28i
    let t39r = t4r - t19r
    let t39i = t4i - t19i
    let t40r = c6 * t29r + c2 * t30r
    let t40i = c6 * t29i + c2 * t30i
    let t41r = c4 * (t12r - t26r)
    let t41i = c4 * (t12i - t26i)
    let t42r = c5 * (t12r + t26r)
    let t42i = c5 * (t12i + t26i)
    let y1r = t33r + t34r
    let y1i = t33i + t34i
    let y2r = t6r + t41r
    let y2i = t6i + t41i
    let y3r = t35r + t40r
    let y3i = t35i + t40i
    let y4r = t5r - t17r
    let y4i = t5i - t17i
    let y5r = t35r - t40r
    let y5i = t35i - t40i
    let y6r = t6r - t41r
    let y6i = t6i - t41i
    let y7r = t33r - t34r
    let y7i = t33i - t34i
    let y9r = t38r - t37r
    let y9i = t38i - t37i
    let y10r = t42r - t20r
    let y10i = t42i - t20i
    let y11r = t36r + t39r
    let y11i = t36i + t39i
    let y12r = c1 * (t11r - t25r)
    let y12i = c1 * (t11i - t25i)
    let y13r = t36r - t39r
    let y13i = t36i - t39i
    let y14r = t42r + t20r
    let y14i = t42i + t20i
    let y15r = t38r + t37r
    let y15i = t38i + t37i
    re[p0] = t31r + t32r
    im[p0] = t31i + t32i
    re[p1] = y1r - y15i
    im[p1] = y1i + y15r
    re[p2] = y2r - y14i
    im[p2] = y2i + y14r
    re[p3] = y3r - y13i
    im[p3] = y3i + y13r
    re[p4] = y4r - y12i
    im[p4] = y4i + y12r
    re[p5] = y5r - y11i
    im[p5] = y5i + y11r
    re[p6] = y6r - y10i
    im[p6] = y6i + y10r
    re[p7] = y7r - y9i
    im[p7] = y7i + y9r
    re[p8] = t31r - t32r
    im[p8] = t31i - t32i
    re[p9] = y7r + y9i
    im[p9] = y7i - y9r
    re[p10] = y6r + y10i
    im[p10] = y6i - y10r
    re[p11] = y5r + y11i
    im[p11] = y5i - y11r
    re[p12] = y4r + y12i
    im[p12] = y4i - y12r
    re[p13] = y3r + y13i
    im[p13] = y3i - y13r
    re[p14] = y2r + y14i
    im[p14] = y2i - y14r
    re[p15] = y1r + y15i
    im[p15] = y1i - y15r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    if p11 < limit {
      p11 = p11 + mr
    }
    p11 = p11 + delta
    if p12 < limit {
      p12 = p12 + mr
    }
    p12 = p12 + delta
    if p13 < limit {
      p13 = p13 + mr
    }
    p13 = p13 + delta
    if p14 < limit {
      p14 = p14 + mr
    }
    p14 = p14 + delta
    if p15 < limit {
      p15 = p15 + mr
    }
    p15 = p15 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 16 stage of the prime factor
/// transform, for the twist 7.
///
/// This is the small transform of the original, `Pfacc.pfa16`,
/// with the twist 7.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r16_mu7(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 16
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 16)
  let mut p1 = m * (1 * kfac % 16)
  let mut p2 = m * (2 * kfac % 16)
  let mut p3 = m * (3 * kfac % 16)
  let mut p4 = m * (4 * kfac % 16)
  let mut p5 = m * (5 * kfac % 16)
  let mut p6 = m * (6 * kfac % 16)
  let mut p7 = m * (7 * kfac % 16)
  let mut p8 = m * (8 * kfac % 16)
  let mut p9 = m * (9 * kfac % 16)
  let mut p10 = m * (10 * kfac % 16)
  let mut p11 = m * (11 * kfac % 16)
  let mut p12 = m * (12 * kfac % 16)
  let mut p13 = m * (13 * kfac % 16)
  let mut p14 = m * (14 * kfac % 16)
  let mut p15 = m * (15 * kfac % 16)
  let c1 = -1.0
  let c2 = -0.9238795325112852
  let c3 = 0.3826834323650934
  let c4 = 0.707106781186546
  let c5 = -0.707106781186546
  let c6 = -0.3826834323650934
  let c7 = 0.9238795325112852
  let mut i = 0
  while i < m {
    let t1r = re[p0] + re[p8]
    let t1i = im[p0] + im[p8]
    let t2r = re[p4] + re[p12]
    let t2i = im[p4] + im[p12]
    let t3r = re[p0] - re[p8]
    let t3i = im[p0] - im[p8]
    let t4r = c1 * (re[p4] - re[p12])
    let t4i = c1 * (im[p4] - im[p12])
    let t5r = t1r + t2r
    let t5i = t1i + t2i
    let t6r = t1r - t2r
    let t6i = t1i - t2i
    let t7r = re[p1] + re[p9]
    let t7i = im[p1] + im[p9]
    let t8r = re[p5] + re[p13]
    let t8i = im[p5] + im[p13]
    let t9r = re[p1] - re[p9]
    let t9i = im[p1] - im[p9]
    let t10r = re[p5] - re[p13]
    let t10i = im[p5] - im[p13]
    let t11r = t7r + t8r
    let t11i = t7i + t8i
    let t12r = t7r - t8r
    let t12i = t7i - t8i
    let t13r = re[p2] + re[p10]
    let t13i = im[p2] + im[p10]
    let t14r = re[p6] + re[p14]
    let t14i = im[p6] + im[p14]
    let t15r = re[p2] - re[p10]
    let t15i = im[p2] - im[p10]
    let t16r = re[p6] - re[p14]
    let t16i = im[p6] - im[p14]
    let t17r = t13r + t14r
    let t17i = t13i + t14i
    let t18r = c4 * (t15r - t16r)
    let t18i = c4 * (t15i - t16i)
    let t19r = c5 * (t15r + t16r)
    let t19i = c5 * (t15i + t16i)
    let t20r = c1 * (t13r - t14r)
    let t20i = c1 * (t13i - t14i)
    let t21r = re[p3] + re[p11]
    let t21i = im[p3] + im[p11]
    let t22r = re[p7] + re[p15]
    let t22i = im[p7] + im[p15]
    let t23r = re[p3] - re[p11]
    let t23i = im[p3] - im[p11]
    let t24r = re[p7] - re[p15]
    let t24i = im[p7] - im[p15]
    let t25r = t21r + t22r
    let t25i = t21i + t22i
    let t26r = t21r - t22r
    let t26i = t21i - t22i
    let t27r = t9r + t24r
    let t27i = t9i + t24i
    let t28r = t10r + t23r
    let t28i = t10i + t23i
    let t29r = t9r - t24r
    let t29i = t9i - t24i
    let t30r = t10r - t23r
    let t30i = t10i - t23i
    let t31r = t5r + t17r
    let t31i = t5i + t17i
    let t32r = t11r + t25r
    let t32i = t11i + t25i
    let t33r = t3r + t18r
    let t33i = t3i + t18i
    let t34r = c2 * t29r - c6 * t30r
    let t34i = c2 * t29i - c6 * t30i
    let t35r = t3r - t18r
    let t35i = t3i - t18i
    let t36r = c7 * t27r - c3 * t28r
    let t36i = c7 * t27i - c3 * t28i
    let t37r = t4r + t19r
    let t37i = t4i + t19i
    let t38r = c3 * t27r + c7 * t28r
    let t38i = c3 * t27i + c7 * t28i
    let t39r = t4r - t19r
    let t39i = t4i - t19i
    let t40r = c6 * t29r + c2 * t30r
    let t40i = c6 * t29i + c2 * t30i
    let t41r = c4 * (t12r - t26r)
    let t41i = c4 * (t12i - t26i)
    let t42r = c5 * (t12r + t26r)
    let t42i = c5 * (t12i + t26i)
    let y1r = t33r + t34r
    let y1i = t33i + t34i
    let y2r = t6r + t41r
    let y2i = t6i + t41i
    let y3r = t35r + t40r
    let y3i = t35i + t40i
    let y4r = t5r - t17r
    let y4i = t5i - t17i
    let y5r = t35r - t40r
    let y5i = t35i - t40i
    let y6r = t6r - t41r
    let y6i = t6i - t41i
    let y7r = t33r - t34r
    let y7i = t33i - t34i
    let y9r = t38r - t37r
    let y9i = t38i - t37i
    let y10r = t42r - t20r
    let y10i = t42i - t20i
    let y11r = t36r + t39r
    let y11i = t36i + t39i
    let y12r = c1 * (t11r - t25r)
    let y12i = c1 * (t11i - t25i)
    let y13r = t36r - t39r
    let y13i = t36i - t39i
    let y14r = t42r + t20r
    let y14i = t42i + t20i
    let y15r = t38r + t37r
    let y15i = t38i + t37i
    re[p0] = t31r + t32r
    im[p0] = t31i + t32i
    re[p1] = y1r - y15i
    im[p1] = y1i + y15r
    re[p2] = y2r - y14i
    im[p2] = y2i + y14r
    re[p3] = y3r - y13i
    im[p3] = y3i + y13r
    re[p4] = y4r - y12i
    im[p4] = y4i + y12r
    re[p5] = y5r - y11i
    im[p5] = y5i + y11r
    re[p6] = y6r - y10i
    im[p6] = y6i + y10r
    re[p7] = y7r - y9i
    im[p7] = y7i + y9r
    re[p8] = t31r - t32r
    im[p8] = t31i - t32i
    re[p9] = y7r + y9i
    im[p9] = y7i - y9r
    re[p10] = y6r + y10i
    im[p10] = y6i - y10r
    re[p11] = y5r + y11i
    im[p11] = y5i - y11r
    re[p12] = y4r + y12i
    im[p12] = y4i - y12r
    re[p13] = y3r + y13i
    im[p13] = y3i - y13r
    re[p14] = y2r + y14i
    im[p14] = y2i - y14r
    re[p15] = y1r + y15i
    im[p15] = y1i - y15r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    if p11 < limit {
      p11 = p11 + mr
    }
    p11 = p11 + delta
    if p12 < limit {
      p12 = p12 + mr
    }
    p12 = p12 + delta
    if p13 < limit {
      p13 = p13 + mr
    }
    p13 = p13 + delta
    if p14 < limit {
      p14 = p14 + mr
    }
    p14 = p14 + delta
    if p15 < limit {
      p15 = p15 + mr
    }
    p15 = p15 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 16 stage of the prime factor
/// transform, for the twist 9.
///
/// This is the small transform of the original, `Pfacc.pfa16`,
/// with the twist 9.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r16_mu9(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 16
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 16)
  let mut p1 = m * (1 * kfac % 16)
  let mut p2 = m * (2 * kfac % 16)
  let mut p3 = m * (3 * kfac % 16)
  let mut p4 = m * (4 * kfac % 16)
  let mut p5 = m * (5 * kfac % 16)
  let mut p6 = m * (6 * kfac % 16)
  let mut p7 = m * (7 * kfac % 16)
  let mut p8 = m * (8 * kfac % 16)
  let mut p9 = m * (9 * kfac % 16)
  let mut p10 = m * (10 * kfac % 16)
  let mut p11 = m * (11 * kfac % 16)
  let mut p12 = m * (12 * kfac % 16)
  let mut p13 = m * (13 * kfac % 16)
  let mut p14 = m * (14 * kfac % 16)
  let mut p15 = m * (15 * kfac % 16)
  let c1 = 1.0
  let c2 = -0.9238795325112872
  let c3 = -0.3826834323650891
  let c4 = 0.7071067811865471
  let c5 = 0.7071067811865471
  let c6 = -0.3826834323650891
  let c7 = -0.9238795325112872
  let mut i = 0
  while i < m {
    let t1r = re[p0] + re[p8]
    let t1i = im[p0] + im[p8]
    let t2r = re[p4] + re[p12]
    let t2i = im[p4] + im[p12]
    let t3r = re[p0] - re[p8]
    let t3i = im[p0] - im[p8]
    let t4r = c1 * (re[p4] - re[p12])
    let t4i = c1 * (im[p4] - im[p12])
    let t5r = t1r + t2r
    let t5i = t1i + t2i
    let t6r = t1r - t2r
    let t6i = t1i - t2i
    let t7r = re[p1] + re[p9]
    let t7i = im[p1] + im[p9]
    let t8r = re[p5] + re[p13]
    let t8i = im[p5] + im[p13]
    let t9r = re[p1] - re[p9]
    let t9i = im[p1] - im[p9]
    let t10r = re[p5] - re[p13]
    let t10i = im[p5] - im[p13]
    let t11r = t7r + t8r
    let t11i = t7i + t8i
    let t12r = t7r - t8r
    let t12i = t7i - t8i
    let t13r = re[p2] + re[p10]
    let t13i = im[p2] + im[p10]
    let t14r = re[p6] + re[p14]
    let t14i = im[p6] + im[p14]
    let t15r = re[p2] - re[p10]
    let t15i = im[p2] - im[p10]
    let t16r = re[p6] - re[p14]
    let t16i = im[p6] - im[p14]
    let t17r = t13r + t14r
    let t17i = t13i + t14i
    let t18r = c4 * (t15r - t16r)
    let t18i = c4 * (t15i - t16i)
    let t19r = c5 * (t15r + t16r)
    let t19i = c5 * (t15i + t16i)
    let t20r = c1 * (t13r - t14r)
    let t20i = c1 * (t13i - t14i)
    let t21r = re[p3] + re[p11]
    let t21i = im[p3] + im[p11]
    let t22r = re[p7] + re[p15]
    let t22i = im[p7] + im[p15]
    let t23r = re[p3] - re[p11]
    let t23i = im[p3] - im[p11]
    let t24r = re[p7] - re[p15]
    let t24i = im[p7] - im[p15]
    let t25r = t21r + t22r
    let t25i = t21i + t22i
    let t26r = t21r - t22r
    let t26i = t21i - t22i
    let t27r = t9r + t24r
    let t27i = t9i + t24i
    let t28r = t10r + t23r
    let t28i = t10i + t23i
    let t29r = t9r - t24r
    let t29i = t9i - t24i
    let t30r = t10r - t23r
    let t30i = t10i - t23i
    let t31r = t5r + t17r
    let t31i = t5i + t17i
    let t32r = t11r + t25r
    let t32i = t11i + t25i
    let t33r = t3r + t18r
    let t33i = t3i + t18i
    let t34r = c2 * t29r - c6 * t30r
    let t34i = c2 * t29i - c6 * t30i
    let t35r = t3r - t18r
    let t35i = t3i - t18i
    let t36r = c7 * t27r - c3 * t28r
    let t36i = c7 * t27i - c3 * t28i
    let t37r = t4r + t19r
    let t37i = t4i + t19i
    let t38r = c3 * t27r + c7 * t28r
    let t38i = c3 * t27i + c7 * t28i
    let t39r = t4r - t19r
    let t39i = t4i - t19i
    let t40r = c6 * t29r + c2 * t30r
    let t40i = c6 * t29i + c2 * t30i
    let t41r = c4 * (t12r - t26r)
    let t41i = c4 * (t12i - t26i)
    let t42r = c5 * (t12r + t26r)
    let t42i = c5 * (t12i + t26i)
    let y1r = t33r + t34r
    let y1i = t33i + t34i
    let y2r = t6r + t41r
    let y2i = t6i + t41i
    let y3r = t35r + t40r
    let y3i = t35i + t40i
    let y4r = t5r - t17r
    let y4i = t5i - t17i
    let y5r = t35r - t40r
    let y5i = t35i - t40i
    let y6r = t6r - t41r
    let y6i = t6i - t41i
    let y7r = t33r - t34r
    let y7i = t33i - t34i
    let y9r = t38r - t37r
    let y9i = t38i - t37i
    let y10r = t42r - t20r
    let y10i = t42i - t20i
    let y11r = t36r + t39r
    let y11i = t36i + t39i
    let y12r = c1 * (t11r - t25r)
    let y12i = c1 * (t11i - t25i)
    let y13r = t36r - t39r
    let y13i = t36i - t39i
    let y14r = t42r + t20r
    let y14i = t42i + t20i
    let y15r = t38r + t37r
    let y15i = t38i + t37i
    re[p0] = t31r + t32r
    im[p0] = t31i + t32i
    re[p1] = y1r - y15i
    im[p1] = y1i + y15r
    re[p2] = y2r - y14i
    im[p2] = y2i + y14r
    re[p3] = y3r - y13i
    im[p3] = y3i + y13r
    re[p4] = y4r - y12i
    im[p4] = y4i + y12r
    re[p5] = y5r - y11i
    im[p5] = y5i + y11r
    re[p6] = y6r - y10i
    im[p6] = y6i + y10r
    re[p7] = y7r - y9i
    im[p7] = y7i + y9r
    re[p8] = t31r - t32r
    im[p8] = t31i - t32i
    re[p9] = y7r + y9i
    im[p9] = y7i - y9r
    re[p10] = y6r + y10i
    im[p10] = y6i - y10r
    re[p11] = y5r + y11i
    im[p11] = y5i - y11r
    re[p12] = y4r + y12i
    im[p12] = y4i - y12r
    re[p13] = y3r + y13i
    im[p13] = y3i - y13r
    re[p14] = y2r + y14i
    im[p14] = y2i - y14r
    re[p15] = y1r + y15i
    im[p15] = y1i - y15r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    if p11 < limit {
      p11 = p11 + mr
    }
    p11 = p11 + delta
    if p12 < limit {
      p12 = p12 + mr
    }
    p12 = p12 + delta
    if p13 < limit {
      p13 = p13 + mr
    }
    p13 = p13 + delta
    if p14 < limit {
      p14 = p14 + mr
    }
    p14 = p14 + delta
    if p15 < limit {
      p15 = p15 + mr
    }
    p15 = p15 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 16 stage of the prime factor
/// transform, for the twist 11.
///
/// This is the small transform of the original, `Pfacc.pfa16`,
/// with the twist 11.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r16_mu11(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 16
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 16)
  let mut p1 = m * (1 * kfac % 16)
  let mut p2 = m * (2 * kfac % 16)
  let mut p3 = m * (3 * kfac % 16)
  let mut p4 = m * (4 * kfac % 16)
  let mut p5 = m * (5 * kfac % 16)
  let mut p6 = m * (6 * kfac % 16)
  let mut p7 = m * (7 * kfac % 16)
  let mut p8 = m * (8 * kfac % 16)
  let mut p9 = m * (9 * kfac % 16)
  let mut p10 = m * (10 * kfac % 16)
  let mut p11 = m * (11 * kfac % 16)
  let mut p12 = m * (12 * kfac % 16)
  let mut p13 = m * (13 * kfac % 16)
  let mut p14 = m * (14 * kfac % 16)
  let mut p15 = m * (15 * kfac % 16)
  let c1 = -1.0
  let c2 = -0.3826834323650927
  let c3 = -0.9238795325112856
  let c4 = -0.7071067811865465
  let c5 = 0.7071067811865465
  let c6 = 0.9238795325112856
  let c7 = 0.3826834323650927
  let mut i = 0
  while i < m {
    let t1r = re[p0] + re[p8]
    let t1i = im[p0] + im[p8]
    let t2r = re[p4] + re[p12]
    let t2i = im[p4] + im[p12]
    let t3r = re[p0] - re[p8]
    let t3i = im[p0] - im[p8]
    let t4r = c1 * (re[p4] - re[p12])
    let t4i = c1 * (im[p4] - im[p12])
    let t5r = t1r + t2r
    let t5i = t1i + t2i
    let t6r = t1r - t2r
    let t6i = t1i - t2i
    let t7r = re[p1] + re[p9]
    let t7i = im[p1] + im[p9]
    let t8r = re[p5] + re[p13]
    let t8i = im[p5] + im[p13]
    let t9r = re[p1] - re[p9]
    let t9i = im[p1] - im[p9]
    let t10r = re[p5] - re[p13]
    let t10i = im[p5] - im[p13]
    let t11r = t7r + t8r
    let t11i = t7i + t8i
    let t12r = t7r - t8r
    let t12i = t7i - t8i
    let t13r = re[p2] + re[p10]
    let t13i = im[p2] + im[p10]
    let t14r = re[p6] + re[p14]
    let t14i = im[p6] + im[p14]
    let t15r = re[p2] - re[p10]
    let t15i = im[p2] - im[p10]
    let t16r = re[p6] - re[p14]
    let t16i = im[p6] - im[p14]
    let t17r = t13r + t14r
    let t17i = t13i + t14i
    let t18r = c4 * (t15r - t16r)
    let t18i = c4 * (t15i - t16i)
    let t19r = c5 * (t15r + t16r)
    let t19i = c5 * (t15i + t16i)
    let t20r = c1 * (t13r - t14r)
    let t20i = c1 * (t13i - t14i)
    let t21r = re[p3] + re[p11]
    let t21i = im[p3] + im[p11]
    let t22r = re[p7] + re[p15]
    let t22i = im[p7] + im[p15]
    let t23r = re[p3] - re[p11]
    let t23i = im[p3] - im[p11]
    let t24r = re[p7] - re[p15]
    let t24i = im[p7] - im[p15]
    let t25r = t21r + t22r
    let t25i = t21i + t22i
    let t26r = t21r - t22r
    let t26i = t21i - t22i
    let t27r = t9r + t24r
    let t27i = t9i + t24i
    let t28r = t10r + t23r
    let t28i = t10i + t23i
    let t29r = t9r - t24r
    let t29i = t9i - t24i
    let t30r = t10r - t23r
    let t30i = t10i - t23i
    let t31r = t5r + t17r
    let t31i = t5i + t17i
    let t32r = t11r + t25r
    let t32i = t11i + t25i
    let t33r = t3r + t18r
    let t33i = t3i + t18i
    let t34r = c2 * t29r - c6 * t30r
    let t34i = c2 * t29i - c6 * t30i
    let t35r = t3r - t18r
    let t35i = t3i - t18i
    let t36r = c7 * t27r - c3 * t28r
    let t36i = c7 * t27i - c3 * t28i
    let t37r = t4r + t19r
    let t37i = t4i + t19i
    let t38r = c3 * t27r + c7 * t28r
    let t38i = c3 * t27i + c7 * t28i
    let t39r = t4r - t19r
    let t39i = t4i - t19i
    let t40r = c6 * t29r + c2 * t30r
    let t40i = c6 * t29i + c2 * t30i
    let t41r = c4 * (t12r - t26r)
    let t41i = c4 * (t12i - t26i)
    let t42r = c5 * (t12r + t26r)
    let t42i = c5 * (t12i + t26i)
    let y1r = t33r + t34r
    let y1i = t33i + t34i
    let y2r = t6r + t41r
    let y2i = t6i + t41i
    let y3r = t35r + t40r
    let y3i = t35i + t40i
    let y4r = t5r - t17r
    let y4i = t5i - t17i
    let y5r = t35r - t40r
    let y5i = t35i - t40i
    let y6r = t6r - t41r
    let y6i = t6i - t41i
    let y7r = t33r - t34r
    let y7i = t33i - t34i
    let y9r = t38r - t37r
    let y9i = t38i - t37i
    let y10r = t42r - t20r
    let y10i = t42i - t20i
    let y11r = t36r + t39r
    let y11i = t36i + t39i
    let y12r = c1 * (t11r - t25r)
    let y12i = c1 * (t11i - t25i)
    let y13r = t36r - t39r
    let y13i = t36i - t39i
    let y14r = t42r + t20r
    let y14i = t42i + t20i
    let y15r = t38r + t37r
    let y15i = t38i + t37i
    re[p0] = t31r + t32r
    im[p0] = t31i + t32i
    re[p1] = y1r - y15i
    im[p1] = y1i + y15r
    re[p2] = y2r - y14i
    im[p2] = y2i + y14r
    re[p3] = y3r - y13i
    im[p3] = y3i + y13r
    re[p4] = y4r - y12i
    im[p4] = y4i + y12r
    re[p5] = y5r - y11i
    im[p5] = y5i + y11r
    re[p6] = y6r - y10i
    im[p6] = y6i + y10r
    re[p7] = y7r - y9i
    im[p7] = y7i + y9r
    re[p8] = t31r - t32r
    im[p8] = t31i - t32i
    re[p9] = y7r + y9i
    im[p9] = y7i - y9r
    re[p10] = y6r + y10i
    im[p10] = y6i - y10r
    re[p11] = y5r + y11i
    im[p11] = y5i - y11r
    re[p12] = y4r + y12i
    im[p12] = y4i - y12r
    re[p13] = y3r + y13i
    im[p13] = y3i - y13r
    re[p14] = y2r + y14i
    im[p14] = y2i - y14r
    re[p15] = y1r + y15i
    im[p15] = y1i - y15r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    if p11 < limit {
      p11 = p11 + mr
    }
    p11 = p11 + delta
    if p12 < limit {
      p12 = p12 + mr
    }
    p12 = p12 + delta
    if p13 < limit {
      p13 = p13 + mr
    }
    p13 = p13 + delta
    if p14 < limit {
      p14 = p14 + mr
    }
    p14 = p14 + delta
    if p15 < limit {
      p15 = p15 + mr
    }
    p15 = p15 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 16 stage of the prime factor
/// transform, for the twist 13.
///
/// This is the small transform of the original, `Pfacc.pfa16`,
/// with the twist 13.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r16_mu13(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 16
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 16)
  let mut p1 = m * (1 * kfac % 16)
  let mut p2 = m * (2 * kfac % 16)
  let mut p3 = m * (3 * kfac % 16)
  let mut p4 = m * (4 * kfac % 16)
  let mut p5 = m * (5 * kfac % 16)
  let mut p6 = m * (6 * kfac % 16)
  let mut p7 = m * (7 * kfac % 16)
  let mut p8 = m * (8 * kfac % 16)
  let mut p9 = m * (9 * kfac % 16)
  let mut p10 = m * (10 * kfac % 16)
  let mut p11 = m * (11 * kfac % 16)
  let mut p12 = m * (12 * kfac % 16)
  let mut p13 = m * (13 * kfac % 16)
  let mut p14 = m * (14 * kfac % 16)
  let mut p15 = m * (15 * kfac % 16)
  let c1 = 1.0
  let c2 = 0.382683432365091
  let c3 = -0.9238795325112862
  let c4 = -0.7071067811865432
  let c5 = -0.7071067811865432
  let c6 = -0.9238795325112862
  let c7 = 0.382683432365091
  let mut i = 0
  while i < m {
    let t1r = re[p0] + re[p8]
    let t1i = im[p0] + im[p8]
    let t2r = re[p4] + re[p12]
    let t2i = im[p4] + im[p12]
    let t3r = re[p0] - re[p8]
    let t3i = im[p0] - im[p8]
    let t4r = c1 * (re[p4] - re[p12])
    let t4i = c1 * (im[p4] - im[p12])
    let t5r = t1r + t2r
    let t5i = t1i + t2i
    let t6r = t1r - t2r
    let t6i = t1i - t2i
    let t7r = re[p1] + re[p9]
    let t7i = im[p1] + im[p9]
    let t8r = re[p5] + re[p13]
    let t8i = im[p5] + im[p13]
    let t9r = re[p1] - re[p9]
    let t9i = im[p1] - im[p9]
    let t10r = re[p5] - re[p13]
    let t10i = im[p5] - im[p13]
    let t11r = t7r + t8r
    let t11i = t7i + t8i
    let t12r = t7r - t8r
    let t12i = t7i - t8i
    let t13r = re[p2] + re[p10]
    let t13i = im[p2] + im[p10]
    let t14r = re[p6] + re[p14]
    let t14i = im[p6] + im[p14]
    let t15r = re[p2] - re[p10]
    let t15i = im[p2] - im[p10]
    let t16r = re[p6] - re[p14]
    let t16i = im[p6] - im[p14]
    let t17r = t13r + t14r
    let t17i = t13i + t14i
    let t18r = c4 * (t15r - t16r)
    let t18i = c4 * (t15i - t16i)
    let t19r = c5 * (t15r + t16r)
    let t19i = c5 * (t15i + t16i)
    let t20r = c1 * (t13r - t14r)
    let t20i = c1 * (t13i - t14i)
    let t21r = re[p3] + re[p11]
    let t21i = im[p3] + im[p11]
    let t22r = re[p7] + re[p15]
    let t22i = im[p7] + im[p15]
    let t23r = re[p3] - re[p11]
    let t23i = im[p3] - im[p11]
    let t24r = re[p7] - re[p15]
    let t24i = im[p7] - im[p15]
    let t25r = t21r + t22r
    let t25i = t21i + t22i
    let t26r = t21r - t22r
    let t26i = t21i - t22i
    let t27r = t9r + t24r
    let t27i = t9i + t24i
    let t28r = t10r + t23r
    let t28i = t10i + t23i
    let t29r = t9r - t24r
    let t29i = t9i - t24i
    let t30r = t10r - t23r
    let t30i = t10i - t23i
    let t31r = t5r + t17r
    let t31i = t5i + t17i
    let t32r = t11r + t25r
    let t32i = t11i + t25i
    let t33r = t3r + t18r
    let t33i = t3i + t18i
    let t34r = c2 * t29r - c6 * t30r
    let t34i = c2 * t29i - c6 * t30i
    let t35r = t3r - t18r
    let t35i = t3i - t18i
    let t36r = c7 * t27r - c3 * t28r
    let t36i = c7 * t27i - c3 * t28i
    let t37r = t4r + t19r
    let t37i = t4i + t19i
    let t38r = c3 * t27r + c7 * t28r
    let t38i = c3 * t27i + c7 * t28i
    let t39r = t4r - t19r
    let t39i = t4i - t19i
    let t40r = c6 * t29r + c2 * t30r
    let t40i = c6 * t29i + c2 * t30i
    let t41r = c4 * (t12r - t26r)
    let t41i = c4 * (t12i - t26i)
    let t42r = c5 * (t12r + t26r)
    let t42i = c5 * (t12i + t26i)
    let y1r = t33r + t34r
    let y1i = t33i + t34i
    let y2r = t6r + t41r
    let y2i = t6i + t41i
    let y3r = t35r + t40r
    let y3i = t35i + t40i
    let y4r = t5r - t17r
    let y4i = t5i - t17i
    let y5r = t35r - t40r
    let y5i = t35i - t40i
    let y6r = t6r - t41r
    let y6i = t6i - t41i
    let y7r = t33r - t34r
    let y7i = t33i - t34i
    let y9r = t38r - t37r
    let y9i = t38i - t37i
    let y10r = t42r - t20r
    let y10i = t42i - t20i
    let y11r = t36r + t39r
    let y11i = t36i + t39i
    let y12r = c1 * (t11r - t25r)
    let y12i = c1 * (t11i - t25i)
    let y13r = t36r - t39r
    let y13i = t36i - t39i
    let y14r = t42r + t20r
    let y14i = t42i + t20i
    let y15r = t38r + t37r
    let y15i = t38i + t37i
    re[p0] = t31r + t32r
    im[p0] = t31i + t32i
    re[p1] = y1r - y15i
    im[p1] = y1i + y15r
    re[p2] = y2r - y14i
    im[p2] = y2i + y14r
    re[p3] = y3r - y13i
    im[p3] = y3i + y13r
    re[p4] = y4r - y12i
    im[p4] = y4i + y12r
    re[p5] = y5r - y11i
    im[p5] = y5i + y11r
    re[p6] = y6r - y10i
    im[p6] = y6i + y10r
    re[p7] = y7r - y9i
    im[p7] = y7i + y9r
    re[p8] = t31r - t32r
    im[p8] = t31i - t32i
    re[p9] = y7r + y9i
    im[p9] = y7i - y9r
    re[p10] = y6r + y10i
    im[p10] = y6i - y10r
    re[p11] = y5r + y11i
    im[p11] = y5i - y11r
    re[p12] = y4r + y12i
    im[p12] = y4i - y12r
    re[p13] = y3r + y13i
    im[p13] = y3i - y13r
    re[p14] = y2r + y14i
    im[p14] = y2i - y14r
    re[p15] = y1r + y15i
    im[p15] = y1i - y15r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    if p11 < limit {
      p11 = p11 + mr
    }
    p11 = p11 + delta
    if p12 < limit {
      p12 = p12 + mr
    }
    p12 = p12 + delta
    if p13 < limit {
      p13 = p13 + mr
    }
    p13 = p13 + delta
    if p14 < limit {
      p14 = p14 + mr
    }
    p14 = p14 + delta
    if p15 < limit {
      p15 = p15 + mr
    }
    p15 = p15 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// The butterfly of the radix 16 stage of the prime factor
/// transform, for the twist 15.
///
/// This is the small transform of the original, `Pfacc.pfa16`,
/// with the twist 15.  Its constants are solved in double
/// precision, see `tools/solve_constants.py`.

///|
fn stage_r16_mu15(
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  let mr = m * 16
  let delta = 1 - m * kfac
  let mut limit = m * kfac
  let mut p0 = m * (0 * kfac % 16)
  let mut p1 = m * (1 * kfac % 16)
  let mut p2 = m * (2 * kfac % 16)
  let mut p3 = m * (3 * kfac % 16)
  let mut p4 = m * (4 * kfac % 16)
  let mut p5 = m * (5 * kfac % 16)
  let mut p6 = m * (6 * kfac % 16)
  let mut p7 = m * (7 * kfac % 16)
  let mut p8 = m * (8 * kfac % 16)
  let mut p9 = m * (9 * kfac % 16)
  let mut p10 = m * (10 * kfac % 16)
  let mut p11 = m * (11 * kfac % 16)
  let mut p12 = m * (12 * kfac % 16)
  let mut p13 = m * (13 * kfac % 16)
  let mut p14 = m * (14 * kfac % 16)
  let mut p15 = m * (15 * kfac % 16)
  let c1 = -1.0
  let c2 = 0.9238795325112883
  let c3 = -0.3826834323650863
  let c4 = 0.7071067811865476
  let c5 = -0.7071067811865476
  let c6 = 0.3826834323650863
  let c7 = -0.9238795325112883
  let mut i = 0
  while i < m {
    let t1r = re[p0] + re[p8]
    let t1i = im[p0] + im[p8]
    let t2r = re[p4] + re[p12]
    let t2i = im[p4] + im[p12]
    let t3r = re[p0] - re[p8]
    let t3i = im[p0] - im[p8]
    let t4r = c1 * (re[p4] - re[p12])
    let t4i = c1 * (im[p4] - im[p12])
    let t5r = t1r + t2r
    let t5i = t1i + t2i
    let t6r = t1r - t2r
    let t6i = t1i - t2i
    let t7r = re[p1] + re[p9]
    let t7i = im[p1] + im[p9]
    let t8r = re[p5] + re[p13]
    let t8i = im[p5] + im[p13]
    let t9r = re[p1] - re[p9]
    let t9i = im[p1] - im[p9]
    let t10r = re[p5] - re[p13]
    let t10i = im[p5] - im[p13]
    let t11r = t7r + t8r
    let t11i = t7i + t8i
    let t12r = t7r - t8r
    let t12i = t7i - t8i
    let t13r = re[p2] + re[p10]
    let t13i = im[p2] + im[p10]
    let t14r = re[p6] + re[p14]
    let t14i = im[p6] + im[p14]
    let t15r = re[p2] - re[p10]
    let t15i = im[p2] - im[p10]
    let t16r = re[p6] - re[p14]
    let t16i = im[p6] - im[p14]
    let t17r = t13r + t14r
    let t17i = t13i + t14i
    let t18r = c4 * (t15r - t16r)
    let t18i = c4 * (t15i - t16i)
    let t19r = c5 * (t15r + t16r)
    let t19i = c5 * (t15i + t16i)
    let t20r = c1 * (t13r - t14r)
    let t20i = c1 * (t13i - t14i)
    let t21r = re[p3] + re[p11]
    let t21i = im[p3] + im[p11]
    let t22r = re[p7] + re[p15]
    let t22i = im[p7] + im[p15]
    let t23r = re[p3] - re[p11]
    let t23i = im[p3] - im[p11]
    let t24r = re[p7] - re[p15]
    let t24i = im[p7] - im[p15]
    let t25r = t21r + t22r
    let t25i = t21i + t22i
    let t26r = t21r - t22r
    let t26i = t21i - t22i
    let t27r = t9r + t24r
    let t27i = t9i + t24i
    let t28r = t10r + t23r
    let t28i = t10i + t23i
    let t29r = t9r - t24r
    let t29i = t9i - t24i
    let t30r = t10r - t23r
    let t30i = t10i - t23i
    let t31r = t5r + t17r
    let t31i = t5i + t17i
    let t32r = t11r + t25r
    let t32i = t11i + t25i
    let t33r = t3r + t18r
    let t33i = t3i + t18i
    let t34r = c2 * t29r - c6 * t30r
    let t34i = c2 * t29i - c6 * t30i
    let t35r = t3r - t18r
    let t35i = t3i - t18i
    let t36r = c7 * t27r - c3 * t28r
    let t36i = c7 * t27i - c3 * t28i
    let t37r = t4r + t19r
    let t37i = t4i + t19i
    let t38r = c3 * t27r + c7 * t28r
    let t38i = c3 * t27i + c7 * t28i
    let t39r = t4r - t19r
    let t39i = t4i - t19i
    let t40r = c6 * t29r + c2 * t30r
    let t40i = c6 * t29i + c2 * t30i
    let t41r = c4 * (t12r - t26r)
    let t41i = c4 * (t12i - t26i)
    let t42r = c5 * (t12r + t26r)
    let t42i = c5 * (t12i + t26i)
    let y1r = t33r + t34r
    let y1i = t33i + t34i
    let y2r = t6r + t41r
    let y2i = t6i + t41i
    let y3r = t35r + t40r
    let y3i = t35i + t40i
    let y4r = t5r - t17r
    let y4i = t5i - t17i
    let y5r = t35r - t40r
    let y5i = t35i - t40i
    let y6r = t6r - t41r
    let y6i = t6i - t41i
    let y7r = t33r - t34r
    let y7i = t33i - t34i
    let y9r = t38r - t37r
    let y9i = t38i - t37i
    let y10r = t42r - t20r
    let y10i = t42i - t20i
    let y11r = t36r + t39r
    let y11i = t36i + t39i
    let y12r = c1 * (t11r - t25r)
    let y12i = c1 * (t11i - t25i)
    let y13r = t36r - t39r
    let y13i = t36i - t39i
    let y14r = t42r + t20r
    let y14i = t42i + t20i
    let y15r = t38r + t37r
    let y15i = t38i + t37i
    re[p0] = t31r + t32r
    im[p0] = t31i + t32i
    re[p1] = y1r - y15i
    im[p1] = y1i + y15r
    re[p2] = y2r - y14i
    im[p2] = y2i + y14r
    re[p3] = y3r - y13i
    im[p3] = y3i + y13r
    re[p4] = y4r - y12i
    im[p4] = y4i + y12r
    re[p5] = y5r - y11i
    im[p5] = y5i + y11r
    re[p6] = y6r - y10i
    im[p6] = y6i + y10r
    re[p7] = y7r - y9i
    im[p7] = y7i + y9r
    re[p8] = t31r - t32r
    im[p8] = t31i - t32i
    re[p9] = y7r + y9i
    im[p9] = y7i - y9r
    re[p10] = y6r + y10i
    im[p10] = y6i - y10r
    re[p11] = y5r + y11i
    im[p11] = y5i - y11r
    re[p12] = y4r + y12i
    im[p12] = y4i - y12r
    re[p13] = y3r + y13i
    im[p13] = y3i - y13r
    re[p14] = y2r + y14i
    im[p14] = y2i - y14r
    re[p15] = y1r + y15i
    im[p15] = y1i - y15r
    if p0 < limit {
      p0 = p0 + mr
    }
    p0 = p0 + delta
    if p1 < limit {
      p1 = p1 + mr
    }
    p1 = p1 + delta
    if p2 < limit {
      p2 = p2 + mr
    }
    p2 = p2 + delta
    if p3 < limit {
      p3 = p3 + mr
    }
    p3 = p3 + delta
    if p4 < limit {
      p4 = p4 + mr
    }
    p4 = p4 + delta
    if p5 < limit {
      p5 = p5 + mr
    }
    p5 = p5 + delta
    if p6 < limit {
      p6 = p6 + mr
    }
    p6 = p6 + delta
    if p7 < limit {
      p7 = p7 + mr
    }
    p7 = p7 + delta
    if p8 < limit {
      p8 = p8 + mr
    }
    p8 = p8 + delta
    if p9 < limit {
      p9 = p9 + mr
    }
    p9 = p9 + delta
    if p10 < limit {
      p10 = p10 + mr
    }
    p10 = p10 + delta
    if p11 < limit {
      p11 = p11 + mr
    }
    p11 = p11 + delta
    if p12 < limit {
      p12 = p12 + mr
    }
    p12 = p12 + delta
    if p13 < limit {
      p13 = p13 + mr
    }
    p13 = p13 + delta
    if p14 < limit {
      p14 = p14 + mr
    }
    p14 = p14 + delta
    if p15 < limit {
      p15 = p15 + mr
    }
    p15 = p15 + delta
    limit = limit + 1
    i = i + 1
  }
}

///|
/// Calls the butterfly of a radix and a twist.
///
/// The twist of the stage is the exponent of the roots of unity
/// of its small transform.

///|
fn stage_dispatch(
  r : Int32,
  mu : Int32,
  m : Int32,
  kfac : Int32,
  re : Array[Double],
  im : Array[Double],
) -> Unit {
  if r == 2 {
    if mu == 1 {
      stage_r2_mu1(m, kfac, re, im)
    }
  } else if r == 3 {
    if mu == 1 {
      stage_r3_mu1(m, kfac, re, im)
    } else if mu == 2 {
      stage_r3_mu2(m, kfac, re, im)
    }
  } else if r == 4 {
    if mu == 1 {
      stage_r4_mu1(m, kfac, re, im)
    } else if mu == 3 {
      stage_r4_mu3(m, kfac, re, im)
    }
  } else if r == 5 {
    if mu == 1 {
      stage_r5_mu1(m, kfac, re, im)
    } else if mu == 2 {
      stage_r5_mu2(m, kfac, re, im)
    } else if mu == 3 {
      stage_r5_mu3(m, kfac, re, im)
    } else if mu == 4 {
      stage_r5_mu4(m, kfac, re, im)
    }
  } else if r == 7 {
    if mu == 1 {
      stage_r7_mu1(m, kfac, re, im)
    } else if mu == 2 {
      stage_r7_mu2(m, kfac, re, im)
    } else if mu == 3 {
      stage_r7_mu3(m, kfac, re, im)
    } else if mu == 4 {
      stage_r7_mu4(m, kfac, re, im)
    } else if mu == 5 {
      stage_r7_mu5(m, kfac, re, im)
    } else if mu == 6 {
      stage_r7_mu6(m, kfac, re, im)
    }
  } else if r == 8 {
    if mu == 1 {
      stage_r8_mu1(m, kfac, re, im)
    } else if mu == 3 {
      stage_r8_mu3(m, kfac, re, im)
    } else if mu == 5 {
      stage_r8_mu5(m, kfac, re, im)
    } else if mu == 7 {
      stage_r8_mu7(m, kfac, re, im)
    }
  } else if r == 9 {
    if mu == 1 {
      stage_r9_mu1(m, kfac, re, im)
    } else if mu == 2 {
      stage_r9_mu2(m, kfac, re, im)
    } else if mu == 4 {
      stage_r9_mu4(m, kfac, re, im)
    } else if mu == 5 {
      stage_r9_mu5(m, kfac, re, im)
    } else if mu == 7 {
      stage_r9_mu7(m, kfac, re, im)
    } else if mu == 8 {
      stage_r9_mu8(m, kfac, re, im)
    }
  } else if r == 11 {
    if mu == 1 {
      stage_r11_mu1(m, kfac, re, im)
    } else if mu == 2 {
      stage_r11_mu2(m, kfac, re, im)
    } else if mu == 3 {
      stage_r11_mu3(m, kfac, re, im)
    } else if mu == 4 {
      stage_r11_mu4(m, kfac, re, im)
    } else if mu == 5 {
      stage_r11_mu5(m, kfac, re, im)
    } else if mu == 6 {
      stage_r11_mu6(m, kfac, re, im)
    } else if mu == 7 {
      stage_r11_mu7(m, kfac, re, im)
    } else if mu == 8 {
      stage_r11_mu8(m, kfac, re, im)
    } else if mu == 9 {
      stage_r11_mu9(m, kfac, re, im)
    } else if mu == 10 {
      stage_r11_mu10(m, kfac, re, im)
    }
  } else if r == 13 {
    if mu == 1 {
      stage_r13_mu1(m, kfac, re, im)
    } else if mu == 2 {
      stage_r13_mu2(m, kfac, re, im)
    } else if mu == 3 {
      stage_r13_mu3(m, kfac, re, im)
    } else if mu == 4 {
      stage_r13_mu4(m, kfac, re, im)
    } else if mu == 5 {
      stage_r13_mu5(m, kfac, re, im)
    } else if mu == 6 {
      stage_r13_mu6(m, kfac, re, im)
    } else if mu == 7 {
      stage_r13_mu7(m, kfac, re, im)
    } else if mu == 8 {
      stage_r13_mu8(m, kfac, re, im)
    } else if mu == 9 {
      stage_r13_mu9(m, kfac, re, im)
    } else if mu == 10 {
      stage_r13_mu10(m, kfac, re, im)
    } else if mu == 11 {
      stage_r13_mu11(m, kfac, re, im)
    } else if mu == 12 {
      stage_r13_mu12(m, kfac, re, im)
    }
  } else if r == 16 {
    if mu == 1 {
      stage_r16_mu1(m, kfac, re, im)
    } else if mu == 3 {
      stage_r16_mu3(m, kfac, re, im)
    } else if mu == 5 {
      stage_r16_mu5(m, kfac, re, im)
    } else if mu == 7 {
      stage_r16_mu7(m, kfac, re, im)
    } else if mu == 9 {
      stage_r16_mu9(m, kfac, re, im)
    } else if mu == 11 {
      stage_r16_mu11(m, kfac, re, im)
    } else if mu == 13 {
      stage_r16_mu13(m, kfac, re, im)
    } else if mu == 15 {
      stage_r16_mu15(m, kfac, re, im)
    }
  } else {
    abort("the transform length has a factor without a butterfly")
  }
}