mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 00:49:04 +02:00
pco, pygen: add support for instructions with variable srcs/dests
Signed-off-by: Simon Perretta <simon.perretta@imgtec.com> Acked-by: Frank Binns <frank.binns@imgtec.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32258>
This commit is contained in:
parent
45139c72f7
commit
fab0ef7d59
2 changed files with 32 additions and 13 deletions
|
|
@ -127,18 +127,28 @@ pco_instr *_${op.bname}(${op.builder_params[0]})
|
|||
{
|
||||
pco_instr *instr = pco_instr_create(${op.builder_params[4]},
|
||||
${op.cname.upper()},
|
||||
${op.num_dests},
|
||||
${op.num_srcs});
|
||||
${'num_dests' if op.num_dests == VARIABLE else op.num_dests},
|
||||
${'num_srcs' if op.num_srcs == VARIABLE else op.num_srcs});
|
||||
|
||||
% if op.has_target_cf_node:
|
||||
instr->target_cf_node = target_cf_node;
|
||||
% endif
|
||||
% for d in range(op.num_dests):
|
||||
% if op.num_dests == VARIABLE:
|
||||
for (unsigned d = 0; d < num_dests; ++d)
|
||||
instr->dest[d] = dest[d];
|
||||
% else:
|
||||
% for d in range(op.num_dests):
|
||||
instr->dest[${d}] = dest${d};
|
||||
% endfor
|
||||
% for s in range(op.num_srcs):
|
||||
% endfor
|
||||
% endif
|
||||
% if op.num_srcs == VARIABLE:
|
||||
for (unsigned s = 0; s < num_srcs; ++s)
|
||||
instr->src[s] = src[s];
|
||||
% else:
|
||||
% for s in range(op.num_srcs):
|
||||
instr->src[${s}] = src${s};
|
||||
% endfor
|
||||
% endfor
|
||||
% endif
|
||||
|
||||
% for op_mod in op.op_mods:
|
||||
% if op_mod.t.nzdefault is None:
|
||||
|
|
@ -159,7 +169,7 @@ pco_instr *_${op.bname}(${op.builder_params[0]})
|
|||
|
||||
def main():
|
||||
try:
|
||||
print(Template(template).render(ops=ops, op_mods=op_mods, ref_mods=ref_mods))
|
||||
print(Template(template).render(ops=ops, op_mods=op_mods, ref_mods=ref_mods, VARIABLE=VARIABLE))
|
||||
except:
|
||||
raise Exception(exceptions.text_error_template().render())
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
from enum import Enum, auto
|
||||
|
||||
_ = None
|
||||
VARIABLE = ~0
|
||||
|
||||
prefix = 'pco'
|
||||
|
||||
|
|
@ -455,13 +456,21 @@ def op(name, op_type, op_mods, num_dests, num_srcs, dest_mods, src_mods, has_tar
|
|||
builder_params[0] += ', pco_cf_node *target_cf_node'
|
||||
builder_params[1] += ', target_cf_node'
|
||||
|
||||
for d in range(num_dests):
|
||||
builder_params[0] += f', pco_ref dest{d}'
|
||||
builder_params[1] += f', dest{d}'
|
||||
if num_dests == VARIABLE:
|
||||
builder_params[0] += f', unsigned num_dests, pco_ref *dest'
|
||||
builder_params[1] += f', num_dests, dests'
|
||||
else:
|
||||
for d in range(num_dests):
|
||||
builder_params[0] += f', pco_ref dest{d}'
|
||||
builder_params[1] += f', dest{d}'
|
||||
|
||||
for s in range(num_srcs):
|
||||
builder_params[0] += f', pco_ref src{s}'
|
||||
builder_params[1] += f', src{s}'
|
||||
if num_srcs == VARIABLE:
|
||||
builder_params[0] += f', unsigned num_srcs, pco_ref *src'
|
||||
builder_params[1] += f', num_srcs, srcs'
|
||||
else:
|
||||
for s in range(num_srcs):
|
||||
builder_params[0] += f', pco_ref src{s}'
|
||||
builder_params[1] += f', src{s}'
|
||||
|
||||
if bool(op_mods):
|
||||
builder_params[0] += f', struct {prefix}_{_name}_mods mods'
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue