# 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
# j schedule
SVSHAPE0 = SVSHAPE()
SVSHAPE0.lims = [xdim, 0b0000010, 0]
- SVSHAPE0.submode2 = 0b100
+ SVSHAPE0.submode2 = 0b11
SVSHAPE0.mode = 0b11
SVSHAPE0.skip = 0b00
SVSHAPE0.offset = 0 # experiment with different offset, here
SVSHAPE1 = SVSHAPE()
SVSHAPE1.lims = [xdim, 0b0000010, 0]
SVSHAPE1.mode = 0b11
- SVSHAPE1.submode2 = 0b100
+ SVSHAPE1.submode2 = 0b11
SVSHAPE1.skip = 0b01
SVSHAPE1.offset = 0 # experiment with different offset, here
SVSHAPE1.invxyz = [1,0,1] # inversion if desired