1*38fd1498Szrj/* This file contains the definitions and documentation for the
2*38fd1498Szrj   HSAIL builtins used in the GNU compiler.
3*38fd1498Szrj   Copyright (C) 2016-2018 Free Software Foundation, Inc.
4*38fd1498Szrj
5*38fd1498Szrj   Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
6*38fd1498Szrj   for General Processor Tech.
7*38fd1498Szrj
8*38fd1498SzrjThis file is part of GCC.
9*38fd1498Szrj
10*38fd1498SzrjGCC is free software; you can redistribute it and/or modify it under
11*38fd1498Szrjthe terms of the GNU General Public License as published by the Free
12*38fd1498SzrjSoftware Foundation; either version 3, or (at your option) any later
13*38fd1498Szrjversion.
14*38fd1498Szrj
15*38fd1498SzrjGCC is distributed in the hope that it will be useful, but WITHOUT ANY
16*38fd1498SzrjWARRANTY; without even the implied warranty of MERCHANTABILITY or
17*38fd1498SzrjFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
18*38fd1498Szrjfor more details.
19*38fd1498Szrj
20*38fd1498SzrjYou should have received a copy of the GNU General Public License
21*38fd1498Szrjalong with GCC; see the file COPYING3.  If not see
22*38fd1498Szrj<http://www.gnu.org/licenses/>.  */
23*38fd1498Szrj
24*38fd1498Szrj/* Following builtins are used by the BRIG (the binary representation of
25*38fd1498Szrj   HSAIL) frontend.  Software implementations are available in libhsail-rt.
26*38fd1498Szrj   Use leading double underscore in the name to avoid name space clashes
27*38fd1498Szrj   with kernel program symbols in case the builtin is implemented as
28*38fd1498Szrj   a function call.  */
29*38fd1498Szrj
30*38fd1498Szrj/* Work-item ID related builtins are not constant in the work-group function
31*38fd1498Szrj   mode (each WI has a different return value).  */
32*38fd1498Szrj
33*38fd1498Szrj#ifndef DEF_HSAIL_BUILTIN
34*38fd1498Szrj#define DEF_HSAIL_BUILTIN(ENUM, HSAIL_OPCODE, HSAIL_TYPE,	\
35*38fd1498Szrj			  NAME, TYPE, ATTRS)
36*38fd1498Szrj#endif
37*38fd1498Szrj
38*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKITEMABSID, BRIG_OPCODE_WORKITEMABSID,
39*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_workitemabsid", BT_FN_UINT_UINT_PTR,
40*38fd1498Szrj		  ATTR_NOTHROW_LEAF_LIST)
41*38fd1498Szrj
42*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_GRIDSIZE, BRIG_OPCODE_GRIDSIZE,
43*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_gridsize", BT_FN_UINT_UINT_PTR,
44*38fd1498Szrj		  ATTR_PURE_NOTHROW_LEAF_LIST)
45*38fd1498Szrj
46*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKITEMFLATABSID_U32,
47*38fd1498Szrj		  BRIG_OPCODE_WORKITEMFLATABSID, BRIG_TYPE_U32,
48*38fd1498Szrj		  "__hsail_workitemflatabsid_u32", BT_FN_UINT_PTR,
49*38fd1498Szrj		  ATTR_NOTHROW_LEAF_LIST)
50*38fd1498Szrj
51*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKITEMFLATABSID_U64,
52*38fd1498Szrj		  BRIG_OPCODE_WORKITEMFLATABSID, BRIG_TYPE_U64,
53*38fd1498Szrj		  "__hsail_workitemflatabsid_u64", BT_FN_ULONG_PTR,
54*38fd1498Szrj		  ATTR_NOTHROW_LEAF_LIST)
55*38fd1498Szrj
56*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKITEMFLATID, BRIG_OPCODE_WORKITEMFLATID,
57*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_workitemflatid", BT_FN_UINT_PTR,
58*38fd1498Szrj		  ATTR_NOTHROW_LEAF_LIST)
59*38fd1498Szrj
60*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKITEMID, BRIG_OPCODE_WORKITEMID,
61*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_workitemid", BT_FN_UINT_UINT_PTR,
62*38fd1498Szrj		  ATTR_NOTHROW_LEAF_LIST)
63*38fd1498Szrj
64*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKGROUPID, BRIG_OPCODE_WORKGROUPID,
65*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_workgroupid", BT_FN_UINT_UINT_PTR,
66*38fd1498Szrj		  ATTR_PURE_NOTHROW_LEAF_LIST)
67*38fd1498Szrj
68*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CURRENTWORKITEMFLATID,
69*38fd1498Szrj		  BRIG_OPCODE_CURRENTWORKITEMFLATID,
70*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_currentworkitemflatid",
71*38fd1498Szrj		  BT_FN_UINT_PTR, ATTR_NOTHROW_LEAF_LIST)
72*38fd1498Szrj
73*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKITEMABSID_U64, BRIG_OPCODE_WORKITEMABSID,
74*38fd1498Szrj		  BRIG_TYPE_U64, "__hsail_workitemabsid_u64",
75*38fd1498Szrj		  BT_FN_ULONG_UINT_PTR, ATTR_NOTHROW_LEAF_LIST)
76*38fd1498Szrj
77*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_PACKETID, BRIG_OPCODE_PACKETID,
78*38fd1498Szrj		  BRIG_TYPE_U64, "__hsail_packetid", BT_FN_ULONG_PTR,
79*38fd1498Szrj		  ATTR_PURE_NOTHROW_LEAF_LIST)
80*38fd1498Szrj
81*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_PACKETCOMPLETIONSIG_SIG64,
82*38fd1498Szrj		  BRIG_OPCODE_PACKETCOMPLETIONSIG, BRIG_TYPE_SIG64,
83*38fd1498Szrj		  "__hsail_packetcompletionsig_sig64", BT_FN_ULONG_PTR,
84*38fd1498Szrj		  ATTR_PURE_NOTHROW_LEAF_LIST)
85*38fd1498Szrj
86*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_PACKETCOMPLETIONSIG_SIG32,
87*38fd1498Szrj		  BRIG_OPCODE_PACKETCOMPLETIONSIG, BRIG_TYPE_SIG32,
88*38fd1498Szrj		  "__hsail_packetcompletionsig_sig32", BT_FN_UINT_PTR,
89*38fd1498Szrj		  ATTR_PURE_NOTHROW_LEAF_LIST)
90*38fd1498Szrj
91*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CURRENTWORKGROUPSIZE,
92*38fd1498Szrj		  BRIG_OPCODE_CURRENTWORKGROUPSIZE, BRIG_TYPE_U32,
93*38fd1498Szrj		  "__hsail_currentworkgroupsize", BT_FN_UINT_UINT_PTR,
94*38fd1498Szrj		  ATTR_PURE_NOTHROW_LEAF_LIST)
95*38fd1498Szrj
96*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKGROUPSIZE, BRIG_OPCODE_WORKGROUPSIZE,
97*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_workgroupsize", BT_FN_UINT_UINT_PTR,
98*38fd1498Szrj		  ATTR_PURE_NOTHROW_LEAF_LIST)
99*38fd1498Szrj
100*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_DIM, BRIG_OPCODE_DIM,
101*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_dim", BT_FN_UINT_PTR,
102*38fd1498Szrj		  ATTR_PURE_NOTHROW_LEAF_LIST)
103*38fd1498Szrj
104*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_GRIDGROUPS, BRIG_OPCODE_GRIDGROUPS,
105*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_gridgroups", BT_FN_UINT_UINT_PTR,
106*38fd1498Szrj		  ATTR_PURE_NOTHROW_LEAF_LIST)
107*38fd1498Szrj
108*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITEXTRACT_S32, BRIG_OPCODE_BITEXTRACT,
109*38fd1498Szrj		  BRIG_TYPE_S32, "__hsail_bitextract_s32",
110*38fd1498Szrj		  BT_FN_INT_INT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
111*38fd1498Szrj
112*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITEXTRACT_U32, BRIG_OPCODE_BITEXTRACT,
113*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_bitextract_u32",
114*38fd1498Szrj		  BT_FN_UINT_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
115*38fd1498Szrj
116*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITEXTRACT_S64, BRIG_OPCODE_BITEXTRACT,
117*38fd1498Szrj		  BRIG_TYPE_S64, "__hsail_bitextract_s64",
118*38fd1498Szrj		  BT_FN_LONG_LONG_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
119*38fd1498Szrj
120*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITEXTRACT_U64, BRIG_OPCODE_BITEXTRACT,
121*38fd1498Szrj		  BRIG_TYPE_U64, "__hsail_bitextract_u64",
122*38fd1498Szrj		  BT_FN_ULONG_ULONG_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
123*38fd1498Szrj
124*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITINSERT_U32, BRIG_OPCODE_BITINSERT,
125*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_bitinsert_u32",
126*38fd1498Szrj		  BT_FN_UINT_UINT_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
127*38fd1498Szrj
128*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITINSERT_U64, BRIG_OPCODE_BITINSERT,
129*38fd1498Szrj		  BRIG_TYPE_U64, "__hsail_bitinsert_u64",
130*38fd1498Szrj		  BT_FN_ULONG_ULONG_ULONG_UINT_UINT,
131*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
132*38fd1498Szrj
133*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITMASK_B32, BRIG_OPCODE_BITMASK,
134*38fd1498Szrj		  BRIG_TYPE_B32, "__hsail_bitmask_u32", BT_FN_UINT_UINT_UINT,
135*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
136*38fd1498Szrj
137*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITMASK_B64, BRIG_OPCODE_BITMASK,
138*38fd1498Szrj		  BRIG_TYPE_B64, "__hsail_bitmask_u64", BT_FN_ULONG_UINT_UINT,
139*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
140*38fd1498Szrj
141*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITREV_B32, BRIG_OPCODE_BITREV,
142*38fd1498Szrj		  BRIG_TYPE_B32, "__hsail_bitrev_u32", BT_FN_UINT_UINT,
143*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
144*38fd1498Szrj
145*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITREV_B64, BRIG_OPCODE_BITREV,
146*38fd1498Szrj		  BRIG_TYPE_B64, "__hsail_bitrev_u64", BT_FN_ULONG_ULONG,
147*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
148*38fd1498Szrj
149*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITSELECT_B32, BRIG_OPCODE_BITSELECT,
150*38fd1498Szrj		  BRIG_TYPE_B32, "__hsail_bitselect_u32",
151*38fd1498Szrj		  BT_FN_UINT_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
152*38fd1498Szrj
153*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITSELECT_U64, BRIG_OPCODE_BITSELECT,
154*38fd1498Szrj		  BRIG_TYPE_B64, "__hsail_bitselect_u64",
155*38fd1498Szrj		  BT_FN_ULONG_ULONG_ULONG_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
156*38fd1498Szrj
157*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FIRSTBIT_U32, BRIG_OPCODE_FIRSTBIT,
158*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_firstbit_u32", BT_FN_UINT_UINT,
159*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
160*38fd1498Szrj
161*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FIRSTBIT_S32, BRIG_OPCODE_FIRSTBIT,
162*38fd1498Szrj		  BRIG_TYPE_S32, "__hsail_firstbit_s32", BT_FN_UINT_INT,
163*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
164*38fd1498Szrj
165*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FIRSTBIT_U64, BRIG_OPCODE_FIRSTBIT,
166*38fd1498Szrj		  BRIG_TYPE_U64, "__hsail_firstbit_u64", BT_FN_UINT_ULONG,
167*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
168*38fd1498Szrj
169*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FIRSTBIT_S64, BRIG_OPCODE_FIRSTBIT,
170*38fd1498Szrj		  BRIG_TYPE_S64, "__hsail_firstbit_s64", BT_FN_UINT_LONG,
171*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
172*38fd1498Szrj
173*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_LASTBIT_U32, BRIG_OPCODE_LASTBIT,
174*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_lastbit_u32", BT_FN_UINT_UINT,
175*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
176*38fd1498Szrj
177*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_LASTBIT_U64, BRIG_OPCODE_LASTBIT,
178*38fd1498Szrj		  BRIG_TYPE_U64, "__hsail_lastbit_u64", BT_FN_UINT_ULONG,
179*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
180*38fd1498Szrj
181*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BORROW_U32, BRIG_OPCODE_BORROW,
182*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_borrow_u32", BT_FN_UINT_UINT_UINT,
183*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
184*38fd1498Szrj
185*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BORROW_U64, BRIG_OPCODE_BORROW,
186*38fd1498Szrj		  BRIG_TYPE_U64, "__hsail_borrow_u64", BT_FN_ULONG_ULONG_ULONG,
187*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
188*38fd1498Szrj
189*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CARRY_U32, BRIG_OPCODE_CARRY,
190*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_carry_u32", BT_FN_UINT_UINT_UINT,
191*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
192*38fd1498Szrj
193*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CARRY_U64, BRIG_OPCODE_CARRY,
194*38fd1498Szrj		  BRIG_TYPE_U64, "__hsail_carry_u64", BT_FN_ULONG_ULONG_ULONG,
195*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
196*38fd1498Szrj
197*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_REM_S32, BRIG_OPCODE_REM,
198*38fd1498Szrj		  BRIG_TYPE_S32, "__hsail_rem_s32", BT_FN_INT_INT_INT,
199*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
200*38fd1498Szrj
201*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_REM_S64, BRIG_OPCODE_REM,
202*38fd1498Szrj		  BRIG_TYPE_S64, "__hsail_rem_s64", BT_FN_LONG_LONG_LONG,
203*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
204*38fd1498Szrj
205*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_MIN_F32, BRIG_OPCODE_MIN,
206*38fd1498Szrj		  BRIG_TYPE_F32, "__hsail_min_f32", BT_FN_FLOAT_FLOAT_FLOAT,
207*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
208*38fd1498Szrj
209*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_MAX_F32, BRIG_OPCODE_MAX,
210*38fd1498Szrj		  BRIG_TYPE_F32, "__hsail_max_f32", BT_FN_FLOAT_FLOAT_FLOAT,
211*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
212*38fd1498Szrj
213*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_MIN_F64, BRIG_OPCODE_MIN,
214*38fd1498Szrj		  BRIG_TYPE_F64, "__hsail_min_f64", BT_FN_DOUBLE_DOUBLE_DOUBLE,
215*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
216*38fd1498Szrj
217*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_MAX_F64, BRIG_OPCODE_MAX,
218*38fd1498Szrj		  BRIG_TYPE_F64, "__hsail_max_f64", BT_FN_DOUBLE_DOUBLE_DOUBLE,
219*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
220*38fd1498Szrj
221*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CLASS_F32, BRIG_OPCODE_CLASS,
222*38fd1498Szrj		  BRIG_TYPE_F32, "__hsail_class_f32", BT_FN_UINT_FLOAT_UINT,
223*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
224*38fd1498Szrj
225*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CLASS_F64, BRIG_OPCODE_CLASS,
226*38fd1498Szrj		  BRIG_TYPE_F64, "__hsail_class_f64", BT_FN_UINT_DOUBLE_UINT,
227*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
228*38fd1498Szrj
229*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CLASS_F32_F16, BRIG_OPCODE_CLASS,
230*38fd1498Szrj		  BRIG_TYPE_F16, "__hsail_class_f32_f16",
231*38fd1498Szrj		  BT_FN_UINT_FLOAT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
232*38fd1498Szrj
233*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FRACT_F32, BRIG_OPCODE_FRACT,
234*38fd1498Szrj		  BRIG_TYPE_F32, "__hsail_fract_f32", BT_FN_FLOAT_FLOAT,
235*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
236*38fd1498Szrj
237*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FRACT_F64, BRIG_OPCODE_FRACT,
238*38fd1498Szrj		  BRIG_TYPE_F64, "__hsail_fract_f64", BT_FN_DOUBLE_DOUBLE,
239*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
240*38fd1498Szrj
241*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BARRIER, BRIG_OPCODE_BARRIER,
242*38fd1498Szrj		  BRIG_TYPE_NONE, "__hsail_barrier", BT_FN_VOID_PTR,
243*38fd1498Szrj		  ATTR_RT_NOTHROW_LEAF_LIST)
244*38fd1498Szrj
245*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_INITFBAR, BRIG_OPCODE_INITFBAR,
246*38fd1498Szrj		  BRIG_TYPE_NONE, "__hsail_initfbar", BT_FN_VOID_UINT_PTR,
247*38fd1498Szrj		  ATTR_NOTHROW_LEAF_LIST)
248*38fd1498Szrj
249*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_JOINFBAR, BRIG_OPCODE_JOINFBAR,
250*38fd1498Szrj		  BRIG_TYPE_NONE, "__hsail_joinfbar", BT_FN_VOID_UINT_PTR,
251*38fd1498Szrj		  ATTR_NOTHROW_LIST)
252*38fd1498Szrj
253*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WAITFBAR, BRIG_OPCODE_WAITFBAR,
254*38fd1498Szrj		  BRIG_TYPE_NONE, "__hsail_waitfbar", BT_FN_VOID_UINT_PTR,
255*38fd1498Szrj		  ATTR_RT_NOTHROW_LEAF_LIST)
256*38fd1498Szrj
257*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_ARRIVEFBAR, BRIG_OPCODE_ARRIVEFBAR,
258*38fd1498Szrj		  BRIG_TYPE_NONE, "__hsail_arrivefbar", BT_FN_VOID_UINT_PTR,
259*38fd1498Szrj		  ATTR_RT_NOTHROW_LEAF_LIST)
260*38fd1498Szrj
261*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_LEAVEFBAR, BRIG_OPCODE_LEAVEFBAR,
262*38fd1498Szrj		  BRIG_TYPE_NONE, "__hsail_leavefbar", BT_FN_VOID_UINT_PTR,
263*38fd1498Szrj		  ATTR_NOTHROW_LIST)
264*38fd1498Szrj
265*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_RELEASEFBAR, BRIG_OPCODE_RELEASEFBAR,
266*38fd1498Szrj		  BRIG_TYPE_NONE, "__hsail_releasefbar", BT_FN_VOID_UINT_PTR,
267*38fd1498Szrj		  ATTR_NOTHROW_LIST)
268*38fd1498Szrj
269*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITALIGN, BRIG_OPCODE_BITALIGN,
270*38fd1498Szrj		  BRIG_TYPE_B32, "__hsail_bitalign",
271*38fd1498Szrj		  BT_FN_UINT_ULONG_ULONG_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
272*38fd1498Szrj
273*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BYTEALIGN, BRIG_OPCODE_BYTEALIGN,
274*38fd1498Szrj		  BRIG_TYPE_B32, "__hsail_bytealign",
275*38fd1498Szrj		  BT_FN_UINT_ULONG_ULONG_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
276*38fd1498Szrj
277*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_LERP, BRIG_OPCODE_LERP,
278*38fd1498Szrj		  BRIG_TYPE_U8X4, "__hsail_lerp", BT_FN_UINT_UINT_UINT_UINT,
279*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
280*38fd1498Szrj
281*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_PACKCVT, BRIG_OPCODE_PACKCVT,
282*38fd1498Szrj		  BRIG_TYPE_U8X4, "__hsail_packcvt",
283*38fd1498Szrj		  BT_FN_UINT_FLOAT_FLOAT_FLOAT_FLOAT,
284*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
285*38fd1498Szrj
286*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_UNPACKCVT, BRIG_OPCODE_UNPACKCVT,
287*38fd1498Szrj		  BRIG_TYPE_F32, "__hsail_unpackcvt", BT_FN_FLOAT_UINT_UINT,
288*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
289*38fd1498Szrj
290*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SAD_U16X2, BRIG_OPCODE_SAD,
291*38fd1498Szrj		  BRIG_TYPE_U16X2, "__hsail_sad_u16x2",
292*38fd1498Szrj		  BT_FN_UINT_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
293*38fd1498Szrj
294*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SAD_U32, BRIG_OPCODE_SAD,
295*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_sad_u32", BT_FN_UINT_UINT_UINT_UINT,
296*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
297*38fd1498Szrj
298*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SAD_U8X4, BRIG_OPCODE_SAD,
299*38fd1498Szrj		  BRIG_TYPE_U8X4, "__hsail_sad_u8x4",
300*38fd1498Szrj		  BT_FN_UINT_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
301*38fd1498Szrj
302*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SADHI_U8X4, BRIG_OPCODE_SADHI,
303*38fd1498Szrj		  BRIG_TYPE_U16X2, "__hsail_sadhi_u16x2_u8x4",
304*38fd1498Szrj		  BT_FN_UINT_UINT_UINT_UINT,
305*38fd1498Szrj		  ATTR_CONST_NOTHROW_LEAF_LIST)
306*38fd1498Szrj
307*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CLOCK, BRIG_OPCODE_CLOCK,
308*38fd1498Szrj		  BRIG_TYPE_U64, "__hsail_clock", BT_FN_ULONG,
309*38fd1498Szrj		  ATTR_NOTHROW_LEAF_LIST)
310*38fd1498Szrj
311*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CUID, BRIG_OPCODE_CUID,
312*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_cuid", BT_FN_UINT_PTR,
313*38fd1498Szrj		  ATTR_NOTHROW_LEAF_LIST)
314*38fd1498Szrj
315*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_MAXCUID, BRIG_OPCODE_MAXCUID,
316*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_maxcuid", BT_FN_UINT_PTR,
317*38fd1498Szrj		  ATTR_NOTHROW_LEAF_LIST)
318*38fd1498Szrj
319*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_DEBUGTRAP, BRIG_OPCODE_DEBUGTRAP,
320*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_debugtrap", BT_FN_VOID_UINT_PTR,
321*38fd1498Szrj		  ATTR_NORETURN_NOTHROW_LIST)
322*38fd1498Szrj
323*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_GROUPBASEPTR, BRIG_OPCODE_GROUPBASEPTR,
324*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_groupbaseptr", BT_FN_UINT_PTR,
325*38fd1498Szrj		  ATTR_PURE_NOTHROW_LEAF_LIST)
326*38fd1498Szrj
327*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_KERNARGBASEPTR_U64,
328*38fd1498Szrj		  BRIG_OPCODE_KERNARGBASEPTR, BRIG_TYPE_U64,
329*38fd1498Szrj		  "__hsail_kernargbaseptr_u64", BT_FN_ULONG_PTR,
330*38fd1498Szrj		  ATTR_PURE_NOTHROW_LEAF_LIST)
331*38fd1498Szrj
332*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_KERNARGBASEPTR_U32,
333*38fd1498Szrj		  BRIG_OPCODE_KERNARGBASEPTR, BRIG_TYPE_U32,
334*38fd1498Szrj		  "__hsail_kernargbaseptr_u32", BT_FN_UINT_PTR,
335*38fd1498Szrj		  ATTR_PURE_NOTHROW_LEAF_LIST)
336*38fd1498Szrj
337*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_ALLOCA, BRIG_OPCODE_ALLOCA,
338*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_alloca", BT_FN_UINT_UINT_UINT_PTR,
339*38fd1498Szrj		  ATTR_NOTHROW_LEAF_LIST)
340*38fd1498Szrj
341*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_LDQUEUEWRITEINDEX,
342*38fd1498Szrj		  BRIG_OPCODE_LDQUEUEWRITEINDEX,
343*38fd1498Szrj		  BRIG_TYPE_U64, "__hsail_ldqueuewriteindex",
344*38fd1498Szrj		  BT_FN_ULONG_ULONG, ATTR_NOTHROW_LEAF_LIST)
345*38fd1498Szrj
346*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_LDQUEUEREADINDEX,
347*38fd1498Szrj		  BRIG_OPCODE_LDQUEUEREADINDEX,
348*38fd1498Szrj		  BRIG_TYPE_U64, "__hsail_ldqueuereadindex",
349*38fd1498Szrj		  BT_FN_ULONG_ULONG, ATTR_NOTHROW_LEAF_LIST)
350*38fd1498Szrj
351*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_STQUEUEWRITEINDEX,
352*38fd1498Szrj		  BRIG_OPCODE_STQUEUEWRITEINDEX,
353*38fd1498Szrj		  BRIG_TYPE_U64, "__hsail_stqueuewriteindex",
354*38fd1498Szrj		  BT_FN_VOID_UINT64_UINT64, ATTR_NOTHROW_LEAF_LIST)
355*38fd1498Szrj
356*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_STQUEUEREADINDEX,
357*38fd1498Szrj		  BRIG_OPCODE_STQUEUEREADINDEX,
358*38fd1498Szrj		  BRIG_TYPE_U64, "__hsail_stqueuereadindex",
359*38fd1498Szrj		  BT_FN_VOID_UINT64_UINT64, ATTR_NOTHROW_LEAF_LIST)
360*38fd1498Szrj
361*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_ADDQUEUEWRITEINDEX,
362*38fd1498Szrj		  BRIG_OPCODE_ADDQUEUEWRITEINDEX,
363*38fd1498Szrj		  BRIG_TYPE_U64, "__hsail_addqueuewriteindex",
364*38fd1498Szrj		  BT_FN_ULONG_ULONG_ULONG, ATTR_NOTHROW_LEAF_LIST)
365*38fd1498Szrj
366*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CASQUEUEWRITEINDEX,
367*38fd1498Szrj		  BRIG_OPCODE_CASQUEUEWRITEINDEX,
368*38fd1498Szrj		  BRIG_TYPE_U64, "__hsail_casqueuewriteindex",
369*38fd1498Szrj		  BT_FN_ULONG_ULONG_ULONG_ULONG, ATTR_NOTHROW_LEAF_LIST)
370*38fd1498Szrj
371*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SEGMENTP_GLOBAL,
372*38fd1498Szrj		  BRIG_OPCODE_SEGMENTP,
373*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_segmentp_global",
374*38fd1498Szrj		  BT_FN_UINT32_UINT64_PTR, ATTR_NOTHROW_LEAF_LIST)
375*38fd1498Szrj
376*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SEGMENTP_GROUP,
377*38fd1498Szrj		  BRIG_OPCODE_SEGMENTP,
378*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_segmentp_group",
379*38fd1498Szrj		  BT_FN_UINT32_UINT64_PTR, ATTR_NOTHROW_LEAF_LIST)
380*38fd1498Szrj
381*38fd1498SzrjDEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SEGMENTP_PRIVATE,
382*38fd1498Szrj		  BRIG_OPCODE_SEGMENTP,
383*38fd1498Szrj		  BRIG_TYPE_U32, "__hsail_segmentp_private",
384*38fd1498Szrj		  BT_FN_UINT32_UINT64_PTR, ATTR_NOTHROW_LEAF_LIST)
385*38fd1498Szrj
386*38fd1498Szrj#ifndef DEF_HSAIL_ATOMIC_BUILTIN
387*38fd1498Szrj#define DEF_HSAIL_ATOMIC_BUILTIN(ENUM, ATOMIC_OPCODE, HSAIL_TYPE,	\
388*38fd1498Szrj				 NAME, TYPE, ATTRS)
389*38fd1498Szrj#endif
390*38fd1498Szrj
391*38fd1498SzrjDEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MIN_S32, BRIG_ATOMIC_MIN,
392*38fd1498Szrj			 BRIG_TYPE_S32, "__hsail_atomic_min_s32",
393*38fd1498Szrj			 BT_FN_INT_PTR_INT, ATTR_NOTHROW_LEAF_LIST)
394*38fd1498Szrj
395*38fd1498SzrjDEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MIN_S64, BRIG_ATOMIC_MIN,
396*38fd1498Szrj			 BRIG_TYPE_S64, "__hsail_atomic_min_s64",
397*38fd1498Szrj			 BT_FN_LONG_PTR_LONG, ATTR_NOTHROW_LEAF_LIST)
398*38fd1498Szrj
399*38fd1498SzrjDEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MIN_U32, BRIG_ATOMIC_MIN,
400*38fd1498Szrj			 BRIG_TYPE_U32, "__hsail_atomic_min_u32",
401*38fd1498Szrj			 BT_FN_UINT_PTR_UINT, ATTR_NOTHROW_LEAF_LIST)
402*38fd1498Szrj
403*38fd1498SzrjDEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MIN_U64, BRIG_ATOMIC_MIN,
404*38fd1498Szrj			 BRIG_TYPE_U64, "__hsail_atomic_min_u64",
405*38fd1498Szrj			 BT_FN_ULONG_PTR_ULONG, ATTR_NOTHROW_LEAF_LIST)
406*38fd1498Szrj
407*38fd1498SzrjDEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MAX_S32, BRIG_ATOMIC_MAX,
408*38fd1498Szrj			 BRIG_TYPE_S32, "__hsail_atomic_max_s32",
409*38fd1498Szrj			 BT_FN_INT_PTR_INT, ATTR_NOTHROW_LEAF_LIST)
410*38fd1498Szrj
411*38fd1498SzrjDEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MAX_S64, BRIG_ATOMIC_MAX,
412*38fd1498Szrj			 BRIG_TYPE_S64, "__hsail_atomic_max_s64",
413*38fd1498Szrj			 BT_FN_LONG_PTR_LONG, ATTR_NOTHROW_LEAF_LIST)
414*38fd1498Szrj
415*38fd1498SzrjDEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MAX_U32, BRIG_ATOMIC_MAX,
416*38fd1498Szrj			 BRIG_TYPE_U32, "__hsail_atomic_max_u32",
417*38fd1498Szrj			 BT_FN_UINT_PTR_UINT, ATTR_NOTHROW_LEAF_LIST)
418*38fd1498Szrj
419*38fd1498SzrjDEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MAX_U64, BRIG_ATOMIC_MAX,
420*38fd1498Szrj			 BRIG_TYPE_U64, "__hsail_atomic_max_u64",
421*38fd1498Szrj			 BT_FN_ULONG_PTR_ULONG, ATTR_NOTHROW_LEAF_LIST)
422*38fd1498Szrj
423*38fd1498SzrjDEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_WRAPDEC_U32,
424*38fd1498Szrj			 BRIG_ATOMIC_WRAPDEC, BRIG_TYPE_U32,
425*38fd1498Szrj			 "__hsail_atomic_wrapdec_u32",
426*38fd1498Szrj			 BT_FN_UINT_PTR_UINT, ATTR_NOTHROW_LEAF_LIST)
427*38fd1498Szrj
428*38fd1498SzrjDEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_WRAPDEC_U64,
429*38fd1498Szrj			 BRIG_ATOMIC_WRAPDEC, BRIG_TYPE_U64,
430*38fd1498Szrj			 "__hsail_atomic_wrapdec_u64",
431*38fd1498Szrj			 BT_FN_ULONG_PTR_ULONG, ATTR_NOTHROW_LEAF_LIST)
432*38fd1498Szrj
433*38fd1498SzrjDEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_WRAPINC_U32,
434*38fd1498Szrj			 BRIG_ATOMIC_WRAPINC, BRIG_TYPE_U32,
435*38fd1498Szrj			 "__hsail_atomic_wrapinc_u32",
436*38fd1498Szrj			 BT_FN_UINT_PTR_UINT, ATTR_NOTHROW_LEAF_LIST)
437*38fd1498Szrj
438*38fd1498SzrjDEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_WRAPINC_U64,
439*38fd1498Szrj			 BRIG_ATOMIC_WRAPINC, BRIG_TYPE_U64,
440*38fd1498Szrj			 "__hsail_atomic_wrapinc_u64",
441*38fd1498Szrj			 BT_FN_ULONG_PTR_ULONG, ATTR_NOTHROW_LEAF_LIST)
442*38fd1498Szrj
443*38fd1498Szrj#ifndef DEF_HSAIL_SAT_BUILTIN
444*38fd1498Szrj#define DEF_HSAIL_SAT_BUILTIN(ENUM, HSAIL_OPCODE, HSAIL_TYPE,	\
445*38fd1498Szrj			      NAME, TYPE, ATTRS)
446*38fd1498Szrj#endif
447*38fd1498Szrj
448*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_U64, BRIG_OPCODE_ADD,
449*38fd1498Szrj		      BRIG_TYPE_U64, "__hsail_sat_add_u64",
450*38fd1498Szrj		      BT_FN_ULONG_ULONG_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
451*38fd1498Szrj
452*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_S64, BRIG_OPCODE_ADD,
453*38fd1498Szrj		      BRIG_TYPE_S64, "__hsail_sat_add_s64",
454*38fd1498Szrj		      BT_FN_LONG_LONG_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
455*38fd1498Szrj
456*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_U32, BRIG_OPCODE_ADD,
457*38fd1498Szrj		      BRIG_TYPE_U32, "__hsail_sat_add_u32",
458*38fd1498Szrj		      BT_FN_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
459*38fd1498Szrj
460*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_S32, BRIG_OPCODE_ADD,
461*38fd1498Szrj		      BRIG_TYPE_S32, "__hsail_sat_add_s32",
462*38fd1498Szrj		      BT_FN_INT_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
463*38fd1498Szrj
464*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_U16, BRIG_OPCODE_ADD,
465*38fd1498Szrj		      BRIG_TYPE_U16, "__hsail_sat_add_u16",
466*38fd1498Szrj		      BT_FN_UINT16_UINT16_UINT16, ATTR_CONST_NOTHROW_LEAF_LIST)
467*38fd1498Szrj
468*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_S16, BRIG_OPCODE_ADD,
469*38fd1498Szrj		      BRIG_TYPE_S16, "__hsail_sat_add_s16",
470*38fd1498Szrj		      BT_FN_INT16_INT16_INT16, ATTR_CONST_NOTHROW_LEAF_LIST)
471*38fd1498Szrj
472*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_U8, BRIG_OPCODE_ADD,
473*38fd1498Szrj		      BRIG_TYPE_U8, "__hsail_sat_add_u8",
474*38fd1498Szrj		      BT_FN_UINT8_UINT8_UINT8, ATTR_CONST_NOTHROW_LEAF_LIST)
475*38fd1498Szrj
476*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_S8, BRIG_OPCODE_ADD,
477*38fd1498Szrj		      BRIG_TYPE_S8, "__hsail_sat_add_s8",
478*38fd1498Szrj		      BT_FN_INT8_INT8_INT8, ATTR_CONST_NOTHROW_LEAF_LIST)
479*38fd1498Szrj
480*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_U64, BRIG_OPCODE_SUB,
481*38fd1498Szrj		      BRIG_TYPE_U64, "__hsail_sat_sub_u64",
482*38fd1498Szrj		      BT_FN_ULONG_ULONG_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
483*38fd1498Szrj
484*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_S64, BRIG_OPCODE_SUB,
485*38fd1498Szrj		      BRIG_TYPE_S64, "__hsail_sat_sub_s64",
486*38fd1498Szrj		      BT_FN_LONG_LONG_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
487*38fd1498Szrj
488*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_U32, BRIG_OPCODE_SUB,
489*38fd1498Szrj		      BRIG_TYPE_U32, "__hsail_sat_sub_u32",
490*38fd1498Szrj		      BT_FN_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
491*38fd1498Szrj
492*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_S32, BRIG_OPCODE_SUB,
493*38fd1498Szrj		      BRIG_TYPE_S32, "__hsail_sat_sub_s32",
494*38fd1498Szrj		      BT_FN_INT_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
495*38fd1498Szrj
496*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_U16, BRIG_OPCODE_SUB,
497*38fd1498Szrj		      BRIG_TYPE_U16, "__hsail_sat_sub_u16",
498*38fd1498Szrj		      BT_FN_UINT16_UINT16_UINT16, ATTR_CONST_NOTHROW_LEAF_LIST)
499*38fd1498Szrj
500*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_S16, BRIG_OPCODE_SUB,
501*38fd1498Szrj		      BRIG_TYPE_S16, "__hsail_sat_sub_s16",
502*38fd1498Szrj		      BT_FN_INT16_INT16_INT16, ATTR_CONST_NOTHROW_LEAF_LIST)
503*38fd1498Szrj
504*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_U8, BRIG_OPCODE_SUB,
505*38fd1498Szrj		      BRIG_TYPE_U8, "__hsail_sat_sub_u8",
506*38fd1498Szrj		      BT_FN_UINT8_UINT8_UINT8, ATTR_CONST_NOTHROW_LEAF_LIST)
507*38fd1498Szrj
508*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_S8, BRIG_OPCODE_SUB,
509*38fd1498Szrj		      BRIG_TYPE_S8, "__hsail_sat_sub_s8",
510*38fd1498Szrj		      BT_FN_INT8_INT8_INT8, ATTR_CONST_NOTHROW_LEAF_LIST)
511*38fd1498Szrj
512*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_U64, BRIG_OPCODE_MUL,
513*38fd1498Szrj		      BRIG_TYPE_U64, "__hsail_sat_mul_u64",
514*38fd1498Szrj		      BT_FN_ULONG_ULONG_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
515*38fd1498Szrj
516*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_S64, BRIG_OPCODE_MUL,
517*38fd1498Szrj		      BRIG_TYPE_S64, "__hsail_sat_mul_s64",
518*38fd1498Szrj		      BT_FN_LONG_LONG_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
519*38fd1498Szrj
520*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_U32, BRIG_OPCODE_MUL,
521*38fd1498Szrj		      BRIG_TYPE_U32, "__hsail_sat_mul_u32",
522*38fd1498Szrj		      BT_FN_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
523*38fd1498Szrj
524*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_S32, BRIG_OPCODE_MUL,
525*38fd1498Szrj		      BRIG_TYPE_S32, "__hsail_sat_mul_s32",
526*38fd1498Szrj		      BT_FN_INT_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
527*38fd1498Szrj
528*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_U16, BRIG_OPCODE_MUL,
529*38fd1498Szrj		      BRIG_TYPE_U16, "__hsail_sat_mul_u16",
530*38fd1498Szrj		      BT_FN_UINT16_UINT16_UINT16, ATTR_CONST_NOTHROW_LEAF_LIST)
531*38fd1498Szrj
532*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_S16, BRIG_OPCODE_MUL,
533*38fd1498Szrj		      BRIG_TYPE_S16, "__hsail_sat_mul_s16",
534*38fd1498Szrj		      BT_FN_INT16_INT16_INT16, ATTR_CONST_NOTHROW_LEAF_LIST)
535*38fd1498Szrj
536*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_U8, BRIG_OPCODE_MUL,
537*38fd1498Szrj		      BRIG_TYPE_U8, "__hsail_sat_mul_u8",
538*38fd1498Szrj		      BT_FN_UINT8_UINT8_UINT8, ATTR_CONST_NOTHROW_LEAF_LIST)
539*38fd1498Szrj
540*38fd1498SzrjDEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_S8, BRIG_OPCODE_MUL,
541*38fd1498Szrj		      BRIG_TYPE_S8, "__hsail_sat_mul_s8",
542*38fd1498Szrj		      BT_FN_INT8_INT8_INT8, ATTR_CONST_NOTHROW_LEAF_LIST)
543*38fd1498Szrj
544*38fd1498Szrj#ifndef DEF_HSAIL_INTR_BUILTIN
545*38fd1498Szrj#define DEF_HSAIL_INTR_BUILTIN(ENUM, NAME, TYPE, ATTRS)
546*38fd1498Szrj#endif
547*38fd1498Szrj
548*38fd1498SzrjDEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_FTZ_F32_F16, "__hsail_ftz_f32_f16",
549*38fd1498Szrj		       BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
550*38fd1498Szrj
551*38fd1498SzrjDEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_FTZ_F32, "__hsail_ftz_f32",
552*38fd1498Szrj		       BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
553*38fd1498Szrj
554*38fd1498SzrjDEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_FTZ_F64, "__hsail_ftz_f64",
555*38fd1498Szrj		       BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
556*38fd1498Szrj
557*38fd1498SzrjDEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_PUSH_FRAME, "__hsail_alloca_push_frame",
558*38fd1498Szrj		       BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
559*38fd1498Szrj
560*38fd1498SzrjDEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_POP_FRAME, "__hsail_alloca_pop_frame",
561*38fd1498Szrj		       BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
562*38fd1498Szrj
563*38fd1498SzrjDEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_SETWORKITEMID, "__hsail_setworkitemid",
564*38fd1498Szrj		       BT_FN_VOID_UINT32_UINT32_PTR, ATTR_NOTHROW_LEAF_LIST)
565*38fd1498Szrj
566*38fd1498SzrjDEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_LAUNCH_WG_FUNC,
567*38fd1498Szrj		       "__hsail_launch_wg_function",
568*38fd1498Szrj		       BT_FN_VOID_PTR_PTR_PTR, ATTR_NOTHROW_LEAF_LIST)
569*38fd1498Szrj
570*38fd1498SzrjDEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_LAUNCH_KERNEL,
571*38fd1498Szrj		       "__hsail_launch_kernel",
572*38fd1498Szrj		       BT_FN_VOID_PTR_PTR_PTR, ATTR_NOTHROW_LEAF_LIST)
573*38fd1498Szrj
574*38fd1498SzrjDEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_F32_TO_F16, "__hsail_f32_to_f16",
575*38fd1498Szrj		       BT_FN_UINT16_UINT32, ATTR_CONST_NOTHROW_LEAF_LIST)
576*38fd1498Szrj
577*38fd1498SzrjDEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_F16_TO_F32, "__hsail_f16_to_f32",
578*38fd1498Szrj		       BT_FN_UINT32_UINT16, ATTR_CONST_NOTHROW_LEAF_LIST)
579*38fd1498Szrj
580*38fd1498Szrj#ifndef DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN
581*38fd1498Szrj#define DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN(ENUM, HSAIL_DEST_TYPE, HSAIL_SRC_TYPE, \
582*38fd1498Szrj	NAME, TYPE, ATTRS)
583*38fd1498Szrj#endif
584*38fd1498Szrj
585*38fd1498SzrjDEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U8_F32,
586*38fd1498Szrj				BRIG_TYPE_U8, BRIG_TYPE_F32,
587*38fd1498Szrj		       		"__hsail_cvt_zeroi_sat_u8_f32",
588*38fd1498Szrj				BT_FN_UINT8_FLOAT,
589*38fd1498Szrj				ATTR_CONST_NOTHROW_LEAF_LIST)
590*38fd1498Szrj
591*38fd1498SzrjDEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S8_F32,
592*38fd1498Szrj				BRIG_TYPE_S8, BRIG_TYPE_F32,
593*38fd1498Szrj		       		"__hsail_cvt_zeroi_sat_s8_f32",
594*38fd1498Szrj				BT_FN_INT8_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
595*38fd1498Szrj
596*38fd1498SzrjDEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U16_F32,
597*38fd1498Szrj				BRIG_TYPE_U16, BRIG_TYPE_F32,
598*38fd1498Szrj		       		"__hsail_cvt_zeroi_sat_u16_f32",
599*38fd1498Szrj				BT_FN_UINT16_FLOAT,
600*38fd1498Szrj				ATTR_CONST_NOTHROW_LEAF_LIST)
601*38fd1498Szrj
602*38fd1498SzrjDEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S16_F32,
603*38fd1498Szrj				BRIG_TYPE_S16, BRIG_TYPE_F32,
604*38fd1498Szrj		       		"__hsail_cvt_zeroi_sat_s16_f32",
605*38fd1498Szrj				BT_FN_INT16_FLOAT,
606*38fd1498Szrj				ATTR_CONST_NOTHROW_LEAF_LIST)
607*38fd1498Szrj
608*38fd1498SzrjDEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U32_F32,
609*38fd1498Szrj				BRIG_TYPE_U32, BRIG_TYPE_F32,
610*38fd1498Szrj		       		"__hsail_cvt_zeroi_sat_u32_f32",
611*38fd1498Szrj				BT_FN_UINT32_FLOAT,
612*38fd1498Szrj				ATTR_CONST_NOTHROW_LEAF_LIST)
613*38fd1498Szrj
614*38fd1498SzrjDEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S32_F32,
615*38fd1498Szrj				BRIG_TYPE_S32, BRIG_TYPE_F32,
616*38fd1498Szrj		       		"__hsail_cvt_zeroi_sat_s32_f32",
617*38fd1498Szrj				BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
618*38fd1498Szrj
619*38fd1498SzrjDEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U64_F32,
620*38fd1498Szrj				BRIG_TYPE_U64, BRIG_TYPE_F32,
621*38fd1498Szrj		       		"__hsail_cvt_zeroi_sat_u64_f32",
622*38fd1498Szrj				BT_FN_UINT64_FLOAT,
623*38fd1498Szrj				ATTR_CONST_NOTHROW_LEAF_LIST)
624*38fd1498Szrj
625*38fd1498SzrjDEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S64_F32,
626*38fd1498Szrj				BRIG_TYPE_S64, BRIG_TYPE_F32,
627*38fd1498Szrj		       		"__hsail_cvt_zeroi_sat_s64_f32",
628*38fd1498Szrj				BT_FN_LONG_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
629*38fd1498Szrj
630*38fd1498SzrjDEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U8_F64,
631*38fd1498Szrj				BRIG_TYPE_U8, BRIG_TYPE_F64,
632*38fd1498Szrj		       		"__hsail_cvt_zeroi_sat_u8_f64",
633*38fd1498Szrj				BT_FN_UINT8_FLOAT,
634*38fd1498Szrj				ATTR_CONST_NOTHROW_LEAF_LIST)
635*38fd1498Szrj
636*38fd1498SzrjDEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S8_F64,
637*38fd1498Szrj				BRIG_TYPE_S8, BRIG_TYPE_F64,
638*38fd1498Szrj		       		"__hsail_cvt_zeroi_sat_s8_f64",
639*38fd1498Szrj				BT_FN_INT8_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
640*38fd1498Szrj
641*38fd1498SzrjDEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U16_F64,
642*38fd1498Szrj				BRIG_TYPE_U16, BRIG_TYPE_F64,
643*38fd1498Szrj		       		"__hsail_cvt_zeroi_sat_u16_f64",
644*38fd1498Szrj				BT_FN_UINT16_FLOAT,
645*38fd1498Szrj				ATTR_CONST_NOTHROW_LEAF_LIST)
646*38fd1498Szrj
647*38fd1498SzrjDEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S16_F64,
648*38fd1498Szrj				BRIG_TYPE_S16, BRIG_TYPE_F64,
649*38fd1498Szrj		       		"__hsail_cvt_zeroi_sat_s16_f64",
650*38fd1498Szrj				BT_FN_INT16_FLOAT,
651*38fd1498Szrj				ATTR_CONST_NOTHROW_LEAF_LIST)
652*38fd1498Szrj
653*38fd1498SzrjDEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U32_F64,
654*38fd1498Szrj				BRIG_TYPE_U32, BRIG_TYPE_F64,
655*38fd1498Szrj		       		"__hsail_cvt_zeroi_sat_u32_f64",
656*38fd1498Szrj				BT_FN_UINT32_FLOAT,
657*38fd1498Szrj				ATTR_CONST_NOTHROW_LEAF_LIST)
658*38fd1498Szrj
659*38fd1498SzrjDEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S32_F64,
660*38fd1498Szrj				BRIG_TYPE_S32, BRIG_TYPE_F64,
661*38fd1498Szrj		       		"__hsail_cvt_zeroi_sat_s32_f64",
662*38fd1498Szrj				BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
663*38fd1498Szrj
664*38fd1498SzrjDEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U64_F64,
665*38fd1498Szrj				BRIG_TYPE_U64, BRIG_TYPE_F64,
666*38fd1498Szrj		       		"__hsail_cvt_zeroi_sat_u64_f64",
667*38fd1498Szrj				BT_FN_UINT64_FLOAT,
668*38fd1498Szrj				ATTR_CONST_NOTHROW_LEAF_LIST)
669*38fd1498Szrj
670*38fd1498SzrjDEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S64_F64,
671*38fd1498Szrj				BRIG_TYPE_S64, BRIG_TYPE_F64,
672*38fd1498Szrj		       		"__hsail_cvt_zeroi_sat_s64_f64",
673*38fd1498Szrj				BT_FN_LONG_FLOAT,
674*38fd1498Szrj				ATTR_CONST_NOTHROW_LEAF_LIST)
675