xref: /aosp_15_r20/external/mesa3d/src/microsoft/compiler/dxil_module.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright © Microsoft Corporation
3*61046927SAndroid Build Coastguard Worker  *
4*61046927SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
5*61046927SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
6*61046927SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
7*61046927SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*61046927SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
9*61046927SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
10*61046927SAndroid Build Coastguard Worker  *
11*61046927SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the next
12*61046927SAndroid Build Coastguard Worker  * paragraph) shall be included in all copies or substantial portions of the
13*61046927SAndroid Build Coastguard Worker  * Software.
14*61046927SAndroid Build Coastguard Worker  *
15*61046927SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*61046927SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*61046927SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18*61046927SAndroid Build Coastguard Worker  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19*61046927SAndroid Build Coastguard Worker  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20*61046927SAndroid Build Coastguard Worker  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21*61046927SAndroid Build Coastguard Worker  * IN THE SOFTWARE.
22*61046927SAndroid Build Coastguard Worker  */
23*61046927SAndroid Build Coastguard Worker 
24*61046927SAndroid Build Coastguard Worker  /*
25*61046927SAndroid Build Coastguard Worker   * See the DirectX Shader Compiler for documentation for DXIL details:
26*61046927SAndroid Build Coastguard Worker   * https://github.com/Microsoft/DirectXShaderCompiler/blob/master/docs/DXIL.rst
27*61046927SAndroid Build Coastguard Worker   */
28*61046927SAndroid Build Coastguard Worker 
29*61046927SAndroid Build Coastguard Worker #ifndef DXIL_MODULE_H
30*61046927SAndroid Build Coastguard Worker #define DXIL_MODULE_H
31*61046927SAndroid Build Coastguard Worker 
32*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
33*61046927SAndroid Build Coastguard Worker extern "C" {
34*61046927SAndroid Build Coastguard Worker #endif
35*61046927SAndroid Build Coastguard Worker 
36*61046927SAndroid Build Coastguard Worker #include "dxil_buffer.h"
37*61046927SAndroid Build Coastguard Worker #include "dxil_signature.h"
38*61046927SAndroid Build Coastguard Worker 
39*61046927SAndroid Build Coastguard Worker #include "util/list.h"
40*61046927SAndroid Build Coastguard Worker 
41*61046927SAndroid Build Coastguard Worker 
42*61046927SAndroid Build Coastguard Worker #define DXIL_SHADER_MAX_IO_ROWS 128
43*61046927SAndroid Build Coastguard Worker 
44*61046927SAndroid Build Coastguard Worker enum dxil_shader_kind {
45*61046927SAndroid Build Coastguard Worker    DXIL_PIXEL_SHADER = 0,
46*61046927SAndroid Build Coastguard Worker    DXIL_VERTEX_SHADER = 1,
47*61046927SAndroid Build Coastguard Worker    DXIL_GEOMETRY_SHADER = 2,
48*61046927SAndroid Build Coastguard Worker    DXIL_HULL_SHADER = 3,
49*61046927SAndroid Build Coastguard Worker    DXIL_DOMAIN_SHADER = 4,
50*61046927SAndroid Build Coastguard Worker    DXIL_COMPUTE_SHADER = 5,
51*61046927SAndroid Build Coastguard Worker };
52*61046927SAndroid Build Coastguard Worker 
53*61046927SAndroid Build Coastguard Worker extern int debug_dxil;
54*61046927SAndroid Build Coastguard Worker 
55*61046927SAndroid Build Coastguard Worker enum dxil_debug_flags {
56*61046927SAndroid Build Coastguard Worker    DXIL_DEBUG_VERBOSE    = 1 << 0,
57*61046927SAndroid Build Coastguard Worker    DXIL_DEBUG_DUMP_BLOB  = 1 << 1,
58*61046927SAndroid Build Coastguard Worker    DXIL_DEBUG_TRACE      = 1 << 2,
59*61046927SAndroid Build Coastguard Worker    DXIL_DEBUG_DUMP_MODULE = 1 << 3,
60*61046927SAndroid Build Coastguard Worker };
61*61046927SAndroid Build Coastguard Worker 
62*61046927SAndroid Build Coastguard Worker enum dxil_bin_opcode {
63*61046927SAndroid Build Coastguard Worker    DXIL_BINOP_ADD = 0,
64*61046927SAndroid Build Coastguard Worker    DXIL_BINOP_SUB = 1,
65*61046927SAndroid Build Coastguard Worker    DXIL_BINOP_MUL = 2,
66*61046927SAndroid Build Coastguard Worker    DXIL_BINOP_UDIV = 3,
67*61046927SAndroid Build Coastguard Worker    DXIL_BINOP_SDIV = 4,
68*61046927SAndroid Build Coastguard Worker    DXIL_BINOP_UREM = 5,
69*61046927SAndroid Build Coastguard Worker    DXIL_BINOP_SREM = 6,
70*61046927SAndroid Build Coastguard Worker    DXIL_BINOP_SHL = 7,
71*61046927SAndroid Build Coastguard Worker    DXIL_BINOP_LSHR = 8,
72*61046927SAndroid Build Coastguard Worker    DXIL_BINOP_ASHR = 9,
73*61046927SAndroid Build Coastguard Worker    DXIL_BINOP_AND = 10,
74*61046927SAndroid Build Coastguard Worker    DXIL_BINOP_OR = 11,
75*61046927SAndroid Build Coastguard Worker    DXIL_BINOP_XOR = 12,
76*61046927SAndroid Build Coastguard Worker    DXIL_BINOP_INSTR_COUNT
77*61046927SAndroid Build Coastguard Worker };
78*61046927SAndroid Build Coastguard Worker 
79*61046927SAndroid Build Coastguard Worker enum dxil_cast_opcode {
80*61046927SAndroid Build Coastguard Worker    DXIL_CAST_TRUNC = 0,
81*61046927SAndroid Build Coastguard Worker    DXIL_CAST_ZEXT = 1,
82*61046927SAndroid Build Coastguard Worker    DXIL_CAST_SEXT = 2,
83*61046927SAndroid Build Coastguard Worker    DXIL_CAST_FPTOUI = 3,
84*61046927SAndroid Build Coastguard Worker    DXIL_CAST_FPTOSI = 4,
85*61046927SAndroid Build Coastguard Worker    DXIL_CAST_UITOFP = 5,
86*61046927SAndroid Build Coastguard Worker    DXIL_CAST_SITOFP = 6,
87*61046927SAndroid Build Coastguard Worker    DXIL_CAST_FPTRUNC = 7,
88*61046927SAndroid Build Coastguard Worker    DXIL_CAST_FPEXT = 8,
89*61046927SAndroid Build Coastguard Worker    DXIL_CAST_PTRTOINT = 9,
90*61046927SAndroid Build Coastguard Worker    DXIL_CAST_INTTOPTR = 10,
91*61046927SAndroid Build Coastguard Worker    DXIL_CAST_BITCAST = 11,
92*61046927SAndroid Build Coastguard Worker    DXIL_CAST_ADDRSPACECAST = 12,
93*61046927SAndroid Build Coastguard Worker    DXIL_CAST_INSTR_COUNT
94*61046927SAndroid Build Coastguard Worker };
95*61046927SAndroid Build Coastguard Worker 
96*61046927SAndroid Build Coastguard Worker enum dxil_cmp_pred {
97*61046927SAndroid Build Coastguard Worker    DXIL_FCMP_FALSE = 0,
98*61046927SAndroid Build Coastguard Worker    DXIL_FCMP_OEQ = 1,
99*61046927SAndroid Build Coastguard Worker    DXIL_FCMP_OGT = 2,
100*61046927SAndroid Build Coastguard Worker    DXIL_FCMP_OGE = 3,
101*61046927SAndroid Build Coastguard Worker    DXIL_FCMP_OLT = 4,
102*61046927SAndroid Build Coastguard Worker    DXIL_FCMP_OLE = 5,
103*61046927SAndroid Build Coastguard Worker    DXIL_FCMP_ONE = 6,
104*61046927SAndroid Build Coastguard Worker    DXIL_FCMP_ORD = 7,
105*61046927SAndroid Build Coastguard Worker    DXIL_FCMP_UNO = 8,
106*61046927SAndroid Build Coastguard Worker    DXIL_FCMP_UEQ = 9,
107*61046927SAndroid Build Coastguard Worker    DXIL_FCMP_UGT = 10,
108*61046927SAndroid Build Coastguard Worker    DXIL_FCMP_UGE = 11,
109*61046927SAndroid Build Coastguard Worker    DXIL_FCMP_ULT = 12,
110*61046927SAndroid Build Coastguard Worker    DXIL_FCMP_ULE = 13,
111*61046927SAndroid Build Coastguard Worker    DXIL_FCMP_UNE = 14,
112*61046927SAndroid Build Coastguard Worker    DXIL_FCMP_TRUE = 15,
113*61046927SAndroid Build Coastguard Worker    DXIL_ICMP_EQ = 32,
114*61046927SAndroid Build Coastguard Worker    DXIL_ICMP_NE = 33,
115*61046927SAndroid Build Coastguard Worker    DXIL_ICMP_UGT = 34,
116*61046927SAndroid Build Coastguard Worker    DXIL_ICMP_UGE = 35,
117*61046927SAndroid Build Coastguard Worker    DXIL_ICMP_ULT = 36,
118*61046927SAndroid Build Coastguard Worker    DXIL_ICMP_ULE = 37,
119*61046927SAndroid Build Coastguard Worker    DXIL_ICMP_SGT = 38,
120*61046927SAndroid Build Coastguard Worker    DXIL_ICMP_SGE = 39,
121*61046927SAndroid Build Coastguard Worker    DXIL_ICMP_SLT = 40,
122*61046927SAndroid Build Coastguard Worker    DXIL_ICMP_SLE = 41,
123*61046927SAndroid Build Coastguard Worker    DXIL_CMP_INSTR_COUNT
124*61046927SAndroid Build Coastguard Worker };
125*61046927SAndroid Build Coastguard Worker 
126*61046927SAndroid Build Coastguard Worker enum dxil_opt_flags {
127*61046927SAndroid Build Coastguard Worker   DXIL_UNSAFE_ALGEBRA = (1 << 0),
128*61046927SAndroid Build Coastguard Worker   DXIL_NO_NANS = (1 << 1),
129*61046927SAndroid Build Coastguard Worker   DXIL_NO_INFS = (1 << 2),
130*61046927SAndroid Build Coastguard Worker   DXIL_NO_SIGNED_ZEROS = (1 << 3),
131*61046927SAndroid Build Coastguard Worker   DXIL_ALLOW_RECIPROCAL = (1 << 4)
132*61046927SAndroid Build Coastguard Worker };
133*61046927SAndroid Build Coastguard Worker 
134*61046927SAndroid Build Coastguard Worker struct dxil_features {
135*61046927SAndroid Build Coastguard Worker    uint64_t doubles : 1,
136*61046927SAndroid Build Coastguard Worker             cs_4x_raw_sb : 1,
137*61046927SAndroid Build Coastguard Worker             uavs_at_every_stage : 1,
138*61046927SAndroid Build Coastguard Worker             use_64uavs : 1,
139*61046927SAndroid Build Coastguard Worker             min_precision : 1,
140*61046927SAndroid Build Coastguard Worker             dx11_1_double_extensions : 1,
141*61046927SAndroid Build Coastguard Worker             dx11_1_shader_extensions : 1,
142*61046927SAndroid Build Coastguard Worker             dx9_comparison_filtering : 1,
143*61046927SAndroid Build Coastguard Worker             tiled_resources : 1,
144*61046927SAndroid Build Coastguard Worker             stencil_ref : 1,
145*61046927SAndroid Build Coastguard Worker             inner_coverage : 1,
146*61046927SAndroid Build Coastguard Worker             typed_uav_load_additional_formats : 1,
147*61046927SAndroid Build Coastguard Worker             rovs : 1,
148*61046927SAndroid Build Coastguard Worker             array_layer_from_vs_or_ds : 1,
149*61046927SAndroid Build Coastguard Worker             wave_ops : 1,
150*61046927SAndroid Build Coastguard Worker             int64_ops : 1,
151*61046927SAndroid Build Coastguard Worker             view_id : 1,
152*61046927SAndroid Build Coastguard Worker             barycentrics : 1,
153*61046927SAndroid Build Coastguard Worker             native_low_precision : 1,
154*61046927SAndroid Build Coastguard Worker             shading_rate : 1,
155*61046927SAndroid Build Coastguard Worker             raytracing_tier_1_1 : 1,
156*61046927SAndroid Build Coastguard Worker             sampler_feedback : 1,
157*61046927SAndroid Build Coastguard Worker             atomic_int64_typed : 1,
158*61046927SAndroid Build Coastguard Worker             atomic_int64_tgsm : 1,
159*61046927SAndroid Build Coastguard Worker             derivatives_in_mesh_or_amp : 1,
160*61046927SAndroid Build Coastguard Worker             resource_descriptor_heap_indexing : 1,
161*61046927SAndroid Build Coastguard Worker             sampler_descriptor_heap_indexing : 1,
162*61046927SAndroid Build Coastguard Worker             unnamed : 1,
163*61046927SAndroid Build Coastguard Worker             atomic_int64_heap_resource : 1,
164*61046927SAndroid Build Coastguard Worker             advanced_texture_ops : 1,
165*61046927SAndroid Build Coastguard Worker             writable_msaa : 1,
166*61046927SAndroid Build Coastguard Worker             sample_cmp_bias_gradient : 1,
167*61046927SAndroid Build Coastguard Worker             extended_command_info : 1;
168*61046927SAndroid Build Coastguard Worker };
169*61046927SAndroid Build Coastguard Worker 
170*61046927SAndroid Build Coastguard Worker struct dxil_shader_info {
171*61046927SAndroid Build Coastguard Worker    unsigned has_out_position:1;
172*61046927SAndroid Build Coastguard Worker    unsigned has_out_depth:1;
173*61046927SAndroid Build Coastguard Worker    unsigned has_per_sample_input:1;
174*61046927SAndroid Build Coastguard Worker };
175*61046927SAndroid Build Coastguard Worker 
176*61046927SAndroid Build Coastguard Worker struct dxil_func_def {
177*61046927SAndroid Build Coastguard Worker    struct list_head head;
178*61046927SAndroid Build Coastguard Worker    const struct dxil_func *func;
179*61046927SAndroid Build Coastguard Worker 
180*61046927SAndroid Build Coastguard Worker    struct list_head instr_list;
181*61046927SAndroid Build Coastguard Worker    int *basic_block_ids; /* maps from "user" ids to LLVM ids */
182*61046927SAndroid Build Coastguard Worker    size_t num_basic_block_ids;
183*61046927SAndroid Build Coastguard Worker    unsigned curr_block;
184*61046927SAndroid Build Coastguard Worker };
185*61046927SAndroid Build Coastguard Worker 
186*61046927SAndroid Build Coastguard Worker struct dxil_module {
187*61046927SAndroid Build Coastguard Worker    void *ralloc_ctx;
188*61046927SAndroid Build Coastguard Worker    enum dxil_shader_kind shader_kind;
189*61046927SAndroid Build Coastguard Worker    unsigned major_version, minor_version;
190*61046927SAndroid Build Coastguard Worker    unsigned major_validator, minor_validator;
191*61046927SAndroid Build Coastguard Worker    struct dxil_features feats;
192*61046927SAndroid Build Coastguard Worker    unsigned raw_and_structured_buffers : 1;
193*61046927SAndroid Build Coastguard Worker    struct dxil_shader_info info;
194*61046927SAndroid Build Coastguard Worker 
195*61046927SAndroid Build Coastguard Worker    struct dxil_buffer buf;
196*61046927SAndroid Build Coastguard Worker 
197*61046927SAndroid Build Coastguard Worker    /* The number of entries in the arrays below */
198*61046927SAndroid Build Coastguard Worker    unsigned num_sig_inputs;
199*61046927SAndroid Build Coastguard Worker    unsigned num_sig_outputs;
200*61046927SAndroid Build Coastguard Worker    unsigned num_sig_patch_consts;
201*61046927SAndroid Build Coastguard Worker 
202*61046927SAndroid Build Coastguard Worker    /* The number of "vectors" of elements. This is used to determine the sizes
203*61046927SAndroid Build Coastguard Worker     * of the dependency tables.
204*61046927SAndroid Build Coastguard Worker     */
205*61046927SAndroid Build Coastguard Worker    unsigned num_psv_inputs;
206*61046927SAndroid Build Coastguard Worker    unsigned num_psv_outputs[4];
207*61046927SAndroid Build Coastguard Worker    unsigned num_psv_patch_consts;
208*61046927SAndroid Build Coastguard Worker 
209*61046927SAndroid Build Coastguard Worker    struct dxil_signature_record inputs[DXIL_SHADER_MAX_IO_ROWS];
210*61046927SAndroid Build Coastguard Worker    struct dxil_signature_record outputs[DXIL_SHADER_MAX_IO_ROWS];
211*61046927SAndroid Build Coastguard Worker    struct dxil_signature_record patch_consts[DXIL_SHADER_MAX_IO_ROWS];
212*61046927SAndroid Build Coastguard Worker 
213*61046927SAndroid Build Coastguard Worker    /* This array is indexed using var->data.driver_location, which
214*61046927SAndroid Build Coastguard Worker     * is not a direct match to IO rows, since a row is a vec4, and
215*61046927SAndroid Build Coastguard Worker     * variables can occupy less than that, and several vars can
216*61046927SAndroid Build Coastguard Worker     * be packed in a row. Hence the x4, but I doubt we can end up
217*61046927SAndroid Build Coastguard Worker     * with more than 80x4 variables in practice. Maybe this array
218*61046927SAndroid Build Coastguard Worker     * should be allocated dynamically based on on the maximum
219*61046927SAndroid Build Coastguard Worker     * driver_location across all input vars.
220*61046927SAndroid Build Coastguard Worker     */
221*61046927SAndroid Build Coastguard Worker    unsigned input_mappings[DXIL_SHADER_MAX_IO_ROWS * 4];
222*61046927SAndroid Build Coastguard Worker 
223*61046927SAndroid Build Coastguard Worker    struct dxil_psv_signature_element psv_inputs[DXIL_SHADER_MAX_IO_ROWS];
224*61046927SAndroid Build Coastguard Worker    struct dxil_psv_signature_element psv_outputs[DXIL_SHADER_MAX_IO_ROWS];
225*61046927SAndroid Build Coastguard Worker    struct dxil_psv_signature_element psv_patch_consts[DXIL_SHADER_MAX_IO_ROWS];
226*61046927SAndroid Build Coastguard Worker 
227*61046927SAndroid Build Coastguard Worker    struct _mesa_string_buffer *sem_string_table;
228*61046927SAndroid Build Coastguard Worker    struct dxil_psv_sem_index_table sem_index_table;
229*61046927SAndroid Build Coastguard Worker 
230*61046927SAndroid Build Coastguard Worker    /* These tables are a bitmask per input, with one bit per output
231*61046927SAndroid Build Coastguard Worker     * to indicate whether or not that input contributes to the output.
232*61046927SAndroid Build Coastguard Worker     * Each input's bitmask size is rounded up to a uint32 (DWORD),
233*61046927SAndroid Build Coastguard Worker     * so a bitbask for one output component is the same as for 8 output vec4s.
234*61046927SAndroid Build Coastguard Worker     * Sizes are in number of uint32s.
235*61046927SAndroid Build Coastguard Worker     * Meaning of each array entry depends on shader stage.
236*61046927SAndroid Build Coastguard Worker     * GS: [i] = output stream index
237*61046927SAndroid Build Coastguard Worker     * HS: [0] = control point outputs, [1] = patch constant outputs
238*61046927SAndroid Build Coastguard Worker     * DS: [0] = control point inputs, [1] = patch constant inputs (only for io table)
239*61046927SAndroid Build Coastguard Worker     * PS/VS: only 0 is used. */
240*61046927SAndroid Build Coastguard Worker    uint32_t *serialized_dependency_table;
241*61046927SAndroid Build Coastguard Worker    uint32_t *viewid_dependency_table[4];
242*61046927SAndroid Build Coastguard Worker    uint32_t *io_dependency_table[4];
243*61046927SAndroid Build Coastguard Worker    uint32_t dependency_table_dwords_per_input[4];
244*61046927SAndroid Build Coastguard Worker    uint32_t io_dependency_table_size[4];
245*61046927SAndroid Build Coastguard Worker    uint32_t serialized_dependency_table_size;
246*61046927SAndroid Build Coastguard Worker 
247*61046927SAndroid Build Coastguard Worker    struct {
248*61046927SAndroid Build Coastguard Worker       unsigned abbrev_width;
249*61046927SAndroid Build Coastguard Worker       intptr_t offset;
250*61046927SAndroid Build Coastguard Worker    } blocks[16];
251*61046927SAndroid Build Coastguard Worker    size_t num_blocks;
252*61046927SAndroid Build Coastguard Worker 
253*61046927SAndroid Build Coastguard Worker    struct list_head type_list;
254*61046927SAndroid Build Coastguard Worker    struct list_head gvar_list;
255*61046927SAndroid Build Coastguard Worker    struct list_head func_list;
256*61046927SAndroid Build Coastguard Worker    struct list_head func_def_list;
257*61046927SAndroid Build Coastguard Worker    struct list_head attr_set_list;
258*61046927SAndroid Build Coastguard Worker    struct list_head const_list;
259*61046927SAndroid Build Coastguard Worker    struct list_head mdnode_list;
260*61046927SAndroid Build Coastguard Worker    struct list_head md_named_node_list;
261*61046927SAndroid Build Coastguard Worker    const struct dxil_type *void_type;
262*61046927SAndroid Build Coastguard Worker    const struct dxil_type *int1_type, *int8_type, *int16_type,
263*61046927SAndroid Build Coastguard Worker                           *int32_type, *int64_type;
264*61046927SAndroid Build Coastguard Worker    const struct dxil_type *float16_type, *float32_type, *float64_type;
265*61046927SAndroid Build Coastguard Worker 
266*61046927SAndroid Build Coastguard Worker    struct rb_tree *functions;
267*61046927SAndroid Build Coastguard Worker 
268*61046927SAndroid Build Coastguard Worker    struct dxil_func_def *cur_emitting_func;
269*61046927SAndroid Build Coastguard Worker };
270*61046927SAndroid Build Coastguard Worker 
271*61046927SAndroid Build Coastguard Worker struct dxil_instr;
272*61046927SAndroid Build Coastguard Worker struct dxil_value;
273*61046927SAndroid Build Coastguard Worker 
274*61046927SAndroid Build Coastguard Worker void
275*61046927SAndroid Build Coastguard Worker dxil_module_init(struct dxil_module *m, void *ralloc_ctx);
276*61046927SAndroid Build Coastguard Worker 
277*61046927SAndroid Build Coastguard Worker void
278*61046927SAndroid Build Coastguard Worker dxil_module_release(struct dxil_module *m);
279*61046927SAndroid Build Coastguard Worker 
280*61046927SAndroid Build Coastguard Worker const struct dxil_value *
281*61046927SAndroid Build Coastguard Worker dxil_add_global_var(struct dxil_module *m, const char *name,
282*61046927SAndroid Build Coastguard Worker                     const struct dxil_type *type,
283*61046927SAndroid Build Coastguard Worker                     enum dxil_address_space as, int align,
284*61046927SAndroid Build Coastguard Worker                     const struct dxil_value *value);
285*61046927SAndroid Build Coastguard Worker 
286*61046927SAndroid Build Coastguard Worker const struct dxil_value *
287*61046927SAndroid Build Coastguard Worker dxil_add_global_ptr_var(struct dxil_module *m, const char *name,
288*61046927SAndroid Build Coastguard Worker                         const struct dxil_type *type,
289*61046927SAndroid Build Coastguard Worker                         enum dxil_address_space as, int align,
290*61046927SAndroid Build Coastguard Worker                         const struct dxil_value *value);
291*61046927SAndroid Build Coastguard Worker 
292*61046927SAndroid Build Coastguard Worker struct dxil_func_def *
293*61046927SAndroid Build Coastguard Worker dxil_add_function_def(struct dxil_module *m, const char *name,
294*61046927SAndroid Build Coastguard Worker                       const struct dxil_type *type, unsigned num_blocks,
295*61046927SAndroid Build Coastguard Worker                       const char *const *attr_keys, const char *const *attr_values);
296*61046927SAndroid Build Coastguard Worker 
297*61046927SAndroid Build Coastguard Worker const struct dxil_func *
298*61046927SAndroid Build Coastguard Worker dxil_add_function_decl(struct dxil_module *m, const char *name,
299*61046927SAndroid Build Coastguard Worker                        const struct dxil_type *type,
300*61046927SAndroid Build Coastguard Worker                        enum dxil_attr_kind attr);
301*61046927SAndroid Build Coastguard Worker 
302*61046927SAndroid Build Coastguard Worker const struct dxil_type *
303*61046927SAndroid Build Coastguard Worker dxil_module_get_void_type(struct dxil_module *m);
304*61046927SAndroid Build Coastguard Worker 
305*61046927SAndroid Build Coastguard Worker const struct dxil_type *
306*61046927SAndroid Build Coastguard Worker dxil_module_get_int_type(struct dxil_module *m, unsigned bit_size);
307*61046927SAndroid Build Coastguard Worker 
308*61046927SAndroid Build Coastguard Worker const struct dxil_type *
309*61046927SAndroid Build Coastguard Worker dxil_module_get_float_type(struct dxil_module *m, unsigned bit_size);
310*61046927SAndroid Build Coastguard Worker 
311*61046927SAndroid Build Coastguard Worker const struct dxil_type *
312*61046927SAndroid Build Coastguard Worker dxil_module_get_pointer_type(struct dxil_module *m,
313*61046927SAndroid Build Coastguard Worker                              const struct dxil_type *target);
314*61046927SAndroid Build Coastguard Worker 
315*61046927SAndroid Build Coastguard Worker const struct dxil_type *
316*61046927SAndroid Build Coastguard Worker dxil_get_overload_type(struct dxil_module *mod, enum overload_type overload);
317*61046927SAndroid Build Coastguard Worker 
318*61046927SAndroid Build Coastguard Worker const struct dxil_type *
319*61046927SAndroid Build Coastguard Worker dxil_module_get_handle_type(struct dxil_module *m);
320*61046927SAndroid Build Coastguard Worker 
321*61046927SAndroid Build Coastguard Worker const struct dxil_type *
322*61046927SAndroid Build Coastguard Worker dxil_module_get_cbuf_ret_type(struct dxil_module *mod, enum overload_type overload);
323*61046927SAndroid Build Coastguard Worker 
324*61046927SAndroid Build Coastguard Worker const struct dxil_type *
325*61046927SAndroid Build Coastguard Worker dxil_module_get_split_double_ret_type(struct dxil_module *mod);
326*61046927SAndroid Build Coastguard Worker 
327*61046927SAndroid Build Coastguard Worker const struct dxil_type *
328*61046927SAndroid Build Coastguard Worker dxil_module_get_res_type(struct dxil_module *m, enum dxil_resource_kind kind,
329*61046927SAndroid Build Coastguard Worker                          enum dxil_component_type comp_type, unsigned num_comps,
330*61046927SAndroid Build Coastguard Worker                          bool readwrite);
331*61046927SAndroid Build Coastguard Worker 
332*61046927SAndroid Build Coastguard Worker const struct dxil_type *
333*61046927SAndroid Build Coastguard Worker dxil_module_get_resret_type(struct dxil_module *m, enum overload_type overload);
334*61046927SAndroid Build Coastguard Worker 
335*61046927SAndroid Build Coastguard Worker const struct dxil_type *
336*61046927SAndroid Build Coastguard Worker dxil_module_get_dimret_type(struct dxil_module *m);
337*61046927SAndroid Build Coastguard Worker 
338*61046927SAndroid Build Coastguard Worker const struct dxil_type *
339*61046927SAndroid Build Coastguard Worker dxil_module_get_samplepos_type(struct dxil_module *m);
340*61046927SAndroid Build Coastguard Worker 
341*61046927SAndroid Build Coastguard Worker const struct dxil_type *
342*61046927SAndroid Build Coastguard Worker dxil_module_get_res_bind_type(struct dxil_module *m);
343*61046927SAndroid Build Coastguard Worker 
344*61046927SAndroid Build Coastguard Worker const struct dxil_type *
345*61046927SAndroid Build Coastguard Worker dxil_module_get_res_props_type(struct dxil_module *m);
346*61046927SAndroid Build Coastguard Worker 
347*61046927SAndroid Build Coastguard Worker const struct dxil_type *
348*61046927SAndroid Build Coastguard Worker dxil_module_get_fouri32_type(struct dxil_module *m);
349*61046927SAndroid Build Coastguard Worker 
350*61046927SAndroid Build Coastguard Worker const struct dxil_type *
351*61046927SAndroid Build Coastguard Worker dxil_module_get_struct_type(struct dxil_module *m,
352*61046927SAndroid Build Coastguard Worker                             const char *name,
353*61046927SAndroid Build Coastguard Worker                             const struct dxil_type **elem_types,
354*61046927SAndroid Build Coastguard Worker                             size_t num_elem_types);
355*61046927SAndroid Build Coastguard Worker 
356*61046927SAndroid Build Coastguard Worker const struct dxil_type *
357*61046927SAndroid Build Coastguard Worker dxil_module_get_array_type(struct dxil_module *m,
358*61046927SAndroid Build Coastguard Worker                            const struct dxil_type *elem_type,
359*61046927SAndroid Build Coastguard Worker                            size_t num_elems);
360*61046927SAndroid Build Coastguard Worker 
361*61046927SAndroid Build Coastguard Worker const struct dxil_type *
362*61046927SAndroid Build Coastguard Worker dxil_module_get_vector_type(struct dxil_module *m,
363*61046927SAndroid Build Coastguard Worker                             const struct dxil_type *elem_type,
364*61046927SAndroid Build Coastguard Worker                             size_t num_elems);
365*61046927SAndroid Build Coastguard Worker 
366*61046927SAndroid Build Coastguard Worker const struct dxil_type *
367*61046927SAndroid Build Coastguard Worker dxil_module_add_function_type(struct dxil_module *m,
368*61046927SAndroid Build Coastguard Worker                               const struct dxil_type *ret_type,
369*61046927SAndroid Build Coastguard Worker                               const struct dxil_type **arg_types,
370*61046927SAndroid Build Coastguard Worker                               size_t num_arg_types);
371*61046927SAndroid Build Coastguard Worker 
372*61046927SAndroid Build Coastguard Worker nir_alu_type
373*61046927SAndroid Build Coastguard Worker dxil_type_to_nir_type(const struct dxil_type *type);
374*61046927SAndroid Build Coastguard Worker 
375*61046927SAndroid Build Coastguard Worker bool
376*61046927SAndroid Build Coastguard Worker dxil_value_type_equal_to(const struct dxil_value *value,
377*61046927SAndroid Build Coastguard Worker                          const struct dxil_type *lhs);
378*61046927SAndroid Build Coastguard Worker 
379*61046927SAndroid Build Coastguard Worker bool
380*61046927SAndroid Build Coastguard Worker dxil_value_type_bitsize_equal_to(const struct dxil_value *value, unsigned bitsize);
381*61046927SAndroid Build Coastguard Worker 
382*61046927SAndroid Build Coastguard Worker const struct dxil_type *
383*61046927SAndroid Build Coastguard Worker dxil_value_get_type(const struct dxil_value *value);
384*61046927SAndroid Build Coastguard Worker 
385*61046927SAndroid Build Coastguard Worker const struct dxil_value *
386*61046927SAndroid Build Coastguard Worker dxil_module_get_int1_const(struct dxil_module *m, bool value);
387*61046927SAndroid Build Coastguard Worker 
388*61046927SAndroid Build Coastguard Worker const struct dxil_value *
389*61046927SAndroid Build Coastguard Worker dxil_module_get_int8_const(struct dxil_module *m, int8_t value);
390*61046927SAndroid Build Coastguard Worker 
391*61046927SAndroid Build Coastguard Worker const struct dxil_value *
392*61046927SAndroid Build Coastguard Worker dxil_module_get_int16_const(struct dxil_module *m, int16_t value);
393*61046927SAndroid Build Coastguard Worker 
394*61046927SAndroid Build Coastguard Worker const struct dxil_value *
395*61046927SAndroid Build Coastguard Worker dxil_module_get_int32_const(struct dxil_module *m, int32_t value);
396*61046927SAndroid Build Coastguard Worker 
397*61046927SAndroid Build Coastguard Worker const struct dxil_value *
398*61046927SAndroid Build Coastguard Worker dxil_module_get_int64_const(struct dxil_module *m, int64_t value);
399*61046927SAndroid Build Coastguard Worker 
400*61046927SAndroid Build Coastguard Worker const struct dxil_value *
401*61046927SAndroid Build Coastguard Worker dxil_module_get_int_const(struct dxil_module *m, intmax_t value,
402*61046927SAndroid Build Coastguard Worker                           unsigned bit_size);
403*61046927SAndroid Build Coastguard Worker 
404*61046927SAndroid Build Coastguard Worker const struct dxil_value *
405*61046927SAndroid Build Coastguard Worker dxil_module_get_float16_const(struct dxil_module *m, uint16_t);
406*61046927SAndroid Build Coastguard Worker 
407*61046927SAndroid Build Coastguard Worker const struct dxil_value *
408*61046927SAndroid Build Coastguard Worker dxil_module_get_float_const(struct dxil_module *m, float value);
409*61046927SAndroid Build Coastguard Worker 
410*61046927SAndroid Build Coastguard Worker const struct dxil_value *
411*61046927SAndroid Build Coastguard Worker dxil_module_get_double_const(struct dxil_module *m, double value);
412*61046927SAndroid Build Coastguard Worker 
413*61046927SAndroid Build Coastguard Worker const struct dxil_value *
414*61046927SAndroid Build Coastguard Worker dxil_module_get_array_const(struct dxil_module *m, const struct dxil_type *type,
415*61046927SAndroid Build Coastguard Worker                             const struct dxil_value **values);
416*61046927SAndroid Build Coastguard Worker 
417*61046927SAndroid Build Coastguard Worker const struct dxil_value *
418*61046927SAndroid Build Coastguard Worker dxil_module_get_vector_const(struct dxil_module *m, const struct dxil_type *type,
419*61046927SAndroid Build Coastguard Worker                              const struct dxil_value **values);
420*61046927SAndroid Build Coastguard Worker 
421*61046927SAndroid Build Coastguard Worker const struct dxil_value *
422*61046927SAndroid Build Coastguard Worker dxil_module_get_struct_const(struct dxil_module *m, const struct dxil_type *type,
423*61046927SAndroid Build Coastguard Worker                              const struct dxil_value **values);
424*61046927SAndroid Build Coastguard Worker 
425*61046927SAndroid Build Coastguard Worker const struct dxil_value *
426*61046927SAndroid Build Coastguard Worker dxil_module_get_undef(struct dxil_module *m, const struct dxil_type *type);
427*61046927SAndroid Build Coastguard Worker 
428*61046927SAndroid Build Coastguard Worker const struct dxil_value *
429*61046927SAndroid Build Coastguard Worker dxil_module_get_res_bind_const(struct dxil_module *m,
430*61046927SAndroid Build Coastguard Worker                                uint32_t lower_bound,
431*61046927SAndroid Build Coastguard Worker                                uint32_t upper_bound,
432*61046927SAndroid Build Coastguard Worker                                uint32_t space,
433*61046927SAndroid Build Coastguard Worker                                uint8_t class);
434*61046927SAndroid Build Coastguard Worker 
435*61046927SAndroid Build Coastguard Worker const struct dxil_value *
436*61046927SAndroid Build Coastguard Worker dxil_module_get_res_props_const(struct dxil_module *m,
437*61046927SAndroid Build Coastguard Worker                                 enum dxil_resource_class class,
438*61046927SAndroid Build Coastguard Worker                                 const struct dxil_mdnode *mdnode);
439*61046927SAndroid Build Coastguard Worker 
440*61046927SAndroid Build Coastguard Worker const struct dxil_value *
441*61046927SAndroid Build Coastguard Worker dxil_module_get_srv_res_props_const(struct dxil_module *m,
442*61046927SAndroid Build Coastguard Worker                                     const nir_tex_instr *tex);
443*61046927SAndroid Build Coastguard Worker 
444*61046927SAndroid Build Coastguard Worker const struct dxil_value *
445*61046927SAndroid Build Coastguard Worker dxil_module_get_sampler_res_props_const(struct dxil_module *m,
446*61046927SAndroid Build Coastguard Worker                                         bool is_shadow);
447*61046927SAndroid Build Coastguard Worker 
448*61046927SAndroid Build Coastguard Worker const struct dxil_value *
449*61046927SAndroid Build Coastguard Worker dxil_module_get_uav_res_props_const(struct dxil_module *m,
450*61046927SAndroid Build Coastguard Worker                                     nir_intrinsic_instr *intr);
451*61046927SAndroid Build Coastguard Worker 
452*61046927SAndroid Build Coastguard Worker const struct dxil_value *
453*61046927SAndroid Build Coastguard Worker dxil_module_get_buffer_res_props_const(struct dxil_module *m,
454*61046927SAndroid Build Coastguard Worker                                        enum dxil_resource_class class,
455*61046927SAndroid Build Coastguard Worker                                        enum dxil_resource_kind kind);
456*61046927SAndroid Build Coastguard Worker 
457*61046927SAndroid Build Coastguard Worker const struct dxil_mdnode *
458*61046927SAndroid Build Coastguard Worker dxil_get_metadata_string(struct dxil_module *m, const char *str);
459*61046927SAndroid Build Coastguard Worker 
460*61046927SAndroid Build Coastguard Worker const struct dxil_mdnode *
461*61046927SAndroid Build Coastguard Worker dxil_get_metadata_value(struct dxil_module *m, const struct dxil_type *type,
462*61046927SAndroid Build Coastguard Worker                         const struct dxil_value *value);
463*61046927SAndroid Build Coastguard Worker 
464*61046927SAndroid Build Coastguard Worker const struct dxil_mdnode *
465*61046927SAndroid Build Coastguard Worker dxil_get_metadata_func(struct dxil_module *m, const struct dxil_func *func);
466*61046927SAndroid Build Coastguard Worker 
467*61046927SAndroid Build Coastguard Worker const struct dxil_mdnode *
468*61046927SAndroid Build Coastguard Worker dxil_get_metadata_int1(struct dxil_module *m, bool value);
469*61046927SAndroid Build Coastguard Worker 
470*61046927SAndroid Build Coastguard Worker const struct dxil_mdnode *
471*61046927SAndroid Build Coastguard Worker dxil_get_metadata_int8(struct dxil_module *m, int8_t value);
472*61046927SAndroid Build Coastguard Worker 
473*61046927SAndroid Build Coastguard Worker const struct dxil_mdnode *
474*61046927SAndroid Build Coastguard Worker dxil_get_metadata_int32(struct dxil_module *m, int32_t value);
475*61046927SAndroid Build Coastguard Worker 
476*61046927SAndroid Build Coastguard Worker const struct dxil_mdnode *
477*61046927SAndroid Build Coastguard Worker dxil_get_metadata_int64(struct dxil_module *m, int64_t value);
478*61046927SAndroid Build Coastguard Worker 
479*61046927SAndroid Build Coastguard Worker const struct dxil_mdnode *
480*61046927SAndroid Build Coastguard Worker dxil_get_metadata_float32(struct dxil_module *m, float value);
481*61046927SAndroid Build Coastguard Worker 
482*61046927SAndroid Build Coastguard Worker const struct dxil_mdnode *
483*61046927SAndroid Build Coastguard Worker dxil_get_metadata_node(struct dxil_module *m,
484*61046927SAndroid Build Coastguard Worker                        const struct dxil_mdnode *subnodes[],
485*61046927SAndroid Build Coastguard Worker                        size_t num_subnodes);
486*61046927SAndroid Build Coastguard Worker 
487*61046927SAndroid Build Coastguard Worker bool
488*61046927SAndroid Build Coastguard Worker dxil_add_metadata_named_node(struct dxil_module *m, const char *name,
489*61046927SAndroid Build Coastguard Worker                              const struct dxil_mdnode *subnodes[],
490*61046927SAndroid Build Coastguard Worker                              size_t num_subnodes);
491*61046927SAndroid Build Coastguard Worker 
492*61046927SAndroid Build Coastguard Worker const struct dxil_value *
493*61046927SAndroid Build Coastguard Worker dxil_emit_binop(struct dxil_module *m, enum dxil_bin_opcode opcode,
494*61046927SAndroid Build Coastguard Worker                 const struct dxil_value *op0, const struct dxil_value *op1,
495*61046927SAndroid Build Coastguard Worker                 enum dxil_opt_flags flags);
496*61046927SAndroid Build Coastguard Worker 
497*61046927SAndroid Build Coastguard Worker const struct dxil_value *
498*61046927SAndroid Build Coastguard Worker dxil_emit_cmp(struct dxil_module *m, enum dxil_cmp_pred pred,
499*61046927SAndroid Build Coastguard Worker               const struct dxil_value *op0, const struct dxil_value *op1);
500*61046927SAndroid Build Coastguard Worker 
501*61046927SAndroid Build Coastguard Worker const struct dxil_value *
502*61046927SAndroid Build Coastguard Worker dxil_emit_select(struct dxil_module *m,
503*61046927SAndroid Build Coastguard Worker                 const struct dxil_value *op0,
504*61046927SAndroid Build Coastguard Worker                 const struct dxil_value *op1,
505*61046927SAndroid Build Coastguard Worker                 const struct dxil_value *op2);
506*61046927SAndroid Build Coastguard Worker 
507*61046927SAndroid Build Coastguard Worker const struct dxil_value *
508*61046927SAndroid Build Coastguard Worker dxil_emit_extractval(struct dxil_module *m, const struct dxil_value *src,
509*61046927SAndroid Build Coastguard Worker                      const unsigned int index);
510*61046927SAndroid Build Coastguard Worker 
511*61046927SAndroid Build Coastguard Worker const struct dxil_value *
512*61046927SAndroid Build Coastguard Worker dxil_emit_cast(struct dxil_module *m, enum dxil_cast_opcode opcode,
513*61046927SAndroid Build Coastguard Worker                const struct dxil_type *type,
514*61046927SAndroid Build Coastguard Worker                const struct dxil_value *value);
515*61046927SAndroid Build Coastguard Worker 
516*61046927SAndroid Build Coastguard Worker bool
517*61046927SAndroid Build Coastguard Worker dxil_emit_branch(struct dxil_module *m, const struct dxil_value *cond,
518*61046927SAndroid Build Coastguard Worker                  unsigned true_block, unsigned false_block);
519*61046927SAndroid Build Coastguard Worker 
520*61046927SAndroid Build Coastguard Worker const struct dxil_value *
521*61046927SAndroid Build Coastguard Worker dxil_instr_get_return_value(struct dxil_instr *instr);
522*61046927SAndroid Build Coastguard Worker 
523*61046927SAndroid Build Coastguard Worker struct dxil_instr *
524*61046927SAndroid Build Coastguard Worker dxil_emit_phi(struct dxil_module *m, const struct dxil_type *type);
525*61046927SAndroid Build Coastguard Worker 
526*61046927SAndroid Build Coastguard Worker bool
527*61046927SAndroid Build Coastguard Worker dxil_phi_add_incoming(struct dxil_instr *instr,
528*61046927SAndroid Build Coastguard Worker                       const struct dxil_value *incoming_values[],
529*61046927SAndroid Build Coastguard Worker                       const unsigned incoming_blocks[],
530*61046927SAndroid Build Coastguard Worker                       size_t num_incoming);
531*61046927SAndroid Build Coastguard Worker 
532*61046927SAndroid Build Coastguard Worker const struct dxil_value *
533*61046927SAndroid Build Coastguard Worker dxil_emit_call(struct dxil_module *m,
534*61046927SAndroid Build Coastguard Worker                const struct dxil_func *func,
535*61046927SAndroid Build Coastguard Worker                const struct dxil_value **args, size_t num_args);
536*61046927SAndroid Build Coastguard Worker 
537*61046927SAndroid Build Coastguard Worker bool
538*61046927SAndroid Build Coastguard Worker dxil_emit_call_void(struct dxil_module *m,
539*61046927SAndroid Build Coastguard Worker                     const struct dxil_func *func,
540*61046927SAndroid Build Coastguard Worker                     const struct dxil_value **args, size_t num_args);
541*61046927SAndroid Build Coastguard Worker 
542*61046927SAndroid Build Coastguard Worker bool
543*61046927SAndroid Build Coastguard Worker dxil_emit_ret_void(struct dxil_module *m);
544*61046927SAndroid Build Coastguard Worker 
545*61046927SAndroid Build Coastguard Worker const struct dxil_value *
546*61046927SAndroid Build Coastguard Worker dxil_emit_alloca(struct dxil_module *m, const struct dxil_type *alloc_type,
547*61046927SAndroid Build Coastguard Worker                  const struct dxil_value *size,
548*61046927SAndroid Build Coastguard Worker                  unsigned int align);
549*61046927SAndroid Build Coastguard Worker 
550*61046927SAndroid Build Coastguard Worker const struct dxil_value *
551*61046927SAndroid Build Coastguard Worker dxil_emit_gep_inbounds(struct dxil_module *m,
552*61046927SAndroid Build Coastguard Worker                        const struct dxil_value **operands,
553*61046927SAndroid Build Coastguard Worker                        size_t num_operands);
554*61046927SAndroid Build Coastguard Worker 
555*61046927SAndroid Build Coastguard Worker const struct dxil_value *
556*61046927SAndroid Build Coastguard Worker dxil_emit_load(struct dxil_module *m, const struct dxil_value *ptr,
557*61046927SAndroid Build Coastguard Worker                unsigned align,
558*61046927SAndroid Build Coastguard Worker                bool is_volatile);
559*61046927SAndroid Build Coastguard Worker 
560*61046927SAndroid Build Coastguard Worker bool
561*61046927SAndroid Build Coastguard Worker dxil_emit_store(struct dxil_module *m, const struct dxil_value *value,
562*61046927SAndroid Build Coastguard Worker                 const struct dxil_value *ptr, unsigned align,
563*61046927SAndroid Build Coastguard Worker                 bool is_volatile);
564*61046927SAndroid Build Coastguard Worker 
565*61046927SAndroid Build Coastguard Worker const struct dxil_value *
566*61046927SAndroid Build Coastguard Worker dxil_emit_cmpxchg(struct dxil_module *m, const struct dxil_value *cmpval,
567*61046927SAndroid Build Coastguard Worker                   const struct dxil_value *newval,
568*61046927SAndroid Build Coastguard Worker                   const struct dxil_value *ptr, bool is_volatile,
569*61046927SAndroid Build Coastguard Worker                   enum dxil_atomic_ordering ordering,
570*61046927SAndroid Build Coastguard Worker                   enum dxil_sync_scope syncscope);
571*61046927SAndroid Build Coastguard Worker 
572*61046927SAndroid Build Coastguard Worker const struct dxil_value *
573*61046927SAndroid Build Coastguard Worker dxil_emit_atomicrmw(struct dxil_module *m, const struct dxil_value *value,
574*61046927SAndroid Build Coastguard Worker                     const struct dxil_value *ptr, enum dxil_rmw_op op,
575*61046927SAndroid Build Coastguard Worker                     bool is_volatile, enum dxil_atomic_ordering ordering,
576*61046927SAndroid Build Coastguard Worker                     enum dxil_sync_scope syncscope);
577*61046927SAndroid Build Coastguard Worker 
578*61046927SAndroid Build Coastguard Worker bool
579*61046927SAndroid Build Coastguard Worker dxil_emit_module(struct dxil_module *m);
580*61046927SAndroid Build Coastguard Worker 
581*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
582*61046927SAndroid Build Coastguard Worker }
583*61046927SAndroid Build Coastguard Worker #endif
584*61046927SAndroid Build Coastguard Worker 
585*61046927SAndroid Build Coastguard Worker #endif
586