• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright © 2024 Imagination Technologies Ltd.
2# SPDX-License-Identifier: MIT
3
4from pco_pygen_common import *
5
6OP_PHASE = enum_type('op_phase', [
7   ('0', 0, 'p0'),
8   ('ctrl', 0),
9   ('1', 1, 'p1'),
10   ('2_pck', 2, 'p2_pck'),
11   ('2', 2, 'p2'),
12   ('2_tst', 3, 'p2_tst'),
13   ('2_mov', 4, 'p2_mov'),
14   ('backend', 5),
15])
16
17SR = enum_type('sr', [
18   ('pixout0', 32),
19   ('pixout1', 33),
20   ('pixout2', 34),
21   ('pixout3', 35),
22
23   ('intl0', 36),
24   ('intl1', 37),
25   ('intl2', 38),
26   ('intl3', 39),
27   ('intl4', 40),
28   ('intl5', 41),
29   ('intl6', 42),
30   ('intl7', 43),
31
32   ('slot7', 36),
33   ('slot6', 37),
34   ('slot5', 38),
35   ('slot4', 39),
36   ('slot3', 40),
37   ('slot2', 41),
38   ('slot1', 42),
39   ('slot0', 43),
40
41   ('face_orient', 44),
42   ('back_face', 44),
43   ('cluster_num', 45),
44   ('output_part', 46),
45   ('task_id', 47),
46   ('slot_num', 48),
47   ('tile_x_pix', 49),
48   ('tile_y_pix', 50),
49   ('inst_num', 51),
50   ('dm_task_type', 52),
51   ('samp_num', 53),
52
53   ('tiled_ld_comp0', 54),
54   ('tiled_ld_comp1', 55),
55   ('tiled_ld_comp2', 56),
56   ('tiled_ld_comp3', 57),
57
58   ('tiled_st_comp0', 58),
59   ('tiled_st_comp1', 59),
60   ('tiled_st_comp2', 60),
61   ('tiled_st_comp3', 61),
62
63   ('batch_num', 62),
64   ('inst_valid', 63),
65
66   ('tile_xy', 96),
67
68   ('x_p', 97),
69   ('x_s', 98),
70
71   ('y_p', 100),
72   ('y_s', 101),
73
74   ('wg_id', 102),
75
76   ('sh_alloc_size', 103),
77
78   ('global0', 104),
79   ('global1', 105),
80   ('global2', 106),
81   ('global3', 107),
82   ('global4', 108),
83   ('global5', 109),
84   ('global6', 110),
85   ('global7', 111),
86
87   ('local_addr_inst_num', 112),
88
89   ('tile_x_p', 114),
90   ('tile_x_s', 115),
91   ('tile_y_p', 116),
92   ('tile_y_s', 117),
93
94   ('render_tgt_id', 118),
95
96   ('tiled_ld_comp4', 119),
97   ('tiled_ld_comp5', 120),
98   ('tiled_ld_comp6', 121),
99   ('tiled_ld_comp7', 122),
100
101   ('tiled_st_comp4', 123),
102   ('tiled_st_comp5', 124),
103   ('tiled_st_comp6', 125),
104   ('tiled_st_comp7', 126),
105
106   ('gpu_offset', 127),
107
108   ('timer_80ns', 160),
109
110   ('pixout4', 164),
111   ('pixout5', 165),
112   ('pixout6', 166),
113   ('pixout7', 167),
114])
115
116# Common field types.
117
118## Basic types.
119F_BOOL = field_type('bool', BaseType.bool, 1)
120F_UINT1 = field_type('uint1', BaseType.uint, 1)
121F_UINT2 = field_type('uint2', BaseType.uint, 2)
122F_UINT3 = field_type('uint3', BaseType.uint, 3)
123F_UINT4 = field_type('uint4', BaseType.uint, 4)
124F_UINT5 = field_type('uint5', BaseType.uint, 5)
125F_UINT6 = field_type('uint6', BaseType.uint, 6)
126F_UINT7 = field_type('uint7', BaseType.uint, 7)
127F_UINT8 = field_type('uint8', BaseType.uint, 8)
128F_UINT11 = field_type('uint11', BaseType.uint, 11)
129F_UINT16 = field_type('uint16', BaseType.uint, 16)
130F_UINT32 = field_type('uint32', BaseType.uint, 32)
131
132## [1..4] -> [0..3]
133F_UINT2_POS_INC = field_type('uint2_pos_inc', BaseType.uint, 2, dec_bits=3, check='{0} >= 1 && {0} <= 4', encode='{} - 1')
134## [1..16] -> [1..15,0]
135F_UINT4_POS_WRAP = field_type('uint4_pos_wrap', BaseType.uint, 4, dec_bits=5, check='{0} >= 1 && {0} <= 16', encode='{} % 16')
136## 32-bit offset; lowest bit == 0b0.
137F_OFFSET31 = field_type('offset31', BaseType.uint, 31, dec_bits=32, check='!({} & 0b1)', encode='{} >> 1')
138## 8-bit value; lowest 2 bits == 0b00.
139F_UINT6MUL4 = field_type('uint6mul4', BaseType.uint, 6, dec_bits=8, check='!({} & 0b11)', encode='{} >> 2')
140
141# Instruction group header definitions.
142F_OPORG = field_enum_type(
143name='oporg', num_bits=3,
144elems=[
145   ('p0', 0b000),
146   ('p2', 0b001),
147   ('be', 0b010),
148   ('p0_p1', 0b011),
149   ('p0_p2', 0b100),
150   ('p0_p1_p2', 0b101),
151   ('p0_p2_be', 0b110),
152   ('p0_p1_p2_be', 0b111),
153])
154
155F_OPCNT = field_enum_type(
156name='opcnt', num_bits=3,
157elems=[
158   ('p0', 0b001),
159   ('p1', 0b010),
160   ('p2', 0b100),
161], is_bitset=True)
162
163F_CC = field_enum_type(
164name='cc', num_bits=2,
165elems=[
166   ('e1_zx', 0b00, ''),
167   ('e1_z1', 0b01, 'if(p0)'),
168   ('ex_zx', 0b10, '(ignorepe)'),
169   ('e1_z0', 0b11, 'if(!p0)'),
170])
171
172F_CC1 = field_enum_subtype(name='cc1', parent=F_CC, num_bits=1)
173
174F_ALUTYPE = field_enum_type(
175name='alutype', num_bits=2,
176elems=[
177   ('main', 0b00),
178   ('bitwise', 0b10),
179   ('control', 0b11),
180])
181
182F_CTRLOP = field_enum_type(
183name='ctrlop', num_bits=4,
184elems=[
185   ('b', 0b0000),
186   ('lapc', 0b0001),
187   ('savl', 0b0010),
188   ('cnd', 0b0011),
189   ('wop', 0b0100),
190   ('wdf', 0b0101),
191   ('mutex', 0b0110),
192   ('nop', 0b0111),
193   ('itrsmp', 0b1000),
194   ('sbo', 0b1011),
195   ('ditr', 0b1100),
196])
197
198I_IGRP_HDR = bit_set(
199name='igrp_hdr',
200pieces=[
201   ('da', (0, '7:4')),
202   ('length', (0, '3:0')),
203   ('ext', (1, '7')),
204   ('oporg', (1, '6:4')),
205   ('opcnt', (1, '6:4')),
206   ('olchk', (1, '3')),
207   ('w1p', (1, '2')),
208   ('w0p', (1, '1')),
209   ('cc', (1, '0')),
210
211   ('end', (2, '7')),
212   ('alutype', (2, '6:5')),
213   ('rsvd', (2, '4')),
214   ('atom', (2, '3')),
215   ('rpt', (2, '2:1')),
216   ('ccext', (2, '0')),
217
218   ('miscctl', (2, '7')),
219   ('ctrlop', (2, '4:1')),
220],
221fields=[
222   ('da', (F_UINT4, ['da'])),
223   ('length', (F_UINT4_POS_WRAP, ['length'])),
224   ('ext', (F_BOOL, ['ext'])),
225   ('oporg', (F_OPORG, ['oporg'])),
226   ('opcnt', (F_OPCNT, ['opcnt'])),
227   ('olchk', (F_BOOL, ['olchk'])),
228   ('w1p', (F_BOOL, ['w1p'])),
229   ('w0p', (F_BOOL, ['w0p'])),
230   ('cc1', (F_CC1, ['cc'])),
231
232   ('end', (F_BOOL, ['end'])),
233   ('alutype', (F_ALUTYPE, ['alutype'])),
234   ('rsvd', (F_UINT1, ['rsvd'], 0)),
235   ('atom', (F_BOOL, ['atom'])),
236   ('rpt', (F_UINT2_POS_INC, ['rpt'])),
237   ('cc', (F_CC, ['ccext', 'cc'])),
238
239   ('miscctl', (F_UINT1, ['miscctl'])),
240   ('ctrlop', (F_CTRLOP, ['ctrlop'])),
241])
242
243I_IGRP_HDR_MAIN_BRIEF = bit_struct(
244name='main_brief',
245bit_set=I_IGRP_HDR,
246field_mappings=[
247   'da',
248   'length',
249   ('ext', 'ext', False),
250   'oporg',
251   'olchk',
252   'w1p',
253   'w0p',
254   ('cc', 'cc1'),
255])
256
257I_IGRP_HDR_MAIN = bit_struct(
258name='main',
259bit_set=I_IGRP_HDR,
260field_mappings=[
261   'da',
262   'length',
263   ('ext', 'ext', True),
264   'oporg',
265   'olchk',
266   'w1p',
267   'w0p',
268   'cc',
269   'end',
270   ('alutype', 'alutype', 'main'),
271   'rsvd',
272   'atom',
273   'rpt',
274])
275
276I_IGRP_HDR_BITWISE = bit_struct(
277name='bitwise',
278bit_set=I_IGRP_HDR,
279field_mappings=[
280   'da',
281   'length',
282   ('ext', 'ext', True),
283   'opcnt',
284   'olchk',
285   'w1p',
286   'w0p',
287   'cc',
288   'end',
289   ('alutype', 'alutype', 'bitwise'),
290   'rsvd',
291   'atom',
292   'rpt',
293])
294
295I_IGRP_HDR_CONTROL = bit_struct(
296name='control',
297bit_set=I_IGRP_HDR,
298field_mappings=[
299   'da',
300   'length',
301   ('ext', 'ext', True),
302   ('opcnt', 'opcnt', 0),
303   'olchk',
304   'w1p',
305   'w0p',
306   'cc',
307   'miscctl',
308   ('alutype', 'alutype', 'control'),
309   'ctrlop',
310])
311
312# Upper/lower source definitions.
313F_IS0_SEL = field_enum_type(
314name='is0_sel', num_bits=3,
315elems=[
316   ('s0', 0b000),
317   ('s3', 0b001),
318   ('s4', 0b010),
319   ('s5', 0b011),
320   ('s1', 0b100),
321   ('s2', 0b101),
322])
323
324F_IS0_SEL2 = field_enum_subtype(name='is0_sel2', parent=F_IS0_SEL, num_bits=2)
325
326F_REGBANK = field_enum_type(
327name='regbank', num_bits=3,
328elems=[
329   ('special', 0b000),
330   ('temp', 0b001),
331   ('vtxin', 0b010),
332   ('coeff', 0b011),
333   ('shared', 0b100),
334   ('coeff_alt', 0b101),
335   ('idx0', 0b110),
336   ('idx1', 0b111),
337])
338
339F_IDXBANK = field_enum_type(
340name='idxbank', num_bits=3,
341elems=[
342   ('temp', 0b000),
343   ('vtxin', 0b001),
344   ('coeff', 0b010),
345   ('shared', 0b011),
346   ('idx', 0b101),
347   ('coeff_alt', 0b110),
348   ('pixout', 0b111),
349])
350
351F_REGBANK2 = field_enum_subtype(name='regbank2', parent=F_REGBANK, num_bits=2)
352F_REGBANK1 = field_enum_subtype(name='regbank1', parent=F_REGBANK, num_bits=1)
353
354I_SRC = bit_set(
355name='src',
356pieces=[
357   ('ext0', (0, '7')),
358   ('sbA_0_b0', (0, '6')),
359   ('sA_5_0_b0', (0, '5:0')),
360
361   ('sel', (1, '7')),
362   ('ext1', (1, '6')),
363
364   ('mux_1_0_b1', (1, '5:4')),
365   ('sbA_2_1_b1', (1, '3:2')),
366   ('sA_7_6_b1', (1, '1:0')),
367
368   ('sbB_0_b1', (1, '5')),
369   ('sB_4_0_b1', (1, '4:0')),
370
371   ('rsvd2', (2, '7:3')),
372   ('sA_10_8_b2', (2, '2:0')),
373
374   ('ext2', (2, '7')),
375   ('mux_1_0_b2', (2, '6:5')),
376   ('sbA_1_b2', (2, '4')),
377   ('sbB_1_b2', (2, '3')),
378   ('sA_6_b2', (2, '2')),
379   ('sB_6_5_b2', (2, '1:0')),
380
381   ('sA_10_8_b3', (3, '7:5')),
382   ('mux_2_b3', (3, '4')),
383   ('sbA_2_b3', (3, '3')),
384   ('rsvd3', (3, '2')),
385   ('sA_7_b3', (3, '1')),
386   ('sB_7_b3', (3, '0')),
387
388   ('sbC_1_0_b3', (3, '7:6')),
389   ('sC_5_0_b3', (3, '5:0')),
390
391   ('sbC_2_b4', (4, '7')),
392   ('sC_7_6_b4', (4, '6:5')),
393   ('mux_2_b4', (4, '4')),
394   ('sbA_2_b4', (4, '3')),
395   ('ext4', (4, '2')),
396   ('sA_7_b4', (4, '1')),
397   ('sB_7_b4', (4, '0')),
398
399   ('rsvd5', (5, '7:6')),
400   ('sC_10_8_b5', (5, '5:3')),
401   ('sA_10_8_b5', (5, '2:0')),
402],
403fields=[
404   ('ext0', (F_BOOL, ['ext0'])),
405   ('sbA_1bit_b0', (F_REGBANK1, ['sbA_0_b0'])),
406   ('sA_6bit_b0', (F_UINT6, ['sA_5_0_b0'])),
407
408   ('sel', (F_BOOL, ['sel'])),
409   ('ext1', (F_BOOL, ['ext1'])),
410   ('mux_2bit_b1', (F_IS0_SEL2, ['mux_1_0_b1'])),
411   ('sbA_3bit_b1', (F_REGBANK, ['sbA_2_1_b1', 'sbA_0_b0'])),
412   ('sA_11bit_b2', (F_UINT11, ['sA_10_8_b2', 'sA_7_6_b1', 'sA_5_0_b0'])),
413   ('rsvd2', (F_UINT5, ['rsvd2'], 0)),
414
415   ('sbB_1bit_b1', (F_REGBANK1, ['sbB_0_b1'])),
416   ('sB_5bit_b1', (F_UINT5, ['sB_4_0_b1'])),
417
418   ('ext2', (F_BOOL, ['ext2'])),
419   ('mux_2bit_b2', (F_IS0_SEL2, ['mux_1_0_b2'])),
420   ('sbA_2bit_b2', (F_REGBANK2, ['sbA_1_b2', 'sbA_0_b0'])),
421   ('sbB_2bit_b2', (F_REGBANK2, ['sbB_1_b2', 'sbB_0_b1'])),
422   ('sA_7bit_b2', (F_UINT7, ['sA_6_b2', 'sA_5_0_b0'])),
423   ('sB_7bit_b2', (F_UINT7, ['sB_6_5_b2', 'sB_4_0_b1'])),
424
425   ('sA_11bit_b3', (F_UINT11, ['sA_10_8_b3', 'sA_7_b3', 'sA_6_b2', 'sA_5_0_b0'])),
426   ('mux_3bit_b3', (F_IS0_SEL, ['mux_2_b3', 'mux_1_0_b2'])),
427   ('sbA_3bit_b3', (F_REGBANK, ['sbA_2_b3', 'sbA_1_b2', 'sbA_0_b0'])),
428   ('rsvd3', (F_UINT1, ['rsvd3'], 0)),
429   ('sB_8bit_b3', (F_UINT8, ['sB_7_b3', 'sB_6_5_b2', 'sB_4_0_b1'])),
430
431   ('sbC_2bit_b3', (F_REGBANK2, ['sbC_1_0_b3'])),
432   ('sC_6bit_b3', (F_UINT6, ['sC_5_0_b3'])),
433
434   ('rsvd4', (F_UINT1, ['sbC_2_b4'], 0)),
435   ('sbC_3bit_b4', (F_REGBANK, ['sbC_2_b4', 'sbC_1_0_b3'])),
436   ('sC_8bit_b4', (F_UINT8, ['sC_7_6_b4', 'sC_5_0_b3'])),
437   ('mux_3bit_b4', (F_IS0_SEL, ['mux_2_b4', 'mux_1_0_b2'])),
438   ('sbA_3bit_b4', (F_REGBANK, ['sbA_2_b4', 'sbA_1_b2', 'sbA_0_b0'])),
439   ('ext4', (F_BOOL, ['ext4'])),
440   ('sA_8bit_b4', (F_UINT8, ['sA_7_b4', 'sA_6_b2', 'sA_5_0_b0'])),
441   ('sB_8bit_b4', (F_UINT8, ['sB_7_b4', 'sB_6_5_b2', 'sB_4_0_b1'])),
442
443   ('rsvd5', (F_UINT2, ['rsvd5'], 0)),
444   ('rsvd5_', (F_UINT3, ['sC_10_8_b5'], 0)),
445   ('sC_11bit_b5', (F_UINT11, ['sC_10_8_b5', 'sC_7_6_b4', 'sC_5_0_b3'])),
446   ('sA_11bit_b5', (F_UINT11, ['sA_10_8_b5', 'sA_7_b4', 'sA_6_b2', 'sA_5_0_b0'])),
447])
448
449class SrcSpec(object):
450   def __init__(self, is_upper, sbA_bits, sA_bits, sbB_bits, sB_bits, sbC_bits, sC_bits, mux_bits):
451      self.is_upper = is_upper
452      self.sbA_bits = sbA_bits
453      self.sA_bits  = sA_bits
454      self.sbB_bits = sbB_bits
455      self.sB_bits  = sB_bits
456      self.sbC_bits = sbC_bits
457      self.sC_bits  = sC_bits
458      self.mux_bits = mux_bits
459
460# Lower sources.
461I_ONE_LO_1B6I = bit_struct(
462name='1lo_1b6i',
463bit_set=I_SRC,
464field_mappings=[
465   ('ext0', 'ext0', 0),
466
467   ('sb0', 'sbA_1bit_b0'),
468   ('s0', 'sA_6bit_b0'),
469], data=SrcSpec(False, 1, 6, -1, -1, -1, -1, -1))
470
471I_ONE_LO_3B11I_2M = bit_struct(
472name='1lo_3b11i_2m',
473bit_set=I_SRC,
474field_mappings=[
475   ('ext0', 'ext0', 1),
476   ('sel', 'sel', 0),
477   ('ext1', 'ext1', 0),
478   ('rsvd2', 'rsvd2'),
479
480   ('sb0', 'sbA_3bit_b1'),
481   ('s0', 'sA_11bit_b2'),
482   ('is0', 'mux_2bit_b1'),
483], data=SrcSpec(False, 3, 11, -1, -1, -1, -1, 2))
484
485I_TWO_LO_1B6I_1B5I = bit_struct(
486name='2lo_1b6i_1b5i',
487bit_set=I_SRC,
488field_mappings=[
489   ('ext0', 'ext0', 1),
490   ('sel', 'sel', 1),
491   ('ext1', 'ext1', 0),
492
493   ('sb0', 'sbA_1bit_b0'),
494   ('s0', 'sA_6bit_b0'),
495   ('sb1', 'sbB_1bit_b1'),
496   ('s1', 'sB_5bit_b1'),
497], data=SrcSpec(False, 1, 6, 1, 5, -1, -1, -1))
498
499I_TWO_LO_2B7I_2B7I_2M = bit_struct(
500name='2lo_2b7i_2b7i_2m',
501bit_set=I_SRC,
502field_mappings=[
503   ('ext0', 'ext0', 1),
504   ('sel', 'sel', 1),
505   ('ext1', 'ext1', 1),
506   ('ext2', 'ext2', 0),
507
508   ('sb0', 'sbA_2bit_b2'),
509   ('s0', 'sA_7bit_b2'),
510   ('sb1', 'sbB_2bit_b2'),
511   ('s1', 'sB_7bit_b2'),
512   ('is0', 'mux_2bit_b2'),
513], data=SrcSpec(False, 2, 7, 2, 7, -1, -1, 2))
514
515I_TWO_LO_3B11I_2B8I_3M = bit_struct(
516name='2lo_3b11i_2b8i_3m',
517bit_set=I_SRC,
518field_mappings=[
519   ('ext0', 'ext0', 1),
520   ('sel', 'sel', 1),
521   ('ext1', 'ext1', 1),
522   ('ext2', 'ext2', 1),
523   ('rsvd3', 'rsvd3'),
524
525   ('sb0', 'sbA_3bit_b3'),
526   ('s0', 'sA_11bit_b3'),
527   ('sb1', 'sbB_2bit_b2'),
528   ('s1', 'sB_8bit_b3'),
529   ('is0', 'mux_3bit_b3'),
530], data=SrcSpec(False, 3, 11, 2, 8, -1, -1, 3))
531
532I_THREE_LO_2B7I_2B7I_2B6I_2M = bit_struct(
533name='3lo_2b7i_2b7i_2b6i_2m',
534bit_set=I_SRC,
535field_mappings=[
536   ('ext0', 'ext0', 1),
537   ('sel', 'sel', 0),
538   ('ext1', 'ext1', 1),
539   ('ext2', 'ext2', 0),
540
541   ('sb0', 'sbA_2bit_b2'),
542   ('s0', 'sA_7bit_b2'),
543   ('sb1', 'sbB_2bit_b2'),
544   ('s1', 'sB_7bit_b2'),
545   ('sb2', 'sbC_2bit_b3'),
546   ('s2', 'sC_6bit_b3'),
547   ('is0', 'mux_2bit_b2'),
548], data=SrcSpec(False, 2, 7, 2, 7, 2, 6, 2))
549
550I_THREE_LO_3B8I_2B8I_3B8I_3M = bit_struct(
551name='3lo_3b8i_2b8i_3b8i_3m',
552bit_set=I_SRC,
553field_mappings=[
554   ('ext0', 'ext0', 1),
555   ('sel', 'sel', 0),
556   ('ext1', 'ext1', 1),
557   ('ext2', 'ext2', 1),
558   ('ext4', 'ext4', 0),
559
560   ('sb0', 'sbA_3bit_b4'),
561   ('s0', 'sA_8bit_b4'),
562   ('sb1', 'sbB_2bit_b2'),
563   ('s1', 'sB_8bit_b4'),
564   ('sb2', 'sbC_3bit_b4'),
565   ('s2', 'sC_8bit_b4'),
566   ('is0', 'mux_3bit_b4'),
567], data=SrcSpec(False, 3, 8, 2, 8, 3, 8, 3))
568
569I_THREE_LO_3B11I_2B8I_3B11I_3M = bit_struct(
570name='3lo_3b11i_2b8i_3b11i_3m',
571bit_set=I_SRC,
572field_mappings=[
573   ('ext0', 'ext0', 1),
574   ('sel', 'sel', 0),
575   ('ext1', 'ext1', 1),
576   ('ext2', 'ext2', 1),
577   ('ext4', 'ext4', 1),
578   ('rsvd5', 'rsvd5'),
579
580   ('sb0', 'sbA_3bit_b4'),
581   ('s0', 'sA_11bit_b5'),
582   ('sb1', 'sbB_2bit_b2'),
583   ('s1', 'sB_8bit_b4'),
584   ('sb2', 'sbC_3bit_b4'),
585   ('s2', 'sC_11bit_b5'),
586   ('is0', 'mux_3bit_b4'),
587], data=SrcSpec(False, 3, 11, 2, 8, 3, 11, 3))
588
589# Upper sources.
590I_ONE_UP_1B6I = bit_struct(
591name='1up_1b6i',
592bit_set=I_SRC,
593field_mappings=[
594   ('ext0', 'ext0', 0),
595
596   ('sb3', 'sbA_1bit_b0'),
597   ('s3', 'sA_6bit_b0'),
598], data=SrcSpec(True, 1, 6, -1, -1, -1, -1, -1))
599
600I_ONE_UP_3B11I = bit_struct(
601name='1up_3b11i',
602bit_set=I_SRC,
603field_mappings=[
604   ('ext0', 'ext0', 1),
605   ('sel', 'sel', 0),
606   ('ext1', 'ext1', 0),
607   ('rsvd1', 'mux_2bit_b1', 0),
608   ('rsvd2', 'rsvd2'),
609
610   ('sb3', 'sbA_3bit_b1'),
611   ('s3', 'sA_11bit_b2'),
612], data=SrcSpec(True, 3, 11, -1, -1, -1, -1, -1))
613
614I_TWO_UP_1B6I_1B5I = bit_struct(
615name='2up_1b6i_1b5i',
616bit_set=I_SRC,
617field_mappings=[
618   ('ext0', 'ext0', 1),
619   ('sel', 'sel', 1),
620   ('ext1', 'ext1', 0),
621
622   ('sb3', 'sbA_1bit_b0'),
623   ('s3', 'sA_6bit_b0'),
624   ('sb4', 'sbB_1bit_b1'),
625   ('s4', 'sB_5bit_b1'),
626], data=SrcSpec(True, 1, 6, 1, 5, -1, -1, -1))
627
628I_TWO_UP_2B7I_2B7I = bit_struct(
629name='2up_2b7i_2b7i',
630bit_set=I_SRC,
631field_mappings=[
632   ('ext0', 'ext0', 1),
633   ('sel', 'sel', 1),
634   ('ext1', 'ext1', 1),
635   ('ext2', 'ext2', 0),
636   ('rsvd2', 'mux_2bit_b2', 0),
637
638   ('sb3', 'sbA_2bit_b2'),
639   ('s3', 'sA_7bit_b2'),
640   ('sb4', 'sbB_2bit_b2'),
641   ('s4', 'sB_7bit_b2'),
642], data=SrcSpec(True, 2, 7, 2, 7, -1, -1, -1))
643
644I_TWO_UP_3B11I_2B8I = bit_struct(
645name='2up_3b11i_2b8i',
646bit_set=I_SRC,
647field_mappings=[
648   ('ext0', 'ext0', 1),
649   ('sel', 'sel', 1),
650   ('ext1', 'ext1', 1),
651   ('ext2', 'ext2', 1),
652   ('rsvd3', 'rsvd3'),
653   ('rsvd3_', 'mux_3bit_b3', 0),
654
655   ('sb3', 'sbA_3bit_b3'),
656   ('s3', 'sA_11bit_b3'),
657   ('sb4', 'sbB_2bit_b2'),
658   ('s4', 'sB_8bit_b3'),
659], data=SrcSpec(True, 3, 11, 2, 8, -1, -1, -1))
660
661I_THREE_UP_2B7I_2B7I_2B6I = bit_struct(
662name='3up_2b7i_2b7i_2b6i',
663bit_set=I_SRC,
664field_mappings=[
665   ('ext0', 'ext0', 1),
666   ('sel', 'sel', 0),
667   ('ext1', 'ext1', 1),
668   ('ext2', 'ext2', 0),
669   ('rsvd2', 'mux_2bit_b2', 0),
670
671   ('sb3', 'sbA_2bit_b2'),
672   ('s3', 'sA_7bit_b2'),
673   ('sb4', 'sbB_2bit_b2'),
674   ('s4', 'sB_7bit_b2'),
675   ('sb5', 'sbC_2bit_b3'),
676   ('s5', 'sC_6bit_b3'),
677], data=SrcSpec(True, 2, 7, 2, 7, 2, 6, -1))
678
679I_THREE_UP_3B8I_2B8I_2B8I = bit_struct(
680name='3up_3b8i_2b8i_2b8i',
681bit_set=I_SRC,
682field_mappings=[
683   ('ext0', 'ext0', 1),
684   ('sel', 'sel', 0),
685   ('ext1', 'ext1', 1),
686   ('ext2', 'ext2', 1),
687   ('ext4', 'ext4', 0),
688   ('rsvd4', 'mux_3bit_b4', 0),
689   ('rsvd4_', 'rsvd4'),
690
691   ('sb3', 'sbA_3bit_b4'),
692   ('s3', 'sA_8bit_b4'),
693   ('sb4', 'sbB_2bit_b2'),
694   ('s4', 'sB_8bit_b4'),
695   ('sb5', 'sbC_2bit_b3'),
696   ('s5', 'sC_8bit_b4'),
697], data=SrcSpec(True, 3, 8, 2, 8, 2, 8, -1))
698
699I_THREE_UP_3B11I_2B8I_2B8I = bit_struct(
700name='3up_3b11i_2b8i_2b8i',
701bit_set=I_SRC,
702field_mappings=[
703   ('ext0', 'ext0', 1),
704   ('sel', 'sel', 0),
705   ('ext1', 'ext1', 1),
706   ('ext2', 'ext2', 1),
707   ('ext4', 'ext4', 1),
708   ('rsvd4', 'mux_3bit_b4', 0),
709   ('rsvd4_', 'rsvd4'),
710   ('rsvd5', 'rsvd5'),
711   ('rsvd5_', 'rsvd5_'),
712
713   ('sb3', 'sbA_3bit_b4'),
714   ('s3', 'sA_11bit_b5'),
715   ('sb4', 'sbB_2bit_b2'),
716   ('s4', 'sB_8bit_b4'),
717   ('sb5', 'sbC_2bit_b3'),
718   ('s5', 'sC_8bit_b4'),
719], data=SrcSpec(True, 3, 11, 2, 8, 2, 8, -1))
720
721# Internal source selector definitions.
722F_IS5_SEL = field_enum_type(
723name='is5_sel', num_bits=2,
724elems=[
725   ('ft0', 0b00),
726   ('ft1', 0b01),
727   ('ft2', 0b10),
728   ('fte', 0b11),
729])
730
731F_IS4_SEL = field_enum_type(
732name='is4_sel', num_bits=2,
733elems=[
734   ('ft0', 0b00),
735   ('ft1', 0b01),
736   ('ft2', 0b10),
737   ('fte', 0b11),
738])
739
740F_IS3_SEL = field_enum_type(
741name='is3_sel', num_bits=2,
742elems=[
743   ('ft0', 0b00),
744   ('ft1', 0b01),
745   ('fte', 0b11),
746])
747
748F_IS2_SEL = field_enum_type(
749name='is2_sel', num_bits=1,
750elems=[
751   ('ft1', 0b0),
752   ('fte', 0b1),
753])
754
755F_IS1_SEL = field_enum_type(
756name='is1_sel', num_bits=1,
757elems=[
758   ('ft0', 0b0),
759   ('fte', 0b1),
760])
761
762I__ISS = bit_set(
763name='iss',
764pieces=[
765   ('is5', (0, '7:6')),
766   ('is4', (0, '5:4')),
767   ('is3', (0, '3:2')),
768   ('is2', (0, '1')),
769   ('is1', (0, '0')),
770],
771fields=[
772   ('is5', (F_IS5_SEL, ['is5'])),
773   ('is4', (F_IS4_SEL, ['is4'])),
774   ('is3', (F_IS3_SEL, ['is3'])),
775   ('is2', (F_IS2_SEL, ['is2'])),
776   ('is1', (F_IS1_SEL, ['is1'])),
777])
778
779I_ISS = bit_struct(
780name='iss',
781bit_set=I__ISS,
782field_mappings=[
783   ('is5', 'is5'),
784   ('is4', 'is4'),
785   ('is3', 'is3'),
786   ('is2', 'is2'),
787   ('is1', 'is1'),
788])
789
790# Destination definitions.
791I_DST = bit_set(
792name='dst',
793pieces=[
794   ('ext0', (0, '7')),
795   ('dbN_0_b0', (0, '6')),
796   ('dN_5_0_b0', (0, '5:0')),
797
798   ('rsvd1', (1, '7')),
799   ('dN_10_8_b1', (1, '6:4')),
800   ('dbN_2_1_b1', (1, '3:2')),
801   ('dN_7_6_b1', (1, '1:0')),
802
803   ('db0_0_b0', (0, '7')),
804   ('d0_6_0_b0', (0, '6:0')),
805
806   ('ext1', (1, '7')),
807   ('db1_0_b1', (1, '6')),
808   ('d1_5_0_b1', (1, '5:0')),
809
810   ('ext2', (2, '7')),
811   ('db1_2_1_b2', (2, '6:5')),
812   ('d1_7_6_b2', (2, '4:3')),
813   ('db0_2_1_b2', (2, '2:1')),
814   ('d0_7_b2', (2, '0')),
815
816   ('rsvd3', (3, '7:6')),
817   ('d1_10_8_b3', (3, '5:3')),
818   ('d0_10_8_b3', (3, '2:0')),
819],
820fields=[
821   ('ext0', (F_BOOL, ['ext0'])),
822   ('dbN_1bit_b0', (F_REGBANK1, ['dbN_0_b0'])),
823   ('dN_6bit_b0', (F_UINT6, ['dN_5_0_b0'])),
824
825   ('rsvd1', (F_UINT1, ['rsvd1'], 0)),
826   ('dbN_3bit_b1', (F_REGBANK, ['dbN_2_1_b1', 'dbN_0_b0'])),
827   ('dN_11bit_b1', (F_UINT11, ['dN_10_8_b1', 'dN_7_6_b1', 'dN_5_0_b0'])),
828
829   ('db0_1bit_b0', (F_REGBANK1, ['db0_0_b0'])),
830   ('d0_7bit_b0', (F_UINT7, ['d0_6_0_b0'])),
831
832   ('ext1', (F_BOOL, ['ext1'])),
833   ('db1_1bit_b1', (F_REGBANK1, ['db1_0_b1'])),
834   ('d1_6bit_b1', (F_UINT6, ['d1_5_0_b1'])),
835
836   ('ext2', (F_BOOL, ['ext2'])),
837   ('db0_3bit_b2', (F_REGBANK, ['db0_2_1_b2', 'db0_0_b0'])),
838   ('d0_8bit_b2', (F_UINT8, ['d0_7_b2', 'd0_6_0_b0'])),
839   ('db1_3bit_b2', (F_REGBANK, ['db1_2_1_b2', 'db1_0_b1'])),
840   ('d1_8bit_b2', (F_UINT8, ['d1_7_6_b2', 'd1_5_0_b1'])),
841
842   ('rsvd3', (F_UINT2, ['rsvd3'], 0)),
843   ('d0_11bit_b3', (F_UINT11, ['d0_10_8_b3', 'd0_7_b2', 'd0_6_0_b0'])),
844   ('d1_11bit_b3', (F_UINT11, ['d1_10_8_b3', 'd1_7_6_b2', 'd1_5_0_b1'])),
845])
846
847class DstSpec(object):
848   def __init__(self, dual_dsts, db0_bits, d0_bits, db1_bits, d1_bits):
849      self.dual_dsts = dual_dsts
850      self.db0_bits = db0_bits
851      self.d0_bits  = d0_bits
852      self.db1_bits = db1_bits
853      self.d1_bits  = d1_bits
854
855I_ONE_1B6I = bit_struct(
856name='1_1b6i',
857bit_set=I_DST,
858field_mappings=[
859   ('ext0', 'ext0', 0),
860
861   ('dbN', 'dbN_1bit_b0'),
862   ('dN', 'dN_6bit_b0'),
863], data=DstSpec(False, 1, 6, -1, -1))
864
865I_ONE_3B11I = bit_struct(
866name='1_3b11i',
867bit_set=I_DST,
868field_mappings=[
869   ('ext0', 'ext0', 1),
870   ('rsvd1', 'rsvd1'),
871
872   ('dbN', 'dbN_3bit_b1'),
873   ('dN', 'dN_11bit_b1'),
874], data=DstSpec(False, 3, 11, -1, -1))
875
876I_TWO_1B7I_1B6I = bit_struct(
877name='2_1b7i_1b6i',
878bit_set=I_DST,
879field_mappings=[
880   ('ext1', 'ext1', 0),
881
882   ('db0', 'db0_1bit_b0'),
883   ('d0', 'd0_7bit_b0'),
884   ('db1', 'db1_1bit_b1'),
885   ('d1', 'd1_6bit_b1'),
886], data=DstSpec(True, 1, 7, 1, 6))
887
888I_TWO_3B8I_3B8I = bit_struct(
889name='2_3b8i_3b8i',
890bit_set=I_DST,
891field_mappings=[
892   ('ext1', 'ext1', 1),
893   ('ext2', 'ext2', 0),
894
895   ('db0', 'db0_3bit_b2'),
896   ('d0', 'd0_8bit_b2'),
897   ('db1', 'db1_3bit_b2'),
898   ('d1', 'd1_8bit_b2'),
899], data=DstSpec(True, 3, 8, 3, 8))
900
901I_TWO_3B11I_3B11I = bit_struct(
902name='2_3b11i_3b11i',
903bit_set=I_DST,
904field_mappings=[
905   ('ext1', 'ext1', 1),
906   ('ext2', 'ext2', 1),
907   ('rsvd3', 'rsvd3'),
908
909   ('db0', 'db0_3bit_b2'),
910   ('d0', 'd0_11bit_b3'),
911   ('db1', 'db1_3bit_b2'),
912   ('d1', 'd1_11bit_b3'),
913], data=DstSpec(True, 3, 11, 3, 11))
914
915# Main ALU ops.
916F_MAIN_OP = field_enum_type(
917name='main_op', num_bits=3,
918elems=[
919   ('fadd', 0b000),
920   ('fadd_lp', 0b001),
921   ('fmul', 0b010),
922   ('fmul_lp', 0b011),
923   ('sngl', 0b100),
924   ('int8_16', 0b101),
925   ('fmad_movc', 0b110),
926   ('int32_64_tst', 0b111),
927])
928
929F_SNGL_OP = field_enum_type(
930name='sngl_op', num_bits=4,
931elems=[
932   ('rcp', 0b0000),
933   ('rsq', 0b0001),
934   ('log', 0b0010),
935   ('exp', 0b0011),
936   ('f16sop', 0b0100),
937   ('logcn', 0b0101),
938   ('gamma', 0b0110),
939   ('byp', 0b0111),
940   ('dsx', 0b1000),
941   ('dsy', 0b1001),
942   ('dsxf', 0b1010),
943   ('dsyf', 0b1011),
944   ('pck', 0b1100),
945   ('red', 0b1101),
946   ('sinc', 0b1110),
947   ('arctanc', 0b1111),
948])
949
950F_RED_PART = field_enum_type(
951name='red_part', num_bits=1,
952elems=[
953   ('a', 0b0),
954   ('b', 0b1),
955])
956
957F_RED_TYPE = field_enum_type(
958name='red_type', num_bits=1,
959elems=[
960   ('sin', 0b0),
961   ('cos', 0b1),
962])
963
964F_GAMMA_OP = field_enum_type(
965name='gamma_op', num_bits=1,
966elems=[
967   ('cmp', 0b0),
968   ('exp', 0b1),
969])
970
971F_PCK_FORMAT = field_enum_type(
972name='pck_format', num_bits=5,
973elems=[
974   ('u8888', 0b00000),
975   ('s8888', 0b00001),
976   ('o8888', 0b00010),
977   ('u1616', 0b00011),
978   ('s1616', 0b00100),
979   ('o1616', 0b00101),
980   ('u32', 0b00110),
981   ('s32', 0b00111),
982   ('u1010102', 0b01000),
983   ('s1010102', 0b01001),
984   ('u111110', 0b01010),
985   ('s111110', 0b01011),
986   ('f111110', 0b01100),
987   ('f16f16', 0b01110),
988   ('f32', 0b01111),
989   ('cov', 0b10000),
990   ('u565u565', 0b10001),
991   ('d24s8', 0b10010),
992   ('s8d24', 0b10011),
993   ('f32_mask', 0b10100),
994   ('2f10f10f10', 0b10101),
995   ('s8888ogl', 0b10110),
996   ('s1616ogl', 0b10111),
997   ('zero', 0b11110),
998   ('one', 0b11111),
999])
1000
1001F_INT8_16_OP = field_enum_type(
1002name='int8_16_op', num_bits=2,
1003elems=[
1004   ('add', 0b00),
1005   ('mul', 0b01),
1006   ('mad_0_1', 0b10),
1007   ('mad_2_3', 0b11),
1008])
1009
1010F_INT8_16_FMT = field_enum_type(
1011name='int8_16_fmt', num_bits=1,
1012elems=[
1013   ('8bit', 0b0),
1014   ('16bit', 0b1),
1015])
1016
1017F_S2CH = field_enum_type(
1018name='s2ch', num_bits=1,
1019elems=[
1020   ('elo', 0b0),
1021   ('ehi', 0b1),
1022])
1023
1024F_S01CH = field_enum_type(
1025name='s01ch', num_bits=2,
1026elems=[
1027   ('e0', 0b00),
1028   ('e1', 0b01),
1029   ('e2', 0b10),
1030   ('e3', 0b11),
1031])
1032
1033F_MOVW01 = field_enum_type(
1034name='movw01', num_bits=2,
1035elems=[
1036   ('ft0', 0b00),
1037   ('ft1', 0b01),
1038   ('ft2', 0b10),
1039   ('fte', 0b11),
1040])
1041
1042F_MASKW0 = field_enum_type(
1043name='maskw0', num_bits=4, is_bitset=True,
1044elems=[
1045   ('e0', 0b0001),
1046   ('e1', 0b0010),
1047   ('e2', 0b0100),
1048   ('e3', 0b1000),
1049   ('eall', 0b1111),
1050])
1051
1052F_INT32_64_OP = field_enum_type(
1053name='int32_64_op', num_bits=2,
1054elems=[
1055   ('add6432', 0b00),
1056   ('add64', 0b01),
1057   ('madd32', 0b10),
1058   ('madd64', 0b11),
1059])
1060
1061F_TST_OP = field_enum_type(
1062name='tst_op', num_bits=4,
1063elems=[
1064   ('z', 0b0000),
1065   ('gz', 0b0001),
1066   ('gez', 0b0010),
1067   ('c', 0b0011),
1068   ('e', 0b0100),
1069   ('g', 0b0101),
1070   ('ge', 0b0110),
1071   ('ne', 0b0111),
1072   ('l', 0b1000),
1073   ('le', 0b1001),
1074])
1075
1076F_TST_OP3 = field_enum_subtype(name='tst_op3', parent=F_TST_OP, num_bits=3)
1077
1078F_TST_TYPE = field_enum_type(
1079name='tst_type', num_bits=3,
1080elems=[
1081   ('f32', 0b000),
1082   ('u16', 0b001),
1083   ('s16', 0b010),
1084   ('u8', 0b011),
1085   ('s8', 0b100),
1086   ('u32', 0b101),
1087   ('s32', 0b110),
1088])
1089
1090I_MAIN = bit_set(
1091name='main',
1092pieces=[
1093   ('main_op', (0, '7:5')),
1094   ('ext0', (0, '4')),
1095
1096   # fadd/fadd.lp/fmul/fmul.lp
1097   ('sat_fam', (0, '4')),
1098   ('s0neg_fam', (0, '3')),
1099   ('s0abs_fam', (0, '2')),
1100   ('s1abs_fam', (0, '1')),
1101   ('s0flr_fam', (0, '0')),
1102
1103   # sngl
1104   ('sngl_op', (0, '3:0')),
1105
1106   ## RED
1107   ('red_part', (1, '7')),
1108   ('iter', (1, '6:4')),
1109   ('red_type', (1, '3')),
1110   ('pwen_red', (1, '2')),
1111
1112   ## Gamma
1113   ('gammaop', (1, '2')),
1114
1115   ## Common
1116   ('s0neg_sngl', (1, '1')),
1117   ('s0abs_sngl', (1, '0')),
1118
1119   ## PCK/UPCK
1120   ('upck_elem', (1, '7:6')),
1121   ('scale_rtz', (1, '5')),
1122
1123   ('prog', (1, '7')),
1124   ('rtz', (1, '6')),
1125   ('scale', (1, '5')),
1126
1127   ('pck_format', (1, '4:0')),
1128
1129   # int8_16
1130   ('int8_16_op', (0, '3:2')),
1131   ('s_i816', (0, '1')),
1132   ('f_i816', (0, '0')),
1133
1134   ('s2ch', (1, '7')),
1135   ('rsvd1_i816', (1, '6')),
1136   ('s2neg_i816', (1, '5')),
1137   ('s2abs_i816', (1, '4')),
1138   ('s1abs_i816', (1, '3')),
1139   ('s0neg_i816', (1, '2')),
1140   ('s0abs_i816', (1, '1')),
1141   ('sat_i816', (1, '0')),
1142
1143   ('rsvd2_i816', (2, '7:4')),
1144   ('s1ch', (2, '3:2')),
1145   ('s0ch', (2, '1:0')),
1146
1147   # fmad
1148   ('s0neg_fma', (0, '3')),
1149   ('s0abs_fma', (0, '2')),
1150   ('s2neg_fma', (0, '1')),
1151   ('sat_fma', (0, '0')),
1152
1153   ('rsvd1_fma', (1, '7:5')),
1154   ('lp_fma', (1, '4')),
1155   ('s1abs_fma', (1, '3')),
1156   ('s1neg_fma', (1, '2')),
1157   ('s2flr_fma', (1, '1')),
1158   ('s2abs_fma', (1, '0')),
1159
1160   # int32_64
1161   ('s_i3264', (0, '3')),
1162   ('s2neg_i3264', (0, '2')),
1163   ('int32_64_op', (0, '1:0')),
1164
1165   ('rsvd1_i3264', (1, '7')),
1166   ('cin_i3264', (1, '6')),
1167   ('s1neg_i3264', (1, '5')),
1168   ('s0neg_i3264', (1, '4')),
1169   ('rsvd1_i3264_', (1, '3')),
1170   ('s0abs_i3264', (1, '2')),
1171   ('s1abs_i3264', (1, '1')),
1172   ('s2abs_i3264', (1, '0')),
1173
1174   # movc
1175   ('movw1', (0, '3:2')),
1176   ('movw0', (0, '1:0')),
1177
1178   ('rsvd1_movc', (1, '7:6')),
1179   ('maskw0', (1, '5:2')),
1180   ('aw', (1, '1')),
1181   ('p2end_movc', (1, '0')),
1182
1183   # tst
1184   ('tst_op_2_0', (0, '3:1')),
1185   ('pwen_tst', (0, '0')),
1186
1187   ('tst_type', (1, '7:5')),
1188   ('p2end_tst', (1, '4')),
1189   ('tst_elem', (1, '3:2')),
1190   ('rsvd1_tst', (1, '1')),
1191   ('tst_op_3', (1, '0')),
1192],
1193fields=[
1194   ('main_op', (F_MAIN_OP, ['main_op'])),
1195   ('ext0', (F_BOOL, ['ext0'])),
1196
1197   # fadd/fadd.lp/fmul/fmul.lp
1198   ('sat_fam', (F_BOOL, ['sat_fam'])),
1199   ('s0neg_fam', (F_BOOL, ['s0neg_fam'])),
1200   ('s0abs_fam', (F_BOOL, ['s0abs_fam'])),
1201   ('s1abs_fam', (F_BOOL, ['s1abs_fam'])),
1202   ('s0flr_fam', (F_BOOL, ['s0flr_fam'])),
1203
1204   # sngl
1205   ('sngl_op', (F_SNGL_OP, ['sngl_op'])),
1206
1207   ('rsvd1_sngl', (F_UINT5, ['red_part', 'iter', 'red_type'], 0)),
1208   ('rsvd1_sngl_', (F_UINT1, ['pwen_red'], 0)),
1209
1210   ## RED
1211   ('red_part', (F_RED_PART, ['red_part'])),
1212   ('iter', (F_UINT3, ['iter'])),
1213   ('red_type', (F_RED_TYPE, ['red_type'])),
1214   ('pwen_red', (F_BOOL, ['pwen_red'])),
1215
1216   ## Gamma
1217   ('gammaop', (F_GAMMA_OP, ['gammaop'])),
1218
1219   ## Common
1220   ('s0neg_sngl', (F_BOOL, ['s0neg_sngl'])),
1221   ('s0abs_sngl', (F_BOOL, ['s0abs_sngl'])),
1222
1223   ## PCK/UPCK
1224   ('upck_elem', (F_UINT2, ['upck_elem'])),
1225   ('scale_rtz', (F_BOOL, ['scale_rtz'])),
1226
1227   ('prog', (F_BOOL, ['prog'])),
1228   ('rtz', (F_BOOL, ['rtz'])),
1229   ('scale', (F_BOOL, ['scale'])),
1230
1231   ('pck_format', (F_PCK_FORMAT, ['pck_format'])),
1232
1233   # int8_16
1234   ('int8_16_op', (F_INT8_16_OP, ['int8_16_op'])),
1235   ('s_i816', (F_BOOL, ['s_i816'])),
1236   ('f_i816', (F_INT8_16_FMT, ['f_i816'])),
1237
1238   ('s2ch', (F_S2CH, ['s2ch'])),
1239   ('rsvd1_i816', (F_UINT1, ['rsvd1_i816'], 0)),
1240   ('s2neg_i816', (F_BOOL, ['s2neg_i816'])),
1241   ('s2abs_i816', (F_BOOL, ['s2abs_i816'])),
1242   ('s1abs_i816', (F_BOOL, ['s1abs_i816'])),
1243   ('s0neg_i816', (F_BOOL, ['s0neg_i816'])),
1244   ('s0abs_i816', (F_BOOL, ['s0abs_i816'])),
1245   ('sat_i816', (F_BOOL, ['sat_i816'])),
1246
1247   ('rsvd2_i816', (F_UINT4, ['rsvd2_i816'], 0)),
1248   ('s1ch', (F_S01CH, ['s1ch'])),
1249   ('s0ch', (F_S01CH, ['s0ch'])),
1250
1251   # fmad
1252   ('s0neg_fma', (F_BOOL, ['s0neg_fma'])),
1253   ('s0abs_fma', (F_BOOL, ['s0abs_fma'])),
1254   ('s2neg_fma', (F_BOOL, ['s2neg_fma'])),
1255   ('sat_fma', (F_BOOL, ['sat_fma'])),
1256
1257   ('rsvd1_fma', (F_UINT3, ['rsvd1_fma'], 0)),
1258   ('lp_fma', (F_BOOL, ['lp_fma'])),
1259   ('s1abs_fma', (F_BOOL, ['s1abs_fma'])),
1260   ('s1neg_fma', (F_BOOL, ['s1neg_fma'])),
1261   ('s2flr_fma', (F_BOOL, ['s2flr_fma'])),
1262   ('s2abs_fma', (F_BOOL, ['s2abs_fma'])),
1263
1264   # int32_64
1265   ('s_i3264', (F_BOOL, ['s_i3264'])),
1266   ('s2neg_i3264', (F_BOOL, ['s2neg_i3264'])),
1267   ('int32_64_op', (F_INT32_64_OP, ['int32_64_op'])),
1268
1269   ('rsvd1_i3264', (F_UINT2, ['rsvd1_i3264_', 'rsvd1_i3264'], 0)),
1270   ('cin_i3264', (F_BOOL, ['cin_i3264'])),
1271   ('s1neg_i3264', (F_BOOL, ['s1neg_i3264'])),
1272   ('s0neg_i3264', (F_BOOL, ['s0neg_i3264'])),
1273   ('s0abs_i3264', (F_BOOL, ['s0abs_i3264'])),
1274   ('s1abs_i3264', (F_BOOL, ['s1abs_i3264'])),
1275   ('s2abs_i3264', (F_BOOL, ['s2abs_i3264'])),
1276
1277   # movc
1278   ('movw1', (F_MOVW01, ['movw1'])),
1279   ('movw0', (F_MOVW01, ['movw0'])),
1280
1281   ('rsvd1_movc', (F_UINT2, ['rsvd1_movc'], 0)),
1282   ('maskw0', (F_MASKW0, ['maskw0'])),
1283   ('aw', (F_BOOL, ['aw'])),
1284   ('p2end_movc', (F_BOOL, ['p2end_movc'])),
1285
1286   # tst
1287   ('tst_op_3bit', (F_TST_OP3, ['tst_op_2_0'])),
1288   ('pwen_tst', (F_BOOL, ['pwen_tst'])),
1289
1290   ('tst_type', (F_TST_TYPE, ['tst_type'])),
1291   ('p2end_tst', (F_BOOL, ['p2end_tst'])),
1292   ('tst_elem', (F_UINT2, ['tst_elem'])),
1293   ('rsvd1_tst', (F_UINT1, ['rsvd1_tst'], 0)),
1294   ('tst_op_4bit', (F_TST_OP, ['tst_op_3', 'tst_op_2_0'])),
1295])
1296
1297I_FADD = bit_struct(
1298name='fadd',
1299bit_set=I_MAIN,
1300field_mappings=[
1301   ('main_op', 'main_op', 'fadd'),
1302
1303   ('sat', 'sat_fam'),
1304   ('s0neg', 's0neg_fam'),
1305   ('s0abs', 's0abs_fam'),
1306   ('s1abs', 's1abs_fam'),
1307   ('s0flr', 's0flr_fam'),
1308])
1309
1310I_FADD_LP = bit_struct(
1311name='fadd_lp',
1312bit_set=I_MAIN,
1313field_mappings=[
1314   ('main_op', 'main_op', 'fadd_lp'),
1315
1316   ('sat', 'sat_fam'),
1317   ('s0neg', 's0neg_fam'),
1318   ('s0abs', 's0abs_fam'),
1319   ('s1abs', 's1abs_fam'),
1320   ('s0flr', 's0flr_fam'),
1321])
1322
1323I_FMUL = bit_struct(
1324name='fmul',
1325bit_set=I_MAIN,
1326field_mappings=[
1327   ('main_op', 'main_op', 'fmul'),
1328
1329   ('sat', 'sat_fam'),
1330   ('s0neg', 's0neg_fam'),
1331   ('s0abs', 's0abs_fam'),
1332   ('s1abs', 's1abs_fam'),
1333   ('s0flr', 's0flr_fam'),
1334])
1335
1336I_FMUL_LP = bit_struct(
1337name='fmul_lp',
1338bit_set=I_MAIN,
1339field_mappings=[
1340   ('main_op', 'main_op', 'fmul_lp'),
1341
1342   ('sat', 'sat_fam'),
1343   ('s0neg', 's0neg_fam'),
1344   ('s0abs', 's0abs_fam'),
1345   ('s1abs', 's1abs_fam'),
1346   ('s0flr', 's0flr_fam'),
1347])
1348
1349# Covers FRCP, FRSQ, FLOG, FEXP, FLOGCN, BYP,
1350# FDSX, FDSY, FDSXF, FDSYF, FSINC, FARCTANC
1351I_SNGL = bit_struct(
1352name='sngl',
1353bit_set=I_MAIN,
1354field_mappings=[
1355   ('main_op', 'main_op', 'sngl'),
1356   ('ext0', 'ext0', 0),
1357   ('sngl_op', 'sngl_op'),
1358])
1359
1360I_SNGL_EXT = bit_struct(
1361name='sngl_ext',
1362bit_set=I_MAIN,
1363field_mappings=[
1364   ('main_op', 'main_op', 'sngl'),
1365   ('ext0', 'ext0', 1),
1366   ('sngl_op', 'sngl_op'),
1367
1368   ('rsvd1', 'rsvd1_sngl'),
1369   ('rsvd1_', 'rsvd1_sngl_'),
1370   ('s0neg', 's0neg_sngl'),
1371   ('s0abs', 's0abs_sngl'),
1372])
1373
1374# F16SOP
1375# TODO
1376
1377# GCMP
1378I_GCMP = bit_struct(
1379name='gcmp',
1380bit_set=I_MAIN,
1381field_mappings=[
1382   ('main_op', 'main_op', 'sngl'),
1383   ('ext0', 'ext0', 0),
1384   ('sngl_op', 'sngl_op', 'gamma'),
1385])
1386
1387I_GCMP_EXT = bit_struct(
1388name='gcmp_ext',
1389bit_set=I_MAIN,
1390field_mappings=[
1391   ('main_op', 'main_op', 'sngl'),
1392   ('ext0', 'ext0', 1),
1393   ('sngl_op', 'sngl_op', 'gamma'),
1394
1395   ('rsvd1', 'rsvd1_sngl'),
1396   ('gammaop', 'gammaop', 'cmp'),
1397   ('s0neg', 's0neg_sngl'),
1398   ('s0abs', 's0abs_sngl'),
1399])
1400
1401# GEXP
1402I_GEXP = bit_struct(
1403name='gexp',
1404bit_set=I_MAIN,
1405field_mappings=[
1406   ('main_op', 'main_op', 'sngl'),
1407   ('ext0', 'ext0', 1),
1408   ('sngl_op', 'sngl_op', 'gamma'),
1409
1410   ('rsvd1', 'rsvd1_sngl'),
1411   ('gammaop', 'gammaop', 'exp'),
1412   ('s0neg', 's0neg_sngl'),
1413   ('s0abs', 's0abs_sngl'),
1414])
1415
1416# PCK
1417I_PCK = bit_struct(
1418name='pck',
1419bit_set=I_MAIN,
1420field_mappings=[
1421   ('main_op', 'main_op', 'sngl'),
1422   ('ext0', 'ext0', 1),
1423   ('sngl_op', 'sngl_op', 'pck'),
1424
1425   ('prog', 'prog'),
1426   ('rtz', 'rtz'),
1427   ('scale', 'scale'),
1428   ('pck_format', 'pck_format'),
1429])
1430
1431# UPCK
1432I_UPCK = bit_struct(
1433name='upck',
1434bit_set=I_MAIN,
1435field_mappings=[
1436   ('main_op', 'main_op', 'sngl'),
1437   ('ext0', 'ext0', 1),
1438   ('sngl_op', 'sngl_op', 'pck'),
1439
1440   ('elem', 'upck_elem'),
1441   ('scale_rtz', 'scale_rtz'),
1442   ('pck_format', 'pck_format'),
1443])
1444
1445# FRED
1446I_FRED = bit_struct(
1447name='fred',
1448bit_set=I_MAIN,
1449field_mappings=[
1450   ('main_op', 'main_op', 'sngl'),
1451   ('ext0', 'ext0', 1),
1452   ('sngl_op', 'sngl_op', 'red'),
1453
1454   ('red_part', 'red_part'),
1455   ('iter', 'iter'),
1456   ('red_type', 'red_type'),
1457   ('pwen', 'pwen_red'),
1458   ('s0neg', 's0neg_sngl'),
1459   ('s0abs', 's0abs_sngl'),
1460])
1461
1462I_INT8_16 = bit_struct(
1463name='int8_16',
1464bit_set=I_MAIN,
1465field_mappings=[
1466   ('main_op', 'main_op', 'int8_16'),
1467   ('ext0', 'ext0', 0),
1468   ('int8_16_op', 'int8_16_op'),
1469   ('s', 's_i816'),
1470   ('f', 'f_i816'),
1471])
1472
1473I_INT8_16_EXT = bit_struct(
1474name='int8_16_ext',
1475bit_set=I_MAIN,
1476field_mappings=[
1477   ('main_op', 'main_op', 'int8_16'),
1478   ('ext0', 'ext0', 1),
1479   ('int8_16_op', 'int8_16_op'),
1480   ('s', 's_i816'),
1481   ('f', 'f_i816'),
1482
1483   ('s2ch', 's2ch'),
1484   ('rsvd1', 'rsvd1_i816'),
1485   ('s2neg', 's2neg_i816'),
1486   ('s2abs', 's2abs_i816'),
1487   ('s1abs', 's1abs_i816'),
1488   ('s0neg', 's0neg_i816'),
1489   ('s0abs', 's0abs_i816'),
1490   ('sat', 'sat_i816'),
1491])
1492
1493I_INT8_16_EXT_SEL = bit_struct(
1494name='int8_16_ext_sel',
1495bit_set=I_MAIN,
1496field_mappings=[
1497   ('main_op', 'main_op', 'int8_16'),
1498   ('ext0', 'ext0', 1),
1499   ('int8_16_op', 'int8_16_op'),
1500   ('s', 's_i816'),
1501   ('f', 'f_i816'),
1502
1503   ('s2ch', 's2ch'),
1504   ('rsvd1', 'rsvd1_i816'),
1505   ('s2neg', 's2neg_i816'),
1506   ('s2abs', 's2abs_i816'),
1507   ('s1abs', 's1abs_i816'),
1508   ('s0neg', 's0neg_i816'),
1509   ('s0abs', 's0abs_i816'),
1510   ('sat', 'sat_i816'),
1511
1512   ('rsvd2', 'rsvd2_i816'),
1513   ('s1ch', 's1ch'),
1514   ('s0ch', 's0ch'),
1515])
1516
1517I_FMAD = bit_struct(
1518name='fmad',
1519bit_set=I_MAIN,
1520field_mappings=[
1521   ('main_op', 'main_op', 'fmad_movc'),
1522   ('ext0', 'ext0', 0),
1523
1524   ('s0neg', 's0neg_fma'),
1525   ('s0abs', 's0abs_fma'),
1526   ('s2neg', 's2neg_fma'),
1527   ('sat', 'sat_fma'),
1528])
1529
1530I_FMAD_EXT = bit_struct(
1531name='fmad_ext',
1532bit_set=I_MAIN,
1533field_mappings=[
1534   ('main_op', 'main_op', 'fmad_movc'),
1535   ('ext0', 'ext0', 1),
1536
1537   ('s0neg', 's0neg_fma'),
1538   ('s0abs', 's0abs_fma'),
1539   ('s2neg', 's2neg_fma'),
1540   ('sat', 'sat_fma'),
1541
1542   ('rsvd1', 'rsvd1_fma'),
1543   ('lp', 'lp_fma'),
1544   ('s1abs', 's1abs_fma'),
1545   ('s1neg', 's1neg_fma'),
1546   ('s2flr', 's2flr_fma'),
1547   ('s2abs', 's2abs_fma'),
1548])
1549
1550I_INT32_64 = bit_struct(
1551name='int32_64',
1552bit_set=I_MAIN,
1553field_mappings=[
1554   ('main_op', 'main_op', 'int32_64_tst'),
1555   ('ext0', 'ext0', 0),
1556
1557   ('s', 's_i3264'),
1558   ('s2neg', 's2neg_i3264'),
1559   ('int32_64_op', 'int32_64_op'),
1560])
1561
1562I_INT32_64_EXT = bit_struct(
1563name='int32_64_ext',
1564bit_set=I_MAIN,
1565field_mappings=[
1566   ('main_op', 'main_op', 'int32_64_tst'),
1567   ('ext0', 'ext0', 1),
1568
1569   ('s', 's_i3264'),
1570   ('s2neg', 's2neg_i3264'),
1571   ('int32_64_op', 'int32_64_op'),
1572
1573   ('rsvd1', 'rsvd1_i3264'),
1574
1575   ('cin', 'cin_i3264'),
1576   ('s1neg', 's1neg_i3264'),
1577   ('s0neg', 's0neg_i3264'),
1578   ('s0abs', 's0abs_i3264'),
1579   ('s1abs', 's1abs_i3264'),
1580   ('s2abs', 's2abs_i3264'),
1581])
1582
1583I_MOVC = bit_struct(
1584name='movc',
1585bit_set=I_MAIN,
1586field_mappings=[
1587   ('main_op', 'main_op', 'fmad_movc'),
1588   ('ext0', 'ext0', 0),
1589
1590   ('movw1', 'movw1'),
1591   ('movw0', 'movw0'),
1592])
1593
1594I_MOVC_EXT = bit_struct(
1595name='movc_ext',
1596bit_set=I_MAIN,
1597field_mappings=[
1598   ('main_op', 'main_op', 'fmad_movc'),
1599   ('ext0', 'ext0', 1),
1600
1601   ('movw1', 'movw1'),
1602   ('movw0', 'movw0'),
1603
1604   ('rsvd1', 'rsvd1_movc'),
1605   ('maskw0', 'maskw0'),
1606   ('aw', 'aw'),
1607   ('p2end', 'p2end_movc'),
1608])
1609
1610I_TST = bit_struct(
1611name='tst',
1612bit_set=I_MAIN,
1613field_mappings=[
1614   ('main_op', 'main_op', 'int32_64_tst'),
1615   ('ext0', 'ext0', 0),
1616
1617   ('tst_op', 'tst_op_3bit'),
1618   ('pwen', 'pwen_tst'),
1619])
1620
1621I_TST_EXT = bit_struct(
1622name='tst_ext',
1623bit_set=I_MAIN,
1624field_mappings=[
1625   ('main_op', 'main_op', 'int32_64_tst'),
1626   ('ext0', 'ext0', 1),
1627
1628   ('tst_op', 'tst_op_4bit'),
1629   ('pwen', 'pwen_tst'),
1630
1631   ('type', 'tst_type'),
1632   ('p2end', 'p2end_tst'),
1633   ('elem', 'tst_elem'),
1634   ('rsvd1', 'rsvd1_tst'),
1635])
1636
1637# Backend ALU ops.
1638F_BACKEND_OP = field_enum_type(
1639name='backend_op', num_bits=3,
1640elems=[
1641   ('uvsw', 0b000),
1642   ('msk', 0b001),
1643   ('phas', 0b010),
1644   ('setl', 0b011),
1645   ('vistest', 0b100),
1646   ('fitr', 0b101),
1647   ('emit', 0b110),
1648   ('dma', 0b111),
1649])
1650
1651F_DSEL = field_enum_type(
1652name='dsel', num_bits=1,
1653elems=[
1654   ('w0', 0b0),
1655   ('w1', 0b1),
1656])
1657
1658F_UVSW_OP = field_enum_type(
1659name='uvsw_op', num_bits=3,
1660elems=[
1661   ('write', 0b000),
1662   ('emit', 0b001),
1663   ('cut', 0b010),
1664   ('emit_cut', 0b011),
1665   ('endtask', 0b100),
1666   ('emit_endtask', 0b101),
1667   ('write_emit_endtask', 0b110),
1668])
1669
1670F_SRCSEL = field_enum_type(
1671name='srcsel', num_bits=3,
1672elems=[
1673   ('s0', 0b000),
1674   ('s1', 0b001),
1675   ('s2', 0b010),
1676   ('s3', 0b011),
1677   ('s4', 0b100),
1678   ('s5', 0b101),
1679])
1680
1681F_MSK_MODE = field_enum_type(
1682name='msk_mode', num_bits=3,
1683elems=[
1684   ('vm', 0b000),
1685   ('icm', 0b001),
1686   ('icmoc', 0b010),
1687   ('icmi', 0b011),
1688   ('caxy', 0b100),
1689])
1690
1691F_MSK_OP = field_enum_type(
1692name='msk_op', num_bits=1,
1693elems=[
1694   ('sav', 0b0),
1695   ('mov', 0b1),
1696])
1697
1698F_PHAS_TYPE = field_enum_type(
1699name='phas_type', num_bits=1,
1700elems=[
1701   ('reg', 0b0),
1702   ('imm', 0b1),
1703])
1704
1705F_PHAS_RATE = field_enum_type(
1706name='phas_rate', num_bits=2,
1707elems=[
1708   ('inst', 0b00),
1709   ('smp_sel', 0b01),
1710   ('smp_full', 0b10),
1711])
1712
1713F_VISTEST_OP = field_enum_type(
1714name='vistest_op', num_bits=1,
1715elems=[
1716   ('depthf', 0b0),
1717   ('atst', 0b1),
1718])
1719
1720F_ITER_MODE = field_enum_type(
1721name='iter_mode', num_bits=2,
1722elems=[
1723   ('pixel', 0b00),
1724   ('sample', 0b01),
1725   ('centroid', 0b10),
1726])
1727
1728F_ITER_MODE1 = field_enum_subtype(name='iter_mode1', parent=F_ITER_MODE, num_bits=1)
1729
1730F_PERSP_CTL = field_enum_type(
1731name='persp_ctl', num_bits=2,
1732elems=[
1733   ('none', 0b00),
1734   ('iter_mul', 0b01),
1735   ('iter_mul_store', 0b10),
1736   ('mul_stored', 0b11),
1737])
1738
1739F_PERSP_CTL1 = field_enum_subtype(name='persp_ctl1', parent=F_PERSP_CTL, num_bits=1)
1740
1741F_SCHED_CTRL = field_enum_type(
1742name='sched_ctrl', num_bits=2,
1743elems=[
1744   ('none', 0b00),
1745   ('swap', 0b01),
1746   ('wdf', 0b10),
1747])
1748
1749F_SCHED_CTRL1 = field_enum_subtype(name='sched_ctrl1', parent=F_SCHED_CTRL, num_bits=1)
1750
1751F_IDX_CTRL = field_enum_type(
1752name='idx_ctrl', num_bits=2,
1753elems=[
1754   ('none', 0b00),
1755   ('idx0', 0b01),
1756   ('idx1', 0b10),
1757])
1758
1759F_DMA_OP = field_enum_type(
1760name='dma_op', num_bits=3,
1761elems=[
1762   ('idf', 0b000),
1763   ('ld', 0b001),
1764   ('st', 0b010),
1765   ('smp', 0b100),
1766   ('atomic', 0b101),
1767])
1768
1769F_CACHEMODE_LD = field_enum_type(
1770name='cachemode_ld', num_bits=2,
1771elems=[
1772   ('normal', 0b00),
1773   ('bypass', 0b01),
1774   ('force_line_fill', 0b10),
1775])
1776
1777F_CACHEMODE_ST = field_enum_type(
1778name='cachemode_st', num_bits=2,
1779elems=[
1780   ('write_through', 0b00),
1781   ('write_back', 0b01),
1782   ('write_back_lazy', 0b10),
1783])
1784
1785F_DSIZE = field_enum_type(
1786name='dsize', num_bits=2,
1787elems=[
1788   ('8bit', 0b00),
1789   ('16bit', 0b01),
1790   ('32bit', 0b10),
1791])
1792
1793F_DMN = field_enum_type(
1794name='dmn', num_bits=2,
1795elems=[
1796   ('1d', 0b01),
1797   ('2d', 0b10),
1798   ('3d', 0b11),
1799])
1800
1801F_LODM = field_enum_type(
1802name='lodm', num_bits=2,
1803elems=[
1804   ('normal', 0b00),
1805   ('bias', 0b01),
1806   ('replace', 0b10),
1807   ('gradients', 0b11),
1808])
1809
1810F_SBMODE = field_enum_type(
1811name='sbmode', num_bits=2,
1812elems=[
1813   ('none', 0b00),
1814   ('data', 0b01),
1815   ('info', 0b10),
1816   ('both', 0b11),
1817])
1818
1819F_ATOMIC_OP = field_enum_type(
1820name='atomic_op', num_bits=4,
1821elems=[
1822   ('add', 0b0000),
1823   ('sub', 0b0001),
1824   ('xchg', 0b0010),
1825   ('umin', 0b0100),
1826   ('imin', 0b0101),
1827   ('umax', 0b0110),
1828   ('imax', 0b0111),
1829   ('and', 0b1000),
1830   ('or', 0b1001),
1831   ('xor', 0b1010),
1832])
1833
1834I_BACKEND = bit_set(
1835name='backend',
1836pieces=[
1837   ('backend_op', (0, '7:5')),
1838
1839   # uvsw
1840   ('dsel', (0, '4')),
1841   ('imm_uvsw', (0, '3')),
1842   ('uvsw_op', (0, '2:0')),
1843
1844   ('rsvd1', (1, '7:3')), # Common
1845   ('srcsel', (1, '2:0')), # Common
1846
1847   ('imm_addr_uvsw', (1, '7:0')),
1848
1849   ('rsvd1_uvsw_', (1, '7:2')),
1850   ('stream_id', (1, '1:0')),
1851
1852   # movmsk
1853   ('msk_op', (0, '4')),
1854   ('sm', (0, '3')),
1855   ('msk_mode', (0, '2:0')),
1856
1857   # phas
1858   ('exeaddrsrc', (0, '4:2')),
1859   ('phas_end', (0, '1')),
1860   ('phas_type', (0, '0')),
1861
1862   ('phas_rate', (1, '7:6')),
1863   ('commontmp', (1, '5:0')),
1864
1865   # setl
1866   ('rsvd0_setl', (0, '4:1')),
1867   ('ressel', (0, '0')),
1868
1869   # vistest
1870   ('rsvd0_vistest', (0, '4:3')),
1871   ('pwen_vistest', (0, '2')),
1872   ('vistest_op', (0, '1')),
1873   ('ifb', (0, '0')),
1874
1875   # fitr
1876   ('p_fitr', (0, '4')),
1877   ('drc', (0, '3')), # Common
1878   ('rsvd0_fitr', (0, '2')),
1879   ('fitr_mode', (0, '1:0')),
1880
1881   ('rsvd1_fitr', (1, '7:5')),
1882   ('sat_fitr', (1, '4')),
1883   ('count_fitr', (1, '3:0')),
1884
1885   # emitpix
1886   ('rsvd0_emitpix', (0, '4:2')),
1887   ('freep', (0, '1')),
1888   ('rsvd0_emitpix_', (0, '0')),
1889
1890   # dma
1891   ('dma_op', (0, '2:0')),
1892   ('rsvd0_dma', (0, '4')),
1893
1894   ## ld/st
1895   ('immbl', (0, '4')),
1896
1897   ('srcseladd_ldst', (1, '7:5')),
1898   ('srcselbl_ldst', (1, '4:2')),
1899   ('burstlen_2_0', (1, '4:2')),
1900   ('cachemode_ldst', (1, '1:0')),
1901
1902   ('tiled', (2, '7')),
1903   ('srcseldata', (2, '6:4')),
1904   ('dsize', (2, '3:2')),
1905   ('rsvd2_ldst', (2, '1')),
1906   ('burstlen_3', (2, '0')),
1907
1908   ('rsvd3_st', (3, '7:3')),
1909   ('srcmask', (3, '2:0')),
1910
1911   ## smp
1912   ('fcnorm', (0, '4')),
1913
1914   ('extb', (1, '7')),
1915   ('dmn', (1, '6:5')),
1916   ('exta', (1, '4')),
1917   ('chan', (1, '3:2')),
1918   ('lodm', (1, '1:0')),
1919
1920   ('pplod', (2, '7')),
1921   ('proj', (2, '6')),
1922   ('sbmode', (2, '5:4')),
1923   ('nncoords', (2, '3')),
1924   ('sno', (2, '2')),
1925   ('soo', (2, '1')),
1926   ('tao', (2, '0')),
1927
1928   ('rsvd3_smp', (3, '7:5')),
1929   ('f16', (3, '4')),
1930   ('swap', (3, '3')),
1931   ('cachemode_smp', (3, '2:1')),
1932   ('smp_w', (3, '0')),
1933
1934   ## atomic
1935   ('atomic_op', (1, '7:4')),
1936   ('rsvd1_atomic', (1, '3')),
1937
1938   ('rsvd2_atomic', (2, '7:3')),
1939   ('dstsel', (2, '2:0')),
1940],
1941fields=[
1942   ('backend_op', (F_BACKEND_OP, ['backend_op'])),
1943
1944   # uvsw
1945   ('dsel', (F_DSEL, ['dsel'])),
1946   ('imm_uvsw', (F_BOOL, ['imm_uvsw'])),
1947   ('uvsw_op', (F_UVSW_OP, ['uvsw_op'])),
1948
1949   ('rsvd1', (F_UINT5, ['rsvd1'], 0)),
1950   ('srcsel', (F_SRCSEL, ['srcsel'])),
1951
1952   ('imm_addr_uvsw', (F_UINT8, ['imm_addr_uvsw'])),
1953
1954   ('rsvd1_uvsw_', (F_UINT6, ['rsvd1_uvsw_'], 0)),
1955   ('stream_id', (F_UINT2, ['stream_id'])),
1956
1957   # movmsk
1958   ('msk_op', (F_MSK_OP, ['msk_op'])),
1959   ('sm', (F_BOOL, ['sm'])),
1960   ('msk_mode', (F_MSK_MODE, ['msk_mode'])),
1961
1962   # phas
1963   ('exeaddrsrc', (F_SRCSEL, ['exeaddrsrc'])),
1964   ('phas_end', (F_BOOL, ['phas_end'])),
1965   ('phas_type', (F_PHAS_TYPE, ['phas_type'])),
1966
1967   ('phas_rate', (F_PHAS_RATE, ['phas_rate'])),
1968   ('commontmp', (F_UINT6MUL4, ['commontmp'])),
1969
1970   # setl
1971   ('rsvd0_setl', (F_UINT4, ['rsvd0_setl'], 0)),
1972   ('ressel', (F_DSEL, ['ressel'])),
1973
1974   # vistest
1975   ('rsvd0_vistest', (F_UINT2, ['rsvd0_vistest'], 0)),
1976   ('pwen_vistest', (F_BOOL, ['pwen_vistest'])),
1977   ('vistest_op', (F_VISTEST_OP, ['vistest_op'])),
1978   ('ifb', (F_BOOL, ['ifb'])),
1979
1980   # fitr
1981   ('p_fitr', (F_PERSP_CTL1, ['p_fitr'])),
1982   ('drc', (F_UINT1, ['drc'])),
1983   ('rsvd0_fitr', (F_UINT1, ['rsvd0_fitr'], 0)),
1984   ('iter_mode', (F_ITER_MODE, ['fitr_mode'])),
1985
1986   ('rsvd1_fitr', (F_UINT3, ['rsvd1_fitr'], 0)),
1987   ('sat_fitr', (F_BOOL, ['sat_fitr'])),
1988   ('count_fitr', (F_UINT4_POS_WRAP, ['count_fitr'])),
1989
1990   # emitpix
1991   ('rsvd0_emitpix', (F_UINT3, ['rsvd0_emitpix'], 0)),
1992   ('freep', (F_BOOL, ['freep'])),
1993   ('rsvd0_emitpix_', (F_UINT1, ['rsvd0_emitpix_'], 0)),
1994
1995   # dma
1996   ('rsvd0_dma', (F_UINT1, ['rsvd0_dma'], 0)),
1997   ('dma_op', (F_DMA_OP, ['dma_op'])),
1998
1999   ## ld/st
2000   ('immbl', (F_BOOL, ['immbl'])),
2001
2002   ('srcseladd_ldst', (F_SRCSEL, ['srcseladd_ldst'])),
2003   ('srcselbl_ldst', (F_SRCSEL, ['srcselbl_ldst'])),
2004
2005   ('cachemode_ld', (F_CACHEMODE_LD, ['cachemode_ldst'])),
2006   ('cachemode_st', (F_CACHEMODE_ST, ['cachemode_ldst'])),
2007
2008   ('rsvd2_ld', (F_UINT7, ['tiled', 'srcseldata', 'dsize', 'rsvd2_ldst'], 0)),
2009   ('rsvd2_st', (F_UINT1, ['rsvd2_ldst'], 0)),
2010
2011   ('tiled', (F_BOOL, ['tiled'])),
2012   ('srcseldata', (F_SRCSEL, ['srcseldata'])),
2013   ('dsize', (F_DSIZE, ['dsize'])),
2014
2015   ('burstlen', (F_UINT4_POS_WRAP, ['burstlen_3', 'burstlen_2_0'])),
2016   ('rsvd2_st_', (F_UINT1, ['burstlen_3'], 0)),
2017
2018   ('rsvd3_st', (F_UINT5, ['rsvd3_st'], 0)),
2019   ('srcmask', (F_SRCSEL, ['srcmask'])),
2020
2021   ## smp
2022   ('fcnorm', (F_BOOL, ['fcnorm'])),
2023
2024   ('extb', (F_BOOL, ['extb'])),
2025   ('dmn', (F_DMN, ['dmn'])),
2026   ('exta', (F_BOOL, ['exta'])),
2027   ('chan', (F_UINT2_POS_INC, ['chan'])),
2028   ('lodm', (F_LODM, ['lodm'])),
2029
2030   ('pplod', (F_BOOL, ['pplod'])),
2031   ('proj', (F_BOOL, ['proj'])),
2032   ('sbmode', (F_SBMODE, ['sbmode'])),
2033   ('nncoords', (F_BOOL, ['nncoords'])),
2034   ('sno', (F_BOOL, ['sno'])),
2035   ('soo', (F_BOOL, ['soo'])),
2036   ('tao', (F_BOOL, ['tao'])),
2037
2038   ('rsvd3_smp', (F_UINT3, ['rsvd3_smp'], 0)),
2039   ('f16', (F_BOOL, ['f16'])),
2040   ('swap', (F_SCHED_CTRL1, ['swap'])),
2041   ('cachemode_smp_ld', (F_CACHEMODE_LD, ['cachemode_smp'])),
2042   ('cachemode_smp_st', (F_CACHEMODE_ST, ['cachemode_smp'])),
2043   ('smp_w', (F_BOOL, ['smp_w'])),
2044
2045   ## atomic
2046   ('atomic_op', (F_ATOMIC_OP, ['atomic_op'])),
2047   ('rsvd1_atomic', (F_UINT1, ['rsvd1_atomic'], 0)),
2048
2049   ('rsvd2_atomic', (F_UINT5, ['rsvd2_atomic'], 0)),
2050   ('dstsel', (F_SRCSEL, ['dstsel'])),
2051])
2052
2053I_UVSW_WRITE_REG = bit_struct(
2054name='uvsw_write_reg',
2055bit_set=I_BACKEND,
2056field_mappings=[
2057   ('backend_op', 'backend_op', 'uvsw'),
2058
2059   ('dsel', 'dsel'),
2060   ('imm', 'imm_uvsw', 0),
2061   ('uvsw_op', 'uvsw_op', 'write'),
2062
2063   ('rsvd1', 'rsvd1'),
2064   ('srcsel', 'srcsel'),
2065])
2066
2067I_UVSW_WRITE_IMM = bit_struct(
2068name='uvsw_write_imm',
2069bit_set=I_BACKEND,
2070field_mappings=[
2071   ('backend_op', 'backend_op', 'uvsw'),
2072
2073   ('dsel', 'dsel'),
2074   ('imm', 'imm_uvsw', 1),
2075   ('uvsw_op', 'uvsw_op', 'write'),
2076
2077   ('imm_addr', 'imm_addr_uvsw'),
2078])
2079
2080I_UVSW_EMIT = bit_struct(
2081name='uvsw_emit',
2082bit_set=I_BACKEND,
2083field_mappings=[
2084   ('backend_op', 'backend_op', 'uvsw'),
2085
2086   ('dsel', 'dsel', 0),
2087   ('imm', 'imm_uvsw', 0),
2088   ('uvsw_op', 'uvsw_op', 'emit'),
2089])
2090
2091I_UVSW_EMIT_STREAM = bit_struct(
2092name='uvsw_emit_imm',
2093bit_set=I_BACKEND,
2094field_mappings=[
2095   ('backend_op', 'backend_op', 'uvsw'),
2096
2097   ('dsel', 'dsel', 0),
2098   ('imm', 'imm_uvsw', 1),
2099   ('uvsw_op', 'uvsw_op', 'emit'),
2100
2101   ('rsvd1', 'rsvd1_uvsw_'),
2102   ('stream_id', 'stream_id'),
2103])
2104
2105I_UVSW_CUT = bit_struct(
2106name='uvsw_cut',
2107bit_set=I_BACKEND,
2108field_mappings=[
2109   ('backend_op', 'backend_op', 'uvsw'),
2110
2111   ('dsel', 'dsel', 0),
2112   ('imm', 'imm_uvsw', 0),
2113   ('uvsw_op', 'uvsw_op', 'cut'),
2114])
2115
2116I_UVSW_CUT_STREAM = bit_struct(
2117name='uvsw_cut_imm',
2118bit_set=I_BACKEND,
2119field_mappings=[
2120   ('backend_op', 'backend_op', 'uvsw'),
2121
2122   ('dsel', 'dsel', 0),
2123   ('imm', 'imm_uvsw', 1),
2124   ('uvsw_op', 'uvsw_op', 'cut'),
2125
2126   ('rsvd1', 'rsvd1_uvsw_'),
2127   ('stream_id', 'stream_id'),
2128])
2129
2130I_UVSW_EMIT_CUT = bit_struct(
2131name='uvsw_emit_cut',
2132bit_set=I_BACKEND,
2133field_mappings=[
2134   ('backend_op', 'backend_op', 'uvsw'),
2135
2136   ('dsel', 'dsel', 0),
2137   ('imm', 'imm_uvsw', 0),
2138   ('uvsw_op', 'uvsw_op', 'emit_cut'),
2139])
2140
2141I_UVSW_EMIT_CUT_STREAM = bit_struct(
2142name='uvsw_emit_cut_imm',
2143bit_set=I_BACKEND,
2144field_mappings=[
2145   ('backend_op', 'backend_op', 'uvsw'),
2146
2147   ('dsel', 'dsel', 0),
2148   ('imm', 'imm_uvsw', 1),
2149   ('uvsw_op', 'uvsw_op', 'emit_cut'),
2150
2151   ('rsvd1', 'rsvd1_uvsw_'),
2152   ('stream_id', 'stream_id'),
2153])
2154
2155I_UVSW_ENDTASK = bit_struct(
2156name='uvsw_endtask',
2157bit_set=I_BACKEND,
2158field_mappings=[
2159   ('backend_op', 'backend_op', 'uvsw'),
2160
2161   ('dsel', 'dsel', 0),
2162   ('imm', 'imm_uvsw', 0),
2163   ('uvsw_op', 'uvsw_op', 'endtask'),
2164])
2165
2166I_UVSW_EMIT_ENDTASK = bit_struct(
2167name='uvsw_emit_endtask',
2168bit_set=I_BACKEND,
2169field_mappings=[
2170   ('backend_op', 'backend_op', 'uvsw'),
2171
2172   ('dsel', 'dsel', 0),
2173   ('imm', 'imm_uvsw', 0),
2174   ('uvsw_op', 'uvsw_op', 'emit_endtask'),
2175])
2176
2177I_UVSW_WRITE_EMIT_ENDTASK_REG = bit_struct(
2178name='uvsw_write_emit_endtask_reg',
2179bit_set=I_BACKEND,
2180field_mappings=[
2181   ('backend_op', 'backend_op', 'uvsw'),
2182
2183   ('dsel', 'dsel'),
2184   ('imm', 'imm_uvsw', 0),
2185   ('uvsw_op', 'uvsw_op', 'write_emit_endtask'),
2186
2187   ('rsvd1', 'rsvd1'),
2188   ('srcsel', 'srcsel'),
2189])
2190
2191I_UVSW_WRITE_EMIT_ENDTASK_IMM = bit_struct(
2192name='uvsw_write_emit_endtask_imm',
2193bit_set=I_BACKEND,
2194field_mappings=[
2195   ('backend_op', 'backend_op', 'uvsw'),
2196
2197   ('dsel', 'dsel'),
2198   ('imm', 'imm_uvsw', 1),
2199   ('uvsw_op', 'uvsw_op', 'write_emit_endtask'),
2200
2201   ('imm_addr', 'imm_addr_uvsw'),
2202])
2203
2204I_MOVMSK = bit_struct(
2205name='movmsk',
2206bit_set=I_BACKEND,
2207field_mappings=[
2208   ('backend_op', 'backend_op', 'msk'),
2209
2210   ('msk_op', 'msk_op', 'mov'),
2211   ('sm', 'sm', 0),
2212   ('msk_mode', 'msk_mode', 'icm'),
2213])
2214
2215I_MOVMSK_SM = bit_struct(
2216name='movmsk_sm',
2217bit_set=I_BACKEND,
2218field_mappings=[
2219   ('backend_op', 'backend_op', 'msk'),
2220
2221   ('msk_op', 'msk_op', 'mov'),
2222   ('sm', 'sm', 1),
2223   ('msk_mode', 'msk_mode', 'icm'),
2224
2225   ('rsvd1', 'rsvd1'),
2226   ('srcsel', 'srcsel'),
2227])
2228
2229I_SAVMSK = bit_struct(
2230name='savmsk',
2231bit_set=I_BACKEND,
2232field_mappings=[
2233   ('backend_op', 'backend_op', 'msk'),
2234
2235   ('msk_op', 'msk_op', 'sav'),
2236   ('sm', 'sm', 0),
2237   ('msk_mode', 'msk_mode'),
2238])
2239
2240I_PHAS_REG = bit_struct(
2241name='phas_reg',
2242bit_set=I_BACKEND,
2243field_mappings=[
2244   ('backend_op', 'backend_op', 'phas'),
2245
2246   ('exeaddrsrc', 'exeaddrsrc'),
2247   ('end', 'phas_end', 0),
2248   ('type', 'phas_type', 'reg'),
2249
2250   ('rsvd1', 'rsvd1'),
2251   ('paramsrc', 'srcsel'),
2252])
2253
2254I_PHAS_IMM = bit_struct(
2255name='phas_imm',
2256bit_set=I_BACKEND,
2257field_mappings=[
2258   ('backend_op', 'backend_op', 'phas'),
2259
2260   ('exeaddrsrc', 'exeaddrsrc'),
2261   ('end', 'phas_end'),
2262   ('type', 'phas_type', 'imm'),
2263
2264   ('rate', 'phas_rate'),
2265   ('commontmp', 'commontmp'),
2266])
2267
2268I_SETL = bit_struct(
2269name='setl',
2270bit_set=I_BACKEND,
2271field_mappings=[
2272   ('backend_op', 'backend_op', 'setl'),
2273
2274   ('rsvd0', 'rsvd0_setl'),
2275   ('ressel', 'ressel'),
2276])
2277
2278I_VISTEST_DEPTHF = bit_struct(
2279name='vistest_depthf',
2280bit_set=I_BACKEND,
2281field_mappings=[
2282   ('backend_op', 'backend_op', 'vistest'),
2283
2284   ('rsvd0', 'rsvd0_vistest'),
2285   ('pwen', 'pwen_vistest', 0),
2286   ('vistest_op', 'vistest_op', 'depthf'),
2287   ('ifb', 'ifb', 0),
2288])
2289
2290I_VISTEST_ATST = bit_struct(
2291name='vistest_atst',
2292bit_set=I_BACKEND,
2293field_mappings=[
2294   ('backend_op', 'backend_op', 'vistest'),
2295
2296   ('rsvd0', 'rsvd0_vistest'),
2297   ('pwen', 'pwen_vistest'),
2298   ('vistest_op', 'vistest_op', 'atst'),
2299   ('ifb', 'ifb'),
2300])
2301
2302I_FITR = bit_struct(
2303name='fitr',
2304bit_set=I_BACKEND,
2305field_mappings=[
2306   ('backend_op', 'backend_op', 'fitr'),
2307
2308   ('p', 'p_fitr'),
2309   ('drc', 'drc'),
2310   ('rsvd0', 'rsvd0_fitr'),
2311   ('iter_mode', 'iter_mode'),
2312
2313   ('rsvd1', 'rsvd1_fitr'),
2314   ('sat', 'sat_fitr'),
2315   ('count', 'count_fitr'),
2316
2317])
2318
2319I_EMITPIX = bit_struct(
2320name='emitpix',
2321bit_set=I_BACKEND,
2322field_mappings=[
2323   ('backend_op', 'backend_op', 'emit'),
2324
2325   ('rsvd0', 'rsvd0_emitpix'),
2326   ('freep', 'freep'),
2327   ('rsvd0_', 'rsvd0_emitpix_'),
2328])
2329
2330I_IDF = bit_struct(
2331name='idf',
2332bit_set=I_BACKEND,
2333field_mappings=[
2334   ('backend_op', 'backend_op', 'dma'),
2335
2336   ('rsvd0', 'rsvd0_dma'),
2337   ('drc', 'drc'),
2338   ('dma_op', 'dma_op', 'idf'),
2339
2340   ('rsvd1', 'rsvd1'),
2341   ('srcseladd', 'srcsel'),
2342])
2343
2344I_LD_IMMBL = bit_struct(
2345name='ld_immbl',
2346bit_set=I_BACKEND,
2347field_mappings=[
2348   ('backend_op', 'backend_op', 'dma'),
2349
2350   ('immbl', 'immbl', 1),
2351   ('drc', 'drc'),
2352   ('dma_op', 'dma_op', 'ld'),
2353
2354   ('srcseladd', 'srcseladd_ldst'),
2355   ('burstlen', 'burstlen'),
2356   ('cachemode_ld', 'cachemode_ld'),
2357
2358   ('rsvd2', 'rsvd2_ld'),
2359])
2360
2361I_LD_REGBL = bit_struct(
2362name='ld_regbl',
2363bit_set=I_BACKEND,
2364field_mappings=[
2365   ('backend_op', 'backend_op', 'dma'),
2366
2367   ('immbl', 'immbl', 0),
2368   ('drc', 'drc'),
2369   ('dma_op', 'dma_op', 'ld'),
2370
2371   ('srcseladd', 'srcseladd_ldst'),
2372   ('srcselbl', 'srcselbl_ldst'),
2373   ('cachemode_ld', 'cachemode_ld'),
2374])
2375
2376I_ST_IMMBL = bit_struct(
2377name='st_immbl',
2378bit_set=I_BACKEND,
2379field_mappings=[
2380   ('backend_op', 'backend_op', 'dma'),
2381
2382   ('immbl', 'immbl', 1),
2383   ('drc', 'drc'),
2384   ('dma_op', 'dma_op', 'st'),
2385
2386   ('srcseladd', 'srcseladd_ldst'),
2387   ('burstlen', 'burstlen'),
2388   ('cachemode_st', 'cachemode_st'),
2389
2390   ('tiled', 'tiled', 0),
2391   ('srcseldata', 'srcseldata'),
2392   ('dsize', 'dsize'),
2393   ('rsvd2', 'rsvd2_st'),
2394])
2395
2396I_ST_REGBL = bit_struct(
2397name='st_regbl',
2398bit_set=I_BACKEND,
2399field_mappings=[
2400   ('backend_op', 'backend_op', 'dma'),
2401
2402   ('immbl', 'immbl', 0),
2403   ('drc', 'drc'),
2404   ('dma_op', 'dma_op', 'st'),
2405
2406   ('srcseladd', 'srcseladd_ldst'),
2407   ('srcselbl', 'srcselbl_ldst'),
2408   ('cachemode_st', 'cachemode_st'),
2409
2410   ('tiled', 'tiled', 0),
2411   ('srcseldata', 'srcseldata'),
2412   ('dsize', 'dsize'),
2413   ('rsvd2', 'rsvd2_st'),
2414   ('rsvd2_', 'rsvd2_st_'),
2415])
2416
2417I_ST_IMMBL_TILED = bit_struct(
2418name='st_immbl_tiled',
2419bit_set=I_BACKEND,
2420field_mappings=[
2421   ('backend_op', 'backend_op', 'dma'),
2422
2423   ('immbl', 'immbl', 1),
2424   ('drc', 'drc'),
2425   ('dma_op', 'dma_op', 'st'),
2426
2427   ('srcseladd', 'srcseladd_ldst'),
2428   ('burstlen', 'burstlen'),
2429   ('cachemode_st', 'cachemode_st'),
2430
2431   ('tiled', 'tiled', 1),
2432   ('srcseldata', 'srcseldata'),
2433   ('dsize', 'dsize'),
2434   ('rsvd2', 'rsvd2_st'),
2435
2436   ('rsvd3', 'rsvd3_st'),
2437   ('srcmask', 'srcmask'),
2438])
2439
2440I_ST_REGBL_TILED = bit_struct(
2441name='st_regbl_tiled',
2442bit_set=I_BACKEND,
2443field_mappings=[
2444   ('backend_op', 'backend_op', 'dma'),
2445
2446   ('immbl', 'immbl', 0),
2447   ('drc', 'drc'),
2448   ('dma_op', 'dma_op', 'st'),
2449
2450   ('srcseladd', 'srcseladd_ldst'),
2451   ('srcselbl', 'srcselbl_ldst'),
2452   ('cachemode_st', 'cachemode_st'),
2453
2454   ('tiled', 'tiled', 1),
2455   ('srcseldata', 'srcseldata'),
2456   ('dsize', 'dsize'),
2457   ('rsvd2', 'rsvd2_st'),
2458   ('rsvd2_', 'rsvd2_st_'),
2459
2460   ('rsvd3', 'rsvd3_st'),
2461   ('srcmask', 'srcmask'),
2462])
2463
2464I_SMP_BRIEF = bit_struct(
2465name='smp_brief',
2466bit_set=I_BACKEND,
2467field_mappings=[
2468   ('backend_op', 'backend_op', 'dma'),
2469
2470   ('fcnorm', 'fcnorm'),
2471   ('drc', 'drc'),
2472   ('dma_op', 'dma_op', 'smp'),
2473
2474   ('extb', 'extb', 0),
2475   ('dmn', 'dmn'),
2476   ('exta', 'exta', 0),
2477   ('chan', 'chan'),
2478   ('lodm', 'lodm'),
2479])
2480
2481I_SMP_EXTA = bit_struct(
2482name='smp_exta',
2483bit_set=I_BACKEND,
2484field_mappings=[
2485   ('backend_op', 'backend_op', 'dma'),
2486
2487   ('fcnorm', 'fcnorm'),
2488   ('drc', 'drc'),
2489   ('dma_op', 'dma_op', 'smp'),
2490
2491   ('extb', 'extb', 0),
2492   ('dmn', 'dmn'),
2493   ('exta', 'exta', 1),
2494   ('chan', 'chan'),
2495   ('lodm', 'lodm'),
2496
2497   ('pplod', 'pplod'),
2498   ('proj', 'proj'),
2499   ('sbmode', 'sbmode'),
2500   ('nncoords', 'nncoords'),
2501   ('sno', 'sno'),
2502   ('soo', 'soo'),
2503   ('tao', 'tao'),
2504])
2505
2506I_SMP_EXTB = bit_struct(
2507name='smp_extb',
2508bit_set=I_BACKEND,
2509field_mappings=[
2510   ('backend_op', 'backend_op', 'dma'),
2511
2512   ('fcnorm', 'fcnorm'),
2513   ('drc', 'drc'),
2514   ('dma_op', 'dma_op', 'smp'),
2515
2516   ('extb', 'extb', 1),
2517   ('dmn', 'dmn'),
2518   ('exta', 'exta', 0),
2519   ('chan', 'chan'),
2520   ('lodm', 'lodm'),
2521
2522   ('rsvd3', 'rsvd3_smp'),
2523   ('f16', 'f16'),
2524   ('swap', 'swap'),
2525   ('cachemode_ld', 'cachemode_smp_ld'),
2526   ('w', 'smp_w', 0),
2527])
2528
2529I_SMP_EXTB_W = bit_struct(
2530name='smp_extb_w',
2531bit_set=I_BACKEND,
2532field_mappings=[
2533   ('backend_op', 'backend_op', 'dma'),
2534
2535   ('fcnorm', 'fcnorm'),
2536   ('drc', 'drc'),
2537   ('dma_op', 'dma_op', 'smp'),
2538
2539   ('extb', 'extb', 1),
2540   ('dmn', 'dmn'),
2541   ('exta', 'exta', 0),
2542   ('chan', 'chan'),
2543   ('lodm', 'lodm'),
2544
2545   ('rsvd3', 'rsvd3_smp'),
2546   ('f16', 'f16'),
2547   ('swap', 'swap'),
2548   ('cachemode_st', 'cachemode_smp_st'),
2549   ('w', 'smp_w', 1),
2550])
2551
2552I_SMP_EXTAB = bit_struct(
2553name='smp_extab',
2554bit_set=I_BACKEND,
2555field_mappings=[
2556   ('backend_op', 'backend_op', 'dma'),
2557
2558   ('fcnorm', 'fcnorm'),
2559   ('drc', 'drc'),
2560   ('dma_op', 'dma_op', 'smp'),
2561
2562   ('extb', 'extb', 1),
2563   ('dmn', 'dmn'),
2564   ('exta', 'exta', 1),
2565   ('chan', 'chan'),
2566   ('lodm', 'lodm'),
2567
2568   ('pplod', 'pplod'),
2569   ('proj', 'proj'),
2570   ('sbmode', 'sbmode'),
2571   ('nncoords', 'nncoords'),
2572   ('sno', 'sno'),
2573   ('soo', 'soo'),
2574   ('tao', 'tao'),
2575
2576   ('rsvd3', 'rsvd3_smp'),
2577   ('f16', 'f16'),
2578   ('swap', 'swap'),
2579   ('cachemode_ld', 'cachemode_smp_ld'),
2580   ('w', 'smp_w', 0),
2581])
2582
2583I_SMP_EXTAB_W = bit_struct(
2584name='smp_extab_w',
2585bit_set=I_BACKEND,
2586field_mappings=[
2587   ('backend_op', 'backend_op', 'dma'),
2588
2589   ('fcnorm', 'fcnorm'),
2590   ('drc', 'drc'),
2591   ('dma_op', 'dma_op', 'smp'),
2592
2593   ('extb', 'extb', 1),
2594   ('dmn', 'dmn'),
2595   ('exta', 'exta', 1),
2596   ('chan', 'chan'),
2597   ('lodm', 'lodm'),
2598
2599   ('pplod', 'pplod'),
2600   ('proj', 'proj'),
2601   ('sbmode', 'sbmode'),
2602   ('nncoords', 'nncoords'),
2603   ('sno', 'sno'),
2604   ('soo', 'soo'),
2605   ('tao', 'tao'),
2606
2607   ('rsvd3', 'rsvd3_smp'),
2608   ('f16', 'f16'),
2609   ('swap', 'swap'),
2610   ('cachemode_st', 'cachemode_smp_st'),
2611   ('w', 'smp_w', 1),
2612])
2613
2614I_ATOMIC = bit_struct(
2615name='atomic',
2616bit_set=I_BACKEND,
2617field_mappings=[
2618   ('backend_op', 'backend_op', 'dma'),
2619
2620   ('rsvd0', 'rsvd0_dma'),
2621   ('drc', 'drc'),
2622   ('dma_op', 'dma_op', 'atomic'),
2623
2624   ('atomic_op', 'atomic_op'),
2625   ('rsvd1', 'rsvd1_atomic'),
2626   ('srcsel', 'srcsel'),
2627
2628   ('rsvd2', 'rsvd2_atomic'),
2629   ('dstsel', 'dstsel'),
2630])
2631
2632# Bitwise ALU ops.
2633F_COUNT_SRC = field_enum_type(
2634name='count_src', num_bits=1,
2635elems=[
2636   ('s2', 0b0),
2637   ('ft2', 0b1),
2638])
2639
2640F_COUNT_OP = field_enum_type(
2641name='count_op', num_bits=2,
2642elems=[
2643   ('cbs', 0b00),
2644   ('ftb', 0b01),
2645   ('byp', 0b10),
2646])
2647
2648F_BITMASK_SRC_OP = field_enum_type(
2649name='bitmask_src_op', num_bits=1,
2650elems=[
2651   ('byp', 0b0),
2652   ('msk', 0b1),
2653])
2654
2655F_BITMASK_IMM_OP = field_enum_type(
2656name='bitmask_imm_op', num_bits=1,
2657elems=[
2658   ('byp16', 0b0),
2659   ('byp32', 0b1),
2660])
2661
2662F_SHIFT1_OP = field_enum_type(
2663name='shift1_op', num_bits=2,
2664elems=[
2665   ('byp', 0b00),
2666   ('shfl', 0b01),
2667   ('rev', 0b10),
2668   ('lsl', 0b11),
2669])
2670
2671F_LOGICAL_OP = field_enum_type(
2672name='logical_op', num_bits=3,
2673elems=[
2674   ('or', 0b000),
2675   ('and', 0b001),
2676   ('xor', 0b010),
2677   ('nor', 0b100),
2678   ('nand', 0b101),
2679   ('xnor', 0b110),
2680   ('byp', 0b111),
2681])
2682
2683F_BW_TST_SRC = field_enum_type(
2684name='bw_tst_src', num_bits=1,
2685elems=[
2686   ('ft5', 0b0),
2687   ('ft3', 0b1),
2688])
2689
2690F_BW_TST_OP = field_enum_type(
2691name='bw_tst_op', num_bits=1,
2692elems=[
2693   ('z', 0b0),
2694   ('nz', 0b1),
2695])
2696
2697F_SHIFT2_OP = field_enum_type(
2698name='shift2_op', num_bits=3,
2699elems=[
2700   ('lsl', 0b000),
2701   ('shr', 0b001),
2702   ('rol', 0b010),
2703   ('cps', 0b011),
2704   ('asr_twb', 0b100),
2705   ('asr_pwb', 0b101),
2706   ('asr_mtb', 0b110),
2707   ('asr_ftb', 0b111),
2708])
2709
2710I_BITWISE = bit_set(
2711name='bitwise',
2712pieces=[
2713   ('ph0', (0, '7')),
2714   ('ph1', (0, '6')),
2715
2716   # phase 0
2717   ('csrc', (0, '6')),
2718   ('cnt', (0, '5')),
2719   ('ext0', (0, '4')),
2720   ('shft1', (0, '3:2')),
2721   ('cnt_byp', (0, '1')),
2722   ('bm', (0, '0')),
2723
2724   ('imm_7_0', (1, '7:0')),
2725   ('imm_15_8', (2, '7:0')),
2726   ('imm_23_16', (3, '7:0')),
2727   ('imm_31_24', (4, '7:0')),
2728
2729   # phase 1
2730   ('mskb', (0, '5')),
2731   ('mska', (0, '3')),
2732   ('logical_op', (0, '2:0')),
2733
2734   # phase 2
2735   ('pwen', (0, '5')),
2736   ('tsrc', (0, '4')),
2737   ('top', (0, '3')),
2738   ('shft2', (0, '2:0')),
2739],
2740fields=[
2741   ('ph0', (F_BOOL, ['ph0'])),
2742   ('ph1', (F_BOOL, ['ph1'])),
2743
2744   # phase 0
2745   ('count_src', (F_COUNT_SRC, ['csrc'])),
2746   ('bitmask_imm', (F_BOOL, ['ext0'])),
2747   ('count_op', (F_COUNT_OP, ['cnt_byp', 'cnt'])),
2748   ('bitmask_src_op', (F_BITMASK_SRC_OP, ['bm'])),
2749   ('bitmask_imm_op', (F_BITMASK_IMM_OP, ['bm'])),
2750   ('shift1_op', (F_SHIFT1_OP, ['shft1'])),
2751
2752   ('imm16', (F_UINT16, ['imm_15_8', 'imm_7_0'])),
2753   ('imm32', (F_UINT32, ['imm_31_24', 'imm_23_16', 'imm_15_8', 'imm_7_0'])),
2754
2755   # phase 1
2756   ('mskb', (F_BOOL, ['mskb'])),
2757   ('rsvd0_ph1', (F_UINT1, ['ext0'], 0)),
2758   ('mska', (F_BOOL, ['mska'])),
2759   ('logical_op', (F_LOGICAL_OP, ['logical_op'])),
2760
2761   # phase 2
2762   ('pwen', (F_BOOL, ['pwen'])),
2763   ('tst_src', (F_BW_TST_SRC, ['tsrc'])),
2764   ('tst_op', (F_BW_TST_OP, ['top'])),
2765   ('shift2_op', (F_SHIFT2_OP, ['shft2'])),
2766])
2767
2768I_PHASE0_SRC = bit_struct(
2769name='phase0_src',
2770bit_set=I_BITWISE,
2771field_mappings=[
2772   ('ph0', 'ph0', 0),
2773
2774   ('count_src', 'count_src'),
2775   ('bitmask_imm', 'bitmask_imm', 0),
2776   ('count_op', 'count_op'),
2777   ('bitmask_src_op', 'bitmask_src_op'),
2778   ('shift1_op', 'shift1_op'),
2779])
2780
2781I_PHASE0_IMM16 = bit_struct(
2782name='phase0_imm16',
2783bit_set=I_BITWISE,
2784field_mappings=[
2785   ('ph0', 'ph0', 0),
2786
2787   ('count_src', 'count_src'),
2788   ('bitmask_imm', 'bitmask_imm', 1),
2789   ('count_op', 'count_op'),
2790   ('bitmask_imm_op', 'bitmask_imm_op', 'byp16'),
2791   ('shift1_op', 'shift1_op'),
2792   ('imm16', 'imm16'),
2793])
2794
2795I_PHASE0_IMM32 = bit_struct(
2796name='phase0_imm32',
2797bit_set=I_BITWISE,
2798field_mappings=[
2799   ('ph0', 'ph0', 0),
2800
2801   ('count_src', 'count_src'),
2802   ('bitmask_imm', 'bitmask_imm', 1),
2803   ('count_op', 'count_op'),
2804   ('bitmask_imm_op', 'bitmask_imm_op', 'byp32'),
2805   ('shift1_op', 'shift1_op'),
2806   ('imm32', 'imm32'),
2807])
2808
2809I_PHASE1 = bit_struct(
2810name='phase1',
2811bit_set=I_BITWISE,
2812field_mappings=[
2813   ('ph0', 'ph0', 0),
2814   ('ph1', 'ph1', 1),
2815
2816   ('mskb', 'mskb'),
2817   ('rsvd0', 'rsvd0_ph1'),
2818   ('mska', 'mska'),
2819   ('logical_op', 'logical_op'),
2820])
2821
2822I_PHASE2 = bit_struct(
2823name='phase2',
2824bit_set=I_BITWISE,
2825field_mappings=[
2826   ('ph0', 'ph0', 0),
2827   ('ph1', 'ph1', 0),
2828
2829   ('pwen', 'pwen'),
2830   ('tst_src', 'tst_src'),
2831   ('bw_tst_op', 'tst_op'),
2832   ('shift2_op', 'shift2_op'),
2833])
2834
2835# Control ALU ops.
2836F_PCND = field_enum_type(
2837name='pcnd', num_bits=2,
2838elems=[
2839   ('always', 0b00),
2840   ('p0_true', 0b01),
2841   ('never', 0b10),
2842   ('p0_false', 0b11),
2843])
2844
2845F_CNDINST = field_enum_type(
2846name='cndinst', num_bits=3,
2847elems=[
2848   ('st', 0b000),
2849   ('ef', 0b001),
2850   ('sm', 0b010),
2851   ('lt', 0b011),
2852   ('end', 0b100),
2853   ('setl_b', 0b101),
2854   ('lpc', 0b110),
2855   ('setl_a', 0b111),
2856])
2857
2858F_LR = field_enum_type(
2859name='lr', num_bits=2,
2860elems=[
2861   ('release', 0b00),
2862   ('release_sleep', 0b01),
2863   ('release_wakeup', 0b10),
2864   ('lock', 0b11),
2865])
2866
2867F_TGT = field_enum_type(
2868name='tgt', num_bits=1,
2869elems=[
2870   ('coeff', 0b0),
2871   ('shared', 0b1),
2872])
2873
2874F_BPRED = field_enum_type(
2875name='bpred', num_bits=2,
2876elems=[
2877   ('cc', 0b00),
2878   ('allp', 0b01),
2879   ('anyp', 0b10),
2880])
2881
2882I_CTRL = bit_set(
2883name='ctrl',
2884pieces=[
2885   # Branch
2886   ('link', (0, '4')),
2887   ('bpred', (0, '3:2')),
2888   ('abs', (0, '1')),
2889   ('rsvd0_branch_', (0, '0')),
2890
2891   ('branch_offset_7_1', (1, '7:1')),
2892   ('rsvd1_branch', (1, '0')),
2893
2894   ('branch_offset_15_8', (2, '7:0')),
2895   ('branch_offset_23_16', (3, '7:0')),
2896   ('branch_offset_31_24', (4, '7:0')),
2897
2898   # Conditional.
2899   ('rsvd0_cnd', (0, '7')),
2900   ('adjust', (0, '6:5')),
2901   ('pcnd', (0, '4:3')),
2902   ('cndinst', (0, '2:0')),
2903
2904   # Mutex.
2905   ('lr', (0, '7:6')),
2906   ('rsvd0_mutex', (0, '5:4')),
2907   ('id', (0, '3:0')),
2908
2909   # NOP
2910   ('rsvd0_nop', (0, '7:0')),
2911
2912   # SBO
2913   ('sbo_offset_6_0', (0, '7:1')),
2914   ('tgt', (0, '0')),
2915
2916   ('rsvd1_sbo', (1, '7:1')),
2917   ('sbo_offset_7', (1, '0')),
2918
2919   # ditr
2920   ('dest_7_0', (0, '7:0')),
2921
2922   ('coff_7_2', (1, '7:2')),
2923   ('p_itr', (1, '1:0')),
2924
2925   ('woff_b2_7_2', (2, '7:2')),
2926   ('ditr_mode', (2, '1:0')),
2927
2928   ('itr_count_b3', (3, '7:4')),
2929   ('coff_idx_ctrl_b3', (3, '3:2')),
2930   ('woff_idx_ctrl_b3', (3, '1:0')),
2931
2932   ('rsvd4_7_ditr', (4, '7')),
2933   ('f16_b4', (4, '6')),
2934   ('rsvd4_5_ditr', (4, '5:4')),
2935   ('sched_ctrl_b4', (4, '3:2')),
2936   ('drc_b4', (4, '1')),
2937   ('sat', (4, '0')),
2938
2939   # itrsmp
2940   ('texoff_7_2', (2, '7:2')),
2941   ('drc_b2', (2, '1')),
2942   ('itrsmp_mode_0', (2, '0')),
2943
2944   ('smpoff_7_2', (3, '7:2')),
2945   ('dmn', (3, '1:0')),
2946
2947   ('woff_b4_7_2', (4, '7:2')),
2948   ('proj', (4, '1')),
2949
2950   ('ext5', (5, '7')),
2951   ('f16_b5', (5, '6')),
2952   ('sched_ctrl_b5', (5, '5:4')),
2953   ('chan', (5, '3:2')),
2954   ('nncoords', (5, '1')),
2955   ('fcnorm', (5, '0')),
2956
2957   ('ext6', (6, '7')),
2958   ('itr_count_b6', (6, '6:3')),
2959   ('comparison', (6, '2')),
2960   ('rsvd6_itrsmp', (6, '1:0')),
2961
2962   ('rsvd7_itrsmp', (7, '7:5')),
2963   ('coff_idx_ctrl_b7', (7, '4:3')),
2964   ('woff_idx_ctrl_b7', (7, '2:1')),
2965   ('itrsmp_mode_1', (7, '0')),
2966],
2967fields=[
2968   # Branch
2969   ('rsvd_branch', (F_UINT5, ['rsvd1_branch', 'rsvd0_branch_', 'adjust', 'rsvd0_cnd'], 0)),
2970   ('link', (F_BOOL, ['link'])),
2971   ('bpred', (F_BPRED, ['bpred'])),
2972   ('abs', (F_BOOL, ['abs'])),
2973   ('branch_offset', (F_OFFSET31, ['branch_offset_31_24', 'branch_offset_23_16', 'branch_offset_15_8', 'branch_offset_7_1'])),
2974
2975   # Conditional.
2976   ('rsvd_cnd', (F_UINT1, ['rsvd0_cnd'], 0)),
2977   ('adjust', (F_UINT2, ['adjust'])),
2978   ('pcnd', (F_PCND, ['pcnd'])),
2979   ('cndinst', (F_CNDINST, ['cndinst'])),
2980
2981   # Mutex.
2982   ('lr', (F_LR, ['lr'])),
2983   ('rsvd_mutex', (F_UINT2, ['rsvd0_mutex'], 0)),
2984   ('id', (F_UINT4, ['id'])),
2985
2986   # NOP
2987   ('rsvd_nop', (F_UINT8, ['rsvd0_nop'], 0)),
2988
2989   # SBO
2990   ('rsvd_sbo', (F_UINT7, ['rsvd1_sbo'], 0)),
2991   ('tgt', (F_TGT, ['tgt'])),
2992   ('sbo_offset', (F_UINT8, ['sbo_offset_7', 'sbo_offset_6_0'])),
2993
2994   # ditr
2995   ('dest', (F_UINT8, ['dest_7_0'])),
2996
2997   ('coff', (F_UINT6MUL4, ['coff_7_2'])),
2998   ('p_itr', (F_PERSP_CTL, ['p_itr'])),
2999
3000   ('woff_b2', (F_UINT6MUL4, ['woff_b2_7_2'])),
3001   ('ditr_mode', (F_ITER_MODE, ['ditr_mode'])),
3002
3003   ('itr_count_b3', (F_UINT4_POS_WRAP, ['itr_count_b3'])),
3004   ('coff_idx_ctrl_b3', (F_IDX_CTRL, ['coff_idx_ctrl_b3'])),
3005   ('woff_idx_ctrl_b3', (F_IDX_CTRL, ['woff_idx_ctrl_b3'])),
3006
3007   ('rsvd4_7_ditr', (F_UINT1, ['rsvd4_7_ditr'], 0)),
3008   ('f16_b4', (F_BOOL, ['f16_b4'])),
3009   ('rsvd4_5_ditr', (F_UINT2, ['rsvd4_5_ditr'], 0)),
3010   ('sched_ctrl_b4', (F_SCHED_CTRL, ['sched_ctrl_b4'])),
3011   ('drc_b4', (F_UINT1, ['drc_b4'])),
3012   ('sat', (F_BOOL, ['sat'])),
3013
3014   # itrsmp
3015   ('texoff', (F_UINT6MUL4, ['texoff_7_2'])),
3016   ('drc_b2', (F_UINT1, ['drc_b2'])),
3017   ('itrsmp_mode1', (F_ITER_MODE1, ['itrsmp_mode_0'])),
3018
3019   ('smpoff', (F_UINT6MUL4, ['smpoff_7_2'])),
3020   ('dmn', (F_DMN, ['dmn'])),
3021
3022   ('woff_b4', (F_UINT6MUL4, ['woff_b4_7_2'])),
3023   ('proj', (F_BOOL, ['proj'])),
3024
3025   ('ext5', (F_BOOL, ['ext5'])),
3026   ('f16_b5', (F_BOOL, ['f16_b5'])),
3027   ('sched_ctrl_b5', (F_SCHED_CTRL, ['sched_ctrl_b5'])),
3028   ('chan', (F_UINT2_POS_INC, ['chan'])),
3029   ('nncoords', (F_BOOL, ['nncoords'])),
3030   ('fcnorm', (F_BOOL, ['fcnorm'])),
3031
3032   ('ext6', (F_BOOL, ['ext6'])),
3033   ('itr_count_b6', (F_UINT4_POS_WRAP, ['itr_count_b6'])),
3034   ('comparison', (F_BOOL, ['comparison'])),
3035   ('rsvd6_itrsmp', (F_UINT2, ['rsvd6_itrsmp'], 0)),
3036
3037   ('rsvd7_itrsmp', (F_UINT3, ['rsvd7_itrsmp'], 0)),
3038   ('coff_idx_ctrl_b7', (F_IDX_CTRL, ['coff_idx_ctrl_b7'])),
3039   ('woff_idx_ctrl_b7', (F_IDX_CTRL, ['woff_idx_ctrl_b7'])),
3040   ('itrsmp_mode', (F_ITER_MODE, ['itrsmp_mode_1', 'itrsmp_mode_0'])),
3041])
3042
3043I_BRANCH = bit_struct(
3044name='branch',
3045bit_set=I_CTRL,
3046field_mappings=[
3047   ('rsvd', 'rsvd_branch'),
3048
3049   ('link', 'link'),
3050   ('bpred', 'bpred'),
3051   ('abs', 'abs'),
3052   ('offset', 'branch_offset'),
3053])
3054
3055I_LAPC = bit_struct(
3056name='lapc',
3057bit_set=I_CTRL,
3058field_mappings=[])
3059
3060I_SAVL = bit_struct(
3061name='savl',
3062bit_set=I_CTRL,
3063field_mappings=[])
3064
3065I_CND = bit_struct(
3066name='cnd',
3067bit_set=I_CTRL,
3068field_mappings=[
3069   ('rsvd', 'rsvd_cnd'),
3070
3071   ('adjust', 'adjust'),
3072   ('pcnd', 'pcnd'),
3073   ('cndinst', 'cndinst'),
3074])
3075
3076I_WOP = bit_struct(
3077name='wop',
3078bit_set=I_CTRL,
3079field_mappings=[])
3080
3081I_WDF = bit_struct(
3082name='wdf',
3083bit_set=I_CTRL,
3084field_mappings=[])
3085
3086I_MUTEX = bit_struct(
3087name='mutex',
3088bit_set=I_CTRL,
3089field_mappings=[
3090   ('rsvd', 'rsvd_mutex'),
3091
3092   ('lr', 'lr'),
3093   ('id', 'id'),
3094])
3095
3096I_NOP = bit_struct(
3097name='nop',
3098bit_set=I_CTRL,
3099field_mappings=[
3100   ('rsvd', 'rsvd_nop'),
3101])
3102
3103# SBO.
3104I_SBO = bit_struct(
3105name='sbo',
3106bit_set=I_CTRL,
3107field_mappings=[
3108   ('rsvd', 'rsvd_sbo'),
3109   ('tgt', 'tgt'),
3110   ('offset', 'sbo_offset'),
3111])
3112
3113I_DITR = bit_struct(
3114name='ditr',
3115bit_set=I_CTRL,
3116field_mappings=[
3117   'dest',
3118
3119   'coff',
3120   ('p', 'p_itr'),
3121
3122   ('woff', 'woff_b2'),
3123   ('mode', 'ditr_mode'),
3124
3125   ('count', 'itr_count_b3'),
3126   ('coff_idx_ctrl', 'coff_idx_ctrl_b3'),
3127   ('woff_idx_ctrl', 'woff_idx_ctrl_b3'),
3128
3129   ('rsvd0', 'rsvd4_7_ditr'),
3130   ('f16', 'f16_b4'),
3131   ('rsvd1', 'rsvd4_5_ditr'),
3132   ('sched_ctrl', 'sched_ctrl_b4'),
3133   ('drc', 'drc_b4'),
3134   'sat',
3135])
3136
3137I_ITRSMP = bit_struct(
3138name='itrsmp',
3139bit_set=I_CTRL,
3140field_mappings=[
3141   'dest',
3142
3143   'coff',
3144   ('p', 'p_itr'),
3145
3146   'texoff',
3147   ('drc', 'drc_b2'),
3148   ('mode', 'itrsmp_mode1'),
3149
3150   'smpoff',
3151   'dmn',
3152
3153   ('woff', 'woff_b4'),
3154   'proj',
3155   'sat',
3156
3157   ('ext5', 'ext5', False),
3158   ('f16', 'f16_b5'),
3159   ('sched_ctrl', 'sched_ctrl_b5'),
3160   'chan',
3161   'nncoords',
3162   'fcnorm',
3163])
3164
3165I_ITRSMP_EXT = bit_struct(
3166name='itrsmp_ext',
3167bit_set=I_CTRL,
3168field_mappings=[
3169   'dest',
3170
3171   'coff',
3172   ('p', 'p_itr'),
3173
3174   'texoff',
3175   ('drc', 'drc_b2'),
3176   ('mode', 'itrsmp_mode1'),
3177
3178   'smpoff',
3179   'dmn',
3180
3181   ('woff', 'woff_b4'),
3182   'proj',
3183   'sat',
3184
3185   ('ext5', 'ext5', True),
3186   ('f16', 'f16_b5'),
3187   ('sched_ctrl', 'sched_ctrl_b5'),
3188   'chan',
3189   'nncoords',
3190   'fcnorm',
3191
3192   ('ext6', 'ext6', False),
3193   ('count', 'itr_count_b6'),
3194   'comparison',
3195   'rsvd6_itrsmp',
3196])
3197
3198I_ITRSMP_EXT2 = bit_struct(
3199name='itrsmp_ext2',
3200bit_set=I_CTRL,
3201field_mappings=[
3202   'dest',
3203
3204   'coff',
3205   ('p', 'p_itr'),
3206
3207   'texoff',
3208   ('drc', 'drc_b2'),
3209
3210   'smpoff',
3211   'dmn',
3212
3213   ('woff', 'woff_b4'),
3214   'proj',
3215   'sat',
3216
3217   ('ext5', 'ext5', True),
3218   ('f16', 'f16_b5'),
3219   ('sched_ctrl', 'sched_ctrl_b5'),
3220   'chan',
3221   'nncoords',
3222   'fcnorm',
3223
3224   ('ext6', 'ext6', True),
3225   ('count', 'itr_count_b6'),
3226   'comparison',
3227   'rsvd6_itrsmp',
3228
3229   'rsvd7_itrsmp',
3230   ('coff_idx_ctrl', 'coff_idx_ctrl_b7'),
3231   ('woff_idx_ctrl', 'woff_idx_ctrl_b7'),
3232   ('mode', 'itrsmp_mode'),
3233])
3234