121
129
% if opcode.has_dest:
122
130
% if opcode.dest_components == 0:
123
nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, ${get_intrinsic_bitsize(opcode)}, NULL);
131
nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, ${get_intrinsic_bitsize(opcode)});
125
nir_ssa_dest_init(&intrin->instr, &intrin->dest, ${opcode.dest_components}, ${get_intrinsic_bitsize(opcode)}, NULL);
133
nir_ssa_dest_init(&intrin->instr, &intrin->dest, ${opcode.dest_components}, ${get_intrinsic_bitsize(opcode)});
128
136
% for i in range(opcode.num_srcs):
155
163
% for name, opcode in sorted(INTR_OPCODES.items()):
156
164
% if opcode.indices:
157
165
#ifdef __cplusplus
158
#define nir_build_${name}(build${intrinsic_macro_list(opcode)}, ...) ${'\\\\'}
166
#define ${intrinsic_prefix(name)}_${name}(build${intrinsic_macro_list(opcode)}, ...) ${'\\\\'}
159
167
_nir_build_${name}(build${intrinsic_macro_list(opcode)}, _nir_${name}_indices{0, __VA_ARGS__})
161
#define nir_build_${name}(build${intrinsic_macro_list(opcode)}, ...) ${'\\\\'}
169
#define ${intrinsic_prefix(name)}_${name}(build${intrinsic_macro_list(opcode)}, ...) ${'\\\\'}
162
170
_nir_build_${name}(build${intrinsic_macro_list(opcode)}, (struct _nir_${name}_indices){0, __VA_ARGS__})
165
#define nir_build_${name} _nir_build_${name}
173
#define nir_${name} _nir_build_${name}
175
% if name in build_prefixed_intrinsics:
167
176
#define nir_${name} nir_build_${name}
180
% for name in ['flt', 'fge', 'feq', 'fneu']:
181
static inline nir_ssa_def *
182
nir_${name}_imm(nir_builder *build, nir_ssa_def *src1, double src2)
184
return nir_${name}(build, src1, nir_imm_floatN_t(build, src2, src1->bit_size));
188
% for name in ['ilt', 'ige', 'ieq', 'ine', 'ult', 'uge']:
189
static inline nir_ssa_def *
190
nir_${name}_imm(nir_builder *build, nir_ssa_def *src1, uint64_t src2)
192
return nir_${name}(build, src1, nir_imm_intN_t(build, src2, src1->bit_size));
196
% for prefix in ['i', 'u']:
197
static inline nir_ssa_def *
198
nir_${prefix}gt_imm(nir_builder *build, nir_ssa_def *src1, uint64_t src2)
200
return nir_${prefix}lt(build, nir_imm_intN_t(build, src2, src1->bit_size), src1);
203
static inline nir_ssa_def *
204
nir_${prefix}le_imm(nir_builder *build, nir_ssa_def *src1, uint64_t src2)
206
return nir_${prefix}ge(build, nir_imm_intN_t(build, src2, src1->bit_size), src1);
170
210
#endif /* _NIR_BUILDER_OPCODES_ */"""
173
213
from nir_intrinsics import INTR_OPCODES, WRITE_MASK, ALIGN_MUL
174
214
from mako.template import Template
216
# List of intrinsics that also need a nir_build_ prefixed factory macro.
217
build_prefixed_intrinsics = [
226
"load_global_constant",
176
235
print(Template(template).render(opcodes=opcodes,
177
236
type_size=type_size,
178
237
type_base_type=type_base_type,
179
238
INTR_OPCODES=INTR_OPCODES,
180
239
WRITE_MASK=WRITE_MASK,
181
ALIGN_MUL=ALIGN_MUL))
241
build_prefixed_intrinsics=build_prefixed_intrinsics))