no python files to be committed in isafunctions
[openpower-isa.git] / src / openpower / decoder / isa / remap_dct_yield.py
index 88739b88d5d4f4825737de1fe570539b85bd63d3..c2758444646b8070def0c846e9744f15a44174f7 100644 (file)
@@ -48,7 +48,8 @@ def iterate_dct_inner_halfswap_loadstore(SVSHAPE):
     # 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)
@@ -56,11 +57,16 @@ def iterate_dct_inner_halfswap_loadstore(SVSHAPE):
     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]:
@@ -264,7 +270,7 @@ def iterate_dct_outer_butterfly_indices(SVSHAPE):
     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))
@@ -584,7 +590,7 @@ def inverse_transform2(vec):
         if jle == 0b111: # all loops end
             break
 
-    print("transform2 result", vec)
+    print("inverse_transform2 result", vec)
 
     return vec
 
@@ -781,7 +787,7 @@ def demo_idct():
     # 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
@@ -790,7 +796,7 @@ def demo_idct():
     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