1 # SPDX-License-Identifier: LGPLv3+
2 # Copyright (C) 2021 Luke Kenneth Casson Leighton <lkcl@lkcl.net>
3 # Funded by NLnet http://nlnet.nl
4 """SVP64 Data Structures
6 For full spec see https://libre-soc.org/openpower/sv/
9 from nmigen
import Record
12 # in nMigen, Record begins at the LSB and fills upwards
13 # however in OpenPOWER, numbering is MSB0. sigh.
14 class SVP64Rec(Record
):
15 """SVP64 RM (Remap) Record.
17 https://libre-soc.org/openpower/sv/svp64/
19 | Field Name | Field bits | Description |
20 |-------------|------------|----------------------------------------|
21 | MASKMODE | `0` | Execution (predication) Mask Kind |
22 | MASK | `1:3` | Execution Mask |
23 | ELWIDTH | `4:5` | Element Width |
24 | ELWIDTH_SRC | `6:7` | Element Width for Source |
25 | SUBVL | `8:9` | Sub-vector length |
26 | EXTRA | `10:18` | context-dependent extra |
27 | MODE | `19:23` | changes Vector behaviour |
29 def __init__(self
, name
=None):
30 Record
.__init
__(self
, layout
=[("mode" , 5),
36 ("mmode" , 1)], name
=name
)
39 return [self
.mmode
, self
.mask
, self
.elwidth
, self
.ewsrc
,
40 self
.subvl
, self
.extra
, self
.mode
]
43 # in nMigen, Record begins at the LSB and fills upwards
44 # however in OpenPOWER, numbering is MSB0. sigh.
45 class SVP64REMAP(Record
):
46 """SVP64 SHAPE (REMAP) Record.
48 https://libre-soc.org/openpower/sv/remap/
50 | Field Name | Field bits | Description |
51 |-------------|------------|----------------------------------------|
52 | XDIMSZ | `0:5` | X Dimension size |
53 | YDIMSZ | `6:11` | Y Dimension size |
54 | ZDIMSZ | `12:17` | Z Dimension size |
55 | PERMUTE | `18:20` | Permutation order (XYZ, XZY, YXZ...) |
56 | INVXYZ | `21:23` | Invert order of X or Y or Z |
57 | OFFSET | `24:29` | Adds to index before modulo |
58 | APPLYDIM | `30:31` | how many dimensions in use |
60 def __init__(self
, name
=None):
61 Record
.__init
__(self
, layout
=[("applydim" , 2),
67 ("xdimsz" , 6)], name
=name
)
70 return [self
.applydim
, self
.offset
, self
.invxyz
, self
.permute
,
71 self
.zdimsz
, self
.ydimsz
, self
.xdimsz
]