# get indices to iterate over, in the required order
n = SVSHAPE.lims[0]
mode = SVSHAPE.lims[1]
- print ("inner halfswap loadstore", n, mode, SVSHAPE.skip)
+ print ("inner halfswap loadstore", n, mode, SVSHAPE.skip,
+ "submode", SVSHAPE.submode2)
# reference list for not needing to do data-swaps, just swap what
# *indices* are referenced (two levels of indirection at the moment)
ji = list(range(n))
levels = n.bit_length() - 1
- ji = halfrev2(ji, False)
- if False: # swap: TODO, add extra bit-reverse mode
- ri = [reverse_bits(i, levels) for i in range(n)]
- ji = [ji[ri[i]] for i in range(n)]
+ ri = [reverse_bits(i, levels) for i in range(n)]
+ if SVSHAPE.mode == 0b01: # FFT, bitrev only
+ ji = [ji[ri[i]] for i in range(n)]
+ elif SVSHAPE.submode2 == 0b001:
+ ji = [ji[ri[i]] for i in range(n)]
+ ji = halfrev2(ji, True)
+ else:
+ ji = halfrev2(ji, False)
+ ji = [ji[ri[i]] for i in range(n)]
# invert order if requested
if SVSHAPE.invxyz[0]:
if len(x_r) == 0:
return
- #print ("outer butterfly")
+ print ("outer butterfly", mode, SVSHAPE.skip, "submode", SVSHAPE.submode2)
# I-DCT, reference (read/write) the in-place data in *reverse-bit-order*
ri = list(range(n))
if jle == 0b111: # all loops end
break
- print("transform2 result", vec)
+ print("inverse_transform2 result", vec)
return vec