1bf215546Sopenharmony_ci/*
2bf215546Sopenharmony_ci * Copyright 2012 Vadim Girlin <vadimgirlin@gmail.com>
3bf215546Sopenharmony_ci *
4bf215546Sopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a
5bf215546Sopenharmony_ci * copy of this software and associated documentation files (the "Software"),
6bf215546Sopenharmony_ci * to deal in the Software without restriction, including without limitation
7bf215546Sopenharmony_ci * on the rights to use, copy, modify, merge, publish, distribute, sub
8bf215546Sopenharmony_ci * license, and/or sell copies of the Software, and to permit persons to whom
9bf215546Sopenharmony_ci * the Software is furnished to do so, subject to the following conditions:
10bf215546Sopenharmony_ci *
11bf215546Sopenharmony_ci * The above copyright notice and this permission notice (including the next
12bf215546Sopenharmony_ci * paragraph) shall be included in all copies or substantial portions of the
13bf215546Sopenharmony_ci * Software.
14bf215546Sopenharmony_ci *
15bf215546Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16bf215546Sopenharmony_ci * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17bf215546Sopenharmony_ci * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
18bf215546Sopenharmony_ci * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
19bf215546Sopenharmony_ci * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20bf215546Sopenharmony_ci * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
21bf215546Sopenharmony_ci * USE OR OTHER DEALINGS IN THE SOFTWARE.
22bf215546Sopenharmony_ci *
23bf215546Sopenharmony_ci * Authors:
24bf215546Sopenharmony_ci *      Vadim Girlin
25bf215546Sopenharmony_ci */
26bf215546Sopenharmony_ci
27bf215546Sopenharmony_ci#ifndef R600_ISA_H_
28bf215546Sopenharmony_ci#define R600_ISA_H_
29bf215546Sopenharmony_ci
30bf215546Sopenharmony_ci#include "util/u_debug.h"
31bf215546Sopenharmony_ci
32bf215546Sopenharmony_ci#ifdef __cplusplus
33bf215546Sopenharmony_ciextern "C" {
34bf215546Sopenharmony_ci#endif
35bf215546Sopenharmony_ci
36bf215546Sopenharmony_ci/* ALU flags */
37bf215546Sopenharmony_cienum alu_op_flags
38bf215546Sopenharmony_ci{
39bf215546Sopenharmony_ci	AF_NONE = 0,
40bf215546Sopenharmony_ci	AF_V		= (1<<0),    /* allowed in vector slots */
41bf215546Sopenharmony_ci
42bf215546Sopenharmony_ci	/* allowed in scalar(trans) slot (slots xyz on cayman, may be replicated
43bf215546Sopenharmony_ci	 * to w) */
44bf215546Sopenharmony_ci	AF_S		= (1<<1),
45bf215546Sopenharmony_ci
46bf215546Sopenharmony_ci	AF_4SLOT	= (1<<2),            /* uses four vector slots (e.g. DOT4) */
47bf215546Sopenharmony_ci	AF_4V		= (AF_V | AF_4SLOT),
48bf215546Sopenharmony_ci	AF_VS		= (AF_V | AF_S),     /* allowed in any slot */
49bf215546Sopenharmony_ci
50bf215546Sopenharmony_ci	AF_2SLOT = (1 << 3),
51bf215546Sopenharmony_ci	AF_2V    = AF_V | AF_2SLOT, /* XY or ZW */
52bf215546Sopenharmony_ci
53bf215546Sopenharmony_ci	AF_KILL		= (1<<4),
54bf215546Sopenharmony_ci	AF_PRED		= (1<<5),
55bf215546Sopenharmony_ci	AF_SET		= (1<<6),
56bf215546Sopenharmony_ci
57bf215546Sopenharmony_ci	/* e.g. MUL_PREV instructions, allowed in x/y, depends on z/w */
58bf215546Sopenharmony_ci	AF_PREV_INTERLEAVE	= (1<<7),
59bf215546Sopenharmony_ci
60bf215546Sopenharmony_ci	AF_MOVA		= (1<<8),    /* all MOVA instructions */
61bf215546Sopenharmony_ci
62bf215546Sopenharmony_ci	AF_IEEE		= (1<<10),
63bf215546Sopenharmony_ci
64bf215546Sopenharmony_ci	AF_DST_TYPE_MASK = (3<<11),
65bf215546Sopenharmony_ci	AF_FLOAT_DST	= 0,
66bf215546Sopenharmony_ci	AF_INT_DST		= (1<<11),
67bf215546Sopenharmony_ci	AF_UINT_DST		= (3<<11),
68bf215546Sopenharmony_ci
69bf215546Sopenharmony_ci	/* DP instructions, 2-slot pairs */
70bf215546Sopenharmony_ci	AF_64		= (1<<13),
71bf215546Sopenharmony_ci	/* 24 bit instructions */
72bf215546Sopenharmony_ci	AF_24		= (1<<14),
73bf215546Sopenharmony_ci	/* DX10 variants */
74bf215546Sopenharmony_ci	AF_DX10		= (1<<15),
75bf215546Sopenharmony_ci
76bf215546Sopenharmony_ci	/* result is replicated to all channels (only if AF_4V is also set -
77bf215546Sopenharmony_ci	 * for special handling of MULLO_INT on CM) */
78bf215546Sopenharmony_ci	AF_REPL		= (1<<16),
79bf215546Sopenharmony_ci
80bf215546Sopenharmony_ci	/* interpolation instructions */
81bf215546Sopenharmony_ci	AF_INTERP	= (1<<17),
82bf215546Sopenharmony_ci
83bf215546Sopenharmony_ci	/* LDS instructions */
84bf215546Sopenharmony_ci	AF_LDS		= (1<<20),
85bf215546Sopenharmony_ci
86bf215546Sopenharmony_ci	/* e.g. DOT - depends on the next slot in the same group (x<=y/y<=z/z<=w) */
87bf215546Sopenharmony_ci	AF_PREV_NEXT	= (1<<21),
88bf215546Sopenharmony_ci
89bf215546Sopenharmony_ci	/* int<->flt conversions */
90bf215546Sopenharmony_ci	AF_CVT = (1<<22),
91bf215546Sopenharmony_ci
92bf215546Sopenharmony_ci	/* commutative operation on src0 and src1 ( a op b = b op a),
93bf215546Sopenharmony_ci	 * includes MULADDs (considering the MUL part on src0 and src1 only) */
94bf215546Sopenharmony_ci	AF_M_COMM = (1 << 23),
95bf215546Sopenharmony_ci
96bf215546Sopenharmony_ci	/* associative operation ((a op b) op c) == (a op (b op c)),
97bf215546Sopenharmony_ci	 * includes MULADDs (considering the MUL part on src0 and src1 only) */
98bf215546Sopenharmony_ci	AF_M_ASSOC = (1 << 24),
99bf215546Sopenharmony_ci
100bf215546Sopenharmony_ci	AF_PRED_PUSH = (1 << 25),
101bf215546Sopenharmony_ci
102bf215546Sopenharmony_ci	AF_ANY_PRED = (AF_PRED | AF_PRED_PUSH),
103bf215546Sopenharmony_ci
104bf215546Sopenharmony_ci	AF_CMOV = (1 << 26),
105bf215546Sopenharmony_ci
106bf215546Sopenharmony_ci	// for SETcc, PREDSETcc, ... - type of comparison
107bf215546Sopenharmony_ci	AF_CMP_TYPE_MASK = (3 << 27),
108bf215546Sopenharmony_ci	AF_FLOAT_CMP = 0,
109bf215546Sopenharmony_ci	AF_INT_CMP = (1 << 27),
110bf215546Sopenharmony_ci	AF_UINT_CMP = (3 << 27),
111bf215546Sopenharmony_ci
112bf215546Sopenharmony_ci	/* condition codes - 3 bits */
113bf215546Sopenharmony_ci	AF_CC_SHIFT = 29,
114bf215546Sopenharmony_ci
115bf215546Sopenharmony_ci	AF_CC_MASK	= (7U << AF_CC_SHIFT),
116bf215546Sopenharmony_ci	AF_CC_E		= (0U << AF_CC_SHIFT),
117bf215546Sopenharmony_ci	AF_CC_GT	= (1U << AF_CC_SHIFT),
118bf215546Sopenharmony_ci	AF_CC_GE	= (2U << AF_CC_SHIFT),
119bf215546Sopenharmony_ci	AF_CC_NE	= (3U << AF_CC_SHIFT),
120bf215546Sopenharmony_ci	AF_CC_LT	= (4U << AF_CC_SHIFT),
121bf215546Sopenharmony_ci	AF_CC_LE	= (5U << AF_CC_SHIFT),
122bf215546Sopenharmony_ci};
123bf215546Sopenharmony_ci
124bf215546Sopenharmony_ci/* flags for FETCH instructions (TEX/VTX/GDS) */
125bf215546Sopenharmony_cienum fetch_op_flags
126bf215546Sopenharmony_ci{
127bf215546Sopenharmony_ci	FF_GDS		= (1<<0),
128bf215546Sopenharmony_ci	FF_TEX		= (1<<1),
129bf215546Sopenharmony_ci
130bf215546Sopenharmony_ci	FF_SETGRAD	= (1<<2),
131bf215546Sopenharmony_ci	FF_GETGRAD	= (1<<3),
132bf215546Sopenharmony_ci	FF_USEGRAD	= (1<<4),
133bf215546Sopenharmony_ci
134bf215546Sopenharmony_ci	FF_VTX		= (1<<5),
135bf215546Sopenharmony_ci	FF_MEM		= (1<<6),
136bf215546Sopenharmony_ci
137bf215546Sopenharmony_ci	FF_SET_TEXTURE_OFFSETS = (1<<7),
138bf215546Sopenharmony_ci	FF_USE_TEXTURE_OFFSETS = (1<<8),
139bf215546Sopenharmony_ci};
140bf215546Sopenharmony_ci
141bf215546Sopenharmony_ci/* flags for CF instructions */
142bf215546Sopenharmony_cienum cf_op_flags
143bf215546Sopenharmony_ci{
144bf215546Sopenharmony_ci	CF_CLAUSE	= (1<<0), 	/* execute clause (alu/fetch ...) */
145bf215546Sopenharmony_ci	CF_ACK		= (1<<1),	/* acked versions of some instructions */
146bf215546Sopenharmony_ci	CF_ALU		= (1<<2),	/* alu clause execution */
147bf215546Sopenharmony_ci	CF_ALU_EXT	= (1<<3),	/* ALU_EXTENDED */
148bf215546Sopenharmony_ci	CF_EXP		= (1<<4),	/* export (CF_ALLOC_EXPORT_WORD1_SWIZ) */
149bf215546Sopenharmony_ci	CF_BRANCH	= (1<<5),   /* branch instructions */
150bf215546Sopenharmony_ci	CF_LOOP		= (1<<6),   /* loop instructions */
151bf215546Sopenharmony_ci	CF_CALL		= (1<<7),   /* call instructions */
152bf215546Sopenharmony_ci	CF_MEM		= (1<<8),	/* export_mem (CF_ALLOC_EXPORT_WORD1_BUF) */
153bf215546Sopenharmony_ci	CF_FETCH	= (1<<9),	/* fetch clause */
154bf215546Sopenharmony_ci
155bf215546Sopenharmony_ci	CF_UNCOND	= (1<<10),	/* COND = ACTIVE required */
156bf215546Sopenharmony_ci	CF_EMIT		= (1<<11),
157bf215546Sopenharmony_ci	CF_STRM		= (1<<12),	/* MEM_STREAM* */
158bf215546Sopenharmony_ci
159bf215546Sopenharmony_ci	CF_RAT		= (1<<13),  /* MEM_RAT* */
160bf215546Sopenharmony_ci
161bf215546Sopenharmony_ci	CF_LOOP_START = (1<<14)
162bf215546Sopenharmony_ci};
163bf215546Sopenharmony_ci
164bf215546Sopenharmony_ci/* ALU instruction info */
165bf215546Sopenharmony_cistruct alu_op_info
166bf215546Sopenharmony_ci{
167bf215546Sopenharmony_ci	/* instruction name */
168bf215546Sopenharmony_ci	const char	*name;
169bf215546Sopenharmony_ci	/* number of source operands */
170bf215546Sopenharmony_ci	int	src_count;
171bf215546Sopenharmony_ci	/* opcodes, [0] - for r6xx/r7xx, [1] - for evergreen/cayman
172bf215546Sopenharmony_ci	 * (-1) if instruction doesn't exist (more precise info in "slots") */
173bf215546Sopenharmony_ci	int opcode[2];
174bf215546Sopenharmony_ci	/* slots for r6xx, r7xx, evergreen, cayman
175bf215546Sopenharmony_ci	 * (0 if instruction doesn't exist for gfx level) */
176bf215546Sopenharmony_ci	int	slots[4];
177bf215546Sopenharmony_ci	/* flags (mostly autogenerated from instruction name) */
178bf215546Sopenharmony_ci	unsigned int flags;
179bf215546Sopenharmony_ci};
180bf215546Sopenharmony_ci
181bf215546Sopenharmony_ci/* FETCH instruction info */
182bf215546Sopenharmony_cistruct fetch_op_info
183bf215546Sopenharmony_ci{
184bf215546Sopenharmony_ci	const char * name;
185bf215546Sopenharmony_ci	/* for every gfx level */
186bf215546Sopenharmony_ci	int opcode[4];
187bf215546Sopenharmony_ci	int flags;
188bf215546Sopenharmony_ci};
189bf215546Sopenharmony_ci
190bf215546Sopenharmony_ci/* CF instruction info */
191bf215546Sopenharmony_cistruct cf_op_info
192bf215546Sopenharmony_ci{
193bf215546Sopenharmony_ci	const char * name;
194bf215546Sopenharmony_ci	/* for every gfx level */
195bf215546Sopenharmony_ci	int opcode[4];
196bf215546Sopenharmony_ci	int flags;
197bf215546Sopenharmony_ci};
198bf215546Sopenharmony_ci
199bf215546Sopenharmony_ci
200bf215546Sopenharmony_ci#define ALU_OP2_ADD                             0
201bf215546Sopenharmony_ci#define ALU_OP2_MUL                             1
202bf215546Sopenharmony_ci#define ALU_OP2_MUL_IEEE                        2
203bf215546Sopenharmony_ci#define ALU_OP2_MAX                             3
204bf215546Sopenharmony_ci#define ALU_OP2_MIN                             4
205bf215546Sopenharmony_ci#define ALU_OP2_MAX_DX10                        5
206bf215546Sopenharmony_ci#define ALU_OP2_MIN_DX10                        6
207bf215546Sopenharmony_ci#define ALU_OP2_SETE                            7
208bf215546Sopenharmony_ci#define ALU_OP2_SETGT                           8
209bf215546Sopenharmony_ci#define ALU_OP2_SETGE                           9
210bf215546Sopenharmony_ci#define ALU_OP2_SETNE                          10
211bf215546Sopenharmony_ci#define ALU_OP2_SETE_DX10                      11
212bf215546Sopenharmony_ci#define ALU_OP2_SETGT_DX10                     12
213bf215546Sopenharmony_ci#define ALU_OP2_SETGE_DX10                     13
214bf215546Sopenharmony_ci#define ALU_OP2_SETNE_DX10                     14
215bf215546Sopenharmony_ci#define ALU_OP1_FRACT                          15
216bf215546Sopenharmony_ci#define ALU_OP1_TRUNC                          16
217bf215546Sopenharmony_ci#define ALU_OP1_CEIL                           17
218bf215546Sopenharmony_ci#define ALU_OP1_RNDNE                          18
219bf215546Sopenharmony_ci#define ALU_OP1_FLOOR                          19
220bf215546Sopenharmony_ci#define ALU_OP2_ASHR_INT                       20
221bf215546Sopenharmony_ci#define ALU_OP2_LSHR_INT                       21
222bf215546Sopenharmony_ci#define ALU_OP2_LSHL_INT                       22
223bf215546Sopenharmony_ci#define ALU_OP1_MOV                            23
224bf215546Sopenharmony_ci#define ALU_OP0_NOP                            24
225bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGT_UINT                25
226bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGE_UINT                26
227bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETE                      27
228bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGT                     28
229bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGE                     29
230bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETNE                     30
231bf215546Sopenharmony_ci#define ALU_OP1_PRED_SET_INV                   31
232bf215546Sopenharmony_ci#define ALU_OP2_PRED_SET_POP                   32
233bf215546Sopenharmony_ci#define ALU_OP0_PRED_SET_CLR                   33
234bf215546Sopenharmony_ci#define ALU_OP1_PRED_SET_RESTORE               34
235bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETE_PUSH                 35
236bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGT_PUSH                36
237bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGE_PUSH                37
238bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETNE_PUSH                38
239bf215546Sopenharmony_ci#define ALU_OP2_KILLE                          39
240bf215546Sopenharmony_ci#define ALU_OP2_KILLGT                         40
241bf215546Sopenharmony_ci#define ALU_OP2_KILLGE                         41
242bf215546Sopenharmony_ci#define ALU_OP2_KILLNE                         42
243bf215546Sopenharmony_ci#define ALU_OP2_AND_INT                        43
244bf215546Sopenharmony_ci#define ALU_OP2_OR_INT                         44
245bf215546Sopenharmony_ci#define ALU_OP2_XOR_INT                        45
246bf215546Sopenharmony_ci#define ALU_OP1_NOT_INT                        46
247bf215546Sopenharmony_ci#define ALU_OP2_ADD_INT                        47
248bf215546Sopenharmony_ci#define ALU_OP2_SUB_INT                        48
249bf215546Sopenharmony_ci#define ALU_OP2_MAX_INT                        49
250bf215546Sopenharmony_ci#define ALU_OP2_MIN_INT                        50
251bf215546Sopenharmony_ci#define ALU_OP2_MAX_UINT                       51
252bf215546Sopenharmony_ci#define ALU_OP2_MIN_UINT                       52
253bf215546Sopenharmony_ci#define ALU_OP2_SETE_INT                       53
254bf215546Sopenharmony_ci#define ALU_OP2_SETGT_INT                      54
255bf215546Sopenharmony_ci#define ALU_OP2_SETGE_INT                      55
256bf215546Sopenharmony_ci#define ALU_OP2_SETNE_INT                      56
257bf215546Sopenharmony_ci#define ALU_OP2_SETGT_UINT                     57
258bf215546Sopenharmony_ci#define ALU_OP2_SETGE_UINT                     58
259bf215546Sopenharmony_ci#define ALU_OP2_KILLGT_UINT                    59
260bf215546Sopenharmony_ci#define ALU_OP2_KILLGE_UINT                    60
261bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETE_INT                  61
262bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGT_INT                 62
263bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGE_INT                 63
264bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETNE_INT                 64
265bf215546Sopenharmony_ci#define ALU_OP2_KILLE_INT                      65
266bf215546Sopenharmony_ci#define ALU_OP2_KILLGT_INT                     66
267bf215546Sopenharmony_ci#define ALU_OP2_KILLGE_INT                     67
268bf215546Sopenharmony_ci#define ALU_OP2_KILLNE_INT                     68
269bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETE_PUSH_INT             69
270bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGT_PUSH_INT            70
271bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGE_PUSH_INT            71
272bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETNE_PUSH_INT            72
273bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETLT_PUSH_INT            73
274bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETLE_PUSH_INT            74
275bf215546Sopenharmony_ci#define ALU_OP1_FLT_TO_INT                     75
276bf215546Sopenharmony_ci#define ALU_OP1_BFREV_INT                      76
277bf215546Sopenharmony_ci#define ALU_OP2_ADDC_UINT                      77
278bf215546Sopenharmony_ci#define ALU_OP2_SUBB_UINT                      78
279bf215546Sopenharmony_ci#define ALU_OP0_GROUP_BARRIER                  79
280bf215546Sopenharmony_ci#define ALU_OP0_GROUP_SEQ_BEGIN                80
281bf215546Sopenharmony_ci#define ALU_OP0_GROUP_SEQ_END                  81
282bf215546Sopenharmony_ci#define ALU_OP2_SET_MODE                       82
283bf215546Sopenharmony_ci#define ALU_OP0_SET_CF_IDX0                    83
284bf215546Sopenharmony_ci#define ALU_OP0_SET_CF_IDX1                    84
285bf215546Sopenharmony_ci#define ALU_OP2_SET_LDS_SIZE                   85
286bf215546Sopenharmony_ci#define ALU_OP2_MUL_INT24                      86
287bf215546Sopenharmony_ci#define ALU_OP2_MULHI_INT24                    87
288bf215546Sopenharmony_ci#define ALU_OP1_FLT_TO_INT_TRUNC               88
289bf215546Sopenharmony_ci#define ALU_OP1_EXP_IEEE                       89
290bf215546Sopenharmony_ci#define ALU_OP1_LOG_CLAMPED                    90
291bf215546Sopenharmony_ci#define ALU_OP1_LOG_IEEE                       91
292bf215546Sopenharmony_ci#define ALU_OP1_RECIP_CLAMPED                  92
293bf215546Sopenharmony_ci#define ALU_OP1_RECIP_FF                       93
294bf215546Sopenharmony_ci#define ALU_OP1_RECIP_IEEE                     94
295bf215546Sopenharmony_ci#define ALU_OP1_RECIPSQRT_CLAMPED              95
296bf215546Sopenharmony_ci#define ALU_OP1_RECIPSQRT_FF                   96
297bf215546Sopenharmony_ci#define ALU_OP1_RECIPSQRT_IEEE                 97
298bf215546Sopenharmony_ci#define ALU_OP1_SQRT_IEEE                      98
299bf215546Sopenharmony_ci#define ALU_OP1_SIN                            99
300bf215546Sopenharmony_ci#define ALU_OP1_COS                           100
301bf215546Sopenharmony_ci#define ALU_OP2_MULLO_INT                     101
302bf215546Sopenharmony_ci#define ALU_OP2_MULHI_INT                     102
303bf215546Sopenharmony_ci#define ALU_OP2_MULLO_UINT                    103
304bf215546Sopenharmony_ci#define ALU_OP2_MULHI_UINT                    104
305bf215546Sopenharmony_ci#define ALU_OP1_RECIP_INT                     105
306bf215546Sopenharmony_ci#define ALU_OP1_RECIP_UINT                    106
307bf215546Sopenharmony_ci#define ALU_OP2_RECIP_64                      107
308bf215546Sopenharmony_ci#define ALU_OP2_RECIP_CLAMPED_64              108
309bf215546Sopenharmony_ci#define ALU_OP2_RECIPSQRT_64                  109
310bf215546Sopenharmony_ci#define ALU_OP2_RECIPSQRT_CLAMPED_64          110
311bf215546Sopenharmony_ci#define ALU_OP2_SQRT_64                       111
312bf215546Sopenharmony_ci#define ALU_OP1_FLT_TO_UINT                   112
313bf215546Sopenharmony_ci#define ALU_OP1_INT_TO_FLT                    113
314bf215546Sopenharmony_ci#define ALU_OP1_UINT_TO_FLT                   114
315bf215546Sopenharmony_ci#define ALU_OP2_BFM_INT                       115
316bf215546Sopenharmony_ci#define ALU_OP1_FLT32_TO_FLT16                116
317bf215546Sopenharmony_ci#define ALU_OP1_FLT16_TO_FLT32                117
318bf215546Sopenharmony_ci#define ALU_OP1_UBYTE0_FLT                    118
319bf215546Sopenharmony_ci#define ALU_OP1_UBYTE1_FLT                    119
320bf215546Sopenharmony_ci#define ALU_OP1_UBYTE2_FLT                    120
321bf215546Sopenharmony_ci#define ALU_OP1_UBYTE3_FLT                    121
322bf215546Sopenharmony_ci#define ALU_OP1_BCNT_INT                      122
323bf215546Sopenharmony_ci#define ALU_OP1_FFBH_UINT                     123
324bf215546Sopenharmony_ci#define ALU_OP1_FFBL_INT                      124
325bf215546Sopenharmony_ci#define ALU_OP1_FFBH_INT                      125
326bf215546Sopenharmony_ci#define ALU_OP1_FLT_TO_UINT4                  126
327bf215546Sopenharmony_ci#define ALU_OP2_DOT_IEEE                      127
328bf215546Sopenharmony_ci#define ALU_OP1_FLT_TO_INT_RPI                128
329bf215546Sopenharmony_ci#define ALU_OP1_FLT_TO_INT_FLOOR              129
330bf215546Sopenharmony_ci#define ALU_OP2_MULHI_UINT24                  130
331bf215546Sopenharmony_ci#define ALU_OP1_MBCNT_32HI_INT                131
332bf215546Sopenharmony_ci#define ALU_OP1_OFFSET_TO_FLT                 132
333bf215546Sopenharmony_ci#define ALU_OP2_MUL_UINT24                    133
334bf215546Sopenharmony_ci#define ALU_OP1_BCNT_ACCUM_PREV_INT           134
335bf215546Sopenharmony_ci#define ALU_OP1_MBCNT_32LO_ACCUM_PREV_INT     135
336bf215546Sopenharmony_ci#define ALU_OP2_SETE_64                       136
337bf215546Sopenharmony_ci#define ALU_OP2_SETNE_64                      137
338bf215546Sopenharmony_ci#define ALU_OP2_SETGT_64                      138
339bf215546Sopenharmony_ci#define ALU_OP2_SETGE_64                      139
340bf215546Sopenharmony_ci#define ALU_OP2_MIN_64                        140
341bf215546Sopenharmony_ci#define ALU_OP2_MAX_64                        141
342bf215546Sopenharmony_ci#define ALU_OP2_DOT4                          142
343bf215546Sopenharmony_ci#define ALU_OP2_DOT4_IEEE                     143
344bf215546Sopenharmony_ci#define ALU_OP2_CUBE                          144
345bf215546Sopenharmony_ci#define ALU_OP1_MAX4                          145
346bf215546Sopenharmony_ci#define ALU_OP1_FREXP_64                      146
347bf215546Sopenharmony_ci#define ALU_OP2_LDEXP_64                      147
348bf215546Sopenharmony_ci#define ALU_OP1_FRACT_64                      148
349bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGT_64                 149
350bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETE_64                  150
351bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGE_64                 151
352bf215546Sopenharmony_ci#define ALU_OP2_MUL_64                        152
353bf215546Sopenharmony_ci#define ALU_OP2_ADD_64                        153
354bf215546Sopenharmony_ci#define ALU_OP1_MOVA_INT                      154
355bf215546Sopenharmony_ci#define ALU_OP1_FLT64_TO_FLT32                155
356bf215546Sopenharmony_ci#define ALU_OP1_FLT32_TO_FLT64                156
357bf215546Sopenharmony_ci#define ALU_OP2_SAD_ACCUM_PREV_UINT           157
358bf215546Sopenharmony_ci#define ALU_OP2_DOT                           158
359bf215546Sopenharmony_ci#define ALU_OP1_MUL_PREV                      159
360bf215546Sopenharmony_ci#define ALU_OP1_MUL_IEEE_PREV                 160
361bf215546Sopenharmony_ci#define ALU_OP1_ADD_PREV                      161
362bf215546Sopenharmony_ci#define ALU_OP2_MULADD_PREV                   162
363bf215546Sopenharmony_ci#define ALU_OP2_MULADD_IEEE_PREV              163
364bf215546Sopenharmony_ci#define ALU_OP2_INTERP_XY                     164
365bf215546Sopenharmony_ci#define ALU_OP2_INTERP_ZW                     165
366bf215546Sopenharmony_ci#define ALU_OP2_INTERP_X                      166
367bf215546Sopenharmony_ci#define ALU_OP2_INTERP_Z                      167
368bf215546Sopenharmony_ci#define ALU_OP1_STORE_FLAGS                   168
369bf215546Sopenharmony_ci#define ALU_OP1_LOAD_STORE_FLAGS              169
370bf215546Sopenharmony_ci#define ALU_OP2_LDS_1A                        170
371bf215546Sopenharmony_ci#define ALU_OP2_LDS_1A1D                      171
372bf215546Sopenharmony_ci#define ALU_OP2_LDS_2A                        172
373bf215546Sopenharmony_ci#define ALU_OP1_INTERP_LOAD_P0                173
374bf215546Sopenharmony_ci#define ALU_OP1_INTERP_LOAD_P10               174
375bf215546Sopenharmony_ci#define ALU_OP1_INTERP_LOAD_P20               175
376bf215546Sopenharmony_ci#define ALU_OP3_BFE_UINT                      176
377bf215546Sopenharmony_ci#define ALU_OP3_BFE_INT                       177
378bf215546Sopenharmony_ci#define ALU_OP3_BFI_INT                       178
379bf215546Sopenharmony_ci#define ALU_OP3_FMA                           179
380bf215546Sopenharmony_ci#define ALU_OP3_MULADD_INT24                  180
381bf215546Sopenharmony_ci#define ALU_OP3_CNDNE_64                      181
382bf215546Sopenharmony_ci#define ALU_OP3_FMA_64                        182
383bf215546Sopenharmony_ci#define ALU_OP3_LERP_UINT                     183
384bf215546Sopenharmony_ci#define ALU_OP3_BIT_ALIGN_INT                 184
385bf215546Sopenharmony_ci#define ALU_OP3_BYTE_ALIGN_INT                185
386bf215546Sopenharmony_ci#define ALU_OP3_SAD_ACCUM_UINT                186
387bf215546Sopenharmony_ci#define ALU_OP3_SAD_ACCUM_HI_UINT             187
388bf215546Sopenharmony_ci#define ALU_OP3_MULADD_UINT24                 188
389bf215546Sopenharmony_ci#define ALU_OP3_LDS_IDX_OP                    189
390bf215546Sopenharmony_ci#define ALU_OP3_MULADD                        190
391bf215546Sopenharmony_ci#define ALU_OP3_MULADD_M2                     191
392bf215546Sopenharmony_ci#define ALU_OP3_MULADD_M4                     192
393bf215546Sopenharmony_ci#define ALU_OP3_MULADD_D2                     193
394bf215546Sopenharmony_ci#define ALU_OP3_MULADD_IEEE                   194
395bf215546Sopenharmony_ci#define ALU_OP3_CNDE                          195
396bf215546Sopenharmony_ci#define ALU_OP3_CNDGT                         196
397bf215546Sopenharmony_ci#define ALU_OP3_CNDGE                         197
398bf215546Sopenharmony_ci#define ALU_OP3_CNDE_INT                      198
399bf215546Sopenharmony_ci#define ALU_OP3_CNDGT_INT                     199
400bf215546Sopenharmony_ci#define ALU_OP3_CNDGE_INT                     200
401bf215546Sopenharmony_ci#define ALU_OP3_MUL_LIT                       201
402bf215546Sopenharmony_ci#define ALU_OP1_MOVA                          202
403bf215546Sopenharmony_ci#define ALU_OP1_MOVA_FLOOR                    203
404bf215546Sopenharmony_ci#define ALU_OP1_MOVA_GPR_INT                  204
405bf215546Sopenharmony_ci#define ALU_OP3_MULADD_64                     205
406bf215546Sopenharmony_ci#define ALU_OP3_MULADD_64_M2                  206
407bf215546Sopenharmony_ci#define ALU_OP3_MULADD_64_M4                  207
408bf215546Sopenharmony_ci#define ALU_OP3_MULADD_64_D2                  208
409bf215546Sopenharmony_ci#define ALU_OP3_MUL_LIT_M2                    209
410bf215546Sopenharmony_ci#define ALU_OP3_MUL_LIT_M4                    210
411bf215546Sopenharmony_ci#define ALU_OP3_MUL_LIT_D2                    211
412bf215546Sopenharmony_ci#define ALU_OP3_MULADD_IEEE_M2                212
413bf215546Sopenharmony_ci#define ALU_OP3_MULADD_IEEE_M4                213
414bf215546Sopenharmony_ci#define ALU_OP3_MULADD_IEEE_D2                214
415bf215546Sopenharmony_ci
416bf215546Sopenharmony_ci#define LDS_OP2_LDS_ADD                       215
417bf215546Sopenharmony_ci#define LDS_OP2_LDS_SUB                       216
418bf215546Sopenharmony_ci#define LDS_OP2_LDS_RSUB                      217
419bf215546Sopenharmony_ci#define LDS_OP2_LDS_INC                       218
420bf215546Sopenharmony_ci#define LDS_OP2_LDS_DEC                       219
421bf215546Sopenharmony_ci#define LDS_OP2_LDS_MIN_INT                   220
422bf215546Sopenharmony_ci#define LDS_OP2_LDS_MAX_INT                   221
423bf215546Sopenharmony_ci#define LDS_OP2_LDS_MIN_UINT                  222
424bf215546Sopenharmony_ci#define LDS_OP2_LDS_MAX_UINT                  223
425bf215546Sopenharmony_ci#define LDS_OP2_LDS_AND                       224
426bf215546Sopenharmony_ci#define LDS_OP2_LDS_OR                        225
427bf215546Sopenharmony_ci#define LDS_OP2_LDS_XOR                       226
428bf215546Sopenharmony_ci#define LDS_OP3_LDS_MSKOR                     227
429bf215546Sopenharmony_ci#define LDS_OP2_LDS_WRITE                     228
430bf215546Sopenharmony_ci#define LDS_OP3_LDS_WRITE_REL                 229
431bf215546Sopenharmony_ci#define LDS_OP3_LDS_WRITE2                    230
432bf215546Sopenharmony_ci#define LDS_OP3_LDS_CMP_STORE                 231
433bf215546Sopenharmony_ci#define LDS_OP3_LDS_CMP_STORE_SPF             232
434bf215546Sopenharmony_ci#define LDS_OP2_LDS_BYTE_WRITE                233
435bf215546Sopenharmony_ci#define LDS_OP2_LDS_SHORT_WRITE               234
436bf215546Sopenharmony_ci#define LDS_OP2_LDS_ADD_RET                   235
437bf215546Sopenharmony_ci#define LDS_OP2_LDS_SUB_RET                   236
438bf215546Sopenharmony_ci#define LDS_OP2_LDS_RSUB_RET                  237
439bf215546Sopenharmony_ci#define LDS_OP2_LDS_INC_RET                   238
440bf215546Sopenharmony_ci#define LDS_OP2_LDS_DEC_RET                   239
441bf215546Sopenharmony_ci#define LDS_OP2_LDS_MIN_INT_RET               240
442bf215546Sopenharmony_ci#define LDS_OP2_LDS_MAX_INT_RET               241
443bf215546Sopenharmony_ci#define LDS_OP2_LDS_MIN_UINT_RET              242
444bf215546Sopenharmony_ci#define LDS_OP2_LDS_MAX_UINT_RET              243
445bf215546Sopenharmony_ci#define LDS_OP2_LDS_AND_RET                   244
446bf215546Sopenharmony_ci#define LDS_OP2_LDS_OR_RET                    245
447bf215546Sopenharmony_ci#define LDS_OP2_LDS_XOR_RET                   246
448bf215546Sopenharmony_ci#define LDS_OP3_LDS_MSKOR_RET                 247
449bf215546Sopenharmony_ci#define LDS_OP2_LDS_XCHG_RET                  248
450bf215546Sopenharmony_ci#define LDS_OP3_LDS_XCHG_REL_RET              249
451bf215546Sopenharmony_ci#define LDS_OP3_LDS_XCHG2_RET                 250
452bf215546Sopenharmony_ci#define LDS_OP3_LDS_CMP_XCHG_RET              251
453bf215546Sopenharmony_ci#define LDS_OP3_LDS_CMP_XCHG_SPF_RET          252
454bf215546Sopenharmony_ci#define LDS_OP1_LDS_READ_RET                  253
455bf215546Sopenharmony_ci#define LDS_OP1_LDS_READ_REL_RET              254
456bf215546Sopenharmony_ci#define LDS_OP2_LDS_READ2_RET                 255
457bf215546Sopenharmony_ci#define LDS_OP3_LDS_READWRITE_RET             256
458bf215546Sopenharmony_ci#define LDS_OP1_LDS_BYTE_READ_RET             257
459bf215546Sopenharmony_ci#define LDS_OP1_LDS_UBYTE_READ_RET            258
460bf215546Sopenharmony_ci#define LDS_OP1_LDS_SHORT_READ_RET            259
461bf215546Sopenharmony_ci#define LDS_OP1_LDS_USHORT_READ_RET           260
462bf215546Sopenharmony_ci
463bf215546Sopenharmony_ci#define FETCH_OP_VFETCH                           0
464bf215546Sopenharmony_ci#define FETCH_OP_SEMFETCH                         1
465bf215546Sopenharmony_ci#define FETCH_OP_READ_SCRATCH                     2
466bf215546Sopenharmony_ci#define FETCH_OP_READ_REDUCT                      3
467bf215546Sopenharmony_ci#define FETCH_OP_READ_MEM                         4
468bf215546Sopenharmony_ci#define FETCH_OP_DS_LOCAL_WRITE                   5
469bf215546Sopenharmony_ci#define FETCH_OP_DS_LOCAL_READ                    6
470bf215546Sopenharmony_ci#define FETCH_OP_GDS_ADD                          7
471bf215546Sopenharmony_ci#define FETCH_OP_GDS_SUB                          8
472bf215546Sopenharmony_ci#define FETCH_OP_GDS_RSUB                         9
473bf215546Sopenharmony_ci#define FETCH_OP_GDS_INC                         10
474bf215546Sopenharmony_ci#define FETCH_OP_GDS_DEC                         11
475bf215546Sopenharmony_ci#define FETCH_OP_GDS_MIN_INT                     12
476bf215546Sopenharmony_ci#define FETCH_OP_GDS_MAX_INT                     13
477bf215546Sopenharmony_ci#define FETCH_OP_GDS_MIN_UINT                    14
478bf215546Sopenharmony_ci#define FETCH_OP_GDS_MAX_UINT                    15
479bf215546Sopenharmony_ci#define FETCH_OP_GDS_AND                         16
480bf215546Sopenharmony_ci#define FETCH_OP_GDS_OR                          17
481bf215546Sopenharmony_ci#define FETCH_OP_GDS_XOR                         18
482bf215546Sopenharmony_ci#define FETCH_OP_GDS_MSKOR                       19
483bf215546Sopenharmony_ci#define FETCH_OP_GDS_WRITE                       20
484bf215546Sopenharmony_ci#define FETCH_OP_GDS_WRITE_REL                   21
485bf215546Sopenharmony_ci#define FETCH_OP_GDS_WRITE2                      22
486bf215546Sopenharmony_ci#define FETCH_OP_GDS_CMP_STORE                   23
487bf215546Sopenharmony_ci#define FETCH_OP_GDS_CMP_STORE_SPF               24
488bf215546Sopenharmony_ci#define FETCH_OP_GDS_BYTE_WRITE                  25
489bf215546Sopenharmony_ci#define FETCH_OP_GDS_SHORT_WRITE                 26
490bf215546Sopenharmony_ci#define FETCH_OP_GDS_ADD_RET                     27
491bf215546Sopenharmony_ci#define FETCH_OP_GDS_SUB_RET                     28
492bf215546Sopenharmony_ci#define FETCH_OP_GDS_RSUB_RET                    29
493bf215546Sopenharmony_ci#define FETCH_OP_GDS_INC_RET                     30
494bf215546Sopenharmony_ci#define FETCH_OP_GDS_DEC_RET                     31
495bf215546Sopenharmony_ci#define FETCH_OP_GDS_MIN_INT_RET                 32
496bf215546Sopenharmony_ci#define FETCH_OP_GDS_MAX_INT_RET                 33
497bf215546Sopenharmony_ci#define FETCH_OP_GDS_MIN_UINT_RET                34
498bf215546Sopenharmony_ci#define FETCH_OP_GDS_MAX_UINT_RET                35
499bf215546Sopenharmony_ci#define FETCH_OP_GDS_AND_RET                     36
500bf215546Sopenharmony_ci#define FETCH_OP_GDS_OR_RET                      37
501bf215546Sopenharmony_ci#define FETCH_OP_GDS_XOR_RET                     38
502bf215546Sopenharmony_ci#define FETCH_OP_GDS_MSKOR_RET                   39
503bf215546Sopenharmony_ci#define FETCH_OP_GDS_XCHG_RET                    40
504bf215546Sopenharmony_ci#define FETCH_OP_GDS_XCHG_REL_RET                41
505bf215546Sopenharmony_ci#define FETCH_OP_GDS_XCHG2_RET                   42
506bf215546Sopenharmony_ci#define FETCH_OP_GDS_CMP_XCHG_RET                43
507bf215546Sopenharmony_ci#define FETCH_OP_GDS_CMP_XCHG_SPF_RET            44
508bf215546Sopenharmony_ci#define FETCH_OP_GDS_READ_RET                    45
509bf215546Sopenharmony_ci#define FETCH_OP_GDS_READ_REL_RET                46
510bf215546Sopenharmony_ci#define FETCH_OP_GDS_READ2_RET                   47
511bf215546Sopenharmony_ci#define FETCH_OP_GDS_READWRITE_RET               48
512bf215546Sopenharmony_ci#define FETCH_OP_GDS_BYTE_READ_RET               49
513bf215546Sopenharmony_ci#define FETCH_OP_GDS_UBYTE_READ_RET              50
514bf215546Sopenharmony_ci#define FETCH_OP_GDS_SHORT_READ_RET              51
515bf215546Sopenharmony_ci#define FETCH_OP_GDS_USHORT_READ_RET             52
516bf215546Sopenharmony_ci#define FETCH_OP_GDS_ATOMIC_ORDERED_ALLOC        53
517bf215546Sopenharmony_ci#define FETCH_OP_TF_WRITE                        54
518bf215546Sopenharmony_ci#define FETCH_OP_DS_GLOBAL_WRITE                 55
519bf215546Sopenharmony_ci#define FETCH_OP_DS_GLOBAL_READ                  56
520bf215546Sopenharmony_ci#define FETCH_OP_LD                              57
521bf215546Sopenharmony_ci#define FETCH_OP_LDFPTR                          58
522bf215546Sopenharmony_ci#define FETCH_OP_GET_TEXTURE_RESINFO             59
523bf215546Sopenharmony_ci#define FETCH_OP_GET_NUMBER_OF_SAMPLES           60
524bf215546Sopenharmony_ci#define FETCH_OP_GET_LOD                         61
525bf215546Sopenharmony_ci#define FETCH_OP_GET_GRADIENTS_H                 62
526bf215546Sopenharmony_ci#define FETCH_OP_GET_GRADIENTS_V                 63
527bf215546Sopenharmony_ci#define FETCH_OP_GET_GRADIENTS_H_FINE            64
528bf215546Sopenharmony_ci#define FETCH_OP_GET_GRADIENTS_V_FINE            65
529bf215546Sopenharmony_ci#define FETCH_OP_GET_LERP                        66
530bf215546Sopenharmony_ci#define FETCH_OP_SET_TEXTURE_OFFSETS             67
531bf215546Sopenharmony_ci#define FETCH_OP_KEEP_GRADIENTS                  68
532bf215546Sopenharmony_ci#define FETCH_OP_SET_GRADIENTS_H                 69
533bf215546Sopenharmony_ci#define FETCH_OP_SET_GRADIENTS_V                 70
534bf215546Sopenharmony_ci#define FETCH_OP_SET_GRADIENTS_H_COARSE          71
535bf215546Sopenharmony_ci#define FETCH_OP_SET_GRADIENTS_V_COARSE          72
536bf215546Sopenharmony_ci#define FETCH_OP_SET_GRADIENTS_H_PACKED_FINE     73
537bf215546Sopenharmony_ci#define FETCH_OP_SET_GRADIENTS_V_PACKED_FINE     74
538bf215546Sopenharmony_ci#define FETCH_OP_SET_GRADIENTS_H_PACKED_COARSE   75
539bf215546Sopenharmony_ci#define FETCH_OP_SET_GRADIENTS_V_PACKED_COARSE   76
540bf215546Sopenharmony_ci#define FETCH_OP_PASS                            77
541bf215546Sopenharmony_ci#define FETCH_OP_PASS1                           78
542bf215546Sopenharmony_ci#define FETCH_OP_PASS2                           79
543bf215546Sopenharmony_ci#define FETCH_OP_PASS3                           80
544bf215546Sopenharmony_ci#define FETCH_OP_SET_CUBEMAP_INDEX               81
545bf215546Sopenharmony_ci#define FETCH_OP_GET_BUFFER_RESINFO              82
546bf215546Sopenharmony_ci#define FETCH_OP_FETCH4                          83
547bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE                          84
548bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_L                        85
549bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_LB                       86
550bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_LZ                       87
551bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_G                        88
552bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_G_L                      89
553bf215546Sopenharmony_ci#define FETCH_OP_GATHER4                         90
554bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_G_LB                     91
555bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_G_LZ                     92
556bf215546Sopenharmony_ci#define FETCH_OP_GATHER4_O                       93
557bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_C                        94
558bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_C_L                      95
559bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_C_LB                     96
560bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_C_LZ                     97
561bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_C_G                      98
562bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_C_G_L                    99
563bf215546Sopenharmony_ci#define FETCH_OP_GATHER4_C                      100
564bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_C_G_LB                  101
565bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_C_G_LZ                  102
566bf215546Sopenharmony_ci#define FETCH_OP_GATHER4_C_O                    103
567bf215546Sopenharmony_ci
568bf215546Sopenharmony_ci#define CF_OP_NOP                           0
569bf215546Sopenharmony_ci#define CF_OP_TEX                           1
570bf215546Sopenharmony_ci#define CF_OP_VTX                           2
571bf215546Sopenharmony_ci#define CF_OP_VTX_TC                        3
572bf215546Sopenharmony_ci#define CF_OP_GDS                           4
573bf215546Sopenharmony_ci#define CF_OP_LOOP_START                    5
574bf215546Sopenharmony_ci#define CF_OP_LOOP_END                      6
575bf215546Sopenharmony_ci#define CF_OP_LOOP_START_DX10               7
576bf215546Sopenharmony_ci#define CF_OP_LOOP_START_NO_AL              8
577bf215546Sopenharmony_ci#define CF_OP_LOOP_CONTINUE                 9
578bf215546Sopenharmony_ci#define CF_OP_LOOP_BREAK                   10
579bf215546Sopenharmony_ci#define CF_OP_JUMP                         11
580bf215546Sopenharmony_ci#define CF_OP_PUSH                         12
581bf215546Sopenharmony_ci#define CF_OP_PUSH_ELSE                    13
582bf215546Sopenharmony_ci#define CF_OP_ELSE                         14
583bf215546Sopenharmony_ci#define CF_OP_POP                          15
584bf215546Sopenharmony_ci#define CF_OP_POP_JUMP                     16
585bf215546Sopenharmony_ci#define CF_OP_POP_PUSH                     17
586bf215546Sopenharmony_ci#define CF_OP_POP_PUSH_ELSE                18
587bf215546Sopenharmony_ci#define CF_OP_CALL                         19
588bf215546Sopenharmony_ci#define CF_OP_CALL_FS                      20
589bf215546Sopenharmony_ci#define CF_OP_RET                          21
590bf215546Sopenharmony_ci#define CF_OP_EMIT_VERTEX                  22
591bf215546Sopenharmony_ci#define CF_OP_EMIT_CUT_VERTEX              23
592bf215546Sopenharmony_ci#define CF_OP_CUT_VERTEX                   24
593bf215546Sopenharmony_ci#define CF_OP_KILL                         25
594bf215546Sopenharmony_ci#define CF_OP_END_PROGRAM                  26
595bf215546Sopenharmony_ci#define CF_OP_WAIT_ACK                     27
596bf215546Sopenharmony_ci#define CF_OP_TEX_ACK                      28
597bf215546Sopenharmony_ci#define CF_OP_VTX_ACK                      29
598bf215546Sopenharmony_ci#define CF_OP_VTX_TC_ACK                   30
599bf215546Sopenharmony_ci#define CF_OP_JUMPTABLE                    31
600bf215546Sopenharmony_ci#define CF_OP_WAVE_SYNC                    32
601bf215546Sopenharmony_ci#define CF_OP_HALT                         33
602bf215546Sopenharmony_ci#define CF_OP_CF_END                       34
603bf215546Sopenharmony_ci#define CF_OP_LDS_DEALLOC                  35
604bf215546Sopenharmony_ci#define CF_OP_PUSH_WQM                     36
605bf215546Sopenharmony_ci#define CF_OP_POP_WQM                      37
606bf215546Sopenharmony_ci#define CF_OP_ELSE_WQM                     38
607bf215546Sopenharmony_ci#define CF_OP_JUMP_ANY                     39
608bf215546Sopenharmony_ci#define CF_OP_REACTIVATE                   40
609bf215546Sopenharmony_ci#define CF_OP_REACTIVATE_WQM               41
610bf215546Sopenharmony_ci#define CF_OP_INTERRUPT                    42
611bf215546Sopenharmony_ci#define CF_OP_INTERRUPT_AND_SLEEP          43
612bf215546Sopenharmony_ci#define CF_OP_SET_PRIORITY                 44
613bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM0_BUF0             45
614bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM0_BUF1             46
615bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM0_BUF2             47
616bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM0_BUF3             48
617bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM1_BUF0             49
618bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM1_BUF1             50
619bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM1_BUF2             51
620bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM1_BUF3             52
621bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM2_BUF0             53
622bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM2_BUF1             54
623bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM2_BUF2             55
624bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM2_BUF3             56
625bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM3_BUF0             57
626bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM3_BUF1             58
627bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM3_BUF2             59
628bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM3_BUF3             60
629bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM0                  61
630bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM1                  62
631bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM2                  63
632bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM3                  64
633bf215546Sopenharmony_ci#define CF_OP_MEM_SCRATCH                  65
634bf215546Sopenharmony_ci#define CF_OP_MEM_REDUCT                   66
635bf215546Sopenharmony_ci#define CF_OP_MEM_RING                     67
636bf215546Sopenharmony_ci#define CF_OP_EXPORT                       68
637bf215546Sopenharmony_ci#define CF_OP_EXPORT_DONE                  69
638bf215546Sopenharmony_ci#define CF_OP_MEM_EXPORT                   70
639bf215546Sopenharmony_ci#define CF_OP_MEM_RAT                      71
640bf215546Sopenharmony_ci#define CF_OP_MEM_RAT_NOCACHE              72
641bf215546Sopenharmony_ci#define CF_OP_MEM_RING1                    73
642bf215546Sopenharmony_ci#define CF_OP_MEM_RING2                    74
643bf215546Sopenharmony_ci#define CF_OP_MEM_RING3                    75
644bf215546Sopenharmony_ci#define CF_OP_MEM_MEM_COMBINED             76
645bf215546Sopenharmony_ci#define CF_OP_MEM_RAT_COMBINED_NOCACHE     77
646bf215546Sopenharmony_ci#define CF_OP_MEM_RAT_COMBINED             78
647bf215546Sopenharmony_ci#define CF_OP_EXPORT_DONE_END              79
648bf215546Sopenharmony_ci#define CF_OP_ALU                          80
649bf215546Sopenharmony_ci#define CF_OP_ALU_PUSH_BEFORE              81
650bf215546Sopenharmony_ci#define CF_OP_ALU_POP_AFTER                82
651bf215546Sopenharmony_ci#define CF_OP_ALU_POP2_AFTER               83
652bf215546Sopenharmony_ci#define CF_OP_ALU_EXT                      84
653bf215546Sopenharmony_ci#define CF_OP_ALU_CONTINUE                 85
654bf215546Sopenharmony_ci#define CF_OP_ALU_BREAK                    86
655bf215546Sopenharmony_ci#define CF_OP_ALU_VALID_PIXEL_MODE         87
656bf215546Sopenharmony_ci#define CF_OP_ALU_ELSE_AFTER               88
657bf215546Sopenharmony_ci
658bf215546Sopenharmony_ci/* CF_NATIVE means that r600_bytecode_cf contains pre-encoded native data */
659bf215546Sopenharmony_ci#define CF_NATIVE                          89
660bf215546Sopenharmony_ci
661bf215546Sopenharmony_cienum r600_chip_class {
662bf215546Sopenharmony_ci	ISA_CC_R600,
663bf215546Sopenharmony_ci	ISA_CC_R700,
664bf215546Sopenharmony_ci	ISA_CC_EVERGREEN,
665bf215546Sopenharmony_ci	ISA_CC_CAYMAN
666bf215546Sopenharmony_ci};
667bf215546Sopenharmony_ci
668bf215546Sopenharmony_cistruct r600_isa {
669bf215546Sopenharmony_ci	enum r600_chip_class hw_class;
670bf215546Sopenharmony_ci
671bf215546Sopenharmony_ci	/* these arrays provide reverse mapping - opcode => table_index,
672bf215546Sopenharmony_ci	 * typically we don't need such lookup, unless we are decoding the native
673bf215546Sopenharmony_ci	 * bytecode (e.g. when reading the bytestream from llvm backend) */
674bf215546Sopenharmony_ci	unsigned *alu_op2_map;
675bf215546Sopenharmony_ci	unsigned *alu_op3_map;
676bf215546Sopenharmony_ci	unsigned *fetch_map;
677bf215546Sopenharmony_ci	unsigned *cf_map;
678bf215546Sopenharmony_ci};
679bf215546Sopenharmony_ci
680bf215546Sopenharmony_cistruct r600_context;
681bf215546Sopenharmony_ci
682bf215546Sopenharmony_ciint r600_isa_init(struct r600_context *ctx, struct r600_isa *isa);
683bf215546Sopenharmony_ciint r600_isa_destroy(struct r600_isa *isa);
684bf215546Sopenharmony_ci
685bf215546Sopenharmony_ciextern const struct alu_op_info r600_alu_op_table[];
686bf215546Sopenharmony_ci
687bf215546Sopenharmony_ciunsigned
688bf215546Sopenharmony_cir600_alu_op_table_size(void);
689bf215546Sopenharmony_ci
690bf215546Sopenharmony_ciconst struct alu_op_info *
691bf215546Sopenharmony_cir600_isa_alu(unsigned op);
692bf215546Sopenharmony_ci
693bf215546Sopenharmony_ciconst struct fetch_op_info *
694bf215546Sopenharmony_cir600_isa_fetch(unsigned op);
695bf215546Sopenharmony_ci
696bf215546Sopenharmony_ciconst struct cf_op_info *
697bf215546Sopenharmony_cir600_isa_cf(unsigned op);
698bf215546Sopenharmony_ci
699bf215546Sopenharmony_cistatic inline unsigned
700bf215546Sopenharmony_cir600_isa_alu_opcode(enum r600_chip_class gfx_level, unsigned op) {
701bf215546Sopenharmony_ci	int opc =  r600_isa_alu(op)->opcode[gfx_level >> 1];
702bf215546Sopenharmony_ci	assert(opc != -1);
703bf215546Sopenharmony_ci	return opc;
704bf215546Sopenharmony_ci}
705bf215546Sopenharmony_ci
706bf215546Sopenharmony_cistatic inline unsigned
707bf215546Sopenharmony_cir600_isa_alu_slots(enum r600_chip_class gfx_level, unsigned op) {
708bf215546Sopenharmony_ci	unsigned slots = r600_isa_alu(op)->slots[gfx_level];
709bf215546Sopenharmony_ci	assert(slots != 0);
710bf215546Sopenharmony_ci	return slots;
711bf215546Sopenharmony_ci}
712bf215546Sopenharmony_ci
713bf215546Sopenharmony_cistatic inline unsigned
714bf215546Sopenharmony_cir600_isa_fetch_opcode(enum r600_chip_class gfx_level, unsigned op) {
715bf215546Sopenharmony_ci	int opc = r600_isa_fetch(op)->opcode[gfx_level];
716bf215546Sopenharmony_ci	assert(opc != -1);
717bf215546Sopenharmony_ci	return opc;
718bf215546Sopenharmony_ci}
719bf215546Sopenharmony_ci
720bf215546Sopenharmony_cistatic inline unsigned
721bf215546Sopenharmony_cir600_isa_cf_opcode(enum r600_chip_class gfx_level, unsigned op) {
722bf215546Sopenharmony_ci	int opc = r600_isa_cf(op)->opcode[gfx_level];
723bf215546Sopenharmony_ci	assert(opc != -1);
724bf215546Sopenharmony_ci	return opc;
725bf215546Sopenharmony_ci}
726bf215546Sopenharmony_ci
727bf215546Sopenharmony_cistatic inline unsigned
728bf215546Sopenharmony_cir600_isa_alu_by_opcode(struct r600_isa* isa, unsigned opcode, unsigned is_op3) {
729bf215546Sopenharmony_ci	unsigned op;
730bf215546Sopenharmony_ci	if (is_op3) {
731bf215546Sopenharmony_ci		assert(isa->alu_op3_map);
732bf215546Sopenharmony_ci		op = isa->alu_op3_map[opcode];
733bf215546Sopenharmony_ci	} else {
734bf215546Sopenharmony_ci		assert(isa->alu_op2_map);
735bf215546Sopenharmony_ci		op = isa->alu_op2_map[opcode];
736bf215546Sopenharmony_ci	}
737bf215546Sopenharmony_ci	assert(op);
738bf215546Sopenharmony_ci	return op - 1;
739bf215546Sopenharmony_ci}
740bf215546Sopenharmony_ci
741bf215546Sopenharmony_cistatic inline unsigned
742bf215546Sopenharmony_cir600_isa_fetch_by_opcode(struct r600_isa* isa, unsigned opcode) {
743bf215546Sopenharmony_ci	unsigned op;
744bf215546Sopenharmony_ci	assert(isa->fetch_map);
745bf215546Sopenharmony_ci	op = isa->fetch_map[opcode];
746bf215546Sopenharmony_ci	assert(op);
747bf215546Sopenharmony_ci	return op - 1;
748bf215546Sopenharmony_ci}
749bf215546Sopenharmony_ci
750bf215546Sopenharmony_cistatic inline unsigned
751bf215546Sopenharmony_cir600_isa_cf_by_opcode(struct r600_isa* isa, unsigned opcode, unsigned is_alu) {
752bf215546Sopenharmony_ci	unsigned op;
753bf215546Sopenharmony_ci	assert(isa->cf_map);
754bf215546Sopenharmony_ci	/* using offset for CF_ALU_xxx opcodes because they overlap with other
755bf215546Sopenharmony_ci	 * CF opcodes (they use different encoding in hw) */
756bf215546Sopenharmony_ci	op = isa->cf_map[is_alu ? opcode + 0x80 : opcode];
757bf215546Sopenharmony_ci	assert(op);
758bf215546Sopenharmony_ci	return op - 1;
759bf215546Sopenharmony_ci}
760bf215546Sopenharmony_ci
761bf215546Sopenharmony_ci#ifdef __cplusplus
762bf215546Sopenharmony_ci} /* extern "C" */
763bf215546Sopenharmony_ci#endif
764bf215546Sopenharmony_ci
765bf215546Sopenharmony_ci#endif /* R600_ISA_H_ */
766