docs: void passf3(final int ido, final int l1, final double in[], final int in_off, final double out[], final int out_off, final int offset, final int isign) {
  		final double taur = -0.5;
  		final double taui = 0.866025403784438707610604524234076962;
  		double ci2, ci3, di2, di3, cr2, cr3, dr2, dr3, ti2, tr2;
  		int iw1, iw2;
  
  		iw1 = offset;
  		iw2 = iw1 + ido;
  
  		final int idxt = l1 * ido;
  
  		if (ido == 2) {
  			for (int k = 1; k <= l1; k++) {
  				int iidx1 = in_off + (3 * k - 2) * ido;
  				int iidx2 = iidx1 + ido;
  				int iidx3 = iidx1 - ido;
  				double i1r = in[iidx1];
  				double i1i = in[iidx1 + 1];
  				double i2r = in[iidx2];
  				double i2i = in[iidx2 + 1];
  				double i3r = in[iidx3];
  				double i3i = in[iidx3 + 1];
  
  				tr2 = i1r + i2r;
  				cr2 = i3r + taur * tr2;
  				ti2 = i1i + i2i;
  				ci2 = i3i + taur * ti2;
  				cr3 = isign * taui * (i1r - i2r);
  				ci3 = isign * taui * (i1i - i2i);
  
  				int oidx1 = out_off + (k - 1) * ido;
  				int oidx2 = oidx1 + idxt;
  				int oidx3 = oidx2 + idxt;
  				out[oidx1] = in[iidx3] + tr2;
  				out[oidx1 + 1] = i3i + ti2;
  				out[oidx2] = cr2 - ci3;
  				out[oidx2 + 1] = ci2 + cr3;
  				out[oidx3] = cr2 + ci3;
  				out[oidx3 + 1] = ci2 - cr3;
  			}
  		} else {
  			for (int k = 1; k <= l1; k++) {
  				int idx1 = in_off + (3 * k - 2) * ido;
  				int idx2 = out_off + (k - 1) * ido;
  				for (int i = 0; i < ido - 1; i += 2) {
  					int iidx1 = i + idx1;
  					int iidx2 = iidx1 + ido;
  					int iidx3 = iidx1 - ido;
  					double a1r = in[iidx1];
  					double a1i = in[iidx1 + 1];
  					double a2r = in[iidx2];
  					double a2i = in[iidx2 + 1];
  					double a3r = in[iidx3];
  					double a3i = in[iidx3 + 1];
  
  					tr2 = a1r + a2r;
  					cr2 = a3r + taur * tr2;
  					ti2 = a1i + a2i;
  					ci2 = a3i + taur * ti2;
  					cr3 = isign * taui * (a1r - a2r);
  					ci3 = isign * taui * (a1i - a2i);
  					dr2 = cr2 - ci3;
  					dr3 = cr2 + ci3;
  					di2 = ci2 + cr3;
  					di3 = ci2 - cr3;
  
  					int widx1 = i + iw1;
  					int widx2 = i + iw2;
  					double w1r = wtable[widx1];
  					double w1i = isign * wtable[widx1 + 1];
  					double w2r = wtable[widx2];
  					double w2i = isign * wtable[widx2 + 1];
  
  					int oidx1 = i + idx2;
  					int oidx2 = oidx1 + idxt;
  					int oidx3 = oidx2 + idxt;
  					out[oidx1] = a3r + tr2;
  					out[oidx1 + 1] = a3i + ti2;
  					out[oidx2] = w1r * dr2 - w1i * di2;
  					out[oidx2 + 1] = w1r * di2 + w1i * dr2;
  					out[oidx3] = w2r * dr3 - w2i * di3;
  					out[oidx3 + 1] = w2r * di3 + w2i * dr3;
  				}
  			}
  		}
  	}