selectconcat)
from openpower.decoder.isa.remapyield import iterate_indices
from openpower.decoder.isa.remap_fft_yield import iterate_butterfly_indices
-from openpower.sv.svp64 import SVP64REMAP
+from openpower.decoder.isa.remap_dct_yield import (
+ iterate_dct_inner_butterfly_indices,
+ iterate_dct_inner_costable_indices,
+ iterate_dct_outer_butterfly_indices,
+ iterate_dct_inner_halfswap_loadstore)
+from openpower.sv.svp64 import SVP64SHAPE
import os
from copy import deepcopy
from openpower.util import log
offs = 0
# set up sub-fields from Record layout
self.fsi = {}
- l = deepcopy(SVP64REMAP.layout)
+ l = deepcopy(SVP64SHAPE.layout)
l.reverse()
for field, width in l:
end = offs+width
fs = tuple(range(offs, end))
v = FieldSelectableInt(self, fs)
self.fsi[field] = v
- #log("SVSHAPE setup field", field, offs, end)
+ log("SVSHAPE setup field", field, offs, end)
offs = end
+ @property
+ def submode2(self):
+ return self.fsi['permute'].asint(msb0=True)
+
+ @submode2.setter
+ def submode2(self, value):
+ self.fsi['permute'].eq(value)
+
@property
def order(self):
permute = self.fsi['permute'].asint(msb0=True)
- return SVP64REMAP.order(permute)
+ return SVP64SHAPE.order(permute)
@order.setter
def order(self, value):
- rorder = SVP64REMAP.rorder(value)
+ rorder = SVP64SHAPE.rorder(value)
self.fsi['permute'].eq(rorder)
@property
self.fsi['offset'].eq(value)
def get_iterator(self):
+ log ("SVSHAPE get_iterator", self.mode, self.ydimsz)
if self.mode == 0b00:
iterate_fn = iterate_indices
- elif self.mode == 0b01:
- iterate_fn = iterate_butterfly_indices
+ elif self.mode in [0b01, 0b11]:
+ # further sub-selection
+ if self.ydimsz == 1:
+ iterate_fn = iterate_butterfly_indices
+ elif self.ydimsz in [2, 4]:
+ iterate_fn = iterate_dct_inner_butterfly_indices
+ elif self.ydimsz == 3:
+ iterate_fn = iterate_dct_outer_butterfly_indices
+ elif self.ydimsz in [5, 13]:
+ iterate_fn = iterate_dct_inner_costable_indices
+ elif self.ydimsz in [6, 14, 15]:
+ iterate_fn = iterate_dct_inner_halfswap_loadstore
# create a **NEW** iterator each time this is called
return iterate_fn(deepcopy(self))