(no commit message)
[libreriscv.git] / simple_v_extension / shape_table_format.mdwn
1 Shape is 32-bits When SHAPE is set entirely to zeros, remapping is
2 disabled: the register's elements are a linear (1D) vector.
3
4 | 31..30 | 29..24 | 23..21 | 20..18 | 17..12 | 11..6 | 5..0 |
5 | -------- | ------ | ------- | ------- | ------- | -------- | ------- |
6 | applydim |modulo | invxyz | permute | zdimsz | ydimsz | xdimsz |
7
8 applydim will set to zero the dimensions less than this. applydim=0 applies all three. applydim=1 applies y and z. applydim=2 applys only z. applydim=3 is reserved.
9
10 invxyz will invert the start index of each of x, y or z. If invxyz[0] is zero then x-dimensional counting begins from 0 and increments, otherwise it begins from xdimsz-1 and iterates down to zero. Likewise for y and z.
11
12 modulo will cause the output to wrap and remain within the range 0 to modulo. The value zero disables modulus application. Note that modulo arithmetic is applied after all other remapping calculations.
13
14 xdimsz, ydimsz and zdimsz are offset by 1, such that a value of 0 indicates
15 that the array dimensionality for that dimension is 1. A value of xdimsz=2
16 would indicate that in the first dimension there are 3 elements in the
17 array. The format of the array is therefore as follows:
18
19 array[xdim+1][ydim+1][zdim+1]
20
21 However whilst illustrative of the dimensionality, that does not take the
22 "permute" setting into account. "permute" may be any one of six values
23 (0-5, with values of 6 and 7 being reserved, and not legal). The table
24 below shows how the permutation dimensionality order works:
25
26 | permute | order | array format |
27 | ------- | ----- | ------------------------ |
28 | 000 | 0,1,2 | (xdim+1)(ydim+1)(zdim+1) |
29 | 001 | 0,2,1 | (xdim+1)(zdim+1)(ydim+1) |
30 | 010 | 1,0,2 | (ydim+1)(xdim+1)(zdim+1) |
31 | 011 | 1,2,0 | (ydim+1)(zdim+1)(xdim+1) |
32 | 100 | 2,0,1 | (zdim+1)(xdim+1)(ydim+1) |
33 | 101 | 2,1,0 | (zdim+1)(ydim+1)(xdim+1) |
34
35 In other words, the "permute" option changes the order in which
36 nested for-loops over the array would be done.
37